什么是光线追踪,它是如何启用实时3d图形
扫描二维码
随时随地手机看文章
我们周围的世界充满了太阳或其他人造光源所发出的数十亿种光线。当光线击中物体和物体表面时,光线以各种方式反弹、断裂和反射,直到它们最终到达我们的眼睛;正是这种复杂的互动创造了我们对现实的看法。光线追踪是一种三维图形的照明技术,模仿现实世界的方法,虽然它产生了最现实的结果,但这一过程传统上过于复杂,计算机无法实时生成3d图形。
如今,它被广泛用于为广告和电影制作超现实的画面,但在这些情况下,即使是在当今强大的计算机服务器上,也需要花费数小时来生成每一个画面。射线追踪是一个流行词,它可以产生大量的兴奋(或大肆宣传,视你的观点而定),作为实时图形的前进之路。在这篇文章中,我们研究了射线追踪,以及是什么使它成为现实。
减少问题
在3d游戏中,世界是由物体组成的,如果结合起来,它由数百万个三角形组成。射线追踪的最基本功能是发出光线,沿着它的路径穿过3D世界,找到它到达的第一个物体,以确定该如何照明。即使是用每一个场景中的物体来测试一个光线,看它们是否相互交叉,都是效率太低,计算成本太高,无法实时应用。
为了使用射线追踪,我们需要解决这个问题。
利用场景层次结构将这只兔子分成几个盒子
这可以通过建立射线追踪加速度结构来实现。为了做到这一点,我们在游戏世界中画了一个盒子,然后我们将它细分为更小的盒子,然后再将那些盒子细分为更小的盒子,直到我们最终拥有一个小盒子,里面包含可以控制的三角形数量。我们称之为场景层次结构,正是这个帮助我们将问题减少到当前图形处理器能够有效处理的东西。
它之所以有效,是因为当我们向游戏世界发送光线时,我们首先在最大的盒子上检查光线。光线会击中我们的世界吗?如果是的话,我们会检查下一级别的小盒子。在这个阶段,我们发现我们的射线已经穿透了一些盒子,而不是其他的。因此,我们排除了它所错过的东西,只深入到被光线击中的盒子里,直到我们找到光线与三角形交叉的地方。在这一点上,我们最终找到了目标。
这种分层结构使我们能够找到最近的光线和三角形的交叉点,而不必测试场景中的每一个三角形。它大大简化了问题,因此可以更快地完成。
在硬件完成动画化对象工作的几何处理阶段之后,我们将这些三角形输入到一个名为"场景层次生成器"的专门硬件中,它生成了上面描述的加速度结构。我们还增加了一些专用的射线/盒/三角测试器,它们是专用的固定功能硬件,通过这种加速度结构来追踪光线,并定位射线和三角形的交点。与使用可编程的软件管道相比,在专用硬件中完成所有这些工作要快得多,面积更大,效率更高。
那么,一旦硬件确定光线击中三角形,下一步是什么?所发生的是,我们触发了一个片段着色器,一个小程序,它决定了该三角形特定位置的颜色,这一步骤与传统的呈现基本相似。通过这个片段着色程序,我们将更多的光线发送到3D世界,当这个过程被重复时,它建立了我们的光线追踪场景。
连贯性问题
但现在我们有了新问题。我们正在向现场发送大量的射线,但是我们如何有效地处理所有这些?我们需要从我们的内存中的加速度结构中获取盒子和三角形,每个光线每次击中一个物体时都会触发一个片段程序。
不幸的是,光线是不稳定的东西,它们不一定是朝同一方向移动的。从技术上讲,我们将其描述为不连贯--这是个问题。不连贯的数据访问是不良的现代GPS。这有点像试图在字母表中查找信息,但是这些名字是完全随机地给我们的--提示我们来回闪烁,占用宝贵的时间和宝贵的精力。
射线追踪加速度结构
更糟糕的是,当光线在周围随机反弹时,它们也会击中不同的物体和三角形,这些物体需要不同的颜色和阴影,这将触发不同的着色程序。然而,GPS喜欢以并行的方式处理着色器。这正是GPS强大的地方:他们能够以大规模并行的方式处理数据,这使他们比CPU等其他处理器更有优势。这是因为他们的算术逻辑单元(Alus)本质上是单个指令、多个线程(Simt)。如果每一个射线触发一个不同的着色器,它将不会工作在一个GPU上,因为这将需要一个多重指令,多个线程(MIMT)架构,这是硅面积和功率效率低下。
一种解决办法是通过想象技术开发出的连贯性引擎,它追踪光线,并在场景中所有光线的混乱中找到秩序。
如果你观察图片(下面),光线最初可能看起来是随机的。然而,如果你更仔细地看,你会注意到,实际上,有一致性。
为了解释,请注意物体的某些部分是如何反映同一个黄色物体的。尽管表面上看起来很混乱,但一些射线正朝着同一个方向运动,并击中类似的物体。我们的一致性引擎寻找这一点,将这些射线分类成组,从而使它们更容易处理的GPU。这就是"魔力",因为我们重新获得数据访问和执行效率,从而降低了处理中的功率和带宽。
混合绘制的好处
这太棒了,我们现在可以追踪光线,并且有效地进行。然而,正如我们之前所说的,现实在周围反射了数十亿的光线,使我们的眼睛看到的图像,所以即使我们的效率提高了,使用射线追踪创造了一个完整的场景,仍然是个问题。答案是什么?混合绘制。
虽然传统的光栅化绘制今天做得很好,但它与空间相互作用,如光/影,反射和折射--正是光线追踪擅长的复杂事物。通过混合绘制,我们抓住了两个世界中最好的东西,用光栅化处理简单的物体,然后从我们的着色器中选择性地产生有限数量的空间射线跟踪查询,以产生超现实的阴影、照明效果和精确的反射。通过使用这种混合方法,我们大幅度地减少了我们需要追踪的射线数量,这最终使我们进入了实时性能的领域。
雷追踪电话:真的有可能吗?
简单的回答是是。如今智能手机中的gp自首次推出以来,不仅在功能集方面,而且在现实世界中的性能方面都取得了巨大的进步。事实上,高端智能手机已经突破了TFLOPS计算障碍,这是以前专用游戏机的唯一领域。这里真正的问题是效率。智能手机依赖于电池寿命,由于射线追踪比传统的绘制方法更有效,它很有可能很快被添加到移动体验中。
利用上述的创新,想象力使有效的射线追踪成为可能。在智能手机中,在游戏中假装阴影和反射的成本已经很高了。在现代游戏引擎中,如统一或不真实,反射是使用级联阴影映射生成的。这就需要多次绘制屏幕的几何形状,并将阴影映射查找表写入内存,所有这些都需要周期和带宽,耗费大量的GPU和系统力量。
通过光线追踪,我们向光源发送一个光线,如果光线击中光以外的任何东西,我们知道碎片在阴影中。使用我们的流线型超优化射线追踪解决方案,这要简单得多,因此比级联阴影映射所需的预处理功率更低。
在分析2016年的原型射线追踪硬件时,我们发现,对于阴影、反射和其他技术,功率消耗往往不到一半,由此产生的质量更高。这里的认识是,一种复杂但"假冒"的技术比简单的射线追踪更消耗能量,这提供了更现实的结果,使它不仅适合而且可取于现代高端智能手机。
人工智能和超分辨率
虽然基于智能手机的射线追踪是一种选择,但我们同样为云游戏日益流行而兴奋,这是由于5G网络和边缘计算的增长所支撑。在这里,我们的光线追踪架构所支持的带宽和功率效率可能是至关重要的。
创新总是需要以更少的成本提供更多的产品,因此,我们对人工智能加工的快速进步感到非常兴奋。再加上神经网络,这些可以与射线追踪相结合,从而提供更高的效率。例如,由于我们只是为了提高效率而追踪相对较多的射线,我们可能会得到较多的结果。神经网络显示出巨大的希望,减少噪音填补缺失的细节,使用学习的"智能"。同样,这也是现实的运作方式,因为我们的大脑也填补了我们有限的人类视觉系统留下的许多空白。
神经网络可以用来提高质量,而不必转移到更高的分辨率
另一个巨大的潜在概念是超分辨率。这再次利用了神经网络的力量,这一次聪明地学习如何填补缺失的细节,使GPS能够在较低的分辨率呈现,从而提高性能和减少耗电,同时仍然保持视觉质量。
未来
毫无疑问,实时射线追踪有着光明的未来,这无疑是对3D图形感兴趣的人兴奋的时刻。由于它基于现实世界的物理学,射线追踪提供了最高水平的现实主义,但它也提供了很高的效率,相对于我们迄今为止一直在使用的黑客和近似。低功率光栅化图形,开拓性的射线追踪工作,以及在人工智能和神经网络中持续的创新,所有这些结合起来,帮助将图形提升到下一个层次。