材质与 BRDF

几何决定光在哪里发生作用,材质决定光如何离开表面。在表面光传输模型中,材质主要由 双向反射分布函数 Bidirectional Reflectance Distribution Function,简称 BRDF,表示:

fr(ωi,ωo)=dLo(ωo)Li(ωi)cosθidωi.f_r(\boldsymbol\omega_i,\boldsymbol\omega_o) = \frac{\mathrm dL_o(\boldsymbol\omega_o)} {L_i(\boldsymbol\omega_i) \cos\theta_i\,\mathrm d\omega_i}.

它接收入射和出射方向,返回从一个方向到另一个方向的反射比例。颜色可以来自不同波长或 RGB 通道上的 BRDF;粗糙、抛光、拉丝等外观则来自方向分布。

漫反射

理想漫反射 Lambertian Reflection 的出射辐亮度与观察方向无关。若表面反照率为 ρ\rho,把 BRDF 设为常数 cc,在均匀入射光下有

Lo=cLiΩ+cosθidωi.L_o = cL_i \int_{\Omega^+} \cos\theta_i\,\mathrm d\omega_i.

半球上 dω=sinθdθdϕ\mathrm d\omega=\sin\theta\,\mathrm d\theta\,\mathrm d\phi,所以

Ω+cosθdω=02π0π/2cosθsinθdθdϕ=2π[12sin2θ]0π/2=π.\begin{aligned} \int_{\Omega^+}\cos\theta\,\mathrm d\omega &= \int_0^{2\pi} \int_0^{\pi/2} \cos\theta\sin\theta\, \mathrm d\theta\,\mathrm d\phi\\ &= 2\pi \left[ \frac12\sin^2\theta \right]_0^{\pi/2}\\ &=\pi. \end{aligned}

因此 Lo=cπLiL_o=c\pi L_i。为了让均匀入射光的总反射比例正好为 ρ\rho,Lambertian BRDF 应为

fr=ρπ,0ρ1.f_r=\frac{\rho}{\pi}, \qquad 0\le\rho\le1.

这里的 1/π1/\pi 来自半球余弦积分,保证能量守恒。经验着色公式中的漫反射系数若直接当作 BRDF 使用,遗漏这项会让总反射能量随积分增加。

粗糙白墙、粉笔和未抛光纸张可以近似为漫反射,但真实材料通常还含有方向性高光、次表面散射或微小遮挡。

镜面反射

全文约定 ωi\boldsymbol\omega_iωo\boldsymbol\omega_o 都从表面点向外指。入射光实际沿 ωi-\boldsymbol\omega_i 传播,理想镜面反射 Perfect Specular Reflection 的方向为

ωo=2(nωi)nωi.\boldsymbol\omega_o = 2(\mathbf n\cdot\boldsymbol\omega_i)\mathbf n -\boldsymbol\omega_i.

ωi\boldsymbol\omega_i 分成法向分量 (nωi)n(\mathbf n\cdot\boldsymbol\omega_i)\mathbf n 与切向分量,反射保持法向分量、翻转切向分量,展开后正好得到上式。若使用指向表面的传播方向 di=ωi\mathbf d_i=-\boldsymbol\omega_i,公式会变成 dr=di2(din)n\mathbf d_r=\mathbf d_i-2(\mathbf d_i\cdot\mathbf n)\mathbf n;两种约定不能混用。

理想镜面的 BRDF 在反射方向上是 Dirac delta 分布,不能把它理解为普通有限函数。BRDF 只描述反射,BTDF Bidirectional Transmittance Distribution Function 描述透射,二者统一称为 BSDF Bidirectional Scattering Distribution Function

Glossy 材质把能量分布在理想反射方向附近的一段反射瓣内。表面越光滑,反射瓣越窄、环境倒影越清晰;表面越粗糙,微小法线方向越分散,高光也越宽。

反射与折射材质分别沿镜面方向和透射方向传输能量

折射

光从折射率为 ηi\eta_i 的介质进入 ηt\eta_t 时,Snell’s Law 给出

ηisinθi=ηtsinθt.\eta_i\sin\theta_i = \eta_t\sin\theta_t.

