As you add rocks and trees, the game can get heavy when you survey a wide view. You want detail on nearby rocks, but do distant small rocks need the same detail? Rocks completely hidden behind a wall probably do not need drawing into the current frame either.
Using those differences to reduce rendering work is what LOD and culling do. LOD simplifies shapes; culling narrows what gets drawn. Neither is "delete everything to go faster" — both are adjustments that preserve the appearance the player needs.
In this article we try "the shape changes" and "it stops being displayed" on one mesh, the thing representing a 3D model's shape. After that we move on to checking objects hidden behind a wall and setting distances for many objects at once.
What You'll Learn
- The difference between reducing draws via LOD, frustum, occlusion, and distance
- Generating LODs and how Screen Size switches between them
- Cull Distance Volume settings, and what to check when nothing disappears
- The flow of moving between appearance and measurement to reach usable settings
This assumes Windows UE5 and experience placing things in a level. The hands-on uses a Static Mesh placed in a level, without Nanite. No Blueprint or external assets are needed. The diagrams are schematics for this blog.
- First, separate the work you are reducing
- LOD: simplifying things that appear small
- Culling: cutting draws outside the view and behind objects
- Distance culling: try it on one, then set many at once
- FreezeRendering: confirming how hidden objects are treated
- Hands-On: comparing before and after while keeping appearance
- Choosing between this and Nanite
- Bonus: Good to Know Up Front
- Summary
First, separate the work you are reducing
LOD (Level of Detail) prepares shapes of differing detail for the same object. It uses a detailed shape up close and a simplified one once it becomes small on screen.
Culling removes objects matching a condition from the draw set. Outside the view, behind something, or too far away, you can reduce the work of drawing that object to the screen.

| Method | What it changes | Example |
|---|---|---|
| LOD | Simplifies one object's shape | Reduce fine bumps on a distant rock |
| Frustum culling | Excludes what is outside the camera's view | Drop rocks behind you from the draw set |
| Occlusion culling | Excludes what is hidden behind nearer objects | Drop rocks fully hidden by a wall |
| Distance culling | Excludes things beyond a set distance | Remove small distant decorations |
Reducing triangles with LOD reduces the work of processing that shape. Culling reduces the target's draw preparation and GPU-side drawing. But it is not fixed that "LOD is GPU only and culling is Draw only." Compare overall and per-thread times with stat unit.
Being culled does not delete the Actor. Tick, collision, and in-memory data can all remain. Keep "not drawing it to the screen" separate from "removing it from the game."
LOD: simplifying things that appear small
On a traditional Static Mesh, the most detailed shape is LOD0 and the simplified versions are LOD1, LOD2, and so on. So the silhouette does not change dramatically when switching, it uses a shape suited to the apparent size.

Detail can be dropped at distance, but how much depends on the object. A rock's fine bumps may go unnoticed, while a missing bridge pillar or a broken tree silhouette can be visible even from far away.
First, prepare LODs on one mesh
Use a Third Person template project you can walk in. For practice, copy the Engine's basic Sphere shape into your project.
- Turn on "Show Engine Content" in the Content Browser's "Settings."
- Select Sphere under "Engine → BasicShapes" and copy it with
Ctrl + C. - Create a practice folder in your own "Content," paste with
Ctrl + V, and name it SM_VisibilityProbe. - Double-click the copied asset to open the Static Mesh Editor.
- Confirm "Enable Nanite Support" under "Nanite Settings" is off. If you changed it, press "Apply Changes."
From here we edit that copy. If you already have your own rocks, you can test on a duplicate of them.
Set Number of LODs to 3 under "LOD Settings" and press "Apply Changes." That is three levels including LOD0. Next open "Reduction Settings" for LOD1 and LOD2, set "Percent Triangles" to 50 and 15 respectively, and apply.
Percent Triangles adjusts the proportion of triangles kept in a simplified version. We reduce it heavily here to make the difference easy to see. Also look at each LOD's triangle count and confirm they actually decreased in stages.

Turn Auto Compute LOD Distances on at first and let it compute switching thresholds. If the LOD items are not visible, turn on "Custom" in the "LOD Picker" to show each level.
Move the Static Mesh Editor's preview away and, if the displayed LOD number changes, you have confirmed switching. If the number stays manually specified, return it to "LOD Auto." Save once confirmed.
Screen Size is on-screen size, not distance
Each LOD's Screen Size is the size threshold deciding the switch. It is computed from how large in diameter the sphere enclosing the mesh appears on screen. Do not read 0.25 as "25 meters" or "25% of screen area."
At the same distance, a large rock and a small stone appear at different sizes on screen. Zooming the camera to make something large also changes the detail needed.

To tune manually, turn Auto Compute LOD Distances off. Set LOD1 to 0.5 and LOD2 to 0.2, for example, and move the preview back and forth to watch switching. These are practice values, not universal recommendations for all assets.
To delay switching to LOD1 and keep the detailed shape longer, make LOD1's Screen Size smaller. To simplify earlier, make it larger. Rather than chasing the numbers alone, confirm the silhouette does not jump when it changes.
In the level, color-code to see switching
Place one SM_VisibilityProbe in the level. Leave Scale at 1 on X, Y, and Z, and place it where it does not sink into the floor. From the View Mode menu showing "Lit" and friends in the viewport, choose "Level of Detail Coloration → Mesh LOD Coloration." Move the camera closer and farther and watch the per-LOD colors switch.
Once you confirm the color change, return to Lit and check with the normal appearance too. Colors changing confirms the setting; the silhouette not bothering you confirms the quality.
Culling: cutting draws outside the view and behind objects
The space the camera can capture is called the frustum. It is the volumetric range of view spreading out from the camera. Frustum culling removes objects outside that range from the draw set.
Meanwhile, some objects inside the range are completely hidden behind a wall. Occlusion culling is what checks that blocking.

In a normal PC project the engine performs these tests. Rather than building your own system first, confirm what is being excluded. A corridor's corner can hide what is beyond, while an RTS plain viewed from a high camera hides little. The same occlusion works differently depending on the scene.
Bounds are the test volume enclosing an object
Visibility tests use the bounds enclosing a mesh. It is a box or sphere expressing the approximate extent. Show them with "Show → Advanced → Bounds" in the editor.
Bounds much larger than the object are one reason something can be treated as "maybe still visible" while hidden. Too small, on the other hand, leads to visible parts disappearing.

For example, when a material sways a tree, the bounds need to include the moved branches. Rather than shrinking them just to cull sooner, match the test volume to the visual motion.
Occlusion testing costs work too, and some approaches lag in reflecting results. And draws needed for things like shadows are handled separately even when not directly visible on screen. Do not assume "once it is behind something, all cost related to that Actor is zero."
Distance culling: try it on one, then set many at once
Even with distant objects visible, you can decide "beyond here, do not draw small decorations." Set it on one first and confirm what changes.
Cull just one at 15 meters
- Select the SM_VisibilityProbe placed in the level and set "Mobility" in the Details to Static. That treats it as something that does not move during the game.
- Search "Draw Distance" in the Details and set Desired Max Draw Distance to 1500.
- Turn "Never Distance Cull" off. With it on, no distance-based exclusion happens.
- Deselect, put the mouse in the viewport, and press
Gto switch to Game View. - Move toward and away from the sphere and confirm the display switches.
UE's standard distance unit is 1 uu = 1 cm, so 1500 is 15 m. The distance is measured from the camera to the target's bounds center, not from the player's feet. Game View is a mode that hides editing displays and shows how it looks in game.

Success is it vanishing as you move away and returning as you approach. We use a deliberately short distance so the mechanism is clear.
Group by size with a Cull Distance Volume
Instead of entering a distance for each rock and prop, a Cull Distance Volume applies settings to targets inside a range at once. A Volume expresses the spatial range the settings apply to.
- Set the sphere's Desired Max Draw Distance back to 0 to remove its individual limit. Turn "Allow Cull Distance Volume" on.
- Search Cull Distance Volume in "Place Actors," place it, and expand it to enclose the sphere.
- Turn the Volume's "Enabled" on and match "Cull Distances" in the Details to the table below. Edit the initial rows and add more with "+" if needed.
| Size | Cull Distance | Intent |
|---|---|---|
| 100 | 1500 | Small things up to 15 m |
| 500 | 4000 | Medium things up to 40 m |
| 10000 | 0 | Large things are never distance-culled |
Size is the target's bounds size and Cull Distance is the distance at which it disappears. Each target uses the row with the nearest Size. Size 100 is not a range meaning "everything 100 or under," and Size 0 does not designate "all sizes."

Nor does it smoothly interpolate distances between rows. Select a target and look at Current Max Draw Distance to see which distance was actually applied. Confirm the sphere gets 1500 and move toward and away again in Game View.
A row whose Cull Distance is 0 means "do not distance-cull that row's targets." Use it to keep large buildings visible from far away. When several Volumes overlap or an individual limit exists, the shortest non-zero distance wins, so confirm the result in Current Max Draw Distance.
When it does not disappear, or disappears too soon
| Situation | What to check first |
|---|---|
| It does not disappear while editing | Whether you deselected and switched to Game View. Also confirm in Play |
| The individual setting does nothing | Whether Nanite is off, whether Never Distance Cull is off, whether the camera is far enough |
| Only the Volume has no effect | Whether it encloses the target, whether Enabled and Allow Cull Distance Volume are on, whether the target is a Static placed object |
| It disappears closer than expected | What Current Max Draw Distance says. Whether another Volume or individual setting remains |
| Even the large floor disappears | Whether you prepared a row with a large Size and Cull Distance 0. Turn the floor's Allow Cull Distance Volume off if needed |
We test with a pre-placed ordinary Static Mesh here. When extending to Foliage, instances, or runtime-spawned objects, check each one's placement method and distance settings.
FreezeRendering: confirming how hidden objects are treated
Even when culling works, only invisible things stop being drawn, so it is hard to tell from the front view. FreezeRendering freezes the rendering state at that viewpoint so you can inspect from another angle.
Put the practice sphere behind a sufficiently large opaque wall. Scaling a basic Cube in width and height makes a confirmation wall. Here, to avoid mixing with distance culling, set the sphere's Desired Max Draw Distance to 0 and turn Allow Cull Distance Volume off.
- Set the editor's level viewport to Lit and move to a position where the sphere is fully hidden by the wall.
- Wait a moment for the tests to settle and enter
FreezeRenderingin the console. - Move the camera to the side of the wall and peek behind it.
- If the sphere was excluded at the moment you froze, it is not drawn even when you go around.
- Enter
FreezeRenderingagain to unfreeze and confirm the sphere reappears.

Open the console the same way as in the stat unit article. While frozen this is not the normal play display, so avoid comparing performance in this state and unfreeze after checking.
If the sphere remains, check whether part of it shows past the wall and whether its bounds stick out. Wireframe display does not confirm occlusion, so use Lit.
As another check, r.VisualizeOccludedPrimitives 1 in the editor shows the bounds of occlusion-excluded objects as green boxes. Set it back to 0 afterwards.
Hands-On: comparing before and after while keeping appearance
Once you have confirmed the mechanism on one, increase the same spheres a little at a time. At the end, replace them with your own rocks and trees and look for settings that preserve appearance.
Change only the settings with the same layout
Use an open spot away from the wall used for occlusion. Duplicate the sphere with Alt + drag and line up several rows from near to far. About 32 is enough at first. Increase to 128 or 256 if needed. Space them laterally so they do not overlap into one line from the front, and create rows both within 15 m of the camera and beyond it.
Enclose the whole set in a Cull Distance Volume, turn the spheres' Allow Cull Distance Volume on, and align Desired Max Draw Distance to 0. Toggling the Volume's Enabled lets you compare with and without distance culling on the same layout.

