Levels of detail

Swapping simpler meshes as objects recede. How the technique works and when it is the wrong answer.

A level of detail is a reduced version of a mesh used when an object is far enough away that the reduction is invisible.

The principle

An object covering thirty pixels does not need thirty thousand triangles. Rendering a simplified version costs less and looks identical at that size.

Generating them

  • Automatic reduction in the DCC tool or engine. Fast, adequate for most props.
  • Hand-authored for hero assets, where an artist decides what to keep.
  • Impostors — a billboard showing a pre-rendered image — for the most distant level of very numerous objects like trees.

Switching

By screen coverage, not world distance. A large object at fifty metres covers more pixels than a small one at ten, and pixel coverage is what determines visibility of detail.

Making the transition invisible

  • Preserve the silhouette. Interior detail can go; the outline is what the eye tracks.
  • Switch late. Most popping complaints are thresholds set too aggressively.
  • Keep UVs consistent across levels, or the texture visibly shifts at the swap.
  • Dither or cross-fade the transition where the engine supports it.

When LODs do not help

  • Draw-call-bound scenes. LODs reduce vertices, not calls. Sometimes they increase calls, by preventing batching between objects at different levels.
  • Objects always seen close. A first-person weapon has one distance.
  • Very small props. The memory cost of several versions outweighs the saving.
  • Nanite-style virtualised geometry, which handles the problem differently — see Nanite.

Memory cost

Each level is stored. A four-level chain is roughly a third more memory than the base mesh alone. On memory-constrained platforms that trade is not automatically worth it.

With generated assets

Build the chain from your retopologised LOD0, not from the raw reconstruction. Reducing an already-arbitrary mesh gives you a chain of arbitrary meshes.