Skip to content
The Technical ArtistArt. Code. Pipelines. Games.
perf 02
performance

Meshes, Nanite & LODs

Workingguide~2 min read

Where scene geometry costs live - draw calls, LOD chains, instancing, HLOD, mobility - and where Nanite may help and what still needs profiling.

On this page Draw Calls LODs Nanite Instancing & HLOD Mobility & Culling

2.1Draw Calls, Not Triangles

On non-Nanite content, the render thread usually chokes on draw call count before the GPU chokes on triangles. Every mesh section x every material slot x every shadow-casting light is submission work. Check stat scenerendering. The levers: merge material slots (a prop rarely needs four), combine small meshes, instance repeats, and give everything sane cull distances.

2.2LODs: Distant Geometry Should Be Cheap

Placeholder with instructions to screenshot the LOD colouration view mode
placeholder - lod colouration view mode
Four versions of a lantern from LOD0 to LOD3 retain its silhouette while progressively reducing wireframe density.
fig 09 - a healthy lod chain

Every non-Nanite mesh that appears at range needs a LOD chain - typically 3-4 levels halving triangle counts, with auto-generation fine for most props. For example, a missing LOD chain can leave a 400k-triangle hero rock rendered at full density from 200 metres away. Verify with the LOD Colouration view mode; set screen sizes so transitions happen before you can see them.

Red flag

High-poly meshes with LOD count = 1 are the first thing the Asset Health Dashboard hunts for - check the asset’s use and camera distance before deciding how much work it needs.

2.3Nanite - When It Saves You And When It Doesn't

Placeholder with instructions to screenshot the Nanite triangle visualisation
placeholder - nanite triangles, visualised

Nanite virtualises geometry: it renders roughly pixel-density triangles regardless of source polycount, eliminating LOD authoring and most draw-call pressure for opaque static geometry. Enable it for dense environment meshes, kitbash and scan content.

It's not free or universal: there's a fixed base cost per frame (fine when amortised over a Nanite-heavy scene, wasteful for a few props), and masked/two-sided/WPO materials, translucency, and skeletal meshes have restrictions or extra cost. Aggregate geometry like foliage needs care. Small teams' rule of thumb: Nanite for static opaque environment geometry; classic LODs for everything else. Check cost with the Nanite visualisation view modes.

2.4Instancing And HLOD

A thousand copies of the same rock should be one instanced draw (ISM/HISM or the Foliage tool), not a thousand StaticMeshActors. For big worlds, HLOD merges distant clusters into single proxy meshes so the horizon costs a handful of draws. World Partition automates much of this - but only if assets are authored instancing-friendly.

2.5Mobility And Culling

From the master checklist's highest-value rules: anything that doesn't move should be Static (Movable costs more in lighting, shadows, and transforms); disable shadow casting on small, distant, or insignificant objects - the shadow often costs more than the object; and cull aggressively - clutter, decals, and props need draw distances. Distance culling is nearly free; small objects that contribute little to the image are useful candidates to review.