NVIDIA RTX硬件对光线追踪,GPU渲染和V-RAY的帮助有多大?

随着新的 GPU 光线追踪硬件的重大宣布,这篇文章中 Vlado 在解释了这个技术突破对未来渲染的意义。
 
近二十年来,我们使用光线追踪渲染器(ray-traced renderer) – V-Ray 研究并实现了最高端的写实渲染。光线追踪是实现相片级写实渲染的最自然的方法,因为光线追踪是基于光的物理行为。正是出于这个原因,美国电影艺术与科学学会(奥斯卡),因 V-Ray 在视觉效果中的广泛采用,颁发光线追踪渲染贡献与科技奖给我们。然而,光线跟踪具有很大的挑战,想要得到真实照片级写实需要大量的计算能力。我们一直努力使光线跟踪速度变的更快,十年前我们开始利用 V-Ray 中 GPU 的强大功能。现在我们期待利用专为光线跟踪计算而设计的新 GPU 硬件。这表示现在我们能够实时进行光线跟踪渲染。
 
NVIDIA 即将推出的 Turing GPU 与利用这个硬件的 RTX 产品线,这对计算器图学和光线追踪历史上的是个重要里程碑。专业显卡 Quadro RTX 系列在 SIGGRAPH 2018上 宣布;消费级显卡 GeForce RTX 系列在 Gamescom 2018 上宣布。这些新的 GPU 将包括专用硬件(称为RT Core),用于帮助我们加速光线跟踪解算并显着地扩展 NVLink 的可用性,价格上可负担。NVLink 使您的场景可用的内存增加一倍。随着全产品系列的宣布,建议您花几分钟时间来了解这对您未来的渲染有什么重大影响。
 
RTX 显卡中的 RT CORE
 
在我们了解 RT Cores 能给我们什么之前,让我们简要介绍一下有关光线跟踪的一些重要事项。在场景中跟踪光线路径的过程通常可以分为两大部分 – 光线投射(ray casting)和着色(shading)。
 
光线投射
 
光线投射(Ray casting)是将光线与场景中的所有对象相交的过程。物体由不同的几何像素组成 – 三角形,曲线段(curve segments, 用于头发),粒子等。物体也可以在场景中实例化(instanced)。在典型的项目制作场景中,可能存在数千个对象实例,其总数达数亿个独特的几何像素。将光线与所有这些基元相交是一项复杂的操作,涉及到高阶数据结构,例如能帮助最小化计算次数的边界体积阶级结构(bounding volume hierarchies,简称BVH)。
 
着色
 
着色(Shading)是确定物体外观的过程 – 包括纹理贴图和材质属性的计算 – 以及物体对光的反应方式。着色还负责确定要跟踪哪些特定光线以计算对象的外观 – 这些光线可以是来自光源,反射,全局照明等的阴影的光线。在实际的项目制作场景中,着色网络(shading networks)可能非常复杂并且可能包括计算程序式纹理(procedural textures),位图查找(bitmap lookups)以及组合它们的各种方法,以确定表面的材质属性 – 如漫反射颜色,反射强度和粗糙度,法线(通过凹凸贴图)等。这个部份还包括光照计算。
 
根据场景中几何体的数量和着色器的复杂程度,光线投射和着色之间的平衡可能会有很大差异。在典型场景中,对于非常简单的场景,光线投射可能需要多达80%,而重型制作场景可能仅花费20%的时间在其上。RTX 显卡包含专门的“RT CORE”,专门用于加速光线投射过程。由于光线投射是一种相对复杂的算法,因此直接在硬件中实现它可以导致显着的速度增加。但请注意,就算光线投射速度非常快且不花任何时间(takes zero time),光线追踪当中仍有着色计算的部份,因此使用RT CORE的速度会因场景而异,具体取决于花费在光线投射的时间。通常,具有简单着色器和大量几何体的场景在光线投射上花费更多时间并且在着色上花费更少时间并且将从 RT CORE 中获益最多。相比之下,具有复杂材质(complicated shading networks)和大量程序性纹理但具有相对简单几何形状的场景可能会看到较少的速度提升。
 
为了说明上述几点,我们使用 V-Ray GPU 渲染了相同的场景,并使用实验版本实现了对 NVIDIA RTX 的支持。 我们将整个场景套用灰色材质,然后再使用原始材质。场景总共有95,668,638,333个三角形,并以每像素512个样本的固定取样率进行渲染。
 
虽然我们尚未准备好在未发布的 NVIDIA 硬件上发布性能结果,但我们可以指出哪些东西将从 RT CORE 加速中受益。上面的场景是在图灵(Turing)硬件的预发布版本上渲染的,使用预发布驱动程序和 V-Ray GPU 的实验性修改版本,我们可以跟踪我们的光线投射量。当使用更简单的着色,渲染时间的更大部分用于光线投射,我们应该看到 RT Core的更大优势。 我们还在研究如何修改 V-Ray GPU 的工作方式,以便从新硬件中获得最大性能。应该注意的是,即使在没有任何修改的情况下运行 V-Ray GPU,图灵硬件本身也明显快于之前的 Pascal 生成。
 
