什么是光线跟踪,是如何实现实时三维图形的?

Posted wujianming-110117

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是光线跟踪,是如何实现实时三维图形的?相关的知识,希望对你有一定的参考价值。

什么是光线跟踪,是如何实现实时三维图形的?

What is ray tracing and how is it enabling real-time 3D graphics?

周围的世界充满了由太阳或人造光源发出的数十亿光线。当光线照射到物体和表面时,光线会以各种方式反弹、折射和反射,直到最终到达眼睛;正是这种复杂的相互作用创造了对现实的看法。光线跟踪是一种模拟真实世界的三维图形照明技术,虽然可以产生最真实的结果,但传统上,对于计算机来说,该过程过于复杂,无法实时创建三维图形。             

如今,被广泛用于为广告和电影创建超现实的渲染效果,但在这些情况下,即使在当今强大的计算服务器上,生成每一帧也需要数小时。光线追踪是一个流行语,产生了大量的兴奋(或炒作,取决于观点)作为实时图形的前进方向。在本文中,将介绍光线跟踪,以及是什么使成为现实。

Shrinking the problem

缩小问题             

在一个3D游戏中,世界是由物体组成的,当这些物体组合在一起时,由数百万个三角形组成。光线追踪最基本的功能是发出光线,沿着光线的路径穿过3D世界,找到到达的第一个物体,以确定应该如何被照亮。即使是对场景中的每一个对象测试一条光线,看是否相交,这样做的能量效率太低,计算成本也很高,无法实时实现。              

为了使用光线跟踪,需要解决这个问题。

技术图片

 使用场景层次结构将该兔子划分为多个框。             

这可以通过构建光线跟踪加速结构来实现。为了做到这一点,在游戏世界周围画了一个盒子,然后把盒子细分成更小的盒子,再把这些盒子再分成更小的盒子,直到最终,有了一个小盒子,里面有可管理数量的三角形。称之为场景层次结构,正是这种结构帮助将问题简化为当前图形处理器能够有效处理的问题。             

之所以有效是因为当将光线发送到游戏世界时,首先根据最大的盒子来检查光线。光线会击中世界吗?如果是,检查下一级的小盒子。在这个阶段,发现光线穿透了一些盒子,但没有穿透盒子。因此,消除了漏掉的部分,只深入到被光线击中的盒子里,直到找到光线与三角形相交的地方。在这一点上,最终找到了目标。             

这种层次结构使能够在不需要测试场景中每个三角形的情况下找到光线和三角形的最近交点。大大简化了问题,因此可以更快地完成。

在几何处理阶段(硬件执行对象动画的工作)之后,将这些三角形输入到一个称为场景层次生成器(scene hierarchy generator)的专用硬件中,该硬件将生成上述加速结构。还增加了一些专门的光线/盒/三角形测试仪,是专用的固定功能硬件,通过这种加速结构来跟踪光线,并定位光线和三角形的交点。与使用软件可编程管道相比,在专用硬件中完成所有这些操作要快得多,面积和功耗也更高。             

那么,一旦硬件确定射线击中了三角形,下一步该怎么办?触发了一个片段着色器,一个小程序,决定了三角形特定位置的颜色,这一步基本上与传统渲染相似。从这个碎片着色器程序,然后发送更多的光线到三维世界,当这个过程重复,建立光线跟踪场景。

The coherency problem

一致性问题             

但现在遇到了一个新问题。正在向场景发送大量光线,但如何有效地处理所有这些?需要从内存中的加速结构中取出长方体和三角形,每一条光线每次击中一个物体时都会触发一个碎片程序。             

不幸的是,光线是不稳定的,不一定朝同一方向传播。在技术术语上,将其描述为不连贯性,这是有问题的。非相干数据访问对现代gpu是不利的。这有点像试图在一个按字母顺序排列的Rolodex中查找信息,但是名字是以完全随机的顺序给出的,这意味着大量的来回移动,占用了宝贵的时间并消耗了宝贵的精力。

技术图片

Ray tracing acceleration structures

射线追踪加速结构             

更糟糕的是,当光线随机反弹时,还会击中不同的对象和三角形,这些对象和三角形需要使用不同的颜色和着色,这将触发不同的着色器程序。但是,gpu喜欢以并行方式处理着色器。这正是gpu的强项:以大规模并行方式处理数据的能力,这使比cpu等处理器具有优势。这是因为算术逻辑单元(alu)本质上是单指令、多线程(SIMT)。如果每一条光线都触发一个不同的着色器,将无法在GPU上工作,因为这需要多指令、多线程(MIMT)体系结构,这是硅区域和低功耗的。             

一个解决方案是由Imagination Technologies开发的相干引擎,跟踪光线并在场景中所有光线的混乱中找到秩序。             

如果查看图像(下图),光线最初看起来可能是随机的。然而,如果仔细观察,会发现事实上,这是一致的。

