解密NVIDIA Ray Tracing

by 英伟达中国

光线追踪是大家熟悉而又陌生的技术,去过电影院的人肯定见过,然而除了计算机图形领域的研究者,外界对该技术的了解知之甚少。

光线追踪是现代电影生成或增强特殊效果所依赖的一种技术,比如逼真的反射、折射和阴影。正是这些效果的运用打造出了科幻史诗片中的星际战士。这种技术会使飙车场景令人血脉喷张,使战争片的火焰、烟雾和爆炸场景看起来像身临其境。

光线追踪生成的影像与摄影机拍摄的影像很难区分开来。真人电影将计算机生成的效果与真实拍摄的影像无缝融合在一起,而动画电影则通过光线和阴影隐匿用数字方式生成的场景,力求达到摄影机拍摄般的传神效果。

提及光线追踪,一种很简便的方法就是立即环顾玩家的四周。玩家看到的物体被光束照亮,现在转过身,追踪这些光束从玩家的眼睛向后到与光线交互的物体的路径,这就是光线追踪。

If you’ve been to the movies lately, you’ve seen ray tracing in action.
如果玩家最近去看过电影,应该能在动作片中看到光线追踪。

但在过去,计算机硬件的速度不够快,无法实时使用这些技术,比如在视频游戏中。电影制作人可以随心所欲地花时间来渲染单个帧,因此他们会在渲染场中离线渲染。而视频游戏画面转瞬即逝。因此,人们依赖于另一种技术来处理大部分实时图形,即光栅化。

什么是光栅化?

长期以来,实时计算机图形一直使用一种称为“光栅化”的技术在二维屏幕上显示三维物体。该技术速度快,且效果足够好,尽管它仍然比不上光线追踪所能达到的水平。

借助光栅化技术,可以在屏幕上通过用于创建物体 3D 模型的虚拟三角形或多边形网格创建物体。在这种虚拟网格中,每个三角形的角(称为顶点)与大小和形状不同的其他三角形的顶点相交。每个顶点关联着大量信息,包括其在空间中的位置以及有关颜色、纹理及其“正常形式”的信息,这些信息用于确定物体所朝向的表面的形式。

计算机随后将 3D 模型的三角形转换为 2D 屏幕上的像素或点。可以根据存储在三角形顶点中的数据为每个像素分配一个初始颜色值。

进一步像素处理或“阴影处理”,包括基于场景中的光线如何碰撞像素改变像素颜色,以及将一个或多个纹理应用于像素,从而结合生成应用于像素的最终颜色。

这种技术的计算量异常大。一个场景中的所有物体模型可以使用多达数百万个多边形,4K 显示器中有近 800 万个像素。而且,屏幕上显示的每个帧或图像通常会在显示器上每秒刷新 30 到 90 次。

此外,还要使用内存缓冲区(为加快运行速度预留出来的一点临时空间)在即将到来的帧于屏幕上显示之前预先渲染这些帧。还需使用深度或“z 缓存” 存储像素深度信息,以确保在屏幕上显示像素的 x-y 屏幕位置上的顶层物体,并且顶层物体背后的物体保持隐藏状态。

这正是图形丰富的现代计算机游戏依赖于性能强悍的 GPU 的原因。

什么是光线追踪?

光线追踪技术与此不同。在真实世界中,我们看到的 3D 物体被光源照亮,且光子可以在到达查看者的眼睛以前从一个物体反弹到另一个物体。

光线可能会被某些物体阻挡,形成阴影,或可能会从一个物体反射到另一个物体。比如我们看到一个物体的图像反射在另一个物体表面的情景。然后会发生折射 – 光线穿过透明或半透明物体(如玻璃或水)时发生变化的情况。

光线追踪通过从我们的眼睛(观景式照相机)反向追踪光线捕捉这些效果,这种技术是 IBM 的 Arthur Appel 于 1969 年在《Some Techniques for Shading Machine Renderings of Solids》中首次提出的。此技术可追踪通过 2D 视表面上每个像素的光线的路径,并应用到场景的 3D 模型中。

十年后才迎来下一个重大突破。Turner Whitte 在 1979 年发表论文《An Improved Illumination Model for Shaded Display》,阐述了如何捕捉反射、阴影和反射,他目前就职于 NVIDIA 研究事业部

