全局照明(Global Illumination)问题上已经有很多著名的算法,如路径追踪(Path Tracing),辐照度(Radiosity)等。绝大部分书籍/教材都直接介绍了做法,在理论方面有所欠缺(比如算法的正确性)。这段时间在看《Advanced Global Illumination》,大呼爽快,所以做了这些笔记。
<font size="3"><strong>一、方向和立体角</strong></font>
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
立体角(Solid Angle)是平面角的推广。如上图,考虑一块不规则的曲面,其在单位球体(球心在原点,半径 r = 1)上的投影为曲面 A ,则 A 的面积 S 为该曲面对应的立体角Ω。根据定义易知,任何包含原点的球体对应的立体角都为 4π 。如果用球坐标 ( θ φ, ) 来刻画立体角,那么其微分 dw 可以被表示为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
此外,根据立体角的定义,可以给出任何曲面元对应立体角的计算公式——
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
其示意图如下:
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
<font size="3"><strong>二、Radiance的定义</strong></font>
考虑密度函数 p ( x , t , w, λ ),它给出在时空坐标 ( x , t ) 处单位体积内沿方向 w 、波长为 λ 的光子的数量。那么给定位置 x<sub>0</sub> 、时间 t<sub>0</sub> 、方向 w<sub>0</sub> = ( θ<sub>0</sub> φ<sub>0</sub>, ) 以及波长 λ<sub>0</sub> ,容易知道单位时间内沿方向 dw 通过面元<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程">的、波长在 [ λ<sub>0</sub> , λ<sub>0</sub> + dλ ] 间的光子的能量为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
其中<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程">是这些光子的速度。在波长范围 [λ<sub>start</sub> , λ<sub>end</sub> ]、全体立体角 Ω 、曲面 A 上对 d<sup>3</sup>φ 积分得
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
这就是曲面 A 上的辐射通量(Flux)的定义。
类似地,定义辐射照度(Irradiance)为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
辐射强度(Intensity)为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
以及辐射亮度(Radiance)——
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
这几个量间有以下关系:
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
<font size="3"><strong>三、Radiance的守恒性质</strong></font>
从 L 的定义可知,Radiance是空间位置和方向的函数可以写作<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;,表示从空间位置 X 出发、朝向<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…。(类似地,( x → y ) 表示空间位置 x 处朝方向<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…)若 x 与 y 间没有遮挡,则有以下重要性质成立:
<center>L ( x → y ) = L ( y → x )</center>
证明:
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
如上图,由Radiance的定义有
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
其中 d<sup>2</sup>φ 是从 dA<sub>x</sub> 出发向 dA<sub>y</sub> 发射的能量。根据能量守恒,它们必定都被 dA<sub>y</sub> 接收,即
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
又由立体角的性质
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
代入得
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="全局照明算法基础——从辐射亮度到渲染方程"></center>
整理即得 L ( x → y ) = L ( y → x ) 。
<font size="3"><strong>四、以Radiance来量度传感设备响应</strong></font>
摄像机、人眼等感光设备所得到的光的量度可以用Radiance来衡量,而非Flux等。由此可以得出一些结论,比如一个明亮的物体随着观察者距离的增加不会显得更暗,这是因为在光的传播过程中Radiance不随距离改变。
<font size="3"><strong>五、BRDF</strong></font>
一束光照射到某个表面上,反射的效果随着表面的材质有所不同。譬如,理想的镜子会把所有的入射光反射到某个特定的方向,而在其他方向上的反射光为0;理想的Lambertian表面会把入射光往所有的方向均匀地反射。反射光在不同方向上的多少分布,再结合入射光的方向所构成的函数,称为bidirectional reflectance distribution function(BRDF),记作<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="">,表示沿<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt="">方向照射到 x 处的光在<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…。准确地说:
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt=""></center>
并非所有的物体表面的反射都能用BRDF来建模,譬如通透的玉石(入射光可以从某一处进入玉石内部,然后从另一处穿出)等。一个把透明物体的表面纳入考虑的函数叫做bidirectional scattering distribution function(BSDF),它描述了所有方向的入射光和出射光的分布;Bidirectional surface scattering reflectance distribution function(BSSRDF)则更加强大(使用起来也更为困难),它可以描述前面提到的通透的玉石对光的作用。在这里,为了简化问题,假设所有的物体表面都使用BRDF描述。
<font size="3"><strong>六、BRDF的几个性质</strong></font>
由BRDF的性质可知,某不透明的、不发光的表面上某一点 x 处朝<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…,可表示为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…; alt=""></center>
其中<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18… src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18… src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…。根据BRDF的定义有
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
于是,
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
该式在之后会介绍的渲染方程中扮演了重要的角色。
Reciprocity:规定任意BRDF满足<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;,由此,不妨将BRDF记作<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;。
能量守恒:单位面积的入射能量为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
而单位面积反射的总能量为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
于是由能量守恒:
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
<font size="3"><strong>七、渲染方程(The Rendering Equation)</strong></font>
<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…:x 处自身向<img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18… x 点反射外来光产生的光。即
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
其中 L<sub>e</sub> 是自发光项,L<sub>r</sub> 是反射项。根据6中的推导,反射项 L<sub>r</sub> 可以被表示为
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
代入得
<center><img src="http://imgtec.eetrend.com/sites/imgtec.eetrend.com/files/201810/blog/18…;
这就是所谓的渲染方程。可以看到该方程是递归的,且包含了一个不易计算的积分(只有在某些极简单的场景下才能求出解析解)。几乎所有的全局照明算法都是在求解渲染方程,因此称其为图形学的理论基石之一也不为过。
本文转自:博客园 - <a href="https://www.cnblogs.com/AirGuanZ/p/6389628.html">AirGuanZ</a>,转载此文目的在于传递更多信息,版权归原作者所有。