L3DT documentation
Large 3D terrain generator

Development plan for L3DT release 17.0X

Due date: early/mid 2017

Code name: Frogger.


64-bit version

  • DONE Compile 64-bit version of L3DT Pro.
  • Finish plugins
    • TODO VFW.
    • TODO PCX.
  • TODO Copy all updated plugins to installer.
  • DONE Modify installer for 64-bit.
  • DONE Run acid test batch script, and debug any problems.
  • DONE Test with Sapphire.
  • TODO Test mesh exporter.
  • DONE Release dev build.
  • TODO Keep testing!


  • TODO Upload cross-platform library code with Josh H.'s fixes.

Finalisation wizard

  • DONE Add 'Finalisation' to end of calc queue.
  • DONE Have RunFinalisationList check for group activity at start of each operation, and if group busy, exit and flag to resume when group is no longer active. Is checked in timer loop, so is running in UI thread. Also have wait for mipmaps &c.
    • DONE Protect with critical section to prevent race conditions when going in and out of threadcalcs.
  • DONE Add wizard controls
  • DONE Added flags to ops, reserved for future use.
  • Add following finalisation options (with custom UIs):
    • DONE SaveProject
      • DONE Add code to verify project is saved before calc starts.
    • DONE SaveProjectAs
    • DONE RunScript
    • DONE RunScriptFile
    • DONE RunGraphFile (run in thread, deferring subsequent finalisation)
    • DONE PlayWAV
    • DONE SystemSleep
      • TODO Add code (in OnNext) to warn user if ops follow sleep.
    • TODO ExportMapLayer
    • TODO Quit
    • TODO MessageBox (needs text & style params)
    • TODO SystemShutdown
    • TODO SystemCommandLine
    • TODO ShellExecute (needs target, verb & flags params)
  • TODO Add wizard preset support
    • TODO Default (is single SaveProject)
  • DONE Added to user guide (see here).
  • TODO Add load/save options for finalisation list, and ability to run finalisation in batch run.

Roads, pathfinding & points of interest

  • TODO All the things!


  • Improve HUD text visibility
    • DONE Added semitransparent background to HUD, and changed text colour to white.
    • DONE Changed to using system UI font.
  • HF tools:
    • TODO Make tool window appear, for first time, in top-right corner of Sapphire.
    • TODO Add spin controls for radius & such
    • TODO Add 'PerlinRaise' and 'PerlinLower' tools (see request.)
    • DONE Updated display of bulldozer / etc. tools.
    • DONE Smooth edge of Perlin tool (see request).
  • Fix support for large heightfields
    • TODO Move ROAM patches to CsHeightfieldTile class (requires patch size to be divisor of tile size?)
    • TODO Implement dynamic loading / freeing of tiles (with re-tessellation, etc.)
    • TODO Optimise triangle pool usage between tiles
  • TODO Document path recording / playback.
  • Improve rendering of camera paths and teleport points.
    • TODO Use better camera mesh (saved as zmesh?)
    • TODO Add text overlay above camera teleport point.
  • TODO Add support for loading arbitrary point lists (from CSV) as paths.
  • TODO Use GLSL shaders to provide better terrain detail, and for fog.
  • TODO Use GLSL shaders for waves, water reflection, refraction (inc. underwater view)
  • TODO Use VBOs for terrain patches.

