Creating a Reinforcement Wall in Substance 3D Designer

A Material Artist Kai Mergener talked about the Reinforcement Wall project made for Nodevember and showed us the procedural workflow in Substance 3D Designer.

Introduction

My name is Kai Mergener, but I'm also called by the nickname Kizzle. I joined the games industry about 5 years ago, where I had my first internship at a games studio. I am now a Material & Environment Artist at GentlyMad Studios, the same studio where I did my internship previously.

We recently released Endzone – A World Apart, a post-apocalyptic survival city-builder and it was also the first big title that I have worked on. Since we are a very small team, my tasks did not only include creating materials but also assisting in creating 3D-Models and texturing them. I was also responsible for foliage, the creation of our release trailer, and basically, everything that my colleagues gave me.

Becoming a Material Artist

Becoming a Material Artist was never the plan initially. As I started to study, I was aiming to become a 3D artist and totally dived into learning common workflows, everything from hard surfaces to organic shapes, rigging, skinning, animation, and also shader coding. I stumbled over Substance 3D Designer as I was learning the very first steps of what has now become Quixel. I remember it was an awkward integration for Photoshop back then, but also it was the first tool actually capable of creating materials from a single image and made it possible to texture directly onto a 3D object.

I loved how easy it was to suddenly create textures for objects, so I looked up everything I could find to make that process even better. This is where I found Substance 3D Designer. I think it was version 4 at that time. I followed my very first tutorial, the creation of a mandala stone from Blackhart Films on YouTube.

As I needed to start my internship, I learned about the small start-up studio GentlyMad, which conveniently was located directly near my hometown. When I applied there, they first had no possibility of having me as an intern, as they were in the middle of their first big title development, and at that time they worked only in a team of five people, so the time was short. However, as I wanted to get the job anyway, I said that I was familiar with Substance 3D Designer and could help them out there. By that time, I barely knew anything about the software, but it helped me to get my foot in the door, and I spent nights learning as much as I could, so I was able to perform at work.

I actually spent so much time just in SD, that I almost forgot all other skills I had acquired till then. Since licenses were also an issue due to the limited budget, I also needed to learn Blender after working for 3 years with 3ds Max and Cinema 4D. I also couldn’t use Photoshop and needed to use GIMP. All these limits made SD and SP not just fun to me, but also pretty much mandatory as working outside of them meant losing time for the team. Since then I learned how powerful the whole Substance Suite is and realized that I love working with their toolset. Also seeing that the industry back then began to have a niche for artists specialized in working with materials, I decided to stick with it.

Since Substance (now Adobe) keeps adding a lot of good features with every update, it is hard to tell which is the most useful or powerful one. I personally think that being able to define input values inside the graph and not relying on exposing parameters made life and work a lot easier.

Nodevember

Nodevember is a pretty fun time. Although this year's prompts were not that good as last year's ones, I admit that having more time and freedom to complete a theme suits me a lot. For Nodevember, I like to push my limits and do something that no one else does. Making materials every day can get tedious at some point, so ignoring all the boundaries and limits for a few weeks is what makes creating complex materials so fun to me.

My inspiration usually comes from searching on the internet and looking at pictures or just from some ideas that suddenly cross my mind. I like working from reference a lot as well as giving something that already exists my personal touch. This is also why I chose the Rainbow Six: Siege material, as I looked at those textures every day and thought this would make a great material. I ruled out almost every idea that occurred to me within the first hour of brainstorming since I expect a lot of other artists to go for those as well. As I am still just starting out as a Material Artist, I want to surprise people with my designs and stand out. This is why I give myself the challenge to do something really different for every prompt.

The only sneak peek I can give is that for all color themes I will be doing different gemstones and minerals. I like the idea of keeping consistency in the design, so doing the same thing over and over again in 5 different variations, making them all stand out by themselves, is a huge challenge to me. Sadly I learned the hard way and wasn’t able to finish my entry for “Red” in time and totally fell behind time, which is why I probably won’t complete Nodevember this year.

