Nanite Isn't Always Faster: Choose Static Meshes Wisely in UE5
Nanite reduces draw calls for high-polygon static meshes, but enabling it on small or animated assets can waste memory and GPU time. Learn when to turn it off.
08 Mar 2026, 00:28 UTC

You import a 20-million-triangle photogrammetry cliff, enable Nanite, and expect the frame rate to climb. Instead, GPU time stays flat, and your cooked package balloons. The problem is usually not Nanite itself; it is applying the feature to meshes that do not need it.
Nanite is Unreal Engine's virtualized geometry system. It streams only the detail required for the current view and can reduce draw calls on high-polygon static meshes. That makes it appealing for environments, but it is not a universal speedup. This post explains how to decide which static meshes should use Nanite, what to measure after enabling it, and when to leave it disabled.
How Nanite changes rendering
A traditional static mesh sends its triangles to the GPU through draw calls, often with multiple levels of detail (LODs) generated by hand. Nanite replaces that pipeline with virtualized geometry: the engine imports the mesh, clusters it into hierarchical groups, and streams those clusters based on screen size. The result is fewer draw calls for very dense assets, because the renderer does not issue a separate call for every LOD or material section in the same way.
Terms worth knowing: a static mesh is geometry that does not deform per frame; a skeletal mesh is driven by bones and animation; vertex deformation includes world-position offset and skinning. Nanite is designed for static or rigidly transformed meshes.
Where Nanite pays off and where it costs
Nanite works best on static or rigidly transformed meshes with millions of triangles, such as photogrammetry rocks, dense CAD imports, or high-detail architecture. It is less useful for small props. A practical rule of thumb is to keep Nanite off for objects under roughly ten thousand triangles, where traditional rendering is cheaper than the cluster overhead.
Nanite also does not support several features in the same pipeline as standard meshes, including two-sided material masking, world-position offset, and per-vertex animation. Skeletal meshes and vertex-deformed geometry are not handled the same way, so animated characters and foliage using world-position offset should generally stay off Nanite.
| Asset type | Nanite recommendation | Reason |
|---|---|---|
| High-poly static rock or building | Enable | Draw-call reduction outweighs cluster cost |
| Small prop under roughly 10k triangles | Disable | Traditional rendering is cheaper |
| Skeletal mesh or animated character | Disable | Not supported in the same Nanite pipeline |
| Material using world-position offset | Disable | World-position offset is incompatible with Nanite rendering |
Worked example: enable Nanite on one mesh and measure
Where to run: Unreal Engine editor, in the Static Mesh Editor and the viewport console. Required permissions: read/write access to the project content; no special administrator rights.
- Open the Static Mesh Editor for a high-polygon asset, for example
/Game/Environment/Rocks/HighPolyCliff. - In the Details panel, find the Nanite settings and enable Nanite.
- Save the asset. Expect import to take longer than a standard static mesh, because the engine builds hierarchical clusters and proxy meshes.
- Open the editor console and run
stat naniteto inspect allocated memory and cluster counts. - Run
stat GPUwhile looking at the mesh to check GPU frame time. - Duplicate the asset or build a test level with Nanite disabled, then compare cooked package size and loading time in the project launcher.
Expected checks: with Nanite enabled, check stat nanite for cluster and memory statistics, and compare draw calls against the non-Nanite version. Risks: enabling Nanite on many assets increases disk usage, memory usage, and cook time. Do not enable it project-wide by default. To revert, disable Nanite in the same Details panel and save.
Trade-offs and limitations
- Nanite increases disk and memory usage because of hierarchical clusters and proxy meshes built during import.
- Lumen works with Nanite, but combining both can increase GPU frame time on lower-end hardware.
- Behavior and supported flags vary between Unreal Engine 5 minor releases. Check your target version before relying on specific Nanite behavior.
Check the result before shipping
After enabling Nanite on a candidate mesh, verify with these steps:
- Run
stat unit,stat GPU, andstat nanitein the editor and note whether GPU time improves or worsens. - Compare the cooked package size of the mesh with Nanite enabled and disabled.
- Profile a mixed scene with Unreal Insights or
stat unitto confirm where the GPU bottleneck shifts. - If the mesh is small, animated, or uses world-position offset, disable Nanite and retest.
Nanite is a tool for dense static geometry, not a toggle to turn on everywhere. Measure the specific mesh in your scene, compare the cooked cost, and enable it only where the draw-call savings justify the memory and import overhead.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.