老黄的新核弹和游戏里的光

作者:erufu
2018-09-24
16 4 3

引言

随着老黄 Nvidia 的 20 系新显卡发布,Ray tracing 光线追踪也随着发布会的宣传进入了许多人的视野,消费级的产品也头一次拥有了如此强大的性能(虽然贵的要命)。EA、Unity 和 UE 等很多厂商也相继表示会支持光线追踪,可是光线追踪是什么?能为玩家和开发者带来什么呢?

10000刀的 RTX8000 & 1500刀的 RTX2080ti

起点

早些年的 fps 游戏《德军司令部》

其实说到光线追踪,就不得不提场景内的光线。最早 3D 游戏出现的时候,是没有光的。随着技术的发展,在1982年雅达利上登陆的游戏《出路》,第一次使用名为“Ray casting(光线投射)”的技术,而这种技术为3D 游戏带来了光影。从图中可以看出,随着视角的变化,视野里呈现出了亮度不一的墙壁。

《Way Out(出路)》

用于渲染的第一个光线投射算法由 Arthur Appel 在 1968 年提出,“Ray casting”这个术语最初用于斯科特罗斯1982年的一篇论文中,用于描述渲染建设实体几何模型的方法。原理为从观察者的眼睛描绘几何光线(从玩家视角投射光线),以对从观察者朝向行进的光线采样。从而可以得知物体的遮挡关系,进而产生明暗变化。光线投射成为早期实时 3D 游戏中一种便捷的处理方法。          

    有些类似游戏中的“视锥”

当年的“Ray casting”技术仅仅只能进行一次光线反射运算,但就算是这样在当年也优于其他技术,因为他对硬件资源的占用比其他方式小得多,当年的计算机性能相当匮乏,这种便捷的方式,则为画面带了实时的光效,实现了从无到有的跨步。

而在自然界的真实环境中却不太一样,光源射出的光线在传播的过程中,往往会在经过多次吸收、反射和折射。这些光线中的一部分,最后恰好射入我们的眼睛,使我们看到景象。所以光线投射的缺点也非常明显,因为它本质上是一个骗人的东西。

发展和进步

《Quake(雷神之锤)》

在 1996 年,id Software 发布了一款 fps 游戏《Quake(雷神之锤)》。这款游戏的厉害之处,不仅在于第一次真正的从伪3D 走向了真3D,而且还使用了很多华丽而又牛逼的高端技术,如:即时演算、Lightmap、Dynamic Light Sources(动态光源)、流动控制方案、多边形建模和全3D 场景。在当时各种划时代的做法,带来的却是许多技术不成熟而导致的 BUG,但后来不断推出的修复补丁,更是把《Quake(雷神之锤)》推到了一个更高的位置,同时也带领了后期 PC 游戏时代,一有问题就来一个补丁的做法。其使用的流动控制方案,即使用鼠标来观看、瞄准并使用键盘移动,不仅为后来的 fps 游戏埋下了基石,也为 PC 硬件“显卡”的发展带来了前所未有的革命。

游戏画面

1999 年 12 月 21 日,id Software 的卡马克发布了 Q1引擎的源代码(遵循 GPL 协议),允许程序员修改引擎并且加入新的特性。而使用 Q1修改版引擎的游戏中,有两个你绝对不会不知道的作品,那就是大家熟知的《半条命》和《反恐精英》了。    

影子

回到正题,Dynamic Light Sources(动态光源)第一次为游戏游玩过程中带来了动态的光效,例如枪上的光影会随着你位置的移动而产生变化,你开枪产生的火光也会瞬间照亮前方的路。在1997年发布的《Quake II(雷神之锤2)》中更是加入了原先没有的“影子”。虽然是预先准备好的假影子,不过也实属不易了。

使用枪上的光源,照亮僵尸的脸

而在 2004 年 8 月发布的《Doom 3》中使用了全新的 id Tech 4 图形引擎,所带来的是统一的照明和真正意义上的阴影,其使用了阴影体(阴影锥)技术。这种技术不是在地图创建时,提前计算或渲染好光照贴图,并将该数据保存起来,而是实时计算大多数光源。这允许灯光甚至在非静态物体上投射阴影,这对于静态非定向光照贴图是不可能的。历史并不是惊人的相似,而是在重演。其实当时也存在一些其他的方法,不过最后还是最节省性能的阴影体获得了胜利,但这种方法的一个缺点就是引擎无法支持柔和阴影和全局光照。《Doom3》给 id Software 取得了商业上的成功,截至2007年初全球就已销售超过了350w 份。

阴影体(阴影锥)和 柔和阴影


局限