I still want to make the color themes once I find time again and push my skills in creating rocky surfaces and shading inside Blender Cycles. A huge inspiration for this theme is the work of my good friend Ishan Verma. He is an absolutely outstanding talent when it comes to materials. Since he released his article about creating ores in Substance Designer, I am hooked to give it my own shot and reach his quality.

Inspiration and References

So as I mentioned before, I was inspired by the textures of Rainbow Six: Siege as I am a huge fan of the game. I spend a lot of time in or between rounds in the game just staring at walls and textures, already picturing in my mind how I can recreate that inside Substance 3D Designer. Making the reinforcement wall was my choice, as Enrico Tammekänd, who also is a huge inspiration to me, also made that material a while ago. I wanted to see if I could match his quality and also give it a cinematic and realistic touch.

For references, I just started up a game and made a lot of screenshots from every possible angle. I had a few issues with that, as I did not play with the 4K textures, so everything was of very low quality. That made it harder for me to work from the reference. For the metal and also the surface of the painted metal, I did not use any references and also did not look it up. I wanted to take the chance and try to get the material done with just what I had in mind. If my result would have been not good enough, I would have reworked it but now with a reference. Luckily, it turned out to be fine, so I did not need to redo any parts. 

However, I would not recommend working like this. If it was for production or as commission work, I would have collected as much reference as I could think of. Reference is crucial and it helps in learning to visualize key elements of surfaces and materials.

SD Workflow

Like probably any other Material Artist, I start off with the Height Map as it is a great source for any other Map that you might need to create. For this material, I chose to split the project into two separate graphs. I wanted to have the resolution for the X-Kairos charges on the wall the same as the wall itself since I knew I was going to do a close-up render. Since the shape of the X-Kairos is quite complex, I used a custom Bezier Curves Node from “shining1” on Gumroad to make the work easier. I blocked out one side of the object and then used a Splatter Circular to close the shape. I used a series of nodes which helped me to get a mask from the outline. I even made a Custom Node out of that, as it is really handy for working with Hard Surface and Edge Detect.

Then, I needed to include the middle pieces of every side, so I built my shape and ran it through the same Splatter Circular, just adjusting the rotation until it fits.
After that, I used my main shape, bevel it slightly to match the reference, level the parts I wanted to blend, and then used a Blend Mode set to Multiply, so I can include the bevel in my main shape.

Then, I did a series of repeating the same steps over and over until I got all the details I needed inside my main shape. You can follow along with the steps from the pictures:

Once the Height is fully completed, the interesting part of the material starts. My first step is to always add an Ambient Occlusion and a Normal Node. I exaggerate the values of both nodes and plug them into a Base Material Node, so I can make the whole shape and all its details very presented and easy to see. I recommend doing this with every material, as this gives you the most control and overview. It is really easy to detect if some areas still have issues, do not work well, or if your Height Map has wrong ranges and the shapes look out of proportion.

Then, I started layering surface noise onto my Height Map. For that, I used a Clouds 2 set to both inputs of a Mosaic Grayscale. It was blended with a low opacity and set to Multiply. The other two noises just got some random parameters and were both set to Overlay. This gives you a good base for creating some variation in your Color and Roughness later on.

In contrast to most materials, I did not use the surface noise mixed into my Height for Normal Information, but instead used my Base Height and blended it with a BnW Spots 2 Node, which I leveled and blended to even out the strong parts. After that, I generated a really low-intensity Normal Map and combined it with my base. This way you can get a really clean surface noise on the Coat for a painted metal.

When it comes to colors, I prefer using the Color Variation Node from Ben Wilson. It is a fantastic, fast, and powerful Node to create controllable color variation without disturbing the procedural nature of your graph, for example when using gradients and sampling from image textures. I plugged my blended Height Map into the Value Variation and played with the settings until I found something that looks good. Then a series of blending different colors followed, all plugged into a separate Color Variation Node. I repeated this process until I got all the base colors that I need.

