环境光遮蔽

计算机图形学术语

环境光遮蔽(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、AMDNVIDIA都在光线追踪技术方面有所发展,Intel根据相应技术对《Quake4》游戏进行了重制,但是相应的GPGPU处理器Larrabee的销声匿迹让这个技术也暂时消失在人们的视野中;ATI在HD4000系列时代曾经展示过基于光线追踪技术的Cinema 2.0,但目前仍然没有技术的更新资料;NVIDIA在光线追踪方面相对领先,其发布了基于CUDA架构的光线追踪引擎OptiX。
光线追踪在未来将会是实现全局光照的最佳方案,但是光线追踪的计算方法非常复杂、负载极大,并且与目前显卡架构以光栅化为主的处理方式难以融合(Intel和NVIDIA目前都趋向于在LarrabeeQuadro等上实现),短期内仍然无法应用于游戏显卡上。
目前游戏开发者实现全局光照更多的使用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提出,现在不少大大也用这种方法来画画,来学习下这种技法的基本步骤吧。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市