讲解Ambient Occlution的原理与高级应用
导言:
Ambient occlusion也就是大家熟知的环境遮挡,简单点说,就是一个取样点上被其他几何体覆盖的程度,它是被通常用来模拟全局光照效果的简单方法。
下面教程开始
环境遮挡的原理
基本的原理跟final gather类似,其取样点的生成是一样的。
首先从摄像机发出取样光线,取样光线和物体的交点,就是我们说的取样点,然后从取样点发出次光线(probe rays)。
接着Ambient occlusion和fg就不一样了。Ambient occlusion的次光线是每一条光线是否被周围的物体所遮挡,如果遮挡了直接返回值,不做任何的Shader计算,也就是取样点的周围被物体阻挡着不让看到背景的百分比;fg的次光线不太一样,他的次光线与周围的物体相交以后,它要求焦点处的颜色值,然后返回的是颜色值,而不是Ambient occlusion的真假值。
最后也是不一样的,作为Ambient occlusion,每一个取样点其实就是渲染时输出的色彩值,而fg只是为渲染时的fg point,它代表着要渲染点附近的光照,在渲染时用来产生照明。(图01)
图01
下面我就结合MentalRay for Maya,跟大家一起讨论一下Ambient occlusion的一些应用。MentalRay for Maya中有三个节点是我们在使用环境遮挡时需要用到的,mib_amb_occlusion,mib_fg_ occlusion,mib_bent_normal_env,如下图。(图02)
图02
环境遮挡的使用
在介绍实际的应用之前,我们用一个简单的场景作介绍,场景中只有一盏物理灯。默认渲染如图。(图03)
图03
Ambient occlusion(AO)经典的环境遮挡效果,也被称为漫反射遮挡(Diffuse occlusion),可以用来缩放对材质环境光的贡献,它一般赋给材质的环境光参数(Ambient),更进一步说他最好赋给Lambertian材质。如下图。(图04)
图04
渲染的效果如下图。(图05)
图05
现在暗部的细节出来了,可见AO很好的模拟了全局光。
Reflective occlusion发射沿着反射光线的方向发射次光线,而不像Ambient occlusion那样以物体表面的法线方向为中心发射次光线,下面的示意图说明了之间的不同。(图06)
图06
在MentalRay for Maya中实现起来很简单,只需要将mib_amb_occlusion节点参数中的Inflective打开就行了。(图07)
图07
同时我们可以调整小spread的值为0.1,使得反射遮挡的效果更加明显,渲染效果如图。(图08)
图08