这里将纯方向光源定义为来自无限远处、面积无限大、且发出的光线方向只有唯一方向的光源。例如日光。
常见的路径追踪算法中,为了避免随机采样导致小光源难以被射线击中的问题,可以使用直接光源采样(Direct/explicit light sampling)方法。
这种方法将一个点的Radiance分类讨论为两种:
- 直接光照,对光源表面进行积分,直接计算出光源对Radiance的贡献
- 间接光照,对立体角进行积分,递归的计算出非光源对Radiance的贡献
通过这种方式,即可避免小光源难以被命中的问题。
但是这种方式只适用于面积有限的非方向光源,而对于纯方向光源来说,无法通过对光源表面进行积分来进行计算(因为正如上文所说,纯方向光源是无限大且方向唯一的)。
为了求解纯方向光源的直接光照,我们先来看一下渲染方程的定义:
公式中各项的定义与Wiki一致(本文省略了波长、时间等无关变量)。
其中,BRDF项的定义为:
需要注意,
由于纯方向光只具有唯一方向,因此只在该方向上能够给
其中,
然后根据
同时由于光源必定对Radiance有贡献(不考虑遮挡),因此必有:
进一步有:
而由于
根据狄拉克δ函数的性质有:
又由于Radiance的单位为
最终得到的纯方向光渲染方程为:
这里
综上,为了处理纯方向光源,这里需要引入另一种光源的定义方式:即通过Irradiance定义纯方向光源。而体积光源则通过Radiance来定义。其中,前者使用本文最后变换得到的渲染方程进行计算,后者通过原始的渲染方程进行计算。
参考文献: