Subsurface

 

Sub-Surface Scattering (SSS) simulates the effect of light entering an object and scattering beneath its surface. Not all light reflects from a surface. Some of it will penetrate below the surface of an illuminated object. There it will be absorbed by the material and scattered internally. Some of this scattered light will make its way back out of the surface and become visible to the camera. This is known as 'sub-surface scattering' or 'SSS.' SSS is necessary for the realistic rendering of materials such as marble, skin, leaves, wax, and milk. The SSS component in this shader is calculated using a brute-force raytracing method.

You must ensure that the geometry normals are pointing in the correct direction, otherwise, SSS will not render correctly.

 

SSS is important when replicating realistic materials such as plastics, for example:

 

Weight

The amount of subsurface scattering.

Color

The color used to determine the subsurface scattering effect. For example, replicating a skin material would mean setting this to a fleshy color.

 

Skin Color
Generally, you would connect a color texture map to the Subsurface Color, and set the subsurface radius to a value appropriate for skin (mostly a higher value for the red channel assuming red mostly comes from blood). The radius can also be textured if desired. Veins would be part of the color texture map, and that not only affects the color but also how the subsurface scattering behaves.
Standard Surface has a mix between Base and SSS. It is your choice if you want to use diffuse with skin. It can be used to e.g. mix in a different texture with a mask for e.g. face paint, or to vary sharpness by connecting the same texture to both the Base Color and Subsurface Color and changing the blend factor.


Radius

The radius of the area each sample affects. Higher values will smooth the appearance of the subsurface scattering. Results will vary depending on the scale of the object in your scene. Arnold will take into account the shape and thickness of the object being lit. If it is thin enough, the object will often see the light scattering out the back side, depending on the radius value (see example images below):

The lighter the color, the more light is scattered. A value of 0 will produce no scattering effect: 

Increasing the radius value can radically change the appearance of the material, from looking like leather to marble. SSS is very scale dependent. You will need to adjust the radius multiplier depending on the size of your model. If you were to render using the default SSS settings, you might get something that does not look correct. Alternatively, adjusting the scene scale can have similar results.

Instead of distributing all of the colors with the same amount, you can also choose different radius values for each of the RGB colors. For example, a material like clay or skin should have a higher red radius than green and blue.

When rendering skin, you should use a value like 1.0, 0.35, 0.2, indicating that red should scatter deepest and green and blue less. This would replace the three-layer workflow (deep, mid and shallow layers) for skin where you would make the deep layer red to indicate that deep should scatter with a larger radius. Setting scatter_radius.R to a larger value would correspond to that.

The images below show the effect when increasing the red color of the radius. Notice the colored 'fringing' effect around the edges of the circles. The same effect occurs when Gaussian blurring the red channel of the source image in a compositing package.

Scale

Scales the amount of subsurface scattering. Multiplies the SSS Radius Color.

If the scene is in meters, then SSS Scale can be set to 0.01 to specify the SSS Radius in centimeters. For example for skin, the SSS Radius could be 0.37cm (red) 0.14cm (green) 0.07cm (blue).

 

SSS Between Objects

It is possible to tag multiple objects as belonging to the same SSS 'set' so that illumination will blur across object boundaries. A common use-case might be blurring between teeth and gum geometry. It is enabled by adding the constant STRING userdata sss_setname to the same value on the objects in the set.

  • No labels