← Back to Blog optimization

Foliage placement in Unreal Engine 5: Foliage Tool, PCG, and performance

By BitSoul Team6/2/2026Updated 8/2/20264 min read122 views
Foliage placement in Unreal Engine 5: Foliage Tool, PCG, and performance

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.

Foliage Tool basics and when to use it — illustrated

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.

Performance budgeting — LODs, cull distance, and draw calls — illustrated

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:

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:

  1. Import the GLB — UE5 creates a `StaticMesh` asset
  2. Open the mesh, set Light Map Resolution to 64 or 128 (foliage does not need high lightmap res)
  3. In the material, enable Two Sided if the mesh is a leaf plane or billboard
  4. Set Cast Shadow to `Off` on LOD1+ to cut shadow draw calls
  5. 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.*

Tags: optimization unreal game-assets 3d-models workflow tutorials low-poly

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready 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 — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models