glTF Sheen Color and Microfiber Backscattering
In glTF 2.0, the KHR_materials_sheen extension simulates
the soft, fuzzy appearance of fabrics such as velvet, satin, and peach
fuzz. This article explains how sheen color factors dictate the
backscattering behavior of microfibers by controlling specular
reflectance tint, governing directional light bounce via microfacet
distribution, and maintaining energy conservation within physically
based rendering (PBR) pipelines.
The Mechanism of Microfiber Backscattering
Woven and knitted fabrics are covered in microscopic, vertically oriented fibers. When light hits these microfibers, it does not follow the standard specular distribution seen on smooth, polished surfaces. Instead of reflecting light primarily in the mirror reflection direction (forward scattering), microfibers scatter a significant portion of light directly back toward the light source, a phenomenon known as backscattering. This creates the characteristic bright rim and soft grazing-angle highlights observed on cloth.
glTF models this behavior using the Charlie microfacet distribution function. Unlike standard GGX microfacet distributions, which produce sharp specular peaks, the Charlie distribution features an inverted bell-like curve optimized to capture the diffuse specular sheen and retro-reflection generated by raised fiber structures.
Sheen Color Factors as Base Reflectance (\(F_0\))
The sheenColorFactor in a glTF material is a linear RGB
vector that acts directly as the specular reflectance at normal
incidence (\(F_0\)) for the sheen
layer:
- Intensity Control: The scalar magnitude of the
sheen color factor scales the overall intensity of the backscattered
light. Setting the sheen color factor to
[0, 0, 0]disables sheen calculations entirely, while values approaching[1, 1, 1]generate maximum fiber illumination. - Wavelength-Dependent Reflection: Fabric fibers can selectively reflect specific wavelengths while absorbing others. By defining a distinct RGB sheen color factor, artists can decouple the rim light's color from the underlying diffuse base color. This enables realistic simulations of complex textiles like "shot silk" or two-tone fabrics, where the surface exhibits one color at direct angles and a distinctly different sheen color at grazing angles.
Interaction with Roughness and Grazing Angles
The sheen color factor does not act in isolation; it works in tandem
with the sheenRoughnessFactor. The roughness parameter
controls the spread of the Charlie distribution across the
microfibers.
When the sheen roughness is low, backscattering is concentrated tightly at grazing angles, producing a sharp, glowing edge tinted by the sheen color factor. When roughness is high, the backscattered light spreads evenly across the entire surface of the geometry, softening the transition and bathing the object in a diffuse, velvety halo driven by the specified color factor.
Energy Conservation and Layer Blending
To prevent surfaces from becoming unnaturally bright, the glTF sheen extension enforces strict energy conservation between the sheen layer and the underlying base material. The sheen layer is treated as an optical layer resting on top of the diffuse base.
The renderer evaluates the total directional albedo of the sheen layer using the sheen color factor and roughness. The underlying base layer’s diffuse and specular reflections are then attenuated by the remaining transmitted energy. If the sheen color factor has a high luminance, the sheen layer absorbs and reflects more incoming light, diminishing the visibility of the base layer beneath it and emphasizing the microfiber backscattering effect.