INTRODUCTION
Texturing is an important process of creating a 3D model. How should the viewer know whether the object is made out of metal or plastic? Has the asset already been used by someone or was it just freshly bought from a store with the barcode still on it? Most of these questions can be answered through the textures. We define different properties of the surface, such as roughness, metallic and base color, so the materials of the asset feel real and grounded. In this lesson we are going to learn the fundamentals of the texturing process and bring life to our assets. At first we will learn about texture layering and masking, while also getting familiar with the common blending mode and generators. After that we will create a base material using the mentioned knowledge and learn the limitations of creating unique textures in the end. I will assume the use of substance painter, since it is an industry standard texturing software.
LESSON OVERVIEW
KEY FUNDAMENTALS
1. Texture layering
The first important principle of creating your textures is through layering. Each layer can contain different types of information: base color, height, roughness, metallic, and normal. These 5 properties are the most common ones when it comes to physical based texturing.
It is important to understand that each layer lies on top of each other and overwrites one another by default. The essential part of texturing is then to blend them together using a variety of methods. One of them is to use the blending mode. For example: We can set the red color layer, which lies on top of a green one, to linear dodge (add). It means that you add red and green together and now you have yellow. As you can see below, there are a lot different modes, but you don’t need to know every single one. We will go through the most common ones in the next section “Masking”, as it is easier to understand that way.
2. Masking
On every layer it is possible to create a mask. It determines which part of the model is going to display the properties of the layer. We want to do that, because otherwise the layer would just be overwriting the bottom ones. The mask is in greyscale. You can think of it as a percentage, where black is 0% and white is 100%. Let’s take a look at the red and green example again. I created a black mask on the red layer, which means 0% of that layer is visible, whereas white means the opposite.
After understanding how the mask works, we can take a look at grunge maps. They are greyscale textures for bringing more varieties in the textures. For this section of the lesson, we will apply it as a mask. Let’s use the “grunge dirt thin”. As the name suggests, this grunge map simulates the distribution of dirts. So let’s change the base color to brown and set the roughness and height values higher. It fits more to the characteristics of dirt.
<aside>💡 Substance painter provides in default a lot of grunge maps with different kinds of settings built into them. Getting familiar with them is an important step for texturing. Through practices you will slowly grasp the feeling of when and how to use them.
</aside>
Creating a believable mask is an important part of texturing. If you want the layer to look like dirt, then you need to create a mask that resembles the distributions and shapes of it. If you want to have water leakage, then you also need a mask that imitates the effect. And that’s what grunge maps are for. However most of the time it is not enough to have one single mask layer for that. Usually we need to combine multiple grunge maps using various techniques for a more interesting result.
One of them being “Blending Modes”. In the previous topic I wrote about the importance of blending layers together. The same principle also applies on masking. We can layer multiple grunge maps together using blending modes and create a more interesting mask. So now it is a good timing for us to go through the different blending modes.
The amount of blending modes might seem confusing at first, but we can understand it in a mathematical way: Black in greyscale is 0, white is 1 and every value in between ranges from 0 to 1. With this information in mind, we can now take a look at linear dodge(add), subtract and multiply. They represent the operations in math: Addition, subtraction, multiplication.
- “Linear dodge (add)” adds values together. It makes the mask brighter. The black area (0) adds with the white area (1) is equal 1. So the result is a white square in the first image. It also doesn’t matter which layer is on top. As long as the top one is set to add, the result will be the same. Whether it is 0 plus 1 or 1 plus 0, the outcomes are identical. This blending mode lightens the mask aggressively.
-
- “Subtract” takes away value. It makes the mask darker. The layer on top is being removed from the bottom one. Unlike “Linear dodge (add)”, the order of the layers makes a difference. It will give you different result. This blending mode darkens the mask aggressively.
-
- “Multiply” multiplies the values together. If both areas are white (1) then it will stay white in the result (1 x 1 = 1). If one of the area is black (0) then the result will be black (0 x 1 = 0). While texturing, this blending mode is used quite often in creating masks. We can mask specific areas first and multiply it with a grunge map on top of it. Just like “Linear dodge (add)” the order of the layers doesn’t matter. This blending mode darkens the mask subtly compare to “Subtract”.
-
Besides the mentioned ones, there are also other blending modes, that are used quite often:
- “Screen” has the opposite effect of multiply. If both areas are black then the result stays the same. If one of the area is white then the result is white. The order of the layer doesn’t matter. This blending mode lightens the mask subtly in comparison to “Linear dodge (add)”.
-
- Compare to other blending modes “AddSub” can brighten and darken at the same time depending on the top layer. Dark areas at the top will do the subtraction, whereas bright areas will do the addition. The middle grey area will do nothing. Swapping the order of the layers will create different effect. This blending mode is great for creating transition in the mask.
-
- Just like the previous blending mode “Overlay “ can also brighten and darken image. However this time it is the bottom layer that determines the behavior. Dark areas on the bottom layer will multiply with the top ones, while the bright areas will have screen effect. The middle grey area will do nothing. Swapping the order of the layers will create different effect. This blending mode is great for adding variations to the mask, since the effect is not as harsh as “AddSub”.
-
You might notice that using the grunge maps create a result that applies globally. What if we want them only appearing on curvature or cavities? Masking those areas out by hand is just not efficient and less accurate. That’s why we use the generators. They help you mask out specific areas. It is important to know that the generators create mask based on your baked maps. So they will not work, if you haven’t baked the model yet. Most of the generators have 3 sliders: Global Balance (controlling the amount of the mask), Global Blur (adds blur) and Global Contrast (adds contrast). Let’s take a look at some most used generators:
- Position Generator creates a gradient from top to bottom. This generator is useful for blending with dusts or dirt on the top or on the bottom of the model.
-
- Dirt Generator is a special one. It already creates a mask, that simulates the distribution of dirt on the surface, occluded areas and the cavity. With “Dirt Level” you can control the amount of dirt. “Grunge Amount” and “Grunge Scale” are responsible for the grunginess and size of the dirt.
-
- Metal Edge Wear Generator behaves similar to the previous one. It simulates the edge wear on a metallic object with scratches. It has similar parameters as dirt generator.
-
BASE MATERIAL
After learning the 2 key fundamentals, we can start using them in practice. Let’s try recreating this plastic bucket.
The first layer is to define the basic information of the material:
- Base color is red.
- Roughness value is between 0 and 0.5,. because it is a rough surface but still a little bit more toward glossy. Don’t get to carry away about finding a perfect roughness value. Whatever resembles the likeness of your reference is enough. If it doesn’t feel right, we can still come back to it later and change it.
- It is a non-metallic object. So the metallic value is 0.
- There is no need to change the normal information, since we don’t want to mess with the shading.
- Height stays at 0, so we have enough room to increase or decrease the height of other layers later.
-
Before we move on to the next steps, let’s take a look at the reference. As you can notice, I forgot to add the bump of the inside. Now we have 2 options: First being to go back to the modeling phase, add the detail in highpoly and rebake it. The second option is to add the bump through texturing. Each method is valid and has their own advantages and disadvantages, which I will explain later.
For now I’m going to add the bump in textures. Create a second layer and only enable the height information with a positive value. Since our base layer has a height information of 0, every other layer with a positive value will be higher than the base surface. We can’t see the effect now, since the layer is on the whole model.
So we have to mask out the area, where we want the effect. Let’s create a black mask and add a paint layer on it. Using the “polygon fill” tool with the “UV chunk fill” mode, we can quickly fill the UV shell with white values. After that we only need to erase the top part to match our reference. We can still adjust the height value afterwards, if we are not happy with the result.
Now we can create a third layer. The reference photo shows a big area of discoloration (green area), while the inside and the bottom part barely have any of the effect. What does it mean for us?
- The base color of the layer should be lighter and more desaturated than our base layer.
- Roughness value should be higher than the base one. Since the discoloration on plastic also means, that those areas are more worn than the rest.
- The inside and the bottom remains unaffected. Those parts should be black in mask. We can use the position generator to mask out the top part and UV chunk fill the inside with black.
-
The end effect looks like this:
It doesn’t quite look like our reference, because the effect is too uniform. If we zoom in on the photo, we can see that some area has more discolorations than the other. That means we need to break up the uniformity of the mask using grunge maps.
I used “Grunge Plaster Paint” with the blending mode set to “Multiply”, because I want it to only blend with the white areas. After that I adjusted the opacity for a more subtle effect. By default, substance painter uses the UV projection for textures. So you will have visible seams on your model.
To avoid that, we can use tri-planar projection. It uses planar projection from different angle and blend the result together.
<aside>💡 While texturing, you don’t have to find the grunge map that 100% looks like the photo. It is nearly impossible to do that. You only need to use the ones, which have a similar appearance as in the reference.
</aside>
The result already looks more natural now.
After comparing it to the reference I noticed that the color variation should be slightly brighter. So I changed the blending mode of the layer to “Screen” for a lightening effect and adjusted the opacity.
The discoloration of the top part now becomes more visible in comparison to the reference. I masked that area with black and changed the opacity to 50%.
The last layer is for the edge wear. Just like the discoloration, let’s take a look at the reference and define some key characteristics of the effect.
- The color of the edge wear is brighter than the discoloration. → Base color is almost white with a slightly red tint.
- Since it is a damaged area, the roughness value should be a lot higher than the rest. → Roughness value should be more than 0.5.
- For the same reason as top, the worn parts will have some negative height information. → Height information should be lower than 0.
- The edge wear doesn’t appear on the whole curvature. . → Some parts of the mask should be broken up.
-
Now we only need to create a mask for it. The “Metal Edge Wear” Generator is perfect for creating edge wear effect. Just because the name has the word “metal” in it, doesn’t mean that you can only use it for metallic object.
As you can notice, the curvature effect on the top is too strong, so we need to lower the curvature weight.
Before we move on to the next step, now is the right time to explain about the pro and con about adding the bump of the inside through texturing.
- Pro: We don’t have to spend the time going back to modeling phase, reexporting the highpoly and rebake it.
- Contra: The curvature information of the height detail will not be in the curvature map. Which means, every generator that rely on that that specific texture can’t apply the effects on those areas.
<aside>💡 Using the anchor point function in substance painter we can also let the generators take the curvature information of the bump areas into account. However it is more suitable to learn it in texturing II.
</aside>
There is no right or wrong here. It depends on your preference. In our case here, there are no visible edge wear in our reference anyway, so there is no need to go back to the modeling phase.
Our final step here is to break up the edge wear mask. We can do it through 2 ways:
- We painted the unwanted areas by hand.
- We use a grunge map on top which will be subtracted.
Again, there are no right or wrong here. It depends on what you prefer to do. With the first method you have more control over which parts you want to paint away, but you need to make it look natural.
With the second method, the effect appears natural really quickly, but you have less control over which areas should be black.
While browsing through the texture maps, I noticed that the color and roughness maps of the inside were monotonous. For a realistic art style we need color and roughness variations in order to make the textures appear more natural.
Since there are many art styles, it also means that there are different kinds of ways to approach texturing. Which is why it is important to learn the characteristics of the style and know how to recreate them in the texturing program. For an example, some stylized arts use a lot of gradients. And we can create that effect using the position generator or the gradient map.
*Insert stylized picture with gradient
Since we are pretty much done with the texturing, we need to check whether our color is PBR correct. It is a very simple process. All we need to do is drag and drop the PBR validate filter from the shelf to the top of the layers.
Green means it is PBR correct. Red means the color is either too bright or too low and the color needs to be adjusted accordingly.
The threshold of the filter is 30 sRGB as default. However we should set it to 50 sRGB. The first one means that the color should not be darker than 30 sRGB which is the darkest dark in the physcial world. 50 sRGB is almost the darkness of a charcoal. Since there is rarely any object that has a darker color than the charcoal, we should set the threshold to 50 sRGB.
Now let’s do a recap about the whole process. What we did can be simply put in 2 steps: Creating a fill layer and then a mask for it. The important part is the thought process. Before we start creating layers and masks, we should take a good look at the reference image first. Observe the details and find out what the characteristics of the new fill layer would be:
- What color does the detail have?
- Is it metallic?
- What roughness value would it be?
- Would it have height information?
After creating the fill layer accordingly, we need to find out how the detail is distributed. So we know how to create the mask for it:
- What is the shape of the detail? → Which grunge map should we use.
- Where does it appear? On the curvature, on the top half of the model, in the cavities etc.. → Which generator should be used.
Repeat the process for as many details as you can observe from the reference image. But is it the way we texture everything in game?
LIMITATIONS
There are some limitations if we texture everything uniquely. First of all being the time. It takes a lot of time for the whole process of creating highpoly, lowpoly, baking and texturing. That’s why we use trim sheets for a lot of props during the production. We only need to create a lowpoly and map the UVs to the textures. However it doesn’t mean that unique texturing is useless. Since it takes more time, it is more worthy to use this method on the important models such as guns or hero assets.
Second limitation is for creating large assets. In order for a giant model such as spaceship to have the target texel density, you will need more than one 8K textures, which is not performant at all. For this type of assets we use the large prop workflow.