Next up was a basic dirt layer. Usually, this comes later in my graph, but since I wanted to break up the surface even more and reveal some metal shining through below, I wanted to add smudges and grunge before blocking in the damage. This would give a better impression that the damage has just been applied to the surface and it did not come from oxidation or built up over time, since the chipping for the metal will subtract all dirt from the surface again later on. As a mask for the dirt, I use a simple Dirt Node, which takes Ambient Occlusion, Curvature und Position as inputs. In some situations, I modify the inputs a bit to get a better mask for the areas I want to emphasize, but for this one, I stayed simple and just wanted to get subtle grunge on top.
Following up, I built my mask for the Metal Edge Wear. This time I used a Non-Uniform Edge Detect to bring in variation for the edge damage of the outer shell. I used a classic Slope Blur Grayscale and Clouds 2 combination. This is probably the most obvious to spot effect in a material, but also a really good one if processed further. To break up the Metal Edge Wear and the Slope Blur, I subtracted a different Grunge Map with high contrast to chip away some areas of the Mask. I did that a second time with another Grunge Map, that was also fed into the Color Variation Node. When it comes to creating masks for certain details, you always want to make sure you break up the shape so it doesn’t feel generated. Besides, you need to drive other information from the same mask, so details don’t look stacked, but also interact with each other. After I got my metal blended in, I added another dirt layer, this time being a lot more subtle and only filling in areas that yet did not receive any detail and color variation. For the last two steps of my color pass, I blended in some of my Ambient Occlusion with a Blend Node set to Multiply.

You usually do not want to have shadows or highlights in your Base Color, which is why this step needs to be handled with caution. However, it can add a lot when going for cinematic renders. I also blended in a Curvature on Top with the Blend Mode set to Overlay. This just sharpens your texture and helps the Metal Edge Wear to pronounce the chips and sharp Edges better. Alternatively, you can also use a Curvature Smooth like I did here and lower the opacity. This will enhance the depth of your different Heights a little bit more and focus less on corners and sharp edges.

Finishing the color pass before finishing my Normal Map and tackling Roughness and Metallic, I can now use my masks to drive the same information into those maps. When adding details and different layers of colors and maybe even materials, it is important to support them in every channel that you will use later on. Since I had metal showing from below the painted coat, I also needed to make sure that my Metallic Map contains that information and, therefore, my Roughness and Normal, too. For the Normal Map, I just inverted my mask for the Metal Edge Wear, piped it into another Normal Map, and used a Normal Combine.

For the Metallic, I used a Uniform Color Node as a base and set it to full white. Then, I blended in the parts that are not metallic by subtracting them from my Color. I also included my Dirt Mask and brought in some variation into the material. Material is either metallic, or it is not. However, with some experience, you can bend the rules a bit and try out different workflows. In this case, I wanted to complement my Roughness a bit more, so I lowered the opacity of the last blend, where my Metal Edge Wear Mask was fed into the process. This left me with a complete and softened white on the metal parts, but also some decent reflections on the coat, as it should've been quite reflective in the render and picked up more details from my lighting.

The Roughness was built up pretty much the same. I started off with a Grayscale Conversion Node from the Base Color and partially excluded and tweaked areas that should have had different Roughness. Starting like this gives you a very noisy and interesting base, picking up all the different layers you have already put into the material. After I adjusted all values to get them balanced to each other and get them in the correct range, I finished up the Roughness by adding a Levels Node and tweaking the values altogether. Finally, I only needed to grab my mask from the beginning and subtract the holes from it, so I could drive the opacity from there.

For the other graph containing the Reinforcement Wall, my steps were pretty much the same. The key to complex materials like this is always planning ahead. I split every component of the wall into a separate object, that would eventually be built separately as height information and later blended together.
1 of 7
1 of 5
1 of 6
Working like this makes it easy to adjust every part of the final height completely isolated from the main shape. Practically speaking, I could change, enable or disable every portion of the wall without disturbing the main shape or any masks that are driven from that.

