开发新闻:路径追踪实验!
(这是SE在发布Renewed 1.0之后的第一篇帖子,标志着PTGI的开始)
因此,你们可能还记得我在谈论如何将方块数据存储在体积纹理中,甚至是屏幕外的方块。基本上,我创建了一种方法来存储场景中的所有方块(接触空气或者在一定距离内)。
这一激动人心的新发展开辟了一个全新的包含无限可能的世界!其中(也是最先进的)是路径追踪的GI(一种通过跟踪并反射光线穿过场景来收集光反弹的方式)。
那些对实时路径追踪非常熟悉的人会敏锐地捕捉到我所做的事情的难点:“没有办法行得通。它要么很耗性能,要么很多噪点。”
我束手无策,我不得不尝试一下,尤其是在这里看到每像素只有一个路径跟踪可以完成什么之后,
http://research.nvidia.com/publication/2017-07_Spatiotemporal-Variance-Guided-Filtering%3A因此,几天前,我决定尝试一下。

第一个结果是对发光方块(此处为荧石)进行了非常难看的无反弹追踪。不过,令我惊讶的是每个像素渲染一个样本的速度(我的GTX 1080在1440p分辨率下达到了200 fps的帧率)。在这一点上,我天真地融合了以前的帧以产生更高的有效样本数。

接下来,我尝试了一次反射。性能下降的幅度很大,可以产生更多的反射,因此我没有费心去尝试呈现更多的反射,因为我认为“在Minecraft中实时反射具有GI反射的路径追踪任意光源”已经听起来不错,梦想似乎已经成真。

我改进了时间混合并修复了数学错误,它看起来不错,但仍然令人感到不安,这是由于非常激进的时间混合导致了运动中的各种拖影。
现在,我准备进行适当的噪点过滤,以消除或影响这种效果。我以上面链接的论文为起点,并以我先前在过滤GI噪点(体素锥描图上的工作)的经验作为起点。
首先,我构建了一个更强大的时间融合功能,该功能将完全排除以前与当前帧的深度不匹配的样本,从而消除了拖影问题。然后,我最终使用双边模糊来消除噪点,同时保持边缘清晰。标准的双边模糊最终导致帧率降低,因此我尝试使用较少的样本并应用随机干扰,希望我已经存在的Temporal Anti-Aliasing(随机采样抗锯齿)解决方案可以清除剩余的噪点。
结果令我感到非常惊讶!





用于消除噪点的模糊效果确实模糊了方块边缘附近的接触阴影,我想看看我能做什么,但是即使我无法解决问题,我也对它的效果感到非常满意!这些场景在我的GTX 1080上以1440p的分辨率达到了50-60 fps。这可能会有所改善,因为它目前处于未优化的状态。
再来一张,这是最后一张图像的输入,即一个每像素采样路径的GI:

太疯狂了!
当前有一些限制。目前,不考虑非完整的方块(楼梯,围栏,半砖等)。为此,我需要跟踪体积中的方块块数据,然后使用不同的边界框(而不是我现在使用的完整框)进行最终的碰撞测试。看起来似乎还不错,因为最复杂的方块是栅栏,并且可以用三个边界框进行渲染,但是在尝试之前,无法确定能否起效。
其次,我没有做任何特别的尝试来尝试在当前追踪过程中有效地跳过空白区域,因此GI的半径限制为20个块。如果我关于跳过空白空间的想法行得通,那么该半径应该增加而不会对性能造成太大影响。
而且,动态实体(生物和玩家)不能在GI中显示出来,因为无法在体积中表示它们。屏幕空间追踪或SSAO(屏幕空间环境光遮蔽)可能会有所帮助。
我很好奇,看看你们是否像我一样对此感到兴奋!我可能会以此上传一个实验版本,因此您可以尽快尝试。