我放心你带套猛 发表于 2020-12-31 18:47

什么是实时光线追踪技术?它可能出现在当前的次世代主机上吗?

什么是实时光线追踪技术?它可能出现在当前的次世代主机上吗?

123456848 发表于 2020-12-31 18:53

多年搞各种实时、离线渲染,我来说说看法。

首先对于题主的问题,实时光线追踪在游戏里的应用,我的看法是当前次世代主机真不可能。未来3-5年也许一些内基于光线追踪的非全局光照算法出现,例如镜面反射等,主要用来弥补或者增强现有算法的缺陷。光线追踪的真正普及则会是一个漫长的过程,要整个industry一起努力。至于真正的无偏的全局光照,要做到实时所需要的计算量在可预见的未来都还是太大。

关于光线追踪介绍不少人都解释了,我原来也写过些答案提到过:如何根据数学或者物理程式写一个特效软件?例如星际穿越中的黑洞。 - 文刀秋二的回答 我在这里补充一些自己的观点。一提到光线追踪,许多人第一反应就是图形渲染的圣杯,实现以后游戏的画面就会和好莱坞大片一样震撼。这其实是很不实际的主观假设。
误点1:把光线追踪等价于全局光照,甚至一系列牛逼的特效例如焦散,云雾,次表面散射,基于物理着色。其实光线追踪单纯就是指的计算出三维空间中一个给定射线和一群三角形中的焦点的过程。这是一个逻辑上非常简单的操作。基于这个操作,我们可以衍生出许多全局光照的算法。为什么这个操作如此有用的本质原因是因为渲染方程
https://www.zhihu.com/equation?tex=L_%7Bo%7D%3DL_%7Be%7D%2B%5Cint_%7B%7D%5E%7B%7D+L_%7Bi%7D%28l%29f%28l%2C+v%29cos%5Ctheta+_%7Bl%7Ddl
是一个表面法线周围半球上的积分。这个半球方向上的东西无论是光源还是各种奇怪形状,材质的其他东西都会对这个表面上的颜色有影响。在不知道这个半球方向范围内有什么办法的情况下,发射光线去对周围采样是最通用,但是很低效的方法,如下图。但是光线追踪本身除了用来采样场景也可以用在碰撞检测,寻路等和渲染无关的地方。
误点2:认为有了光线追踪游戏画面就电影化了,并认为基于光栅化的方法就是做不好光照计算,需要被推翻。这简直是忽视了过去20年图形学界和游戏开发者们所积累的各种技术,技巧和优化。我先举两个例子。下面的图片是用虚幻引擎4制作的建筑可视化(视频:UNREAL PARIS)。对于这种静态场景来说,光照贴图(Light Map)就一下把最难搞的漫反射部分通过预计算搞定了,运行时没任何overhead。UE4用Photon Mapping算Light Map,这是个一致(如何理解 (un)biased render? - 文刀秋二的回答)的全局光照算法,也就是说最后的结果加上SSR和Probes做镜面部分的话和你离线渲染结果就基本没有什么差别了,小场景60Fps跑起来无压力。开口就要颠覆光栅的,打脸啪啪啪。

另一个例子是Unreal的风筝demo(视频Unreal Engine 4 Kite Demo)。它使用的地形是Epic在新西兰实地扫描的,目标大概是要创造Pixar类型的电影化体验。这个Demo我不能说他有上面那个那么精确的光照计算。虽然用了些基于Signed Distance Field的Ray Traced Shadow,但是也只是阴影,而且精度和传统的ray tracing也有差别。但我会告诉你这个Demo我用两个980+64G内存+1TB SSD+12 Core CPU跑起来都不能60Fps么,任务管理器是各种爆满的。


所以我想说的是,视觉上看到的无偏全局光照是体验的重要部分,但是基于光栅化的程序也能在一些特定情况下提供这种体验,并且光照并不是和电影唯一的差距。电影和游戏的可用资源的巨大差距和两种媒介体验的本质差距等综合因素都是游戏画面电影化的障碍!资源的差距包括一帧画面计算的时间资源(1/60秒和数小时),计算资源(普通CPU+GPU和一个渲染农场),美术素材资源(几十万个三角形和过分细分到比像素还多的三角形)还有物理模拟的精度等等。体验的本质差别则是电影的是线性的。导演,特效师只需要保证所有的画面在一个角度,一个时间达到完美即可。而游戏则是可交互式的方式。所以光线追踪真不是最终的救命稻草。实时程序就是一个要把及其珍贵的时间和软硬件资源合理的分配到不同的因素里去。

