Ambient Occlusion简称AO,中文译名不太好定,过去的书籍和网络上有叫“环境遮挡”的,也有叫“环境光散射”、“环境光吸收”的,如Maya中的Bake AO似乎就一直是译成“烘焙环境吸收贴图”的。要不沿用一下就叫它“环境吸收”或者“环境光吸收”?!
AO这项技术最早是在Siggraph 2002年会上由ILM(工业光魔)的技术主管Hayden Landis所展示,当时就被叫做Ambient Occlusion。象RenderMan系列渲染器中的PRMan、BMat以及Maya、Blender等软件引入AO技术较早,Softimage|XSI与Cinema 4D是在Siggraph 2005上发布的版本中增加AO的......
在Max的渲染器中,除Mr较早外,最近的fR Stage-1 R2.0和VR 1.5RC3才见AO现身。对此,我打个玩笑的比方:如果对Max中四大渲染器的AO来划“阶级成分”的话,mr算是“地主”了,它的AO Shader资历最深、家产最多,除本能外还可以放入相机、灯光Shader来计算和控制,高级用户更可自行编程,另外新增的“建筑与设计材质”也内置了“AO特效”;fR可算“富农”,因为AO Shader同样拥有用作灯光、遮罩、融合以及反射的“资本”,但终因无QMC之故AO虽快却质差,所以是“暴发户”一类的;VR差不多算“中农”吧,虽然就一个“Dirt”倒也能自给自足,不花哨从而保持了“本色”;而Br就是贫农了,因为它目前尚不拥有AO(但它基于QMC的GI似乎可以抗衡其他渲染器GI+AO效果,而且据说最新的2.0版本在整体速度上已经超过了VR 1.5RC3)。
二、AO的原理与作用
先看一段小文字:
《鲨鱼故事》(Shark Tale)是2005年第77届奥斯卡金像奖“最佳动画长片”提名的三部影片之一。为了更好地达到“绘画感”这个需要,总美工设计师皮埃尔特别用到了软区域阴影和反射光,即利用环境光来模拟柔和阴影,这是当时非常流行的一种新的灯光技术,称为“Ambient Occlusion”(梦工厂称之为“exposure”<曝光>),它能够为表面上的每一点精确计算来自天空的自然光量,这样处理的结果就像是一张阴天状态下曝光极好的灰度照片。然后将Ambient Occlusion Pass(AO层)与环境灯光合成,这样,CG元素与实拍的素材就非常自然地结合在一起了......
3D软件(渲染器)中AO的原理是统一的,Max中mr、fR、VR的AO也是几乎一致的(只是可控性和功能、用途有所不同)。顺便提一下,如果有些使用VR的朋友确实认为mr或fR的AO既快又功能多的话,那么不妨结合了使用,就是说“VR原始渲染+mr或fR的AO”进行合成,这其实也是我最近想到的一个思路。但就目前而言,我还是很喜欢VR的AO,因为它操作简单灵活、效果真实细腻。
What is occlusion ?
To simplify the explanation, just think of a situation when all your objects have a simple white color and your scene is lit equally from all directions by a white light. Basically this should result in a blank white image, but what happens when some objects block a certain amount of rays that should have gotten to other objects ? those rays don't reach the other object and as a result, the parts where the rays were blocked will become darker. The more rays blocked, the darker the surface will be. So basically what we get is a white image with dark areas where geometry intersects with itself.
什么是Occlusion?
简单的来解释,那就想象一下这样的一个情形:当场景中所有的物体都是单一白色并且是由一个白色灯光来产生均匀的直接照明,那么基本上,结果就是得到一个苍白的图像。但是当某些物体阻挡了相当数量的本应投射到其他物体的光线时,那将会发生什么呢?这些光线没有到达那些物体,结果就是被光线阻挡的地方变得较暗。越多光线被阻挡,表面就越暗。所以基本上我们得到的是一个带有自身几何相交暗区的白色图像。
Why using it ?
The resulting occlusion pass gives very accurate and smooth shadows that resemble the result of global illumination. Compositing these shadows over your final render can significantly improve your image in many ways, it can mainly improve your shadows, give more depth to your scene and really helps to better show all the details of your models.
为什么使用它?
Occlusion pass的结果就是贡献了非常精确和平滑的阴影,就好像是全局照明的结果。在你最终渲染后有多种方法来合成这些阴影会在真正意义上改善图像,它主要能改善阴影,给场景更多的深度,真正有助于更好的表现出模型的所有细节。
AO采用快速而廉价的算法来模拟全局照明模式。其大致计算过程是在几何体表面任意一点的上方,用半径预定的半球探测该点的外部区域,从而决定光线是否在该几何体表面上该点处被其他几何体阻挡,或者,被吸收。一旦各点的吸收幅度确定,则几何体表面会形成一张灰度级的映射图,用以调制环境光对该几何体表面的贡献,映射图中明暗区域均按比例调节其对环境光吸收的强弱程度。
我用比较通俗的话来总结一下:AO不需要任何灯光照明,它以独特的计算方式吸收“环境光”(同时吸收未被阻挡的“光线”和被阻挡光线所产生的“阴影”),从而模拟全局照明的结果(enhance GI or fake GI),它主要是通过改善阴影来现实更好的图像细节,尤其在场景物体很多从而到处阻挡着光线导致间接照明不足时,AO的作用会更加明显。
附上4个链接,第1个是纯理论,其余3个是跟mr AO有关的教程(其中都涉及到了共通的原理),有兴趣的朋友不妨看看。
Ambient occlusion:
http://en.wikipedia.org/wiki/Ambient_occlusionAmbient occlusion pass guide:
http://zivcg.com/occtutorial.htmlOcclusion in 3dsmax 7:
http://www.3dm3.com/tutorials/occlusion3DS Max 7: MentalRay: Ambient Occlusion:
http://www.everflow.com/support/tuto...cclusion1.html下面2张图【图05-06】是mr的AO示意,因为fR和VR的AO出来太晚,一时找不到图示,只好用mr的了,但原理是一样的。请大家尤其注意一下第2张图,两个物体正下方的阴影(其中立方体因为距离远故平面吸收的阴影就很浅),以及球体左上方受到立方体“阻挡”光线而吸收的阴影。

