Tutorials

Rusty Steel Substance with inputs

You can download this substance at Gumroad.

In this video tutorial I take a look on creating a substance with exposed parameters and input nodes.

Creating materials like these can be extremely useful and time saving because it allows serialized asset texturing with weathering effects or basically any kind of effects that will respect mesh-specific maps such as curvature, normal or AO maps. This is crazy efficient way to create PBR materials for environmental game models, for example.

Substance graph with Exposed Parameters
This is the graph in Substance Designer with exposed parameters

The graph I created could use some rearranging to make it look more clean, but it works and it’s the most important thing. I have defined the input maps in the left area. The reason why I have basically unnecessary blend node sitting there is just that I can switch some baked maps into the graph if I want to tweak it, because when the input is empty I can’t see anything in the graph. Anyway having nodes like that shouldn’t affect the performance of .sbsar because the algorithm will understand stuff like that, it won’t calculate anything unnecessary like disconnected nodes or so.

Barrel textured with rusty steel substance with exposed parameters
Barrel textured with the rusty metal substance with exposed parameters. Single material, no hand painting in Substance Painter

So I have defined inputs for Position, World Space Normal, Curvature and AO, and then I apply these to few of the weathering effects, such as mg_metal_edge_wear, a Substance Designer node which I just use as it is, and also the Tri-planar node which I forgot to mention in the video. Basically I just connected Position and World Space Normal maps to the triplanar_grayscale node and used the Rust Level Control node output as the input. This will project the material to the mesh seamlessly, almost no matter how your UVs are laid out. It is possible to do this in Substance Painter but it’s absolutely fantastic to have the control in Designer as well.

Then, basically what I have done in Substance Designer is that I have exposed some of the node parameters, such as the histogram scan which samples (or more appropriately scans) grayscale area from the procedural BW data and some of the mg_metal_edge_wear params, giving me the control. I have also created some of the switches which I have then exposed to turn some effects on and off. Clicking the graph in Substance Designer allows you to further label and organize the sliders and buttons.

Substance with Exposed Parameters
These are the exposed parameters in Substance Designer. You can change their order by dragging the handle in the left side.

What I am especially proud of are the leaks effects. This is simple slope_blur_grayscale which takes gradient map as “Slope”. What this basically defines is which way is up and down in the object. You can feed a simple gradient to this or you can use y channel from position map by using RGBA split node. So again I have connected the Position map input node to this via a switch which allows me to switch to simple gradient if the map is missing.

Rest is pretty much the same thing, blending things together using blend nodes and exposing parameters that I figured I would like to change in future.

Check out this Allegorithmic video on exposing parameters and publishing substances.