[siggraph17]decima engine的光照和aa技术

这里写图片描述
link:http://advances.realtimerendering.com/s2017/DecimaSiggraph2017-final.pptx
siggraph17上面killzone和开发商guerrilla和小岛工作室两个工程师带来,关于decima engine的光照和AA技术。
decima engine本来是guerrilla给killzone系列开发的引擎,后来扩展到guerrilla的horizon产品上,现在用在小岛的新游戏上,逐渐走上了一流in house engine;

这篇blog中会多记录一些height fog, AA, checkerboard相关的技术,读起来都很棒的。

ggx spherical area light

这里写图片描述
可能有一些读者看了blog就不看文章了,这里特地说明下,这个文章里有说到ggx spherical area light,但是目前还不太有对于area light的应用,所以暂时略过,有兴趣的同学可以在这里看看。

height fog

这里写图片描述
decima使用的是physically based atmosphere的模型,这里有一个细节的记录:
http://blog.csdn.net/toughbro/article/details/7800395
简言之:要根据物理模型计算raleigh/mie的inscattering/outscattering/absorption,把计算结果存入LUT加速计算过程。
到了horizon的开发中,项目组希望加入heightfog,那么就非常的直接要在fog的物理模型上加入。
玩转了数学公式之后,其实是非常直接的。
这里写图片描述
这里的用于lerp的alpha项就是height相关的项目。

checkerboard render & AA

先看下decima的结果:
这里写图片描述

可以比较明显的看到2160p的checkerboard在同样效率下有比较好的结果。
然后我们在看下pipeline:
这里写图片描述

checkerboard技术

这个技术在游戏行业中是从rainbow6:siege开始的,可以看这里的notes:
http://blog.csdn.net/toughbro/article/details/70666715
这是一个每帧只渲染1/2甚至1/4buffer(一般这种情况带msaa),然后通过temperal信息(一般至少保留前一帧),然后来做upsampling,进而组合成一个全分辨率的方式。
由于fragment数量大幅度降低,所以效率提升是异常明显的。

checkerboard in decima
可以看上面的pipeline,中间的yC0Cg部分先不看,对比最后结果
- 渲染一半分辨率
- 然后不同帧直接直接做temperal reprojection+平均混合
这里写图片描述
这样就组合出来最终结果,比rainbow 6的方案更加直接一些,没有那么多的filter等等。

FXAA in decima
然后decima还发现先做fxaa再做checkerboard merge,效果更好(道理也是比较直接的)。
所以结合fxaa的pipeline是;
这里写图片描述

七巧板拼合
这里写图片描述
好了我们再看下这个pipeline中间的部分,发现奇怪的图被打散然后拼在一起,wtf?
这里的方法让我乐半天,这脑洞可以的,膝盖献上!!!
decima表示,fxaa和temperal技术都需要快速的方案方形的四个角的pixel,而直接的使用的话,是斜角的pixel读取,这个速度很慢。
所以就用七巧板的方法,把图截开,然后旋转45度,然后拼合在一起,然后sample。
并且转到YCoCg来对luminance做快速访问。

sum checkerboard部分可以说是比较精彩的; heightfog在理解数学的基础上,也是比较直接,然后。。。效果很赞的!