User-defined grids

  • TODO Add option for user-defined grid overlay, where user sets extents, and tile sizes. Note grid does not need to cover entire map.
  • TODO Allow import & export of grid definitions.
  • TODO Show grids in Sapphire.
  • TODO Add option for 'snap to grid' with mouse selection tool (see request).
  • TODO Add 'select tiles' window (possibly using existing 'select area' window.)
  • TODO Add ability to set grid tile names, and display names in 2D and 3D view (see request, also here).


  • DONE Add pin passthrough rendering, to make it clear when a filter's output is the same as its input (i.e. map handles being passed through verbatim).
    • DONE Ensure passthroughs are loaded/saved in CzFilter::Serialise and CzFilter::Deserialise (example is zg_tee, where all passthroughs are created dynamically)
    • DONE Apply to script filters too.
    • TODO Verify all filters (both script & plugins) set all passthroughs correctly (see 'tests/FiltersToFix.zgraph').
    • TODO Update docs.
  • DONE Added flags to CzFilterFactory::RegisterFilter function, including:
    • ZFF_CLASS_DEPRECATED, which hides filters from 'add new filter' dialog box (but allows existing filters in graphs to be supported).
  • DONE Modified GetProjectMap2 to allow 'options' edit of map name input pin too. If name input is disconnected, options button allows edit of map name. If pin is connected, options button says “Map name option is controlled by '[filter name]' filter connected to 'MapName' pin”.
    • DONE Repeated for SetProjectMap2 too.
    • DONE Deprecated GetProjectMap and SetProjectMap, which are now redundant (using new ZFF_CLASS_DEPRECATED flag).
  • DONE Modified GetProjectMap2 to allow choice of creating local copy or not (previous default was yes).
  • DONE Modified project.SetProjectMap2 to automatically save undo points.
    • TODO Update ZG_project plugin & filter documentation.
    • DONE Removed manual backup scripts from example graphs.
  • DONE Reorder insane calc.HF.Exponential pins, before it's too late :!: (also drop hOutputMap input pin).
  • TODO Add lowpass filter (sinc convolution), and highpass filter (subtraction of lowpass filter); see https://en.wikipedia.org/wiki/Low-pass_filter#Ideal_and_real_filters.
  • TODO Added 'Load graph…' menu item to L3DT, for opening ZeoGraph and loading file.
  • DONE Added UI.EditValue filter in new 'ZG_UI' plugin.
    • TODO Document!
  • DONE Added UI.EditValueEx filter, for multiple values.
    • TODO Document!
  • DONE Add General.Wait and General.WaitTrigger filters.
    • TODO Document!
    • DONE Also added support for void pin types, for dataless flow control.
  • DONE Added calc.HF.SquareRoot filter.
    • TODO Document!
  • TODO Add passthrough hMap pin to project.SetProjectMap filter.
  • TODO Add UI.ComboSelector filter, for selecting from a set of values (output is int for index, AND string for value)
  • TODO Add UI.MessageBox filter (simple notification, icon style is option, as combobox; prompt input only)
    • TODO Document!
  • TODO Add UI.YesNoQuestion filter, which returns true or false.
    • TODO Document!
  • TODO Add UI.YesNoQuestionSwitch filter, which passes an input variable between yes or no outputs (uses disable behaviour).
    • TODO Document!
  • TODO Allow external scripts &c to set input variables (i.e. the variable.xyz filters, also pins of named filters)

Zeolite API

  • TODO Use shared struct to load all API function handles in one go, to speed up plugin loading.

