The 3D Handbook
Topic

Level of detail (LOD)

Swapping an asset for cheaper versions as it gets smaller on screen, from classic LOD chains and HLOD to impostors and Nanite.

optimisationlodperformancefoliagenanite

Level of detail (LOD) means showing cheaper versions of an asset as it gets smaller on screen. Nearby, you see the full model; far away, a reduced mesh, a flat impostor or nothing at all. Unity describes its LOD Group as a component that "lets you manage level of detail", switching which renderers draw as the camera distance changes (Unity Documentation: LOD Group).

LOD is one of the main tools for staying inside a triangle budget and, with HLOD, a draw call budget.

Four Suzanne heads with fewer and fewer triangles from left to right.
An LOD chain made with Blender's Decimate modifier (Collapse): 3,936, 1,968, 983 and 392 triangles, that is 100%, 50%, 25% and 10%. The silhouette survives much longer than the inner wiring.Rendered in Blender 5.2 (Cycles) by the handbook author

#The LOD chain

An asset's LODs form a chain: LOD0 is the full-quality mesh, LOD1 is lighter, and so on. Each step removes triangles that no longer change what the player sees.

How much to remove per step varies. Unreal's LOD Group presets for small props, large props and decoration use 4 LODs with LODPercentTriangles set to 50 (Unreal Engine Documentation: Static Mesh Automatic LOD Generation). Epic's own manual walkthrough in the same page uses a steeper chain: LOD1 at 75%, LOD2 at 25% and LOD3 at 12% of the original triangles (Unreal Engine Documentation: Static Mesh Automatic LOD Generation).

Michal Cavrnoch lists this bench's chain as 17,786 triangles (LOD0), 13,335 (LOD1), 8,890 (LOD2) and 2,398 (LOD3), roughly 100%, 75%, 50% and 13%. The Sketchfab upload shows one level (13,335 faces, matching LOD1); use the wireframe to see which details could still go before LOD3.Michal Cavrnoch, via Sketchfab
Four versions of the same rock mesh labelled LOD0 to LOD3, each smaller and simpler, with triangle percentages 100, 75, 25 and 12, above a bar showing screen height thresholds where each LOD takes over.
A four-step LOD chain using the percentages from Epic's manual example. Each LOD takes over when the asset drops below a screen-size threshold.Diagram by the handbook author, percentages from Epic Games documentation

#Switching by screen size

Engines switch LODs by how big the object is on screen, not by raw distance. That way the switch happens at the same visual size whatever the field of view or resolution.

  • Unity sets each LOD's Transition (% Screen Size) as the object's height "as a percentage of the screen height". At 50%, a LOD becomes active "when the object fills half the height of the camera view" (Unity Documentation: LOD Group).
  • Unreal can work the thresholds out for you. Epic recommends keeping Auto Compute LOD Distances on: the algorithm uses the known visual error of each LOD to pick where it is acceptable. Setting screen sizes by hand "could lead to errors" (Unreal Engine Documentation: Static Mesh Automatic LOD Generation).

#Popping and LOD transitions

When one LOD replaces another in a single frame, players notice a pop. Three things reduce it:

  1. Better thresholds. Switch when the difference is below what the screen can show.
  2. Cross-fading. Unity's Cross Fade mode "applies a cross-fading effect to the model between the current and the next LOD" (Unity Documentation: LOD Group). In older Unity versions, cross-fade used a Transition Width to define a zone where both LODs render (Unity Documentation: LOD Group).
  3. Dithered transitions. Unreal supports dithered LOD transitions, which replace the hard switch with a gradual dithered one; the engine exposes a per-platform setting for "whether to allow dithered LOD transitions" (Unreal Engine API Reference: AllowDitheredLODTransition).

Cross-fading means both LODs render inside the transition zone (Unity Documentation: LOD Group), so the transition itself costs extra. Keep transition zones short.

#HLOD: LODs for groups of objects

A normal LOD reduces one mesh. Hierarchical LOD (HLOD) replaces many distant objects with one combined proxy. In Unreal's World Partition, HLOD layers group large numbers of Static Mesh Actors into a single "proxy mesh and Material", which keeps distant scenery such as mountains and cliffs visible after its cells unload (Unreal Engine Documentation: World Partition - Hierarchical Level of Detail). Epic uses HLODs "to reduce the number of draw calls per frame" (Unreal Engine Documentation: World Partition - Hierarchical Level of Detail).

Unreal offers three HLOD layer types (Unreal Engine Documentation: World Partition - Hierarchical Level of Detail):

  • Instancing: meshes become Instanced Static Mesh components using their lowest LOD. Suited to trees and foliage impostors.
  • Merged Mesh: meshes are merged into one proxy mesh.
  • Simplified Mesh: meshes are merged and then simplified.

Simplygon's HLOD builder goes further, building "a much cheaper approximation (single mesh, single UV and single material)" from all static meshes in a cell (Simplygon Documentation: Hierarchical Level-Of-Detail). See draw calls.

#Impostors and billboards