η=ηi/ηt\eta=\eta_i/\eta_t,并取法线朝向入射介质,使

cosθi=nωi>0.\cos\theta_i = \mathbf n\cdot\boldsymbol\omega_i>0.

sinθt=ηsinθi\sin\theta_t=\eta\sin\theta_i

sin2θt=η2(1cos2θi),\sin^2\theta_t = \eta^2(1-\cos^2\theta_i),

cos2θt=1η2(1cos2θi).\cos^2\theta_t = 1-\eta^2(1-\cos^2\theta_i).

右侧非负时,折射方向为

ωt=ηωi+(ηcosθicosθt)n.\boldsymbol\omega_t = -\eta\boldsymbol\omega_i + (\eta\cos\theta_i-\cos\theta_t)\mathbf n.

它的切向分量按 η\eta 缩放,法向分量由单位长度约束确定。法线入射时 ωi=n\boldsymbol\omega_i=\mathbf n,上式给出 ωt=n\boldsymbol\omega_t=-\mathbf n,可作为符号检查。

真空折射率为 1,普通玻璃约为 1.5。光从高折射率介质射向低折射率介质时,若

sinθi>ηtηi,\sin\theta_i>\frac{\eta_t}{\eta_i},

便有 cos2θt<0\cos^2\theta_t<0,不存在实数折射方向,所有能量都发生 全内反射 Total Internal Reflection。水下观察到的 Snell window 正是折射和全内反射共同形成的可视范围。

实现折射时还要判断光线位于表面的哪一侧,并据此交换介质折射率、翻转法线。数值误差可能让根号内出现很小的负数,应在确认物理条件后做稳健处理。

水下观察到的 Snell window 与全内反射边界

菲涅耳项

Fresnel 项 描述界面反射比例随入射角的变化。垂直入射时,电介质只反射一小部分能量;接近掠射角时,反射率趋近 1。导体的行为还依赖复折射率,反射通常带有材料颜色。

对非偏振光,电介质的精确 Fresnel 反射率是 s、p 两种偏振分量的平均:

Fs=(ηicosθiηtcosθtηicosθi+ηtcosθt)2,F_s = \left( \frac{ \eta_i\cos\theta_i -\eta_t\cos\theta_t }{ \eta_i\cos\theta_i +\eta_t\cos\theta_t } \right)^2,

Fp=(ηtcosθiηicosθtηtcosθi+ηicosθt)2,F_p = \left( \frac{ \eta_t\cos\theta_i -\eta_i\cos\theta_t }{ \eta_t\cos\theta_i +\eta_i\cos\theta_t } \right)^2,

F=12(Fs+Fp).F=\frac12(F_s+F_p).

实时渲染常使用 Schlick 近似:

F(θ)=F0+(1F0)(1cosθ)5,F(\theta) = F_0+(1-F_0)(1-\cos\theta)^5,

其中

F0=(ηiηtηi+ηt)2F_0= \left( \frac{\eta_i-\eta_t} {\eta_i+\eta_t} \right)^2

是垂直入射反射率。对金属,F0F_0 通常为有色向量,且不能再用电介质的单一实折射率解释。

Fresnel 反射率随入射角增大而接近 1 的曲线

折射界面应按 FF 分配反射能量,并按 1F1-F 分配透射能量。全内反射时 F=1F=1

透明界面并非“只折射”。即使完全无色的玻璃也会反射,而且掠射角反射最强。

微表面

微表面模型 Microfacet Model 通常描述材质的 specular lobe:它把粗糙表面看作大量微小理想镜面。宏观法线为 n\mathbf n,入射与出射方向都位于表面上方。能把 ωi\boldsymbol\omega_i 正好反射到 ωo\boldsymbol\omega_o 的微表面法线必须平分两者,因此

h=ωi+ωoωi+ωo.\mathbf h= \frac{\boldsymbol\omega_i+\boldsymbol\omega_o} {\lVert\boldsymbol\omega_i+\boldsymbol\omega_o\rVert}.

ωi+ωo=0\boldsymbol\omega_i+\boldsymbol\omega_o=\mathbf0 时,半程向量未定义;普通反射情形要求