Pending requests

  • TODO Line overlay over textured mesh in Sapphire when editing (see request
  • TODO Limits on raise / lower brushes (see request).
  • TODO Lower by / raise by brush tool (see request).
  • TODO More heightfield display options (see request).
  • TODO Add automatic beach generation (see request).
  • TODO Add vertical scaling to merge import (see see this thread.)
  • TODO Update 'export type list' option to include colour and bump map texture (see request).
  • TODO Fix unoptimised north/east edges in atMeshDecimator (see request, and possible fix).
  • TODO Support wrapping in perlin maps (see request).
  • TODO Add SunBurn TER import/export support.
  • TODO Add low-pass filter for heightfield (see request).
  • TODO Write script to bake water surface map on to texture map (see request).
  • TODO User-defined grid overlay in display, and T3D region exporter for single and multiple files (see request).
  • TODO Limited 'export selected area' option for Torque TER, where users set west & south extents, and then pick tile size (256, 512, 1024, 2048, etc.), before running regular TER exporter (see request).
  • TODO Implement 'Operations→Design map→Resize canvas' using graph/script (see request.)
  • TODO Add manual scaling UI to L3DTio_RAW_HF plugin (see this thread.)


  • DONE Added map Iterator functions, to reduce repetition in programming map loops.
    • DONE Add reusable iterator support for progress (both group & direct progbox).
    • DONE Add reusable iterator support for masked areas, using rect mask :!:
    • TODO Apply to converter calcs (HF→RGB, etc.), DM↔layer calcs, etc..
    • TODO Apply iterator to copy area, etc.
    • TODO Make auto-multithreaded version (in CMapWrap::Iterate).
    • TODO Add to extension API, so it can be used in plugins!
  • DONE Added exponential filter for heightmap calc (as zeofunc, and filter).
  • TODO Add HF.GenMap to benchmarking results
  • TODO Allow 'HF→change vert scale' to work with DM (see forum thread.)
  • TODO Add guards to handle DM/HF size mismatch everywhere following HF selected area preview.
  • TODO Add InitMap2 extension function, and filter.
  • TODO Allow larger non-mosaic maps in UI.
  • Multithread:
    • TODO calc_HF_Diff2Filter &c
    • TODO Channelling erosion
    • TODO Thermal erosion
    • TODO Diamond/square inflation
    • TODO Water table flooding (use four threads to raster simultaneously)
    • TODO Alpha calculation
    • TODO Perlin generator
    • TODO Shadow casting
  • TODO Revise atCalc_AM_image to use direct access writing of AMimg (requires mipmap update).
  • TODO Fix multithreading in atCalc_AM_image, which was disabled b/c it caused crashes.
  • DONE Added 'project.RegenerateWBL' script function to regenerate water body list (see 'WBL_Renergate.zs' script).

User interface


  • DONE Added 'Add height' and 'Multiply' options to 'Operations→Heightfield' menu.
  • TODO Remove largely useless 'Split to mosaic' and 'Combine mosaic' functions. Possibly retain 'change mosaic tile size' option, but only on MAPALLOC_MOSAIC. :!: :!:
  • Update extension manager window:
    • DONE Use report view to show DLL version, date, &c
    • TODO Finish enable display (greyed out)
    • TODO Fix selection marker
  • DONE Modified idle message in main window to use system font, and changed 'x' to '×'.

Alpha map wizard

  • TODO Add load and save buttons to alpha wizard (or enable presets), so that layer combination lists can be stored and recalled (see request) :!:

New wizards

  • TODO Add mask map wizard, in scheme after attributes map.


L3DTio_TIFF plugin

LibJPEG plugin

  • DONE Add reader / writer / mosaic support.
  • TODO Verify InvertY and Quality options.
  • TODO Benchmark.
  • TODO Add WM support (export only).
  • TODO Build x64 version.
  • TODO Include in installer, and formats ini.

LibPNG plugin

  • TODO Create me!



  • TODO Modify atEdgeLeveller to support edge levelling of design map (including erosion, roughness, etc.)

Bug fixes

  • DONE Modified 'Import DM' wizard to recalculate horiz scale to preserve horizontal extents when changing down and up-sampling rates.
  • DONE Ensure edit record is closed in Sapphire when mouse mode changes (and other similar cases), to eliminate 'cannot create edit record' errors (see bug report).
  • DONE Modified PROJ loader to tolerate missing settings (e.g. WrapFlag, HorizScale), as these can be picked up from maps. Warning is given instead.
  • DONE Fixed installer so that zmenu extensions are installed properly (now in resources dir)
  • DONE Fixed offset b/w cursor and tools in Sapphire —build pending.
  • DONE Fixed initial vertical offset in PointGrab tool —build pending.
  • DONE Fixed bug in L3DTio_Backup that prevented proper undo on large-area tools (e.g. bulldozer) —build pending.
  • DONE Fixed L3DTio_RAW_HF to support files larger than 4GB (see bug report).
  • DONE Made L3DT check for other L3DT processes, and abort startup to prevent fighting over log / resources.
  • TODO Debug 'CMosaicMapo::CloseTile warning - tile was already saved' error state (see bug report).
  • DONE Fixed bug in ZeoWrap, where combosel.GetCurSelA was incorrectly named combosel.GetPathCurSelA.
  • DONE Recompiled ZG_script for L3DT Pro x64 (was out of date, and gave errors on some return values).
  • DONE Modify Sapphire to log error and continue rendering when water map is incorrect size (previously would halt initialisation.) (see bug report).
  • TODO :!: :!: :!: Change GetExt to get only last extension. Add new CompareExt function to handle compound extensions (see bug report).
  • TODO Debug problems in view when importing design map (see bug report.)
  • TODO Fix screen capture to file.
  • TODO Fix bug in volcano overlay (see bug report).
  • TODO Fix alpha map generator to include all land types in map (reported by Andrew B. via e-mail, error is 'calc_Alpha_GenMaps error - invalid alpha index in LandTypeAlphaIDBuf').
  • TODO DM editing doesn't always mark HF as dirty (see this thread.)
  • DONE Extended timeout to prevent errors on startup.
  • DONE Fixed error with min/max alt when resizing HF (see thread.)
  • DONE Modified CreateDir to report directory creation failures (with sys error codes).


Following release

l3dt/plan/frogger.txt · Last modified: 2017/08/31 05:56 (external edit)
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki