Houdini 22.0 Nodes VOP nodes

Karma Fur 2.0 VOP node

A physically-based hair and fur material with medulla support

On this page
Since 20.0

Overview

The Karma Fur shader is an extension of the Chiang model - Karma Hair. This model considers a structural feature of fur and thick hair: the so-called medulla. Hair and fur have three main components:

  • Cuticle: the hair’s outermost layer. The cuticle consists of 5-10 overlapping layers and is covered by nested series of scales. The scales protrude slightly from the surface of the hair.

  • Cortex: the hair’s mid-layer. The cortex generally accounts for 80-90% of a hair’s volume, but less for fur. The cortex carries the light-absorbing pigments responsible for hair color.

  • Medulla: the inner core inside the cortex. The medulla is also pigmented, but not present in every hair, but mainly in normal to thick hair. Scattering from the medulla is much more significant than scattering from the cortex.

The main goal of this extension to Chiang model is not just to reproduce fur strands properties on micro-level, but to achieve a photorealistic and controllable light scattering of fur on macro-level. You can control the radius of the medulla with Medulla Radius. When set to 0, the shader matches exactly the Chiang model. Taking the medulla’s geometry into account has several advantages over the original Chiang model

  • Precise and controllable light attenuation due to the analytical refraction of the medulla through the cortex medium, based on cortex IOR and cortex absorption coefficient.

  • Control light scattering of grooms through Medulla Radius, Medulla Phase (Henyey-Greenstain scattering function), and Medulla Diffuse to localize scattering. Hair and fur behave very similar to volumetrics. With the medulla extension you can control light scattering in the same way as volumetrics.

Note

To get full scattering between Chiang lobes and medulla lobes, Caustic paths should be turned on for the fur geometry. Without caustics you’ll experience a loss of energy resulting in darker hair.

Tip

The shader comes with several presets for different types of fur and hair. You can find the presets in the node’s Paramater Editor when you click the Parameter Edit Menu button. There, open Legacy Presets and choose a preset, e.g. Dog or Red Fox.

Parameters

Color

Base

A “lightness” scale on the hair color, from black to the base/melanin color.

Base Color

The base color of the hair. To use the melanin controls (below) to get a natural hair color, set this to 1, 1, 1 (white, the default). To use this color without melanin influence, set the Melanin parameter below to 0. If you set this color and use the melanin controls, this color acts like hair dye.

Melanin

Amount of natural pigment in the hair (note that increasing this parameter darkens the hair). Assuming the default Base Color (white), this blends between white, platinum blond, blond, brown, and black.

Melanin Redness

The amount of red in the natural pigment. The red contribution is scaled by the total amount of pigment (the Melanin parameter). High redness with relatively low melanin gives a “honey blond” look. For true red hair set this to 1 and the amount of melanin around 0.5 or higher.

Melanin Randomize

How much to randomize the melanin level of each hair strand. This helps make the hair look less uniform and more natural.

(You can change the Random Seed on the Advanced tab.)

Thickness Scale

Changes the hair color based on how real hair changes with strand thickness. Lower (thinner) values makes the color closer to white because the hairs scatter less light. The default is 1. This does not change the actual thickness of the rendered hair tubes (to change the actual thickness, change the width attribute on the hair curve geometry).

Tint

A multiplier on the final lighting result.

Cortex

In conjunction with Karma Fur, the Chiang model mimics the cortex along with several advanced parameters. You can find more information about cortex parameters on the Karma Hair page.

Shift

The cuticle angle: where the primary reflected specular highlight appears along the hair strand. Values from -1 to 1 in this parameter represent -90 to 90 degrees across the hair width. Default is 0.03.

IOR

The index of refraction of the hair. This controls how much light the hair absorbs versus how much it reflects. Lower values scatter more light forward (away from the light source), higher values reflect more light backward (back toward the light source). An IOR of 1 represents full transparency. The default is 1.55.

Cuticle Reflectance

A human hair shaft has cuticle scales similar to roof shingles. However, cuticles on fur can have complex shapes. The outer surface of animal fur fibers is usually rougher than that of human hair. We account for roughness of both longitudinal and azimuthal sections of a fur fiber in our model, assuming they have the same level of simplicity.

You can also create an extra primary (R) specular lobe with its own Longitudinal and Azimuthal roughness and color input. This lobe is mixed with the main R-specular RGB components of Extra R Color.

Note

The index of refraction (IOR) contributes significantly to the hair’s final look. Basically this is a cortex IOR. The IOR affects how the cortex material refracts the medulla and how big the medulla appears in the render.

Roughness

Lower values give shinier hair, higher values give duller hair. (When Roughness anisotropic is on, this controls the longitudinal roughness, along the length of the hair.)

Roughness Randomize

How much to randomize the roughness of each hair strand. This helps make the hair look less uniform and more natural.

(You can change the Random Seed on the Advanced tab.)

Roughness Anisotropic

When this is off (the default), the Roughness parameer above controls both longitudinal (along the length of the hair) and azimuthal (across the width of the hair) roughness. You can turn this on to get a separate control for azimuthal roughness.

Roughness Azimuthal

When Roughness Anisotropic is on, this controls the azimuthal (across the width of the hair) roughness. Lower azimuthal roughness values allow light to travel through the hair more easily. Higher azimuthal roughness values causes light to bounce around more within the hair.

Coat

Shininess of the outer layer of the hairs. Higher values give a stronger glint contrast when the hair reflects light. This can make the hair look wet or oily.

Advanced Roughness

Turns on advanced roughness controls.

Roughness TT Scale

A scale on roughness for the TT component, to model the focusing of light due to refraction through the circular boundary of the hair. TIP: increase this if the internal volume of blond or red hair is looking too dark.

Roughness TRT Scale

A scale on roughness for the TRT component, to model the effect of light spreading out after multiple reflections in the interior of the hair.

Medulla

Medulla allows for a fluffy and diffusive look with controlled back scattering and rim effects. In the Chiang model, those effects are difficult to achieve. Certain looks are even impossible with basic Chiang. The extended medulla model lets create more complex setups with coat and thermal insulation layers, for example undercoat. You also have more control over the fur’s look to get a more volume-like and realistic appearance.

The advanced medulla model is mainly used for fur, but it can also be applied to human hair. Thick human hair also has a medulla, but typically it’s thinner than animal medulla.

Medulla Radius

The parameter which controls radius of medulla inside cortex.

Medulla Phase

Here you control the light’s scattering behavior. For natural strands, this parameter is always positive. Light that scatters through the groom is always forward scattering.

Medulla Diffuse

This parameter doesn’t have a physical background and is meant for artistic control. You can increase Medulla Diffuse to make the material more diffuse. As a consequence, light is reflected from the medulla, not scattered.

Medulla Opacity

This parameter doesn’t have a physical background and is meant for artistic control. Medulla Opacity creates more transparent medulla lobes that can be mixed with main Chiang lobes.

Medulla Pigment

Controls the amount of light that is absorbed by the medulla.

Dirt & Wetness

Diffuse

The amount of diffuse reflectance. Increasing this slightly can make the hair look dirty or damaged by decreasing the apparent shininess. Non-zero values move the hair color toward the Diffuse Color below. This is not physically realistic (real hair does not have a diffuse component) but may be useful for artistic control.

Diffuse Color

Diffuse reflectance color. Non-zero values of the Diffuse scale above add this color to the hair color. This is not physically realistic (real hair does not have a diffuse component) but may be useful for artistic control.

Wetness

Adds specular (GGX) lobe a top of all other lobes including diffuse to simulated wet look. It also could be used to simulate such effects as iridescence.

Wetness Color

Extra color parameter to simulate more complicated effects than just liquid substances a top of fur/hair lobes. Could be used to connect iridescence color.

Wetness IOR

Index of refraction of wetness layer.

Wet Roughness

Extra roughness parameter to simulate more complicated effects than just liquid substances a top of fur/hair lobes.

Advanced

Custom Hair ID

Normally, the material calculates a unique Hair ID for each strand based on the curve or prim ID. If you turn this on, you can wire nodes into this node’s Hair ID input to calculate a Hair ID for each strand. Strands with the same Hair ID get the same “random” result where the material uses randomness (Melanin Randomize, Roughness Randomize).

Hair ID

This is a parameter equivalent of the node’s Hair ID input. You should use the input to calculate a Hair ID for each strand, rather than using this parameter. If you use this parameter instead of wiring into the input, every strand will get the same “random” values for melanin and roughness, which will look strange.

Random Seed

Different values give different results where the material uses randomness (Melanin Randomize, Roughness Randomize).

Cortex Blend Normals

Blend between surface normal and custom normal, connected to the node’s Ncortex input, to randomize surface normal.

Medulla Blend Normals

Blend between surface normal and custom normal, connected to the node’s Nmedulla input, to randomize surface normal.

Prune Level

The ray depth at which the shader simplifies scattering. This helps to improve performance and reduce noise resulting from scattering at greater ray depths.

As ray depth increases, the shader gradually adjusts:

  • Longitudinal and Azimuthal Roughness toward 0.3.

  • Medulla Phase toward 0, producing isotropic scattering.

These properties reach their target values at the specified Prune Level ray depth. Lower values simplify scattering sooner, while higher values preserve the original settings for more bounces.

References

  • The Implementation of a Hair Scattering Model. Physically Based Rendering: From Theory to Implementation. Pharr, Matt

  • A Practical and Controllable Hair and Fur Model for Production Path Tracing. Chiang, Matt Jen-Yuan, Benedikt Bitterli, Chuck Tappan, Brent Burley.

  • Physically-AccurAate Fur Reflectance: Modeling, Measurement and Rendering. Ling-Qi Yan, Chi-Wei Tseng, Henrik Wann Jensen, Ravi Ramamoorthi.

  • An Efficient and Practical Near and Far Field Fur Reflectance Model. Ling-Qi Yan, Henrik Wann Jensen, Ravi Ramamoorthi.

  • Dual Scattering Approximation for Fast Multiple Scattering in Hair. Arno Zinke, Cem Yuksel, Andreas Weber, John Keyser.

VOP nodes