Maxime Guyard-Morin discussed step-by-step how he created a procedural Cloth Padded Wall material in Substance Designer and rendered it in Marmoset Toolbag as well as shared a few resources for studying the software.
In case you missed it
You might find these articles interesting
Hi! My name is Maxime Guyard-Morin, I am a Material, Props, and Technical Artist. I started studying 3D and scripting two years ago. I aim to work on AAA games and deliver the best experience I can provide to players.
After my first year of study, I was hired as an intern 3D Artist at Sentry Games, an indie game studio currently working on Cellyon: Boss Confrontation. I also worked for TrueSightProjects on DarkAge as a freelance 3D Artist during my second year of study. I’m currently doing a sandwich-course at 6th Sense VR, as a 3D Environment and Technical Artist.
Gravitating towards Substance Designer and Leonardo da Vinci's Approach
I’m a curious person. Show me a new tool and you can be sure I will give it a try. So the question is not about why I started using it but more about why I am still doing it.
Substance Designer has a fully non-destructive workflow so if you're someone like me who is always scared about deleting something, it’s gonna be your new best friend.
I've been especially inspired by Leonardo da Vinci’s workflow. In a way, you could say he was some kind of a technical artist. He knew how things work, he was one of these people who truly understood and mastered the whole process of making an art piece. Today we have designers who design the buildings and architects who make the design work from a technical point of view, so neither of them has a global vision of the whole project and that can lead to a big waste of time and expensive mistakes.
Leonardo da Vinci was both a designer and an architect (and many other things too), with both strong technical skills and art skills. For example, he wouldn’t just draw a cat, he would understand why the cat is sitting like this, how its muscles work, how the light interacts with its fur, what it is looking at and why. So he would have a perfect understanding of what he is drawing, leading to a perfect realistic representation of a cat.
From a more "Substance Designer" point of view, I got inspired by artists like Alex Beddow, Romain Lemaire, Alysson Soares, Austin Cline, Javier Perez, Elie Paquiet.
Cloth Padded Wall: Choosing an Eye-Catching Subject for a Project
I didn’t want to have an ordinary/common piece in my portfolio. As a student looking for work, I’d like to create pieces worth to be noticed. I don’t think that recruiters will remember a portfolio with a sci-fi corridor environment, a concrete wall material, and an AK-47 because you see them everywhere.
Doing this also presents recruiters with an easy way to compare your skill to others. It’s fine if you're the best artist in the world but in general, you want to avoid this. So if you have unusual art pieces, a recruiter may share your portfolio with the art team just because we tend to share and explore unusual things more regardless of skill level.
General Structure of the Material
The first idea was to make the cloth part in Marvelous Designer, but since I wanted to showcase my Substance Designer skills, I stuck with it for the whole process. However, in production, I would recommend Marvelous Designer because the goal is to get the best quality in the shortest time possible.
I did not choose a random height/width base diamond shape ratio. It’s very close to 1.618 (a little bit higher due to the fact I wanted to have a tilling material). 1.618 is an approximation of the number Φ (called “Phi”), more likely known as “The Golden Number” or “Golden ratio”. This ratio is everywhere, from melodic metal rhythm to the human body proportion. If you find something pleasant, there is a big chance that you can find this ratio in it. So I try to use this ratio in all of my artwork. As far as I know, it works well with volume, length, and time.
The main interesting technique here is using the Non-Uniform Blur Grayscale node to remove hard edges made by the Bevel node. The Nondirectional_warp node consists of four Directional Warp nodes each linked to a Transform node and some math, so you get a directional warp effect without moving the base map. You can get a newer version here. The Curve node at the end is used to inflate the shape.
This part is about creating the “filled with wool” effect. Usually, cloth padded walls are not uniformly filled with some sort of wool. It’s more like multiple wool balls placed together. It’s something that you will rather feel than see, but if it’s absent you will feel there is something missing. Henning Sanden and Morten Jaeger from FlipedNormal call these details "Mid frequency":
I’m using the same map one time at full size and one time at a 0.5 size. I found that it’s an easy way to add details to a material.
The Remap Range Grayscale node is a custom node working like an Auto Levels node but you can choose the max and the min value of the output. So here I make sure that my min value is 0.5 and my max value is 1.
Using a Directional warp with a Flood Fill to Random Grayscale is a good tool to apply a map to multiple shapes at one in a non-uniform way. The main issue is that due to how the Flood Fill node works, you always end up with a black seam between shapes. To fix this I use a Distance node with the “only source” parameter on, extending the shape to remove the seam. The same technique works with the color input.
I’ve generated three different scales of folds with the Fold Sampler Node. Like “Phi”, 3 is a magic number, I would define it as “not too little, not too much”. 3 is everywhere: seconds, minutes, and hours on a clock. The head, torso, and legs for humans. The sky, ground, and sea.
The human brain tends to appreciate the number 3 because we are so used to seeing it everywhere. In general, you want three different levels of details. Small, medium, large corresponding to close, mid-distance, far. Colored (except for booleans which stay white, but they are also a little bit thinner which helps to recognize them) links mean that you’re working with values and not pixels, so you can manipulate vector4, integers, floats. Here they control the size of parameters of two Tile Generator nodes from a single Input value node.
The main idea here is that sometimes you need to divide tasks. Complex tasks are only groups of smaller tasks. Keep things simple, most of the time they become very complex because we make them very complex, not because they are complex in the first place. Is generating all folds with a single Tile Sampler node possible? Sure. But is it the fastest and easiest way? I don’t think so. Here, I exposed a few parameters of the Tile Sampler node like size, mask random, rotation random, and some others to be able to control them in the main graph (here I used my main graph maps as an example, the “real” node uses Input nodes instead, just below the Transform nodes).
When using a pattern on a surface in Substance Designer I recommend using a Warp node with your blurred height map as intensity. It will seem like you're changing the UVs applied to a pattern.
For metal elements, I used the base pattern again and played with the Curve, Bevel, Blur, Blend, Levels, and Clamp nodes. The Clamp node is like a histogram. I use it because it has a more logical parameter name in my point of view. The important point here: use what works for you.
Usually, I spend some time experimenting on my graph, playing with my nodes. It’s a good way to get interesting results. But this doesn't free you from using references. I won’t do this with a full graph, ever. Here, only two metal elements come from this strategy.
From there, half of the work for the metal bar height map is done. The metal parts still needed some variation. I started with a heavily damaged metal then used a mask to control the damage intensity. Since I wanted a separate controller for dots and bars, I found that was the best way to do it.
The stone height map is basic. The graph speaks for itself. The two Tile Generators are copies of those I used when making the metal cross but with a dot as the input.
When working on basecolor maps, I mostly used HSL nodes instead of multiply/add/copy with a grayscale or a new color. Working this way has two advantages: first, you're still using the same color (as long as you're not changing the HUE value), so you don’t end up with mismatching colors. Secondly, you can change the base color as much as you want without changing any blending values, ending up with something easier to control with only one parameter in the .sbsar.
I’m still using a Uniform Color node in this specific case because it’s not about adding variations of color but about adding jewel impurities in the color map.
Keep in mind that defects, damages, and wear and tear make anything more realistic and believable as long as you're not over-using them. You need to be able to justify them. I would say that they add storytelling to the material.
Roughness and Metalness Maps
Roughness and metalness maps are as important as the color map to get realistic textures. Roughness and metalness maps affect the color and lighting in general, defining what your object is made of. This is why I spend an equal amount of time on height maps and roughness maps.
I started by creating a map of scratches to be used as a mask when blending grunge maps to do the roughness map. Scratches in roughness maps are a place where some of the dust and dirt has been removed due to something, not in addition to something. It may sound obvious but removing something to add detail sounds very contradictory and illogical.
Here, I blended three times the same Scratches Generator node at different scales and added a mask to only make them affect the top of the height map of the material. I also inverted the map at the end with an Invert Grayscale node.
Next, I did sort of a leak map which will be used as a base for a large part of the wear and tear. Substance Designer gives us a good starting point with the Grunge Map 006. I played with the random seed and found that seed 4 will work fine for this next step. Then I changed the seed mode to “Absolute” to force Substance Designer to use a specific seed for a node, so changing the main random seed (either in the graph or later in the .sbsar file) does not affect this node seed.
Next, I played with some nodes to get a more uniform map and finally blended it three times at different scales. Doing this is way better than just increasing the tiling of a map.
Speaking of the metal part of the material, if you want to add a little bit of dust on the metal, you should lower the metalness amount a little bit.
While working on metallic objects, I recommend working on the metalness and the roughness maps at the same time. They are both controlling reflection and working on them simultaneously will let you avoid spending hours trying to make them work together. Below is a gif to show what I mean. But that doesn't mean you have to use the same noises and grunges on both.
Colors that you perceive might not be the real colors of the object. The human brain is easy to fool, our color perception depends on context (mostly shadows) and other colors nearby. Here is a simple and famous example:
Just remember that when you’re working on colors. Most of the time you only need to change value and saturation to go from the color you think it is to the true color.
Some colors are harder to get correct than others because of the spectral sensitivity of the human eye (which sounds more complicated than it really is). My main advice is to avoid green if possible (which is usually not the case) and not to be scared to spend time looking for the perfect color.
Now it's time to get back to the artistic part. Color harmony is one of the most important things when it comes to colors. It can make or break any artwork. Here are the tools that I use to get a good color palette: The Color Calculator, Coolors, and ColorHexe. Andrew Price did a great video about color harmony if you want to know more about it:
A good way to know if colors are off is to turn your artwork to grayscale. If you're on Windows, you can hit Win key + Ctrl + C to turn everything to grayscale. By default this shortcut is off, you can turn it on in Settings ->Ease of Access -> Color filters. Turning things to grayscale is also a good way to avoid being distracted by colors of your references when working on the height map for example.
The most challenging part of the production was dealing with exposed parameters . I decided to expose many parameters to make the material easy to reuse in multiple projects, be able to easily create variations for my renderer, and show that I can create a material for an online material library (you never know). The challenge was in those 45 exposed parameters that interacted with each other. For example, if you select the stone instead of the logo in the dropdown, logo parameters (such as size or color) are replaced by stone parameters (such as number of faces or color). But these parameters are only displayed if you have metal bars and dots activated. When doing things like that, you have many parameters that depend on the condition of others. So you need to stay organized all along the process or you can get lost quickly.
The biggest advice here is exposing parameters one step at a time, and not exposing all of your parameters at the end of your process.
The second issue was to keep the whole material working with any setup. Be sure that you can use any color for any part of the material, be sure that you don’t have the jewel color in the color map with the Substance logo in the height map. In the end, it’s a lot of masking and switching. Boring to do, but so satisfying afterward.
Here’s an example of a custom function I did for a Multi Switch Grayscale node that decides which mask to use for the logo depending on whether there are 1) no dot outputs on the first entry, 2) there are dots and the logo type 1 output on the second entry or 3) there are dots and the logo type 2 output on the third entry. It’s a little bit more “advanced” way of controlling parameters.
Reassure yourself, it comes with practice. My first custom function that controlled parameters looked more like this one below (to people who are used to these kinds of things – you will get the same result by setting the “Equal” node as an output, I added an "If... Else" node to help more “amateur” people understand the process):
Presentation in Marmoset Toolbag
When I’m presenting a material, I try avoiding planes or flat surfaces. I prefer to use a curved surface, generating a more interesting depth of field, making the roughness map easier to see (because of the light reflection on the curved part) and allowing lights (and their shadow) give more volume to the material.
So I used the “Rounded Cylinder” from Substance Designer and removed a large part of it because, in Marmoset Toolbag 4 beta, subdivisions are applied directly on the mesh and not in the shader, creating a lot of performance issues, even with ray tracing off (I’m running on a GTX 1080ti, an I7 8700K with 16G of RAM and I don’t even use the ray tracing in my renders). Therefore, I needed to have the smallest amount of polygons possible. I really won’t recommend anyone to use Marmoset Toolbag 4 beta for portfolio pieces for now because of that.
When it comes to lighting, I keep things simple. Here, I used a directional light and a three-point lighting setup, very classic but always effective. I’m always increasing the shape width/diameters of my point lights to soften shadows, which results in more natural shadows and lights. Keep in mind that you can disable the “Visible Shapes” option, hiding the white sphere created by increasing the shape width/diameters.
Since the point here is to showcase the material and not the lightning, keep in mind that the more changes you make, the bigger the chance is to mess the presentation up, so don’t add too many lights.
Also, low-angle or high-angle shots are more interesting to look at.
Where to Start Studying Substance Designer
I highly recommend beginning with Kalyson's tutorials/time-lapses and Substance Academy Series: Getting Started with Substance Designer. For more advanced users, I recommend looking at Substance live streams and Substance's videos about the software in general. Looking at other people's graphs is a good thing to do, too.
My main advice is to get out of your comfort zone. When I started to think about creating this material, I had absolutely no idea of how to do it. I usually don’t do things that I already know how to do or things that I have already done. This way, I can always learn new things and keep myself motivated.
I would like to say that you’re all welcome to ask any questions about my material. You can find me on LinkedIn, Artstation, and Facebook.
Special thanks to Alice Hughes, Lisa Salmon, and Lucie Duclos for their feedbacks and 80.lv for this amazing opportunity.