当然我不是保守派,光线追踪作为一个最基本的采样场景的操作来说,通用且直观,如果性能跟的上,必然会带来许多渲染技术的发展。但是高效的实现难度就是很大,前面许多回答也都多少分析了些原因,我就总结和补充一下。
难点1:计算量大。如果拿一个4K分辨率的游戏要做全局光照算法,例如路径追踪,假设每个像素要1000个样本噪点才收敛(这是非常非常保守的数字),每个样本的路径长度是5次反射(也是非常短的路径),那就需要3840 * 2160 * 1000 * 5 = 41472000000根光线。再假设一秒60帧的刷新率,41472000000 * 60 = 2488320000000。也就是说一秒钟要射出2500G跟光线,这个数字大概目前最快的渲染器也慢了至少一万倍。讽刺的是对于电影级的画质来说求交的过程和着色相比只是非常小的一部分。离线渲染的最前沿的研究我也了解且实现过不少,有许多提高采样效率的方法。但是无论怎么提高,在这一万倍面前都是捉襟见肘。所以除非有高效且robust的filter和reconstruction的方法,拼样本数量的做法在实时应用里真的没什么希望。要怪就怪1/60秒的要求是在太苛刻。但我不想显得过分悲观,上面10000倍的差距也只是真正要做一个无偏路径追踪的需求,实际上就算是离线渲染也有许多trick能减少noise,biased去加快收敛速度,所以如果真的应用到游戏里肯定能用一些其他biased方法去cheat away这么大的计算量。
难点2:现代GPU已经将基于光栅的管线性能优化的将近极致了,榨干了最后的性能,一方面是光栅化算法的确相比于光线追踪更容易被集成进硬件,三角形可以在不同管线阶段Stream,另一方面光栅化大规模流行了20年,厂商已经有太多的时间和经验积累经得起考验的优化。于此同时,基于光栅的渲染算法也有无数的trick和hack能去骗你的眼睛,让画面看起来也非常牛逼。基于光线追踪的算法在可交互应用可以说要从头发展,当然肯定有新的东西可以搞,只不过也真的需要人来做这个工作。
难点3:现代基于光栅的图形管线已经烙印到GPU里,接口暴露在API里,大量现成的算法实现在游戏引擎里和游戏开发者的脑子里。所以光线追踪的加入意味着图形管线的改变,新programming model,所以我认为就算性能跟上之后,光线追踪的普及也会是个缓慢逐渐的过程,并且需要整个industry的一起努力。

最后我想说我不同意光线追踪没有需求这个观点。需求是自己创造的。要么被自己淘汰,要么被别人淘汰。

侬去斯 发表于 2020-12-31 18:56

这是一个十分难于全面回答的问题。

我的背景:并行计算,图形学经验限于传统的光栅化渲染,参与编写过一个小型的图形引擎以及一个体绘制引擎,写过一个十分简单的基于CPU的ray tracer作为课程项目,在线上过Stanford的CS348B渲染课程,零零散散的使用pbrt实现了课上要求的若干作业。所以我对图形学和光线追踪有所了解,但相比知乎里的诸多图形学程序员,涉猎的还很有限,这里的答案多数来自自己的理论分析及和一些实验室同学及其他同行的讨论。这题已经有很多好的答案了,我想尽量不和已有的内容重复,请各位多指教。

(相当严格的)定义:首先来定义实时光线追踪。我认为一个严格的定义如下:使用基于光线追踪的算法(包括ray tracing, path tracing, photon mapping, beam tracing, cone tracing等等 )进行图形渲染。渲染对象是包含真实刚体及柔体物理模拟的动态场景。场景分辨率需达到720P(1280x720),并需要允许动态摄像机以及多光源(点/面光源)。渲染帧率需不低于30并以60为目标,渲染结果应该有较小的(肉眼难于分辨的)噪点。如果是path tracing等蒙特卡洛方法,则还需要无偏的结果(不然会出现局部模糊等artifacts)。

