更新时间:2023-11-04 07:04
环境光遮蔽(Ambient Occlusion)“AO”为Ambient Occlusion的缩写,中文译为环境光遮蔽。在DirectX 10.1 API推出后,Amblent Occlusion升级为SSAO(Screen-Space Ambient Occlusion:屏幕空间环境光遮蔽);而在微软推出DirectX 11 API后,SSAO升级至HDAO(高解析度环境光遮蔽:High Definition Ambient Occlusion)。
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)。
随着计算机图形技术的发展,玩家对游戏画面图形的逼真度要求越来越高,而近些年推动游戏图形画面逼真的最关键环节就是光照/光影效果,如果能非常近似的模拟与现实生活一样的光照效果,那么游戏的画面将非比寻常,但是光照/光影效果的计算非常复杂而且消耗巨大的资源,成为阻碍相关技术推进的最大障碍。
实现光照/光影的最逼真效果就是达成全局光照。在早期的游戏中仅能实现直接光照的效果,也就是说光线从光源发出、照射到物体上后、反射到玩家眼中,光照的计算就完成了。但是随着技术的发展,要得到更加具有真实感的图形画面,不仅要计算直接光照,还需要计算间接光照,也就是说,光线从光源发出、照射到物体上后,除了计算物体本身反射到玩家眼中的光线,还要计算物体多次反射、折射、吸收光线,以及物体之间因为反射、折射而导致的光线、阴影变化,经过综合计算将光线和阴影的最终效果展示(反射)到玩家眼中,从而实现全局光照的效果。
全局光照在静态图形的处理上比较完美,因为静态图形可以等待渲染的时间,但是对于游戏来说,持续的动态画面必须保证每秒几十fps的渲染速度,因此全局光照的处理就需要非常谨慎,其算法在推进画面真实度的同时,必须保证相应的效率,否则就会打破画面效果和帧速度之间的平衡。
说到这里,我们先介绍一下实现全局光照效果非常好的一种方式,那就是“光线追踪”技术(Ray Tracing),光线追踪算法分为两种:正向追踪算法和反向追踪算法。其中,正向追踪算法是大自然的光线追踪方式,即由光源发出的光经环境景物间的多次反射、透射后投射到景物表面,最终进入人眼。反向追踪算法正好相反,它是从观察者的角度出发,只追踪那些观察者所能看见的表面投射光。
Intel、AMD和NVIDIA都在光线追踪技术方面有所发展,Intel根据相应技术对《Quake4》游戏进行了重制,但是相应的GPGPU处理器Larrabee的销声匿迹让这个技术也暂时消失在人们的视野中;ATI在HD4000系列时代曾经展示过基于光线追踪技术的Cinema 2.0,但目前仍然没有技术的更新资料;NVIDIA在光线追踪方面相对领先,其发布了基于CUDA架构的光线追踪引擎OptiX。
光线追踪在未来将会是实现全局光照的最佳方案,但是光线追踪的计算方法非常复杂、负载极大,并且与目前显卡架构以光栅化为主的处理方式难以融合(Intel和NVIDIA目前都趋向于在Larrabee、Quadro等上实现),短期内仍然无法应用于游戏显卡上。
目前游戏开发者实现全局光照更多的使用AO技术。AO技术以独特的计算方式吸收“环境光”(同时吸收未被阻挡的“光线”和被阻挡光线所产生的“阴影”),从而模拟全局光照。
现在将话题转回来并做一个简短的总结:
1.全局光照是未来实现游戏图形画面真实化的一个重要元素(其可以达成光影效果的逼真化,对应的相反关键词为直接光照)。
2.光线追踪是实现全局光照完美效果的最佳技术/方式之一,也是未来的一个发展方向,其技术实现方式最接近现实的物理模型,但是因为效率较低,所以目前的游戏和显卡架构无法承担。
3.目前游戏已经开始实现全局光照的效果,但是并未采用光线追踪的方式,而是采用其它多种实现方式来达成全局光照的效果,其中包括“AO”环境光遮蔽。
4.“AO”环境光遮蔽是实现全局光照中部分物体局部光照和阴影真实化的一种技术方式,其函数实现方式并未严格遵循现实的物理模型,但是效率较高,因此被当前游戏广泛应用。
5.再次强调,AO环境光遮蔽(包括其变种SSAO、HBAO等)仅是实现全局光照的技术方式之一,当前的游戏应用了多种技术方式共同达成全局光照总体效果的完善和完美。
经过前面的介绍,我们已经了解了环境光遮蔽存在的目的,下面我们简单介绍一下AO环境光遮蔽的实现机理。AO环境光遮蔽通过相对廉价的计算效能来实现全局光照中阴影的高级效果,简单说AO环境光遮蔽就是在每个取样点上计算它被其它几何体覆盖的程度,是计算在一个统一的光强度下场景的软阴影效果的图形技术。 AO环境光遮蔽在多种静态3D处理软件(如3D Max或Maya)中都有涉及,其是一种比全局光照效率更高的光照处理方式(效果接近),它通过改善阴影来现实更好的视觉效果,提高场景的深度和层次感,大大丰富了图像细节。
下图:一般光照渲染模式下图:环境光遮蔽渲染模式
环境光遮蔽是实现全局场景类似软阴影从而达成更佳全局光照效果的技术
在3D软件中应用的静态AO环境光遮蔽因为需要预渲染、而且速度仍然较慢,所以不能直接照搬到动态画面(游戏)的处理方式中。在近些年的游戏中,很多游戏公司都致力于表现更逼真的光照效果,提出了很多相关的技术,比如《半条命2》中的Radiosity Normal Maps技术、《潜行者》中的GI全局光照等等。
这些技术都未能很好的实现光照的效果或效率的保证,此时Crytek正在开发《孤岛危机》,其应用了一项名为Real-Time Ambient Map(实时环境光照贴图)的技术,这项技术非常接近SSAO技术,而随着研发的深入,这项技术最终被升级为新的算法,并在CryEngine2引擎的技术白皮书中最终将这项升级后的技术命名为SSAO。 从这个角度讲,其实在电脑游戏的应用中,率先提出的环境光遮蔽在算法上已经直接达成了SSAO(屏幕空间环境光遮蔽),而AO环境光遮蔽这种模式并未直接在游戏中应用,至于NVIDIA在控制面板中的提出的“AO环境光遮蔽”的概念,我们对其算法不得而知,但是可以明确的是,其算法必然与静态的环境光遮蔽的算法不同,可能就是SSAO(屏幕空间环境光遮蔽)或者类似的算法。
看一段小文字:
《鲨鱼故事》(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,因为它操作简单灵活、效果真实细腻
绘画运用
AO (环境光遮蔽, Ambient Occlusion) ,基于对光影的了解,人工绘制AO图层,画出雷同3D般的效果,最早由Sam Nielson提出,现在不少大大也用这种方法来画画,来学习下这种技法的基本步骤吧。