new tricks in substance Designer
Chris Hodgson shows how to create realistic materials in Substance Designer using masks generated in Photoshop and Hexels
Discover how to make the most of Substance Designer to create a modifiable ornate tiled floor
substance Designer is my tool of choice when creating realistic tiling materials as the huge array of noises, patterns and generators available give you the freedom to create a wide variety of materials entirely within the one application. However, Substance Designer is a program that plays well with others; height, mask and other texture maps can be easily imported and used to springboard your texturing process, especially if you have something specific in mind.
Over the course of this tutorial, I will show you how to combine together mask textures created outside of Substance Designer to generate a modifiable ornate tiled floor. I will show you how to create a striking albedo map, believable tile damage, and how to realistically age your texture through the use of subtle surface details and blends. I’ll also cover some tips and tricks to help you generate masks and interesting details that will aid you in creating believable, high-quality materials.
Large node graphs can be daunting at first, so I will also guide you through some of the steps I use when creating a complex material. By reducing the tasks into a series of simple repeatable processes, I will try to demonstrate techniques that can be used no matter what kind of material you are creating.
For a deeper look into my texturing process, you can head over to my Gumroad page at www.gumroad.com/l/ykuiq.
01 Gather material references
Before I create any Substance material, I gather a body of high-resolution reference images of my chosen material, preferably in different lighting conditions. For this tiled material, I use Shutterstock, Google image search and Flickr to gather 10 images that show close and medium distance detail. It can help to create a mood board to refer to, perhaps on a second monitor.
02 Create the input patterns
To generate the various tile patterns, I use Hexels (see above left) with some clean up in Photoshop (above right). I create three different patterns, each made of solid blocks of colour defining each tile in the texture. It’s important to ensure that no two adjacent tiles have the exact same colour, or the Edge Detect node in Substance will merge them together, giving oddly shaped tiles. I import the patterns into Substance Designer, where I can swap and replace them with others – part of what makes the program so powerful.
03 Combine the input patterns
I combine the patterns using Safe Transform, Transform 2D and Symmetry Slice, plus a few simple blend nodes. I use the cropping and mask functionality of the blend nodes to mask each pattern together. The combined patterns are used as the initial base colour for each tile in the albedo map, with a mask for tile Edge Detect and warping of grunge and noise information.
04 Create the tile Height
I make a greyscale version of the images, Edge Detect (to keep the masks’ sharpness) then combine them. This gives me a black and white mask of each tile with a black border that I bevel for tile height. To vary tile size, I use two Histogram Scan nodes with different values then blend the result using a mask generated from a Multi Directional Warped fractal sum pattern.
05 ADD tile edge DAMAGE
To give the tiles some age and character, I add damage to the edges. The Slope Blur node pushes detail from one input down the slopes of a second height input for this. I combine some grunge and patterns to generate a heightmap with varied detail, allowing for large and small edge damage. The heightmap also contains areas of solid black where edge damage will not occur.
06 Cause surface DAMAGE
Now that the tiles have damaged edges, I add some surface damage to remove larger chunks. To generate the damage, I use a Tile Sampler node scattering Gaussian shapes. To make sure the damage originates from the edges of each tile, I use the tile height from earlier in the graph as a mask. The other nodes in this step Slope Blur and Warp this data with grunge and noise to get a more detailed damage map. This helps to ensure that each tile looks uniquely worn.
07 ADD tile Cracks
To make the tiles look like they have undergone years of foot traffic, I blend in cracks using the Darken blend mode over the unbroken tiles. The Cells 3 node is a great place to start when building cracks, but is too uniform without some modification. After Warping the cracks, I use consecutive Slope Blurs with Grunge/noise inputs and a blurred version of the input itself. I Slope Blur an input by itself at low intensities to give the effect of the inflated details.
08 Create the Grout
I make the grout by subtracting the tile height I already have from a Slope Blurred and reduced range version of itself. The final Histogram Range node modifies the grout blend with the tiles – the brighter the pixels the closer the grout is to the height of the tiles. This works as the tiles and grout are eventually blended together using Lighten (max), so only the brightest pixels show.
10 Vary the look of EACH tile
With the heightmap out of the way and the grout looking damaged, I can move on to the albedo/colour map. To darken the tile edges, I blend the combined inputs map from step 03 with a darkened version of itself, then use a mask based on the edge bevel to regulate the effect. To give the tiles some variation, I blend in some hue adjustment using a tile mask generated by Warping the Perlin noise zoom node for added realism.
09 Create the Grout Detail
To make the grout feel old, I use the Clouds 2 node as three inputs on a Multi Directional Warp to get a marbled effect. I combine this with BNW Spots 2, contrast and Slope Blur to add natural detail and multiply onto the base grout height. I make some pebbles and pores using Gauss Spots 2, pass through a Tile Generator and use the Add/sub blend mode to blend with the grout.
11 build the Albedo map
Building up a good albedo/ colour map takes many layers. The hairline cracks I add at this stage are a great example of this kind of subtle detail. Although not immediately obvious, they add believability to the tile texture when it’s viewed up close. I create a thin layer of surface dirt as well, using some Warped Perlin noise combined with the pebbles and pores masks that I already made in step 09. This gives the tiles a really lived-on look.
12 Albedo map the Grout
I create the grout colour by passing the grout height through a gradient map with brown values. I use a saturated version of this grout colour as the interior colour of the broken tiles, and blend with a contrasted heightmap so only the very highest parts of each tile show their tile colour. Finally I add some extra edge damage using an inverted Ambient Occlusion generator as a mask.
13 Create A roughness map
The Roughness map is the last map I create when making a material, as it’s mostly made from previous masks and detail. I use my tile mask from step 04 and reduce its contrast in the Histogram Range node. I then subtract a surface dirt mask and add in the tile edge mask from step 12. I blend in the grout made from a uniform colour and a mask reused from the pebbles and pores.
14 finish off
I apply some finishing touches now. By Non-uniform blurring the height with the Histogram scan output from step 10 then multiplying this result with the previous height, I get more variation in the heightmap. To make the tile surface catch better specular reflections, I blend some tweaked normals created with Warped Perlin noise and a gradient map full of tangent space normal colours. Finally I generate and output the Ambient Occlusion and the final height.