图灵如何实现光线追踪
NVIDIA在Turing架构的每个SM中新增RT Core是迈向实时光线追踪的关键,硬件加速是实现这一目标的唯一途径。
为了更好地理解RT核的功能,以及它们究竟加速了什么,笔者首先解释如何在没有专用硬件光线追踪引擎的情况下用GPU或CPU执行光线追踪。基本上,BVH遍历的过程需要通过着色器操作来执行,并且每光线投射数以千计的指令槽来针对BVH中的边界框交点进行测试,直到最终命中三角形,并且交点处的颜色将被用于最终像素填充。或者如果没有三角形被击中,背景颜色可以用来填充这个像素,这样就做到了模拟现实世界中人眼的视觉原理——你只能看到反射光的物体。
没有硬件加速的光线跟踪要求每条射线有数千个软件指令槽来测试BVH结构中的连续较小的边框,直到可能碰到一个三角形。这是一个海量计算的过程,使得在没有基于硬件的光线跟踪加速度的情况下,无法在GPU上进行实时处理,速度奇慢无比。
Turing的RT内核可以处理所有的BVH遍历和射线-三角形相交测试,节省了SM在每条射线上花费数千个指令槽,这对于整个场景来说可能是无法承受的巨量指令。RT核心内有两个专用单元,第一个单元进行边框回归测试,第二个单元进行射线三角形相交测试。SM只需要启动一个光线探测器,RT核进行BVH遍历和射线三角形测试,并向SM返回命中或不命中,SM本身即可被充分释放来做其它图形计算工作。
因此RT核的Turing光线跟踪性能比上一代Pascal依靠软程序实现的快得多。Turing可以在不同的工作负载下提供比Pascal更多的千兆射线/秒,比如Pascal大约花费1.1千兆射线/秒,或者10TFLOPS/千兆射线在软件中进行光线跟踪,而Turing可以使用RT Cores进行10+千兆射线/秒,并且运行速度要快10倍。
尽管光线跟踪比光栅化可以产生更逼真的图像,但它也是负荷很高的运算,目前单靠RT Core依然无法用完全的实时光线追踪来流畅运行游戏,最好的方法是混合渲染,用光线跟踪和光栅化组合。使用这种方法,将光栅化用在需要效率的地方,而光线跟踪用在比光栅化更多能增加逼真度的视觉增益区域,如反射、折射和阴影。