应用:目前的应用包括:各类照片级渲染应用中场景设计的快速原型生成,视频游戏中的部分场景渲染。未来的应用领域会更加广阔。

难点:@lgthetyro 的答案对光线追踪算法有很好的描述。因为光线的传播是方向可以互易的物理过程,于是从屏幕像素发射光线到场景,在相交测试结束后根据光源和物体本身的材质属性来计算像素颜色改变,同时生成供下一轮计算的新的光线(根据物体的属性可以产生额外的光线或改变当前光线的属性)。可以看到这是一个迭代收敛的过程。那么仅从光线角度看,计算量有多大呢?以30帧的帧率,720P的分辨率(约一百万像素)来计算,每秒需要计算三千万条光线和场景的相交检测及光照计算。而这样一个像素对应一条光线(之后用ray per pixel RPP来代替)的方法仅仅能渲染出硬阴影和一层反射折射,多层反射折射需要4-12RPP,软阴影需要10-20RPP,Path Tracing需要500以上的RPP,Ambient Occlusion需要100左右的RPP。如果从场景复杂度来计算,对每帧场景的渲染不仅要考虑每条光线的遍历,同时也要考虑每个三角面片的遍历,对场景遍历进行相交检测可以通过一些层级结构来进行(最普遍认为的高效数据结构是Bounding volume hierarchy)。实时的光线追踪的难点就在于场景复杂度和需要的真实感渲染效果决定了遍历和相交检测的巨大计算量(场景分割数据结构的重构和光线与场景的相交测试是两项主要计算)。这是渲染领域以及任何模拟计算领域里终极的矛盾:效率和质量的矛盾。

解决方案:和其他图形学算法一样,如果要应用在实时类应用中,效率是关键。目前的解决方案有两个方向的努力:1)软件角度。2)硬件角度。我个人没有实现过任何这类算法,所以不能谈细节,下面是high-level的描述。 软件角度又可以分为自低向上和自顶向下的优化:BVH和其他层级结构的场景分割(kd-tree, oc-tree, BSP-tree等)是自顶向下的方法,在对场景进行分割时还有一项十分常用的优化算法:Surface Area Heuristic (SAH)。其基本思想是在将场景分割为两部分时(这是BVH, kd-tree以及BSP-tree的基本场景分割操作),考虑分割后遍历及计算相交检测的总cost函数最小。而光线击中一个包围盒(Bounding Volume)的概率和其表面积相关(SAH将其进一步简化为线性相关),所以采用二分法寻找cost最优的分割平面会给其后的计算带来效率的提升。 自底向上的优化则包括packet tracing和ray reordering。Packet tracing的思路是将方向接近的一组光线打包,同时进行相交检测,这样在检测中可以利用空间相关性,同时对一组光线也只需要调用一次BVH。Ray reordering是说在每个packet相交检测结束后重新将方向接近的光线reorder到一个packet中,从而保持coherence的特性。 硬件角度的优化又可以分为采用GPU和SIMD的优化以及专门的ray tracing硬件。前者就是对上述软件优化的算法进行针对GPU或SIMD的优化,同时一些并行环境下的数学库函数和其他基本算法如排序等也间接起到了加速的作用。后者就是指将ray tracing中独有的相交检测,场景分割等部分采用专门的硬件来优化,比如刚刚推出的PowerVR GR6500(图片来自:AnandTech | Imagination Announces PowerVR Wizard GPU Family: Rogue Learns Ray Tracing):
对于其他知友提到的很多ray tracer,都或多或少采用了以上的优化方法。 次世代主机游戏中的光线追踪一般都有很多对场景、光源、以及效果的限制,还有很多其他的hack和加速方法,我无法一一了解并描述。 欢迎各位补充。

总结:种种迹象表明,光线追踪的效率会随着图形硬件的发展而进一步提高。严格的实时光线追踪实现起来十分困难,但对场景,光源和渲染算法有限制条件的情况下,实时光线追踪已经在视频游戏和一些其他应用中实现,并还会有更好的应用。一个更广义的问题是,如何解决计算效率和计算质量(精度)的矛盾?或许我们永远不会同时需要这两者?

