D5 GI|保持实时性的同时,不断追逐离线渲染级别的品质
01 前言
1.1 什么是GI?
设想一种情况,一张图像是如此逼真,以致于所有人都相信它是真实世界的摄影,但实际上它却来自于计算机的渲染。这种能够以假乱真的照片级渲染 (Photorealistic Rendering) 恐怕是所有设计师都希望能达到的目标,因为它以一种最为震撼人心的方式将设计灵感传达给了客户。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/d1243ff548302f8fa791f8716ccd68e2-1024x576.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/2cf897c7507eff23bcfabb8c37ecea15-1024x576.png)
而我们所讨论的真实感通常来源于两个方面,一是设计师精细的建模,使设计的细节更加详实可信;另一方面则是渲染软件采用的算法如实还原了真实世界光照和材质的物理规律,让我们无法再分辨场景的虚拟与现实。
GI (Global Illumination) 即全局光照,是计算机渲染中专门用来还原现实中光照情况的方案,指的是渲染计算时不仅考虑了光源照射到物体的直接光照,又考虑了光线经过多次弹射后再到达物体表面上的间接光照。
众所周知,我们所生活的世界中光线抵达一个物体表面后不会立刻消失,而会接着反弹直至能量耗尽;而如果我们希望渲染器呈现的结果更加真实可信,就必须要还原这个物理事实。幸运的是,渲染领域中直接光照的算法已经非常成熟,而难题在于间接光照的实现,尤其是间接光照的漫反射。因此,我们通常所说的GI(下文也如此),一般特指的是间接光照的漫反射。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/1280X1280-2-1024x633.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/1280X1280-3-1024x633.png)
总结一下,GI要解决的就是光线在场景中二次及之后弹射的问题,它能为场景中不会被直接光照亮的部分带来更好的亮度和细节表现,是欺骗人的眼睛并最终实现照片级渲染的关键因素。
1.2 为什么要实现实时GI?
既然GI如此重要,那么如何实现GI就成了渲染界共同的技术难题。近几十年来,非常多方案的提出,包括大名鼎鼎的光线追踪,就是为了能够完美解决这个问题。
由于时间预算有限,在实时渲染中,这个问题则更加棘手。离线渲染允许算法花费大量的时间来解决场景的间接照明问题并产生高质量的结果:例如,动画电影中的画面需要经过成百上千小时的离线计算。但实时渲染所能接受的时间开销远远小于离线渲染,需要在极短的时间内完成。一般认为,1秒30帧是实时渲染的门槛,也就是说实时渲染一帧画面所能分配到的时间份额通常只有0.03s,甚至更低。
因此,在实时渲染中实现全局光照,是业内前沿的课题,也是衡量技术能力的一个标准。D5,一个以实时渲染为目标的团队,也必须努力应对这一挑战。D5所推崇的实时渲染,可以快速响应设计师的操作并将其转化为高质量的图像,使得用户可以立即看到自己想法的可视化呈现而无需等待进度条的完成。
总之,虽然实时GI技术具有挑战性,但是我们认为它是必须努力去实现的重要目标。基于这种考虑,我们最终提出了D5自研的GI技术,希望能够在保证高质量的同时,提供更加流畅和快速的实时渲染能力。
02 D5 GI 原理介绍
2.1 以往的解决方案
Kajiya所提出的渲染方程是全局光照算法的基础:渲染方程根据光的物理学原理和能量守恒定律,完美地描述了光在场景中的传播。因此,可以说全局光照的实现,就是对于渲染方程的求解。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/08f7abd5-c21e-4ba5-9bd2-2e0254a1d0f3-1024x452.png)
但渲染方程的求解异常复杂。我们可以使用蒙特卡洛积分方法去近似计算,但这需要巨大的样本数量,对于时间开销只有不到0.03s的实时渲染来说是不现实的。以往的实时GI解决这个问题的方案或多或少都存在一些缺陷,例如光照泄露和过度遮挡、采样率不足导致噪声过大等。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/e8a2f330-e598-4fbb-b344-ee4540e9fcab.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/2bfca414-0b50-4c1c-8662-fac6e00c08a3-1024x559.png)
为了优化上述的不足,D5 需要研发一套更加完善的实时全局光照技术。最终,ReSTIR Surfel GI 的方案应运而生,在满足实时性的同时大幅提高了画面的表现质量。
2.2 ReSTIR Surfel GI
2.2.1 ReSTIR GI
ReSTIR(Reservoir-based Spatio Temporal Importance Resampling),即基于储层的时空重要性采样,是一套利用时序和空间上的样本复用的算法,来源于 Bitterli 等人2020年的 SIGGRAPH 论文,用来有效地处理多光源采样的问题。
D5将 ReSTIR 的应用扩展到GI上,涉及到存储射线的路径而不是对光源进行采样。ReSTIR GI会在帧间和相邻像素间重用样本信息,减少采样结果的方差,可以在很少的样本数量下获得优异的效果。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/503bfec6-1c8d-4292-b304-7f5ed707819a-1024x576.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/a4ef81ff-97dc-4b9e-ae10-8f62d1cc7cec-1024x576.png)
但复用时序样本的同时,也会导致在光源环境改变或者动态物体的情况下存在 Temporal Lag 的现象。因此,D5采用了 Path Validation 的方法检测前一帧和当前帧亮度变化,并相应地调整要复用的样本数量。
你可以在下面两个视频的对比中看出,当光源发生改变时场景中亮度变化的响应速度差异。
2.2.2 Surfel GI
ReSTIR 产生了良好的效果,但在实时渲染中我们很难将其应用于多次弹射的计算,因此D5 GI后续的反弹计算中采用了 Surfel Caching 的方案。
Surfel 是一种空间缓存技术,可以基于屏幕空间迭代地生成,能够有效地积累和缓存辐照度,GI射线只需要查询即可获得后续反弹的光照结果。但这样会产生一些新问题,例如无法获取屏幕空间外的结果。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/b3408370-6eef-4106-9de8-514ab3a79c05.png)
对于这个问题,D5对上述方案做出了一些改进,从 GBuffer 发出射线后的交点再去生成 Surfel,得以存储了当前视角外的位置的 Surfel,获得了正确的结果。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/a23c4b93-8cc7-4500-879e-fd754cccdd44.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/37514715-ae47-4637-807e-09e9a1dcddc8.png)
同时,将场景划分成级联 Grid 来管理 Surfel,以减少显存占用;并通过将光线反弹次数排序比较等方式,解决光照泄露;以及一些其他走样(Artifact)的优化。
2.2.3 其他优化
此外,D5团队还针对多光源采样、反射、降噪等问题提出了一系列的解决方案,使得 ReSTIR Surfel GI 能高效、稳定地运行在不同的场景中。
03 D5 GI 效果表现
3.1 D5 GI 与“参考答案”的横向对比
通常情况下,我们将路径追踪的结果视作计算机渲染的标准答案(即所谓的 Ground Truth)。因此,我们可以通过对比来评估 D5 GI 的效果表现。在下方两张图中可以看到,以路径追踪的结果作为参考,D5 的全局光照系统非常接近“参考答案”,可以说 D5 GI 在实时渲染保持性能的同时并没有牺牲表现的质量。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/353168c3-765e-4a75-8edb-b3072b8637d7-1024x576.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/D5-1024x574.png)
3.2 D5 2.4 GI 与之前版本的纵向对比
业内常用一句玩笑话,“场景够不够亮”,来简单评价 GI 质量的优劣。虽然这个评价标准非常粗糙,但也不失为一种直观理解 GI 的方式。我们以亮度作为依据来进行 D5 GI 升级效果评判的话,可以看到 D5 2.1 GI 算法还是和 Ground Truth 有较大差距的,整体亮度明显比路径追踪(PT)的结果低一档;但 D5 2.4 GI 则更加接近。
更重要的是,相较于以往版本,D5 2.4 GI 能保留更多高频的细节。如果你注意观察下图中墙上装饰的细线框,可以看到之前版本的 GI 只能模糊掉这些细节,但在新版本 GI 中将会得到完整的保留。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/a2e0cb3f-34bc-4e7e-8faa-c9836fe5296e-1024x688.gif)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/3aaf3516-9761-452e-8ae8-3536015b562f-1024x688.gif)
3.3 D5 2.4 GI 的提升
3.1.1 提高了进深较深处场景的表现
在先前的版本中,由于 GI 在缓存时未考虑天光,导致室内场景偏暗,光照效果不够自然。新的 D5 GI 已经考虑了天光反弹的亮度贡献,使得即使是在进深较大的空间也能够获得足够的光照,从而提升了室内光照效果的真实感。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/02cc9bc3-529a-4d9e-a057-ebb49580040a-1024x688.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/1e20f829-49dc-4ae4-8b6a-27e31bf17c05-1024x688.png)
在墙后等光照困难处,场景更亮表现更好
3.1.2 提高了高频阴影细节
在先前的版本中,由于采用了较为强烈的降噪策略,导致整体画面更加平均,缺少立体感。新的 D5 GI 采用了英伟达的实时降噪器,并配合 Restir 采样提供的低方差样本,使得能够提供更多高频阴影细节,保证画面平滑稳定的同时,使得场景的视觉增加更多的真实感。
![](https://cn.official.d5render.com/wp-content/uploads/output-1-1024x560.jpg)
![](https://cn.official.d5render.com/wp-content/uploads/8217b871-f515-4f64-9525-6f1ccafa03f4-1024x560.jpg)
阴影不再模糊,细节更加清晰
3.1.3 提高了GI的精度
新的 D5 GI 通过支持高精度的间接光照缓存,使得场景的亮度变化能够更加细腻和真实,过渡部分更具有层次感。
![](https://cn.official.d5render.com/wp-content/uploads/9fa93a3e-ea94-41a2-a0dd-fdc1025d2ac4-1024x688.png)
![](https://cn.official.d5render.com/wp-content/uploads/output-2-1024x688.png)
![](https://cn.official.d5render.com/wp-content/uploads/4b0f10fb-eae8-4835-956f-7229e31b7c05-1024x654.png)
![](https://cn.official.d5render.com/wp-content/uploads/a5a54375-de71-4089-b15f-ed2d240c7a9c-1024x654.png)
光影过渡部分更加柔和,灰阶层次更丰富
3.1.4 提高了植物的表现效果
新的 D5 GI 和天光都在反弹中考虑了针对植物材质的透射效果,因此植物的材质会显得更加通透。
![](https://cn.official.d5render.com/wp-content/uploads/2023/01/b2d34f13-b266-41e1-b84e-289e4c82cfec-1024x688.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/e80e758d-80ce-44ec-9c58-2efc5d5cddf8-1024x688.png)
增强了植物叶片对光线的透射,营造了生物特殊的半透明感
3.1.5 提高了自发光的表现效果
在先前的版本中,自发光材质所产生的影响只有直接光照被计算在内,因此使用自发光作为主光源时,场景的亮度会过低。目前,在新的 D5 GI 中通过支持自发光的多次弹射,使得自发光材质作为主光源的场景能够更加真实地呈现出来,预览与出图准确度提升。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/output-1024x688.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/b8b7ba3a-6653-4d6a-a623-e75def97cdeb-1024x685.png)
仅使用自发光做球灯室内的照明效果死黑被消除,且墙与天花接缝的地方更准确
3.1.6 实现了预览、出图与动画效果的对齐
在先前版本中,由于使用了不同的技术组合来实现预览、静帧渲染和动画渲染,可能会导致画面整体亮度出现偏差。目前,通过采用 D5 GI 方案来统一这三种状态,为用户提供更加一致、高质量的体验。
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/34685116-cb79-4e69-a96a-e8ff740346c8-1024x688.png)
![](https://cn.official.d5render.com/wp-content/uploads/2022/01/49a6cee6-d5a7-474a-b11d-60876ace2bbf-1024x688.png)
预览和单帧、动画渲染的效果具有一致性
04 总结
作为一款以实时渲染为目标的渲染器,D5 一直致力于在保持实时性的同时,不断追求离线级别的品质。高质量 GI 效果的实现并非一次性的工作,而是需要工程上不断地优化。尽管存在困难,但最终目标是为用户提供更好的视觉体验,在不妥协的情况下同时实现「接近离线渲染的物理精度」和「实时交互性」。
总之,这一切都是为了D5渲染器推崇的「所见即所得」的设计理念,帮助设计师消除后期处理调整的需要,为用户提供更流畅的工作流程。灵感稍纵即逝,不必等。
在D5渲染器的实际操作中,用户可以通过丝滑的实时预览画面,直观地感受到 ReSTIR Surfel 全局光照系统带来的受益。用户任意地变换摄影机位置、添加光源或改变天空的间接光照情况,都能够即时地在预览窗口中得到反馈结果。