Image-Based Lighting

Split Sum

在使用cube map, spherical map做背景贴图时,需要计算贴图带给shading point的影响,我们叫做Image-Based Lighting (IBL)
Split Sum就是用于计算IBL的算法,无法考虑阴影

image

还是使用The Rendering Equation,但先不考虑阴影

image

常规方法就是Monte Carlo Integration,但是每次做shading需要多次采样,在时间上是无法忍受的
我们想对The Rendering Equation找到近似的快速解

我们将shading point粗略分为两种,一种是glossy,一种是diffuse
如下图,左边的glossy材质,右边的是diffuse
\(i\)代表入射光线,\(r\)代表反射光线
对于一条入射光线,glossy材质的反射光线范围非常集中,代表它The Rendering Equation中积分范围比较小
而对于diffuse,反射光线均匀地去向球面上任意一点,也就是BRDF是非常均匀的

image

满足这两个条件之一,就可以使用如下的约等式

image

就可以把The Rendering Equation拆成如下形式

image

在实时渲染中,也写作如下形式

image

我们将两个项,一个Environment项,一个BRDF项的积分分开计算,这种算法叫做Split Sum

Environment积分

The Rendering Equation拆出来的Environment项,就相当于对环境贴图做一个filtering
我们可以用类似mipmap的思路来存储不同大小卷积核得到的filtering

image

对于glossy材质的,只需查询反射光线那一块的filtering结果
对于diffuse材质的,则是查询整个贴图的filtering

image

BRDF积分

image

BRDF的积分,我们希望用预计算的方法来提前存储每个位置的BRDF,但这个被积函数是相当高维的,无法直接存储
我们希望能将被积函数化简

我们用微表面理论的模型将BRDF拆开

image

然后再将Fresnel Term用Schlick's Approximation拆开

image

可以把BRDF的积分写成如下形式
image

其中BRDF中的Fresnel Term被约去,\(D(h)\)项用如下式子拟合
其中\(\theta_h\)我们可以看作和入射夹角\(\theta_i\)近似,用\(\theta_i\)代替,于是\(D(h)\)也可以用\(\theta_i\)表达
BRDF中其他项都是可以即时计算得到的
image

最终BRDF的积分就可以表达成用\(\theta\)\(R_0\)的二元函数,可以预计算存储

image

Precomputed Radiance Transfer

PRT也是用于计算IBL的算法,可以考虑阴影

球谐函数

球谐函数SH (Spherical Harmonics) 是一系列定义在球面上的二维函数 SH(\(\theta, \phi\))

如下是球谐函数的可视化,绿色代表正,黄色代表负,越亮绝对值越大
我们按照一定标准将这一系列函数分类
如图,按照\(l\)分为不同层,每层用\(m\)来标记每个函数,而且\(l\)\(m\)之间遵循一定规律
\(l\)越大,函数变化越剧烈,也就是在频域上频率越高

image

对于任意的球面函数\(f\),我们可以把这一系列球谐函数当作基底basis function
将这一系列basis function做线性变换,我们可以得到\(f\)

其中每个basis function的数乘系数\(c\),有如下规律
\(c\)也叫\(f\)在basis function上的投影
image

这样可以很容易地将任意球面函数转化为用球谐函数表达

求解

如果要渲染Diffuse材质的物体,BRDF是均匀的常数,那么代表BRDF在频域上频率较低
用球谐函数来拟合Diffuse BRDF
如下图,\(l\)是球谐函数的层级,\(A_l\)代表占比,发现拟合几乎不需要用到第三层以上的高频球谐函数

image

在The Rendering Equation中,我们将光源项和BRDF项相乘后做积分,这就等同于卷积操作
卷积操作得到的结果函数的频率是和两个被卷积函数中频率较低的保持一致的

image

也就是说光源项和BRDF项卷积的结果,也就是shading的结果,也和Diffuse的BRDF一样,是低频的
这也代表着光源项并不需要保留高频信息,我们可以只拟合光源的低频信息就可以做出差不多的shading

经过验证,如果环境光用\(l<=2\)的球谐函数拟合,shading的结果和正确的基本一致

image

对于Diffuse材质的求解
我们将The Rendering Equation进行转化

  1. 把Diffuse材质的常数BRDF提出来
  2. 将Lighting用球谐函数线性运算拟合(这里把先求和再积分,和先积分再求和看作等同,把求和提到外面)

image

其中积分是关于入射角\(i\)的函数,我们可以预计算
最终The Rendering Equation在渲染IBL时只需要两个步骤,非常高效

  1. 计算Lighting在球谐函数上的投影\(l_i\)
  2. 计算点乘求和

对于Glossy材质的求解
对于Glossy材质,我们无法把BRDF当成常数,需要一起投影到SH上
我们将整个被积函数根据入射角度\(i\)投影到SH上后,得到的T是关于出射角度\(o\)的二元函数\(T_i(o)\)
我们再将\(T\)根据出射角度\(o\)投影到SH上,得到投影系数\(t_{ij}\),所有系数组成一个矩阵,叫做transport matrix
每个shading point都预计算它的transport matrix,在rendering时,就是两次product integral

image

PRT的优点在于它运算的高效,而且可以把阴影也一同计算得到
缺点在于,它要求场景不能发生变动,否则预计算的\(V_i\)项就失效了

如果光源发生旋转,因为球谐函数有优秀的性质,还可以保留预计算
在Lighting发生旋转后,Basis Function \(B_i\)也会发生旋转,但旋转得到的新Basis Function,一定还能通过球谐函数线性变换得到
这样子使得预计算仍然有效,正常计算投影\(l_i\)即可

小波

小波可以用于替代SH作为Basis Function
函数的样子如下,其中每个函数都是平面上的二维函数,而且有效域不同

image

我们将Environment Map展开成六面的Cube Map,每一面都单独去投影到所有的小波函数上,其中如果投影接近0,则舍去

image-20220809223038867

这样可以保留所有频段的信息,对于specular效果更好
但是无法满足光源旋转的要求

image

posted @ 2022-07-21 09:44  wcvanvan  阅读(335)  评论(0)    收藏  举报