API ReferenceGE ExtensionseditortechroadArchitect
Road Architect - Terraform
Conforms terrain heightmaps to Road Architect roads using mask-based iterative diffusion, supporting single-road and multi-road terraforming with undo/redo.
Conforms terrain heightmaps to Road Architect roads using mask-based iterative diffusion, supporting single-road and multi-road terraforming with undo/redo.
Public API
| Function | Signature | Description |
|---|---|---|
M.conformTerrainToRoad | (rIdx, DOI, margin) | Terraforms terrain to match a single road |
M.terraformMultiRoads | (DOI, margin, group) | Terraforms terrain to all roads in a group |
M.writeHeightmapToPng | (path) | Exports current heightmap to 16-bit PNG |
M.setHeightmapFromPng | (path) | Imports heightmap from PNG file |
M.getRoadMasks | (DOI, margin, group) → roadMask, marginMask | Returns road and margin masks for a group |
Code Example
local terraform = require('editor/tech/roadArchitect/terraform')
-- Conform terrain to a single road (index 3, DOI=100m, margin=5m)
terraform.conformTerrainToRoad(3, 100, 5)
-- Terraform all roads in a group
terraform.terraformMultiRoads(150, 7, roadGroup)
-- Export/import heightmap
terraform.writeHeightmapToPng('/temp/heightmap.png')
terraform.setHeightmapFromPng('/temp/heightmap.png')
-- Get road masks for painting/analysis
local roadMask, marginMask = terraform.getRoadMasks(100, 5, group)
-- Algorithm overview:
-- 1. Compute road quads from renderData (top surface, excluding tunnels)
-- 2. Build kd-tree of quads for fast point-in-quad queries
-- 3. For each grid point, test intersection with quads using barycentric coords
-- 4. Build fixed mask (directly under road) and dilate with blending
-- 5. Iteratively smooth using separable box filter (X then Y passes)
-- 6. Number of iterations: ceil(0.5 * sqrt(8*DOI + 1) - 1)
-- 7. Average mask edges, then apply final height changes with undo/redo
-- Undo/redo support:
-- History stores {old, new, x, y} for each modified grid cell
-- Uses editor.history:commitAction("Terraform", ...)
-- Bilinear interpolation for quad intersection:
-- Uses p:invBilinear2D(q1, q2, q3, q4) to get (u,v)
-- Height = lerp(lerp(q1.z, q2.z, u), lerp(q3.z, q4.z, u), v)Dependencies
| Module | Purpose |
|---|---|
kdtreebox2d | Fast 2D spatial queries for quad intersection |
editor/tech/roadArchitect/roads | Road data access |
editor/tech/roadArchitect/profiles | Lane key queries |
editor/tech/roadArchitect/utilities | isInTunnel, isInBox, AABB utilities |
See Also
- Road Architect - Clothoid - Related reference
- Road Architect - Decals - Related reference
- Road Architect - Export - Related reference
- World Editor Guide - Guide
Road Architect - Static Mesh Manager
Manages the static mesh audition system - searching for available meshes, previewing them with a rotating camera, and computing bounding box data for profile layers.
Road Architect - Tunnel Mesh
Creates procedural auto-tunnel meshes and manages terrain hole maps for tunnels in the Road Architect system.