Procedural Terrain with Blender Geometry Nodes
This guide explains how to generate customizable, non-destructive landscapes directly inside Blender using Geometry Nodes and mathematical operations. By utilizing nodes such as Noise Texture, Set Position, and various Math functions, you will learn how to displace a flat grid, shape realistic mountain peaks, carve valleys, and control terrain elevation dynamically without relying on external heightmaps.
1. Setting Up the Base Mesh
- Add a new mesh object (such as a Plane or Cube) in the 3D Viewport.
- Open the Geometry Nodes workspace and click New to create a new node tree.
- Disconnect or delete the
Group Inputgeometry node. - Add a Grid node (
Shift + A> Mesh Primitives > Grid). - Set the
Size XandSize Yvalues to define the terrain scale (e.g., 50m x 50m). - Increase the
Vertices XandVertices Ycounts (e.g., 250 to 500) to provide sufficient geometric density for displacement. - Connect the
Meshoutput of the Grid to theGeometryinput of a Set Position node.
2. Basic Elevation with Noise and Math Nodes
To elevate the flat grid into terrain, pass coordinates through noise functions and shape them with Math nodes:
- Add a Position node (
Shift + A> Geometry > Read > Position). - Connect the
Positionoutput to theVectorinput of a Noise Texture node. Set the Noise Texture to3Dor4D. - Add a Math node (
Shift + A> Utilities > Math) and set its operation to Multiply. - Connect the
Factoroutput of the Noise Texture to the firstValueinput of the Math node. Set the secondValueto control the terrain height (e.g., 10.0). - Add a Combine XYZ node (
Shift + A> Vector > Combine XYZ). - Connect the output of the Math node to the
Zinput of the Combine XYZ node. - Plug the
Vectoroutput of the Combine XYZ node into theOffsetinput of the Set Position node.
3. Advanced Terrain Shaping Using Math Operations
Standard noise creates generic hills. Use specific Math node operations between the Noise Texture and the Combine XYZ node to create distinct geographic features:
- Sharpening Ridges (Power Node): Add a Math node set
to Power. Plug the Noise Texture into the base
Valueand set the exponent to2.0or3.0. This suppresses low-elevation areas into flat plains while creating sharp, steep peaks. - Creating Plateaus and Terraces (Snap / Round Node): Add a Math node set to Snap or Floor. Setting the snap increment (e.g., 0.5) quantizes elevation, producing stepped canyons or layered rock formations.
- Clamping Sea Level (Maximum Node): Add a Math node
set to Maximum. Set the second value to
0.0(or your desired water level). Any negative displacement will be flattened, forming an ocean or lake floor. - Adjusting Dynamic Range (Map Range Node): Insert a
Map Range node to remap the default
0.0 to 1.0noise values to custom minimum and maximum heights, allowing precise boundaries over the landscape.
4. Layering Multiple Frequencies
Realistic terrain requires broad landmasses layered with fine surface details:
- Create a primary Noise Texture with a low scale
(e.g.,
0.05) for continental shapes. - Create a secondary Noise Texture with a higher
scale (e.g.,
0.5) for fine rock details. - Multiply the secondary noise by a smaller multiplier (e.g.,
1.5) using a Math node. - Combine both layers using an Add Math node
(
Primary Elevation + Secondary Elevation). - Connect the combined result into the
Zinput of the Combine XYZ node.
5. Finalizing the Mesh
- Add a Set Shade Smooth node after the Set Position node to eliminate visible polygon faceting.
- Add a Store Named Attribute node before the
Group Output. Set the data type to Float, name the attributeheight, and connect your final Z-math output to theValuesocket. This attribute can be referenced inside the Shader Editor to drive procedural slope and elevation materials. - Connect the final node to the Group Output.