环境光照
用一张图记录在场景中一点从任何一个方向看所接受到的光照。(默认光照来自无限远)只能用于着色,不能用做阴影
从环境光照获取某一点的着色
这种技术被称之为IBL(Image-based lighting)
获取颜色的方法即为解相应的渲染方程

如果用通用的蒙特卡洛积分,会导致计算缓慢。需要采用其他方法避免采样。
BRDF是glossy的,那么它反射的光线的影响范围是比较小的。
BRDF是diffuse的,那么的朝四周反射的光线的值是变化不大的。
这正好满足的积分拆开的条件。


g(x)为平滑或者影响范围比较小的函数,拆出来的函数只需要在g(x)的影响范围内积分就好了。
将之前的渲染方程拆分:

拆出来的部分即为黄色框内的部分。该部分所表达的意思即为将BRDF所影响的范围内的光照加起来并平均一下。实质上就是将图片周围的像素点加起来平均一下,实际上就是将图片进行模糊。
可以预先将环境光图片进行不同程度的模糊(核取1* 1,2* 2, 4* 4,···),之后在使用的时候可以根据brdf影响的范围在相应的图上获取光照,没有的也可以在相邻的两张图之间进行插值得到。由于是预计算得到的图,在运行时的速度将会很快。


对BRDF项进行简化:
积分BRDF项是不明智的,但是如果直接对BRDF进行预计算的话,其未知参数过多,会导致预计算的量大幅增加也是不切实际的。所以,需要先简化BRDF,降低维度,才能更好的进行预计算。
BRDF采用Mocrofacet BRDF,我们只需要关心F和D两项。

F项和D项原本就有数学上的近似公式:

两个函数之间有4个变量,由于两个角度之间有一定的关系,可以变为一个变量,即目前BRDF项中还有3个变量。(R0为基础反射率,θ为角度,α为粗糙度)3维的预计算还是代价太大,需要进一步进行简化。简化的方法即为将其中一个变量拆分到积分外。

该近似将F项显示地写出来,然后将其中地R拆出来,这样几分钟就只剩两项了,2维的预计算是可以接受的。

注意:对于R0不一样的场景,图片也是不一样的
为何不能生成阴影:

可以把环境光看成是来自四面八方的光照,即很多个光源。如果要为其生成阴影,就要生成非常多的ShadowMap,这在消耗上是不可接受的。
把它看成解渲染方程的问题:里面的V项是难以计算的。并且由于L项是影响大范围的,Brdf项如果是glossy又是高频,diffuse又是影响大范围的,也难以将v项单独拆分出来。所以很难考虑将V项单独拆分出来。
PRT
可以用于生成非常准确的来自环境光照的阴影。
基础知识
关于频率和滤波

傅里叶级数可以将任意一个函数由若干sin,cos项线性组合而成。这些函数被称为基函数。并且这些函数的频率是越来越高的,越高频率的函数意味着越丰富的细节。


对于一张图,颜色变化不大的区域被称为低频部分(脸),颜色变化剧烈的部分被称为高频区域(边缘)将图片转化维频谱图,高亮部分即为低频部分,其他部分即为高频部分。
所谓滤波,就是将一张图的某些频率的内容删除。
下图是一个低通滤波器对一张图的滤波,可以发现,滤波之后仍然能够保留图片的大致内容。说明一张图的大部分内容其实是低频的。

对于图片的卷积,相当于对于频率的乘积。
可以看出,卷积操作后留下了图片的低频部分,说明频率的乘积,由低频的频率起主导作用。即为高频和低频相乘,得到的结果也是低频的。

一般认为,两个函数乘积再积分,可类比为两个频谱的乘积。
低频函数一般是变化不大的函数。
两个函数相乘,由低频函数占据主导地位。
球谐函数:

球谐函数就是一系列定义在球面上的2维基函数。它们有不同的阶数,阶数越高,频率越高,所描述的信息越丰富。基函数的数量也会随着阶数的增加而增加。

球谐函数在代表任意函数的系数可以直接通过上述积分解得(两个频谱的乘积)求该系数的过程被称之为投影(类比在二维坐标系中将一个向量投影到xy轴)
SH应用例子:计算diffuse物体的环境光着色

滤波(模糊)一张图后对其进行一次采样,相当于不滤波对一定范围内进行采样后取平均。

对于着色,渲染方程不需要考虑V。不考虑V后渲染方程就成为了L和Brdf乘积的积分,即可把这个看作是两个频率的乘积。L是复杂的光照,显然是一个高频的,而diffuse的brdf,由于其变化很小,显然是低频的。而高频和低频相乘,由低频其决定作用,即diffuse的brdf就像一个低通滤波器,将光照的高频部分全部删除了。上图表格明显可以看出,使用球谐函数表示brdf(brdf可以看成是一个在着色点周围的球面函数)后,在3阶之后,系数基本上趋于0,即没有什么高频信息了。

由于低频函数决定乘积结果,那么高频的光照便不需要使用更复杂的球谐函数来进行描述。和brdf采用相同阶数的球谐函数即可得到十分真实的光照效果
参考资料
Games202
340

被折叠的 条评论
为什么被折叠?



