Skip to main content

1.6 渲染方程

好了,我们终于具备一切基础知识去理解和推导渲染方程(the rendering equation)了。全局光照算法的目标就是计算光束在场景传播以及与物体的交互过程中的能量传递,基于物理的全局光照技术要求整个场景在光照传播过程中保持能量守恒。

在前面的内容中,我们用LiL_iLoL_o来分别表示入射光和反射光的辐射亮度,这在描述单纯的光与表面交互(反射和折射)那样简单的场景下很容易理解。然而为了推导光照公式,我们将用另一种方式来表述辐射亮度,我们用L(xωo)L(x\to\omega_o)的方式来表示光从位置xx向方向ωo\omega_o发射,箭头用来表示光束的方向。

前面讲过,在光照计算中我们最终感兴趣的是辐射亮度LL,假设Le(xωo)L_e(x\to\omega_o)表示光源或发光物体在点xx处沿ωo\omega_o方向的辐射亮度,Lr(xωo)L_r(x\to\omega_o)表示物体在点xx处沿ωo\omega_o方向的来自反射或折射的辐射亮度,则根据能量守恒定律:

L(xωo)=Le(xωo)+Lr(xωo) L(x\to\omega_o)=L_e(x\to\omega_o)+L_r(x\to\omega_o)

(式1

通过前面的BRDF定义(注意,大多数图形学直接使用BRDF来解释渲染方程,然而真正的渲染方程还需要包含折射部分,所以以下我们在描述渲染方程的时候,BRDF实际上是指BSDF。):

fr(x,ωiωo)=dLr(xωo)dE(xωi) f_r(x,\omega_i\to\omega_o)= \cfrac{{\rm d}L_r(x\to\omega_o)}{{\rm d}E(x\leftarrow\omega_i)}

(式2

所以:

Lr(xωo)=Ωxfr(x,ωiωo)L(xωi)cos(Nx,ωi)dωωi L_r(x\to\omega_o)={\rm \int}_{\Omega_x} f_r(x,\omega_i\to\omega_o)L(x\leftarrow\omega_i)\cos(N_x,\omega_i){\rm d}\omega_{\omega_i}

(式3

其中,Ωx\Omega_x表示沿xx点法线方向的半空间,如果是折射光则是法线反方向的半空间。所以我们得到最终的渲染方程为:

L(xωo)=Le(xωo)+Ωxfr(x,ωiωo)L(xωi)cos(Nx,ωi)dωωi L(x\to\omega_o)=L_e(x\to\omega_o)+{\rm \int}_{\Omega_x} f_r(x,\omega_i\to\omega_o)L(x\leftarrow\omega_i)\cos(N_x,\omega_i){\rm d}\omega_{\omega_i}

(式4

渲染方程可以称为弗雷德霍姆(Fredholm)第二类积分方程,因为它的未知项,辐射亮度LL同时出现在方程的两边,这使得渲染方程的计算非常复杂。然而到这里,我们暂时只需要记住这个最简洁优雅的形式,在后面的章节我们会对这个方程从另外的视角转换成另一种形式,例如为了推导光线追踪技术,我们将会把它转变成针对面积进行积分;为了使用Radiosity技术,我们需要计算某个面积的出射度BB而不是辐射亮度LL;我们也会讨论各种方法来计算或者近似渲染方程,等等。

光线路径表达式

在开始介绍路径追踪技术之前,需要首先介绍一下光照路径表达式的概念。光照路径表达式(light path expressions)是全局光照算法中一个非常有用的工具,它可以用于度量一个全局光照算法中从光源到摄像机所能形成的路径形式,它可以用以指导这些算法是否应该增加或减少某些光照路径的采样密度来实现不同的效果。例如,焦散路径(caustic path)可能会导致很多噪点,除非使用代价高得多的采样数量,因此有些路径追踪算法可以直接忽略掉焦散效果以减少噪点;此外,区分漫反射和光泽反射也是减少噪点的一种必要手段。

光照路径可以使用[cite a:Adaptiveradiositytexturesforbidirectionalraytracing]中提到的简明的形式进行表示:EE表示摄像机,LL表示光源或发光体,DD表示一次漫反射,SS表示一次光泽反射,VV表示体积内的散射,|表示对两边的路径取或,*表示零次或多次重复,++表示一次或多次重复,[x][x]表示路径是可选的。

有了这些基本标记,我们就可以简明地表述各种从光源到摄像机的路径,例如从光源直接到摄像机的路径可以表示为LELE,从光源出发只经过一次反射(直接光照)的路径可以表示为L(DS)EL(D|S)E,至少两次反弹的间接光照可以表示为L(DS)(DS)+EL(D|S)(D|S)^{+}E,等等。