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

上一篇总结了VDM、动画导入、双面材质、矢量纹理这几个新功能,本篇将概括地讲一下抗锯齿和渲染框架上的改进

SMAA

原先KlayGE里一直用的FXAA。而FXAA虽然非常快,但有个很大的问题就是会让画面整体变得模糊。而后来出现的SMAA则可以解决这个问题。这里参考的是http://iryoku.com/smaa/

SMAA和FXAA都是MLAA的一个GPU算法,SMAA注重的是把原算法搬到GPU,FXAA注重的是把原算法的思想简化后在GPU上做的尽量快。所以两者的基本算法还是差不多的,都是通过一个像素和周围像素的信息,恢复出局部几何,确定如何AA。但SMAA的搜索更为彻底,所以不是遇到边就模糊了事。这里可以看一组对比。

这是FXAA的结果。线条不连续,模糊。

FXAA grid

这是SMAA的结果。线条平滑连续,边缘清晰。

SMAA grid

而速度方面,在720p的分辨率上,FXAA需要0.1ms,SMAA需要0.19ms。

实验性的Clustered shading

KlayGE的deferred rendering框架经历了deferred shading、deferred lighting、tile-based/light indexed deferred shading几个时代,性能也有几次明显的提升。经过一段时间的发展,tile-based/light indexed也逐渐显露出它的不足之处。在这方面,clustered shading这几年逐渐被一些游戏所实践。所以该是切换到clustered shading的时候了。

这里的Clustered shading是由github上的Phantomape完成的。实现了个CPU上分cluster的算法,可以接入GPU上的shading。通过这种方法,tile-based和light indexed就能合二为一,分别用于支持CS的GPU和不支持的。

但是在4.11里,cluster shading是默认关闭的。因为还没有经过优化,目前的性能还低于tile-based。在下一个版本里,我会尽量优化它,等到性能超过tile-based之后,就可以把它用作默认的渲染框架了。

总结

本篇介绍了SMAA和Clustered shading这两个大修改。下一篇作为结尾,将讲一下如何支持HDR显示设备以及一些性能优化。