KlayGE 4.4中渲染的改进(二):DR的其余改进

转载请注明出处为KlayGE游戏引擎,本文的永久连接为http://www.klayge.org/?p=2749
 

上一篇讲了TBDR的实现,本篇继续讲解deferred rendering层的一些重要改进。性能

切换到ESM

原先deferred系统用的是VSM,如今切换到开销更小的ESM。具体参见我以前的一篇文章。用ESM以后只须要一个通道,空间占用减小,性能也有所提高。下个版本会进一步改为支持打包到RGBA8的纹理,让不支持浮点纹理的硬件也可使用ESM。编码

Multi-resolution层

KlayGE很早就引入了multi-resolution的概念,用来加速SIL的GI。但原先的MR、SIL和Deferred绑在了一块儿。从上一版开始,MRSIL从Deferred独立出来以后,这个版本继续改进,把MR和SIL也分开了。如今MR能够用于其余地方,好比SSGI。本来SSVO也打算上MR,但后来来不及改了。spa

这个分离的思路是,MR层负责维护多层的分离和合并,而至于具体在每一层上作什么操做,由使用MR层的组件决定。这么一来,理论上甚至连Deferred均可以用MR来加速。code

忽略小物体

去年,Gameloft的大牛凃鸣就提议过对于小物体应该在一些渲染的状况下忽略掉,而且找到了快速计算AABB投影面积的方法。这个版本也做了这样的改进,经过AABB的投影面积做判断,小于一个threshold就不放入渲染队列。这个threshold是以不影响可见效果来调整的。目前只有生成shadow map的时候threshold > 0,其余时候仍是保守地设置为0。队列

Resizer

在不少平台上,窗口大小是不禁程序控制的。这个时候若是但愿保持统一的输出大小,就须要一个放缩。因此这个版本在流水线的末端增长了resize一步。前不久我也专门写过一个介绍放缩的文章,里面有关于resizer的细节。之后有可能进一步发展成支持dynamic resolution的放缩。游戏

关于deferred的改进就讲到这里,下一篇将讲高质量的地形渲染。get

相关文章
相关标签/搜索