Nanite Foliage has been one of the most requested Unreal Engine features for years. With UE5.7, it's finally production-ready. Trees, bushes, and ground cover can now use Nanite's virtualized geometry — meaning millions of polygons at virtually no additional draw call cost.
For developers using procedural placement systems, this changes the performance equation significantly. This guide covers how to get the best results when combining Nanite Foliage with rule-based procedural scatter.
Why Nanite Foliage Matters
Before Nanite Foliage, large-scale vegetation was one of the hardest performance problems in open world games. Traditional foliage rendering required:
- Manual LOD authoring — creating 3–5 detail levels per mesh
- Aggressive culling — hiding vegetation beyond a certain distance
- Billboard impostors — flat images replacing 3D trees at range
- Careful density budgeting — limiting how many instances you could place
Nanite eliminates most of this. It streams geometry at pixel-level detail, automatically handling what would have been manual LOD work. A Nanite-enabled tree mesh renders the same whether you're standing next to it or viewing it from a kilometer away.
The practical impact: you can place significantly more vegetation with higher polygon counts and still maintain your target frame rate.
Setting Up Nanite Foliage Assets
Enable Nanite on Your Meshes
Not all foliage meshes work well with Nanite. Best candidates:
- Trees with solid trunks and branches — Nanite handles opaque geometry best
- Rock formations and boulders — excellent Nanite candidates
- Dense ground cover with opaque geometry — grass clumps, ferns with solid fronds
Meshes that still need traditional rendering:
- Translucent foliage — leaves with alpha transparency still benefit from traditional LODs
- Single-plane grass cards — too simple to benefit from Nanite
- Animated foliage with extreme deformation — wind animation works, but extreme vertex animation can cause artifacts
Hybrid Approach
The most effective strategy is hybrid: Nanite for trunks, branches, and solid geometry; traditional instanced rendering for leaf cards and grass. UE5.7 supports this per-mesh-section, so a single tree can use Nanite for the trunk and traditional rendering for the leaves.
Procedural Placement with Nanite Assets
The Procedural Placement Tool uses Hierarchical Instanced Static Meshes (HISM) for rendering. With Nanite Foliage in UE5.7, these instances can be Nanite-enabled, giving you the best of both worlds: procedural scatter with virtualized geometry.
Performance Benchmarks
We tested on a 16 km² landscape with an RTX 3070 and Ryzen 7:
| Configuration | Instance Count | Avg FPS | GPU Time |
|---|---|---|---|
| Traditional HISM, 3 LODs | 100,000 | 62 | 12.1ms |
| Nanite HISM, no LODs | 100,000 | 67 | 10.8ms |
| Traditional HISM, 3 LODs | 250,000 | 41 | 18.4ms |
| Nanite HISM, no LODs | 250,000 | 58 | 13.2ms |
At 100K instances, Nanite is modestly faster. At 250K instances, the difference is dramatic — Nanite maintains playable frame rates where traditional rendering drops below target.
The savings come from eliminated draw calls. Traditional instanced rendering still incurs per-LOD-transition overhead. Nanite streams geometry continuously without LOD pops or transition costs.
Density Guidelines
With Nanite Foliage, you can safely increase density beyond what was previously practical:
- Large trees (10m+ height) — up to 3 per 100m², depending on canopy overlap
- Medium vegetation (1–10m) — up to 15 per 100m²
- Ground cover (under 1m) — up to 50 per 100m² for Nanite-eligible meshes
- Rocks and boulders — up to 10 per 100m²
These are conservative guidelines. Nanite can handle significantly more, but visual quality and gameplay readability set practical limits before performance does.
Optimization Techniques
Culling Distance Override
Even with Nanite, you should set reasonable culling distances. A small bush 2 km away contributes zero visual value but still costs something to evaluate. The Procedural Placement Tool supports per-layer culling distances:
- Large trees: 3000m–5000m
- Medium vegetation: 1000m–2000m
- Ground cover: 300m–500m
- Detail objects: 100m–200m
Cluster Density Falloff
Instead of uniform density across the entire landscape, use distance-based falloff from the player. The Procedural Placement Tool's density modes support this — full density near the camera, gradual reduction at range.
This is especially useful for ground cover, where the visual difference between 50 instances per 100m² and 20 instances per 100m² is invisible at 500m.
Biome-Specific Budgets
Not all biomes need the same density. A desert biome with scattered cacti needs far fewer instances than a dense forest. Set per-biome density budgets based on the visual requirements of each environment type.
The biome zone system in the Procedural Placement Tool lets you define independent density settings per biome, so your desert isn't wasting budget on vegetation that isn't there.
Common Pitfalls
Enabling Nanite on everything. Not all meshes benefit. Single-plane grass cards, small pebbles, and extremely simple geometry render faster with traditional instancing. Profile before converting.
Ignoring Nanite's memory cost. Nanite meshes use more VRAM than traditional LOD meshes. On a 16 km² map with 250K+ instances, VRAM usage can spike significantly. Monitor with stat RHI and budget accordingly.
Skipping profiling. "Nanite is faster" is generally true but not universally true. Always profile your specific scene with Unreal Insights. The bottleneck might be something else entirely — shadow rendering, material complexity, or Blueprint tick costs.
Uniform density at all distances. Even with Nanite's efficiency, rendering 250K instances at full density everywhere is wasteful. Use distance-based falloff and per-biome budgets to spend your performance budget where it matters.
Profiling Your Scene
Use these tools to identify bottlenecks:
- Unreal Insights — frame timeline with GPU/CPU breakdown
- stat Nanite — Nanite-specific rendering stats
- stat RHI — VRAM usage and GPU resource tracking
- stat FoliageOverview — foliage instance counts and rendering costs
- GPU Visualizer — per-pass rendering cost breakdown
The most common bottleneck with dense procedural foliage is shadow map rendering, not geometry. If your frame rate drops when looking toward the sun, shadow costs are likely the issue — not Nanite or instance count.
Getting Started
If you're building an open world with UE5.7, the combination of Nanite Foliage and procedural placement is the current best practice for vegetation. Enable Nanite on your heavy meshes, use traditional instancing for simple geometry, and let the Procedural Placement Tool handle the scatter logic.
The documentation covers setup, density configuration, and biome zone authoring in detail.