Unity's LOD Group, from separate files
Part of LODs and billboards for low poly models
Unity's levels of detail live in one component, the LOD Group. It holds each level's renderers and the screen size at which each takes over. This is how to build one from separate model files, which is what most exports give you, and the settings around it. It is the Unity half of LODs and billboards for low poly models; billboard trees make the far level, tree colliders go on the same prefab, and the Godot article is the same job there.
From files named for their level
If a single model file contains children named with the suffixes _LOD0, _LOD1, _LOD2 and so on, Unity's importer builds the LOD Group for you: the model's root gets the component with a level per suffix. This is the FBX pipeline's convention and it works for any format that carries a hierarchy. An OBJ export with three separate files does not qualify, so you build the group by hand, once, and save it as a prefab.
Building one by hand
- Create an empty GameObject and name it for the tree.
- Drag the LOD0, LOD1 and LOD2 models into the scene and make them children of it, at the same position and rotation, at zero.
- Select the parent and Add Component, LOD Group.
- The component shows a bar with LOD 0, LOD 1, LOD 2 and Culled. Click LOD 0 and, in the Renderers list below, add the LOD0 child's Mesh Renderer; the same for LOD 1 and LOD 2. Drag the models onto the level's box if you prefer.
- Drag the parent into the Project window to make a prefab.
Each level's renderer can be several objects; a tree whose trunk and foliage are separate meshes adds both to each level.
The thresholds
The boundaries between levels on the bar are screen relative transition heights: the fraction of the screen's height the model's bounds occupy when the level switches. Drag them, or type the value on each level. Reasonable starting values for a tree: LOD 0 down to 60 percent, LOD 1 down to 30, LOD 2 down to 10, then Culled. A prop that is small on screen most of the time wants its LOD 0 threshold higher, so it leaves the full mesh sooner.
The camera icon on the bar scrubs the Scene camera through the distances so you can see each swap. Bounds matter: Unity measures from the renderers' bounds, so if LOD1's bounds differ from LOD0's, the swap point moves between levels. Levels built from the same tree have the same bounds; levels from decimation may not.
Fade Mode
The dropdown at the top of the component. None is a hard swap. Cross Fade dithers the outgoing level into the incoming one over a fraction of the level's screen height, set by Fade Transition Width on each level; it needs a shader that supports it, which Unity's Standard and URP Lit do. Speed Tree is the cross-fade variant SpeedTree models use, with a smooth vertex transition; not for hand-built levels. Cross Fade with a width around 0.1 hides the pop on anything the player looks at directly.
Quality settings
LOD Bias, in Project Settings under Quality, scales every threshold: a bias of 2 keeps each level twice as far out; 0.5 swaps sooner. Maximum LOD Level drops the highest levels entirely on low quality settings, so LOD 0 is never used on a low-end preset. Set these per quality level rather than tuning every group.
Batching and instancing
A LOD Group's renderers batch like any others. Static batching merges static renderers with the same material, and works with LOD Groups: each level's mesh joins the batch for its material. GPU instancing, ticked on the material, draws all trees at the same level in one call. Neither needs anything from the LOD Group itself; what they need is one material, which a palette texture gives you.
Billboards as the last level
The last mesh level can be followed by a billboard: add a quad with the tree's picture on a cutout material as another child, and make it the last level before Culled, or use a Billboard Renderer with a Billboard Asset. The billboard article makes both.
What PolyMason exports
The tree builder writes LOD0, LOD1 and LOD2 as separate OBJ files with the same bounds and the same palette, so the group above is three drags and a prefab. The zip's manifest lists the exact triangle count of each.
More in this guide
- LODs and billboards for low poly modelsHow levels of detail work, what triangle counts are reasonable for low poly trees, rocks and buildings, how to make the levels so the swap does not pop, billboards and impostors for the far distance, and the LOD setup in Unity, Godot and Unreal.
- Billboard trees in Unity: the far level of detailWhat a tree billboard is, how to make the picture, the two ways to show one in Unity, a quad with a cutout material or a Billboard Renderer, how terrain trees do it for you, and the settings that keep it from looking flat.
- Levels of detail in Godot 4: automatic mesh LODs and visibility rangesThe two LOD systems in Godot 4, the automatic mesh LODs the importer generates and the visibility ranges you set on nodes, how to control each, fading between levels, and how they work with MultiMesh for a forest.
- Tree colliders in Unity: a capsule on the trunk, not a mesh on the canopyWhy a tree's collider should be a capsule round the trunk and nothing round the canopy, how to set it up on a placed tree and on a terrain tree, what Generate Colliders on the importer does wrong, and the same in Godot and Unreal.
Or build a tree and see what comes out.