Procedural Game Asset creation with Geometry Nodes in Blender
In this article, you’ll learn about procedural asset creation in Blender using geometry nodes. In the process, you’ll create a treasure chest with a guardian protecting its treasure. By Ayush.
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Contents
Procedural Game Asset creation with Geometry Nodes in Blender
25 mins
- Getting Started
- Using Geometry Nodes
- Utilizing the Spreadsheet
- Using the Node Editor
- Modeling with Geometry Nodes
- Data Flow in Geometry Nodes
- Extruding the Chest Panels
- Combining branches
- Data Processing
- Understanding Socket Shapes
- Debugging Nodes
- Manipulating Vectors
- Pivoting
- Instancing
- Distributing Collection Elements
- Selective Instancing
- Using Curve Nodes
- Mesh to Curve Conversion
- Spline Manipulation and Profiles
- Exploring Basic Materials
- Where to Go From Here?
Modeling in Blender involves object-level transformations and component-level operations like extruding, insets, bevels and much more. However, reversing these actions if needed is very time-consuming. Hence, this modeling technique is also known as destructive modeling. In contrast, non-destructive modeling refers to adding changes to a base model in a well-defined manner so that reversing the changes becomes easy. This approach encourages experimentation and can create variations to the final model if needed. In this article, you’ll use non-destructive or procedural techniques to create a treasure chest asset.
Getting Started
Download the starter project by clicking the Download Materials link at the top or bottom of the tutorial.
The starter project is a basic blend file containing a few primitive meshes, curves and basic materials.
Using Geometry Nodes
Blender uses geometry nodes to implement non-destructive modeling. The geometry nodes workspace in Blender can be accessed from the topbar.
It’s a pre-defined layout that has the usual 3D viewport, spreadsheet and the node graph.
Utilizing the Spreadsheet
The spreadsheet window displays the information related to the currently selected mesh. It can be opened by pressing the Editor Type button in one of your editor windows and selecting Spreadsheet. The information in this window includes mesh and curve data also referred to as attribute domain. The spreadsheet is therefore useful for debugging and optimization. Each attribute domain is a combination of properties — or attributes. For instance, the Vertex attribute domain has a list of coordinates where each coordinate is the position attribute and the row number is the index attribute.
Using the Node Editor
The node graph provided contains all the tools needed to create a procedural asset. Select the body object and open the geometry nodes workspace.
The Node tree is the structure connecting blocks, or nodes. You can move each node independently, and the connection between them will react accordingly.
A node contains a title and a combination of left-aligned sockets (input) and right-aligned sockets (output). You can create noodles by dragging from the output socket of one node to the input socket of another node. This visually represents data flowing from one socket to another socket. You can delete noodles by dragging from a connected input socket or by “cutting” the noodle by performing a right-mouse-button drag across the noodle while holding the Control key. If a node doesn’t have any noodles from its output socket, then it doesn’t contribute to the render at all.
A basic node tree contains two commonly used and important nodes:
- Group Output: Represents the final render of the geometry nodes system. All noodles present in a node tree must merge into this node to create a meaningful render.
- Group Input: Represents the original geometry that will be manipulated non-destructively by a geometry node system. However, unlike the Group Output node, this node is not required in a node tree, as you’ll see later.
You can search and add other nodes from the node editor topbar.
Spend some time exploring all the nodes that Blender has to offer. Once you’re ready, continue to the next section to begin creating your treasure chest.
Modeling with Geometry Nodes
Now that you understand the basics of the geometry node editor, using and understanding the function of common nodes and the node tree as a whole to create a treasure chest will be easy.
Treasure chests commonly contain a body to house the treasure and a cover to protect the treasure. Since the object is made of multiple components, there will be a lot of nodes connected to each other. As geometry node systems grow, it’s a good practice to group related nodes into something called a node group to improve readability and reuseability. Clicking the top-right icon of a group expands it, and using the Exit Group option from the node context menu inside a group collapses it.
Data Flow in Geometry Nodes
The chest body is usually a rectangular box shape with a cavity. Achieve the rectangular shape by scaling. Scaling and other transformations can be achieved using the Transform node.
Expand the body_nodes
group and drag the Transform Geometry node labeled scale-y between Group Input and Group Output.
Next, create the cavity by subtracting a similarly shaped but slightly smaller cube from the newly transformed cube. Boolean operations such as subtraction can be performed with the Mesh Boolean node. The Mesh 2 input of the Mesh Boolean node comes with an elongated socket. This shape is used to represent the fact that Mesh 2 can accept multiple noodles. It makes sense because a Boolean operation can have multiple operands. To get the cavity of an actual chest, you need a second cube to perform a Boolean difference operation.
In the body_nodes
group make the following changes:
- Drop the Mesh Boolean node between the node labeled scale-y and Group Output.
- Connect the geometry output from the node labeled scale-y to the Mesh Boolean node’s Mesh 2 input. Then drop the Transform Geometry node labeled translate-z between them.
The cube will now have a cavity resembling the main body of a chest.
At this point, the node tree will have quite a few noodles running through its nodes — even branching out at one point. They represent the left to right data flow direction in a node tree. Hence, the data represented by the output socket is passed to the socket of node at the opposite end of a noodle. For instance, the geometry socket of the Transform node passes the mesh data to the geometry socket Mesh Boolean for the Boolean operation. Multiple noodles can also start from a single socket, meaning that the input sockets at the opposite end of these noodles will receive the same data.
Extruding the Chest Panels
Now that the chest body is complete, you’ll add side trims by extruding a selection of interior faces inwards. This selection is present in the project as the faces
vertex-group.
The Extrude Mesh node can be used to perform extrusions. Aside from the mandatory Mesh input, it also has a selection input to dictate what faces to extrude. This selection should be passed to the body_nodes
group using the Group Input node. Group Input and Group Output have the ability to pass data to and from node systems. They act as a layer of encapsulation and make it easier to manipulate node systems. For this use case, the Group Input will require a second input socket. The process of creating this second input socket is to drag a noodle from any existing input socket from a node to the empty socket in the Group Input node.
Update the body_nodes
group by dropping the Extrude Mesh between Mesh Boolean and the node labeled scale-y and connecting the selection input from Extrude Mesh to the empty output in the Group Input node.
Next, go up one level to the root node system and connect the new selection input in body_nodes
group to the empty output socket in Group Input node.
Reset the selection input in the modifiers panel to take the faces
group as the input. Use the Input Attribute Toggle button to do this.