L3DT documentation
Large 3D terrain generator

Development plan: release after next

Due date: nominally 2017.


  • TODO Add mesh→heightfield rasteriser (see request.)
  • TODO Add ability to view / set / use teleport points in 2D view (see request.)

Generalised batch system

  • TODO Support processing files, not just generating new maps (see request.).
  • TODO Add ability to select multiple input files in UI for processing.
  • TODO Add ability for scripts to perform entire processing routines.


  • TODO Add support for inflate/deflate.


  • TODO Benchmark loading/saving/size against HFZ, PNG, JPEG.
  • TODO Make default for DMF, AMF, and relevant aux maps.
  • DONE Add fully-described design map support (climate list, DM gen params, HF gen params, etc.), to permit direct import (see request).
  • DONE Removed codec option in exporter; always use best.
  • Support codecs:
    • DONE RAW for all map types.
    • DONE RAW+ZLIB for all map types.
    • DONE DIFF+ZLIB for HF.
      • TODO Perform range checking to make sure we don't clip with outrageously steep terrain.
    • TODO (HF2+Aux)+ZLIB for WM/AuxWM.
    • TODO JPEG for RGB maps?
  • DONE Added 'file.ZMAP.PeakHeaderA' function to ZMAP
    • DONE Used 'PeekHeaderA' to allow 'import map layer' to determine map type and map name.
    • DONE Used 'PeekHeaderA' to allow cmdline / open wizard to determine map type and map name.
  • DONE Added full mosaic support.
  • DONE Make loader work with partially unfilled edge tiles.
  • DONE Check DM settings in exporter when exporting sel area.
  • DONE Add progress bars for regular file I/O.
  • DONE Added file association in exporter.
  • TODO Modify L3DTio_Backup to use non-mosaic ZMAP exclusively.
  • TODO Add to ZMESH for textures & bump maps.


  • DONE Implemented L3DTio_ZPROJ, to permit import/export of packed project files.


  • TODO Create ZCLI, for bundling climates, materials and textures for exchange.

Delayed plugin loading

  • TODO Speed-up program loading & reduce memory by deferring loading of plugins until required.
  • TODO In extensions.ini.xml, store manifest of functions, formats & menu options for each plugin, plus size/date of plugin.
  • TODO If plugin is unchanged, defer loading of plugin, but create stubs for formats & extension functions.
  • TODO Load plugin & update manifest when plugin is re-loaded in extensions manager, or if size/date has changed (note, must carefully re-map handles without deleting functions &c).
  • TODO If format/zeofunc/zmenu handler is called, load plugin & insert functions. May require odd shim in create format/zeofunc/zmenu functions to update deferred formats/functions/options rather than create anew.
  • TODO Deferred loading does not apply to some plugins (ZeoScript, ZeoGraph, Sapphire, etc.) Whitelisting is handled by presence of new stub zeofunc in plugin.

Script-defined wizard panes

For use with custom algorithm panes. Algorithm specifies panes required (HFSize, <custom page>, etc.)

  • TODO Add algorithm installer.

Update manager

  • TODO Modify/test zURL with background thread downloads for binary downloads.
  • TODO Add binary download link to RSS items (always via download gateway).
  • TODO Download updates for L3DT Standard.
  • TODO Download updates for L3DT Professional, with key validation.

Mesh decimator

  • TODO Add 'null' format option to mesh exporter to permit test exports with texcoords but no output images (see request).
  • TODO Implement CSV→mesh converter for loading simple objects in Sapphire (see request).
  • Optimise, optimise, optimise!
    • TODO Make MeshExport option copy selected area mesh before opening dialog, so that the dialog can ignore selection on the un-tiled meshes
    • TODO Use a persistent decimator for un-tiled heightmaps in mesh exporter (requires un-tiled data to use same map (sel area or no), and; remember to reset data when changing tile state/size, as this will change variances &c)
  • File format support:
    • TODO B3D
    • TODO TIN
    • TODO Remove map layer mosaic export flags for formats.
    • TODO Update installer's formats.ini.xml entries for new flags.
  • Do reverse winding of faces automatically for 'XZ plane' in:
    • TODO B3D
    • TODO TIN
  • TODO Add ZFUNCs for new export options, including UI-less option.
  • TODO Add matching coordinate system behaviour in mesh importers.
  • TODO Add detail map exporter (see request.)

