你可以直接这样回答
- 先纠正比较层级:完整 Disney Principled BRDF 是一整套材质模型,Oren–Nayar 只是漫反射项。
- 再给公平比较:若公平比较,应比较 Disney/Burley Diffuse 与 Oren–Nayar。
- 说核心差异:Burley 用粗糙度和 Schlick 风格项经验拟合掠射、回返效果,便宜且好调;Oren–Nayar 用粗糙微面的遮挡与互反射近似,更强调灯光和视线的方位关系。
- 守住边界:两者都不是 GGX 镜面
D/G/F。
这道题真正想听什么?
先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。
这道题最容易掉进一个坑:把不同层级的东西硬拿来比较。
完整的 Disney Principled BRDF 是一套材质框架,里面既有漫反射,也有微表面镜面反射、金属度、粗糙度等能量分配。Oren–Nayar 则只是一种粗糙漫反射模型。所以严谨回答应该先指出:
- 若比较完整模型,Disney 和 Oren–Nayar 不在同一层级。
- 若题目真正想比较漫反射,就应比较 Disney/Burley Diffuse 与 Oren–Nayar Diffuse。
- GGX 的
D、Smith 的G、Schlick Fresnel 的F属于 Disney 常用的镜面路径,不是这次漫反射对比的主角。
把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍
我会先说题目的比较层级有歧义。完整 Disney PBR 通常把 Burley Diffuse 与 Cook–Torrance 镜面项等部分组合起来;Oren–Nayar 只能和其中的 diffuse 部分公平比较。Oren–Nayar 从粗糙微面统计出发,用粗糙度、入射/观察夹角和方位角关系近似遮挡与互反射,因此粗糙材质会表现出明显的方向关系。Burley Diffuse 更偏生产经验模型:它在 Lambert 基线上加入 Schlick 风格的掠射与回返修正,把同一个 roughness 参数接进统一材质工作流。实时项目中,Burley 通常更便宜、稳定、好调;若粉体、布面等材质真的需要 Oren–Nayar 的方向特征,我会在固定灯光和相机下做 A/B 对照,再决定额外复杂度是否值得。
面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
-
问:Disney Diffuse 就是整套 Disney PBR 吗?
答:不是。Disney Diffuse 通常指其中的 Burley 漫反射项;完整 Disney Principled BRDF 还会组合微表面镜面反射、金属度和其他材质分支。 -
问:Oren–Nayar 与 Burley 最核心的区别是什么?
答:Oren–Nayar 从粗糙微面的遮挡、互反射和灯眼方位关系出发;Burley 用 Schlick 风格的经验曲线改善 Lambert 在掠射与回返区域的表现,更便宜、更平滑,也更适合统一的美术粗糙度工作流。 -
问:为什么这题不应该先背
D/G/F?
答:D/G/F主要描述 Cook–Torrance 镜面项。题目若在问 Oren–Nayar 的差异,必须先把漫反射与镜面反射拆开;否则公式说得越多,越可能答非所问。 -
因果链: 输入(粗糙度、灯光方向、观察方向) → 变化(Burley 或 Oren–Nayar 的漫反射修正) → 输出(粗糙表面在正视、掠射、回返方向的亮度关系)。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察
实验不是第二份答案,它只负责证明答案
如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。
- 先猜 如果把这个模型或规则关掉,画面里哪一处应该先变?为什么?
- 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
- 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点
先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。
1. 先预测
打开 Diffuse BRDF 深挖课,先保持同一块红褐色塑料、同一盏灯、同一个观察角度。
先猜两件事:
- 把粗糙度从低拉到高时,Lambert 不会响应;Oren–Nayar 与 Burley 会逐渐偏离 Lambert 基线。
- 保持
N·L和N·V大致不变,只让灯与眼睛绕法线改变相对方位时,Oren–Nayar 仍可能变化,因为它还关心两者的方位角关系。
公式先只读成中文,不急着背:
Burley:基础漫反射 × 灯光掠射修正 × 观察掠射修正
Oren–Nayar:基础漫反射 ×(粗糙遮挡 + 灯眼方位关系)
老师追问
先别急着查公式: 两个模型都在算漫反射,它们分别多看了哪一种“方向证据”?
为什么: Burley 为什么更像生产用的经验修正,而 Oren–Nayar 为什么更强调粗糙微面的几何关系?
如果结果相反: 先检查是否真的固定了 Albedo、
N·L、N·V和曝光,再检查模型切换;不要先用灯光强度把差异冲掉。
2. 再动手
在 Diffuse BRDF 深挖课 中依次完成最后五个相关小步:
- Lambert 的边界: 只改
roughness,确认 Lambert 柱不动。 - Oren–Nayar: 保持其他量不变,只改
roughness,观察它怎样离开 Lambert 基线。 - 方位角: 固定
N·L与N·V,只改灯眼的绕圈关系,观察 Oren–Nayar 是否变化。 - Burley: 只把观察方向推向掠射,观察 Burley 与 Lambert 的差值。
- 模型选择: 只切换 Lambert / Oren–Nayar / Burley,记录同一输入下三根柱子的差异。
实时刷新保持默认关闭。每次只改一个量,再点击“重新计算 diffuse”。
3. 最后对证据
- Lambert 不读取粗糙度和观察方向,因此这些变量变化时,它的材质分配比例保持稳定。
- Oren–Nayar 在粗糙度升高后更明显地偏离 Lambert,而且会响应灯与眼睛的相对方位。
- Burley 常在正视区域接近 Lambert,在掠射或回返区域出现平滑修正。
这组实验只能证明当前教学实现中的输入 → 变化 → 输出关系。不同引擎可能使用经过修改的 Burley、能量补偿或近似版本,最终仍要检查项目 Shader 和目标设备。
答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
- 漫反射入口与能量合成:先确认
f_d与N·L没有被重复相乘。 - 最终合成:确认完整 PBR 里漫反射与镜面反射是两条不同路径。
- Debug 输出:先单独看 diffuse,再谈 GGX 镜面项。
面试中若需要写公式,可以在理解现象后再补:
Burley:
f_d = baseColor / π · F_D(N·L) · F_D(N·V)
F_D90 = 0.5 + 2 · roughness · (L·H)²
Oren–Nayar:
f_d = baseColor / π · [A + B · max(0, cos(φL-φV)) · sin(α) · tan(β)]
这里不要求死背符号。只要能说明 Burley 使用平滑的掠射/回返修正,而 Oren–Nayar 明确使用粗糙度与灯眼方位关系,逻辑就已经站稳。
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级
完整展开时,我会先画两条能量路径:进入材质内部后散射返回的是 diffuse;在界面定向反射的是 specular。Disney Principled BRDF 会把 Burley Diffuse、微表面镜面以及 metallic/roughness 的能量分配组合起来,而 Oren–Nayar 只负责第一条路径。然后我用同一块材质做三组单变量验证:第一组只改 roughness,确认 Lambert 不动而两个粗糙漫反射模型变化;第二组固定 N·L 与 N·V,只改灯眼方位角,确认 Oren–Nayar 的几何关系;第三组把视线推向掠射,观察 Burley 的平滑修正。工程选型不仅看公式,还要看目标材质、镜头分布、Shader 指令、平台预算和美术参数一致性。低配 fallback 可以回到 Lambert,但必须在目标设备上验证材质身份是否仍然成立。
哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
- 不先指出“完整 Disney BRDF”与“Oren–Nayar 漫反射”不在同一层级。
- 一开口就背 GGX
D/G/F,却没有回答 Burley Diffuse 与 Oren–Nayar 的差异。 - 只说“一个更真实、一个更快”,没有指出 Oren–Nayar 的灯眼方位关系和 Burley 的经验掠射/回返修正。
- 同时改粗糙度、曝光和灯光强度,最后无法证明差异来自哪一个模型。
- 把当前 Lab 的教学近似当成所有引擎的标准实现;真正交付前仍要验证项目源码、Profiler 和目标设备。