查看: 1571|回复: 0

SSAO-屏幕空间环境光遮蔽

[复制链接]

839

主题

887

帖子

3663

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3663

最佳新人

发表于 2018-12-7 14:05:01 | 显示全部楼层 |阅读模式
SSAO-屏幕空间环境光遮蔽

SSAO全称“Screen-Space Ambient Occlusion” (屏幕空间环境光遮蔽)。其最先运用于Crysis(孤岛危机)游戏中,通过GPU的shader实现。

简介

SSAO通过采样象素周围的信息,利用“逐象素场景深度计算”技术计算得出的深度值直接参与运算。
效果确实错误还比较大,应该先进行简单的空间划分(或类似处理)然后计算。
不过这种方法只是近似地模拟,效果并不正确,但确实能增强场景的层次感,让画面更细腻,让场景细节更加明显。
不同于显卡驱动中普通的AO选项,burnout的SSAO是全动态的,无需预处理,无loading时间,无需消耗内存,不使用CPU,全由GPU处理,对GPU有较大的消耗
SSAO默认是关闭的,可以在游戏视频选项中打开。

评测

在7950GT下跑,加了ssao后,下降了15%。而且,显卡性能越低,下降的越厉害。效率消耗主要是在于要多渲染一遍场景到深度以及之后进行的ssao处理。这遍可以进行优化,如果物体的纹理不带alpha,则可以把他们都合在一批或几批渲染。至于深度图的尺寸 ,我采用了与窗口一样的尺寸,这样精度高。也可以采用低分辨率,但效果会有锯齿,还需要进行模糊处理才比较自然。当然,如果本来就用了延迟渲染技术,本来就有深度图了,那就可以直接拿来用了。

PRT对比

PRT用于静态场景确实是个比较好的方案,毕竟可以预计算。但是对于动态的场景,还需要动态更新。另外,PRT的质量依赖于网格的细分程度,要是模型太简,则效果也糟糕。
因此,PRT对于虚拟现实项目里的高楼大厦等场景(这些模型都是很精简的)来说,就显得不合适了。
已发行的游戏中,运用SSAO的游戏有:
Battlefield3 (战地3)
Crysis (孤岛危机)
Burnout(TM) Paradise The Ultimate Box (火爆狂飙5天堂)
帝国:全面战争
魔兽世界:德拉诺之王
Lost Planet 2 (失落星球2)
Tomb Raider 9 (古墓丽影9)
Amnesia: The Dark Descent (失忆症:黑暗后裔)
星际争霸2
Watch Dogs(看门狗)

名词定义

从HL2开始,众多游戏公司开始对于如何表现“间接光照”进行研究,这些昙花一现的技术有:
运用于HL2的radiosity Normal Maps技术,效果比较垃圾
运用于Stalker的GI(?)技术,算法不好,开销巨大。
初期Crytek准备运用在Crysis上的Photon Mapping(光子映射)技术,开销同样比较垃圾,被抛弃。
随后Crytek又准备运用在Crysis上的Real-Time Ambient Map(实时环境光照贴图,简称RAM),这个是与之前Stalker使用的技术比较类似的,也是最接近SSAO的一个技术。
不过Crytek不愧为“间接光照”研究上的先锋,其技术员对于RAM进行了改进,新的算法成为了如今的SSAO
SSAO开与关的区别所在
SSAO(Screen-Space Ambient Occlusion)是一个纯粹的渲染技术,或者说,是一个算法。虽然从上文知道是为了实现“间接光照”的效果,不过从技术上讲,就是一个对于AO(Ambient Occlusion环境光吸收,也就是NV 185.20驱动加入的那个,一个渲染技术,我们可以在Maya等3D软件中可以见到)的一个逼近函数,并且以此为据进行实时渲染。
SSAO比起185.20驱动中AO的优点:
与场景复杂性无关
无数据预处理,无loading时间,无系统内存分配
动态渲染
每个像素工作方式始终一致
无CPU占用,完全通过GPU执行
与流行显卡的管线整合相当容易
缺点也是有的:
由于采样全部在可见点上进行的,对于不可见点的遮挡影响会有错误的估算。
颗粒感比较重,需要与动态模糊紧密配合才能取得较好效果。

运作方式

SSAO屏幕空间环境光遮蔽的运作方式
其实了解了AO环境光遮蔽的原理,SSAO(屏幕空间环境光遮蔽)已经可以融会贯通,SSAO通过采样像素周围的信息,并进行简单的深度值对比来计算物体身上环境光照无法到达的范围,从而可以近似地表现出物体身上在环境光照下产生的轮廓阴影。
具体的运作方式上,SSAO会利用GPU计算出指定像素的空间坐标,然后以此坐标为基点,在周围选择数个采样点进行采样,然后将采样点的空间坐标投影回屏幕坐标,对深度缓冲进行采样,最后得到采样点的深度值,再进行后续计算,最终得到一个遮挡值。


3_3_1b79fc870defdda.jpg


SSAO屏幕空间环境光遮蔽实现了较好的全局光照效果
因为是基于指定空间的全局计算模式,因此SSAO实现效果的优劣取决于算法,包括空间的指定范围和采样点的选取等等。需要指明的是,不同游戏(引擎)在SSAO的细节算法方面可能不尽相同,另外SSAO还会结合其它光照技术共同达成游戏画面的渲染,所以SSAO在很多游戏中不会有专门的开关选项,其最终的表现结果可能是与其它技术共同作用的结果。

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

本版积分规则


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