VXGI

技术

在图形领域中,正确地对光照特效进行建模是计算方面最难的难题。凭借 Maxwell,我们的目标是让 GPU 在实时执行照片般逼真的光照运算方面实现巨大飞跃。

在现实生活中,所有对象都被直接光线与间接光线的组合所照亮。直接光线即光子从光源直接传播以照亮对象。间接光照即光子从光源传播出来,撞上某个对象,在其表面发生反射后又撞上第二个对象,因此间接地照亮了该对象。 「全局光照」(GI) 是可为这类特效建模的光照系统术语。 在没有间接光照的情况下,场景看起来会显得粗糙而不自然。然而,虽然直接接收到的光线计算起来非常简单,但是间接光照运算相当复杂且运算量相当繁重。


仅利用直接光照渲染出来的场景。


启用了全局光照后的同一场景,注意间接光线和地板上的镜面反射。

因为这是一种计算量繁重的光照技术 (对极细腻的场景来说尤为如此),所以全局光照长期以来主要用于渲染电影中复杂的 CG 场景,所使用的硬件是离线 GPU 渲染集群。虽然许多当今最流行的游戏均采用了某些形式的全局光照,但是这类全局光照的实现方式一直依赖预计算光照。使用这类「预烘焙」技术是因为性能的原因。然而,这类技术需要绘制额外的图形,因为所期望的光照特效必须事先计算出来。因为「预烘焙」光照并非动态的,所以当游戏内出现变化时,通常很难或不可能更新间接光源。例如添加了一个额外光源或者场景中有某些东西移动或者被毁坏都是场景中的变化。「预烘焙的」间接光照可对场景中的静态物体进行建模,但是不适用于有动画效果的角色或运动物体。

2011 年,NVIDIA 工程师开发并演示了一种创新的新方法来在 GPU 上来对全局光照的一种快速近似形式进行动态实时计算。这种全新的全局光照技术采用一个立体像素格子来存储场景和光照信息,另外还利用一种新颖的立体像素锥形追踪过程来收集立体像素格子的间接光照。NVIDIA 的 Cyril Crassin 在 有关该主题的论文中 描述了这项技术,大家可以点此查看 2012 GPU 技术大会上的视频。Epic 2012 年的「Elemental」Unreal Engine 4 技术演示采用了类似的技术。


Epic 的 UE4「Elemental」技术演示利用立体像素锥形追踪来打造令人瞠目结舌的全局光照效果。

自那时起,NVIDIA 便一直在开发该技术的下一代版本 (即 VXGI),VXGI 将全新的软件算法与 Maxwell 硬件中特有的硬件加速相结合。

康奈尔盒子 (Cornel Box)

1984 年,康奈尔大学的研究人员开发了一个简单的场景,用于渲染图形试验。 其理念是,保持场景简单,这样便能够轻松地将计算机生成的图像与照片进行对比。

上面的图像是利用我们最前沿的 iiray 渲染技术生成的,该技术可利用云端多颗并行运行的 GPU 的处理能力,来以近乎实时的速度渲染出照片般的逼真效果。这幅图像非常接近这一康奈尔盒子在现实世界中的视觉效果。

然而 VXGI 的目标是实时运行,而对场景进行充分光线追踪所需的计算量过于繁重,因此需要使用近似法。

上图显示了同一场景的不透明立体像素视图。 每一个立方体均粗略展示了底层的几何图形,我们可以利用这种立方体来加速光线运算。

放射性的立体像素视图正是产生魔力的地方。试想一下,如果每个立方体 (立体像素) 均被场景中的直接光线直接照亮。 那么我们便可以利用现有的超快直接光照技术来为射到立体像素上的光线正确计算色彩和强度。然而与以往不同的是,在下一个阶段,这些被照亮的立体像素将作为光源,产生间接光照。

这幅图像中的色彩有点混淆不清。 首先我们注意一下墙壁。红色墙壁现在有一处淡绿色的暗光,而绿色的墙壁则有淡红色暗光。 这是由于每一面墙壁现在均呈现了房间中对面一侧所发出的一些颜色。 红色墙壁还略微照亮了离它最近的球,诸如此类等等。 实际上,我们会看到最初直接光源所发出的光线在物体表面发生反射。

当我们把所有光线都一起加进来时,我们就可以生成无比逼真的场景。然而重要的是,我们通过利用 VXGI 可以实时地完成这一切。