D5渲染器团队聚焦于前沿先进算法,开发出一套高效高质的动态光线追踪的全局光照方案。于此次分享报告会上介绍了 ReSTIR Resampling 和 Surfel Caching 的应用,并就如何减少噪声和缓解漏光以及大场景多光源的处理方法进行讨论。
在渲染领域,所有全局照明方法(Global Illumination, 简称GI)的理论基础(光线追踪,路径追踪等)都在于求解渲染方程。但求解渲染方程往往需要大量的样本数量才能收敛(得到干净无噪点的画面),这在实时渲染中几乎不可能实现。
(渲染方程)
因此,我们只能用一些方案来近似地模拟。但在需要以往的解决方案中,结果或多或少都存在一些通病,例如光照泄露和过度遮挡、采样率不足导致噪声过大等问题。
(采样率不足导致噪声过大)
(即使采用屏幕空间降噪等手段,效果也不佳)
D5的解决方案——ReSTIR Surfel GI
针对这一行业的痛点,D5提出了 ReSTIR Surfel GI 的解决方案,通过光线追踪和缓存技术相结合共同解算GI。
(实时渲染中路径追踪与 D5 GI 的对比)
光线一次反弹的计算方案
ReSTIR(Reservoir-based Spatio Temporal Importance Resampling),即基于储层的时空重要性采样,是一套利用时序和空间上的样本复用的算法,来源于 Bitterli 等人于2020年发表于SIGGRAPH的论文。D5将 ReSTIR 扩展在全局光照(GI)上,不同于光源采样,而是储存了路径。
(在GI困难场景中未使用 ReSTIR 的效果)
(在GI困难场景中使用 ReSTIR 的效果)
但复用时序样本的同时,也会导致在光源环境改变或者动态物体的情况下存在 Temporal Lag 的现象。因此,D5采用了 Path Validation 的方法检测前一帧和当前帧亮度变化,并以此调整复用的样本数量。
光线二次及之后反弹计算方案
ReSTIR在计算一次反弹计算中产生了良好的效果,但在实时渲染中我们很难将其应用于多次弹射的计算。因此D5的全局光照系统的二次及之后反弹计算中采用了 Surfel Caching 的方案。
GIBS (Global Illumination based on Surfels)方案由EA团队研发,即基于屏幕空间迭代地生成Surfel,能够有效地积累和缓存辐照度。但这样会产生一些新问题,例如无法获取屏幕空间外的结果。
(远处的反射呈现出不正确的死黑)
对于这个问题,D5对上述方案做出了一些改进,从GBuffer发出射线后的交点再去生成 Surfel,得以存储了当前视角外的位置的 Surfel,获得了正确的结果。
(Surfel GI 示意图 )
(改进后的 Surfel GI 示意图)
同时,将场景划分成级联网格来管理 Surfel,以减少显存占用;并通过将光线反弹次数排序比较等方式,解决光照泄露;以及一些其他走样(Artifact)的优化。
此外,D5团队还针对多光源采样、间接光源优化、反射、降噪等问题提出了一系列的解决方案,使得ReSTIR Surfel GI 能高效、稳定地运行在不同的场景中。
ReSTIR Surfel GI 与其他实时GI方案的对比
你可以在下面的对比中看出,以路径追踪的结果作为参考依据,无疑D5的全局光照系统则更接近于“标准答案”,并且时间开销与Lumen保持一致。
(路径追踪标准结果)
(Lumen)
(D5 ReSTIR Surfel GI)
在D5渲染器的实际操作中,用户可以通过丝滑的实时预览画面,直观地感受到 ReSTIR Surfel 全局光照系统带来的受益。用户任意地变换摄影机位置、添加光源或改变天空的间接光照情况,都能够即时地在预览窗口中得到反馈结果。
同时,相比于其他全局光照解决方案,D5 GI渲染的结果更接近于路径追踪的结果,在实时渲染保持性能的同时也保证了结果的质量。
推荐阅读:旗龙网