Working on hard surface materials makes using this workflow pretty straightforward, as it is the easiest way to approach them. Generally speaking, I recommend working the same for organic shapes, detaching every element and detail so well that changing or removing them would not affect the whole material. Ben Wilson, who also is a great inspiration to me, had a really great talk on DinCon, where he showed a practical approach to work like this. You definitely should check it out. I learned a lot from that and I am still improving on implementing every new material like this.

After the Height is complete, I again generated a lot of masks that I would later need for Color, Roughness, and Metallic. At this stage, I probably could have done a better job on nailing the detail that can be seen on coated metal, but since I already was 10 hours into this material straight, I hoped it would work fine like it is.

With all my masks completed, I moved on to put some color in the graph, again following the same steps. First, I blended some colored noises together, always based on parts of my Height Map and then slowly added more colors to every single component. At this point, all I needed to think about was which components lay on top of each other, so I did not accidentally mask out areas that hadn't blended in before.

When building masks, do not hesitate to put in some more nodes to further break up or warp what you already got. To make your material look less generated, working with masks both in adding detail in the Height and Normal, but also getting Color Information from that into your Albedo is the key. Looking back at my process, this is probably also the part that could have been improved the most by myself. But again, spending so much time already on the material in a single session, I decided to keep it simple.

Final Renders

For the final renders, I started off with an HDRI that already matches the light mood I was going for and just played around with the brightness and rotation until I got a better idea of what actually would be my final goal. Once I knew what I aimed for, I toned down the brightness of the HDRI to a minimum, so it just functioned barely as an ambient source. Next up I placed a Directional Light by sampling a point from the HDRI and gave it a good brightness. I worked with that light for a while to see better where interesting parts of my Material were, as making Directional Light the only light source already gets pretty cool shadows and highlights.

With my first light, I was trying to set the main light source, which would mainly impact how shadows and highlights were distributed and also set where the light was coming from. Every light source I added from there was just to complement the scene or fill out areas.

My intention was to create the effect of a fluorescent tube hanging above the wall, as this creates kind of a dramatic effect and also can be found a lot inside Rainbow Six: Siege when placing the reinforcement wall inside a cellar. For this reason, I changed the Directional Light to an Omni Light and also set its shape to “Rectangle”. Then, I played again with the values until I was satisfied, duplicated the Light, and moved it over to the right side.

I also set my Main Camera to a FOV of 40 and changed the Tone Mapping to ACES and increased the exposure slightly to a value of about 1.2. Sometimes I tend to adjust my own curves, but it worked fine here. Also, my render settings were set to use ray tracing, so I got those nice shadows.

Then, I added two more Directional Light sources that were set to warm and cold colors, to create some dynamic. Both were set to a pretty sharp angle, so they did not illuminate the surface too much, but created some color on the rim of the shapes that were displaced from the surface. They also acted as fill lights to brighten up the lower part a bit. I also adjusted my Key Lights to make them a bit brighter.

For the final adjustments, I increased the Subdivision on my plane where the material was applied to a vert count of 16 million, just to make sure the really strong angles get enough information on the surface in order not to look stretched or distorted. I also increased the ray count for the final render to 3 bounces, increased the samples to 1500, and removed the denoise function completely, as it tends to wash out the image. If you can afford the render, denoising isn’t needed anyway.

Before hitting the render button, I also included the X-Kairos Material on a separate plane and positioned it in place, so they look just like they would in the game when shot on the wall. The final viewport in Marmoset looks like this, before hitting the render button and moving on to post-processing.

Post-Processing

For post-processing, I always do the same steps as they just work for me pretty well on every material I do. I import my image, rendered at 4K, into Photoshop and start by switching into “Camera Raw” after making a Smart Object out of my layer, to be able to change settings later on.

