Back to Resources

Overview

Subsurface scattering is an important effect in rendering many types of organic surfaces. When light is able to penetrate the outer layer of a surface, scattering occurs, causing a softening of the diffuse shading. In complex surfaces like human skin, different depths scatter different colors, which can be seen at the shadow boundary

Light may also be able to be seen through the object, as you would see when a human ear is lit from behind. The deeper the light travels, typically, the more saturated it is. The SSS shader in Maya only works for objects with volume, so if you are trying to create translucent effects in thin objects, like leaves, or paper, see my tutorial on translucency.

Some examples of materials or subjects that would benefit from SSS are: Skin Food: Cheese, grapes, Seashells Thin plastic

The most versatile SSS shader in Maya is the misss_fast_skin_maya Below is a flowchart of how all the elements in the shader work together, which I will explain:

It is important to note, that the trickiness in developing this SSS shader, is that the final color of the material is the result of the adding up of several diffuse layers (Yellow).

I’ll go over the methodology for developing human skin first, but first an explanation of the different options.

The scatter radius for the SSS layers is in millimeters, as is the back scatter radius. It is likely that the default values for the shader are way too high, resulting in very grainy shading quality. If you still have graininess after lowering the radius values, the samples for the lightmap can be increased, preferably in powers of 2

The scale conversion number is designed to allow the user to be able to port the shader with tuned values to another scene/object where the scale of the target object is different that the one which the shader was originally created. All of the radius/depth values are divided by this number.

When adjusting the shader, it is best to first work on each layer separately by turning the other weights off.

Human Skin

For human skin (Caucasian), the pure diffuse component is generally near white, with some tint of blue, and has a very low weight. It represents the very outer layer of the epidermis.

The Epidermal layer is usually a tan/orange color, closer to the skin color you can actually see, but deeper.

The Subdermal layer is a deeper reddish color, representing the fleshy and fatty layer of skin. Its radius should be slightly larger than the epidermal.

The Back Scatter represents when light is passing through to the other side of the surface. It should be a very saturated red color. The radius and depth values are typically very similar, or the same.

For all of the radius/depth values, start with a low number, and work slowly from there. For realistic characters, SSS is a subtle effect, but makes a big difference when used properly.

Remember that the Shader is not blurring the textures, but rather blurring the light over the surface. Deeper layers are probably going to be blurrier, which you would do in your image-editing program.

Texture maps

The skin shader has many possibilities for texture inputs, and it can be confusing figuring out which ones to plug textures into. Typically, one would paint textures for at least the diffuse, epidermal and subdermal. Remember that these layers are being added together, so when thinking about the texture, you would want to paint areas black where you don’t want to there to be any contribution from that layer. This is easier than having to paint a separate map for the weight of that layer.

I have found it easier in some cases, to use the same map for each of the skin layers. In Hypershade I will use remapHSV nodes to adjust the color of the map accordingly for each layer. Depending on the level of realism and control, this may be a good alternative to having many file textures. Additionally, I’ve usually found that the backscatter color work fine as a solid color.

For the radius values, texture maps can also be used. This can be done by first determining what range of radius values you need for that layer, and where on the surface the differences appear. Paint a grayscale map, where black coincides where the lowest radius values lie, and white where the highest is. The difference in radius values for a particular layer may be very small, but by painting from solid black to solid white will make easier to get those exact values. In Hypershade, plug the texture into a fit range node. It is only necessary here to hook up one of the channels, like red. Set the old min/max to 0 and 1, and set the new min/max to the desired radius values. Now plug that output (make sure you are only using the one channel) into the radius input for the skin shader.

Specularity

Specularity is the final key to a believable skin texture. The skin shader has built in two levels of specular. One is usually shinier, while the other fairly dull. The Overall Speculartiy controls the total amount of specular. The edge weight adds to the amount of specular at glancing angles. This is important for realistic shading in many types of surfaces.

The built in reflection is difficult to control. There are no settings for sampling rate, and you cannot achieve full glosiness, which would be useful for wet skin. If you are satisfied with the shader's result, use it, but I recommend using a more powerful specular/reflection shader and combining it with the skin shader. To do this, I suggest using mia_material_x. Create an Add node, found in utilities. Make sure the diffuse is disabled in material_x shader, and tune the reflection setting to your liking. Plug the result of this shader into one of the Add nodes 3d slots. Plug the outColor of the skin shader int a second input. Now create a surface shader, and plug the output of the Add node into the color input. Assign this to the object.

Before you render, there is one last important step. When you create a misss shader, it automatically creates the MentalRay texture and the light map, and connects it to the Shading Group Node that is assigned to the object. You must make sure that this same light map is connected the Shading Group node that is now attached to the object. To do this, first graph input/ouputs of the new surface shader. Shift select the MR texture which is connected to the skin shader and graph the inputs/outputs again. Go to the surface shader's SG node, which is the node it is plugged into, and middle mouse drag the light map node into the light map slot in the attribute editor