Daniel Bauer shared a breakdown of the realistic Teeth model and subdermal shaders production in ZBrush, Toolbag, and Substance Painter.
Hello, my name is Daniel Bauer, and I’m a 3D artist specializing in organic modeling. I started my career in a small 2D animation studio where I discovered the magic of 3D modeling. My path led me to tasks like shading and modeling for CGI in the automotive field. In my free time, I developed a strong passion for organic modeling and followed it ever since.
During the anatomy studies, I found out that our teeth affect the way we are perceived by others. What started as a study soon went all the way to the project I want to present here.
The goal of this article is to share an insight into the way I approached the project and some helpful tips.
I started my project by collecting references on Google, Pinterest, and Youtube.
Nowadays you have the resources in abundance, and the difficult part is to filter this amount of information. I use PureRef to keep my resources organized and to stay focused. Such boards can include technical details like anatomy measurements or specular values and teeth aesthetics. I kept the board non-CGI for the start trying to get inspiration from the real world examples.
TIP: Store some “cross-polarized photos”. You can learn a lot by observing a pure color.
I used ZBrush to sculpt the main volumes. I kept it loose as I wanted the shapes to read from a distance. I often zoom out pretty far to check my model. The mesh went through many iterations until I got a satisfying result. You can also use ZBrush’s “see-through mode” and compare your sculpting to the 3D scans on Sketchfab.
Make sure that the teeth and root sizes are correct because the viewer can easily tell if the proportions are off. I stay on a low subdivision level for a very long time. The longer I work on personal projects, the more I understand how important this habit became.
TIP: Use the outline shader or a black material to constantly check your silhouettes.
I used the transpose line in ZBrush to measure every tooth and bring it up to the correct size. As some people struggle with ZBrush units, this is an instruction:
- Append a 1-Unit helper to your scene, GoZ it to a 3D software, scale it to 10mm and GoZ it back to ZBrush.
- Now drag out your Transpose Line from one cube side to the other and set your Scale to 1 Unit. You can now use the Transpose Line that reads the precise values.
I sculpted each tooth separately as this gives you full control over bakes in Toolbag or Substance Painter. Keeping each subtool separate allows you to stay flexible if you need to modify the teeth. When I understood how complex human teeth actually are this method guaranteed that I could listen to the feedback from other artists and address the problems with the shapes comfortably. The first pass had some details exaggerated and others missing:
TIP: Due to the nature of subdivisions your mesh will shrink when you switch back to SD Level 1. This led to an undesired effect as my teeth, gums, and blend mesh had to line up perfectly. I wrote a macro script that stored a morphtarget of the mesh before each subdivide command and restored its initial volume.
I use this macro script as my main subdivide command set to CTRL+D. You can download the script here.
After you’re done with your base sculpting it’s time to think about the topology. Good topology can support your sculpting, the specular flow, and animation.
A clean polyflow of the teeth and gums will aid the blendmesh to get all the complex shapes covered.
You always have to compromise between low poly count vs supporting edges. I aimed for a clean teeth silhouette on the very first SD level:
Here’re a couple of good resources on topology:
When I have finished the topology and sculpting I import the decimated meshes to Marmoset Toolbag. This helps to get an overall feeling on the appearance of your model under different lighting scenarios.
Use Toolbag or Keyshot to your advantage early on to find areas that you overlooked on the detailing phase. Seeing some results helps a lot to stay on track too.
Knowing that I wanted to present the model in a real-time environment I built a transition mesh to blend the teeth with the gums. Otherwise, the screen-space subsurface scattering would produce a harsh transition. I will cover how I raised the detail level of this blendmesh.
In ZBrush, you can draw a fine tube on the cavity areas to represent saliva deposits. We will use it for the baking purpose only. This way you have a snugly fitting concave blendmesh plus a normal map that resembles a convex shape. It will pay off in your real-time renderer as you will get nice speculars in the recessed areas as shown here:
You can import your meshes into 3ds Max or similar software solutions for unwrapping and texture layout. I wanted to keep a UDIM layout to have a production-ready model on different platforms. I GoZ my subtools to 3ds Max to set my cut seams, then followed by a “quick-Peel” and a pack operation. Then I GoZ back to ZBrush to use its powerful unwrapper (“use existing seems”). This is crucial if you want to export displacement maps from ZBrush.
TIP: You can learn a lot about unwrapping from Tim Bergholz.
Texture Painting & Displacement
After the unwrap you can load the model into Substance Painter to lay some paint down.
I like to use procedural and hand-painted masks to create albedo maps. Projecting cross-polarized photos seems tempting but restricts you when you want to change veins or blood vessels for another project. You can also learn a lot about color values and the tissue layers by crafting stuff yourself. It might be not the perfect albedo but will pay off in the long term.
I had Toolbag running all the time with my shaders in an early stage. As the reflective nature of the gums covers up the albedo information I exaggerated the colors:
To get the feel of a wet surface in Toolbag I authored the roughness map. It incorporates a lot of very subtle changes into different layers. I went back and forth for some time to get the result I wanted. Gingiva has a lot of variation in its appearance, so checking reference is important.
I used a slightly stronger roughness value for most recessed areas like pores but excluded the cavities in the teeth where you find lower roughness values. I kept adjusting it even while writing this article as I received some new feedback. I love to finish projects, but being self-critical and open-minded is essential to improve your skills.
TIP: Create a dark grey color across all your texture sets and set its blendmode to “replace” to instantly check your roughness map behavior under different light conditions.
- Opacity for the blendmesh
Select a separate shader for this texture set first. You will get perfect results with the “metal/rough-with-alpha-test” shader. Apply the “skin-shader” to the other texture sets.
Add an opacity channel to the “Texture Set Settings” and create a fill layer at the bottom of the layer stack with a neutral normal and opacity info set to zero.
Now you can start to paint the opacity mask on top (I used red color for visual feedback).
It took some time to get the perfect result but rushing through this phase would really lower the overall quality of the rendering.
TIP: you can export your mask via the texture set menu or just press the RMB on the mask stack and select “Export mask to file”.
I exported the displacement maps from ZBrush.
It has a neat feature that analyzes your substools and levels out the displacement map to cover all high and low values. I used the Multi Map Exporter to merge the separate subtools to their relating UV tile with these settings:
In Marmoset Toolbag, I created a shader for each texture set. This allowed me to use different shader setups for the tongue, teeth, and gums.
It’s important to set your scene scale to the correct value before you set up your SSS shaders and displacement. Toolbag offers a “Scale” and “Scale-Center” sliders, and I used them to emphasize the displacement effect:
TIP: The shortcut STRG+SHIFT+J activates Speedy Viewport which turns off demanding calculations.
- Teeth Shader
Toolbag has a nice subsurface shader that can give you great results if you support it with good maps. I used a detail normal map to add more variation to my baked normal map. Teeth have a translucent feeling by nature, and a good translucency map helps a lot to achieve that effect. I baked a thickness map in Substance Painter and modified it according to my needs.
This is my shader setup for the teeth:
I guess the most important thing in the teeth shader is the reflectivity model which I set to “Refractive”. The refractive index determines how much the path of light is bent or refracted when entering a material. It is crucial to give your materials the right look. After some research, I found out that dentin has an IOR of 1.540.
To emphasize the lower reflection values in recessed areas I added a cavity map to the shader and set the “specular cavity” slider to 0.4. I left the Diffuse Cavity Slider to zero as my Albedo map already had a red color fill embedded into the cavities.
A comparison between the refractive and specular reflection models:
TIP: Check the specular model explained by Joe Wilson and Lee Devonald:
- Gum Shader
The correct physical specular value for skin is about 0.028. That was a good starting point.
I went up to 0.07 for the gums. You should keep low values here, otherwise, the shader could get a metal effect. A slight Fresnel helps to sell the result.
Don’t go too far with the Fresnel values on wet materials as it may cause some issues on the surfaces facing away from the camera.
TIP: Here’re the techniques for Realistic Real-Time Skin Rendering.
- Saliva Shader
You can use different transparency modes in Toolbag to create juicy saliva.
I used Refraction with Dithering method for a perfect blend between the teeth and gums. These were the shader settings:
The result of the explained techniques:
- It is important to use resources that aren’t obvious at first. Scan data is valuable for learning anatomy.
- Take your time with the modeling phase and make sure your mesh reads well and has a strong underlying structure.
- You can follow the blogs that match your field of interest. Find like-minded people and connect with them!
This was a really fun project. It still has its “blemishes” but it was a great learning experience in anatomy and materials.
You can get a decimated model for your projects here.
Thanks for reading! I hope the article was helpful.
Daniel Bauer, 3D Artist
Water Stains Pack by Emil Skriver is a set of high-quality 4K 16-bit textures. In 3D software, the textures are very powerful when used as material masks or as gloss, normal/bump or metallic variation. In that way, the textures will add definition to your materials that react in a realistic way.