From there, I move from top to bottom, adjusting my White Balance, increasing contrast, and tweaking the lights to look more dramatic and realistic. What exact values I use heavily depends on the image and material I work from, so there is no point in sharing that here.

Once I am done with the first correction pass, I usually duplicate my layer two times. One will be blurred with a Gaussian Blur and set to the Blending Mode “Screen”, the other one will be transformed using a Highpass Filter and set to Overlay. With the blurred version, you can get some Bloom, while with the Highpass you just increase the sharpness and make the image overall look crisper. You can play with the opacity and masking for both layers until you get an interesting result.

From here, I usually tweak everything forth and back until I feel I can move on to my second correction pass with another Camera Raw Filter. To do that, I use the function [CTRL] + [ALT] + [SHIFT] + [E] to generate a new layer on top which contains my current viewport view and apply the filter after. To finalize the process, I apply a ColorLUT as an adjustment layer on top and try different looks. Usually, I only use the built-in ones and reduce the opacity of the layer, as well as play with the Blending Modes and masking. I also sometimes add some DOF, using the Lens Blur option, and either mask the Blur with custom gradients or export a Depth Layer from Marmoset or Blender Cycles, depending on what I use. For the final step, I apply a Camera Raw Filter again, this time however only using it to generate some grain and vignette on top.

For this particular piece, I also painted in white circles in the holes of an X-Kairo charge with a soft brush and masked the previously generated bloom layer on top. This created the feel of this one being charged at the moment and thus introduced some dynamics. 

Afterword

Mastering Substance Designer is something I am yet trying to achieve myself, so it is hard to give a specific estimation on how much it really takes. My personal experience over the years showed me that you can learn something new every single day. Last Nodevember was a huge milestone for me. I accomplished 30 materials in 30 days while working full-time and still maintained a good quality overall. Until this Nodevember, I thought I wouldn't be able to achieve any better results, but now I got the chance to discuss my work here, in an 80 Level article. Experiencing my progress like that made it very clear to me, that you will probably never end up mastering Substance 3D Designer, but slowly getting better at it, or even just keeping up with new workflows and techniques is what makes you a versatile and skilled Martial Artist.

On the other side, starting into procedural Materials and specifically Substance 3D Designer is very beginner-friendly. Other than programming or working with shaders, you get visual feedback at every step of your process. Just this fact makes learning the creation of materials really enjoyable and probably even simpler than in other software.

Take some mud materials, for instance. Without thinking about how you set up such an organic and complex surface, you can already approximate a good base by just inspecting the available Noise Maps. Mixing Clouds 2 together with a Perlin Noise and warping it afterward will eventually be enough to sell a convincing mud surface.

On the other side, creating pebbles and stones, which at first sounds a lot easier, might afford a more complex setup and already involve knowledge about how Blend Modes work and how to scatter properly. 

To be completely honest, I know how intimidating it can be for beginners to see what people can achieve inside SD. In reality, however, there is the same amount of trial and error with every new material, even for experienced artists. As you can see in my workflow, even complex shapes are mostly just a series of blending basic shapes on top of each other, so there's not a lot of magic behind the scenes. 

The most beneficial thing I recommend doing is to get yourself out of your comfort zone and experiment with your own workflows. Following tutorials is good to get to know a new software, but ultimately you only learn a specific way to do something. If you are working in a studio or production environment and that specific material from the tutorial does not fit the vision of your team or art lead, you need to come up with a solution. The more often you try to accomplish something in a different way and repeat the needed steps in your mind, the better you will eventually become.

Another good practice to check your own skills and weaknesses is to inspect surfaces you come across in your daily routine. If I can’t already figure out in my mind how to probably recreate that in Substance 3D Designer, I just open up the software and try around until I know how to achieve what I want.

Kai Mergener, Material & Environment Artist

Interview conducted by Theodore Nikitin

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more