技术图片

为了解释,请注意物体的某些部分是如何反射同一个黄色物体的。尽管看起来很混乱,但一些光线却朝着同一个方向射向相似的物体。一致性引擎会寻找这一点,将这些光线分成组,从而使GPU更容易处理。这就是“魔力”,因为可以重新获得数据访问和执行效率,从而降低处理中的功耗和带宽。

The benefits of hybrid rendering

混合渲染的好处             

这太好了,现在可以追踪光线,而且效率很高。然而,正如之前所说,现实会反弹数十亿光线,使眼睛看到图像,因此,即使提高了所有的效率,使用光线跟踪创建一个完整的场景仍然是个问题。答案是什么?混合渲染。             

虽然传统的光栅化渲染在今天做得很好,但在处理诸如光/影、反射和折射之类的空间交互方面很困难,而光线跟踪恰恰擅长这些复杂的事情。通过混合渲染,抓住了这两个世界的优点,对简单对象使用光栅化,然后从着色器中爆炸光线,有选择地创建有限数量的空间光线跟踪查询,以创建超真实的阴影、照明效果和精确的反射。通过使用这种混合方法,大大减少了需要跟踪的光线数量,这最终使进入了实时性能的领域。

Ray tracing on a phone: is it really possible?

手机射线追踪:真的有可能吗?             

简单的回答是肯定的。今天的智能手机中的GPU自首次发布以来已经取得了巨大的进步,不仅是在功能集方面,而且在现实世界中可实现的性能方面。事实上,高端智能手机已经突破了1tflops的计算障碍,而这一障碍此前是专用游戏机的专属竞技场。现在真正的问题是效率。智能手机依赖电池寿命,由于光线跟踪比传统渲染方法更高效,因此很有可能迅速将其添加到移动体验中。             

利用上述创新,想象力使有效的光线追踪成为可能。在智能手机中,使用传统光栅化技术在游戏中伪造阴影和反光的成本已经非常高。在现代游戏引擎中,例如Unity或Unreal,反射是使用级联阴影贴图生成的。这需要多次渲染屏幕的几何图形,并将阴影映射查找表写入内存,所有这些都需要周期和带宽,消耗大量的GPU和系统功率。             

使用光线跟踪,将一条光线发送到光源,如果该光线击中除光以外的任何物体,就知道碎片在阴影中。使用流线型超优化光线跟踪解决方案,这要简单得多,因此比级联阴影贴图所需的预处理功耗更低。             

在分析2016年的原型光线跟踪硬件时,发现对于阴影、反射和技术,功耗通常不到一半,并且产生的质量要高得多。这里的认识是,复杂但“假”的技术比光线追踪的简单性消耗更多的能量,光线追踪能产生更真实的结果,使其不仅适用于现代高端智能手机,而且非常受欢迎。

AI and super-resolution

人工智能与超分辨率             

虽然基于智能手机的光线追踪是一种选择,但同样对云游戏的日益普及感到兴奋,5G网络和边缘计算的增长也为其提供了支持。在这里,光线跟踪体系结构实现的带宽和功率效率可能是至关重要的。

技术图片

创新总是需要以更少的代价提供更多,因此,对人工智能处理的快速发展感到非常兴奋。与神经网络一起,这些可以与光线追踪相结合,提供更高的效率。例如,由于为了提高效率,只跟踪一个相对的光线,所以可能会得到有噪的结果。神经网络在降噪方面显示出巨大的潜力,可以利用学习到的“智能”来填补缺失的细节。同样,这就是现实的运作方式,因为大脑也填补了有限的人类视觉系统留下的许多空白。

技术图片

Neural networks can be used to improve quality without having to move to higher resolutions

神经网络可以用来提高质量,而不必移动到更高的分辨率             

另一个很有潜力的概念是超分辨率。这又一次利用了神经网络的力量,这次智能地学习如何填充缺失的细节,以允许gpu以较低的分辨率渲染,从而提高性能并降低功耗,同时仍然保持视觉质量。             

未来             

毫无疑问,实时光线跟踪有一个光明的未来,这无疑是一个令人兴奋的时刻,任何人对三维图形感兴趣。由于基于真实世界的物理,光线追踪提供了最高水平的真实感,但也提供了极大的效率,与目前使用的黑客和近似法相比。低功耗光栅化图形,开创性的光线追踪工作,以及人工智能和神经网络的持续创新,所有这些结合在一起,有助于将图形提升到一个新的水平。

以上是关于什么是光线跟踪,是如何实现实时三维图形的?的主要内容,如果未能解决你的问题,请参考以下文章

如何在现代 OpenGL 中进行光线追踪?

图形学计算机图形学知识点提纲11

求tubor c C语言三维图形代码,越多越好

如何用C#构建三维空间

3D计算机图形学的目录

如何基于人体人脸跟踪实时监测心率?