Automatic road generation

  • TODO Mark WM, WS, AM, TN, LM, LM_spec, TX, etc. as invalid after applying roads (and HF as changed).
  • TODO Provide progress grid display
  • TODO Check support for multiple waypoint roads.
  • TODO Add mouse support for creating / deleting / renaming points in 2D.
  • TODO Add mouse support for creating / deleting / renaming points in 3D.
  • TODO Store road paths in project path list.
  • TODO Add interface for deleting paths in list.
  • TODO Display paths in Sapphire.
  • TODO Apply roads to attributes map (or 'AM_culture' map).
  • TODO Add 'undo' support (using edit record in atRoads?)
  • TODO Add curved road support to handle turns.
  • TODO Create PointManager DLL, with dialog for creating, importing, exporting, &c points and paths in the project list.

Zeolite plugin API

  • TODO Document API (ongoing!).
  • TODO Allow plugins to set menu states, bitmaps, etc.
  • 'Direct' interface for in-RAM maps
    • TODO Write extensive list of warnings in docs.
    • Implement in plugins:
      • TODO L3DTio_HF2 (for large maps &c)
      • TODO Sapphire
      • TODO atCalc_AM_Image
      • TODO atCalc_FFT
      • TODO atSpherialDistort
    • TODO Retrofit into L3DT core.

3d anaglyph rendering

  • TODO Implement in Sapphire viewer.


  • TODO Add 'ramp_width' and 'ramp_slope_deg' to set to/raise to/lower to tools (see request).
  • TODO Modify status bar to include water height / depth when viewing the water map (see request.)
  • TODO Add curved bulldozer brush.
  • TODO Add pathfinder brush.
  • TODO Modify design map brush to allow users to change scheme during editing (see link).


libtar plugin

  • TODO Bundle whole climates (with materials and textures) as '.cli.tgz' files to permit easy distribution.

File I/O plugins

  • TODO Modify L3DTio_DDS to mark DDS format as import/export only (never as 'native'; compression is too severe.)
  • DONE Updated L3DTio_BigBitmap to log more descriptive errors when attempting to load compressed bitmaps.
  • TODO Add texture support to L3DTio_B3D (see specs.)


  • TODO 'sgetc' and 'sputc', plus str[0] and list[0] notation.
  • TODO Add 'import' keyword to include namespaces.


  • New filters:
    • TODO Switch (running selected downstream path based on cur value).
    • TODO ColourMap.ConvertToHF
    • TODO ColourMap.ConvertToGreyscale
    • TODO ColourMap.Balance (takes R/B/G offset/scale values)
    • TODO ColourMap.Gamma (takes R/B/G values)
  • TODO Add ability to export whole graphs as macro filters (called '.zmacro' file), using special import/export pins.
    • TODO Demonstrate using complex script in graph as a filter.

Spring plugin

Other plugins

  • DONE Added ZlibWrap plugin, for zlib compression/decompression.
  • TODO Add T3D plugin extension func for generating material map (for scripting).
  • TODO Add a plugin for packing and unpacking whole climates, materials and dependencies (probably as .7z archives).
  • Update L3DTio_TIFF:
    • TODO GeoTIFF UTM handling.
    • TODO Exporter.
    • TODO Mosaic handler.
  • Update atFuncBrowser:
    • TODO Add search option.
  • TODO L3DTio_DMZ (compressed data file), to replace WMF/DMF.
    • TODO Square func.
    • TODO Normal calc func.
    • TODO Remove calc from L3DT core.
    • TODO DM filtered func.
    • TODO Remove calc from L3DT core.
  • TODO atMipManager, for managing mipmaps of project maps (see this thread).
  • TODO Update Spring plugins to store settings in 'spring.ini.xml', which is stored in 'all versions' settings.
  • Updated plugins to use new menu contexts.
    • TODO L3DTio_Spring (FIXME: update plugin page)
    • TODO atExportToTV3D (FIXME: update plugin page, download package)
    • TODO L3DTio_WMPro (FIXME: update plugin page, download package)
    • TODO atTcpSock, zChatClient, atNetClient, atNetServer (FIXME: update plugin pages)

User interface

3d anaglyph rendering

  • TODO Implement in Sapphire viewer.

Alpha maps in Calc wizard

  • TODO Add alpha maps checkbox to calc wizard; enabled if AM is generated, and disabled if DM/HF/WM/AM are being modified.

Script Editor

  • TODO Rebuild with Scintilla.

Walkthrough tutorial

  • TODO Rebuild with WebKit or similar.

Unified project load/save progress

  • TODO Implement a single project-wide progress control that is passed to all load/save operations when loading or saving a project, so that there's no flicker of several progress dialogs.
  • TODO Add a cancel button.

Update manager

  • TODO Add option to download update installers (requires version numbers in update feeds).
  • TODO Add option to download plugin updates.

