跳转到内容

Ward 1992 — 第一个能落地的各向异性反射模型

是什么

Ward 1992 是第一篇把”各向异性反射”从理论搬到工程渲染器的论文。

日常类比:把一块普通铝板和一块拉丝铝板放在同一盏灯下。普通铝板的反光是一个圆点;拉丝铝板的反光是一条沿刷痕方向拉长的亮线。这个”光斑被拉成线”的现象就叫各向异性——表面在不同方向上的粗糙度不一样。

Ward 干了两件事:

  1. 造了一台机器:一次拍下整个半球的反射光(成像式 gonioreflectometer),把测量从几小时压到几分钟
  2. 写了一个公式:用一个椭圆形的高斯函数描述各向异性反射,参数少(只 4 个),能塞进渲染器里跑

为什么重要

不理解 Ward,下面这些事都没法解释:

  • 为什么 1990 年之前游戏里所有金属看起来都像塑料——用的是 Phong / Cook-Torrance,只能各向同性
  • 为什么拉丝金属、丝绸、黑胶唱片、木纹漆面在 CG 里能”看起来真”——靠的就是 Ward 这套思路
  • 为什么 Frostbite 引擎 2014 年公开的 PBR 课程仍然引用 Ward 的归一化经验
  • 为什么现代 GGX 各向异性扩展的参数还是叫 αx / αy(沿两个切线方向各一个粗糙度)——Ward 定的命名

核心要点

Ward 的反射函数(BRDF,bidirectional reflectance distribution function)长这样:

ρ = ρd/π + ρs/(4π αx αy √(cosθi cosθo))
· exp(-tan²δ · (cos²φ/αx² + sin²φ/αy²))

不要被吓到,逐项解释:

  • ρd / π:漫反射部分(像哑光墙面,往各方向均匀散射)
  • ρs:镜面反射强度
  • αx, αy:沿表面两条切线方向的粗糙度。两个不一样就是各向异性;如果 αx = αy 就退化成各向同性
  • δ:观察方向和表面法线的夹角;φ:方位角
  • 指数那一团:一个椭圆形的高斯衰减——从最强反射方向往两侧偏一点,亮度按椭圆衰减

整个公式只有 4 个可调参数(ρd, ρs, αx, αy),少到能从测量数据反推出来,又多到能描述拉丝感。

实践案例

案例 1:拉丝铝的参数大概是什么样

实际渲染里给拉丝铝设:

ρd = 0.05 // 几乎不漫反射
ρs = 0.7 // 强镜面
αx = 0.2 // 沿刷痕方向"粗糙"(光斑拉得长)
αy = 0.02 // 垂直刷痕方向"光滑"(光斑窄)

αx / αy 比例 = 10,这就是”光斑被拉成 10:1 椭圆”的来源。

案例 2:木纹漆面

ρd = 0.2
ρs = 0.3
αx = 0.05 // 沿木纹方向较光滑
αy = 0.15 // 垂直木纹方向较粗糙(漆里有微小颗粒)

注意切线方向跟着木纹走——曲面上每个点都需要有”切线场”(tangent field),通常从 uv 贴图算。

案例 3:退化成各向同性看看是什么

把 αx = αy = α 代进去,指数项里的 (cos²φ + sin²φ)/α² = 1/α²,公式简化为:

ρ = ρd/π + ρs/(4π α² cosθi cosθo) · exp(-tan²δ/α²)

这就是 Beckmann 分布(Cook-Torrance 1981 用过的微表面模型的一个特例)。Ward 不是凭空造的,而是把 Beckmann 推广到了椭圆。

案例 4:丝绸窗帘的双向感

ρd = 0.1
ρs = 0.4
αx = 0.3 // 沿丝线方向反射很发散
αy = 0.05 // 垂直丝线方向反射很集中

为什么从一边看深、另一边看亮:丝线方向反射光被打散(αx 大),观察者看到的是分散后的弱光;垂直方向反射集中(αy 小),从那个方向看到的是几乎镜面级别的强反光。Ward 模型直接编码了这个双向不对称——之前的 Phong / Cook-Torrance 表达不出来。