上面的这些技术,通过后来不断的修改和完善也有了许多演变和增强,但其根本还是脱离不了“局部光照”的范畴。而“局部光照”则是指在计算物体光照时,孤立的看待物体,不考虑物体间的相互影响,每次只考虑一个光源,一个物体表面和一个观察者(摄像机)。都不用通过简单的分析你就能想象的出,这种方法产生的效果肯定和真实的场景相差甚远。是的,很多开发者也是这么想的,所以大家都在“局部光照”的框架下向着“全局光照”迈进,“Global Illumination 全局光照” 是指既考虑场景中直接来自光源的光线,又考虑经过场景中其他物体反射后光照的一种渲染技术。你也可以直接的理解为“全局光照=直接光照+间接光照”。使用全局光照能够有效地增强场景的真实感,其可以包含多种光线渲染技术,达到尽可能接近真实场景。

全局光照 & 局部光照

在追求“全局光照”的过程中,诞生了许多的造假技术,例如在2007年发布的《孤 xian 岛 ka 危机》其使用了更优秀的引擎,支持了更多种类的光效,像“体积阴影”“环境光遮蔽”等等。后来随着 Unity 和 UE 等引擎的出现,游戏内的“全局光照”也从高配3A 专属的级别转变成了简单易用的水准。举例来说 Unity 提供的“烘焙 lightmap”的技术,就可以在游戏开发时,提前渲染好场景的全局光照数据并存储起来,在游玩的过程中只是将之前渲染好的数据读取出来展示而已,这样则可以将绝大多数的运算规避掉。但在游戏中玩家的行为,其实属于不可完全预测的范畴,这里则需要硬件对画面进行实时的演算和渲染了。

什么是光线追踪

              

光线追踪

在“全局光照”框架下的渲染算法里,最厉害的就要数光线跟踪这一派系了。其实世界上第一个光线追踪算法,早在1979年就被发明了。一位名叫 Turner Whitted 的歪果仁在光线投射的基础上,加入了光与物体表面的交互。光线从摄像机射出后跟踪其光线,找到与该光线相交的最近物体的交点,如果该点处的表面是散射面,则计算光源直接照射该点产生的颜色;如果该点处表面是镜面或折射面,则继续向反射或折射方向跟踪另一条光线,如此递归下去,直到光线逃逸出场景或达到设定的最大递归深度。主要的目的是让光线继续通过反射、折射和散射等方式继续传播,尽可能的接近真实场景光线的状态。光线追踪又分正向追踪和逆向追踪,正向是指从光源追踪,逆向则是指从视角追踪。而逆向追踪和前文提到的光线投射,最大的区别在于,虽然都是从眼睛到场景投射光线,但是并不跟踪这些光线。

这个方法后来被叫做经典的光线追踪方法或叫递归式光线追踪(Recursive Ray Tracing),因为随着技术的发展,也出现了许多其他的光线跟踪的方式和方法,例如分布式光线追踪、路径追踪、双向路径追踪、锥形跟踪、光束跟踪等等。

光线追踪能带来什么

光线追踪最大的优点,就在于能逼真的还原场景的光照,能省去传统“全局光照”解决方案中大部分的造假组合。象反射、折射和阴影这样一些对于其它的算法来说都很难实现的效果,对光线跟踪算法来说却是一种自然的结果。

攻壳机动队

在传统的光线追踪领域中,其使用最频繁的就要数电影 CG 了。《复仇者联盟》《星球大战》《侏罗纪公园》《攻壳机动队》等等,还有像迪士尼的全 CG 动画电影,都应用了大量的 CG 技术。其画面的真实程度,我不说大家应该也很清楚了。而在电脑中大量使用的 CG 软件像3DMAX、C4D、Maya 等,也无一例外的都采用光线追踪。说到这里这里就不得不提光线追踪所带来的缺点,就是次方级增长的计算量。

光栅化

这里与光线追踪的计算量作为参考对比的,就是传统的光栅化渲染。光栅化是指导入一个矢量图形格式(形状)并将其转换成成一个光栅图像(像素或点),然后可以在显示器或打印机上显示光栅化图像,但实际上3D 场景的光栅化的过程要比我描述的复杂的多,这里由于篇幅关系不过多赘述。由于实时3D 渲染程序要求对用户的即时操作做出迅速反应,因此通常要求每秒至少20-30的帧率,这也是高效率的“光栅化”渲染技术,成为当今最受青睐的3D 即时成像技术的原因。

既然早就有了,为啥之前不用呢?

