查看: 1921|回复: 0

什么是AO- ambient occlusion(环境光遮蔽)

[复制链接]

903

主题

951

帖子

3935

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3935

最佳新人

发表于 2018-12-7 14:11:22 | 显示全部楼层 |阅读模式
什么是AO- ambient occlusion(环境光遮蔽)

Ambient Occlusion,以下简称AO,中文译名不太好定,有叫“环境光散射”、“环境光吸收”的,如Maya中的Bake AO似乎就一直是译成“烘焙环境吸收贴图”。现今书籍和网络上一般称作“环境光遮蔽”。
GALAXIX倾向将其称之为:环境光遮蔽

概述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)。

AO环境光遮蔽的最终目的是什么?

随着计算机图形技术的发展,玩家对游戏画面图形的逼真度要求越来越高,而近些年推动游戏图形画面逼真的最关键环节就是光照/光影效果,如果能非常近似的模拟与现实生活一样的光照效果,那么游戏的画面将非比寻常,但是光照/光影效果的计算非常复杂而且消耗巨大的资源,成为阻碍相关技术推进的最大障碍。
实现光照/光影的最逼真效果就是达成全局光照。在早期的游戏中仅能实现直接光照的效果,也就是说光线从光源发出、照射到物体上后、反射到玩家眼中,光照的计算就完成了。
全局光照在静态图形的处理上比较完美,因为静态图形可以等待渲染的时间
但是在现实中,要得到高度真实感的图形画面,不仅要计算直接光照,还需要计算间接光照,也就是说,光线从光源发出、照射到物体上后,除了计算物体本身反射到玩家眼中的光线,还要计算物体多次反射、折射、吸收光线,以及物体之间因为反射、折射而导致的光线、阴影变化,经过综合计算将光线和阴影的最终效果展示(反射)到玩家眼中,从而实现全局光照的效果。
全局光照在静态图形的处理上比较完美,因为静态图形可以等待渲染的时间,但是对于游戏来说,持续的动态画面必须保证每秒几十fps的渲染速度,因此全局光照的处理就需要非常谨慎,其算法在推进画面真实度的同时,必须保证相应的效率,否则就会打破画面效果和帧速度之间的平衡。
说到这里,我们先介绍一下实现全局光照效果非常好的一种方式,那就是“光线追踪”技术(Ray Tracing),光线追踪算法分为两种:正向追踪算法和反向追踪算法。其中,正向追踪算法是大自然的光线追踪方式,即由光源发出的光经环境景物间的多次反射、透射后投射到景物表面,最终进入人眼。反向追踪算法正好相反,它是从观察者的角度出发,只追踪那些观察者所能看见的表面投射光。
光线追踪技术实现了最佳的全局光照效果,但是与目前的显卡架构融合困难
Intel、AMD和NVIDIA都在光线追踪技术方面有所发展,Intel根据相应技术对《Quake4》游戏进行了重制,但是相应的GPGPU处理器Larrabee的销声匿迹让这个技术也暂时消失在人们的视野中;ATI在HD4000系列时代曾经展示过基于光线追踪技术的Cinema 2.0,但目前仍然没有技术的更新资料;NVIDIA在光线追踪方面相对领先,其发布了基于CUDA架构的光线追踪引擎OptiX。
光线追踪在未来将会是实现全局光照的最佳方案,但是光线追踪的计算方法非常复杂、负载极大,并且与目前显卡架构以光栅化为主的处理方式难以融合(Intel和NVIDIA目前都趋向于在Larrabee、Quadro等上实现),短期内仍然无法应用于游戏显卡上。
现在将话题转回来并做一个简短的总结:
1.全局光照是未来实现游戏图形画面真实化的一个重要元素(其可以达成光影效果的逼真化,对应的相反关键词为直接光照)。
2.光线追踪是实现全局光照完美效果的最佳技术/方式之一,也是未来的一个发展方向,其技术实现方式最接近现实的物理模型,但是因为效率较低,所以目前的游戏和显卡架构无法承担。
3.目前游戏已经开始实现全局光照的效果,但是并未采用光线追踪的方式,而是采用其它多种实现方式来达成全局光照的效果,其中包括“AO”环境光遮蔽。
4.“AO”环境光遮蔽是实现全局光照中部分物体局部光照和阴影真实化的一种技术方式,其函数实现方式并未严格遵循现实的物理模型,但是效率较高,因此被当前游戏广泛应用。
5.再次强调,AO环境光遮蔽(包括其变种SSAO 、HBAO等)仅是实现全局光照的技术方式之一,当前的游戏应用了多种技术方式共同达成全局光照总体效果的完善和完美。

AO环境光遮蔽技术原理与作用


经过前面的介绍,我们已经了解了环境光遮蔽存在的目的,下面我们简单介绍一下AO环境光遮蔽的实现机理。AO环境光遮蔽通过相对廉价的计算效能来实现全局光照中阴影的高级效果,简单说AO环境光遮蔽就是在每个取样点上计算它被其它几何体覆盖的程度,是计算在一个统一的光强度下场景的软阴影效果的图形技术。
AO环境光遮蔽在多种静态3D处理软件(如3D Max或Maya)中都有涉及,其是一种比全局光照效率更高的光照处理方式(效果接近),它通过改善阴影来现实更好的视觉效果,提高场景的深度和层次感,大大丰富了图像细节。
下图:AO光照渲染模式
3_3_909b382636203f8.jpg
 AO环境光遮蔽是实现全局场景类似软阴影从而达成更佳全局光照效果的技术
在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,因为它操作简单灵活、效果真实细腻。
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的作用会更加明显。

关注galaxixv,官方微信公众号。
GALAXIX UE4 讨论学习群 140439020
UE4精英学习群  12762592
UNITY学习群   194092348
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表