123456911 发表于 2020-12-31 19:01

光线追踪本质上是一个不太适合(现代GPU的)并行计算模型的操作,因为每条光线的分支和收敛速度是不一样的现代GPU基本是SIMD结构,SIMD结构适合那种所有数据做相同操作的“团体操”模型。

现在基于GPU的光线追踪器比基于CPU的性能要好,很大程度上是占了GPU核多的便宜,如果观察每个核的利用率,GPU版本还是很低的。这好比一个一万人的工厂,每个工人每天只上俩钟头班,还是比一个一千人的工厂满负荷运行产出率高。

as a matter of fact,传统GPU厂商比如N家和A家,在这方面的历史包袱反而比传统的CPU厂商要大,因为GPU有史以来就是SIMD模型机器。而对CPU来说,做多核反而在架构上来得容易些。当然,要实现“实时”的光线追踪,核的数量需要多到一定程度,cache一致性、调度协同等等问题又会冒出来,所以真的是no silver bullet。

所以要实时光线追踪能够进入家用领域,GPU架构需要很(tui)大(dao)改(chong)进(lai),降低线程调度的粒度。但这样一来会增加控制单元,降低运算单元的密度。中间如何取舍,还是要看市场需求和数据支持说话。

123456833 发表于 2020-12-31 19:09

实时光线追踪还是光线追踪的一种拓展,实时光线追踪还是初级阶段啦,基本上unreal4的cone tracing或者是屏幕空间的反射追踪应该属于这种,当然准确度比较差,而且unreal4就是因为svo cone tracing太耗了就删减掉了。接下来可能的研究方向还是在利用GPGPU跳过光栅化流水线的逻辑吧,但是gpu的这种架构想做并行光线追逐还挺难的,毕竟不能利用局部一致性了从而加大了代码预测和执行效率优化的可能性。这要是成熟,没个五年不行

因醉鞭名马幌 发表于 2020-12-31 19:12

从物体发射的光最后到达摄像机,摄像机才能成像。由于光线是可逆的,我们可以i从摄像机发射射线来于场景中的物体相交,就可以知道这个射线最后成像后的颜色。如果有反射和折射,那么这根光线就继续从这个相交的点开始继续射下去。直到他对颜色的贡献小于某一个阈值或者计算时间超过了限定等。

光线追踪可以获得非常真实的渲染效果,尤其是在光影还有环境漫反射方面。

如果光线追踪能够达到每秒渲染30帧,30fps那么我们就可以说它是实时的。现在的高端显卡可以做到10几20帧。简单的场景30帧也可以的。

光线追踪的主要技术难点有两个,
一是怎样快速的找到与射线相交的物体,这个在cpu上有不错的算法,因为cpu有大cache, 和高度优化的逻辑指令,但是cpu核太少,一次算不了几根射线。用gpu一次可以算几百几千根射线,但是cache小,逻辑指令相对较慢,需要特别设计的算法。

第二个问题是怎样快速的收敛。因为光线是反射来反射去的。一般的方法光线跳几次,你就得算几遍,这个是很费时间的。一副720p就至少80多万条射线,现在的gpu也就几百个核,算一次也得跑几百次,这还是一次反射,然后再多几次反射后时间就花得差不多了。除非有特别好的算法,否则这个是现在实时化的主要瓶颈。

题主的那个视频是NVIDIA的raycast demo, 只是很简单的场景,所以以现在的gpu做到实时毫无压力。应用到游戏中的复杂场景就不一样了。

Xbox One也主要看计算量怎么在cpu和gpu直接分配,看微软有没有逆天的算法。否则离替代光栅化还有一定距离。

123456823 发表于 2020-12-31 19:14

=============这部分是相关讨论,提问回答在最后=============
@孟德尔 君的回答前面还比较靠谱,而后面说
光线追踪现在还在很初级的阶段,连电影业都没广泛应用,皮克斯直到汽车总动员才开始大规模使用光线追踪,而且还是部分应用。以及
或许10年后再看,光线追踪只是一个历史的笑话也说不定。就显得有些主观臆测了。

说 "光线追踪现在还在很初级的阶段" 我无法认同。

