代码改变世界

引擎DS版本推出-折腾deferred rendering来了

2010-12-03 23:33  六水  阅读(3710)  评论(13编辑  收藏  举报

 关键字:deferred rendering,deferred lighting,延迟渲染,ssao 算法,ssao shader,半透明,抗锯齿.

 

近期发现需要开发deferred rendering,以高效应付各种效果的实现,提高engine的表现能力。本次整合了bump mapping、shadow、ssao、glow map、bloom、light scattering、dynamic cloud shadow、environment mapping和半透明初步支持,尚未完善。抗锯齿未处理。

 

MRT配置如下:

RT数目:3

Buffer格式:A16R16G16B16F

 

显然position的精度不足。这个需要在试用时用depth等数据反算出来。

这个在一定程度上也影响了我ssao的速度。因为我是用position和normal计算的,而非仅仅依赖depth。

 

先看看效果吧:(1024*768 )

1,埃及神庙一角

(可见light scattering和、ssao、bloom)。



 

以下把光照效果都分解出来了。

 

2,a,埃及神庙大门

diffuse and shaow only

 

 

 2,b,shadow and ssao

(这时物体空间结构和bump很明显)

 有同事发现这很像石蜡的效果,哈哈。巧合。

 

2,c,full shading。

结论,ao对效果的影响还真不小。可惜吃资源,fps帧数下降明显。特别是在7300GT等显卡上。

(测试结果,7300GT上,fps=6。310M上,fps=21。8800GT上,fps=61)。

为了比较,我拿UE3 也做了这个场景。在开启同等分辨率, 同等效果(ssao,light scattering,bump mapping,shadow)时

(测试结果,7300GT上,fps=4。310M上,fps=18。8800GT上,fps= 69)。

可见,UE3在(中)高端显卡上的表现比我做的优秀多了(后来我翻阅了一下它ssao的shader,发现是只使用了8次采样,我的用了16次,但效果都差不多,没看懂它的方法,而且通过外部控制的参数也忒多了, 实在是看不下去)。 当然了,UE3上的整体效果比我的要好一些,因为它烘培了间接光照。

 

到了这里又不得不说一下,ssao的优化还费了我不少劲。还未果。要么下降分辨率计算ssao,这会导致场景模糊度上升(也许可以通过一些技巧解决,待发现)。要么采样的时候不随机,这会导致条纹严重,除非增加采样个数。

实际上我限制了采样半径,帧数有所上升。这里我使用了16次采样,之后来一次blur。

我的效果如下:

 (12月6日更新过。修改了一下光照公式,让ao不影响直接光照,白边的效果减弱多了)

一下继续看看在城市场景方面的表现

 

3,西安节能园一角鸟瞰:

 在这里可以看出一下cloud shadow的影子。中间的房子光照比较暗,那是一个比较薄的小云区域所投的影子。

动起来感觉会很明显,给整个场景带来了不少感染力。

 

4,西安节能园一角仰视

 

 

 可以看见半透明处理效果不佳。这真是大问题啊。

树的搓样就不说了,没做处理。

总的来说,建筑物的表现上比我先前做的有感觉。

 

先前的效果可以参考 :

玻璃幕墙绘制