This tutorial was written by the amazing Jonathan Benainous and appeared in issue 113 of 3D Artist. Subscribe today and never miss an issue!
In this tutorial, we’re going to take a detailed look at the methods needed to create a fully procedural PBR texture using Substance Designer.
With this program in particular, moving too quickly into generating detail could make you lose track of where you are and end up in difficulties. To help avoid this, we will gradually go through the different stages of production and keep our graph structured and well organised.
Simplicity is often the key in this type of very complex project, so we will analyse the best workflow to adopt. Occasionally this means making use of an external program, such as ZBrush, to speed up our process and save some production time.
By studying different techniques and combination of nodes, we will also learn how to generate bas-relief, cornices, patterns, cracks and inscriptions.
In the end, we will learn how to post-process in Marmoset and finalise our shot in Photoshop.
Step 01 – Reference images
Reference images are the key to success, so gather all that you can find. Books, magazines, photos, concept art or pictures of freaky places in the world… everything can be a good source of inspiration. At the same time, start to define the artistic direction that you want for your project. Are you looking for a realistic render or something cartoony? Is it going to be a tribal column or a gothic one? In this project, we’re aiming to create a dark fantasy column in a realistic style, so let’s analyse and determine the elements we will use to define our style. In our case, we want to have cornices, gold ornaments, gemstones, carved Latin inscriptions and bone shapes sculpted in the stone.
Step 02 – Plan the composition
Once the art direction is sorted, let’s start by structuring the column with the cornices. By creating the main horizontal shapes, you will be more easily able to spread the other elements and define the space you will need for each of them. In Substance Designer, create a gradient_linear_1 node and connect it to a curve node. In the Curve Editor on the right, you can manipulate the different grey values of your gradient by creating and moving points along the curve. Here you can accurately draw the profile of your cornice and balance the hardness/softness of your bevels. This technique will speed up your iteration process compared to a more traditional approach using a common 3D program.
Step 03 – Set up the layout
To easily place cornices along your column, use multiple Transformation 2D nodes and blend the results together. You can adjust the vertical thickness by playing with the Height parameter of your Transform 2D node and use the Vert Mirror option to add more shape variety. Don’t forget, in the Tiling Mode parameter, set your Transform 2D node on horizontal tiling only. Also note that in our example we’re using the same Curve node as input, but feel free to create more variation. You can even use an Invert Greyscale node to generate inverted versions of your original cornice.
Step 04 – Add/subtract shapes
Now the layout is in place, it’s time to start the first detail pass by adding/subtracting shapes. To do so, use the Shape node and define a primitive shape to use. Bevel it to add thickness and smoothness. Then use a Tile Sampler node to make your shape tiling. Don’t forget to set it to Pattern Input in the Pattern tab, otherwise the node will not display the shape you’re plugging in. Use a level to adjust the elevation, then use a blend node to combine your shapes to the column structure. Set the blending mode to Subtract, Add (Linear Dodge) or Max, according to the desired effect. To add vertical seams to your cornices, subtract a square shape previously stretched as a thin line.
Step 05 – Ornaments
Create a circular shape using one of the cornices connected to a Cartesian to Polar node. Add a paraboloid shape on top for roundness, then plug the result in a Tile Sampler node. Play with the Scale parameter of the shape and switch the blending mode of your Tile Sampler to Max to enable you to superimpose patterns. Use multiple histogram scan nodes to create masks and insert your different elements properly. Once again, use Level nodes to adjust the depth of each of your layers.
Step 06 – Create gemstones
After some research and studying different possibilities, we found it simpler to make the gemstones in Maya. Gem cutting is an art not easy to reproduce in 3D as it demands a lot of observation to mimic the faceted effect in a realistic way. Use a gem-cutting chart to help stick as close as possible to the chosen model. Keep in mind that the shape is going to be used as a height map and only seen from the top, so stay focused on what is going to be visible. To extract the height map, import your mesh in ZBrush, and in the Alpha palette, use the Grabdoc option to capture your gemstone in top view. We recommend you deactivate the perspective distortion to switch to Isometric View mode.
Step 07 – Bones and skulls
For the bones, ZBrush was the most adaptive tool for us. So follow the same process as the gemstones and used Grabdoc to capture the height maps. Here you can spend some time sculpting your own skeleton pieces but considering that the goal of the project is mainly to focus on the mastering of Substance Designer, you can just use a Free Skeleton Sculpt available on BadKing (badking.com.au). Here you can download a ZTL file containing a full biped skeleton with as many SubTools as bones. Grab height maps from all the parts that might be interesting with as many angles as possible (skull, spine, jaw and so on). The more height maps you have, the more choices you’ll have to create nice bas-relief.
Step 08 – First row of bas-relief
Let’s begin with the bottom row. Here we want to alternate between small skulls and gemstones. Pick one of your height maps, here with the skull looking down, and blur it slightly to smooth the shape with a Blur HQ Grayscale. Add some irregularity and damages by combining a Clouds 2 node, a Blur node, and a Slope Blur Grayscale node. Once you find a good recipe, duplicate your chain, and change the blur amount and the intensity of the Slope Blur to make different variations. Use a tile sampler to spread your skulls and don’t forget to change the Pattern Input number to 3 to increase the number of input slots available. Repeat this for the gemstones, blend your two tile samplers together then use a mask to only display the row at the good location.
Step 09 – Second row
We want to alternate between skulls and demonic eyes maintained by two sculpted skeleton jaws. Here the process is pretty much the same as before, except we are making a very different bas-relief. To make the eyes, reuse one of your gems combined to a squeezed paraboloid shape to make the carved pupil. Connect the result to a Tile Sampler node. Blend together the jaws and place them so they can support the eye and face each other. Use one of your skull height maps and damage it with different intensity to add variation. Blend the three elements together in Max(lighten) mode and subtly adjust the depth with Level nodes.
Step 10 – Detail the top row
The top row is going to be the main piece of our column and has to be the most spectacular and attractive bas-relief of the composition. We need to have a sample of all the elements that we used before to stay consistent for a unique result. To do so, add backbones to punctuate the bas-relief and add skull stacks, gemstones, spikes and pyramid shapes.
Step 11 – Apply the backbone
Import your bitmap and blend It with the previously squeezed gradient_linear_2. In this way you’re going to add roundness. Plug the result in a Tile Sampler and set the x and y amount to 4 in the Instance Parameters. Create a mask using a square shape to limit the area you want to display spines and plug it as a mask map input in your Tile Sampler. In the Color tab, adjust the Mask Map Threshold slider to constrain the Tile Sampler to only spread spines. Blur the result and use a Level node to control the depth. To sharpen the dorsal spine, duplicate the Tile Sampler and change the Pattern to Ridged Bell. Adjust the size to fit your backbone, set the smoothness and the intensity with a blur_hq_grayscale node and a Level node, then blend the two tile samplers together.
Step 12 – Stack skulls
Repeat the process for the previous skulls, but ensure you avoid any repetition by adding random damage. As with the Tile Sampler of your backbone, constrain the area where you want to spread your skulls with a mask. Using a blend, subtract the rectangle, limiting your area and the backbone shape previously clamped with a histogram_scan node. Now play with the Mask MapThreshold slider to obtain the desired amount of skulls. Subtly increase the Rotation Random slider in the Rotation tab to add some more irregularity to your skull stack.
Step 13 – Pyramids and spikes
To add the final touch to your main bas-relief, create a new Tile Sampler and set Pyramid as Pattern. Rotate it 45 degrees, and use a Histogram Scan node to chop off the top of the pyramid and create a nice flat diamond surface. Now copy this Tile Sampler three times to keep the same position settings. In the first one, connect your gem stand as the input. In the second, change the Pattern to Thorn, then feed the third one with your gem heightmap. Adjust the scale of the spikes and the gemstones to make them fit the size of the stand. Use a gradient_linear_1, histogram_scan, and Transformation 2D nodes to make a checkered mask. Then adjust it to alternate between spikes and gems. Finally, subtract the silhouette of the backbones and the skull stack from your composition to trim it nicely, then blend the result with an Add(Linear Dodge) blending mode.
Step 14 – Apply inscriptions
To add character and some more demonic details to the column, use a Text node to create inscriptions. In our case, the Edwardian Script ITC font fit perfectly for a carved Latin quote. Use the same process to circle the column with the well-known number of the Beast: 666. The final touch is to mark the forehead of each skull with a pentacle. To do so, make the pattern in Photoshop and blend each skull with the created bitmap. Don’t forget to blend it just before the connection to the Tile Sampler. In this way you’ll automatically spread the logo all around the column.
Step 15 – Micro details
It’s now time to add the latest micro detail pass. This pass will greatly help to link all your elements together and will add the latest level of realism to your height map. To create some cracks, use a scratches_generator. In the parameters of the node, set the Scratches Amount to 15 and the Scale to 1. Use a Directional Warp to add some distortion to your scratches. Note that you can use your height map as Intensity Input to have a more consistent deformation. Use a Slope_blur_grayscale with a blurred Clouds_2 node connected in the Slope Input to create a chiselled effect to your scratches. Set the mode to Max. In this way, you’ll disburse the shape of your scratches, then by subtracting it to your height map you’ll get a very nice rock shard effect. Finally, use grunge maps and a fractal Sum Base node to add some granularity to your column.
Step 16 – Introduce colours
Start by creating Uniform Color nodes and picking simple colours. Make a mask to isolate each element, then blend flat colours together. You should have a mask for your gems, bones, stone and so on. Once you’ve defined your main colours, in the Library folder, use Mask Generators to add some soiling and deterioration to your column. Here we have a succession of Dust, Leaks, Edge Dirt, Sun Bleach and so on. Use as many generators as necessary to tell the story that you want with your asset.
Step 17 – Gold effect
Now let’s add some gold. To create a mask that includes the different elements that you want to cover with gold, go back to your height map graph and identify each part that might be a good target. Here we want to highlight the demonic eyes, the stands of the gemstones, the circular ornaments and some parts of our cornices. Use Histogram Scan nodes to clamp the values of the different items and blend them together. You can also simply use a Shape node combined to a Transformation 2D node to delineate some areas. Once the mask is created, use a Uniform Color node and use the Color Picker to get the correct value for a PBR gold. Don’t forget to mask out all the micro details previously created in your height map, to remove the grain from your gold parts.
Step 18 – Control roughness
The roughness is a greyscale map that defines the reflectivity of your material. The closer the texture is to white, the more it’s rough and matte. If the texture is closer to black, the material is smoother and shinier. With this in mind, use the different layers from your height map to create variation between elements. Invert your Ambient Occlusion and use the Curvature node combined to a Level to get interesting gradient information. To highlight details, play with your volumes with more roughness in the cavities corresponding to the dirt. Use grunge maps to add contrast and subtle details. For the Metallic map, which here corresponds to our gold, create a black-and-white mask where black is dielectrics and white is metallic. In this manner, you’ll get a correct PBR value and a hyperrealistic result.
Step 19 – Render in Marmoset
In Marmoset, start by importing a rounded cylinder mesh with UV Coordinates. Create a new material and load all the maps previously exported from Substance Designer, so in order of the Material slots, Displacement (Height), Surface/Normals (Normal), Microsurface/Gloss (Roughness), Albedo (Base Color), Reflectivity/Metalness (Metallic) and Occlusion (AO). Don’t forget to tick the Invert checkbox in the Microsurface tab to have a correct roughness and to set the Reflectivity tab to GGX to have a better quality in your reflection. Create lights, find a nice camera angle and add some postprocess effects such as Tone Mapping, Vignette, and Bloom. Adjust the Chromatic Aberration and add depth of field, then Export by clicking on Image in the Capture section. Finally, import your beauty shot in Photoshop and add particles, smoke effects and camera filters.