浅浅的懂得什么是光线追踪以及RT Core的加入

两个概念:

第一个光线追踪:

光线追踪是以光线的物理特性为核心的算法。原理是从使用者端作为起点,寻找光线反射,折射的路径并计算出使用者会看到的物体颜色和亮度。如图所示:

但是由于是让大量的光线在空间中反射折射,并且空间中的物体状况未知,每次绘制一张图需要的计算量是相当巨大,没办法即时算出结果,因此现在游戏中采用的是光栅化和光线追踪相结合的“混合渲染”。也就是使用光栅化绘制的画面作为基础,然后使用光线追踪生成一些额外的信息给画面去锦上添花。(光栅化用于普通,需要高效处理的场景中,而光线追踪用于最具视觉效果的地方,比如水面反射,镜子反射,玻璃折射等)

区别下上面提到的光栅化和光线追踪:

 

 

 如上图所示:左面是光栅化,右面是光线追踪。我们可以看到左图中光栅化根据玩家摄像机的位置以及视角等参数,计算出这些三角形在屏幕上覆盖到了哪些像素点,然后再使用光源材质等信息来计算这些像素点的颜色从而绘制出游戏画面。右图中的光线追踪是找一个起始点对着场景发射一堆虚拟的光线(考虑到算力的问题其实只发射少数光线),然后追踪并记录这些光线与场景中物体之间碰撞的信息,然后再用这些信息生成画面的一种技术。

由于光线追踪中的射线需要与场景中所有物体的所有三角面都要进行一次相交测试,才能确定这一根射线到底打到了场景中的哪一个三角面上,这个部分计算量非常大,难以做到实时,所以很多时候像是你看美国大片的渲染都是离线渲染。为了解决这个问题,NVIDIA引入了RT core。

第二个是RT Core:

NVIDIA Turing架构新增的RT core运行单元就如同Volta架构新增的Tensor core一样,是为了特殊应用场景而设计的计算单元。此单元的设计目标是为了让GPU拥有即时运算的光线追踪能力,一种可以让游戏更逼真的渲染算法。

Ray tracing需要进行的主要计算,是对每一条光线,在当前场景的所有物体中,找到其最近的相交点。而目前计算机图形学中对场景的模拟都是通过无数个三角形拼接实现的,因此主要的计算也就成了对于每一条光线,在场景中找到第一个与其相交的三角形。

在Turing GPU core的架构图中RT core的部分提到两个关键术语:Ray Triangle Intersection(射线三角交点)和BYH Traversal(BYH遍历)。射线三角交点就是寻找光线和三角形的交点位置的过程,BYH遍历主要是减少计算每一条光线最近的交点所需要遍历的三角形数量,它通过对场景的预处理来加速寻找某一条光线最近的三角形(将空间上比较接近的物体归到同样的类别来加速遍历)。并且一个场景中通常会有非常多的光线,而在一次渲染中这个预处理只需要进行一次,就可以供所有光线(反射或折射的光线)使用。

 

 

 总的来说光线追踪使得游戏等一些逼真场景的应用达到了实时渲染的效果,而起到实时性的功劳来自于RT core的加入。

 

posted @ 2022-03-09 16:19  QZ-CMD  阅读(1510)  评论(0编辑  收藏  举报