2008年的时候英特尔展示了一个特殊版本的《Enemy Territory:Quake Wars》,名为《Quake Wars:Ray Traced》,使用光线追踪进行渲染,以基本的 HD(720p)分辨率,游戏实际则以每秒14-29帧率运行。该演示采用了 Xeon Tigerton 系统,板载四颗四核主频为2.93 GHz 的 CPU。

四路就是这种级别 感受下

要用光线追踪技术渲染出达到现代游戏的画面质量,同时有要求每秒必须达到足够的帧数,每秒需要计算大概多少条光线呢?如果我们假定每帧每像素需要大概30束不同的光线,分别用来计算着色、光照跟其它各种特效,按照这个基准,在1080P 这样的分辨率下,一共2073600个像素,乘以每像素30束光线以及每秒60帧,我们就需要每秒能运算37.32亿束光线的硬件,而 Intel 当年的双路4内核处理器每秒也不过只能处理830万束光线。可以看出这种规模的计算量,除了渲染一帧可以等数小时或者数天还能租用渲染农场的电影 CG,想用在实时交互的游戏中是不可能了

近些年的游戏,有一些也引入了“光线追踪”的概念。但也都是在使用讨巧的方式寻求技术的结合,但主要还是迫于硬件的压力和诸多方面的限制,画面效果也仍然处发展的初期。

老黄带来了啥

左侧帕斯卡架构 右侧为新的图灵架构

老黄在这次的新显卡中,使用了全新的“图灵核心”,其中包含三个单元,第一个就是和你显卡里的传统单元没什么本质的区别,而剩下的两个才是重点。第二个就是“RT CORE (光线追踪核心)”,故名思议就是专门用来追踪光线的单元。第三个“TENSOR CORE(张量计算核心)”则是用来使用深度学习框架的核心,这个单元对于游戏来说主要还是 DLSS 的加成,其技术的主要机制是通过深度学习的原理使用类似缩放降噪的方式大幅减轻高分辨率(4K)对显卡的压力。             

《星球大战》演示 DEMO

在 nvidia 官方提供的 RT 演示 DEMO《星球大战》中,2K 的分辨率下从1080/1080ti 的6/9fps,到2080/2080ti 的44/54fps,4k 分辨率下2080ti 也可以突破30fps,可谓是突飞猛进的增长,一次升级实现了从不能玩到能玩的跨度。虽然老黄的新卡具备的光线追踪很厉害,但其对光线追踪的能力也是有一定限度的。现在只发布了超级贵的2080/2080ti,不过后面的2070也依然是拥有 RT CORE 的,虽然性能会有一定减弱,不过还请大家耐心期待吧,毕竟老黄的刀法还是很稳的。

  

20系显卡的参数售价对比图

END

之前看到过这样一句话:

要准确地模拟光线的所有效果,你基本上必须对宇宙进行编程。

虽然我们现在还没办法对宇宙进行编程,但是想体验电影级别的游戏画面,已经近在咫尺了。

随着这次带有光线追踪和 ai 学习能力的游戏显卡第一次进入了大众消费的视野,一定会对业界带来翻天覆地的改变,甚至有许多媒体抛出了“显卡业界 XX 年以来最大的进步”这样的标题,我个人也是比较认同的。

Late Shift & Detroit

近几年比较受关注的“互动电影”这种游戏类型越加的常见,像去年的《late shift》今年的《底特律:变人》等等,想必这个类型的游戏也能在新技术的加持下,迎来一次爆发性的进步,飞跃式的降低与真实电影画面的距离。另外对 VR 而言,之前无法解决的高像素密度所带来的运算压力,还有不晕且更流畅更真实的画面,估计都会在未来的一段时间有突破性的进展吧。

全新的技术和更强的性能对未来的游戏发展,埋下了更多可能。不过玩家体验游戏也不仅仅是为了欣赏游戏的画面,组成一款游戏还有许许多多其他的部分。而且随着初代支持新技术显卡的发布,还有很多需要学习和发展的技术。虽然距离电影般画质走入各家各户还有一小段距离,但未来还是需要玩家和开发者共同的进步,才能支撑起未来游戏行业更大的发展。在我国游戏行业相对落后的情况下,也为国内游戏生态的发展辐射出更多的可能性。

任重而道远,大家加油吧。

近期点赞的会员

 分享这篇文章

您可能还会对这些文章感兴趣

参与此文章的讨论

  1. virmint 2018-09-24

    ^qqqq^您就是微博上那个数码博主(xxx

    • erufu 2018-09-24

      @virmint:牙咩咯

  2. sbabybird 2018-10-17

    文章质量都挺高的,特意注册账号支持一下。

您需要登录或者注册后才能发表评论

登录/注册