Import helpers
The import helpers read an exported build.json, with its image files alongside it, and bring the build into your tool at the right scale. They live in the import-helpers folder of the LibreTerrain repository.
| Tool | Helper | Status |
|---|---|---|
| Blender | Add-on: centred, metre-scaled terrain meshes, packed mask images and point attributes | Tested with Blender 5.2 LTS |
| Godot | Editor plugin: saved terrain scenes, float textures and selectable mask preview | Tested with Godot 4.6 and 4.7 |
| Unreal Engine | Python script: Landscape actors and linear layer-weight textures | Untested in Unreal |
What they support
- Multiple heightfields, multiple masks, alternative PNG/EXR encodings and single-output builds. Alternative encodings of the same output produce one terrain or texture.
- Different heightfields become separate terrains at the same world position. Hide the ones you're not using.
- Mask-only builds.
- Vegetation points as CSV or JSON, imported as one instancer per species (see below).
Colour maps and 8-bit PNG outputs are skipped with a warning. Builds written with Write images as tiles are rejected.
Keep the files together
Files are resolved relative to build.json, so don't move just the JSON. Missing files, unsupported encodings, duplicate formats or contradictory grid metadata are errors. No source files are ever rewritten.
Blender and Godot prefer EXR. Their 16-bit PNG decoder reads all sixteen bits directly, without gamma conversion. Heights map through the world height range, and masks stay 0–1.
Blender and Godot currently limit a build to 4,194,304 samples per image (2,049² fits). Geometry is baked at one vertex per sample. There is no streaming, tiling, LOD or collision.
Points format
Each vegetation point has:
| Column | Meaning |
|---|---|
x, y | Metres from the world corner, 0..world_size |
z | Absolute height in metres |
rotation_deg | Rotation about the vertical axis. 0° points along +X, 90° along +Y |
scale | Uniform multiplier; 1.0 is the species' nominal size |
species | The species id, e.g. scots_pine |
CSV has a header row x,y,z,rotation_deg,scale,species. JSON has the same columns under points. The exact contract is in points-format.md.
Each helper creates one instancer per species with a placeholder cone. Replace it with your own asset at nominal size. No per-point objects are created.
