Hair2

You can also use the Hair2 material to render hair, fur and curves. It is more physically-based than the previous Hair material, and is currently considered experimental. The appearance of a hair volume is the result of complex light paths, with light often bouncing through many hairs before exiting the hair volume. It is thus advisable to allow a high number of bounces, or use multiple scattering approximation to avoid energy loss.

Tweak the following sliders to see the aspect of each lighting contribution (note that these are not parameters of the material but intensities of the front, back and environment lights):

Optical properties of hair fibers

IOR

Optically, a hair fiber is basically a tinted and frosted glass cylinder. The physical index of refraction is 1.55, but you may experience with different values for artistic purposes. With a low index of refraction, light deviation from refraction will be very low, leading to a uniform aspect; on the contrary, higher indices of refraction will deviate light more across the fiber's diameter, and as a result will let more light in from outside the hair volume.

Roughness

Roughness is controlled though two distinct parameters. Longitudinal Roughness controls roughness along the fiber's axis, while Azimuthal Roughness controls roughness perpendicular the fiber's axis.

Default values (0.3/0.3) are typical of human hair. Animal fur usually has higher roughness values (particularly azimuthal roughness).

Scales Angle

A hair fiber is not a constant cylinder, but consists of slightly tilted scales layering on top of each other from root to tip. This parameter lets you control the angle of these scales. You may use it to shift the primary highlights off the ideal specular direction.

Color

You can specify the hair color in many ways :

  • Using the Albedo attribute, a simple RGB color.
  • Using the Melanin attributes to control the hair melanin density, to get plausible human hair colors.
  • Using the Absorption attribute with mesured RGB absorption values.

You can also :

  • Modulate the color from the tip to the root using the Tip/Root Color attributes.
  • Randomize the hair color per clump or per fibers using the Clump HSV and Fiber HSV attributes.
  • Add mutant hairs, like white hairs, using the Mutant attributes.

All of these controls are provided as a convenience and are internally combined together to compute the actual absorption coefficient. Most of the illustration pictures below use a base hair color defined through albedo (0.2938, 0.141, 0.0192).

Albedo Color

Albedo Color controls the general appearance of the hair. Light scattering and hue shifting may result in slightly different colors, so this control is an approximation of the resulting color.

(0.2938, 0.141, 0.0192) (0.4, 0.0856, 0.0027) (0.84, 0.6328, 0.2444) (1, 1, 1)
Different albedo settings, from brown to white.

Root/Tip Color Modulation

Root Color is multiplied to the Albedo at the root of the fiber. Conversely, Tip Color is multiplied to the Albedo at the tip of the fiber. White leaves the color unaffected.


Root Color = green and red. Move mouse over images to compare with default (Root Color = white).


Tip Color = green and red. Move mouse over images to compare with default (Tip Color = white).

Color Shape moves the blending area between Root Color and Tip Color towards the fibers root or tip. Lower values result in blending closer to the root, higher values result in blending closer to the tip.

Clump Hue/Saturation/Value Randomization

Clump HSV -> Hue Random controls the amplitude of the hue noise per clump. This parameter can take positive or negative values, depending on whether you want the hue to shift towards warm or cold colors. If you want the hue shift to be symmetric around the target albedo, compensate the hue shift with the Uniform HSV -> Hue parameter (e.g. if you set Clump Hue to 0.4, set Uniform Hue to -0.2 to preserve the average color).

Clump HSV -> Value Random controls the amplitude of the value noise.

Clump HSV -> Random Scale controls the noise frequency for clumps hue and value randoms. Lower values result in smooth varations, higher values result in rapid variations.

The clump random is based on the scalp UV texture coordinates, thus the actual noise frequency scaling is dependent of the UV layout.

Fiber Hue/Saturation/Value Randomization

Fiber HSV -> Hue Random controls the amplitude of the hue noise per fiber. This parameter can take positive or negative values, depending on whether you want the hue to shift towards warm or cold colors. If you want the hue shift to be symmetric around the target albedo, compensate the hue shift with the Uniform HSV -> Hue parameter (e.g. if you set Clump Hue to 0.4, set Uniform Hue to -0.2 to preserve the average color).

Fiber HSV -> Value Random controls the amplitude of the value noise per fiber.

Fiber Mutant Color

Mutant -> Color controls the color of mutant fibers. Use this to create random white hair fibers, for instance.


Mutant -> Color as white, red and green. Mutant Ratio is 0.1 for these images. Move mouse over images to compare with base (no mutants).

Mutant -> Ratio controls the ratio of mutant fibers :

  • Mutant -> Ratio = 0 results in no mutated fibers,
  • Mutant -> Ratio = 0.5 results in half mutated fibers, and
  • Mutant -> Ratio = 1 results in all fibers mutated.

Melanin Absorption

Physical Absorption -> Melanin Density specifies the density of melanin which contributes to the resulting hair color. This parameter along with Melanin Mix are based on [d'Eon11], and provides an easy and consistent control of human hair colors. Lower density values result in lighter hair, while higher density values result in darker hair.

Similarly to Absorption, the corresponding color is multiplied to the general Albedo color.

To render the hair with a specific melanin density, set Albedo -> Albedo color to pure white.

Physical Absorption -> Melanin Mix specifies the ratio between eumelanin and pheomelanin in the fibers. Lower values result in darker and brown hair color, higher values result in lighter and red hair color.

Absorption

Physical Absorption -> Absorption Color specifies the fiber absorption properties, for red, green and blue. The corresponding color is multiplied to the general Albedo. Lower absorption values result in lighter hair, while higher absorption values result in darker hair.

To render the hair with a specific absorption, set Albedo -> Albedo color to pure white.


Absorption set to (0,0,0), (0.03,0.07,0.15) and (0.06,0.14,0.3).

Incandescence

Incandescence allows the hair to emit light.


Incandescence set to (0,0,0), (0.7,0.6,0.2) and (4, 3, 1).

Absorption Factor

All the aforementioned parameters are combined together to compute the absorption value. Hair density, roughness, opacity, lighting... interfere with this computation, and these color controls may not provide the expected result. The Absorption Factor lets you modulate the computed absorption coefficient, to strenghten/weaken absorption.

Opacity

Opacity controls the opacity of fibers.

To render hair with opacity faster, it is recommended to activate opacity baking using the Attributes -> Surface -> Opacity Mode attribute. Use either Vertex or V modes for curves. The User Guide/Shading/Opacity section for more information on improving performances with opacity.

Opacity

Opacity -> Opacity controls the opacity of hair in primary visibility. This setting does not affect the hair opacity in shadows, so decreasing this value and keeping the Opacity -> Shadow Opacity to 1 results in darker hair. Keep both parameters in sync to preserve general brightness.

Tip Fade

Opacity -> Tip Fade controls the starting point of opacity fading along the length of the fibers. 1 doesn't fade opacity at all, 0.5 fades the opacity from the middle of the fibers, and 0 fades from the root. When using tip fading, the fibers are fully transparent at the tip.

Shadow Opacity

Opacity -> Shadow Opacity controls the opacity of hair in shadows. This setting does not affect the hair opacity in primary visibility. Decreasing this value result in brighter hair.

Scattering

When encountering a hair fiber, light can be reflected off the hair surface, or enter the fiber where it will be partially absorbed. There, it may be immediately transmitted out of the hair fiber, or reflected internally a few times before being transmitted out. The model we use allows for separation and modulation of these scattering events. You can use these parameters to strengthen primary reflection, backscattering... Note that these parameters control the contribution of scattering lobes for all hits, not just the primary.

Tweak the following sliders to see the contribution of each component:

Multiple Scattering

This hair model is built for best quality, and may require many light bounces to achieve good results with energy conservation. If rendering speed is an issue, you can activate the Multiple Scattering approximation. This tradeoff allows to get significantly faster results at the expense of image quality. You may even use the complete, more expensive model for the first few bounces, and then fallback to Multiple Scattering.

To activate it, use Attributes -> Shading -> MS Approximation.

Parameter Attributes -> Shading -> MS Max Hits lets you optimize further, instructing the renderer to consider all light has been absorbed after passing though a certain number of hair (default: 15).

Parameter Attributes -> Shading -> MS Min Bounces lets you define a minimum number of light bounces before Multiple Scattering Approximation may be used. 1 or 2 bounces usually give a strong quality boost while keeping rendering times affordable.


Reference
(no multiple scattering)

Bounces 0 1 2 3 5 Reference (dual scattering off)
Render Time 3 min 12 5 min 59 9 min 29 12 min 25 16 min 17 25 min 46
Dual scattering rendering time

Dual scattering (the implementation of multiple scattering in the context of hair) approximates global illumination in hair by separating direct/indirect illumination and light coming from the front/back directions. Dual Scattering introduces some material parameters of its own to fine tune the rendering:
Shader -> Advanced -> Dual Scattering -> Forward density lets you control the indirect lighting contribution (illumination of the visible hair coming from light scattered by other hair).
Shader -> Advanced -> Dual Scattering -> Backward density lets you control the back lighting contribution (illumination of the visible hair coming from the back side, whether directly or after being scattered by other hair). Default values of 0.7 for both these parameters should be fine for most scenarios.

Advanced

Trace Set

Specify the raytracing set for direct and indirect lighting.

Ray Length

Controls the maximum ray length for bounces. Shorter values result in less indirect illumination and shorter rendering time.

References

[Marschner03] "Light Scattering from Human Hair Fibers", Stephen R. Marschner, Henrik Wann Jensen, Mike Cammarano, Steve Worley, Pat Hanrahan

[Zinke08] "Dual Scattering Approximation for Fast Multiple Scattering in Hair", Arno Zinke, Cem Yuksel, Andreas Weber, John Keyser

[d'Eon11] "An Energy-Conserving Hair Reflectance Model", Eugene d’Eon, Guillaume Francois, Martin Hill, Joe Letteri, Jean-Marie Aubry

[d'Eon13] "Importance Sampling for Physically-Based Hair Fiber Models", Eugene d’Eon, Steve Marschner, Johannes Hanika

[Pekelis15] "A Data-Driven Light Scattering Model for Hair", Leonid Pekelis, Christophe Hery, Ryusuke Villemin, Junyi Ling

[Chiang16] "A Practical and Controllable Hair and Fur Model for Production Path Tracing", Matt Jen-Yuan Chiang, Benedikt Bitterli, Chuck Tappan, Brent Burley

[Pharr16] "The implementation of a Hair Scattering Model", Matt Pharr

The hair model is provided by Cem Yuksel, and can be downloaded at http://www.cemyuksel.com/research/hairmodels/.