超能课堂(150):RTX显卡支持的实时光线追踪是什么?

2018-8-23 18:07  |  作者:梁俊豪   |  关键字:超能课堂,光线追踪

前两天NVIDIA发布了RTX系列游戏显卡,明确表示从硬件级别支持光线追踪!那么到底什么是光线追踪?

本文约3603字,需6分钟阅读

今年计算机图形学上什么最火爆?那莫过于实时光线追踪了。GDC 2018上,微软率先为DirectX 12 API增加了光线追踪模块,命名为DirectX Raytracing (DXR);NVIDIA则是发布了基于实时光线追踪的RTX技术;AMD也宣布是自家的ProRender渲染引擎将支持实时光线追踪。此外诸如EA 寒霜引擎、EA Seed、Unreal 引擎、3DMark、Unity 引擎已经宣布将会引入光线追踪。但这些似乎距离我们还有些遥远,直到前两天NVIDIA发布了RTX 2080 Ti、RTX 2080、RTX 2070游戏显卡,明确表示从硬件级别支持光线追踪!那么到底什么是光线追踪?


TLDR的话,下面有2分钟看懂视频:

手机通道:哔哩哔哩

光线追踪能达到什么样的效果?其实这个我们每一个人都体验过,绝大部分科幻、动作电影里面或多或少都会用上光线追踪这一技术。比如令人血脉贲张的《极品飞车》、《权力游戏》中的火焰、烟雾和爆炸效果仿佛身临其境,可以说光线追踪生成的影像与摄影机拍摄的影像难以区分,这就是光线追踪能达到的极致效果。但具体如何做到的,请听我娓娓道来。

其实刚听说要详细讲一下什么是光线追踪我是拒绝的,因为,你不能让我写,我就马上去写,第一里面涉及到算法、数学原理实在是太多了,因为我不愿意写的时候涉及过多公式,“Duang”一下,显得很高大上,这样观众出来一定会骂我,根本看不懂你在讲什么,那就等于白讲了。后来想了想,希望以最通俗易懂方式来讲解光线追踪是怎么回事,尽可能地少涉及到数学公式以及算法原理,因为我要让观众看到,我能理解的是这样子,你们看完之后也会是这个样子!


B站地址:av21083762 里面有很多P,可以选1080分辨率享受

光栅化

想要了解什么是光线追踪,这里我们不得不提及耳熟能详的专业名词“光栅化”,因为它是光线追踪的基础,也是高效替代方案。为什么会出现这样看似矛盾的定义?

因为光栅化是一个非常宏大的概念,它有可能是指代某一个框架,也可能是具体到某一个技术上。就目前现阶段来说,我们并不愿意将光栅化放到与光线追踪的对立面上,因为光线追踪还是需要光栅化作为基础,同时起到锦上添花作用,因此现阶段实现的依然是混合渲染,两者相辅相成,缺一不可,并不是部分自媒体吹嘘的那样,光线追踪可以完全替代光栅化。

光栅化的简单原理:


图片来源

按照字面意思就是把图像栅格化、像素化,将电脑生成的矢量图转换成屏幕像素点的过程。比方说,游戏中物体建模的时候都是三维,由点线面构成,但要显示在二维的显示器上,就需要一个“降维打击”——光栅化,成为能够被显示的像素点,其实就是三维向二维的转化过程,这是目前渲染的基石。


图片来源

NVIDIA亲自解释光栅化过程:(不看也不影响阅读系列)


图片来源

每个三角形的顶角与大小和形状不同的其他三角形的顶点相交,每个顶点关联着大量信息,包括其在空间中的位置以及有关颜色、纹理及其“正常形式”的信息,这些信息用于确定物体所朝向表面的形式。 计算机随后将3D模型的三角形转换为2D屏幕上的像素或点,可以根据存储在三角形顶点中的数据为每个像素分配一个初始颜色值。


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

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

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