客观的说,尤其是以前AO更多的被应用于CG类图像包括插图。而随着人们认识的加深以及做图的需要,AO也逐渐被用到了工业造型、建筑与设计的表现上来,如高档轿车的设计展示每每被用到了AO(尤其是mr渲染),而在建筑外观以及室内设计表现中也越来越多的见到它的身影。这也证明了fR、VR于(最)新版本推出AO不无目的吧。
如果要说AO的意义所在,我是这样解释的:即使你把花在制作AO Pass上的甚至更多的时间,都用来提高原先的采样和精度,你也无法渲染出(哪怕类似于)AO带来的效果!尤其是渲染质量较低的图像,可以得到很大的改善!况且AO的渲染相对较快,如果有空余电脑利用了渲张AO Pass那更是不耽误时间。若是觉得要多出一道“合成”工序来,其实不然,因为最终的图基本都要PS过的吧,而AO Pass在PS里“合成”进去只不过是举手之劳而已,呵呵!
那么要问AO到底能带来哪些效果(好处)呢?具体的说,AO可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强和改善画面明暗对比,增强画面的艺术性。
三、AO的制作与合成
作为比较,大家可以看看mr、fR和VR的AO参数面板,是否感觉大同小异【图07】。
VRay官方网站ChaosGroup论坛上有一个帖子标题是 Ambient Occlusion vs Dirtmap ,作者因为不理解所以认为VRayDirt不是真正意义上的AO,他还以VRayDirt图【图08】跟MR AO图【图09】相比来咨询。论坛老大也是VRay开发者之一的Vlado解释到:VRayDirt works more or less in the same way as MR ambient occlusion.(VRayDirt或多或少是跟MR的AO起同样作用的),并且建议:You simply need a larger radius for the "dirt" effect. Also, if you are simulating AO, you need to set the distribution parameter to 1.0.(你只需要一个较大的半径值给Dirt效果。同时,如果你是模拟AO,那么你需要把distribution“分布”参数设置为1.0)。作者根据建议再次测试,得到了下图【图10】,同时他也感叹到:More testing required for increased VRay knowledge.(要增加VRay知识,必须多测试!)


