Build deliverables
Terrain products (DTM, DSM, CHM, contours)
Turn one ground fit into the raster set a client actually receives (DTM, DSM, canopy height, slope, aspect, hillshade, contours, trees and sunlight), all on one grid so they cannot disagree, with a README that says what is wrong with them.
Choosing and previewing are free. Build and write… is Pro.
Part of Point cloud processing software, LiDAR terrain (DTM, DSM), Benchmarks.

When to use it
At the end of an outdoor survey, after the ground filter. Building the products together is the point: exported one at a time, at different moments, one of them will come from a different fit and nothing in the files will say so.
Step by step
- Run Process › Ground filter… first, or let Terrain products… start a fit when it opens. The grid is the ground fit’s Resolution (m).
- Open Process › Terrain products…. Under Surfaces, the DTM is always on; tick DSM and CHM (canopy height).
- Under Derived maps, tick Slope, Aspect and Hillshade, and choose the Gradient: Horn (the default, what ESRI, GDAL and GRASS compute) or Zevenbergen–Thorne. Hillshade takes a light direction and height (315° and 45° by default).
- Tick Contours, set the Interval (m) (1.0 by default) and Index every (5). A line under the interval warns when it is finer than the data’s vertical accuracy supports.
- Optionally tick Individual trees, and Sunlight (latitude taken from the coordinate system with from CRS, a sky clarity, and a day range).
- Choose Rasters (GeoTIFF, ASCII grid or Both) and Vectors (GeoJSON, Shapefile or Both).
- Press Build and write… and choose a folder. Files are named
<stem>_dtm.tif,_dsm,_chm,_slope,_aspect,_hillshade,_contours.geojsonand_trees, with aREADME.txtwritten first.

What it was measured at
On a 1.75 million point aerial corridor tile: six rasters on one grid of 153 × 140 cells at 0.50 m, built in 0.66 s, and 616 contours at a 1 m interval. Every GeoTIFF is 32-bit float with a .prj, a declared no-data value and its EPSG code, and reopens in GDAL at the right coordinates.
From the command line
n3d-render-cli terrain --input tile.laz --out tile_products --resolution 0.5 --interval 1 --trees --raster tif --vector geojson
n3d-render-cli terrain --input tile.laz --out tile_sun --solar --latitude 45.2 --from-day 172 --to-day 172
Limits, stated
- Sunlight is clear-sky: real irradiation is lower, often by a quarter to a half. Compare cells with each other; do not read a total as a yield.
- Tree counts are of what could be detected from the air. Dominant trees are found; suppressed ones mostly are not, because the upper canopy takes most of the returns.
- Flat cells in the aspect map are no-data, not −1, so a circular mean or a colour ramp cannot quietly consume them.
- The contour check needs a vertical accuracy; where none is given it says so rather than passing silently.
Related questions
How good is the ground filter?
Against IGN LiDAR HD’s own production ground class on 16.2 million points, at a 2 m resolution and a 0.5 m threshold: precision 83.8 %, recall 97.9 %, F1 90.3 %, in 2.1 s. It needs no training data and no model file. Precision and recall are reported separately because they fail in opposite directions.
Does it keep the coordinate system?
Yes. It is read from LAS GeoTIFF keys, the OGC WKT record and LAS 1.4 extended records, carried into reports, and stamped on a LAS export as long as the geometry is still the source’s. A cloud that was moved by hand is written without it, because the stamp would no longer be true. Vector layers are checked against it and a clash is reported.
More in the FAQ.