Greetings, everyone! This article will show you how I approach creating faces for real-time characters and present them using Marmoset Toolbag 3. I hope this article helps those who are looking to learn how to create skin materials inside Toolbag.
The focus of the article is aimed towards texturing and setting up shaders, but there are a few things I want to cover beforehand which I think help a lot in the final result.
I start sculpting using a custom made base mesh which has correct topology and UV’s that can be used for the low poly mesh. This cuts down a lot of time. The sculpting process is straightforward; find good reference, have a strong foundation in anatomy and go crazy until it looks good.
Lately, I’ve been using texturing.xyz for my pore details. Sculpting pores by hand (dragging alpha) is easier and it doesn’t make much of a difference for games/ real-time character creation unless you zoom in real close. The choice is yours.
Tip: Adding subtle noise in skin helps to breakup the “perfect” feeling and makes it look more organic.
The texture maps I used were:
Normal, Detail Normal, Detail Weight, Roughness (inverted Gloss), Albedo, Translucency, AO, Cavity, Noise, Specular (Optional) and Scatter (Optional).
Albedo: Albedo is color information. For this project, I projected albedo data from texturing.xyz. Below is my process for how I projected my albedo map. Another option to achieve a similar result would be hand painting your textures (Magdalena Dadela’s GDC tutorial demonstrates this really well). While hand painting is fun, it’s more time consuming compared to working with scan data.
One useful tip to help enhance the feeling of subsurface scattering in your albedo map is to paint veins and redness around high blood flow areas like the nose, ears and cheeks. Make sure to keep the color shifts subtle. Multiplying your cavity map down as a red color helps fake the subsurface effect and helps align the pores in both the normal and albedo maps.
Cavity: Cavity maps can be used in multiple maps, such as Albedo, Specular and Roughness. It’s simply a black and white map where the pores are completely black. Marmoset have added Cavity maps to Toolbag 3’s baker which works really well. The method I personally like to use is extracting cavity detail from ZBrush since it’s faster than baking. However, for this you’ll need to have the same UV’s for both low and high poly meshes.
In ZBrush, fill your mesh with a pure white color then go to Tools > Masking > Mask by Cavity. The default values should work just fine. If not, play with the curve profile to get better results. Lower the blur values a bit, since ZBrush’s default values are too intense. You can change this under Preference > Transpose > Mask blur strength. Invert the mask and fill it with black, create a texture and export.
Normal: Bake down your high poly mesh onto the low poly mesh.
Translucency: This defines how much light scatters through the surface. Brighter values on the map define thinner areas such as the ears, tip of the nose, nostrils, eyelids and lips. The map can be derived by inverting the thickness map baked from the high poly. I tweak the nose area on the map to make it more intense and give it a more fleshy look.
Roughness: Personally, I feel this is the most artistic map in terms of how they’re constructed. Every artist has their own methods, but the basic principles remain the same.
- Have a base grey value that defines how rough/glossy the face is in general.
- Paint different values in specific areas of the face that are rougher or smoother.
- Pore details should be rougher, they shouldn’t appear shiny in engine.
- Have big breakups in value which are really subtle. This isn’t realistic, but it looks good when the light moves.
- Paint different roughness values for scars, wounds, dirt, sweat, etc.
1 and 2 are the major points. I’ve seen people only use 1 for stylized faces. 1, 2 and 3 work really well and 4 is an experimental one I’ve seen people do, but it looks good when lights move. 5 is subjective to the project you’re working on. And this is what I meant by the Roughness being the most artistic map, you use your own creative judgements and make it look good.
Below is an example of how I usually construct my roughness maps. This map used all the methods above and the new face was created with A and B. The construction of Roughness maps vary from project to project. In Toolbag, a value of 0.45 Roughness value works well as a starting point.
Scatter: Scatter maps describe the color which bleeds at the transition point from light to shadow. A flat peach color works pretty well for realistic skin, and it can be obtained by fully saturating the albedo map. The texturing.xyz data I used is extracted from the subsurface value of skin, so saturating that gave me realistic values.
Detail Normal: This tiny, tileable normal map helps make your textures look more detailed than they actually are. Substance Painter includes a few detail maps in their library that can be imported into Toolbag. For this project, I used Skin_bumpy. If you don’t own Substance Painter, you can find a good detail map by Yuri Alexander available for download from Marmoset’s Character Setup page.
Detail Weight: This is a black and white map which determines where the detail normal map will be applied. Black being the place where there is no effect. The lips have specific pore information, so you don’t want tiled pores there. You can have some of this applied to the tip of the nose and the bottom of the eyelids.
Noise: This map is used to help the fuzz look better.
Toolbag 3 handles skin shading like a champ. The material is easy to construct and looks amazing. There are no exact values for skin that make it look realistic as it varies from project to project. With that said, there are a few values that work really well as a starting point.
- Specular: 0.027
- Roughness: 0.45
Before starting anything in Toolbag, make sure the scene scale is properly set. Use Show Scale Reference to ask a gentleman for help and match the scene scale. Below is a demo of how I set my up skin material inside Toolbag.
There are three important aspects to keep in mind for skin shading:
- Subsurface Scattering
- Global Illumination
All of these components are key to setting up a good skin shader. A common problem for skin in CG is the lack of light bounceback from different parts of the skin. GI helps to achieve that effect and gets rid of the AO created by the engine around the corners of the nose, lips and fat above the eyelids. It also helps with translucency.
AO helps ground the eyeball on the face. A high strength setting and small size generally works. For GI, start with a low brightness and adjust upwards. You want to get rid of the extra AO and darkness around the eyes, corners of the nose and where lips meet. Make sure not to make the GI too intense, as it makes the skin look emissive.
SSS in Marmoset is composed of Scatter Depth and Translucency. Scatter Depth describes how fleshy or waxy the surface is. A flat peach color works fine for realistic skin. You should look for a subtle transition from your shadow areas to skin. Translucency defines how much light scatters through the surface. Place a light behind the ears and the side of the nose and tweak the values that work for your scene. The effect should be subtle with light passing through the skin.
A specular value of 0.027 is a good start for skin. Skin has two specular layers instead of one, which makes for better rendering. The Secondary Reflection helps achieve extra spec and gloss around the highlights to mimic the oily surface of the skin (Image 01).
Adding a cavity map helps remove specular reflections inside pores non-destructively. It can be baked into the specular map, but having a slider is much more flexible. It also helps salvage any pore details that are blurred by the SSS (Image 02).
Skin is all about subtleties. Find good references and try your best to match them while making sure it looks good under every lighting condition.
The window to the soul.
One thing I care a lot about and try to constantly improve is eyes and how the eyelids interact with the eyeball. Make sure they are thick and hugging the eyeballs in both the high and low poly meshes. This helps make the eyeball feel more integrated.
Marmoset have recently added Refraction to Toolbag, but it does break on occasion and is not as complex as Unreal’s (Unreal has the prettiest CG eyes I’ve seen yet). But don’t sweat it, I have you covered. There’s a simple yet effective way to make realistic eyes in Toolbag. The method was originally developed by Peter Zoppi in his tutorial for eye creation, which I would highly recommend getting if you want more detailed instructions.
Geometry and Baking
The best way to fake refraction is to bake the geometry of the eyeball. To do so, make sure your low poly has a cornea bulge that’s duplicated and convexed inwards to form the pupil. Smooth the high poly mesh and bake it down to the low poly. The cornea and eyeball are part of the same low poly mesh and share the same UVs, but they will have different maps.
After baking, the process becomes straightforward and you can texture the eye however you want. One thing that will help make your refraction better is adding a parallax map. It’s a flat white map and a black colored pupil with gradient borders.
- Eyeball Normal
- Eyeball Gloss
- Eyeball Albedo
- Eyeball Spec
- Cornea Normal
The normal map for the eyeball should have the iris details and the albedo should include the color of the iris, eyeballs and the veins. The normal information of the veins should come from the cornea’s normal map with noise applied to give it a more wet look. However, make sure not to include any noise in the in the cornea bulge. Specular and gloss maps vary from project to project.
Tip: I’ve seen people use Photoshop to enhance the contrast in the eyes on the opposite side of where the light is hitting the eyes. The same effect can be achieve using secondary reflection. It can make eyes more attractive, but it can look overly stylized. Use your own judgement and apply it if it works for your project.
Lashes and Wet Line
The lashes are hair cards that are placed by hand and the wet line is a mesh blending the eyelid and the eyeball together with additive transparency applied. Setting the reflection to Anisotropic instead of GGX helps sell the effect. Change the direction so the highlight follows the direction of the geometry when the light moves. The wet line is something I’m still experimenting with and I haven’t found a good medium which works in every situation.
Lashes Occluding the Spec
While writing this article, I realized something was missing from my eye setup. It’s a minor change that makes a major difference; lashes and lids occluding the spec in the eyes. This is a common problem for real-time rendering, as the lashes are composed of cards and neither GI nor AO help to achieve this effect. Again, don’t sweat it, I have you covered. It does feel like something might break when the eyes are animated, but for still images, this works fine.
Lighting and Presentation
A skill I’ve neglected, and now I regret it. You can create an awesome sculpt, perfect texture maps, but if you’re not able to showcase your model properly, none of those things are going to matter. Although I’m training myself in this area, lighting is still my weakest link. If you’re like me and blank during the lighting process, I have a lighting setup for you which works great for portrait presentation.
Nothing is perfect in real life. Adding imperfections helps sell the believability of your character. For this project, I wanted a vignette effect and to rotate my camera in the Z axis by 2-3 degrees to make it look straight after by manually moving it.
Adding Bloom and Depth of Field can also add realism to your scene, while Chromatic Aberration can mimic the effect of a camera shot. Fog can be added to give the viewport space a sense of depth. Whatever you do, make sure it’s done with taste and compliments your piece rather than take away from it.
Tip: Renders will look different across multiple screens. My monitors have different colors and my renders generally look different on each screen. Changing the Tone Mapping setting to Filmic and tweaking the Exposure to a value of 2.2 is generally a good point for my renders to look decent on a wide variety of monitors .
Thanks to the people at Marmoset for giving me the opportunity to write this article. Thanks to the people who read it and made it this far since the article is much longer than what I wanted it to be. I hope it helps 🙂