At great distances, even a low-poly mesh is wasted effort. An impostor replaces it with a camera-facing card showing pre-rendered images of the object.

  • Classic billboards are flat cards facing the camera. Ryan Brucks's Impostor Baker for UE4 includes a traditional billboard mode using 9 frames (8 side views and 1 top view) on a cross of cards with "72-81 verts" (80 Level: Impostor Baker for UE4).
  • Octahedral impostors store views from many directions in one texture using "a layout based on octahedra" for "more optimal use of the available texture space" (80 Level: Impostor Baker for UE4). Alan Zucconi explains that blending the three closest views, a technique he credits to Brucks, hides the jumps between frames (alanzucconi.com: Shader Showcase Saturday #7: Billboard…).
  • Tools: Houdini's SideFX Labs includes an Imposter Textures tool that "creates texture sheets to fake 3D objects in your game engine", with full octahedral, 3D, fixed-axis and animated variants (SideFX: Game Tools | Imposter Textures).
Twelve game-ready maples, each with three LODs plus a 36-triangle billboard. The listed counts show the pattern: the largest tree drops from 22,490 triangles (LOD0) to 9,057 and 4,580, while saplings start at around 500. Orbit close to the leaf cards, then imagine each tree reduced to a single card at distance.LOLIPOP, via Sketchfab
A tree mesh on the left, an arrow, and a square texture atlas on the right divided into a grid of small views of the same tree from different directions, with a single camera-facing quad below it.
An impostor bakes views of the mesh into a texture atlas. At runtime a single quad shows the view closest to the camera direction.Diagram by the handbook author

#Nanite and LODs

Unreal's Nanite replaces discrete LODs for static meshes: it uses "no discrete LODs", and the triangle count scales with screen resolution (Unreal Engine Documentation: Nanite Virtualized Geometry). Internally it still builds a hierarchy. Each level groups clusters and simplifies them to about half the triangles, and the engine picks the level whose error projected to the screen is small enough (SIGGRAPH 2021: Nanite: A Deep Dive).

Nanite does not replace every LOD technique. Karis notes that very distant content still needs merged proxies, because tiny instances still cost memory (SIGGRAPH 2021: Nanite: A Deep Dive). Foliage thins out as Nanite simplifies it; Epic's Preserve Area setting scales leaves up to compensate and "should be enabled on all foliage meshes and nothing else" (Unreal Engine Documentation: Nanite Technical Details). Fortnite's team, in contrast, advised enabling it only on foliage meshes "exhibiting this problem" (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…).

Since Unreal Engine 5.7, the Experimental Nanite Foliage system includes Nanite Voxels, which draw "millions of tiny, overlapping elements that read as a solid mass at distance", avoiding cross fades, pops and hand-made LODs (Unreal Engine news: Unreal Engine 5.7 is now available).

#Common mistakes

  • Too few steps between LOD0 and the last LOD. A jump from 100% to 10% pops badly.
  • Reducing silhouette first. Remove interior detail before silhouette edges; the outline is what reads at distance.
  • Ignoring materials. A LOD with fewer triangles but the same five materials saves little on draw calls. Merge materials in lower LODs where you can.
  • Different pivots or scale between LODs. Visible as a jump even when the shapes match. See pivot point.
  • Forgetting shadows. A distant LOD that casts a detailed shadow wastes the saving.

#In different tools

#Further reading and watching

References

  1. Unity Technologies · LOD Group (Unity 6.4 Manual) · Unity Documentation, 2026 · docs · accessed 2026-10-20
  2. Epic Games · Static Mesh Automatic LOD Generation · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
  3. Unity Technologies · LOD Group (Unity 5.6 Manual, legacy) · Unity Documentation, 2017 · docs · accessed 2026-10-20
  4. Epic Games · AllowDitheredLODTransition · Unreal Engine API Reference, 2026 · docs · accessed 2026-10-20
  5. Epic Games · World Partition - Hierarchical Level of Detail · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
  6. Simplygon / Microsoft · Hierarchical Level-Of-Detail (Simplygon 10.4) · Simplygon Documentation, 2026 · docs · accessed 2026-10-20
  7. 80 Level · Impostor Baker for UE4 · 80 Level · article · accessed 2026-10-20
  8. Alan Zucconi · Shader Showcase Saturday #7: Billboard Impostors · alanzucconi.com, 2018 · article · accessed 2026-10-20
  9. Mike Lyndon · Game Tools | Imposter Textures · SideFX, 2017 · video · accessed 2026-10-20
  10. Unity Technologies · Level of Detail (SpeedTree Runtime SDK Manual) · SpeedTree Documentation, 2026 · docs · accessed 2026-10-20
  11. Unity Technologies · Terrain tree LOD (Unity 6.1 Manual) · Unity Documentation, 2025 · docs · accessed 2026-10-20
  12. Epic Games · Nanite Virtualized Geometry · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
  13. Brian Karis · Nanite: A Deep Dive · SIGGRAPH 2021, Advances in Real-Time Rendering in Games, 2021 · talk · accessed 2026-10-20
  14. Epic Games · Nanite Technical Details · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
  15. Epic Games · Bringing Nanite to Fortnite Battle Royale in Chapter 4 · Unreal Engine tech blog · article · accessed 2026-10-20
  16. Epic Games · Unreal Engine 5.7 is now available · Unreal Engine news, 2025 · article · accessed 2026-10-20
  17. Epic Games · A first look at Unreal Engine 5 · Unreal Engine blog, 2020 · article · accessed 2026-10-20

Last updated 2026-10-22