nωi>0,nωo>0.\mathbf n\cdot\boldsymbol\omega_i>0, \qquad \mathbf n\cdot\boldsymbol\omega_o>0.

法线分布函数 Normal Distribution Function D(m)D(\mathbf m) 描述微表面法线的面积密度。按常见定义,它满足

Ω+D(m)(nm)dωm=1.\int_{\Omega^+} D(\mathbf m) (\mathbf n\cdot\mathbf m) \mathrm d\omega_{\mathbf m} =1.

也就是说,把所有朝向微表面的面积投影回宏观表面后,归一化总面积为 1。只有 m=h\mathbf m=\mathbf h 附近的微表面会把给定入射方向反射到给定出射方向。

从半程向量方向到反射出射方向的变量替换满足

dωo=4ωohdωh.\mathrm d\omega_o = 4|\boldsymbol\omega_o\cdot\mathbf h| \mathrm d\omega_h.

将微表面投影面积换算到宏观入射、出射投影面积,并乘上单个微镜面的 Fresnel 比例和可见比例,得到常见微表面 BRDF:

fr(ωi,ωo)=F(ωi,h)D(h)G(ωi,ωo)4(nωi)(nωo).f_r(\boldsymbol\omega_i,\boldsymbol\omega_o) = \frac{ F(\boldsymbol\omega_i,\mathbf h) D(\mathbf h) G(\boldsymbol\omega_i,\boldsymbol\omega_o) }{ 4(\mathbf n\cdot\boldsymbol\omega_i) (\mathbf n\cdot\boldsymbol\omega_o) }.

三个因子的含义分别是:

  • DD:法线分布函数 Normal Distribution Function,决定多少微表面朝向 h\mathbf h
  • FF:单个微表面的 Fresnel 反射比例;
  • GG:几何项 Geometry Term,表示入射方向未被 shadowing、出射方向未被 masking 的微表面比例,常用 Smith 模型计算。

微表面模型用法线分布、菲涅耳项和几何项描述粗糙反射

分母中的两个余弦把微表面通量换回按宏观表面投影面积定义的 BRDF,系数 4 来自反射方向与半程方向之间的 Jacobian。实现时要限制点积为正,并保证 DDGG 的粗糙度约定相容。若归一化或变量变换错误,材质会在掠射角产生异常能量。

微表面 BRDF 本身通常只负责高光反射瓣,并不是完整工程材质。实际材质还可能需要 Lambert 或 Oren–Nayar 漫反射、透射、清漆和次表面分量;这些 lobes 要按 Fresnel、金属度或其他能量权重分配,避免漫反射与镜面反射把同一份入射能量重复使用。

DD 只统计朝向,FF 决定界面反射多少,GG 决定这些微表面能否同时被光源和相机看见;三者缺一不可。

粗糙度

法线分布越集中,表面越接近镜面;分布越宽,高光越模糊。Beckmann 分布适合统计高斯斜率,GGX 分布具有更长的尾部,能表达现实材质中较亮的宽高光。

粗糙度参数一般不与高光宽度线性对应。渲染系统常对艺术家输入做平方或其他重映射,使低粗糙度区域更易控制。法线贴图修改局部宏观法线,粗糙度贴图修改微表面分布,两者承担不同尺度的外观变化。

低粗糙度时,D(h)D(\mathbf h) 集中在很窄范围内。若仍按均匀半球或 cosine-weighted 分布采样,大多数方向落在高光瓣外,少数命中样本权重极大,形成亮噪点。更合适的方法是按 NDF 或可见法线分布采样半程向量,再反射得到出射方向,并用变量变换后的 PDF 加权。材质同时含漫反射和高光时,可以按能量比例混合两种采样策略;估计量必须使用完整 mixture PDF,而不能只除以被选中分支的 PDF。

工程实现中常按 GGX 的 NDF 或 visible-normal 分布对 half-vector 做 importance sampling,再由 half-vector 反射出射方向;这里的 PDF 还要包含从 half-vector 到出射方向的 Jacobian。roughness 很小时,均匀半球采样几乎碰不到窄峰,重要性采样能把样本集中到真正有贡献的区域,同时仍需处理 grazing angle、遮蔽和可见法线截断。

