学习进度
0/9 已勾只保存在这台浏览器;勾满 9 项即视为本题完成。
先把题目说成人话
这道题表面上在问两个模型的区别,实际先要纠正比较对象:迪士尼原则材质是一整套材质方案,奥伦—纳亚只是其中“粗糙表面怎样漫反射”的一种算法。它们不能整套对整项地比较。
光照到一点表面后,程序要根据灯从哪边来、相机从哪边看,决定有多少光返回相机;这条方向规则叫双向反射分布函数(BRDF)。迪士尼原则材质(Disney Principled)把漫反射、镜面、金属、布料绒光和清漆等响应组织进一套美术参数。若只讨论粗糙漫反射,真正应与奥伦—纳亚(Oren–Nayar)比较的是其中的伯利漫反射(Burley Diffuse)。
这是虚构教学故事,不是个人项目经历。
场景:先让问题变得看得见
先做一颗白色石膏材质球。场景里只有一盏可以绕球移动的灯,相机固定不动。为了只看漫反射,先关掉镜面、清漆和布料绒光。
灯在相机附近时,石膏球正面收到一片柔和的回光;灯移到侧面,那片亮区跟着挪动。现在提高“表面有多粗糙”,再重复同一条灯光路线。画面变化才是这道题真正要解释的部分。
(右脑)画面:把石膏球想成由无数粒细小粉末压成。灯光从正面照来时,许多朝向灯的小面把光送回眼睛;灯绕到侧面后,有些小面仍朝着灯,有些被邻近颗粒挡住,回到眼睛里的光重新分布。我们先只看这片柔和的回光,球边那道尖锐亮线暂时用黑布遮住,因为它属于另一种反光。
(左脑)对表:石膏球的柔和主体对应漫反射,尖锐亮线对应镜面反射。最简单的兰伯特漫反射只看表面与灯的夹角;伯利和奥伦—纳亚还会看观察方向与粗糙程度。因此公平比较必须固定颜色、法线、灯和相机,只替换漫反射算法。迪士尼的其他层先关闭,等比较结束再接回去。
小明:先形成一个完整猜测
小明直接在完整材质上切换公式。他看到球边有一圈亮光,便说奥伦—纳亚的漫反射更亮。
可是关闭镜面后,那圈亮光几乎消失了。刚才比较到的是掠射角增强的镜面反射,不是两种漫反射的差异。只看最终像素,很容易把不同层记到同一本账上。
小红:把猜测放回现实检查
小红保留同一颗非金属石膏球,并做三次观察。
第一次把表面设得接近光滑。奥伦—纳亚会回到兰伯特;伯利在球的大部分区域也很接近兰伯特,但掠射区域仍保留自己的经验修正,所以不能说两者在整个半球上完全相同。
第二次提高各自定义下的粗糙度。灯靠近相机方向时,奥伦—纳亚会表现出明显的回返反射;灯和相机方位错开后,这部分变弱。它来自“许多粗糙小面彼此遮挡、又把光送回来源附近”的统计模型。
第三次换成伯利。它同样让结果随灯、相机和粗糙度变化,但目标不同:它是根据实测材质拟合出的、适合统一美术工作流的平滑响应。这里不能把伯利的零到一粗糙度,直接当成奥伦—纳亚的小面斜率标准差;同名旋钮并不代表同一把物理尺。
我:用检查结果修正模型
现在可以正面回答原题:
- 迪士尼原则材质不是单一漫反射公式,而是把多种反光组织起来的一套原则化材质模型;主镜面通常采用微表面分布,漫反射常用伯利项,还可加入绒光、清漆和各向异性等分量。
- 伯利漫反射强调与整套材质参数配合,粗糙度是面向制作的工作流参数;奥伦—纳亚从粗糙小面的统计假设出发,粗糙度表示小面斜率分布。
- 需要统一的角色和场景材质工作流时,伯利通常更顺手;需要突出粉笔、月壤等粗糙表面的回返反射时,可以评估奥伦—纳亚。
- 最终仍要比较目标 Shader 的画面和 GPU 成本。模型名字不能直接推出谁一定更快,也不能推出谁在所有材质上一定更真实。
(右脑)画面修正:重新看那颗石膏球:外层的尖亮高光已经单独拿走,桌上只剩柔和的主体回光。奥伦—纳亚像从粉末颗粒的朝向和遮挡推算回光;伯利像为整间材质工作室整理出一只稳定、好用的粗糙度旋钮。两者都能让粗糙表面离开最简单的漫反射,但来路、参数含义和要服务的系统不同。
(左脑)严格对表:比较时,颜色 在线性空间;、、、 是同一坐标空间中的单位方向,点积无量纲;角度以弧度进入三角函数。伯利粗糙度 是无量纲工作流参数,奥伦—纳亚的 是以弧度表示的小面斜率标准差,不能令 后宣称公平。固定输入并关闭其他层后,分别记录两种漫反射的曲线,再在完整材质中检查能量分配和目标设备成本。
老师解惑
到这里再看公式。完整的迪士尼原则材质可以先写成结构账本;它不是某个 Unity Shader 的逐行源码:
其中 是金属度。式子只说明“有哪些账”,不保证每个引擎都保留相同分量,也不等于严格的物理层栈。主镜面通常使用 GTR2/GGX 微表面分布:
- 记录微表面法线朝向的分布,粗糙度决定高光宽窄。
- 记录入射和出射方向上的遮蔽。
- 是菲涅耳项:观察越接近掠射,镜面反射通常越强。
- 清漆常用独立的 GTR1 波瓣,绒光用于布料般的掠射观感。具体引擎可能删减或改写这些层。
Oren–Nayar 常用的定性近似形式为:
其中 是以弧度表示的小面斜率标准差,,。当 时,、,模型严格回到兰伯特漫反射。
Burley Diffuse 常写成:
两个方括号相乘; 是无量纲的材质工作流粗糙度,它不是奥伦—纳亚的 。两种漫反射都带有 ,因为 BRDF 表示“每单位入射辐照度、向每单位立体角返回多少辐亮度”,其量纲可写作 。
- 迪士尼原则材质:完整体系;不能直接与一个漫反射模型放在同一层级比较。
- 伯利漫反射:迪士尼体系里的漫反射项,以实测外观和制作参数为导向。
- 奥伦—纳亚:从粗糙小面的统计假设推导漫反射,并显式表现回返反射。
- 工程边界:把漫反射接回镜面、清漆等分量时仍要检查总能量;不能孤立地把每层都调亮再相加。
工具分工
- 漫反射对比实验:固定灯、相机和颜色,只切换兰伯特、伯利与奥伦—纳亚,先看方向差异。
- Unity Frame Debugger:确认实际运行的 Pass 与 Shader 变体;它不能替代 GPU 计时。
- Unity Profiler / RenderDoc:前者在目标 Player 中比较 GPU 时间,后者检查像素中间量和最终合成。
记忆钩子
先分清整套材质和其中一层:迪士尼不是奥伦—纳亚的同级对手,伯利漫反射才是。
这是教学场景,不是目标项目的真实捕获或个人经历。
下一步:验证这条因果
同一粗糙表面在 Burley 与 Oren–Nayar 下的可见差别。
教学边界:它不替代完整推导,也不代表所有项目都该换模型。