下一代游戏中的光线追踪问题:漫威蜘蛛侠重制版中的光线追踪分析





随着下一代游戏机的推出,Insomniac Games已开始发布更多有关Marvel的《蜘蛛侠》和Marvel的《蜘蛛侠:迈尔斯·莫拉莱斯》的详细资料。这两个项目都使用射线跟踪技术。在Digital Foundry的Alex Battaglia看来,她看起来很庄重,即使不是很出色。一开始还不错。



但是,在阅读Internet上的评论时,他在技术的实施以及帧速率和分辨率方面遇到了大量批评。因此,在新的Digital Foundry视频中,他决定在下一代控制台上引入某种有关光线跟踪的教程,并解释为什么它在Marvel的Spider-Man中看起来像那样。



所以,首先是第一件事。让我们确切讨论一下Marvel在PS5上的《蜘蛛侠》中的光线追踪是什么。



在4F分辨率下以30FPS的速度进行时,光线追踪看起来很棒。同时,像在失眠症游戏中一样,可能会或可能不会使用动态分辨率。这是光线追踪应用于游戏内反射(如车门上看到的反射)的地方。







或在此屏幕快照中,建筑物窗口中反映了远方的英雄和城市。







根据新闻稿,光线追踪还用于背景阴影(环境光遮蔽,AO)。在屏幕截图或视频中更难识别。通常,AO在场景反射的光线更难以到达的区域模拟间接照明的阴影。







就对社交媒体和论坛的评论而言,光线追踪反射的质量令人失望,乍一看,这些质量仅占基本分辨率的四分之一。但是它们显然带有过滤器,因此很难确定。







反射显示为1080p,其余图像显示为4K。例如,评论员抱怨说,反射中的叶子比“真实”树上可见的叶子更加稀有或完全不存在。或者某些游戏中的物体(例如汽车或行人)可能不会出现在反射中。还是缺少阴影。或忽略一些小细节,例如在蜘蛛侠套装上。







实际上,所有这些都不足为奇,并且指的是强制性措施,这似乎是理所当然的。这是由于以下事实:光线跟踪是分几个步骤执行的,每个步骤都会影响整体性能,而预算却非常有限。



假设我们是开发人员,他们需要在给定的预算内创建最真实的反映。







让我们将光线跟踪过程分为四个步骤。假设我们需要满足8ms的要求,才能以4K分辨率为30 FPS游戏创建反射。



让我们继续第一步。对于光线建模,GPU必须了解屏幕上和屏幕外的场景和几何对象。第一步,我们创建一个易于阅读的游戏场景版本。它包含的对象越多,它们的动态性就越高,此步骤将花费的时间越长。



在第二步中,我们将射线发射到第一步中创建的结构中。







要查看光束是否在击中任何地方,请用不可见的击中框包围所有对象。因此,射到场景中的光线会一直穿过它,直到它检测到射入到几何体中为止。我们发射的光线越多,它们走得越远,或者我们击中的击打盒越多,此步骤将花费的时间就越长。光线跟踪管道的这一部分可以在控制台和PC上通过硬件加速。



下一步是阴影或像素颜色选择。







阴影阴影越多或阴影阴影越困难,此步骤将花费的时间越长。







第三步为我们提供了所需的颜色和阴影,但是它们的过渡效果很差或很吵。该问题在第四阶段解决。通常,在第四步中清除第三步的结果越准确,过程花费的时间就越长。







整个流水线总共需要花费八毫秒的时间,一开始我们离这个目标还很遥远。我们需要调整步骤以减少时间,并确保我们的反射效果仍然很好并且与游戏设计匹配。这可能导致某些区域的反射质量下降,而另一些区域的反射质量增加。







我们将使用的首批优化之一是降低光线跟踪的分辨率。这样,我们将限制发出的光线数量,并减少第二步和第三步所需的时间。







如您在下面的屏幕快照中所见,反射看起来几乎是原始分辨率的四分之一。这种优化不仅针对控制台GPU,而且通常针对所有GPU进行,因为光线跟踪非常耗费资源。







我们来看看The Ghost Runner演示的屏幕截图,该演示在RTX2060 Super显卡上启用了4K光线跟踪。与蜘蛛侠相比,这里我们看到了一些差异。创建游戏的虚幻引擎4使用的光线追踪方法在时间上稍贵,但在物理上比《蜘蛛侠》更精确。







