How KHR_materials_sheen Renders Velvet in glTF
The KHR_materials_sheen extension enhances glTF's core
Physically Based Rendering (PBR) pipeline by introducing an additional
reflection layer designed to simulate the scattering of light from
microfibers on cloth and fabric. By replacing standard microfacet
specular models with a dedicated cloth-oriented Bidirectional
Reflectance Distribution Function (BRDF), this extension accurately
recreates the soft, grazing-angle highlights and velvety backscattering
that standard roughness-metallic workflows fail to produce.
Standard PBR workflows in glTF rely on the GGX microfacet distribution, which is optimized for hard surfaces such as metals, plastics, and coated objects. When applied to textiles like velvet or peach-fuzz cloth, GGX produces highlights that are either too sharp or evenly washed out across the surface. Real fabrics feature microscopic, vertically oriented fibers that trap incoming light while strongly backscattering light at glancing angles, creating a distinctive bright rim along the object's silhouette.
To reproduce this effect, KHR_materials_sheen adopts an
alternative microfacet distribution, commonly the Charlie sheen model.
Unlike traditional models that assume surface microfacets lie mostly
flat relative to the macro-surface, the Charlie distribution models
microfacets that stand upright. This shift mathematically shifts peak
reflectance toward grazing viewing angles, matching the physical
behavior of light interacting with dense, protruding fiber tips.
The extension introduces two primary parameters to control the appearance of the fabric layer:
- Sheen Color (
sheenColorFactorandsheenColorTexture): Determines the color and brightness of the microfiber reflection. In standard cloth, this is often a tinted white or light gray. In deep velvet, the sheen color is frequently tuned to a lighter, saturated tone that contrasts with the darker base albedo, mimicking the rich shifts in color seen when light catches velvet folds. - Sheen Roughness (
sheenRoughnessFactorandsheenRoughnessTexture): Controls the width and spread of the grazing highlight. A high sheen roughness spreads the reflection broadly across curved contours, producing the diffuse, matte feel of plush velvet or cotton. A low sheen roughness confines the highlight strictly to the outermost silhouette edges, recreating the sharper sheen found on materials like satin or silk.
Underneath the sheen layer, light interacts with the base material's standard diffuse and metallic channels through energy conservation. The glTF implementation treats sheen as a top-level coating: the sheen layer absorbs and reflects light first, and only the unreflected energy transmits through to the underlying base layer. This ensures that even intensely saturated sheen highlights do not artificially blow out the lighting calculations, yielding physically plausible rendering of complex textiles across real-time 3D engines.