各向异性

各向同性 Isotropic BRDF 绕宏观法线共同旋转入射、出射方向后保持不变,因此只依赖两个极角和方位角之差:

fr(θi,ϕi;θo,ϕo)=fr(θi,θo,ϕoϕi).f_r(\theta_i,\phi_i;\theta_o,\phi_o) = f_r(\theta_i,\theta_o,\phi_o-\phi_i).

因此各向同性只表示把入射、出射方向绕法线共同旋转时结果不变;它仍依赖相对方位角 ϕoϕi\phi_o-\phi_i,并不意味着方位角被固定,或材质对每个方位组合都给出相同响应。

拉丝金属、梳理过的纤维和某些织物具有明确切向方向,沿两个切向轴的粗糙度不同,属于 各向异性 Anisotropic 材质。

各向异性模型需要切线 t\mathbf t、副切线 b\mathbf b 与法线 n\mathbf n 构成局部坐标系,并分别控制两个切向方向的分布宽度。高光会沿更粗糙的方向拉长。切线场若在 UV 接缝或奇点处不连续,高光也会出现突变。

各向同性高光保持圆对称,各向异性高光沿切线方向拉伸

基本性质

物理合理的 BRDF 应满足以下条件:

  • 非负性:fr0f_r\ge0
  • 线性:不同入射光贡献可以相加;
  • Helmholtz 互易性fr(ωi,ωo)=fr(ωo,ωi)f_r(\boldsymbol\omega_i,\boldsymbol\omega_o)=f_r(\boldsymbol\omega_o,\boldsymbol\omega_i)
  • 能量守恒 Energy Conservation:任意入射方向的总反射比例不超过 1。

能量守恒可写成

Ω+fr(ωi,ωo)cosθodωo1.\int_{\Omega^+} f_r(\boldsymbol\omega_i,\boldsymbol\omega_o) \cos\theta_o\,\mathrm d\omega_o \le1.

这条式子可以直接理解:只从固定方向送入单位辐照度,沿方向 ωo\boldsymbol\omega_o 的出射辐亮度与 frf_r 成正比;再把所有出射方向乘余弦并积分,就得到总反射辐照度。被动表面不能反射出超过输入的能量,所以积分不超过 1。

能量守恒约束的是这个出射半球积分,而不是要求 BRDF 数值在每个方向都小于等于 1。BRDF 的单位是 sr1\mathrm{sr}^{-1},很窄的镜面峰值完全可能逐点大于 1,只要乘以余弦后在整个半球上的积分不超过 1;把逐点上限误当成能量守恒会错误压低窄高光。

透射材质还要把 BTDF 纳入同一能量预算,反射与透射的统一函数称为 BSDF。互易性成立于被动、可逆的常见光学系统;带有荧光、磁光效应或主动增益的材料需要更一般的模型。

测量方法

解析模型便于计算和编辑,却未必能重现复杂真实材料。Gonioreflectometer 固定材料样本,独立改变光源和传感器方向。根据定义

fr=dLodEi,f_r = \frac{\mathrm dL_o} {\mathrm dE_i},

设备必须分别标定样本处的入射辐照度与传感器测得的出射辐亮度,二者相除才是 BRDF,而非直接使用照片像素值。

一般各向异性 BRDF 由四个角度参数化,数据量很大。各向同性假设消去绕法线的共同旋转,只需记录 (θi,θo,ϕoϕi)(\theta_i,\theta_o,|\phi_o-\phi_i|) 三个参数;互易性还能交换入射、出射方向,进一步减少独立样本。图像式测量会利用已知几何上的大量法线,在一张照片中同时获得多个角度样本。

测量误差来自光源标定、传感器动态范围、样本定位和遮挡。尖锐镜面峰值尤其难采全。离散数据可按方向查表并插值,MERL 数据库的常见表格规模为 90×90×18090\times90\times180;也可以把测量结果拟合到微表面等解析模型,换取更紧凑的参数和更稳定的采样。