Guide
Game LOD (level of detail) explained
A hero character up close might cost 80,000 triangles; the same character two city blocks away might render as 800 triangles and nobody notices — because each pixel on screen only has room for a handful of them. Level of detail (LOD) is the art and engineering of swapping cheaper representations as objects shrink on screen, so your frame budget stays stable without sacrificing fidelity where players actually look. This guide covers mesh LOD chains, texture mipmaps, impostors and billboards, how engines pick LOD levels from screen size, why pop-in happens and how to hide it, animation and shader quality tiers, and how LOD interacts with open-world streaming — plus a production checklist you can run before ship.
Why LOD exists: pixels are the real budget
GPUs are fast, but not infinitely so. Every frame has a triangle throughput ceiling and a fill-rate ceiling (how many pixels you shade). A forest of 50,000-tree hero meshes would melt a console; the same forest with per-tree LOD, instancing, and impostors at distance can hold 60 FPS. The governing insight is projected screen size: an object occupying 2% of the viewport needs far less geometric detail than one filling 40%.
LOD is not optional polish for AAA titles — browser WebGL games, mobile RPGs, and competitive shooters all depend on it. Without LOD, artists either ship tiny worlds or accept slideshow frame rates. With disciplined LOD, you can place more content in view and spend saved milliseconds on lighting, particles, and gameplay systems.
Mesh LOD: discrete chains and simplification
The most visible form of LOD is a mesh LOD chain: LOD0 (hero, highest detail), LOD1, LOD2, … down to a coarse silhouette or culled entirely. Each step removes edges via mesh simplification — collapsing vertices that contribute little to silhouette or shading.
Hand-authored vs automatic LOD
Automatic LOD tools (Simplygon, Unreal Mesh Reduction, Blender Decimate) generate chains from a single high-poly source. Fast for props and environment kits; watch for collapsed mouth interiors on characters or flattened foliage cards.
Hand-authored LOD means artists sculpt LOD1/LOD2 with deliberate edge preservation — critical for hero characters, weapons held close to camera, and marketing screenshots where LOD0 dominates. Production teams often auto-generate a baseline, then artists fix silhouettes on LOD1 and LOD2 manually.
Discrete vs continuous (HLOD)
Discrete LOD switches whole meshes at thresholds — simple, predictable. Continuous LOD (geomorphing) blends vertex positions between levels over a few frames to reduce popping; more GPU cost, common in film-quality PC settings. Hierarchical LOD (HLOD) merges distant clusters of objects into single combined meshes (a city block becomes one draw call with one coarse mesh), essential for open worlds.
How engines choose which LOD to show
Engines evaluate screen-relative size — often the ratio of object bounding-sphere diameter to viewport height, sometimes weighted by distance and field of view. Typical pattern:
- LOD0 — object covers more than ~10–15% of screen height (varies by project).
- LOD1 — mid distance, still recognizable features.
- LOD2+ — far distance, silhouette only.
- Culled — below a minimum pixel footprint; not drawn at all.
LOD groups synchronize switches: a turret base, barrel, and gunner swap levels together so you never see a high-poly barrel on a low-poly pedestal. Parent transforms matter — a child mesh with its own aggressive LOD may pop while the parent stays smooth unless grouped.
Per-platform curves ship different thresholds: mobile swaps to LOD2 earlier; PC ultra holds LOD0 longer. Document these in data tables, not buried in engine defaults, so QA can regression-test both ends.
Texture LOD and mipmaps
Geometry is half the story. A 4K albedo on a distant wall wastes memory bandwidth shading pixels that cannot resolve that detail. Mipmaps are pre-downsampled copies of a texture (half res, quarter res, …) stored in the same GPU allocation. The GPU selects the appropriate mip level based on screen coverage — distant surfaces sample coarse mips automatically.
Practical rules:
- Always generate mips for 3D textures unless you have a rare UI-only reason not to; missing mips shimmer and alias at distance.
- Texture streaming loads higher mips as you approach (open-world standard); budget VRAM and disk IO — streaming hitches show as blurry textures that sharpen a second late.
- Normal map mips lose fine detail; very low mips flatten lighting response. Some pipelines bake coarse normal detail into the albedo at far mips.
- Anisotropic filtering samples more mips along grazing angles (ground textures viewed at shallow angles); 4x–16x is cheap on modern GPUs and reduces muddy floors.
Pair mesh LOD with texture resolution per LOD: LOD2 props can use 512px atlases while LOD0 heroes use 2K–4K, cutting memory when the mesh no longer justifies texel density.
Impostors, billboards, and last-resort LOD
At extreme distance, even a 200-triangle mesh is wasteful for a tree or crowd member. Billboards are camera-facing quads with a texture; impostors bake multiple viewing angles (octahedral or hemispherical atlases) so the quad looks volumetric as you orbit. Forest engines and strategy games lean on impostor forests beyond a few hundred meters.
Trade-offs: impostors break in strong perspective close-ups, cast wrong shadows unless faked, and need rebaking when seasonal art changes. Use them where players never approach — skyline trees, distant armies — not for interactable loot.
Card foliage (crossed planes with alpha-cutout leaves) sits between full meshes and impostors; cheap but overdraw-heavy when stacked. LOD chains often transition: full mesh → reduced branch cards → billboard impostor → culled.
LOD pop-in: causes and fixes
Pop-in is the visible snap when LOD levels switch — a rock suddenly gains cracks, a character's fingers appear, a tree doubles in branch count. Players notice motion in peripheral vision even when they cannot name the artifact.
Mitigation techniques
- Dithered LOD crossfade — dissolve between levels using screen-space noise; Unreal and Unity both support variants. Costs overdraw during the blend window.
- Temporal blending — interpolate over 2–4 frames; works best with stable camera motion.
- Fog and atmospheric perspective — hide transitions beyond a distance band; legitimate tool, not just mood (see our lighting guide).
- Tighter LOD1 authoring — the cheapest fix is making LOD1 close enough to LOD0 that the swap is subtle; do not rely only on shader tricks.
- Hysteresis — use different thresholds for upgrading vs downgrading LOD so objects do not oscillate at boundary distances.
- Screen-space impostor fade — fade impostors in before swapping to meshes when approaching.
Profile pop-in on target hardware at default FOV and max FOV — wide angles shrink screen size and trigger earlier LOD switches.
Animation LOD and simulation throttling
Skeleton updates are CPU/GPU work. Animation LOD reduces cost for distant characters:
- Update rate reduction — animate every 2nd or 3rd frame beyond a distance threshold; acceptable for background crowds.
- Bone LOD — disable finger, face, or cloth bones on far LOD meshes.
- Cached poses — static background NPCs hold last pose or a looping idle without full IK.
- Ragdoll vs keyframe — switch off physics on corpses at distance.
Sync animation LOD with mesh LOD switches — swapping to a mesh without facial bones while still running lip-sync looks broken. Our animation blending guide covers how state machines interact with these cuts.
Shader and material LOD tiers
Not every surface needs full PBR with parallax, detail normals, and triplanar blending at distance. Shader LOD swaps material complexity:
- Tier 0 — full PBR, emissive, detail maps (hero, first-person weapons).
- Tier 1 — drop parallax and detail overlays; single normal map.
- Tier 2 — diffuse + simple roughness; no normal map.
- Tier 3 — unlit or vertex-lit for extreme distance props.
Engines expose shader LOD or quality switch nodes; tie them to
the same screen-size metrics as mesh LOD. A common bug is mesh LOD2 still running an
expensive water shader — always profile the combined cost.
LOD, culling, and world streaming
LOD complements other visibility systems; it does not replace them:
- Frustum culling — skip objects outside the camera view entirely.
- Occlusion culling — skip objects hidden behind walls (hardware queries or baked cells).
- Distance culling — hard cutoff beyond gameplay relevance.
- World partition / streaming — load cells as the player moves; LOD within a loaded cell still matters because entire neighborhoods can be in view.
Open-world pipelines generate LODs at build time per streaming cell. Changing LOD thresholds without rebuilding HLOD clusters can desync combined meshes — version your baked data with the level build ID.
Instancing, batching, and LOD together
GPU instancing draws many copies of the same mesh+material in one call — rocks, grass, debris. Instancing requires shared LOD level per batch: if one rock in a batch is near the camera, the whole batch may force LOD0. Group instances spatially or use hierarchical instancing (Nanite in Unreal, custom batching in Unity) so distant clusters share coarse LOD.
Draw call budget often improves when LOD reduces material variants — a distant city using one HLOD material beats fifty unique LOD0 facades. Track both triangle count and draw calls when tuning; optimizing one while ignoring the other fails on mobile.
Workflow: from blockout to validated LOD chains
- Set per-category budgets — hero character LOD0 triangle cap, prop cap, environment piece cap; publish in a style guide.
- Generate baseline chains early — catch silhouette failures in greybox before texturing.
- Author LOD1 fixes for heroes — faces, hands, weapons.
- Define screen-size curves per platform — store in data, not per-artist intuition.
- Group related meshes — vehicles, modular buildings, weapon attachments.
- Validate in motion — fly-through cameras, sprint across biomes, not only static inspection views.
- Capture pop-in bugs — video review at 0.25x speed; file tickets with timestamp and coordinates.
Production checklist
Before locking content for ship, confirm:
- Every renderable mesh has a LOD chain or documented reason for exclusion (tiny debris only).
- LOD groups switch in sync for multi-part assets.
- Textures have mips and streaming tags where applicable.
- Pop-in review passed on min-spec PC, console, and mobile targets at default and max FOV.
- Animation and shader tiers tied to mesh LOD distances.
- Impostor swap distances tested from approach angles players use, not only top-down debug cameras.
- Triangle and draw-call budgets met in worst-case vistas (city overlook, boss arena with adds).
- HLOD / streaming data rebuilt after structural level changes.
Key takeaways
- LOD trades detail for screen size — the pixel is the real budget unit, not the asset on disk.
- Mesh, texture, animation, and shader LOD stack — optimize the combination, not one layer in isolation.
- Pop-in is a content problem first — better LOD1 meshes beat shader hacks alone.
- Platform curves differ — mobile needs earlier swaps; document and test both.
- Open worlds need HLOD and streaming — per-object LOD inside loaded cells is necessary but not sufficient.
Related reading
- Game shaders explained — material tiers and GPU pipeline costs behind LOD switches
- Game lighting explained — fog and atmosphere that hide distant LOD transitions
- Game animation blending explained — skeletal LOD and update-rate throttling for crowds
- Game particle systems explained — VFX LOD and overdraw at distance