← Back to Blog tutorials

Why Nanite makes imported foliage slower, not faster

By BitSoul Team9/10/20265 min read1 views
Why Nanite makes imported foliage slower, not faster

You import a tree, bush, or grass-clump GLB, tick Nanite on for the performance win everyone promises, and instead watch the frame rate drop the moment the camera gets close. That's not a misconfiguration. Epic's own Nanite documentation says foliage is the one common asset type where Nanite can render slower than the traditional pipeline it's supposed to replace. The cause is masked leaf cards breaking the occlusion culling Nanite depends on, and the fix is three specific, documented settings — not a workaround, not "just don't use Nanite on trees."

Why Nanite and masked foliage fight each other

Why Nanite and masked foliage fight each other — illustrated

Nanite's speed comes from two techniques: fine-grained level-of-detail simplification and per-cluster occlusion culling. Both assume a mesh is a mostly solid, continuous surface. A leaf card, a cluster of grass blades, or a canopy scattered with Geometry Nodes and exported to glTF — if you've already fought Blender's instancing export bug getting it this far, brace yourself — is the opposite of that. Epic calls it "aggregate geometry": many disjointed, holed pieces that only read as a solid canopy from a distance. Nanite can't simplify holed geometry as aggressively as it simplifies continuous surfaces, and its occlusion culling can't tell what's hidden behind a screen of holes, so it keeps drawing depth layers a solid mesh would let it skip.

Epic's own guidance is blunt about the cost: a masked-out pixel takes almost as much GPU time as a drawn one, and the traditional trick of representing a cluster of leaves with a single masked card can render slower with Nanite turned on than with it left off. A canopy-heavy model like Young Treant is exactly the kind of asset this hits hardest — a low-poly, card-based crown built for the traditional pipeline, not for Nanite by default.

The fix: real geometry, Preserve Area, and a clamped WPO

The fix: real geometry, Preserve Area, and a clamped WPO — illustrated

Three changes fix this, all inside tools already open in a UE5 project.

Use real leaf geometry instead of masked cards where you can. Epic's own testing found independent leaf polygons render faster under Nanite than either Nanite or non-Nanite card-based foliage, and hold their shape better on screen. It costs more triangles per leaf — exactly the tradeoff Nanite exists to absorb.

Enable Preserve Area. In the Static Mesh Editor, open Nanite Settings in the Details panel and tick `Preserve Area`. Without it, Nanite's distance simplification deletes whole leaves and grass blades as it reduces triangle count, so canopies visibly thin out far from camera. Preserve Area redistributes that lost surface area into the remaining triangles instead — it reads as thickening on asymmetric shapes like grass blades and scaling-up on symmetric ones like leaves. Epic recommends it for every foliage mesh and nothing else.

Clamp World Position Offset. If wind sway is baked into the material via WPO, more displaced vertices means more GPU cost on a Nanite mesh, because each mesh is split into clusters that get culled individually, and a large offset drags neighboring clusters' bounds along with it. Set `Max World Position Offset Displacement`, found under the material's Details panel in the World Position Offset category (or in Material Property Overrides on an instance), to the smallest value that still looks right.

None of this is available until the mesh has actually opted into Nanite — importing a GLB or FBX doesn't enable it automatically. That's a per-mesh choice: tick `Build Nanite` in the import dialog, part of the same Interchange pipeline UE5.8 rebuilt after removing Datasmith's glTF importer, or enable it afterward in the Static Mesh Editor's Nanite Settings.

| Foliage setup | What happens under Nanite | Best use |
| --- | --- | --- |
| Masked leaf cards, Nanite off | Baseline cost — how most marketplace trees ship by default | Distant background canopies |
| Masked leaf cards, Nanite on | Often slower than off; masked pixels cost nearly as much as drawn ones | Rarely worth it — profile before shipping |
| Real leaf geometry + Preserve Area, Nanite on | Fastest of the three per Epic's own foliage guidance; canopy holds shape at distance | Hero trees, close-up foliage, anything the camera approaches |

The faceted-normals mistake that inflates any Nanite mesh

This one has nothing to do with foliage specifically — it hits any imported GLB with Nanite enabled, including props, characters, and architecture. Nanite's cost scales with vertex count as much as triangle count, and a mesh exported with faceted (unsmoothed) normals duplicates vertices at every triangle boundary. Epic's own benchmark: a healthy mesh has fewer vertices than triangles; a 2:1 vertex-to-triangle ratio signals a problem, and 3:1 means the mesh is completely faceted, with every triangle owning three private vertices shared with nothing else. That kind of ratio survives silently through multiple export round-trips whenever a hard-normal threshold from one DCC tool carries over into the glTF.

Check both counts before Nanite ever enters the picture. BitSoul's 3D Studio lists triangle and vertex counts for a model side by side in the browser, the same inspector used for trimming poly budgets ahead of a Next Fest demo — a bad ratio shows up as quick division, not a mystery frame-time spike three weeks into production.

One more edge case worth knowing before shipping: a Nanite mesh bent along a spline — a fence line, a hedge row — can drop to a visibly lower level of detail as the camera pulls back, because Nanite's LOD generation doesn't account for spline deformation. `Max Edge Length Factor`, in the Static Mesh Editor's Nanite Settings, forces a minimum vertex density on screen and fixes it. It defaults to 0 (off), so a drooping hedge row is a five-second setting change, not a mesh rebuild.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: unreal-engine-5 optimization game-assets workflow tutorials 3d-models

Skip the modelling — download it instead

A free BitSoul account gets you 2 models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL export come with any purchase or paid plan.

Browse 861 models — from $4.99 → or start free (2 downloads a month)