L3DT documentation
Large 3D terrain generator

L3DT release v11.08

Released on the 19th of August, 2011 (see announcement)

Major features

Tiled mesh exporter

  • Implemented new mesh exporter user interface (See user guide, announcement.)
  • Implemented tiled mesh decimator (see request).
  • Added support for exporting optimised meshes as tiles (see request).
  • Added support for exporting selected area (see request).
  • Added support for non-contiguous memory in decimator triangle array, to allow larger mesh sizes.
  • Used dynamic non-contiguous memory for vertex/index buffer to remove need for re-rendering.
  • Added support for exporting meshes as mosaic maps by forcing high-res, unoptimised triangles at tile edges (see this forum thread).
  • Added support for DAE (COLLADA), OBJ, 3DS, X, and ZMESH file formats.
  • Added automatic reverse-winding of faces for 'XZ plane' coordinate system in all file format handlers.
  • Add image layer file format selector UI (see request, and here).
  • Added UI-less decimator extension function as calc.mesh.DecimateHF (see this forum thread).
  • Added progress bars to mesh rendering.

Memory management

  • Implemented 'virtual mosaic maps', using non-contiguous memory, to reduce memory fragmentation.
  • Created CMapWrap::InitMap2, which takes a value for map alloc mode (DONTCARE, RAM, MOSAIC, MOSAIC_SYSPAGEFILE, MOSAIC_MEMMAPFILE)
  • Re-mapped CMapWrap::InitMap to use CMapWrap::InitMap2 with DONTCARE by default; if you care, use Init2 with explicit map alloc mode.
  • Added zmap_Init2 API function.
  • Modified 'Save' to de-allocate mosaic maps, saving memory.

Zeolite plugin API

  • Implemented Zeolite v11.08 (see link for changes).
  • Clean break in plugin API, with removal of back-compatibility hacks.
    • Recompiled all plugins.
  • Enforced minimum plugin API version checking on loading.
  • Revised plugin function namespaces to be more orderly.
  • Regularised function return values and naming conventions (e.g. capitalisation).
  • Rewrote remaining zeofunc-wrapped API functions as core functions.

Attributes map importer

  • Added attributes map importer that takes arbitrarily indexed colour maps (see user guide).
  • Attributes map importer can load indexed colour maps with a pre-defined palette file, or by using a colour assignment window.
  • Modified the L3DTio_FI plugin to export a palette text file for colour-mapped attributes map images.


  • Added ridged multi fractal heightfield generator, using libnoise (see request).
  • Added full-resolution export option for contour maps (see request).
  • Improved Heightfield blending options:
    • Added 'calc.HF.CombineMaps2' function.
    • Added 'Heightfield.CombineMaps2' filter.
    • Added 'BlendHeightmaps' graph, to demonstrate the above (see this post).
    • Added optional mask blending to Merge heightmaps importer, along with stretch/resize options.
  • Added ability to provide slope offset to design map (see request).


  • Re-optimised heightfield linear interpolation; resize is 60% faster, shadow casting is 70% faster (see announcement.)
  • Added 'direct access' interface, for directly accessing map data without API overhead (see announcement.)
    • Modified 'CzMap::GetPixel' and 'CzMap::SetPixel' to support direct memory access, bypassing all safety checks.
    • Implemented 'CzMap::OpenDirectInterface' and 'CzMap::CloseDirectInterface'.
    • Implemented CzMapTile class, to implement direct access interface for tiled maps.
    • Added zmap_tile_MarkChanged function, for use with direct access functions.
    • Revised atConvertWaterToHeight to use direct access interface.
    • Revised atCalc_AM_image to use direct access reading of AM.
    • Tested and validated for mosaics and in-RAM maps (>3x faster on one test)
  • Deprecated 'threadman.RunTiles' and created 'threadman.RunTiles2', which uses hvar args instead of ZFUNC and ZLIST args.

Other features

User interface

Script-defined menu options

  • Added support for menu items to be added by ZMENU script files (see announcement.)
  • Added support for OnUpdate callbacks to determine state with ZMENU files.

Update manager

  • Automatically enable/disable/show/hide channels depending on version being used (std hidden in pro, & vice versa).
  • Automatically mark messages as read if they're older than the build version, so as not to bother users with old news.
  • Disabled automatic update checking if a crash occurs during update process.