Script-defined menu options

  • TODO Add support in Zeolite zmenu_AddItem/etc for OnUpdate callbacks.
  • TODO Add support for menu item bitmaps.

Unified resource manager

  • Apply to:
    • TODO Materials
    • TODO Overlays
    • TODO Climates
    • TODO etc…
  • TODO Create tabbed tabbed resource manager window for the above.
    • Tabbed window will speed up work involving both climate and material editing.


Design map tools

  • TODO Deprecate DM scheme editor; use preset official schemes instead.
  • TODO Implement in 3D viewer (?)
  • TODO Add 'sample' button, like with AM/TX brush (see request).
  • TODO Blur brush for design map.
  • TODO Eyedropper and palette modes for DM tool.
  • TODO Enable new atDesignBrush plugin, to replace old 'design map brush' tool.
  • TODO Update user guide.
  • TODO Add raise to / lower to (and other HF equiv. tools) for design map (see request).

Heightfield tools

  • TODO Thresholded smoothing tool, to smooth only terrain with a gradient greater than X (see request.)
  • TODO Finish 'Sculptor' tool window for Sapphire, to replace current (terrible) HF tools window.
  • TODO Use 3D HF brushes in 2D interface.
  • TODO Blending brush tool, to blend from one heightfield to another.
  • TODO Allow HF tool to edit other float maps.

Selected area

  • TODO Mask application area of all brush tools using 'select area' tool (see request.)
  • TODO Allow selected area to mask brush application; preventing tools from bleeding outside selected area.

Other tools

  • TODO Use edit button on toolbar to bring focus back to brush tools, rather than toggle open/close (see request).
  • TODO Add brush tool for WORD maps.
  • TODO Disable application pop-to-top when editing HF brush settings.
  • TODO Square + Spraycan brush modes for BYTE, WORD, 24bit, DWORD maps.


  • TODO Document path recording / playback.
  • TODO Fix clip distance range checking (see post.)
  • TODO Implement wrapping and mirrored wrapping (see request).


User interface / tools

  • TODO Add 'minimap' to HUD.
  • TODO Add hotkey for sampling altitude under mouse cursor and applying to current tool.
  • TODO Enable the 'select area' tool in Sapphire (this requires L3DT to handle selected areas across different maps).
  • TODO Add alpha map painting in Sapphire.
  • TODO Add fluvial erosion brush in Sapphire.
  • TODO Add interface for changing brush diameter in Sapphire.
  • TODO Add interface for changing strength of raise/lower brushes.


  • TODO Disable backface rendering on CsMesh objects, unless object is transparent, or flagged to use backfaces.
  • TODO Add static mesh renderer option, using atMeshDecimator.
  • TODO Add brute force renderer option (see request).
  • TODO Resolve transparent mesh object render order issue with water map and army man.
  • TODO Fix 'out of memory' event in ROAM patch allocation on large heightfields.
  • TODO Debug ultra-large textures in Sapphire (see request).

Extension features

  • Add extension functions for:
    • TODO Setting callbacks.
      • TODO OnLButtonDown/Up/DblClick
      • TODO OnRButtonDown/Up/DblClick
      • TODO OnChar/OnSysKey/etc
      • TODO OnMouseWheel
      • TODO BeginFrame/EndFrame
      • TODO ObjBeginRender/ObjEndRender
    • TODO Get/set cursor mouse position.
    • TODO Projecting and unprojecting.


  • Convert to have base class of CsMesh, with quadric-like generation method:
    • TODO CsSphere (as a mesh: ??)
  • Add vertex normals to primitives:
    • TODO CsCone
    • TODO CsSphere
  • Test CsMesh in following modes:
  • TODO Add virtual IsVisible() method to CsObject, to exclude invisible objects.
  • TODO Add colour coordinate support to CsMesh
  • TODO Set scene lighting to match light settings in L3DT light map.
  • Convert to have base class CsBox:
    • TODO CsSkybox
  • TODO Object matrix maths, for nested objects. — done already?
  • TODO Add 3D markers for teleport points (transparent cones with axes shown.)
  • TODO Add 3D trees (and grass?)

File I/O

Importing attributes maps

  • TODO Add AM importer extension functions, for UI-less use.
  • TODO Add AM import overlay (see request).
  • TODO Add AM import from alpha maps.

