本文已参与[新人创作礼]活动,一起开启掘金创作之路
转载请注明出处.
图形学的数学基础(二十七):反射方程与渲染方程
双向反射分布函数(BRDF)
描述
BRDF全称BidirectionalReflectanceDistributionFunction。BRDF是描述了物体表面对能量反射分布特性的函数。假设物体表面单位面积dA接收到来自Wi方向光线的能量,用E来表示,这些能量E到达物体表面后,会向各个不同的方向反射(每个方向反射的能量不同),BRDF函数就是描述这束能量向特定方向Wr的反射占比。

- Differential irradiance incoming:dE(wi)=L(wi)cosθidwi
- Differential intensity exiting: dLr(wr)
正式定义
单位面积dA从单位立体角wi接收到的irradiance,会被如何反射到各个不同的方向上去。更通俗点来说就是BRDF描述的是单位面积接收单位立体角wi的能量的反射分布(比例)。反射比例依赖于出射方向(wr)。BRDF描述了光与物体表面是如何相互作用的。即物体的材质属性由BRDF定义。

fr(wi−>wr)=dEi(wi)dLr(wr)=Li(wi)cosθidwidlr(wr)
反射方程(TheReflectionEquation)
BRDF告诉了我们特定入射方向光线对特定出射方向的能量反射比例。而当我们观察物体表面的某一点时,该点反射的能量汇聚了各个不同方向的入射光线。对于每一条光线,都可以通过BRDF计算出其特定出射角度的反射比例。因此某一点特定出射方向的反射能量等于该点各个入射方向BRDF的半球积分。这就是反射方程。

Lr(p,wr)=∫H2fr(p,wi−>wr)Li(p,wi)cosθidwi
递归性
假设观察某一着色点,需要考虑到达该着色点的各个光线,这些光线有些是直接来自于光照的,有些是来自于其他物体的反射。也就是说着色点接收来自各个方向的光线经过BRDF计算求和形成Radiance,而出射的Radiance又可以照亮其它物体,成为照亮其它某个着色点各个不同入射方向Radiance的某一部分。这样就形成了递归。

渲染方程(The Rendering Equation)
反射方程告诉我们某一点特定出射方向的反射能量等于该点各个入射方向BRDF的半球积分。但是
反射方程没有考虑物体自身的发光情况。而物体的自发光也是需要参与到计算中的,完善反射方程,加上自发光部分就得到了渲染方程:
渲染方程 = 自发光项 + 反射方程
Lo(p,wo)=Le(p,wo)+∫H2Li(p,wi)fr(p,wi−>wo)(n^⋅wi)dwi
抽象渲染方程
Lo(p,wo)=Le(p,wo)+∫H2Li(p,wi)fr(p,wi−>wo)(n^⋅wi)dwi
->
L(u)=e(u)+∫L(v)K(u,v)dv
->
将积分省略,抽象为算子的形式(K)
L=E+KL
->
IL−KL=E
(I−K)L=E
L=(I−K)−1E
L=(I+K+K2+K3+...)E
L=E+KE+K2E+K3E+...

通过将方程用K算符简化,我们将渲染方程拆解成了自发光项,直接光照,间接光照。所有这些因子共同构成了全局光照。
参考
GAMES101 -现代计算机图形学入门-闫令琪
《3D数学基础》图形和游戏开发(第二版)