The first and most important step in every organic or hard surface asset is finding good reference. Before I paint my first stroke I will spend at least one or two hours browsing multiple sources and looking at images. Although looking at other people’s work is a great way to find reference and to come up with ideas, I always prefer to base my details off of real photographs and use that as my main point of reference. I will then have secondary images that can be CG reference to develop my ideas further.
I always start working from the grayscale to color. What that means, is that I will start with the bump map first, move on to the roughness map and then I will paint the color map last. I view that as a natural progression of the model creation. In essence, the bump map is just an extension of the sculpt. All the detail that you are not able to include in the model due to lack of polygon resolution you will transfer to the bump map.
In the same way, the roughness map is an extension of the bump map. What the roughness map represents is purely micro detail and imperfections that scatter the light rays on a micro level. In other words, the roughness map is just more detail that you are not able to include in the bump map, and since we are not able to brute force that light scatter, we have a separate component which fakes and controls that.
When I have a first pass for the bump and roughness, I will move on to the color map, adding detail and doing a additional passes for my bump and roughness.
I will try to get something quick as soon as possible and start putting it all together in a shader in my chosen render engine. I work with VRay, Arnold and Renderman and regularly switch between the three to compare the new features and functionalities. They all have their advantages, but in essence it doesn’t matter which render engine you use, as they are all based on the same algorithms and studies. If have a solid understanding, you will be able to get exactly the same render using the same lighting in all engines.
For the bump on my elf character, I used one of the TexturingXYZ female face scans which gave me an incredible and clean result. I projected the 3 channels combined into a single RGB map, as outlined on their official website, using a soft brush and the lattice tool to fit features into place. I filled in the missing areas with parts of the forehead or cheeks.
Since doing this project I have updated my workflow and I no longer use a full face to project on my mesh, but instead I create my own square alphas extracted from different areas of the face scan that I use as stamps. This way you can create much more interesting face detail because you retain more control.
For the roughness map, it is very important that you have a lot of breakup in the values. This, along with the bump and displacement breakup, will make the surface look more realistic. If you fail to introduce enough breakup in all the bump roughness and displacement components you risk having your skin looking flat and plastic-y.
I achieve the roughness breakup by mixing together multiple procedural noises and grunge patterns.
Another important step in the roughness map is to incorporate the pore and wrinkle information from the bump map. You want to have them more rough than the rest of the skin as they don’t accumulate as much oil. I do this by using the graded version of the bump map as a mask. I grade the bump using a levels node and inverting the final result. To have the pores as a value of one.
There are many polarized resources online without highlight and shadow information. These are great for producing realistic skin color,but I rarely go for that option. Instead, I prefer to use procedurals and hand painting to build the color from scratch. The main reason is that this gives me a lot more control on the feature of the skin.
Additionally, when you paint the skin color yourself you get a lot more solid understanding for the face colors and you begin to see features to which you were previously oblivious.
There are many resources online where you can study skin colors. Some of the best resources are traditional portrait painters.
A very good guideline is to search for “face color zones” online and you will get an idea about how color is distributed on the face.
I will always start with a procedural base. This allows me to get ideas and see how things look on my model. This will involve multiple tileables and noise patterns based on my skin reference. When doing skin, it is easy to overdo the effects, so I will make sure that these patterns are very subtle.
I usually try to mix a few multiple frequency mottle patterns and red, green, yellow, blue and purple colors based on my reference. All of that is also mixed with hand painted colors based on the face color zones. On top of that I will layer red and blue blood vessels, a separate layer for bigger veins, freckles and spots. A very important detail is to paint a lot of color variation under the eyes based on your reference which will vary a bit from person to person.
I also include the pore and wrinkle detail from the bump and the sculpt in my color map. To achieve that I will use the same pore mask as I did in the roughness maps mixed with a cavity map from ZBrush. Depending on the amount of wrinkles, age of the character and features of the skin, the cavity map might not be needed. For the elf character I didn’t use one, but for older characters I usually do.
Next I will move on to Oily map, which is a simple grayscale mask that will define the oily areas. In this map White will represent oily areas and black will represent the rest.
A good idea is to have an SSS map that will define where your. Similar to the previous one white will represent more translucent areas and black means less.
A big problem with creating the shader for your character is that you might focus on a certain camera angle and then when you zoom in or zoom out, you realize that the detail that you have been working on for so long doesn’t hold up. That‘s why a good idea is to work on your shader from multiple distance, and to add different frequency details. This lack of detail in certain distance from the camera might come both from your sculpt and textures, so having a good understanding for both will help you add detail where it is needed.
Sometimes a quick solution to the problem is simply adding multiple frequency noises in your sculpt or bump.
A quick thing that I always do is I mix a fractal noise with my displacement in the shader. Depending on your render engine this might be more or less difficult to achieve. Alternatively you can also bake a fractal noise in your sculpt with your displacement map.
The reason I chose to do it in the shader is because I can always add it later as an extra level of breakup and I can control the scale before every render.
I have found that this gives me a great boost of realism as it provides a very subtle reflection breakup and irregular shadows when the light source is at grazing angle.
When doing hard surface work, I do things a lot more procedurally with less painting by hand compared to my organic work. Most often I will start blocking out the materials as they are layered in real life and try to get an interesting look as far as I can by just using AO, curvature, procedurals, tileables, texture scattering etc. Like my organic workflow I will start putting together as many patterns as possible to get an idea about how they sit on my model and pick out the best. I will store there procedurals and images as a library for this project for quick access.
The reason you can get away with using more procedurals for hard surface models is just the nature of the way features form on metals and plastics. If you take a surface and start breaking it down you will notice that everything can be represented by patterns, mixed with additional effects.
Depending on the complexity of the shader, I might paint only black and white masks and build the textures with the shader purely in the render engine. The upside to that technique is that when you tile a texture in the shader, you retain the full resolution of the tileable and you end up retaining a lot more detail, when you want to do a close up or increase your render resolution
Like the organic texturing workflow, I will start by blocking out my basic bump and roughness before moving on to the color. That way I can get the correct surface response to the light of the object which will help me with the color and additional details. These steps will require a lot of back and forth between my texturing package and my render engine, as I would start getting my paint values from the flat shader colors.
Once I have blocked out the basic look of the object I will start making it more interesting by adding color variation, dirt, oil, dust, scratches etc.
The robot was a freelance project that I did along with the very talented Ran Manolov, who did all the modelling and sculpting. It was an unusual asset, because it was not intended to be a finished production ready asset, but it was only meant to be used as a concept. What this means is that the robot was sculpted in ZBrush with alphas, and decimated to end up with a model that has retained the detail but is also manageable in maya. The decimated model was unwrapped in ZBrush using UV Master.
Because I was working with a model that did not have any topology and the UVs were basic, I needed to utilise a procedural workflow as much as possible.
I blocked out the color map for the robot as it would appear perfectly clean. The only thing I added was color variation in the paint and metal and plastic.
For the dirt and dust layers I decided to have separate shaders that I layered on top in the render engine.
I painted a black and white mask for the dirt shader and the dust I set up entirely in VRay due to the engine’s powerful ambient occlusion capabilities.
The main shaders are fairly simple painted metal, bare metal and plastic for which I matched the specular lobe to my reference as close as possible by adjusting the bump surface breakup and roughness.
The dirt is the first layer that I added on top. It was a simple dark shader with more roughness, controlled by the mask I painted in Mari.
The dust is the second layer I added and it is created by mixing the VRayDirt and a few tileable textures.
Substance Painter Workflow Takeover
In the past year I have started using Substance Painter in my workflows, up to the point where it is now my primary tool for texturing, even for big hero assets.
The way I manage big assets in Substance is by splitting them in logical pieces, for example by materials. I would aim to have no more than 20 UDIMs for each group of the model. Once I texture every group I will import the maps into a master Mari archive where I put everything together and asses how it works as a single piece. Any overall color grading or value adjustments I will do in this Mari archive.
Initially I started using it for hard surface models, as it seamlessly blends with what I was already doing in Mari, but it the end result is achieved a lot more fluidly.
Recently I have even started texturing characters in Substance Painter as well, but this workflow is still limited due to the lack of full UDIM support. The main thing which helps me with the character texturing is by hiding the seams/UDIM borders in places that are rarely visible.
I will always aim get a good procedural base for all my organic and hard surface assets. I believe that it is crucial to have a non-destructive workflow, especially when you are working in a big production studio, where artists constantly get feedback and need to keep altering their work. The main difference between the organic and hard surface workflows is that with organic you can only take it to a certain point, as the complexity of the patterns and areas will eventually require hand painting. That’s why I find organic texturing a lot more interesting, complex and challenging.