1. 【Siggraph2020】Point Light Attenuation Without Singularity
这篇文章给出了对点光计算公式的修正算法,从而避免了在到光源距离接近于0时亮度趋近于无穷大的奇异值,这个算法相对于传统的直接在分母中添加常量c的做法,其进步之处在于为常量c添加了物理意义,使得取值更为精准。下面给出相关推导过程:
首先,基本的采用BRDF的光照反射计算公式给出如下:
而如果我们只考虑点光源的话,那么这里的积分就可以直接收缩为一个点的输入,那么就有如下的公式:
其中为光源的可见性函数,
对应的是光源到像素的距离,而
为点光的衰减函数。我们可以看到,点光衰减函数在距离
趋近于0的时候,会接近于无穷大,从而出现一个光照的奇异点,虽然这就是点光的基本特性,但是由于点光本身就是一盏虚拟光源,因此这个结果并不是渲染所需要的,为了消除这个奇异值,我们尝试换个角度来思考问题,比如我们将点光看成是一个带有一定半径的球面光源(比较符合实际),那么此前的反射光照公式就变成了如下的形式:
如果球面足够小,上述公式可以近似为如下公式:

而上述公式中的积分部分按照上面的示意图,可以得到结果为(相当于求取球面上的面积,先沿着半径方向积分,再沿着圆周积分,参考Wiki):
接着可以得到
根据三角函数的关系,可以转化为:
这个公式需要满足一定的条件,比如等,此外当
趋近于0的时候,利用泰勒展开,上面的公式可以收缩为
跟点光源计算公式完全一致,而我们在使用点光源的时候,为了避免奇异点,通常会在分母中加一个常量c:
如果我们取,那么此时就有
,
即
,最终我们得到:
网友评论