找回密码
 立即注册
查看: 415|回复: 0

【ReSTIR GI 第一期】UE4 纯光线追踪GI解决方案简介

[复制链接]
发表于 2022-1-15 12:14 | 显示全部楼层 |阅读模式
写在前面

一个优秀的GI很大程度上可以决定整个画面的真实感,想要把GI做得自然又好看,往往需要从准备模型开始,花上一番功夫。
但其实事情可以变得很简单。ReSTIR GI是一个纯光线追踪解决方案,对场景模型本身没有要求,也不需要手动摆任何探针,只要一盏灯光,即可照亮你(场景)的美~   所见即所得的同时,还可以保持优秀的性能,有谁不喜欢呢。
关于本文的内容我有做视频放到到网上,在B站Nvidia英伟达官方账号下搜索ReSTIR GI 即可。我准备慢慢将视频的内容整理成文,配上GIF,一是浏览文章速度自由,二来也方便检索。
我希望这几期文章可以发挥一些功能性的作用,不需要故弄玄虚理论知识一大堆,直接讲有什么功能,怎么用就行。(干货全拿走,开店就赚钱 2333),甚至并不需要一次将全部内容看完,有疑问可以方便的通过目录查询到,及时解决问题。我认为这是一个比较好的状态。
        话不多说,下面我们开始第一部分:什么是ReSTIR GI

        以下链接获取UE4 NvRTX 分支(需获取UE源码访问权限):
        https://github.com/NvRTX/UnrealEngine/tree/NvRTX_Caustics-4.27
        本文所用到的案例如下:
        https://pan.baidu.com/s/1RFUl10hUtdefS0AmGnrcOQ 提取码:6sno
<hr/>ReSTIR GI 简介




ReSTIR GI ON/OFF 对比

       大家好,我是Johnny,来自 NV Devtech,在室内环境的渲染中,如果我们没有一个正确的GI。很多地方就会看起来死黑一片。虚幻中,常用的GI 解决方案通常是烘焙,SSGI 等,随着UE5预览版的推出,我们也看到了UE 新一代的实时 GI 解决方案 lumen。



Lumen

        我们一直在丰富实时光线追踪的各种算法和功能,推出了一系列全局光照的解决方案,以适应不同的渲染需求,比如以前较早的 VXGI 和我们现在插件形式发布,基于光照探针的 RTX GI



RTX GI

        以及我们本次主要介绍的  ReSTIR GI
        这是由我们上海这边的Team开发的实时GI 解决方案,目前经过多次迭代,已经使用在各大游戏项目中,功能运行非常稳健。
        速度快消耗低 是 ReSTIR GI  的显要优势。在4K 不开启 DLSS 的分辨率下。全屏 GI的消耗,可以被限制在4毫秒以内。在开启DLSS 的时候,消耗可以进一步被降低 到两毫秒左右。(下图示例为测试场景,设置较为激进)



4K Perf  DLSS ON

        这是因为 ReSTIR GI   使用了全新设计的采样器和降噪器。



Sampler & Denoiser

        采样器方面,  因为引入了reservoir样本池 算法的原因,大幅提高了GI 采样结果的准确性,使得在一个SPP (Sample Per Pixel) 的消耗下。就能接近传统 Final Gather 采样器16 SPP 的效果。



1 SPP 采样器对比

        采样的效率得到了大幅的提升之后,再 配合上全新的降噪器。



GI 降噪器对比

            就可以做到消耗相当少的资源,实现一个非常不错的GI 效果。另外  对于自发光的物体。 ReSTIR GI 同样有着非常好的支持,我们甚至可以纯粹用物体的自发光,在虚幻里面去做一个场景的照明。



自发光场景照明

<hr/>如何开启ReSTIR GI

        首先找到 PostProcess 里面的 RayTracig Global Illumination, 将GI 的 Type设置为 FinalGather





开启 GI 效果

        这个时候我们的暗处就已经被GI 照亮了。同样我们也可以使用命令行来设置GI 的开启和关闭以及采样方式。
    r.RayTracing.GlobalIllumination 0/1/2
0 : 关闭光追GI  
1: BruteForce GI
2: ReSTIR GI
        现在在Post上的名字依然是Final Gather,  但是实际用起来有非常大的区别。用过默认版本的GI应该都比较清楚,在实际的项目中,基本很难使用光追 GI 得到一个快速,干净稳定的全局光照照明结果。
        我们通过对Reservoir样本池 算法的应用,使得 GI 的消耗。减少了非常多,让RT GI真正的可以应用在实时运行的游戏项目中,实际上也有非常多的已经发布的游戏项目, 正在使用我们的RT GI,作为一个非常稳健而又强大的光线追踪渲染功能。  



4K 分辨率  直接开启GI的消耗

        直接开启 GI ,消耗依然非常高,我们还需要后续的一些设置,让GI工作得更好。实时GI的绘制分为采样器和降噪器两部分。我们先看一下采样器的部分。在观察采样器的时候。最好把降噪器关闭掉,使用command命令。
    r.DiffuseIndirect.Denoiser 0/1/2
        0:关闭 RTGI 降噪器
        1:默认GI降噪器
        2:SVGF GI降噪器
         暂时关闭掉GI的降噪器。直接显示一个一个的采样点,能让我们对现在的GI运行情况有一个更好的把握。
        比如我们后面再调试GI的效果和性能的时候。可能会遇到各种各样的问题。那么这个时候我们并不是很清楚是在。 GI的采样环节出了问题,还是说在降噪的环节出现了问题。那么这个时候我们就可以先把。降噪器像这样关闭掉只看采样器的结果。
        如果我们发现采样器的设置有问题,那就当场修复掉,没有降噪器的干扰,会非常有利于我们去精细的调整采样器的设置。



50% GI screen percentage sample size

       墙壁上面的小麻点,这个就是ReSTIR GI 的采样点。现在整个运行比较卡顿,我们可以先做一个简单的设置。
r.RayTracing.GlobalIllumination.ScreenPercentage 25
这条命令行的意思就是,我们不使用全屏分辨率 进行GI 采样,我们只使用25%屏幕的 GI 屏幕分辨率就可以了
        一般把GI的屏幕分辨率设置到25 % 或者更低,这是在性能和质量上一个比较平衡的设置。



25% GI screen percentage sample size

<hr/>GI 采样方式对比

        在介绍如何使用ReSTIR  GI 的采样器之前,我想先短暂的带过一下,现在UE4的几种 GI 采样方式 和他们的特性  
Brute force
       Brute force 采样是一个非常经典的无偏差(unbiased)采样算法。采样的精准度是较高的,而且也支持多次反弹。不过我们想要得到一个干净,可用的画面的时候,性能压力会比较大。
FinalGather
        UE4 默认 FinalGather  采样器,  在SPP为一的情况下。和 Brute force几乎没有区别。不过,调整一下参数就会发现,FinalGather 采样器不支持光线多次反弹,只能算一次。这就意味着有一些如果我们有闭塞一些的场景。  GI是没办法 有效正确计算的。不过FinalGather  采样器 好处是每帧的SPP可以去到一个比较高的值。即便是 64 spp。性能的影响也在一个可以接受的范围。需要注意的是 Final gather 是一种有偏算法(biased)
ReSTIR GI
        ReSTIR GI 采样点会相对密集很多,也更加的稳定,采样点不断的更新,不过不会闪烁的那么剧烈。前期采样的质量好坏与否,会直接影响到最后降噪的结果。
        因为我们之前提到过的 reservoir样本池算法,  所以使得Restir GI  在1SPP 和 极少GI 屏幕分辨率的情况下,依然能够得到一个稳定的采样效果
        我们可以用一条命令行来。开关一下reservoir算法,在GI 的采样器中的贡献
        r.RayTracing.GlobalIllumination.FinalGather.UseReservoirResampling  0/1



开启Reservoir样本池算法

        采样效果的提升相当明显。
        采样点密集了这么多。也就意味着我们不太需要那么高的屏幕分辨率来采样GI
虚幻4 默认的GI 屏幕内分辨率最低只能被设置为25%,也就是1/4。不过对于Restir GI 来说。25%的屏幕内分辨率似乎都有一些浪费。因为 真的足够稳定
        于是我们将最低的GI屏幕内分辨率下放到了 12.5%也就是渲染尺寸的1/8,即便是这样一个苛刻的参数设置,在绝大多数情况下。也可以得到一个稳定可用的采样效果,那么带来的好处,自然也就是更为优秀的性能。
        ReSTIR GI 相较于final gather GI 的另一大优势是可以支持多次GI 光线反弹。这在光线较为比较闭塞的场景的时候。能够带来非常大的画面提升,因为样本池采样机制,也不会过多的消耗性能,始终会控制在一个可用的范围内。



ReSTIR GI 多次光线反弹

        最后 ReSTIR GI 可以对自发光的物体进行采样, 并且 GI 自发光照明拥有不俗的更新效率,和非常自然的照明效果,甚至于说我们可以只用物体自发光产生的亮度去动态地照亮整个场景。



动态采样自发光物体

        ReSTIR GI 第一部分的内容就到这里了,正在继续爆肝整理后续采样器,降噪器等的内容,敬请期待!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 21:34 , Processed in 0.064617 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表