Procedural Scattering with Blender's Instance on Points Node
Learn how to scatter objects efficiently in Blender using the Geometry Nodes Instance on Points node, with a step‑by‑step cube‑grid example, notes on realization, and pitfalls to avoid.
20 Jan 2026, 00:11 UTC

Why use Instance on Points for scattering
The Instance on Points node lets you place copies of an object or collection at arbitrary locations without duplicating mesh data. This keeps viewport memory low and lets you drive variations (scale, rotation, material) with attributes, making it ideal for scattering trees, rocks, or any repetitive asset.
Worked configuration: scattering cubes on a grid
- Add a Grid node (Mesh → Primitive → Grid) to generate a regular point layout.
- Connect the Grid’s
Meshoutput to thePointsinput of an Instance on Points node. - In the Instance on Points node, set the
Instancefield to a Cube (or any object you want to scatter). - To add random scale, insert a Random Value node (Utilities → Random Value). Set its
Data TypetoFloat Vector,Minto (0.5,0.5,0.5) andMaxto (1.5,1.5,1.5). Connect itsValueoutput to theScaleinput of Instance on Points. - Optionally, connect another Random Value node (float) to the
Rotationinput for varied orientation. - View the result in the 3D Viewport; you should see a field of cubes with differing sizes and rotations.
Because the cubes are instanced, the viewport only stores one cube’s mesh data. The Statistics overlay shows a low vertex count despite many visible copies.
When to realize instances
If you need to edit the scattered geometry further (e.g., apply a Boolean, sculpt, or UV unwrap), insert a Realize Instances node after Instance on Points. This converts each point’s instance into real geometry, enabling mesh‑based modifiers. Place Realize Instances as late as possible in the node tree to avoid forcing the CPU to process millions of vertices early.
Limits and common mistakes
- Memory explosion on realization: Realizing a dense point cloud (e.g., >1 million points) can instantly consume all available RAM and crash Blender. Always preview with a low‑density grid first, then increase density only after confirming the instance setup works.
- Lost per‑instance attributes: Instanced objects share the same material and modifier stack. To vary materials per instance, use the Pick Instance node with a collection and feed an integer attribute (e.g., from Random Value) into its
Indexinput. - Performance drag from early realization: Putting Realize Instances before heavy procedural nodes (like noise‑driven displacement) forces Blender to compute the full mesh for each point at every frame, slowing playback. Keep the instance stream procedural as long as possible.
- Incorrect attribute type: Connecting a scalar Random Value to a vector input (Scale) without converting to a vector yields uniform scaling. Use the
Float Vectordata type or combine three scalar nodes via aCombine XYZnode.
Practical verification steps
- Enable the Statistics overlay (
Viewport Overlays → Statistics). Note the vertex count before adding Realize Instances. - Add Realize Instances and observe the vertex count rise proportionally to the number of points.
- Toggle the instance stream on/off by muting the Instance on Points node; the viewport should update instantly, confirming that only the base mesh is being rendered when instanced.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.