See How a Team of Modders Uses Substance to Recreate Skyrim!
Hi there! My name is Hayden Price and I'm currently in the final year of my 3D/Animation degree. Before I decided to pursue 3D Art as more than just a hobby, I would mod games in my free time, one of my favorites being Skyrim. It was there that I found out about the Beyond Skyrim team and the effort they were making towards bringing Tamriel (the landmass Skyrim is a part of) and its surroundings to the game, and I just couldn't help but join!
For those of you who might not have heard of Beyond Skyrim, we’re a collection of various teams, with each team working on a different part of Tamriel and the surrounding provinces. The thing that makes Beyond Skyrim different from the other projects out there is the fact that we’re recreating these provinces to be set in the same timeframe as Skyrim. That means that when you play Beyond Skyrim, you can revisit places such as Cyrodiil (the province of Oblivion) and Morrowind, and have a whole new experience with new quests and characters!
Stage 1 - Preparing Your Project
I generally start off my projects using a Metal/Roughness preset, and loading in the mesh. I don't have any pre-baked maps, as I use Substance for all of my baking. For many of my models, depending on their complexity, I’ll skip the sculpting stage of the high poly workflow, and instead opt to paint in finer details. This is what I did for the Yoku Greatsword below, so I'll be taking you through those processes also. There's no reason you can't use a Specular/Glossiness preset for the texturing process, it’s just become a habit for me to lean towards Metal/Roughness from working in other engines.
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 to give me a base normal map on which to paint my height details. I bake all of my maps using mesh naming in Substance, as it's my preferred method.
Here’s the ID map I got out of Substance, as well as the layer groups I’ve prepared for the project. As you can see, I’ve 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. I create a fill layer in each layer group (as you can see, they are split up into Blade, Iron, Copper, and Leather). I change this fill layer to only affect the height map. From here, I add a Paint effect to 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 on 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’s 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, I can go back to the Substance baker and bake out my AO and curvature maps that will be used for the texturing process. By exporting and then reimporting the normal maps, I ensure 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 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 to 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 material layers and change these new layers to only affect the base color layer. I 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. Personally, I add in fill layers between the AO/curvature and the base material layers, with an Overlay blend type. I add a layer mask and apply a Paint effect, as well as some other generators to the mask to add in details such as dirt, fine scratches, and other effects. Below you can see a .gif of the original base color texture as it gets combined with the AO/curvature and the 4 grunge/color adjustment 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. This is a very similar workflow which you see used in Photoshop; we have added benefits such as generators, and a real-time view of our model, however.
Stage 4 - Roughness/Metallic = Specular/Cubemaps
Once my base color texture is done, I swap over to the roughness channel view and start building that up using the same layers I used for painting on the grunge. For non-PBR engines, I use the roughness map as a specular map. Once again, I start at the bottom of my layer group, at the base material, and adjust the roughness properties of the material itself to get a good base from which to work. Then 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 allowing me to create 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 those particular layers. I use this method to create those finer normal details on the weapon that aren't created from your base materials or fill layers. I generally swap to the normal + height + base normal channel view for this step to see what my normal map will look like at the end of the process, and I 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’m happy with all my layers, I export out my maps and check to see how they look in the game engine. I then jump back into Substance and make any desired subtle changes. Due to the ease of texturing within Substance Painter, it’s 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 AOand curvature, as well as using some other nodes, to create something closer to what we need. For this process, I’ve created a rather simple node which I use for converting the PBR texture to a more traditional style. The node itself required 3 inputs, eight, 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 height map 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.
All images courtesy of the Beyond Skyrim team.