The 3D Handbook
Topic

Procedural placement and scattering

Placing trees, rocks and props by rules instead of by hand; how scatter graphs work, random versus Poisson disk distributions, ecosystem simulation, Unreal PCG, Houdini, Blender and Godot, and how Horizon Zero Dawn and Far Cry 5 used it.

proceduralpcgscatteringworld-buildingfoliage

Procedural placement (or scattering) means placing large numbers of objects, such as trees, rocks, grass and props, by rules rather than one by one. You describe where things should grow ("pines on north-facing slopes above 600 m, never on roads, at least 3 m apart") and the tool places them. Epic describes its Procedural Content Generation (PCG) framework as "a toolset for creating your own procedural content and tools inside Unreal Engine" (Unreal Engine Documentation: Procedural Content Generation Overview).

Procedural placement moves the artist's work from placing instances to designing rules, so that a whole forest updates when the layout changes. For the assets being placed, see foliage and vegetation; for generating the ground itself, see terrain and landscapes; for procedural modeling of individual assets, see procedural modeling.

#Why scatter by rules

#How a scatter graph works

Nearly every scatter tool follows the same pipeline, whether it is a node graph in Unreal, Houdini or Blender.

Six boxes connected by arrows. Sample points on the terrain, 0.5 per square metre. Filter by slope and height, under 30 degrees. Weight density from masks, roads and rivers. Prune overlaps, minimum 3 metres apart. Transform with random scale and yaw, aligned to normal. Spawn instanced meshes such as trees and rocks.
A typical scatter graph. The middle steps (orange) carry most of the art direction. Values are examples.Diagram by the handbook author

Unreal's PCG framework uses the same building blocks (Unreal Engine Documentation: Procedural Content Generation Overview):

  • Points: "Locations in 3D space that are generated by the PCG graph and are often used to spawn meshes".
  • Attributes: data stored on each point, either always present or created at runtime.
  • Density: a value that "represents the probability of the point to exist at that position".
  • Samplers: nodes that "generate points from a source of spatial data, such as volumes, surfaces, and meshes".
  • Filters and Spawners: filter points "based on criteria or per-point", then place meshes or actors at the survivors.

A PCG Component "manages the generation of procedural content, both in the Editor and at runtime", and with World Partition the generated actors go into the same data and HLOD layers as their source (Unreal Engine Documentation: Procedural Content Generation Overview). See hierarchical LOD.

#Random scatter and Poisson disk sampling

The simplest scatter drops points at random. Pure randomness clumps: some points land almost on top of each other while gaps open elsewhere. Natural plant spacing is more even, because plants compete for light and water.

Blender's Distribute Points on Faces node shows the two common options (Blender Manual: Distribute Points on Faces Node):

  • Random: "Distribute points randomly on the surface. This is the fastest distribution method."
  • Poisson Disk: "Distribute points randomly on the surface while taking a minimum distance into account."
Two square plots with 120 green dots each. The left plot, uniform random, has many orange dots marking clumped pairs and visible empty patches; its closest pair is 3.5 units apart. The right plot, Poisson disk, has evenly spaced dots with no clumps; its closest pair is 24.1 units apart.
The same number of points in the same area. Random scatter clumps (orange); Poisson disk keeps a minimum distance. Generated for this page.Diagram by the handbook author

#Simulating ecosystems

Some tools go further and simulate plants growing, spreading and shading each other out.

Unreal's Procedural Foliage Tool (still found under Experimental settings) can "spawn an entire forest's worth of trees" from a Procedural Foliage Spawner volume (Unreal Engine Documentation: Procedural Foliage Tool). Each species has settings such as Shade Radius, Initial Seed Density, Average Spread Distance, Max Age and Can Grow in Shade, and Num Steps runs the simulation for a number of years; Epic's example grows trees over "3 years" (Unreal Engine Documentation: Procedural Foliage Tool). Blocking volumes keep trees out of paths and clearings (Unreal Engine Documentation: Procedural Foliage Tool).

Researchers at Disney Research proposed a middle way: an ecological simulation that artists steer with "global and local editing operators" applied to the live simulation, giving "an artist-directed workflow with both spatially and temporally-varying control" (Bradbury et al. 2015). They contrast it with "stochastic scatter-instancing tools" (Bradbury et al. 2015).

#Editor-time and runtime placement

Most projects scatter in the editor and save the result. Some games generate placement while the player moves.

In Godot, runtime scattering is usually written in code that fills a MultiMesh, which "can draw up to millions of objects in one go"; for a few thousand instances, GDScript "should be fine" (Godot Engine documentation: Optimization using MultiMeshes).

#Tools compared

Tool How it scatters Notes
Unreal PCG Node graph of points, density, filters and spawners (Unreal Engine Documentation) Editor and runtime generation; World Partition aware
Unreal Procedural Foliage Tool Ecosystem growth simulation (Unreal Engine Documentation) Experimental; blocking volumes
Unreal Foliage Mode Brush painting, including a Single tool for one instance (Unreal Engine Documentation) Hand placement and touch-ups
Houdini Engine Houdini Digital Assets run inside Unreal's PCG graph (Houdini documentation) Can "sample a Houdini heightfield and return a list of points"
Blender Geometry Nodes Distribute Points on Faces, Random or Poisson Disk (Blender Manual) Export the result, or use for renders and previs
Unity terrain Painted trees and details, with a global Detail Density Scale (Unity Manual) For rule-based scattering, use scripts or packages
Godot Script-filled MultiMesh (Godot Engine documentation) No per-instance culling; chunk it

For more tools and prices, including Geo-Scatter and SideFX Labs, see vegetation and procedural tools.

#Common mistakes

#Further reading and watching

References

  1. Epic Games · Procedural Content Generation Overview · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  2. StraySpark · Scattering Foliage in Unreal: By Hand vs. Procedurally · StraySpark Studios, 2026 · article · accessed 2026-10-21
  3. 80 Level · The Procedural Nature of the Horizon Zero Dawn · 80 Level, 2017 · article · accessed 2026-10-21
  4. Blender Foundation · Distribute Points on Faces Node · Blender Manual (source), 2026 · docs · accessed 2026-10-21
  5. Epic Games · Procedural Foliage Tool · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  6. Gwyneth Bradbury, Kartic Subr, Charalampos Koniaris, Kenny Mitchell, Tim Weyrich · Guided Ecological Simulation For Artistic Editing of Plant Distributions In Natural Scenes · Journal of Computer Graphics Techniques (Disney Research), 2015 · paper · accessed 2026-10-21
  7. Jaap van Muijden (Guerrilla Games) · GPU-based Procedural Placement in Horizon Zero Dawn · Guerrilla Games (GDC 2017 talk page), 2017 · talk · accessed 2026-10-21
  8. Game Developer (talk by Etienne Carrier, Ubisoft) · Video: The world generation tech behind Far Cry 5 · Game Developer, 2020 · article · accessed 2026-10-21
  9. Godot Engine contributors · Optimization using MultiMeshes · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
  10. Epic Games · Foliage Mode · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  11. SideFX · Houdini Engine for Unreal: PCG overview · Houdini documentation, 2026 · docs · accessed 2026-10-21
  12. Unity Technologies · Terrain settings reference · Unity Manual, 2026 · docs · accessed 2026-10-21

Last updated 2026-10-22