Compare and register
Compare and detect change (M3C2)
Compare a survey against a reference (another survey, a mesh or a BIM model) as a signed distance with conformance bands and a worst-first list of defects, or run M3C2 to say what was gained, what was lost, and what simply was not observed.
Comparing and viewing are free. Writing the region list as CSV, and the report, are Pro.
Part of Point cloud processing software, Scan to BIM, LiDAR terrain (DTM, DSM).

When to use it
Nearest point for as-built checks against a design or a BIM model, with a tolerance. M3C2 for two surveys of the same site at different dates: settlement, erosion, stockpiles, demolition. M3C2 averages both surveys and gives each point the change it would take to be believed, so noise is not reported as movement.
Step by step
- Open the survey to be measured, then bring in the reference with File › Add Layer…: the other survey, a mesh, or an IFC model.
- Open Process › Compare & detect change…. The card shows MEASURED (the primary cloud, which gets the colours) and REFERENCE; press Use as reference on the layer to compare against.
- Choose the Method: Nearest point or M3C2. Set the Tolerance (0.05 m by default); for M3C2 also set the Registration error between the two surveys (0.01 m by default).
- With M3C2, read the four verdicts with their counts and shares: unchanged, gained, lost and not observed, then the median level of detection and the largest change, and the number of change patches.
- With Nearest point, read the share within tolerance and the mean, RMS, p95 and maximum. Tick Show as conformance bands for four flat colours cut at 1, 2 and 4 times the tolerance.
- Under Out-of-tolerance regions, set a Separation (0.25 m by default) and press Find: connected defects, worst first. Click a row to fly to it.
- Export the regions with Export regions (CSV), or put the review into a report.


What it was measured at
On a real vegetated tile with an injected 50 mm lift, M3C2 measured a median of +0.04998 m. A cloud compared with itself reports 0.0 % changed and no patches. On the demo pair a 120 mm settlement is found and a 10 mm one is correctly reported unchanged against a measured 14.9 mm level of detection.
Why “not observed” matters
A nearest-neighbour comparison always finds a neighbour somewhere, so it cannot say I did not see this. Delete every point in a box from the second survey and it reports a demolition; M3C2 reports the box as not observed. On the published test that is exactly what happened: the share not observed rose from 2.7 % to 5.9 % and no change patch was reported.
From the command line
n3d-render-cli compare --a survey_2024.laz --b survey_2026.laz --registration-error 0.01 --json change.json
n3d-render-cli report --input asbuilt.las --reference design.ifc --out review.html --tolerance-mm 25
report exits with 0 on a pass and 2 on a fail, so a batch of sites sorts itself.
Limits, stated
- M3C2 measures change where the cored cloud has points. Material that is gone can only be seen from the earlier survey, which is why the cores default to it.
- A region with no points in the other survey is not observed, not lost: an occlusion is not a demolition.
- M3C2 reports a mean displacement in a cylinder, not a peak. A 1.5 m dome reads about 1.28 m at its apex, because the cylinder averages the curvature.
- Against a mesh or BIM model, Nearest point measures the exact point-to-triangle distance; with M3C2 the model is sampled, not intersected.
- If one region spans the whole site, the region list has stopped meaning anything, and the card says so: lower the separation.
Related questions
How does change detection avoid false alarms?
With M3C2 and a level of detection. Both surveys are averaged in a cylinder along the local normal, and each point carries the 95 % change it would take to be believed. A region with no points in the later survey is reported as not observed, not as lost, so a parked van is not called a demolition. On the demo pair a 120 mm settlement is found and a 10 mm one is reported unchanged against a measured 14.9 mm threshold.
What does a paid licence unlock?
Writing out what the program worked out: computed columns (class, segment, confidence, height above ground, deviation) on an export, drawings (DXF, PDF, SVG), terrain rasters, GIS vectors, meshes as glTF, reports, region and zone CSVs, saved images and flythrough videos. Desktop, Engine & SDK and the academic licence unlock the same features in the program; Engine & SDK adds the Python package and the command line. The boundary is enforced in code and tested in both directions.
More in the FAQ.