PxrSkin

PxrSkin

The PxrSkin shader utilizes the advances in physically-based subsurface scattering combined with efficient multiple importance sampling techniques for path tracing efficiency and low noise.

The subsurface scattering uses a close approximation to the ground-truth solution as determined by Monte-Carlo simulation. It includes both single- and multi-scattering. The advantage of this BSSRDF model over the more common dipole diffusion BSSRDF model is that it better represents high frequency details, whereas the dipole model often suffers from an overly smooth "waxy" look. The skin color defaults to smooth caucasian skin color but is most often specified by a texture map.

The subsurface scattering is divided into three components: near, mid, and far. It is common to assign a different color for each component, for example for skin one would choose pale yellowish pink for near-range color, pink for mid-range color, and deep red for far-range color.

In addition to subsurface scattering, the PxrSkin shader also has specular/glossy reflection to represent surface reflection from skin oils and sweat. The image at right is an example of a head rendered with the PxrSkin shader (thanks to Lee Perry-Smith for making this data set freely available). This material is deprecated and succeeded by PxrLMSubsurface.

images/headSSS.jpg

PxrSkin is not just for skin. It is a good basis for any material that has similar basic characteristics, e.g. wax, marble, onyx, or jade.

  • NOTE:

    There is also a simpler subsurface scattering shader called PxrSubsurface that has a different parameterization of the subsurface scattering parameters and does not have specular/glossy reflection from the surface.

Parameters

nearColor

The diffuse color for short-range subsurface scattering. The default value is representative for pale caucasian skin. The near color is combined with the mid and far Colors, based on their corresponding weight and length parameters, to compute the subsurface result. Note that color * weight is what is typically called "albedo", but is represented here as separate color and weight for added flexibility.

Default: 1.0 0.9 0.75

images/pxrSkin/pxrSkinNearColors.jpg

Different nearColors: pink as skin and white as marble. (Here midWeight and farWeight are set to 0 so only the nearColor shows.)

midColor

The diffuse color for mid-range subsurface scattering.

Default: 0.95 0.7 0.55


farColor

The diffuse color for far-range subsurface scattering.

Default: 0.7 0.1 0.1


nearWeight

A multiplier on nearColor (for short-range subsurface scattering). Convenient for brightening or dimming nearColor colors from e.g. a texture.

Default: 0.4


midWeight

A multiplier on midColor (for mid-range subsurface scattering). Convenient for brightening or dimming midColor colors from e.g. a texture.

Default: 0.3


farWeight

A multiplier on farColor (for far-range subsurface scattering). Convenient for brightening or dimming farColor colors from e.g. a texture.

Default: 0.9


nearLength (previously "Diffuse Mean Free Path")

Determines the distance that light corresponding to the near color is scattered inside an object. It determines how far the short-range part of the subsurface scattering reaches (and how smooth it is).

Default: 0.8

images/pxrSkin/pxrSkinNearLengths.jpg

Different nearLength values determine how far the subsurface scattering spreads. Left is short (1.0) and right is longer (3.0).

midLength (previously "Diffuse Mean Free Path")

Determines the distance that light corresponding to the mid color is scattered inside an object. It determines how far the mid-range part of the subsurface scattering spreads (and how smooth it is).

Default: 2.5


farLength (previously "Diffuse Mean Free Path")

Determines the distance that light corresponding to the far color is scattered inside an object. It determines how far the far-range part of the subsurface scattering spreads (and how smooth it is).

Default: 5.0


specular

The amount of specular reflection. The default value of 0.5 is reasonable for skin under normal conditions. Higher values are needed for wet, sweaty, or greasy skin; lower values can be used for skin covered with e.g. make-up powder, or dust, like from traipsing about in a post-apocalyptic wasteland.

Default: 0.5

images/pxrSkin/pxrSkinSpeculars.jpg

Different specular values: left is 0.0 and right is 1.0

roughness

Surface roughness determines the width of the specular reflection. Larger values cause wider specular reflections.

Default: 0.5

Range: 0 to 1


unitLength

A multiplier on the length parameters. Length is often measured in millimeters. If the scene is modeled in some other scale, the unit length should be set accordingly. The default value of 0.1 is appropriate for scenes that have been modeled in centimeters and have Lengths measured in millimeters.

Default: 0.1


indirectAtSss

Compute indirect illumination at subsurface illumination samples. When "true", indirect illumination can be the source of subsurface scattering. This effect is often subtle and due to its extra cost defaults to "off".

Default: 0


bumpNormal

An optional connection point for bumped normals. See PxrBump, PxrBumpMap, or PxrNormalMap.

Default: 0. 0. 0.


continuationRays Trace subsurface continuation rays. When 1 (on), subsurface scattering can be scattering from across surface creases and also from other nearby objects. But internal blockers (such as bone within a finger) are ignored. When 0 (off), internal blockers are taken into account but there is no subsurface scattering across surface creases or from other objects. Turning subsurface continuation rays on can increase noise or render time. The default is 0 (off).

The figure below illustrates how the subsurface color is computed depending on the distance between the surface entry and exit points (i.e. subsurface scattering distance). First the distance is used to evaluate the bssrdf profile (the gray-scale curve in the figure); this gives the intensity of the subsurface scattering. Then that intensity is multiplied by a color that is a mix of the near, mid, and far color - determined by the scattering distance as shown by the yellow, orange, and red areas in the figure.

Note that nearColor is multiplied by nearWeight, and similar for mid and far; this makes it simple to brighten or darken an input color texture.

Also note that the total subsurface color is guaranteed to be a mix of nearColor, midColor, and farColor. For example, if all three colors have a brighter red component than blue and green, the total subsurface color will always be more red than blue and green, no matter what the scattering lengths are or what the surface geometry is.

images/bssrdfColorCurves.png