光栅化过后的平面图像其实并不真实,这是原理所决定的,因此后期图形学中出现了增强真实感的各种渲染技术,包括“全局照明”、“环境光遮蔽”、“漫反射”以及“软阴影”,他们都是意图用更低开销实现更真实的光照效果。

由于都是通过算法来实现,并没有统一标准,游戏开发商可以自行选择并使用,因此我们看到一些游戏里面有各种光影特效,而另一些游戏中就没有。如此之多、五花八门的技术就是为了创造以假乱真的光照效果,其实说到底就是我们的显卡算力太弱了,只配用这种近似解的方案。


图片来自artofvfx

光线追踪

而在电影行业中,早就用上了我们提及的光线追踪,他们已经有相当成熟的解决方案,完全可以达到以假乱真的效果,你看看漫威的科幻大片,是不是给你一种异常真实的错觉?没错,这就是光线追踪的魅力。

至于为什么电影行业能这样做,原因不外乎有两个:一是有时间,他们采用的离线光线追踪,是要慢慢一帧帧渲染出来;二是有钱,通常特效工作室会使用到NVIDIA所说的渲染农场,不是一台电脑在算,而是一个个渲染集群服务器在工作,算力是你机箱里的GTX 1080 Ti成千上万倍,因此它们可以这样玩。


图片来源

光线追踪的历史

其实光线追踪并不是近几年才有的概念,它的历史甚至可以追溯到上世纪70年代。

1968年,Arthur Appel在其论文《 Some techniques for shading machine rendering of solids》提出Ray Casting(光线投射)的新概念,这也是后来光线追踪的基石。


图片来源见水印

其具体思路是从每一个像素发出一条光线,然后找出会挡住传播路径的物体,那么只要计算被挡住之前的传播路径(直接光照部分),而视平面上每个像素的颜色取决于从可见光表面产生的亮度。

但一直等到10年后的1979年,Turner Whitted才继续在论文《An Improved Illumination Model for Shaded Display》中,具体解析如何捕捉反射、阴影和反射。在光线投射的基础上,加入光与物体表面的交互。


图片来源见水印

光线追踪主要思想是从视点向成像平面上的像素发射光线,找到阻挡光线传播的最近物体,如果交点表面为散射面,则计算光源直接照射该点产生的颜色;如果该交点表面为镜面或折射面,则继续向反射或折射方向跟踪另一条光线,如此往复循环,直到光线射出场景或者达到规定计算次数(还是为了节省资源)。这个方法被称之为经典光线跟踪方法或者递归式光线追踪方法。


图片来源见水印

顺带提醒一下大家,Turner Whitted作为光线追踪的创始人,目前就任于NVIDIA 研究事业部,所以你能理解NVIDIA为什么那么热衷于光线追踪追踪了吗?

光线追踪目前的瓶颈——计算量庞大、小样本计算噪点 

光线追踪是三维计算机图形学中的特殊渲染算法,它与之前计算光源光线传播路径不一样,利用光的可逆性质,反向计算,跟踪从眼睛发出的光线,通过技术生成编排好的数学模型展现出来,这样的得到画面效果更佳,对于反射与折射有更准确的模拟效果,并且效率非常高,因此在电影制作过程往往会采用这种高质量的渲染方式。


图片来源NVIDIA

但很遗憾,光线追踪最大缺陷在于对算力要求极高,计算量非常庞大,目前的单一硬件很难满足实时光线追踪的需求。光栅图形学中的算法,利用了数据的一致性从而在像素之间共享计算,而光线跟踪通常是将每条光线当作独立的光线,每次都要重新计算。所以尽管电影特效工作室有庞大的计算集群,但他们也会“偷懒”,只有在关键帧、关键元素上采用光线追踪来处理,其余部分依然使用光栅化进行渲染,依然能够提供非常出色的画面效果。由此可想而知计算量之大。

按道理来说,每一条光线都有自己的计算,可以正确地处理出光线反射、折射等光学现象,但实际出来的效果有可能与真实情况不一样。这因为最终的画面是求解通过渲染方程得到,但有时候方程式解不出来,只能利用蒙特卡洛积分做近似解,需要用到大量的样本进行求解,在电影使用的离线渲染中,由于没有计算时间限制,他们通常会采用几百到几千以内大样本进行计算,出来的光线追踪效果会更好。

