Yan's Studio.

理解渲染方程

Word count: 947Reading time: 3 min
2021/03/29

渲染方程知识在反射方程的基础之上添加了一个自发光项(Emission term),从而使得反射方程更加的general:

其中为自发光项,反射方程中的用,代替。 (tips:所有光线方向均指向外)
接下来从一个点光源和单个物体的场景开始理解渲染方程:

(点光源对一个点来说自然只有一个方向有入射光,所以这里没有了积分)
多个点光源一个物体的情况:

将这些所有的点光源的贡献全部求和即可,那么如果点光源变成了面光源呢?如下图所示:

其实面光源就相当于无穷多个点光源的集合,只需要对 面光源所在的立体角范围进行积分,并且能够确定不同立体角方向的面光源的入射光radiance即可。
那么更进一步的,再在场景当中加入其它物体,使得物体之间发生光线交互之后是什么情况呢:

如上图所示,可以把其它物体同样考虑成面光源,对其所占立体角进行积分即可,只不过对其它物体的立体角积分不像是面光源所有入射方向都有radiance,物体的立体角可能只有个别几个方向有入射的radiance(即多次物体间光线反射之后恰好照射到着色点x),其它方向没有,但本质上都可以视作是面光源。
观察一下图中的渲染方程可以发现除了两个radiance,其它所有项都是知道的,可以将上式进一步写成如下图下方所示的式子:

其中各项与原渲染方程中一一对应,(这里其实是有数学严格推导的,不过我们只是为了接下来构建直观的物理解释,对于这些推导不必在意,默认成立即可),再接着,可以把该式子离散化写为线性代数的形式:

呼,经过两步我们不是很清楚但其实是正确的数学推导之后,得到了这样一个式子:

其中L其实就是想要求得的反射光,E是自发光其实就是光源的发光项,K可以理解为对光线进行反射的一种算子操作(因为它由BRDF化来的)。那么利用线性代数的知识很容易就可以推导出L的结果如下:

其中为单位矩阵,再接着对使用广义二项式定理得到:

仔细观察这个式子,注意E是光源所发出的光,K为反射算子,这样一个式子的物理含义如下图所示:

E为光源发出的光,KE则代表对光源反射一次的结果,即直接光照,那么前两项之和就是光栅化当中着色所考虑的结果,对于全局光照来说,还考虑了,即一次弹射的间接照明,就是两次弹射的间接照明,依次类推。
这样来看整个结果是不是就很清晰了,就是光源发光加上直接光照与多次间接光照的结果!而这一切都是从渲染方程推导而来的,因此这也正是渲染方程的物理意义!
最后以几张基于物理渲染的图片作为本篇文章的结束 一次反射直接光照:

两次反射,考虑到一次弹射的间接光照:

3次反射,考虑到两次弹射的间接光照:

(考虑次数越多越接近真实图片效果,趋近收敛)

CATALOG