RTX 2060 Super的工作方式与RTX 2070类似,具有与PS5相同的内存总线带宽,以及8GB的相同容量。 RTX 2060 Super可能是与PlayStation 5 GPU进行比较的一个很好的起点。







当场景以4K渲染并带有反射时,并且屏幕上的反射量与上面的静态水坑一样小,GPU几乎无法容纳30 FPS。如果场景中有更多动态,则帧速率肯定会更低。将光线跟踪轴向分辨率降低50%,从而将总分辨率降低到1080p,可以将性能提高约27%,从而在GPU中留出了空闲资源,可以将帧频提高到30 FPS。







在其他场景中可以看到更戏剧性的结果。例如,在这里。反射玻璃表面几乎占据了整个屏幕。在这种情况下,以原始4K分辨率进行反射会导致帧速率为21 FPS。同时,将反射分辨率降低到1080p时,帧速率将提高58%,达到33 FPS(所需的30 FPS)。



因此,在具有与PS5相同性能的GPU上,您需要使用较低分辨率的光线跟踪反射,以能够在整体4K分辨率下保持一致的30 FPS帧速率。这样就很清楚了,蜘蛛侠为什么只使用1080p的反射来降低光线追踪的成本。







让我们回到计算示例。我们降低了反射的分辨率,以使第二和第三阶段现在更节省时间。但是我们仍然无法在框架持续时间内适应给定的预算。



让我们尝试通过减少与射线追踪有关的动态性或对象数量来缩短第一步的时间。因此,在前面显示的屏幕截图中,反射中可能缺少一些动态对象。或者在此处,在Miles Morales游戏视频中,在人群场景中,您有时会注意到某些NPC并未反射在表面上。







根据其他开发人员的经验,我们知道在屏幕上绘制许多字符可能会占用大量资源。例如,在RTX 2080 Ti上,Metro Exodus中的某些场景中有很多角色,渲染时间超过4毫秒。在我们的情况下,这将是分配预算的一半。



因此,在光线跟踪的第一阶段减少动态对象的数量可以加快该过程,然后我们可以分配8 ms的时间。







但是,结果可能不会像我们想要的那样令人印象深刻。



例如,看一下《战地风云5》的这些屏幕截图。











如上所示,建筑物在反射中出现和消失。这不是最理想的效果,因此我们将在第二步中增加光线可以传播的距离,并在第一步中增加对象包含在结构中的距离。







从蜘蛛侠回到我们的框架,我们可以看到反射显示的物体很远。如果地平线上的物体不存在反射或不断闪烁,出现和消失,那将是非常不愉快的。







因此,考虑到反射中的建筑物远离反射源,并增加了光线传播的距离,我们将不得不为此付出其他代价。







让我们回到计算。通过决定考虑反射中的远处物体,我们再次发现自己超出了预算。因此,我们将再次审查管道以进行可能的简化。也许第二步将使我们回到所需的8ms。



让我们再次查看我们的城市屏幕截图。在窗口的反射中,与原始树模型上出现的叶子相比,您可以看到更多的稀有或缺失的叶子。叶子在这里被归类为透明,对于透明对象,管道的第二步需要更长的时间。我们从《战地风云5》的经验中知道这一点,其中的粒子和反射使某些场景变得极为昂贵。



图片



对于蜘蛛侠,我们可以在第二步之前减少反射中树木的叶子数量。我们还将使其不通过光线跟踪来处理粒子效果,因为此处不显示反射中的雾。







现在我们几乎适合框架预算,但仍略高于预算。







最后的优化可以在第三步(使用阴影)中完成。



让我们回到我们的屏幕截图。您是否注意到蜘蛛侠套装中缺少一些小细节?在他的西装上可以看到哪些?如果我们简化反射中的材质,则将花费更少的时间来绘制它。







这没有错,因为许多使用光线追踪的游戏(例如《德军总部:年轻血统》)都使用相同的技术。







结果,我们适合分配的8 ms。因此,我们在某些方面提高了反射的质量,例如,通过添加遥远物体的反射,但同时又采取了某些简化措施,例如反射的下采样。







希望通过这个示例,我们能够传达出游戏开发人员在必须面对有限的性能预算和昂贵的技术(例如光线追踪)时所面临的困境的想法。



All Articles