shaderdog shaderdog
关注数: 1 粉丝数: 264 发帖数: 11,829 关注贴吧数: 4
虚幻5的Lumen实现 首先要明确的一点是,和很多人理解的不一样,Lumen不是简单的SDFGI升级版+voxel lighting。这套系统相当复杂,考虑了不少方面的因素。 先来看下现在常用的光追方案。目前常见的光追流程一般是这样: 1、从屏幕空间上某一点开始trace ray,屏幕空间内raymarch,屏幕空间外软光追\硬光追。 2、如果有击中目标,做shading。 3、对低分率trace的结果作去噪。 Epic的Daniel Wright认为这种方法做diffuse gi并不是最优: 1、低spp光追+denoise得到的反射结果很好,但对于diffuse gi其实效果就那样,而且开销不低。 2、Nanite引入了巨量的三角形,现阶段的硬件光追性能不够。 3、Nanite是套streaming系统,而现阶段的光追API是个巨大的黑盒,要求把相对完整的场景都保存在GPU中,缺少对BVH的自定义功能。 Lumen除了处理GI常见的问题外还有和Nanite适配,Lumen的大致流程是: 1、trace阶段,这一步trace的是SSGI,SDF(mesh/global distance field),用硬件光追也行。 2、光照结果缓存在某种数据结构里。 3、屏幕空间final gather。 对于2,Lumen引入一个新概念叫card,用于缓存光照信息和材质信息,可以实现无限反弹,此外光照结果也会进一步缓存进voxel。card需要离线生成,实时生成需要nanite加速。 对于3,Lumen引入了一个新概念叫screen space probe,其实就是屏幕空间的一个低分辨率、non-uniform的radiance cache,用来收集1、2步得到的结果。这一步会通过ray trace收集voxel lighting,也会通过ray trace去算反射。最终屏幕上每一个像素的结果会根据probe收集到的信息进一步插值得到。 这样设计的诺干好处有: -trace和lighting解耦,可以用你想要的频率和方式去更新光照结果然后缓存。 -避免去噪阶段的高开销。 -适配nanite,适配不同的GI实现方式。 Lumen自然也有不少问题: 1、并不是完全实时,事实上相当依赖预处理,SDF的生成、card的生成都需要预计算。 2、card这个东西不支持很复杂的室内场景。 3、目前不够快。
首页 1 2 下一页