SSAO

来源:互联网 发布:淘宝上搜到闲鱼 编辑:程序博客网 时间:2024/04/29 20:01

ssao是Crysis用到的算法,“Screen-Space Ambient Occlusion” (屏幕空间环境光遮蔽)。
SSAO通过采样象素周围的信息,并进行简单的深度值对比来计算物体身上环境光照无
法到达的范围,从而可以近似地表现出物体身上在环境光照下产生的轮廓阴影。可以利
用“逐象素场景深度计算”技术计算得出的深度值直接参与运算。

现在的效果确实错误还比较大,应该先进行简单的空间划分(或类似处理)然后计算。
不过个人认为这种方法只是近似地模拟,效果并不正确,但确实能增强场景的层次感,
让画面更细腻,让场景细节更加明显。

首个真正意义上使用SSAO技术的是Crytek出品的游戏Crysis,追求画面极致的一款里程碑作品,不知道这一款游戏的可以不用往下看了。

SSAO技术的应用带来了光影效果上的极大改进,使用SSAO的游戏将越来越多,包括Farcry2,已经现在论坛火热的Burnout5,
在之前的 Starcraft2(星际争霸2)官方技术文档中,也使用了较大篇幅陈述了这一技术。

SS1.jpg

 

 

 

http://ati.amd.com/developer/SIGGRAPH08/Chapter05-Filion-StarCraftII.pdf


同时在NV的新驱动185.20中所加入的AO(Ambient Occlusion)功能也是SSAO算法的一个基础。不过注意,这2者是不同的。

 

                                  NV.jpg

 

 

 

SSAO给我们带来了什么?

 

这不是技术贴,没有太复杂的东西。
我们只需要知道,SSAO极大地改进了此前3D游戏对“间接光照”表现的疲软。

何谓“间接光照”?
光照之处为“亮”,光照之外为“暗”,如果在亮与暗之间缺乏过渡,只会带来生硬的光影效果。“间接光照”着重表现的就是自然的过渡,自然的光照。

doom3_screen001.jpg

 

 

缺乏“间接光照”支持的DOOM3,画面生硬。

 

什么是SSAO?

从HL2开始,众多游戏公司开始对于如何表现“间接光照”进行研究,这些昙花一现的技术有:

运用于HL2的radiosity Normal Maps技术,效果比较垃圾
运用于Stalker的GI(?)技术,算法不好,开销巨大。
初期Crytek准备运用在Crysis上的Photon Mapping(光子映射)技术,开销同样比较垃圾,被抛弃。
随后Crytek又准备运用在Crysis上的Real-Time Ambient Map(实时环境光照贴图,简称RAM),这个是与之前Stalker使用的技术比较类似的,也是最接近SSAO的一个技术。

不过Crytek不愧为“间接光照”研究上的先锋,其技术员对于RAM进行了改进,新的算法成为了如今的SSAO

 

2.jpg

 

1.jpg

 

 

 

SSAO开与关的区别所在

 

SSAOScreen-Space Ambient Occlusion)是一个纯粹的渲染技术,或者说,是一个算法。虽然从上文知道是为了实现“间接光照”的效果,不过从技术上讲,就是一个对于AOAmbient Occlusion环境光吸收,也就是NV 185.20驱动加入的那个,一个渲染技术,我们可以在Maya3D软件中可以见到)的一个逼近函数,并且以此为据进行实时渲染。

SSAO比起185.20驱动中AO的优点:
与场景复杂性无关
无数据预处理,无loading时间,无系统内存分配
动态渲染
每个像素工作方式始终一致
CPU占用,完全通过GPU执行
与流行显卡的管线整合相当容易

缺点也是有的:
由于采样全部在可见点上进行的,对于不可见点的遮挡影响会有错误的估算。
颗粒感比较重,需要与动态模糊紧密配合才能取得较好效果。