Other file I/O changes

  • TODO Export missing attributes.txt file for colour-mapped AM mosaic (see thread).
  • TODO Create dedicated JPG and PNG plugins to avoid mem issues.
  • TODO Add PRJ file importer/exporter so that ASC plugin can correctly read georeferencing coordinates / modes / etc.
  • TODO Add support for EXR file format (see request).
  • TODO Add export WM as TIN to VTP plugin.
  • TODO Add 'origin at centre' option for X and OBJ plugins.
  • TODO Clone formats for new project maps.
  • TODO Export selected area for Atlas. (umm…may not work; atlas maps must be powers of two in size.)
  • TODO Add 'Local settings→File→Export→Image→SpanGreyscaleRange' option to match import (see request).
  • TODO Make mosaic maps default in HF, AM, TN, LM and TX wizard presets.
  • TODO SHP support for rivers, roads, etc.
  • TODO Export land type textures along with alpha maps.
  • TODO Implement mosaic georeferencing (see request).
  • TODO ASC mosaic export (for Tuomas).

Spring support

  • TODO Added s3o and DDS files for an object to installer.
  • TODO Add example map definition to Spring tutorial.
  • TODO Import SMD option.

Bug fixes

Linux compatibility

  • TODO Fix toolbar display in Sapphire (is over-rendered by window).
  • TODO Fix texture rendering (cannot get AM pixel in TX_GenTile for L3DT SE).
  • TODO Fix SD7 export in Linux.
  • TODO Fix resource path problems (see this thread.)
  • TODO Fix material image preview.

Other bugfixes

  • TODO Fix alignment of drape when zoomed (see this thread).
  • TODO Fix water mapping bug (see this thread).
  • TODO Fix light mapping bug (see this thread).
  • TODO Modify L3DT/ZeoGraph so that InitProject is not called from worker thread (it triggers breakpoint in debug mode due to SetTitle calls, etc.)
  • TODO Fix GeoTIFF plugin so that it loads plain TIFFs too.
  • TODO Fix resampling offset (see this post).
  • TODO Investigate dup borders option (see this thread, a bit down).
  • TODO Fix zoom weirdness in main window display when map size changes (see this post).
  • TODO Fix zoom changing when dragging in main window (reminded by Tuomas, by e-mail).
  • TODO Fix busy flag when cancelling mipmapping/rendering.
  • TODO Fix black rendering of first tile in main display (see this post).
  • TODO Fix shadow-casting to take into account LM res when setting near-distance casting cutoff.
  • TODO Correct lightmapping at 1x resolution (it's different to 2x, 4x, 8x, 16x, etc).
  • TODO Fix LM/HF = 31 bug (see this thread).
  • TODO Fix 'hung thread' bug (see thread)
  • TODO Fix bug in WMF plugin that gives “CL3DTio_WMFApp::LoadTileFile error - mismatch in horiz scale (ignoring file value)” error when loading large mosaic maps (via e-mail from Leon).
  • TODO Fix dodgy frustum test in Sapphire (see forum thread).
  • TODO Fix autoexit bug (infinite loop?) when exiting material, climate managers (only affects some users).
  • TODO Fix unrecoverable minimisation of Sapphire when L3DT is minimised (see this thread).


  • TODO Fix design map brush documentation, which links to DM algo page for DM params (including 'feature scale', which isn't avail. in brush) (see request).
  • TODO Provide index of climates with screenshots (see request).

Random dump of leftovers from v15.11

* TODO Add manual scaling UI to L3DTio_RAW_HF plugin (see this thread.)

  • TODO Upload new API code.
  • TODO Implement improved blending modes to remove streaking.
  • TODO Verify ZeoGraph in debug mode.
  • TODO Test & verify memory compactor in debug mode with batch script.
  • TODO Document AM mask overlays (inc. flags, here, and also here).
  • TODO Document splat settings in materials & material editor.
  • TODO Remove largely useless 'Split to mosaic' and 'Combine mosaic' functions. Possibly retain 'change mosaic tile size' option, but only on MAPALLOC_MOSAIC. :!: :!:
  • TODO Make tool window appear, for first time, in top-right corner of Sapphire.
  • TODO Add spin controls for radius & such in sapphire tools.
  • TODO Add 'PerlinRaise' and 'PerlinLower' tools (see request.)
  • TODO Refine box-wrapping script with progress bars.

* TODO Add HF.GenMap to benchmarking results

* 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 Add InitMap2 API function, extension function, and filter.

  • TODO Allow larger non-mosaic maps in UI.

* TODO Add guards to handle DM/HF size mismatch everywhere.

* TODO Add more off-line help PDFs. (some added, see here)


  • TODO Debug problems in view when importing design map (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.)


* 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.
l3dt/plan/plus_one.txt · Last modified: 2017/08/31 05:52 (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