We compare three states. Note the values you need to restore, such as the asset's Screen Size, before you start.
| State | Settings | What to watch |
|---|---|---|
| A: keep the detailed shape | Placed spheres' Forced LOD Model 1, Volume off | The comparison baseline |
| B: automatic LOD switching | Forced LOD Model 0, Volume off | Whether small spheres simplify |
| C: also exclude the distant | Forced LOD Model 0, Volume on | Whether distant spheres leave the draw set |
Select the level's spheres together and search Forced LOD Model in the Details to change it. Here 0 is automatic and 1 is locked to LOD0. Note that it is offset by one from the LOD number itself.
Read what changed, not just the numbers
Launch Standalone in each state and measure from the same position, orientation, quality, resolution, and FPS cap. Avoid measuring right after loading; note Frame, Game, Draw, and GPU with stat unit and rendering totals with stat scenerendering.
In stat initviews, Frustum Culled Primitives is the count excluded as outside the view and Occluded Primitives the count excluded by occlusion. A primitive here is the rendering side's unit such as a mesh. It does not necessarily map one-to-one to an Actor.
| Result | What to consider next |
|---|---|
| Triangles dropped in B but Frame barely changed | Other work or the FPS cap may be limiting the whole in this scene |
| Distant things vanished in C but Draw barely changed | Investigate whether the target count is small or other draw prep dominates |
| The Occluded count is small | Natural in an open view. Do not target a high exclusion rate itself |
| Times shortened, but spheres pop in ahead of you | The distance is too short. Adjust display quality too |
Read triangle count changes alongside each LOD's display in the Static Mesh Editor and the level's LOD coloration. stat scenerendering's Mesh draw calls is useful too, but it will not necessarily equal the placement count. It varies with how identical meshes are batched, with materials, and with shadow draws.
A small number of spheres is practice for confirming what the settings mean. No particular time saving is guaranteed and the difference may be tiny. Returning the settings to A once to confirm the original trend also reveals whether conditions changed.
Walk around and decide the distance at which it may vanish
Walk around in state C. If sudden pop-in bothers you, extend the Cull Distance from 1500 to 2500 and re-check appearance and time. Set important buildings and landmarks to stay visible from far away.
At the end, return Forced LOD Model to 0 and confirm in the normal Lit display with FreezeRendering unfrozen. Close the diagnostic displays too and check how it looks in ordinary play.
Choosing between this and Nanite
Nanite is a rendering system that splits a mesh into fine clusters and automatically chooses the detail and display range it needs. It differs from the flow of manually tuning LOD0, 1, and 2 on an ordinary Static Mesh.
We turned Nanite off in this article to confirm traditional LOD and distance settings one at a time. Do not assume the same Cull Distance Volume settings simply apply to Nanite. Confirm the supported scope against your UE version and how meshes and Foliage are placed.

Nor is it the case that vegetation is always Nanite-incompatible. Masked, which cuts out leaf shapes, and Translucent, which is see-through like glass, are different cases. Support for Skeletal Meshes has advanced too, so rather than lumping "characters are all incompatible," check the uses and constraints in the Nanite article.
Bonus: Good to Know Up Front
LOD Groups also help for large amounts of background
The Static Mesh Editor's LOD Group provides per-use settings such as SmallProp. Before entering the same settings by hand across dozens of background assets, you can start from a preset. Applying one changes existing LOD settings, so try it on a duplicate first.
There are also ways to draw in batches
To place many identical rocks or trees, Instanced Static Mesh / HISM handles them together. It does not necessarily make everything one draw call, but it is an option for reducing per-instance overhead and draw preparation.
Culling does not reduce loading
Even after reducing what is drawn, memory problems can remain while a large level's full data is still needed. In that case, go to level streaming and World Partition. HLOD, which combines distant views, is another approach worth considering on large levels.
Once you can confirm "it simplified," "it vanished by distance," and "it was excluded behind the wall" on that first object, choosing settings to try in a heavy scene becomes easier. Adjust how much you draw while thinking about what you want to keep visible from far away in your own game.
Summary
- LOD "makes it coarser"; culling "does not draw it at all"
- LOD switches on Screen Size, the size it occupies on screen
- A Cull Distance Volume decides distance-based removal ranges in bulk
- Move between appearance and measurement to trim down to what goes unnoticed
The question when tuning is "how far from the player is this object seen?" The more distant, the more boldly you can trim.
To line up many identical objects, go to reducing draw calls with instancing; to split the loading itself, go to Level Streaming.
References: Visibility and Occlusion Culling, Cull Distance Volumes, Static Mesh Automatic LOD Generation, LOD Screen Size.