https://blogs.nvidia.com/wp-content/uploads/2018/03/ray-tracing-turner-whitted-paper.png
Turner Whitted 在 1979 年发表的论文帮助光线追踪技术在翻拍电影领域的运用实现飞跃发展。

利用 Whitted 的技术,当光线遇到场景中的物体时,根据物体表面上碰撞点处的颜色和光照信息可以计算出像素的颜色和照明度。如果光线在到达光源之前反射或通过不同物体的表面,则根据所有这些物体的颜色和光照信息可以计算出最终的像素颜色。20 世纪 80 年代的其他两篇论文为计算机图形革命奠定了其余的知识基础,这场革命颠覆了电影的制作方式。

1984 年,Lucasfilm 的 Robert Cook、Thomas Porter 和 Loren Carpenter 详细介绍了光线追踪如何结合众多常见的电影制作技术(包括动态模糊、场景深度、半影、半透明和模糊反射),而这些效果当时还只能依靠摄影机制作。

两年后,加州理工学院 Jim Kajiya 教授发表论文《The Rendering Equation》,完成了将计算机图形生成方式移植到物理学的工作,更好地展现了光在整个场景中的散射方式。

将这项研究与现代 GPU 结合起来取得了显著的成果,计算机生成的图像捕捉的阴影、反射和折射能够以假乱真,与真实世界的照片或视频很难区分开来。正是这种真实感让光线追踪开始征服现代电影制作领域。

这种技术的计算量同样非常大。正因如此,电影制作人才依赖于大量的服务器或渲染农场。而且,渲染复杂的特殊效果可能需要花上几天甚至几周的时间。

可以肯定的是,许多因素都会影响光线追踪的整体图形质量和性能。实际上,由于光线追踪的计算量异常大,此技术通常用来渲染场景中视觉质量和现实感受益于此技术更多的部分,而场景的其余部分则使用光栅化进行渲染。光栅化仍能提供出色的图形质量。

未来将如何发展?

随着 GPU 性能日益强悍,下一阶段理应是让更多人享受到光线追踪技术带来的好处。例如,借助光线追踪工具(如 Autodesk 的 Arnold、Chaos Group 的 V-Ray 或 Pixar 的 Renderman)和性能强悍的 GPU,产品设计师和建筑师使用光线追踪在几秒内即可生成逼真的产品模型,促进他们更加有效的协作,并省去昂贵的原型设计环节。

https://blogs.nvidia.com/wp-content/uploads/2018/03/ray-tracing-interior-photo-real.jpg
光线追踪已经向建筑师和照明设计师证明了它的价值,他们正在利用这些功能对光线与设计如何交互进行建模。

随着 GPU 的计算能力日益提升,视频游戏将成为此技术的下一个前沿阵地NVIDIA 在星期一宣布推出 NVIDIA RTX。这是一种光线追踪技术,可为游戏开发者提供电影级画质的实时渲染。它是 NVIDIA 在计算机图形算法和 GPU 架构领域经过 10 年努力所取得的成果。

它包含在 NVIDIA Volta 架构 GPU 上运行的光线追踪引擎。它的设计支持通过各种接口进行光线追踪,立足于此,NVIDIA 与微软紧密合作,通过微软新的 DirectX Raytracing (DXR) API 提供全面的 RTX 支持。

为了帮助游戏开发者利用这些新功能,NVIDIA 还宣布 GameWorks SDK 将添加一个光线追踪降噪模块。更新版 GameWorks SDK 即将推出,其中包含光线追踪区域阴影和光线追踪光泽反射。

所有这一切都有助于游戏开发者和其他人将光线追踪技术应用到他们的工作中,以创造更真实的反射、阴影和折射。

如此一来,玩家在家中玩游戏时便会享受到更多如同电影院好莱坞大片的电影级画质,有更好的视觉效果及游戏体验。缺点还是有的:玩家得自己做爆米花了。

请阅读 Matt PharWenzel Jakob Greg Humphreys 合著的Physically Based Rendering: From Theory to Implementation。本书提供了现代逼真渲染技术的数学理论以及将其应用于工作的实践技巧。

想知道这对游戏玩家意味着什么吗?请参阅 GeForce.com 上的NVIDIA RTX 技术:让游戏实现实时光线追踪