要强调的是,为了利用 RT CORE,必须明确编写应用程序,这意味着现有的光线跟踪应用程序不会自动从中受益。这些核心可以通过三个公开的 API – NVIDIA OptiX,Microsoft DirectX(通过DXR扩展)和 Vulkan 来进行程序撰写。DirectX 和 Vulkan 主要用于游戏和实时渲染引擎,而 OptiX 最适合生产级别的光线跟踪,常见于脱机渲染器中。
 
在 Chaos Group 公司,我们已与 NVIDIA 合作了近一年,研究我们可以在产品中使用 RT CORE 的方法。V-Ray GPU 是这项技术的一个显而易见的应用,我们已经写了实验版本的 V-Ray GPU 来测试 RT CORE–尽管还需要花点时间进行优化代码并实现对 V-Ray GPU 所有功能的全面支持。与此同时,请注意所有最新版本的 V-Ray GPU 都可以在任何 RTX GPU 上正常运行,但目前尚未利用 RT Cores。随着我们添加对 RT Cores 的支持,V-Ray GPU 将继续像往常一样支持早期的显示适配器。
 
在下面的视频中,我们展示了一个版本的 V-Ray GPU 经过修改以利用 RT Core,并证明材质和几何更新在修改后可以正常运作。这个视频的目的并非为了展示性能 – 我们将在官方硬件发布后推出一篇博客文章中发布性能基准检验。
 
我们还在 Lavina 项目的即时光线跟踪环境中,测试了使用 RT Cores,以确定硬件的功能。我们还对是否有可能在这个案例中,完全用光线追踪替换光栅化感兴趣。 DXR 是第一个公开支持 RT CORE 的实时 API,因此目前 Lavina 项目基于 DXR。 我们也在考虑使用 Vulkan 的 API 以便稍后支持 Linux 操作系统。初步结果非常有前景,我们打算继续开发和改进这项技术。当然,这还在很早期;前正在进行大量关于实时路径追踪的研究,我们预计在接下来的几个月内,效果会迅速改善,能为我们的用户提供在实时环境中探索其场景的新方法,而无需经过将这些转换为实时引擎的繁琐过程。
 
一如往常,我们的解决方案仅基于光线跟踪 – 与现有游戏引擎和 DXR 示例相比,后者仅部分进行光线跟踪,但仍主要依赖于光栅化。
 
RT CORE 仅是硬件加速的一部分。 RTX 显卡还支持一种称为 NVLink 的功能,可将 V-Ray GPU 可用的内存加倍,以便减少内存对性能的影响到最小。
 
NVLink
 
NVLink 是一种技术,允许两个或以上的显示适配器 GPU 与网桥连接,可用极快的速度共享数据。这意味着每个 GPU 都可以取用其他 GPU 的内存,而像 V-Ray GPU 这样的程序可以利用它来渲染太大而无法放在单张卡上的场景。传统上,当在多个图形适配器上渲染时,V-Ray GPU 会复制每个 GPU 内存中的数据,但使用 NVLink 可以合并 VRAM (译者注: 显卡内存)。 例如,如果我们有两个具有 11GB VRAM 并与 NVLink 连接的 GPU,则 V-Ray GPU 可以使用显卡来渲染最多 22 GB 的场景。 这对用户完全一目了然 – V-Ray GPU 在可用时自动检测并使用 NVLink。 因此,虽然在过去加倍你的卡只能让你加倍指令周期,现在使用 NVLink 你也可以加倍显卡内存。
 
NVLink 于 2016 年推出,V-Ray GPU 是第一个在 V-Ray 3.6 和更新版本中正式支持这项技术的渲染器。到目前为止,该技术仅在专业 Quadro 和 Tesla 显示适配器上可用,但随着 RTX 系列的发布,NVLink 也可用于游戏卡 GPU – 特别是在 GeForce RTX 2080 和 GeForce RTX 2080 Ti 显卡上。 使用 NVLink 连接两张卡需要一个特殊的 NVLink 连接器,该连接器是单独出售的。
 
结论
 
以前有过光线投射(ray casting)的专用硬件,但绝大部分不成功 – 其中一个原因是着色和光线投射计算通常密切相关,如果将这两者在完全不同的硬设备上运行效率不高。 让两个进程在同一的 GPU 内运行使 RTX 架构变得有价值。我们预计在未来几年中,RTX 系列 GPU 将对渲染产生巨大影响,并将稳固地建立 GPU 光迹追踪作为生成计算器生成图像的技术,用于脱机和实时渲染。Chaos Group 正在努力将这些新的硬件技术交到客户手中。
上一篇:英伟达nvidia推出RAPIDS开源GPU加速平台
下一篇:NVIDIA 虚拟 GPU 技术及工作原理指南