Launch Discount: 25% off for the first 50 customers — use code LAUNCH25

StraySparkStraySpark
ProductsDocsBlogGamesAbout
Back to Blog
tutorial
StraySparkMarch 21, 20265 min read
UE5.7 Nanite Foliage + Procedural Placement: Performance Guide for Open Worlds 
Unreal EngineNanitePerformanceOpen WorldProcedural Generation

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:

ConfigurationInstance CountAvg FPSGPU Time
Traditional HISM, 3 LODs100,0006212.1ms
Nanite HISM, no LODs100,0006710.8ms
Traditional HISM, 3 LODs250,0004118.4ms
Nanite HISM, no LODs250,0005813.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.

Tags

Unreal EngineNanitePerformanceOpen WorldProcedural Generation

Continue Reading

tutorial

10 UE5 Performance Mistakes That Kill Your Frame Rate (and How to Fix Them)

Read more
tutorial

RPG Stat Systems Explained: Designing Character Progression That Feels Rewarding

Read more
tutorial

Architectural Visualization with UE5: A Game Developer's Side Hustle

Read more
All posts
StraySparkStraySpark

Game Studio & UE5 Tool Developers. Building professional-grade tools for the Unreal Engine community.

Products

  • Complete Toolkit (Bundle)
  • Procedural Placement Tool
  • Cinematic Spline Tool
  • Blueprint Template Library
  • Unreal MCP Server

Resources

  • Documentation
  • Blog
  • FAQ
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 StraySpark. All rights reserved.