踩过的坑

  1. grazing 角能量爆炸:原始公式在 cosθi → 0(光线擦着表面入射)时分母变小,反射能量发散——违反能量守恒(射出 > 射入)。Walter 2005 / Geisler-Moroder 2010 给了归一化修正版,工程上必须用修正版。

  2. αx / αy 的数值方向:Ward 论文里 α 越大越粗糙;但有些教材用 1/m 写法(m 越大越光滑)。抄公式时一定要看作者的约定,否则参数会反。

  3. 切线方向不是全局:αx / αy 是相对局部切线坐标系定义的。曲面上每点的切线方向不一样——必须有 uv 贴图或者 anisotropic flow map 提供切线场。漏了这一步,整张拉丝面会像同方向”贴皮”,曲面拐弯处穿帮。

  4. 测量装置的革命性容易被忽略:在 Ward 之前,测一个材料的完整 BRDF 要在暗室里手动转角度几小时甚至几天。Ward 用一面凸面镜把整个上半球的反射方向一次成像到 CCD 上,几分钟出一张图。没有这台机器,就没法验证模型对不对——理论再漂亮,参数对不上现实就是空谈。

适用 vs 不适用场景

适用

  • 拉丝金属、丝绸、缎面、黑胶、木纹漆面、抛光木材
  • 任何”反射光斑形状不是圆”的表面
  • 离线渲染(Radiance / Maya / mental ray)的标配;早期实时渲染(2000s 末游戏引擎)也用

不适用

  • 真正各向同性的表面(哑光墙、橡胶、未抛光石头):用 Lambert + Cook-Torrance 各向同性版即可
  • 现代 PBR 主流(2015+):换成 GGX / Trowbridge-Reitz 各向异性扩展——尾部更长、能量守恒更好。Ward 是它的精神祖先,参数语义沿用,但公式被换掉了
  • 次表面散射(皮肤、蜡、玉):BRDF 假设光在表面反弹,但这些材料光会进表面再出来,需要 BSSRDF

历史小故事(可跳过)

  • 1975 年:Phong 写出第一个经验 BRDF,给所有 CG 反光起点
  • 1981 年:Cook-Torrance 引入微表面理论 + 各向同性 Beckmann 分布
  • 1992 年:Ward 在劳伦斯伯克利国家实验室造出成像 gonioreflectometer,配合自己的 Radiance 渲染器,发表本论文
  • 2005 年:Walter 等人发现原始 Ward 在 grazing 角不守恒,发表归一化版本
  • 2007 年:Walter 等人提出 GGX 微表面分布,逐渐取代 Ward
  • 2014 年:Frostbite 引擎在 SIGGRAPH 公开 PBR 课程,仍引用 Ward 的归一化经验作各向异性扩展的参考

40 年间,“各向异性” 这一支从 Ward 的椭圆高斯出发,最终落到 GGX,但参数命名(αx / αy)和工程方法论没变。

学到什么

  1. 测量装置决定模型寿命:Ward 真正的贡献一半在公式、一半在那台 gonioreflectometer。能验证的模型才能进工业——理论再漂亮,参数对不上现实就只能停在论文里
  2. 少参数 + 物理意义清晰 是工程模型的胜负手——Ward 的 4 个参数都能从材料样品反推,每个都有直观含义(漫反射率 / 镜面强度 / 两个方向的粗糙度)
  3. 能量守恒是 BRDF 的硬约束:违反它的模型会”灯下越打越亮”,工程上必须做归一化检查。原始 Ward 在 grazing 角失守,13 年后才被 Walter 修好
  4. 从各向同性推广到椭圆 是个通用建模模板——任何”沿不同方向行为不同”的物理量都可以这样建模:把单参数 α 换成两个 αx / αy,再用一个椭圆函数串起来
  5. 工业落地优先于理论完美:Ward 模型有缺陷(grazing 角发散),但因为参数少、好算、能从测量推出来,硬是占了 15 年的工业默认位

延伸阅读

关联

  • cook-torrance —— Ward 的椭圆高斯是 Cook-Torrance Beckmann 分布的各向异性推广
  • phong-1975 —— Ward 之前的经验模型,无法描述拉丝感
  • renderman —— 同时代工业渲染器代表,与 Radiance 共同推广 BRDF 工程化
  • subsurface-scattering —— BRDF 假设之外的另一大类反射现象

反向链接