Other user interface features

  • Created new icon set, with support for larger sizes (64px and 96px are new).
  • Modified 'Open' wizard to accept all HF import formats, and to spawn 'heightfield import settings' wizard if non-native format is selected.
  • Added support for custom colour palettes for 2D display, using PNG images in the 'Palettes' resource directory, and added palettes to installer.
  • Re-enable halftone blending in main window (Win7 graphics drivers seem OK now).
  • Added progress bar for loading plugins during startup.
  • Created unified resource manager window for scripts, graphs and masks.
  • Added multi-selection support to CzComboSel class



  • Force keyframes after variance changes, to speed-up settling.
  • Set maximum variance, to prevent endless variance increases when tri count is set too low.
  • Add extension functions for arbitrary mesh objects (loading/moving/scaling/rotating/etc).


  • Updated to ZeoGraph v2.9.6.1.
  • Added top-level 'Graphs' menu to L3DT, and removed entry in 'operations' menu.
  • Add 'Graph Manager' to L3DT menu.
  • New filters:
    • Heightfield math filters (add, subtract, etc.)
    • Variable algebra filters (add, subtract, etc.)
  • Other changes:
    • Replaced ZG_Fractal plugin with zfilter script.


  • Updated to ZeoScript v2.9.6.0.
  • Added ZeoScript.RunScript3 function, with explicit external vars and flags, and rval handle.
  • Renamed filesel.GetCurSelA and dirsel.GetCurSelA extension functions to filesel.GetPathA and dirsel.GetPathA, respectively, and updated scripts accordingly. This change is to make the ZeoScript function name match those of the Zeolite API.
  • Added 'vector3f' functions to ZeoScript (via ZeoWrap).

Mesh plugins

  • Implemented new CzMesh, CzMeshMtl and CzMeshFaceGroup API classes, and retrofitted to Azurite, atMeshDecimator, L3DTio_X, L3DTio_3DS, L3DTio_B3D, L3DTio_OBJ, L3DTio_S3O, L3DTio_COLLADA, and Sapphire plugins.
  • Add 'FaceWinding' options to support left & right handed coordinate systems to L3DTio_OBJ, L3DTio_X, L3DTio_3DS, and L3DTio_COLLADA plugins.
  • Add vertex normal export for optimised mesh to COLLADA, OBJ and X plugins.
  • Added vector4c/i/f/d and matrix3f classes to L3DT & API.
  • Included zvectors.h/cpp in API
  • Created ZMESH file format, and converted army man & tree mesh files to zmesh, and included in resources\meshes.
  • Included demo script for scattering trees/etc in Sapphire.

Other plugins

Bug fixes

  • Fixed smoothness of Sapphire.
  • Fixed path recording in Sapphire (bug with ComboSel).
  • Fixed the cursor raycast driver bug in Sapphire (see this thread).
  • Fixed display of toolbar in Sapphire.
  • Fixed the 'Options→Terrain→Select texture…' menu option in Sapphire.
  • Fixed crash when using resizer on largish maps via ZeoGraph (reported by David via e-mail; reproduced using different graphs.).
  • Fixed window frame bug in ZeoGraph that occurs after graph load fails.
  • Fixed crash when disabling all plugins.
  • Fixed TN support for BMP plugin (was switching BGR→RGB in loader).
  • Fixed TN input in L3DTio_BigBitmap (made white TN maps).
  • Fixed 'zero length script' error when opening design map brush.
  • Fixed 'SplitMosaic' and 'CombineMosaic' to work with virtual mosaics.
  • Fixed bug in mipmap saving when saving project (see this thread).
  • Fixed 'Operations→Mask maps→Generate masks' menu item, which was broken.
  • Fixed contour map bug reported by Heiko in e-mail (now allows save of virtual mosaics, and also has progress bar for HF→RGB calc).
  • Automatically create directories when saving mipmaps that are not mosaics during project saving.
  • Automatically clear activation keys on failed activation startup.
  • Allow 'L3DT for Torque' users to manually input proxy address and port.


  • Updated the how to make a new plugin tutorial to reflect v11.08 of the plugin API.
  • Provided a new tutorial to explain how to upgrade existing plugins to v11.08 of the plugin API.


  • Added file association for ZS and ZGRAPH files.
l3dt/history/v11.08.txt · Last modified: 2017/08/31 05:04 (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