一旦用到游戏上就不同了,要达到60fps,也就是一帧只有16ms时间给你进行光线追踪运算,那么样本只能尽可能小,这样就会导致出来解不够准确,画面会有大量噪点。

NVIDIA开创了实时光线追踪新时代

NVIDIA已经预料这一点,针对极低样本数量的光线追踪结果进行实时降噪的研究,并且取得了不错的结果,最后成为GameWorks SDK 中一个光线追踪降噪模块,也就是Denoising算法。最终可以用比较低样本的光线追踪应用到实时渲染中,最终渲染质量可以媲美大样本下的光线追踪收敛图像。

另一方面,随着显卡计算性能日益提升,NVIDIA认为显卡加入硬件级光线追踪支持的时机已经成熟,光线追踪也会成为未来3A级游戏竞相使用的技术,以达到玩家们梦寐以求的画面效果。因此NVIDIA在经历Volta游戏显卡跳票后,带来了拥有专门处理光线追踪的RT Core的Turing游戏显卡,不仅仅可以让游戏开发者进行实时光线追踪计算,所见即所得,而玩家也能从游戏中感受到前所未有、电影级的画质。

就像NVIDIA所说的那样,图灵架构显卡凝聚了过去10年里在计算机图形算法和 GPU 架构领域所取得的成果。


  • 游客  3天之前

    游客:

    光线是射向眼睛,不是眼睛发出光线。这是很多人都容易忽视的错误
    5天之前
  • 支持(1)  |   反对(1)  |   举报  |   回复
  • 只计算最后进入眼睛的光线,运算量将大大减小
    又因为光路可逆,所以反过来,把眼睛作为光源求出从眼睛出发到整个场景的光线,也就得出了整个场景进入眼睛的光线

    支持(3)  |   反对(0)  |   举报  |   回复

    35#

  • 游客  3天之前

    新技术第一代都是探路的 性能都不咋地,等下一代吧

    支持(1)  |   反对(0)  |   举报  |   回复

    34#

  • 游客  5天之前

    光线是射向眼睛,不是眼睛发出光线。这是很多人都容易忽视的错误

    支持(1)  |   反对(1)  |   举报  |   回复

    33#

  • 游客  09-10 00:47

    最近超能网好神奇,无论你发什么都会被举报,我就想看看我这条回复被举报几次。

    已有6次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    32#

  • 游客  09-09 21:32

    到时候游戏的画面与测试软件的画面肯定是二码事,而且第一代支持啥新特效的显卡往往支持的能力有限。必须等第二代才能成熟。 当年曲面细分炒的火热,后来游戏里有几个人在意曲面细分?

    支持(1)  |   反对(0)  |   举报  |   回复

    31#

  • 游客  09-07 22:48

    游客:

    用于渲染的光线投射算法是Arthur Appel 于 1968 年首次提出的,Turner Whitted 根本不是光线追踪的创始人。

    这软文写得不合格
    08-24 09:51 已有1次举报
  • 支持(5)  |   反对(0)  |   举报  |   回复
  • 光线跟踪是一种真实地显示物体的方法,该方法由Appe在1968年提出。他只是概念的提出者
    Turner Whitted于1980年首次提出一个包含光反射和折射效果的模型:Whitted模型,并第一次给出光线跟踪算法的示例,是计算机图形学历史上的里程碑。发表于Communications of the ACM 1980。

    支持(0)  |   反对(0)  |   举报  |   回复

    30#

  • 游客  08-25 08:35

    A勾就别出来丢人现眼了

    已有11次举报

    支持(3)  |   反对(1)  |   举报  |   回复

    29#

  • 游客  08-24 22:11

    拜托啥也不懂的能把嘴里喷出的大便吃回去么?

    已有4次举报

    支持(4)  |   反对(0)  |   举报  |   回复

    28#

  • 游客  08-24 17:01

    孤·儿公司的子弹追踪思路来源于光线追踪

    已有4次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    26#

  • 游客  08-24 16:54

    穷玩车富玩表(要讲文明有礼貌)玩电脑

    已有2次举报

    支持(1)  |   反对(0)  |   举报  |   回复

    25#

  • 肥龙在天大学生 08-24 14:59

    VRay早就把MAX的光线跟踪给抛弃了,人家现在用沟通传递。

    已有2次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    24#

  • skycham大学生 08-24 13:58

    买不起,下一个

    已有1次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    23#

  • alex310110研究生 08-24 11:15

    小编等一下,《极品飞车》电影好像是纯特技拍摄,没有任何CG成分的……炸掉的、烂掉的豪车都是几百万做的模型(我才不会说连引擎声音和车本身有时候都匹配不上)

    已有2次举报

    支持(2)  |   反对(0)  |   举报  |   回复

    22#

  • yfx679991等待验证会员 08-24 10:53

    已有2次举报

    支持(0)  |   反对(0)  |   举报  |   回复

    21#

  • 游客  08-24 10:48

    跟当年的曲面细分一样,卖新显卡必备的概念炒作而已。
    没有高超的营销术和虚假劣质的软文,小白们怎么肯把煤气灶搬回家?

    已有1次举报

    支持(13)  |   反对(1)  |   举报  |   回复

    20#

  • 游客  08-24 10:39

    拔刀斋 高中生 :

    牛逼牛逼,编辑大大鸡腿。
    但本着电子产品发展原则,新技术第一代产品都是试水版,是不是买第二代更划算(其实就是穷而已)
    08-24 09:42 已有1次举报
  • 支持(2)  |   反对(0)  |   举报  |   回复
  • 贵不是问题,关键不知道能否保证更好的体验。

    G80推出的时候DX10游戏也没几个,但是首发的8800GTX和8800GTS 640MB就是能在DX9.0c游戏里吊打前代7800GTX。然而后来推出的8600系列就根本没有运行DX10游戏的能力,就算DX9游戏也就凑合玩,直到G92出来之后才算是“玩遍DX9游戏,DX10游戏还能摸个屁股”的水平(比如Crysis能跑DX9,失落星球跑DX10)。

    这代2080估计也不清楚能有多少RTX游戏能达到2K@60Hz,希望9999的2080Ti FE能对得起它的价格吧。 ...

    已有1次举报

    支持(2)  |   反对(0)  |   举报  |   回复

    19#

  • 游客  08-24 09:51

    用于渲染的光线投射算法是Arthur Appel 于 1968 年首次提出的,Turner Whitted 根本不是光线追踪的创始人。

    这软文写得不合格

    已有1次举报

    支持(5)  |   反对(0)  |   举报  |   回复

    18#

  • fl23fei研究生 08-24 09:44

    抓到判个三五年没跑,再传播多一点,估计要被射入了~

    已有1次举报

    支持(1)  |   反对(1)  |   举报  |   回复

    17#

  • 拔刀斋高中生 08-24 09:42

    牛逼牛逼,编辑大大鸡腿。
    但本着电子产品发展原则,新技术第一代产品都是试水版,是不是买第二代更划算(其实就是穷而已)

    已有1次举报

    支持(2)  |   反对(0)  |   举报  |   回复

    16#

  • 游客  08-24 09:23

    NV 的做法很聪明,先是把图缩的很小很小,这样再计算光线就轻松了,然后关键是,再放大时肯定会有噪点,不精美了,NV的做法是用AI模块来学习计算,通过模型不断提升,改善,,问题就这样解决了,不错,包括AA,也是用AI来计算的,省了不少力,听说其他的传统渲染也可以用AI,这就是为什么2070的CUDA比1080TI少,也能打平的关键所在。

    已有1次举报

    支持(1)  |   反对(0)  |   举报  |   回复

    15#

查看全部评论(33)

回复