Scatter instances across a mesh using Blender Geometry Nodes density control
Use Distribute Points on Faces and Instance on Points to scatter objects efficiently, with version checks and density control.
25 Aug 2026, 14:39 UTC

Start with the surface, not the objects
You need a field of rocks, grass clumps, or debris across a terrain, and placing every object by hand is impractical. Duplicating the source object hundreds of times also inflates the scene and slows selection and saving. The practical alternative is to generate points on the surface and place instances at those points.
Distribute points, then instance
Add a Geometry Nodes modifier to the mesh you want to cover. In the node editor, connect Distribute Points on Faces between the mesh input and Instance on Points. The first node creates one or more points per face; the second node places your chosen object at each point. Because instances share object data, the scene stores the stone mesh once and only stores a transform for each placement.
Density on Distribute Points on Faces controls how many points appear per unit area. A value of zero produces no points on that face. You can plug a float attribute or vertex group into that socket so some regions stay empty while others are crowded.
Worked example: scatter stones across a plane
- Add a plane mesh and subdivide it several times so it has enough faces.
- Add a
Geometry Nodesmodifier and create a new node tree. - Add
Distribute Points on Facesand connect the modifier’s mesh output to itsMeshsocket. - Add
Instance on Points, connect the points output to itsPointssocket, and connect itsInstancesoutput toGroup Output. - Set
Densityto a nonzero starting value, such as20. - Add the stone object to the scene, then choose it in the
Instancesocket ofInstance on Points.
Expected result: stones appear across the plane. If you paint a density attribute and connect it to Density, stones should vanish from areas painted with zero and cluster where the value is higher.
Control where instances appear
Paint a vertex group on the source mesh, then expose it to Geometry Nodes as a named attribute. Connect that attribute to Density. This is useful for keeping instances off paths or concentrating them near edges. Exact attribute names and socket labels differ between Blender 3.x LTS and 4.x releases, so open the node tree on the exact version you plan to use.
Limitations and how to verify
- Viewport interaction can slow down once you have tens of thousands of instances. Use the viewport display limit in the modifier or hide the instanced objects while editing.
- Instancing saves memory compared with full duplicates, but render time and GPU memory still grow with instance count. Render one frame with several thousand instances and compare it against an equivalent duplicated-object scene before scaling up.
- Geometry Nodes changed between Blender 3.0, 3.3, 4.0, and later 4.x versions. A tree built in 4.x may not behave identically in 3.6 LTS. Verify node names and sockets on your target release.
Practical check: render a short frame with the instance tree enabled, then disable the modifier and duplicate the source object manually to match the count. Compare memory usage and render time. If the instance version is not lighter, revisit density or instance count.
Closing
Start with a low density on a small surface, confirm instances appear only where expected, and then increase density in measured steps. Because the Geometry Nodes modifier is non-destructive, you can remove it at any time without altering the base mesh.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.