什么是光线追踪算法
基本光线追踪算法:

(上图来自wikipedia)
    1. 对于每个像素,由摄像机向场景中发射一条光线。
    2. 对于每条光线,一直追踪到它碰到某物体表面。
    3. 对于每个与表面相交的点,向光源发出一条影子探测光线,来查看是否每个光源都可见,并依此来对该像素点着色。
    4. 如果相交的表面材质是漫反射的就停止。如果表面材质是反光/折射的,则根据物理中反射或折射原理计算得出反射/折射方向并发射一条新的光线。
    5. 重复1到4,直到达到最大追踪深度或者光线碰到光源或者漫反射表面。

光线追踪算法的优势:
1. 具有物理准确性,可以达到相片级渲染,尤其擅长强反射(金属等)和折射材质(玻璃、液体等),焦散( caustics )现象、复反射( interreflection ) 等可以模拟得很逼真,还有影子。
2. 算法简单易实现

光线追踪算法的劣势:

计算代价很高,就是慢

光线追踪历史:
将光线追踪算法应用于图片渲染最初是由Arthur Appel于1968年提出,那时还叫ray casting。1979年Turner Whitted带来了新的研究突破(Recursive Ray Tracing Algorithm)。1984年, Carpenter等人发表了一篇分布式光线追踪的论文(Distributed Ray Tracing),影响甚广。发展到今天,大多数的相片级渲染系统都是基于光线追踪算法的。基本的光线追踪算法并不难,相信大部分计算机图形学的同学都写过的,难的是如何优化提高效率。

皮克斯的RenderMan和光线追踪
说到皮克斯直到《汽车总动员》才开始大规模使用光线追踪。皮克斯的《汽车总动员》于2006年6月在美国上映,今年已经是2014年了,已经快8年过去了,沧海桑田呐同学们。
皮克斯一直使用的是自家开发的渲染器RenderMan,基于REYES(Renders Everything You Ever Saw<--有点雷= =) 。REYES是另一种渲染算法,它对于处理复杂场景非常高效。1984年的时候皮克斯有考虑过光线追踪,但最终还是坚持使用REYES。那篇关于《汽车总动员》的论文(Ray Tracing for the Movie ‘Cars’)我有浏览过,里面提到五年前(也就是大约2000年左右)他们就启动了添加ray tracing功能到RenderMan的这个项目,同期《汽车总动员》正在制作中,文中也提到了《汽车总动员》使用光线追踪的动机:realistic reflections, sharp shadows, and ambient occlusion。REYES在处理反射强烈的汽车表面材质方面有些捉襟见肘,只能用environment map,仍然达不到光滑闪耀的质感。而这正是光线追踪擅长的。

使用光线追踪的主流渲染器
RenderMan就不说了,它本是基于REYES的,现在也有ray tracing的选项。众多工作室都在用。
(以下是纯基于光线追踪的渲染器)
Mental ray,NVIDIA出品,已经集成到3D建模软件Autodesk 家的Maya和3ds Max中。
Arnold近些年渐揽风骚,Sony Pictures Imageworks,Digital Domain, ILM, Luma Pictures等著名特效公司均有使用该渲染器。
VRay,比Arnold大众一点,近几年也在疯长,它目前有CPU版本和GPU版本(V-Ray 和 V-Ray RT GPU)。

光线追踪算法在目前的影视特效领域占有重要的地位。我不认为光线追踪会成为"一个笑话"。2013年的SIGGRAPH有关于光线追踪的讲座(Ray Tracing is the Future and Ever Will Be),可以参考。

硬要说的话,“光线追踪算法在电子游戏领域的应用还在初级阶段”还比较靠谱。
光线追踪目前多用于影视特效中做静帧渲染。若想要应用到游戏中就需要做到实时渲染,就是提问中说的实时光线追踪(Real-time ray tracing)。

======================回答问题的分割线======================
最后回答问题:什么是实时光线追踪技术?它可能出现在当前的次世代主机上吗?
什么是实时光线追踪技术?
光线追踪(Ray tracing)算法前面说过了,那什么样的是实时的呢?6 fps左右就可以产生交互感,15 fps 可称得上实时,30fps不太卡,60 fps感觉平滑流畅,72 fps再往上肉眼就已经分辨不出差别。

它可能出现在当前的次世代主机上吗?
全面应用在当前看起来是不太行,在将来应该会有。
你要CPU跑实时的光线追踪似乎是有点为难它了,在GPU上实现实时光线追踪相对容易一些,原因 @杨三的回答里基本说了。GPU的优势就是核多,大量并行计算。而恰巧光线追踪就是个特别平行的体力活,每条光线都相互独立,所以可以并行地计算它们。能够加速的地方有碰撞检测,可以使用kd-tree或oct-tree之类。2009年SIGGRAPH 会议上, Nvidia 就发布了OptiX,Nvidia GPUs实时光线追踪的API 。
另外,NVIDIA目前已经有virtual GPU技术,类似于云计算,不需要本地的GPU。如果virtual GPU可以应用到主机上,实现实时的光线追踪应该没有问题。

最最最后, Phil Spencer原tweet说的是:
“@7kayhan@albertpenello We’ve done experiments with Realtime Raytracing. A ton of potential with this tech, amazing visuals.” 他只是说做了相关实验,却被Gamespot完全改编成了另一种说法: Xbox One could get photorealistic rendering system for "amazing visuals"。提问中的那篇文章看上去像是根据Gamespot这篇报道来的。

参考资料
Matt Pharr and Greg Humphreys. Physically Based Rendering, Second edition
Tomas Akenine-Moller, Eric Haines and Naty Hoffman. Real-time Rendering, Third edition
Wikipedia

刘冠华 发表于 2020-12-31 19:17

【E3 2019】光线跟踪将为游戏带来怎样的变革?

—— 「请大家放心,我们的讲解会尽可能地接地气,易于大家理解。」编者按:随着今年 E3 微软公布新一代 Xbox,两款新世代主机都已确定将支持实时「光线追踪」。其实随着英伟达去年公布新一代 RTX 系列显卡,这一名词已经为越来越多的玩家所熟知。那么这个神秘的新技术背后是什么原理,对玩家们来说又意味着什么呢?
文/ Samit Sarkar
译/ 小权| 校/ Tiger
Polyon 中华地区独家授权协议,转载请征得同意四月,索尼官方首次公布了下一代 PS 主机的具体细节。微软也在今年 E3 发布会上公布了其新游戏主机代号「Project Scarlett」。主机平台的未来格局终于变得更加明晰。
不过,截至目前,还有很多细节没有公布。索尼表示,公司不会在 2020 年前发售 PS5 (名字未定)。微软表示,Project Scarlett 计划于明年假日购物季正式同大家见面,届时将会与《光环:无限》一同上市。
同时,本次世代主机在游戏画面展示上都有一个关键特点,而且这一特点仿佛同时得到了主机端与 PC 端的垂青。显然,我们知道 PS5 和 Project Scarlett 都将支持 8K 分辨率,不过在大多数消费者眼中,8K 分辨率已经不是什么亮点了,这并不是我们今天讨论的重点。
今天我们要说的是,光线跟踪技术,具体一点,就是实时光线跟踪。从游戏画面的角度来看,光线跟踪是最近非常流行的一个词。当然,它之所以这么火,也是理所当然的,因为光线跟踪就是未来的大势所趋。
这种技术以前主要用于好莱坞大片的制作,通过这项技术,电脑可以生成动画图像和某些视觉效果,这种技术还可以用于将电脑生成的图像与实景镜头无缝衔接。现在,我们已经明确知道,PS5 和 Project Scarlett 都将支持实时光线跟踪。毋庸置疑,实时光线跟踪将成为下一代游戏画面的重要元素之一。
不过,为什么光线跟踪对游戏如此重要呢?它跟几十年前游戏制作们制作游戏的方式有何不同?下面让我们一同探讨这个问题,不过请大家放心,我们的讲解会尽可能地接地气,易于大家理解。
《控制(Control)》中光线跟踪渲染后的办公室湿地板
首先,什么是光线跟踪?它的原理又是什么?
现实生活中,我们之所以能看见一切事物,主要是因为光线照射在物体上。光线被物体吸收、反射和折射的不同角度后到达我们眼睛中,就会决定我们看到什么样的图像。
光线跟踪则刚好相反。正如其名字所言,光线跟踪指通过跟踪从玩家的眼睛或者镜头出发后到达图像物体的光路来生成图像的方法。这种方法比直接跟踪光源发射的所有光线要高效得多,毕竟,去处理那些没有进入人眼的光线是非常浪费算力的。
光线跟踪的算法会考虑到材料和光源等元素。例如,两个相同形状的橘色篮球,如果其中一个篮球是用皮革做的,另一个的材质是橡胶,那这两个篮球会产生不一样的视觉效果,因为光线跟这两个篮球发生了截然不同的交互作用。金属和硬塑料等反光物体会产生反射,并间接照亮附近的物体,处于光路中的物体就会产生阴影。气体和水等透明或者半透明的物体会使光线发生折射(弯曲),就如同吸管在水中因为折射,看上去就像断了一样。
图解光线跟踪
因为光线跟踪是基于模拟现实世界中光线运动,以及模拟其与不同介质和材料发生交互作用的方式实现的,换言之,光线跟踪是遵循物理定律的。因此,通过光线跟踪制作出来的画面将会非常真实。这也就解释了为什么光线跟踪经常运用于电影制作之中。不过,光线跟踪的缺点在于,它需要高强度的运算能力,所以在过去这种方法无法应用于实时渲染游戏画面,直到最近,这种构想才成为可能。
为了解释其原因,我们接下来将进一步探讨光线跟踪实际运作方式的一些具体细节。我们先把上面图片中的网格看作是计算机显示屏。为了渲染现代电子游戏中的某处场景,计算机需要将游戏中 3D 的虚拟世界投射到 2D 的网格(也就是计算机显示屏)上。这样,计算机就必须得决定显示屏上每一像素点的颜色,而 1080p 的画面就拥有超过 200 万个像素点。
首先,把来自镜头的一条或者多条光线投射过每一像素点,然后观察观光线是否同任何三角相交(电脑图像中的虚拟物品由多边形组成,它们有时由成千,甚至上百万个三角构成)。如果有一条光线照射到了某个三角上面,电脑算法就会利用三角的颜色以及其与镜头的距离等数据来进一步决定像素的颜色。
此外,光线有可能在三角上发生反射,或者是穿过三角,从而产生更多的光线。仅仅跟踪单一光线并不足以制作出逼真图像。光线越多,图像质量就越高,当然,制作成本也就越高。

