Ambient Occlusion目前尚未有正式的中文翻译,在实际应用中往往使用“AO”作为其简化词,汉语翻译多为“环境光遮蔽”。
在真实的世界中,光线从太阳发射出来后照射到大地上,环境光照由于有光线反射和折射的存在,为人们呈现出了极为丰富的层次感和空间感。举例来说,尽管阳光已经被造成阴影的建筑物遮挡,站在阴影中的人并不能直接看到太阳(不能看到光源),但我们在阴影中也能清晰地看到物体。这是因为周围物体的反射和折射带来了大量的漫反射光,这些漫反射光线充满了空间并照亮阴影中的物体,形成了真实而有空间感的光照效果。
但是目前3D游戏中对光照效果的处理并不是这样的。我们可以想象一个场景,里面有一个光源,那么场景中的其它物体将只会由这个单一光源照亮。无论是树,还是树下的凳子,都将先由这个单一光源照亮,然后降低其被遮挡位置的亮度,再做出影子。然而亮度的降低幅度基本上是相同的——不管被遮挡物体前面有多少个物体,物体的亮度、阴影的深浅都是一样的,这明显不符合实际效果。
当年的热门游戏《Doom 3》虽然带来了动态光影效果,但是阴影的处理依旧不够精彩,大部分影子死板而生硬,毫无过渡可言,很多地方给人的感觉就是一团漆黑。
那么,怎么改善这一情况呢?全局光照技术是个不错的办法,我们可以仔细计算光线的折射和反射路径,然后再利用反射光照亮其它部位。但是全局光照的资源耗费极为严重,如果在即时3D游戏中大规模采用全局光照技术,那么在物体稍微复杂的场景里,显卡就会很快耗尽资源,无法流畅运行游戏。因此,我们需要有一个能够达到全局光照效果的计算办法,这种办法不要太复杂,并且效果尽可能接近全局光照。
此时,Ambient Occlusion就可以派上用场了。AO的特点是,用尽可能少的资源,达到全局光照的效果。