麒麟子

~~

导航

<2010年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(12)

随笔分类

随笔档案

Friends

WebSites

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜

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的游戏有

  Crysis(孤岛危机)

  Burnout(TM) Paradise The Ultimate Box(火爆狂飙5天堂)

  帝国:全面战争

  另外,星际争霸2的开发也运用到了SSAO

什么是SSAO?

  从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计算出指定像素的空间坐标,然后以此坐标为基点,在周围选择数个采样点进行采样,然后将采样点的空间坐标投影回屏幕坐标,对深度缓冲进行采样,最后得到采样点的深度值,再进行后续计算,最终得到一个遮挡值。

  

SSAO

SSAO屏幕空间环境光遮蔽实现了较好的全局光照效果

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

posted on 2010-03-22 10:19 麒麟子 阅读(2099) 评论(0)  编辑 收藏 引用 所属分类: GPU and Graphic


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理