代码改变世界

ssao初探

2010-05-29 16:34  六水  阅读(2577)  评论(0编辑  收藏  举报
以下是我用楼盘场景的测试结果:                                                                                                  
images/ssao.jpg



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

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

 

有没有ssao,画面效果差别是巨大的,同时,实时跑的帧数差别也是不小的。

 images/moto_ssao.jpg



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

与PRT对比
PRT用于静态场景确实是个比较好的方案,毕竟可以预计算。但是对于动态的场景,还需要动态更新。
另外,PRT的质量依赖于网格的细分程度,要是模型太简,则效果也糟糕。
因此 ,PRT对于虚拟现实项目里的高楼大厦等场景(这些模型都是很精简的)来说,就显得不合适了。