Nodes 101: A non-destructive workflow. Learn how to build robust and modular Substance Designer Networks with ease.
Nowadays, Substance Designer is one of the best 3D material authoring tools that you can find on the market.
For those of you who are opening Designer for the first time, the interface might look a bit intimidating, unintuitive, or overcomplicated because of its nature based on nodes.
Nodes are elements that provide different functionalities essential for a non-destructive workflow (making changes without overwriting what you’ve already done).
Furthermore, creating materials in Designer is just like sculpting a human body in Zbrush. What I mean by that is:
- You start from primary shapes and big masses
- From there, you add secondary and tertiary details
- And finish with micro details
When creating materials, you have to think in the same way. Work from the largest details first, then “zoom into” the smallest. Or, for instance, when creating a basic rock, you’d start from the largest forms and incrementally add small details until you’re satisfied with the result.
In this article, I’ll cover how to model the primary shapes and teach you how important it is to choose the right nodes for a solid base. We’ll cover a bit of the secondary details without getting into too much detail. (We won’t be talking about texture maps like albedo, roughness, and so on, as it’s not the purpose of this article.)
This article assumes that you’ve already opened Designer a few times and know the basic interface (and have some familiarity with generating the output from the nodes)—we will discuss nodes later on.
Creating a Basic Rock Wall
When you approach Designer, rocks are the first thing you’ll probably learn. Nonetheless, it’s a common error to start with several nodes and think about secondary details before everything else.
With few nodes, you can have a solid base for your next steps and a decent network to work with.
This is an example of a basic rock wall we’re going to discuss in-depth. I modeled the main shapes and added a bit of secondary details on the rocks. From this base, you can add more nodes and subnetworks in order to have tertiary and micro details.
For the purpose of this network, we’ll use sixteen nodes. This is sufficient to obtain the previous result.
The network can be divided into three parts:
- The generation of the main shapes
- The addition of basic cuts to the rocks
- The addition of some noise and details to the surface where the rocks sit
Consider the first three nodes, which are essential to define the main shapes. These are:
- The Brick Generator node
- The Distance node
- The Edge Detect node
The Brick Generator
The Brick Generator, as the words suggest, is responsible for the creation of the basic structure. The node itself has a lot of parameters to work with, and I strongly recommend experimenting with some settings before moving on.
The Brick Generator basically builds a pattern based on bricks. This is the list of the parameters I used:
It takes time and patience to establish the best setting, but don’t give up. Here’s an easy exercise: Try to change the brick number in X and Y, as well as the Gap between one brick and another. You’ll be able to see different variations as you slightly change these sliders.
The Distance Node
I could have just considered the bricks as basic shapes, but I wanted to have a custom variation.
Now we turn to a powerful node called the Distance node. It performs an outward linear fade from any pixel, until an element reaches its neighbor elements—the shapes will never overlap and that creates an interesting pattern for our network.
This node is cool for creating Voronoi patterns.
The node has two inputs—a mask to control the effect of the distance fade and the source. The output of the Brick Generator is connected to both of the inputs of the Distance node. The maximum distance parameter is set to an extremely high value (6,000), to remove the gradient effect of the node.
The Edge Detect Node
Once you’ve obtained a nice output from the Distance node, it’s time to create some gaps and edges.
I used the Edge Detect node, which detects the contrast to create a black and white image with some edges.
The result is managed by the Edge Width and the Edge Roundness parameters. The former allows choosing an appropriate width while the latter creates rounded edges. I chose 1.35 and 5.8, respectively.
The next part of the network allows us to give the shapes some depth and cuts, in order to create the final rocks.
This is achieved by a common node called Flood Fill node. The node itself doesn’t do anything, but it prepares the input to a series of amazing effects and transformations.
I created three copies of the node called Flood Fill to Gradient Grayscale. They simply fill our shapes with a random gradient, controlled by a parameter called Angle Variation, that is different for each copy of the node.
If we blend them together with two Blend nodes set to min, we obtain a grayscale image with some cuts on the shapes (see the cuts in the following image).
The Auto Levels node works on the luminance histogram to cover the full range from black to white, thus, it increases the contrast. This is nice if you want to increase the displacement of the rocks (in this case, we do).
The Gradient Map node isn’t crucial, but it helps us remap the grayscale input to a custom ramp map. I used it with another Blend node set to min, to generate a new series of cuts.
By mapping the output to the height and the ambient occlusion maps, this is what we have—the primary shapes.
A Bit of Secondary Detailing
As I mentioned at the beginning, the purpose of this tutorial is to explain the main shapes. Nonetheless, I wanted to start covering the possibilities of some secondary shapes.
The Directional Warp node takes our previous output and a Cloud 2 node (which is a noise generator) as inputs. It performs a warp along a precise direction (245 degrees to be precise) and with an intensity of 10, by deforming our rocks with the noise generator.
The purpose is to add a first level of secondary details. From there, you can experiment with other noises and generators.
Finally, I used a Height Blend node which blends two inputs, deciding at what height the first (Cloud 2) combines with the second.
The Height Offset parameter (set to 0.08, in my case, very low) allows me to fill the gaps with some noise (Cloud 2). For high values of the Height Offset parameter, the cloud noise will tend to cover the rock wall.
Small Variations, Different Results
We’ll now demonstrate how we can easily modify the result by applying small changes to our network. The goal is to smooth our rocks a bit and blend them with the base.
There are many approaches to this concept and several unique pathways, so I’ll show you a quick way you can reach the previous result.
I added six other nodes to the previous network and quickly changed some parameters.
Group 1 lowers the edges of our rocks towards the base. Node 2 is simply a Blend node between the result of the cuts and the result of Group 1.
Finally, node 3 is the Auto Levels node, used to adjust the luminance histogram and add more depth to the final result.
The Flood Fill Mapper Grayscale Node as a Powerful Solution
Let’s explore Group 1.
The general idea is to create a simple circular shape and use it as input in the Flood Fill Mapper Grayscale node.
The Mapper is powerful because it maps the circular shape onto each rock that comes from the Flood Fill node. This way, we establish a gradient where the height decreases as we move away from the center.
The Histogram Range and the Levels nodes are used to tweak the luminance of the input and output of the Mapper, respectively. I strongly invite you to find your right parameters while working with those nodes.
Node 2, previously mentioned, performs a multiply blending operation between the result of Group 1 and the basic rock wall with cuts.
Here’s the comparison just before and after the blending.
Also of note: The brick wall pattern might look a bit different from before because I wanted to introduce a small variation in the final result.
Finally, you have to tweak the Height Offset parameter in the Height Blend node (around the value of 0.18), to make the rock sink a bit into the base.
That’s it! You’ve just learned how to apply variations.
Not Just Rocks
In this last part, we’ll have a quick look at a different way to use Designer for the creation of simple patterns. We’ll start from primitive shapes in order to generate a more complex design.
This is the final network:
The pattern is abstract and the intention is to use it for decorations or ornaments for ceilings, or whatever suits your needs. Again, this is just an idea, you can continue from here, or create your own decoration from scratch.
We’ll essentially make use of three kinds of nodes:
- Shape node
- Transformation 2D node
- Blend node
The Shape node provides users with several different primitive shapes—circles, squares, cones, pyramids, and so on. They serve as basic inputs to build complex shapes.
The Transformation 2D node, instead, is used to manipulate the 2D shapes, so that we can apply translation, scaling, rotation, and many other operations.
The Blend node, in this particular case, is necessary to combine and merge the result of different shapes.
The Network In-Depth
Let’s see the network in-depth. I invite you to follow the description of every single node.
Here’s the part where we build the eye-shaped pattern. Again, we use a simple primitive to extract the oval shape, then work on its upper and lower part.
Finally, we create the frame for the eye shape.
It’s time to combine the three parts together.
The following subnetwork is quite easy. Simply put, it takes the three described outputs, combines them together by two different blending modes, and adds a square frame.
The Invert Grayscale node simply inverts the grayscale input. The result is easier to combine with the final shape (max blending mode).
Maybe the most interesting part of the previous network is connected with the Tile Sampler: a tile-pattern-generating node. In our case, this takes the final shape by duplicating it in X and Y several times.
The node has lots of parameters to work with and most of them are intuitive. As this can hold several configurations, I invite you to explore and find your best configuration.
Here’s the final result:
We learned how to build a Substance Designer network from scratch and how important it is to start from the main shapes to incrementally add secondary, tertiary, and micro details.
Furthermore, we presented an example of a brick wall with some variations.
Finally, we showed how Designer isn’t just specific for rocks or terrains, but also for interesting patterns created from simple primitive shapes.
Take some inspiration and guidance from this article and build your networks with ease. You can also find examples of finished Substance Designer networks at my Artstation page.
Let’s stay on the design train with these inspiring articles: