Preparing a Model for Interpretation
A mesh or point cloud arrives from a scanner or a photogrammetry package as whatever that software produced. Before it is comfortable to interpret on, it usually needs work — and the mesh context menu offers about 150 commands with no indication of which ones you actually need.
This guide is the short answer: what to do, in what order, and why. Most models need perhaps six of those commands.
Several of these operations invalidate each other. Decimating after generating LOD throws the LOD away. Tiling before cleaning bakes the mess into every tile. The sequence below is arranged so nothing undoes anything before it.
The short version
| # | Do this | Why |
|---|---|---|
| 1 | Look at what arrived | Everything after this depends on what you find. |
| 2 | Fix the coordinate system | Cheap now, expensive later. |
| 3 | Remove the rubbish | Degenerate triangles, long edges, unused vertices. |
| 4 | Fix normals and winding | Or the model lights and textures wrongly. |
| 5 | Decide on size | Decimate, LOD, or tile — they are different answers. |
| 6 | Rebuild the indexes | So picking and interpretation are fast. |
1. Look at what arrived
Load the model and check three things before touching anything.
- Is it where it should be? Navigate to it. A model at the project origin when it should be at a national grid coordinate has lost its georeferencing — see Coordinate Systems.
- Is it the right size? Measure something you know. A model that came in as feet in a metric project is a problem to fix now, not after you have interpreted on it.
- How big is it? The mesh's properties give the triangle count. Under a few million, you can probably interpret on it as-is. Tens of millions, and step 5 matters.
Attributes & Analysis → Triangle Properties → Maximum Edge Length is a useful first look: false-colour the mesh by it and the reconstruction junk — long thin triangles bridging gaps — lights up immediately.
2. Fix the coordinate system before anything else
If the model is in the wrong place, wrong units or wrong CRS, correct it now. Every interpretation you make is stored in project coordinates, so moving the model afterwards leaves your interpretation behind.
On the mesh's Transform submenu:
| Problem | Command |
|---|---|
| Wrong CRS | Coordinate Conversion → Between Coordinate Systems (CRS) |
| Feet where metres are expected | Coordinate Conversion → Meters to Feet / Feet to Meters |
| Axes swapped by the exporter | Swap X and Y / X and Z / Y and Z Axes |
| Right shape, wrong place | Translate, Rotate, Scale |
| Two models that should line up but do not | ICP Alignment |
See Coordinate Systems and Georeferencing for the whole picture.
3. Remove the rubbish
All of these are on Quality & Cleanup, and all are safe to run in this order.
| Step | Command | What it removes |
|---|---|---|
| a | Remove → Degenerate Triangles | Zero-area triangles and ones with coincident vertices. These break almost every downstream calculation, so they go first. |
| b | Remove → Duplicate Vertices | Coincident vertices merged into one. Photogrammetric meshes are full of them. |
| c | Remove → Edges Greater Than Length | The long thin triangles that bridge across gaps — the sky between two rock faces, the void behind an overhang. |
| d | Remove → Unused Vertices | Vertices no triangle references any more, left behind by (a)–(c). |
| e | Selection → Isolated Triangles, then Delete Selected | Single triangles connected to nothing at all. |
| f | Selection → Progressive Component Select… | Whole disconnected clumps — vegetation, scaffolding, patches of sky — that (e) cannot see. See below. |
Compute Maximum Edge Length as an attribute first and look at its histogram. The real surface and the bridging junk usually separate cleanly, and the threshold sits in the gap between them.
It deletes triangles. Reload Original on the mesh's menu re-reads the source file and discards everything you have done to it, which is your way back — but that also discards any interpretation attributes you have computed. Try the threshold on a Duplicate first if you are unsure.
Progressive Component Select
Isolated Triangles only finds triangles joined to nothing. It does nothing about the other debris a photogrammetric mesh carries: clumps — a bush, a length of scaffolding, a patch of sky — each a perfectly well-formed little surface, connected to itself and to nothing else. A Poisson mesh is usually full of them.
Right-click the mesh in the Data Tree and choose Selection ▸ Progressive Component Select…. VRGS splits the mesh into connected pieces, sorts them from smallest to largest, and gives you a slider that selects them in that order. Drag it up and the debris lights up red in the 3D view; stop when the next piece to light up is something you want to keep.
The largest piece — the main surface — can never be selected, so there is no way to delete the outcrop by dragging too far.
The readout under the slider tells you where you are:
37 of 412 pieces - 8412 tris (0.4% of mesh). Largest selected piece: 611 tris.
The percentage is the number to watch. Debris is normally a fraction of a percent of the mesh; when that figure starts to climb, you have gone past the junk and into real surface.
- Delete Selected asks you to confirm, then removes them. This can be undone.
- After a delete it recomputes on the smaller mesh, so you can keep peeling pieces off without reopening the tool.
- Deselect All clears the selection without deleting anything.
- The window stays open while you work. Close hides it and clears the highlight.
- If you change the mesh somewhere else while it is open, it notices and recomputes rather than acting on a stale picture of the mesh.
The mesh has to be loaded in memory — the tool says so if it is not.
Cleaning first means the triangle budget in step 5 is spent on the outcrop rather than on the scaffolding, and a decimated fragment is harder to recognise than a full-resolution one.
4. Fix normals and winding
Symptoms: the model looks inside-out, lighting is inverted, or textures appear on the wrong side.
On Quality & Cleanup → Restructure:
| Command | Use when |
|---|---|
| Check Orientations | Diagnostic — reports inconsistent triangle winding without changing anything. Run this first. |
| Correct Winding | Make winding consistent across the whole mesh. |
| Reverse Winding | The mesh is consistently wound but the wrong way round. |
| Relink Connectivity | Rebuild triangle connectivity from vertex positions — needed if the exporter produced a "triangle soup" with no shared vertices. |
Then Quality & Cleanup → Regenerate Vertex Normals to recompute normals from the corrected geometry.
A texture bake projects onto the surface using its normals. Baking before the winding is fixed produces a texture you will have to redo.
5. Decide on size — decimate, LOD, or tile
These are three different answers to "the model is too big", and choosing the wrong one wastes a lot of time.
| Approach | What it does | Choose it when |
|---|---|---|
| Decimate | Permanently reduces the triangle count. | The model has more detail than the job needs, and you are content to lose it. |
| Level of Detail (LOD) | Keeps the full mesh but draws simpler versions at distance. | You need the full detail up close but the whole model in view. This is the usual answer. |
| Convert to Tiles | Splits into tiles streamed in and out as you navigate. | The model does not fit in memory at all. |
Decimate
Quality & Cleanup → Decimate opens a dialog with real controls, not just a percentage:
| Setting | What it does |
|---|---|
| By ratio (%) or By triangle count | The target. In ratio mode each selected mesh is reduced by the same proportion, rather than all down to one count. |
| Max geometric error | Refuse any collapse that moves the surface more than this. 0 means no limit. |
| Max normal deviation | Refuse collapses that turn the surface more than this many degrees. |
| Max UV distortion | Protect the texture mapping. |
| Preserve mesh boundaries | Keep the outline of the mesh intact. |
| Preserve texture seams | Keep UV seams intact — important on a textured model. |
| Enforce manifold topology / Prevent triangle inversion | Refuse collapses that would break the surface or fold it over itself. |
The algorithm is Quadric Error Metric decimation. Setting a max geometric error is the honest way to use it: you are saying how far the surface is allowed to move, and letting the triangle count fall out of that.
You can also decimate only part of a model: select triangles, then Selection → Decimate Selected.
Level of Detail
Optimization → Level of Detail → Generate builds the LOD pyramid. It runs in three stages — optimising the mesh, computing a coplanarity attribute to drive the decimation, and building the layers — and switches LOD on for the mesh when it finishes.
Progressively simpler versions are then drawn as the camera moves away. The switch happens when the current level's average triangle drops to about one screen pixel, which is what keeps the transition from "popping" visibly.
The LOD factor in the mesh properties moves the transition distances. It is
dimensionless, default 1; lowering it switches sooner, which is faster but more
visible.
Remove deletes the layers again.
Turn on wireframe in the mesh group properties and fly toward and away from the model. The triangle density visibly changes at each transition.
Convert to Tiles
Convert To → Tiles asks for a target triangle count per tile (default 100,000) and how to handle textures:
- Share the model's original textures across all tiles — recommended, and much faster.
- Repack a separate texture atlas for each tile — only when the tiles must be independent of the original texture files.
A tiled model streams: only the tiles you are looking at are resident. That is what makes a model larger than memory usable at all.
6. Rebuild the indexes
Once the geometry is final:
| Command | Why |
|---|---|
| Optimization → Rebuild Partition Tree | The spatial index behind picking, interpretation snapping and intersection queries. A stale one makes clicking on the model feel slow. |
| Quality & Cleanup → Restructure → Optimize Structure | Reorganises the internal layout for faster rendering. |
| Quality & Cleanup → Restructure → Optimize For Textures | Reorders data to improve texture sampling. |
| Quality & Cleanup → Upgrade Format | Brings a mesh saved by an older version up to the current internal format. Worth running on anything inherited. |
Optimization → Load Into Memory keeps a mesh fully resident rather than streamed — faster to work on, at the cost of RAM. Hide (Keep in Memory) on the item menu is its counterpart: stop drawing something without paying to reload it later.
Point clouds
The same shape of problem, different commands.
| Step | Command |
|---|---|
| Thin an over-dense cloud | Filters → Voxel 2D (one point per X-Y cell) or Voxel 3D (one per 3D cell) |
| Remove overlap between scan positions | Overlap Reduction |
| Trim by range | Clip Range |
| Recover deleted points | Undelete All |
| Start again | Reload Original |
Point clouds also carry their own level-of-detail and per-region culling, so a large cloud does not need converting to anything — see Working with Large Models.
Optional extras worth knowing about
- Smooth Surface — reduces noise. Use sparingly; it moves the surface, which matters if you are going to measure on it.
- Remesh Surface — produces a more uniform triangulation. Useful before analysis that assumes even triangle sizes, expensive on a large mesh.
- Refinement → Tessellate — the opposite: subdivides triangles where you need more vertices than the source provided.
- Merge — combines several meshes into one. Do the cleaning first, on the pieces, where it is cheaper.
Order-of-operations traps
- Decimate or remesh after generating LOD discards the LOD layers. Generate LOD last.
- Tiling before cleaning bakes the junk into every tile, and tiles are far more awkward to clean than one mesh.
- Texture baking before fixing winding produces a texture on the wrong side.
- Moving the model after interpreting leaves the interpretation behind. Fix the coordinate system in step 2.
- Cleaning after computing attributes invalidates per-vertex and per-triangle attributes, because the vertices they were indexed against have gone.
Tips and troubleshooting
- The model has holes where the rock clearly is. Long-edge removal took out real triangles. Reload the original and raise the threshold.
- It still runs badly after decimating. The bottleneck may be textures rather than triangles, or the model may be one of many. See Working with Large Models.
- Clicking on the mesh is slow or misses. Rebuild the partition tree.
- Lighting is inverted after cleaning. Regenerate the vertex normals.
- A command is greyed out. Many operations need the mesh in memory — try Load Into Memory first.
See also
- ICP Alignment — registering one model onto another.
- M3C2 Comparison — comparing two surfaces once both are clean.
- Attributes — what to compute once the geometry is sound.
- Working with Large Models — when preparation is not enough.