虚幻引擎光线追踪演示
https://www.zhihu.com/video/1122793195788075008
维塔数码(Weta Digital)和皮克斯(Pixar)等公司都有「渲染农场(render farms)」,这种超级计算机通过让数万个处理器核心协同运作,能够在数小时内生成 CG 动画电影的场景,或是一帧特定的视觉特效。
但游戏的每一帧所涉及的所有 CPU 和 GPU 运算都必须瞬间完成,因为主机必须在一秒内渲染三十帧图像,才能给玩家带来流畅的游戏体验。这就是为什么预先渲染好的过场动画会比实时游戏画面的画质更高,因为制作者们能够提前渲染好图像,同时他们也能够往画面中添加更多内容。
相反,几十年来,实时电脑画面的渲染都是通过「光栅化(rasterization)」这一过程来实现的。虽然这个过程也需要消耗大量算力,但现代 GPU 已经能很好地利用这一技术来快速绘制多边形,并把绘制出的多边形转变成像素,随后在上面添加阴影或者光效。
但是,在制作实时画面的过程中,尤其是在光效方面,光栅化技术有一定局限性。近几年,游戏制作们也想出了一些巧妙的方法来制作反射、阴影以及间接照明等光影特效,但是很多方法最终都无法得以实施,由于那时光线跟踪技术还没有得到应用,他们需要想出另一种解决方法。
《战地 5》中的光线追踪反射
最新的渲染图像技术就是同时利用光栅化和光线跟踪,让这两种技术分别承担最适宜的渲染任务。去年秋天,英伟达首次通过发行新的 RTX 系列显卡,将光线跟踪技术推向消费者,显卡内有专门用来进行光线跟踪运算的硬件。四月,英伟达推出了新的驱动程序,让公司旗下的某些 GTX 显卡也能支持光线跟踪,虽然画面效果比新显卡稍微逊色。
EA 旗下工作室 DICE 在《战地 5》中的光线反射上运用了光线跟踪,水晶动力工作室(Crystal Dynamics)把该项技术重点用到了《古墓丽影:暗影》的阴影渲染上,而 4A Games 在《地铁:离去》中则借此实现了全局光照和环境光遮蔽效果。现在支持光线跟踪的游戏还非常有限,但这种局势在未来很有可能发生转变。
为什么说光线跟踪是未来游戏大势所趋呢?
现在,游戏实时光线跟踪还处于发展初期。虽然英伟达的 RTX 系列显卡的确能给光线跟踪技术提供硬件支持,但也是唯一面向消费者的光线追踪显卡,这也是为什么现在很少有游戏利用这一技术的原因。但是,随着投资的不断增加,光线跟踪的前景也会变得愈发光明。
DX 12 是支持 Windows 和 Xbox One 游戏运行的关键软件。去年秋天,微软已让 DX 12 支持光线跟踪技术。在 2019 年 3 月召开的游戏开发者大会上,Epic Games 和 Unity Technologies 都宣布,他们各自的 Unreal 引擎和 Unity 引擎(现代游戏开发最流行两款引擎)都已支持光线跟踪技术。Crytek 很快也将为 CryEngine 引擎引入软件端的光线跟踪技术。这就意味着,CryEngine 引擎制作的游戏将不需要借助英伟达 RTX 显卡等特定硬件来实现光线跟踪。

