APP下载

是时候聊一下光线追踪了

消息来源:baojiabao.com 作者: 发布时间:2024-04-29

报价宝综合消息是时候聊一下光线追踪了

首先是声明:本文大部分源自我2013年在显卡吧发的帖子,部分内容参考MC

在3月19日的GDC大会上,微软正式公布了DirectX Raytracing(DirectX光线追踪,简称DXR)的新功能,整合进DX12 API,让图形硬件可以进行实时的光线追踪,而根据GDC上多家厂商的演示视频,相比现在的游戏画质,提升可以说是质变(下图)。

目前包括3Dmark、北极光、寒霜、SEED、虚幻4和Unity等引擎均已准备将DXR技术整合进自家引擎之中,NVIDIA也随着微软的脚步推出了RTX Technology,支持光线追踪。不过最低支持好像需要volta显卡,也就是目前的pascal无法支持(emm,这算是逼迫玩家换显卡吗?)。而AMD也于3月20日推出了他们家的光线追踪技术---ProRender,可见光线追踪时代到来已经是定局。

DXR的最终目的是用来取代目前的光栅化技术。不过就目前来说,它还不能做到这样,仅仅只能用作当前渲染技术的补充,因为硬件机能还远远不够。这也就是今天我们要聊的话题。

其实光线追踪早就不是什么新鲜的事物,它在电影制作中早已遍地开花。著名的阿凡达便是光线追踪渲染出的电影作品。而游戏上也不是首次应用,不过既然要聊光线追踪,那么我们就从光线追踪的原理说起。

P1:光线追踪的原理

大家在游戏中对游戏中水面相信并不陌生。目前见过最好的游戏水面也就是孤岛危机系列中的了吧?但是比起电影,比如刚刚说过的阿凡达。你会发现孤岛危机中的水面已经被秒的渣渣都不剩。这是因为,我们目前的游戏,都在使用光栅化算法。而在这些电影中,则采用的光线追踪算法。而我们经常看到的3DS Max、Maya等软件最终渲染出的图片,也是用光线追踪算法渲染的。因为光线追踪是用来模拟现实中光线的各种现象(比如折射,衍射,散射,反射,吸收等)以及传播过程,所以光线追踪可以渲染出我们肉眼无法分辨的场景(你看出来阿凡达所有场景是渲染的了吗?)

光线追踪是模拟的我们人眼看到可见光的过程(下图)。 它源自于几何光学通用技术,通过追踪光线与物体表面发生的各种交互(比如折射,反射),最终得到光走过的路径。简单打个比方,假设屏幕不是屏幕,而是一块玻璃,这块玻璃内构筑出一个“真实的”世界,只要找到这块玻璃内能透过人眼的光线,加以追踪就能构建出完整的3D画面。

既然光线追踪这么好,那么为什么不用它呢?因为光线追踪非常的吃资源。所以目前游戏基本都以光栅化渲染为主。因为光栅化只需要计算数学模型到屏幕上的过程,所以光栅化有着很高的效率,而对游戏来说,每秒钟24帧以上的计算量是保证游戏性的前提,所以高效率的光栅化取代了光线追踪成为了3D游戏渲染的主力。而它的缺点也很明显,因为它无法计算真实的光线路径,所以很多地方会失真,比如下图中的远哭1.

光线追踪算法分为两种:正向追踪算法和反向追踪算法。其中,正向追踪是大自然的光线追踪方式,即由光源发出的光经环境景物间的多次反射、透射后投射到景物表面,最终进入人眼的过程。反向追踪则是观察者的角度出发,只追踪那些观察者所能看见的表面投射光。正因为这个特点,所以目前主流的光线追踪都是反向追踪,因为这样足够,而且可以大幅度的节省计算机本身的资源。

P2:光线追踪如何工作?

对我们的生活而言,常见的光现象无非折射,反射,吸收这三种。一束光经过各种反射,吸收,改变了光原本的光谱,而改变之后的光再经过多次的反射,吸收等过程,最终进入我们的眼睛,这就是光线追踪要做的事情。

那么说了光线追踪的工作过程,那么就让我们来看看实际应用吧。在实际应用中,根据使用者的设置,光线追踪会赋予每个像素点几条到几十条不等的光线,在场景内传播,而因为场景内的物体已经早已被开发者赋予好了各种属性,光线经过这些物体之后会发生各种改变,最终呈现在屏幕上。但是这么做会出现一个问题,因为有些光线并不是我们所能看到的,这时候计算它就会造成不必要的性能浪费,所以就有了反向追踪。所以反向追踪算法中,光线会被分类,假设这条光是不可见光,系统就会自动抛弃掉整个光路,如果可见,就开始计算,最终得出画面。下图就是一张早已被广泛传播的光线追踪作品。

P3:实际应用?

熟悉intel的肯定不会忘记Larrabee,这是intel曾经计划推出的独立显卡。而这个项目主要负责人Daniel Pohl曾经在2004年用光线追踪技术重做过雷神之锤3。这是因为这款游戏的母公司idsoftware开源了该游戏。而且给雷神之锤3增加光线追踪技术很简单,只需要10行左右的代码就可以完成。下图就是用光线追踪技术的雷神之锤3,这水面,你能相信这是一款2001年的游戏?也正是因为这件事,Daniel Pohl被intel看上并招入公司。而Larrabee也曾经被intel寄予厚望,因为Larrabee是源于CPU架构,所以特别适合用作光线追踪计算,但是各种原因让Larrabee一度折戟,至今也没有什么起色,而就目前而言,说intel已经完全放弃了Larrabee估计也没人有不同意见。

P4:未来

为什么光线追踪不能成为主流?无非就是计算量过大,哪怕是反向追踪算法也不行。在光线追踪版的雷神之锤3中,Daniel动用了20颗Athlon XP 1800+CPU集群,以及一块自己设计的FPGA,时钟为90MHz,支持光线追踪技术,性能相当于P4 12GHz的显卡。才在512x512分辨率,4xFSAA下跑到20fps。

而根据intel当年的说法,要达到可以流畅运行游戏的程度以及当年的游戏画质,需要计算大约10亿束光线,那么这个10亿束是怎么来的呢?假设每个像素点30束光线,那么在1024*768分辨率下一共有786432个像素点,每秒达到60fps,最终结果就是786432*60*30=14.1亿,这个数字已经相当恐怖了,而且用的还是过时的1024*768分辨率。要知道在当年旗舰是i7 3970X,每秒能计算的数量也就1000万条左右,离需要的数值还差十万八千里,所以我们只能寄希望于显卡来完成这个工作。而且光线追踪的恐怖计算量下需要大量的显存,即便是目前的泰坦V估计也会出现显存不足的情况。而下图分别是由光栅化渲染的玉龙和光线追踪的玉龙,可见其差别。

时隔多年,我们终于看到微软把光线追踪技术加到了自家的DirectX引擎中,而随着NV和AMD的跟进,可以猜到大概是光线追踪技术已经成熟,期待未来光线追踪技术能给我们的游戏体验带来质变。

如果你喜欢这篇文章,

欢迎点个赞,

在下面留言,

或者关注电脑吧评测室微信公众号,自媒体平台

也可以关注B站@翼王,为翼王投币,充电!





2018-04-02 02:33:00

相关文章