Texturing with Substance Painter
Content by Hayden Price
This is going to be a cross-post for the Allegorithmic blog post. This assumes you know the basics of high/low poly modelling and baking, as well as UV-unwrapping your models.
Stage 1 – Preparing Your Project
I generally start off my projects off using a Metal/Roughness preset and loading in the mesh. For many of my models, depending on their complexity, I will skip the sculpting stage of the high poly workflow, and instead opt to paint in finer details instead. This is what I did for the Yoku Greatsword below, so I’ll be taking you through those processes.
After creating a project and loading in my model, the primary steps are to get the project prepared for texturing. This includes getting all the baked maps I need for the texture, as well as getting my project prepared and split into different groups. The only bakes I worry about getting at this stage are the Normal and ID maps, as they will be used to create my folder structure, as well as give me a base normal map to paint my height details on to. I bake all of my maps using mesh naming in Substance, as it’s my preferred method.
Here is the ID map I got out of Substance, as well as the layer groups I have prepared for the project. As you can see, I have used the ID map to mask out color selections for each of the groups.
Stage 2 – Editing the Height Map
Once I have my normal and IDs baked out, I make sure to create a Height layer within my project that can be added to the Normal Map, then used as a base for further bakes. What I do is I create a fill layer in each layer group (as you can see they are split up into Blade, Iron, Copper and Leather). This fill layer I change to effect only the height map. From here, I add a Paint effect onto my Fill layer and I paint in some height details, such as large scratches, that I want to be apparent in my texture. Keep in mind that this step is only for the larger details, and the smaller microdetails that will be added in the normal map will be added later on.
Once my height details are painted onto the height layer, we can see their effect by swapping to the Normal + Height + Base Normal layer and seeing how strong all of our painted normals are. I generally have to play around with the height strength and blending properties to get a good look, so be sure to go back and make some changes. Below you can see the end result of my painted height details compared to the original baked normal.
For the next step, I export out my normal map from Substance Painter, before loading it back into my Shelf. Once it is in my shelf, I swap out my previously baked normal map, and replace it with the one that has the added custom details. Now that I have my new ‘base’ normal map in, I can go back into the Substance baker and bake out my AO and Curvature maps that will be used for the texturing process. By exporting then reimporting the normal maps, this ensures that the AO and Curvature bakes take into account the large scratches and details I just painted in.
Stage 3 – Texturing
Now that we have all the bakes we will need for our textures, we can start by going into each of our groups (which we have previously split up into materials and masked via color selection using our ID) and adding in some base material layers. The base materials I choose for each group usually resemble whatever real life material the object might be made out of, although sometimes it can be useful to look at some other materials that might be useful for providing a base for your textures. Substance Share has a great selection of materials to browse through, and I make use of a lot of them. Once I’ve applied all my base materials to my model, I swap to the Base Color channel view in Substance Painter using the C key, that way I can get a good look of what the texture will actually look like in-game as opposed to what it looks like in PBR. When texturing for non-PBR engines, I do 95% of my texturing in the Base Color view.
As you can see, the base color doesn’t look too fantastic when it doesn’t have the other maps included, which is why we need to do a lot of manual painting over the top to get our desired outcome. The first thing I want to add into my texture is the lighting, which I create by using a combination of the AO and Curvature maps. I create a fill layer on top of each of the base materials, changing the settings to only effect the Base Color layer, and load in the AO map, changing the blend type to Multiply. I usually bump down the opacity to anywhere between 15% – 45%, however some areas require a bit more AO than others (this is also why I blend these textures on in each material group as opposed to the entire model, as it gives me more flexibility).
Once the AO is added onto the base color, I do the same thing with the curvature, creating a new Fill layer, changing it to apply to only the base color, loading in the curvature map texture, and then changing the blend settings as well. For the curvature layer, I use the Overlay blend type with an opacity of 5% – 50%, once again, these opacities change depending on my needs.
After the AO and Curvature are blended, we start to get a better idea of what the texture is going to look like. From here you can play around with the texturing a bit more to add those extra details in. What I do is add infill layers (set to Overlay) between the AO/Curvature and the base material layers. I add a layer mask and apply a Paint effect, as well as other generators to the mask to add in details such as dirt, fine scratches, and other effects. Below you can see the original base color texture as it gets combined with the AO/Curvature and grunge layers. The reason I use a mask to paint on my layers is to have better control over the layers when it comes to the other texture maps such as Roughness and Metal.
Stage 4 – Roughness/Metallic = Specular/Cubemaps
Once my base color texture is done, I swap over to the roughness channel and start building that up using the same layers I used for painting on the grunge. The Roughness map is what I use as a Specular map for non-PBR engines. Once again, I start at the bottom of my layer group, at the base material, and adjust the roughness properties in the material itself to get a good base to work off. What I do then is I work my way up the layer stack I have from the base color, simply by enabling the roughness channel on the layers and adjusting the values of the fill layer (I make sure not to add any extra generators or effects as this will also affect my base color channel). This ensures my Roughness (or in this case Specular) adheres to the base color layer, while at the same time allows me to create a specular variation that is dependent on my base color.
Stage 5 – More Height
Using the very same process I just used to create my Roughness (Specular) texture, I go back through my layer stack and enable the height channel on a select few layers and adjust the height value of that particular layer. This is what is used to create those finer normal details on the weapon that aren’t created from your fill layers. I generally swap to the Normal + Height + Base Normal channel for this step to see what my normal map will look like at the end and adjust the settings accordingly.
Depending on the part of the asset, I sometimes also create a new layer in the group specifically for painting on small height details that I might not have gotten from the base material normals.
Step 6 – Export
Once I am happy with all my layers, I export out my maps and check to see how they look in the game engine I’m creating for. I then jump back in to Substance and make any subtle changes I might like. Due to the ease of texturing within Substance Painter, it is no problem to go in and change a height value for some grunge, which would take much longer if you were texturing the object traditionally in Photoshop. I continue to make changes until I’m satisfied with the end result.
For converting textures in Substance Designer, a very similar process can be used, by blending the AO, curvature as well as using some other nodes, to create something more like that we need. For this process, I have created a rather simple node which I use for converting the PBR texture to a more traditional style. The node itself required 3 inputs, a Height, Normal, and Base Color. From there, it is simply a process of blending the AO, Curvature, and Shadows into the Base Color to attain the result.
To create the Curvature, the Normal Input from the PBR texture is plugged into a Curvature Smooth node and then blended on top of the Base Color.
For the AO, the Height is plugged into an Ambient Occlusion node and is also blended on top of the Base Color.
A few extra touches which I like to add for variety include also plugging the Height into a Shadows node and blending that over the top too. I also sometimes like to add a bit of the heightmap to the Base color, so the Height input goes into an Auto Levels node before being blended over the Base color ever so slightly.
Below is an example of the basic node setup. I expose some parameters and adjust them as I need per texture, as all of them usually require some tweaking to get the required look, particularly the blend opacity and the Shadows parameters.
I’ve also attached examples of the default PBR Base Color texture compared to the converted Base Color after passing through the node. (The original Substances are packaged with Substance Designer)
Learn more, join our community!
Arcane University (also for non-members!)
Welcome to the Arcane University! We are a collaborative effort of Beyond Skyrim aiming to help people learn the various aspects that play into mod creation, like scripting, level design or 3d modelling to just name the major ones. If you are interested in learning one of these or just want to help out others achieve their goal, feel free to join us on our Discord server and begin your journey. Previous knowledge is not required, only that you are willing and eager to learn. Below you can find some work that students of the Arcane University made during their time with us. By honing your skills you can eventually graduate, those students may choose to work on one of the various Beyond Skyrim teams or the Atronach Forge, our cross-province content creation hub. So it is a good chance to get involved with the project and learn a few handy things along the way. Hope to see you soon!