Cryengine 光线追踪效果演示
https://www.zhihu.com/video/1122793263291072512
在光线跟踪技术方面,英伟达的主要竞争对手 AMD 并没有坐在一旁观望。AMD 目前还没有推出能为光线跟踪技术提供硬件支持的 GPU。在当地时间 6 月 10 日,AMD 在 E3 展会上公布了两款基于下一代 Navi 架构的新显卡 Radeon RX 5700 XT 和更为实惠的 RX 5700,然而,AMD 并没有提及光线跟踪技术。不过,Project Scarlett 和下一代 PS 主机都将使用 AMD 的处理器,包括基于 Navi 打造的定制 GPU。所以看起来,基于 Navi 架构的 PC 显卡支持光线追踪也是理所应当。
AMD 有望在一年内像英伟达一样,公布支持光线跟踪的显卡。到那时,可能距 PS5 和 Scarlett 发售已经不远了。此举将会为光线追踪的广泛使用打下坚实的基础,并且会让越来越多的游戏开发者愿意使用这一技术。同时也会推动游戏画质的进一步发展,让游戏画面达到前所未有的新高度。

就放荡不羁就h 发表于 2020-12-31 19:24

实时光线追踪技术是未来的趋势,不论是 NVIDIA 还是 微软 都在往这个方向靠。
不能说太多,说太多要暴露了。

另外有个哥们提到“光线追踪现在还在很初级的阶段,连电影业都没广泛应用”。看到这里我的世界观都奔溃了。
看了这个链接我觉得需要感谢这个哥们,让我涨了知识!Pixar Uses Real Raytracing for First Time in Monster's University

利益相关:NVIDIA 员工,微软粉丝。工作中需要搞 OpenGL / DirectX,也研究过简单的基于纯 CPU 以及 基于纯 GPU 的光线渲染器。

jimmy肖明 发表于 2020-12-31 19:32

要理解实时光线追踪,我觉得首先还是要理解基本的光线追踪算法,它的基本思路以及所面临的一些困难,因为实现实时光线追踪也不仅仅是硬件的问题,在算法层面也需要作出各个方面的优化和改进。
最近我参与《硬影像》播客录制了一起节目,以比较科普的方式介绍了图形渲染相关的一些知识,全访谈约1个半小时,我们从渲染的概念聊起,讨论了图形学中渲染的问题,解决渲染使用的算法,其中我们用比较多的时间和篇幅讨论了光线追踪及其相关的很多问题,欢迎收听。


收听地址:全局光照:实时与离线渲染
文字版本:在《硬影像》与罗登导演聊渲染技术
页: [1] 2 3
查看完整版本: 什么是实时光线追踪技术?它可能出现在当前的次世代主机上吗?