LOD Optimization: Fix Pop, Cut Draw Calls, Boost FPS

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.

From immersive apps to game worlds and 3D scenes

Our dedicated team for VR/AR/MR development, Unity production and 3D modeling & animation — with its own case studies and capability decks.

Visit the dedicated studio
Showing 1 of 1All 242 services
LOD Optimization: Fix Pop, Cut Draw Calls, Boost FPS
Medium
from 1 day to 1 week
Frequently Asked Questions

Our competencies

What are the stages of Game Development?

Latest works

  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    1386
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    926
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    544
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    591

LOD Optimization: Fix Pop, Cut Draw Calls, Boost FPS

We encounter LOD issues on every second project. A misconfigured LOD Group in Unity does the opposite of what's intended: LOD0 switches to LOD1 too early, the player sees a sharp pop, and it feels like a bug. Or transitions are set by Screen Relative Height without accounting for actual distance—on orthographic cameras, LOD simply doesn't work. Our goal is to make LOD invisible yet effective.

The essence is that LOD is a system for managing scene complexity based on object visibility. It works correctly only when we account for: camera type, player movement speed, lighting (shadow casting from LOD1 is often worse than LOD0), and how the engine calculates distance.

How LOD pop arises and what to do about it

LOD pop is the main visual problem. It happens when the geometry and/or textures between levels differ too much. Classic case: an artist created LOD1 with 60% fewer polygons, but the UV layout shifted, and the normal map doesn't compensate for the loss of shape. The transition at 10 meters is visible to the naked eye. The fix is proper LOD generation (we use Simplygon or the Unity LOD Generator) while preserving UV seams and checking normal projection.

Shadows don't follow LOD transitions. In Unity, Shadow Caster Culling works independently of LOD Group. If you have LOD2 as a flat billboard with 2 polygons, but the shadow is still computed from the LOD0 mesh (because Force Shadow Casting = On), you pay for rendering shadows from the full geometry of an object that's visually absent. It's easy to miss—Frame Debugger shows a Shadow Pass with full draw call budget. We guarantee elimination of such hidden costs.

HLOD (Hierarchical LOD) not configured for large scenes. In open-world projects, standard LOD Group fails beyond 500 meters—objects are culled but the scene isn't unloaded. Unity HLOD (via the HLOD Creator package) automatically merges distant objects into a single mesh. Without it, you may have 3000 draw calls from trees on the horizon. We'll assess your project in 1–2 days.

Why LOD policy must differ per object type

We set a separate LOD policy for each category (characters, buildings, props, vegetation). Example from a mobile RPG with a 2×2 km open world: Trees: LOD0 (500 polygons) up to 15m, LOD1 (80 polygons) up to 50m, LOD2 (billboard cross) up to 150m, Culled beyond 150m. Buildings: LOD0 up to 30m, LOD1 up to 80m, LOD2 up to 200m. This configuration reduced draw calls from 680 to 210 in the city center.

For Unreal Engine, we use Nanite where applicable—on static meshes with high poly count. But Nanite doesn't replace LOD for moving objects and doesn't work with translucent materials. We configure HLOD in UE5 via World Partition HLOD Layer. According to the Unreal Engine documentation, Nanite best practice requires disabling LOD for Nanite meshes.

Cross-fading instead of hard pop. Unity LOD Group supports Cross Fade mode—a dithering transition between levels. It works via the Dither Fade shader keyword. On mobile, dithering is cheaper than you think—Adreno parallelizes it well. We enable it for large foreground objects, and keep instant transition for small faraway props.

Vegetation is a separate story. SpeedTree LOD integrates into Unity through a separate pipeline. The main pitfall: SpeedTree billboard LOD is rendered via a separate BatchRendererGroup, and you must profile it separately from the main draw call counter. We've seen projects where 40% of GPU time went to 2000 billboard trees that seemed "already optimized." We train teams on such nuances as part of support.

How to set up LOD in 5 steps

  1. GPU profiling: Open Profiler → GPU Usage and Frame Debugger filtered by draw calls. Identify how many objects are rendered with excessive detail.
  2. Overdraw analysis: In Scene View, enable Overdraw mode—find objects with high overdraw without LOD.
  3. Classification: Divide objects into categories and set level counts and threshold distances per the table below.
  4. LOD generation: Use Simplygon or the built-in generator. For critical meshes, manual refinement.
  5. Testing on target platform: Check for pop absence and FPS improvement.
Category Levels Thresholds (m) Shadows
Characters LOD0, LOD1, LOD2 0–10, 10–25, 25–50 On up to LOD1
Buildings LOD0, LOD1, LOD2 0–30, 30–80, 80–200 On up to LOD0
Props (small) LOD0, LOD1 + Culled 0–5, 5–15 Off on LOD1
Vegetation (trees) LOD0, LOD1, Billboard, Culled 0–15, 15–50, 50–150 Off on LOD2

Our process for LOD work

The audit starts with Profiler → GPU Usage and Frame Debugger. We count how many objects are rendered beyond visible detail. After the audit, we prepare an LOD specification: a table with object categories, level counts, threshold distances, and shadow policy per level. This artifact is agreed with the art team.

Implementation: either configure existing LOD Groups, create LOD assets (if absent), or auto-generate with manual fixes for critical objects.

After an audit, we found 450 objects without LOD. We created LOD assets with 2–3 levels, applied cross-fade for buildings and instant for props. Result: FPS rose from 28 to 55 on a Samsung Galaxy S10. Draw call savings: 40%.

What's included in the work

Deliverable Description
LOD specification Document with thresholds, levels, and shadow settings per category
Configured LOD Groups All assets with correct configuration
Optimized meshes Generated or manually refined LOD copies
Baking recommendations Instructions for artists on preparing source assets
Implementation support Consultations during integration and testing (1 month)
Task scale Estimated timeline
LOD settings audit + report 1–3 days
LOD setup for one scene (up to 200 object types) 1–2 weeks
LOD policy design + implementation for open world 3–6 weeks
HLOD/Nanite integration into existing project 2–4 weeks

Contact us for a consultation—we'll prepare a proposal for your project. Our engineers have experience setting up LOD for AAA projects and mobile games. Drop us a line, we'll assess your task in 1–2 days with no obligations.