概述

之前渲染流水线中的光照模型都是经验模型,为了渲染更真实的物体就有了基于物理的渲染 PBR


光在介质中传播,发生吸收和散射

当介质的密度发生变化时,产生反射和折射

所以光照射到物体上时,一部分发生反射(高光反射),一部分发生折射,而折射光一部分被吸收,一部分被散射到外部(次表面散射,漫反射)


BRDF

双向反射分布函数

用于解释物体表面一点和光作用的函数

定义为某微面元单位时间内接受的能量经表面材质交互后往特定方向(立体角)辐射的能量
$$
定义:f(l,v) = \frac{dL(v)}{dE(l)}
$$


辐射率(radiance):单位面积,单位方向上的光源辐射通量,用L表示

辐照度(irradiance):单位面积上的光源辐射通量,用E表示

  • 两个量都可以理解为单位时间内的能量,因为都是从功率推过来的
  • 由定义可知:$E=\int_\Omega Ld\omega$

主要描述表面反射和次表面散射

表面反射:高光反射

次表面散射:漫反射,折射的光中一部分被吸收一部分被重新散射到外部


反射等式

$$
L_o=\int_\Omega f(l, v)*L_i(l)(n·l)d\omega_i
$$

很好理解,$L_i(l)(n·l)$就是入射方向的辐射率在投射到当前点后,该点所接收到的辐射率

$f(l, v)$就是BRDF,计算光和表面交互后的出射率

单条光线如此,则对立体角求积分就可得最终结果

立体角参考https://www.zhihu.com/question/20085326?sort=created


$f(l, v)$是基于物理的,满足能量守恒交换律(光路可逆)

$$
能量守恒:\forall l,\int_\Omega f(l, v)(n·l)d\omega_i<=1
$$

$$
交换律:f(l,v)=f(v,l)
$$


漫反射项

如果表面没材质,那么不用考虑那么多,就是反射光与入射方向和观察方向无关,且反射光在半球面内均匀分布,就是应用最广泛的 Lambert BRDF

$$
f_{Lambert}(l,v)=\frac{c_{diff}}{\pi}
$$
Lambert BRDF的推导网上有很好的参考 ,$\pi$ 而不是$2\pi$是因为光源投影到表面时,irradiance会由于不垂直于表面衰减$cos\theta$(本质是面积变化了),对半球立体角积分时$\int_{\Omega}cos\theta sin\theta d\omega i$,积分结果为$\pi$


精确光源

和上面的推导一样,半球面立体角积分积分
$$
L_o=\pi f(l, v)*c_{light}(n·l)
$$


Disney BRDF 考虑了粗糙度和能量衰减
$$
f_{diff}=\frac{baseColor}{\pi}(1+(F_{D90}-1)(1-n·l)^5)(1+(F_{D90}-1)(1-n·v)^5)
$$

$$
F_{D90}=0.5 + 2roughness(h·l)^2
$$


高光反射项

建立在微面元理论上,当然这也是一个近似,一些材质无法用微面元来描述

微面元就是物体表面存在微小的突起,但宏观来说物体表面依旧是光滑的,微面元的法线和平滑的表面法线不尽相同

  • 条件[1]:一部分微面元的法线正好是入射方向和观察方向的半角矢量,从而形成高光
  • 条件[2]:但是这部分光可能在入射或反射过程中被其他面元遮挡不纳入高光计算

分析是微观的,最终计算是宏观的


Torrance-Sparrow 微面元模型
$$
f_{spec}(l, v)=\frac{F(l,h)G(l,v,h)D(h)}{4(n·l)(n·v)}
$$
本质就是微面元的数学描述

D(h): 法线分布函数,计算的满足条件[1]的微面元比例,常见的分布模型,Blinn-Phone、GGX、Beckmann

G(l,v,h): 阴影-遮掩函数,计算的剔除条件[2]的微面元比例,获取活跃(有效)微面元所占比例(浓度)

F(l,h): 菲涅尔反射反射函数,反射光占入射光的比例(菲涅尔等式)

分母是校正因子


渲染方程

物体除了反射光外还有自发光
$$
L_o=L_e+\int_\Omega f(l, v)*L_i(l)(n·l)d\omega_i
$$

金属和非金属

金属材质

  • 强烈的高光反射,且呈现材质颜色
  • 吸收系数很高
  • 极大部分的折射光都被内部的自由电子吸收而迅速转化成其他的能量,即基本没有漫反射(次表面散射)

非金属材质

  • 漫反射颜色多样
  • 高光反射颜色单一
  • 掠射角处反射增强,菲涅尔现象