Populating an open world with vegetation is one of the fastest ways to crater your frame rate — or to build an environment that breathes. Unreal Engine 5 gives you two complementary systems for this: the classic Foliage Tool for quick manual painting, and the PCG (Procedural Content Generation) framework for rule-driven, scalable scatter. Used together with a solid performance budget, they can sustain 60+ FPS even in dense forest scenes.
Foliage Tool basics and when to use it
The Foliage Tool (Shift+3 in the viewport, or Mode > Foliage) is the fastest path to scattered vegetation. You drag in static mesh assets, set density and scale variance, then paint across your landscape.
![]()
Key settings that matter:
| Setting | What it controls | Recommended starting point |
|---|---|---|
| Density | Instances per 1000 cm² | 0.1–0.5 for trees, 5–20 for grass |
| Scale X/Y/Z | Random scale range | Min 0.8 / Max 1.2 for variety |
| Cull Distance | Min/max screen-size culling | Min 0 / Max 5000–15000 |
| Collision | Physics shape used | `No Collision` for foliage, `Simple` for trunks |
| Affects Lightmap | Contributes to baked lighting | Off for grass/small plants |
For hand-authored areas — a forest clearing, a cliffside, a courtyard — the Foliage Tool is the right call. It gives you direct artistic control and paints fast.
For large open worlds where you'd need to paint millions of instances by hand, switch to PCG.
PCG for rule-driven foliage scatter
PCG (available since UE5.2, significantly expanded in 5.3+) lets you write a graph that reads landscape data — slope, height, biome mask — and places foliage deterministically. The result is reproducible, editable at graph level, and does not require a human to paint every hectare.
A minimal foliage PCG graph looks like this:
```
[Get Landscape Data]
→ [Filter by Slope < 30°]
→ [Sample Points (Poisson Disk, Radius: 200cm)]
→ [Spawn Static Mesh Actor: Tree_Oak_LOD0]
→ [Filter: Distance from Player > 5000cm → Spawn LOD1]
```
The Poisson Disk sampler is the key node — it distributes points with a minimum separation radius, preventing clumping. Feed your landscape normal into a slope filter to stop trees appearing on steep rock faces.
PCG advantages over manual painting:
- Re-runs non-destructively when you reshape terrain
- Supports biome layering via attribute tags
- Integrates with World Partition streaming volumes automatically
- Outputs static mesh instances, so you get HISM batching for free
Performance budgeting — LODs, cull distance, and draw calls
Dense foliage kills performance through two mechanisms: vertex throughput and draw call count. The fix for both is the same: Hierarchical Instanced Static Meshes (HISM) and aggressive LOD transitions.
![]()
LOD configuration for foliage:
```
LOD0 (0–15m): Full mesh, full texture res — 800–2000 tris
LOD1 (15–50m): Decimated mesh, 512px textures — 200–400 tris
LOD2 (50–150m): Billboard or imposter — 8 tris, single texture
LOD3 (150m+): Culled entirely
```
Set these in the static mesh editor under LOD Settings → Auto LOD Generation, or manually assign pre-decimated meshes. For foliage specifically, enable Dithered LOD Transition in the material to avoid hard pop-in at LOD boundaries.
Draw call targets for a 60 FPS open world:
- Total scene draw calls: ≤ 2500 on last-gen console targets
- Foliage budget: ≤ 800 draw calls (HISM collapses thousands of instances into single draw calls per mesh type)
- Each unique foliage mesh type = 1–2 draw calls (one per LOD level in view)
Use `stat SceneRendering` in the UE5 console to measure live. If `DrawPrimitive calls` spikes above budget when entering a dense area, either reduce unique mesh types or push cull distances closer.
Cull distance volumes are underused: place a `CullDistanceVolume` actor over each biome zone and set `Cull Distance` to match your LOD2 cutoff. Instances outside the volume exit the render entirely.
Using free GLB models from BitSoul in UE5 foliage
GLB assets from BitSoul's marketplace import cleanly into UE5 via File > Import. The engine auto-generates a static mesh, materials, and textures. For foliage use:
- Import the GLB — UE5 creates a `StaticMesh` asset
- Open the mesh, set Light Map Resolution to 64 or 128 (foliage does not need high lightmap res)
- In the material, enable Two Sided if the mesh is a leaf plane or billboard
- Set Cast Shadow to `Off` on LOD1+ to cut shadow draw calls
- Drag the mesh into the Foliage Tool or reference it in your PCG graph
Plants, rocks, and prop models from BitSoul's free collection are pre-optimized as GLBs — polygon counts are already game-ready, so you can paint or scatter thousands of instances without additional decimation.
For the best results, pair low-poly trunk meshes (≤ 500 tris) with separate leaf plane meshes. The Foliage Tool lets you paint multiple mesh types simultaneously, blending them automatically by density weight.
---
Foliage placement is a solved problem in UE5 once you combine the right tools: Foliage Tool for authored spots, PCG for scalable scatter, and HISM + LODs to keep the GPU budget under control. Browse the full range of game-ready vegetation and environment props at BitSoul's marketplace — every asset ships as an optimized GLB ready to drop straight into your UE5 Foliage Tool.
---
*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.*