Disney BRDF 材质模型
February 5, 2026About 3 min
Disney BRDF 材质模型
Blinn-Phong 那套经验模型不满足能量守恒,也拟合不了金属,所以现代渲染转向了 PBR。而在众多 PBR 材质模型里,Disney 在 SIGGRAPH 2012 的《Physically Based Shading at Disney》影响最深——UE4、Unity 的标准材质都能看到它的影子。
RenderMan 21 里的材质模型和 2012 那版已经差别不小,这里只谈 2012 的原版。有一点要先讲清:Disney BRDF 的出发点是「艺术家可控」(art directable),而不是「严格物理正确」。它宁可牺牲一点物理准确度,换来一组好调、可预测的参数。
五条设计原则
Disney 团队定这套模型时立了五条规矩,这几条比公式本身更值得记住:
- 用直觉参数,而不是物理参数(美术不需要懂折射率)。
- 参数越少越好。
- 参数在合理范围内应当归一化到 0~1。
- 在有意义的地方,允许参数被推到合理范围之外。
- 参数的任意组合都应尽量稳定、合理,不至于调出一眼假的结果。
五个 Lobe
模型一共叠了五个 lobe:
- Diffuse:漫反射,且把逆反射(retro-reflection,掠射角回弹)也算了进去。
- Isotropic BSSRDF:基于 Hanrahan-Krueger 近似的各向同性次表面散射。这是一个相当粗糙的近似,只对平均自由程很短的材质有效,别指望它做厚的次表面。
- Specular(microfacet):微表面高光。有个实现细节容易踩——Disney 的参考实现里没有
这一项,因为它被遮蔽阴影函数(G 项)约掉了。照抄公式时如果又乘了一遍,高光就错了。 - Sheen:控制掠射角的外观,主要是给布料准备的。
- Clearcoat:第二层专门的清漆高光。
十一个参数
十一个参数分别拧这五个 lobe:
| 参数 | 作用 |
|---|---|
baseColor | 表面颜色,通常来自贴图 |
subsurface | 用次表面近似控制漫反射形状 |
metallic | 金属度(0=绝缘体,1=金属)。是两个模型之间的线性混合——金属模型没有漫反射分量,入射高光被 baseColor 染色 |
specular | 入射高光强度,替代显式的折射率(IOR) |
specularTint | 纯艺术控制项,把入射高光往 baseColor 染色;掠射高光仍保持无色 |
roughness | 表面粗糙度,同时影响漫反射和高光响应 |
anisotropic | 各向异性程度,控制高光的长宽比(0=各向同性,1=最大各向异性) |
sheen | 额外的掠射分量,主要给布料 |
sheenTint | sheen 往 baseColor 染色的程度 |
clearcoat | 第二层清漆高光 |
clearcoatGloss | 清漆光泽度(0=缎面 satin,1=高光 gloss) |
metallic 那一行是理解整个模型的关键:它不是一个开关,而是在「绝缘体模型」和「金属模型」之间做线性混合,金属这端漫反射归零、高光被基色染色。
分层:uber shader 而非栈式
Disney BRDF 是按 uber shader 实现的,所以没法像图形软件那样做栈式(stack)分层。但它有个好处——所有参数都归一化、或至少在感知上是线性的,参数之间怎么混都不容易崩。实践里做多层材质的办法是:把一列 layer 通过 mask 做参数混合,混完再只求值一次 shading,而不是每层各算一遍再叠。这样既省又稳。
延伸阅读
- Brent Burley, Physically Based Shading at Disney(SIGGRAPH 2012 课程)
- Pixar's Foundation for Materials / RenderMan 21 Docs - Pixar Surface Materials
disney.brdf参考实现、PBRT 里的 Disney 材质实现、Maya 里的 Disney 材质
更基础的经验光照模型见 光照模型 Lighting Model;PBR 里不同形状光源怎么打光见 PBR 光源模型。