近期开发商 Insomniac Games 放出了《漫威蜘蛛侠 Remastered》和《蜘蛛侠 迈尔斯·莫拉莱斯》的实机演示片段。游戏技术分析媒体 Digital Foundry 深入详解了两个片段,解答为何有些效果看起来不是很理想。(笔者注:本文结合了 Digital Foundry 文章和视频两部分内容而成。截图皆来自 DF 的视频)
先说基本情况。《漫威蜘蛛侠》在 PS5 上有 4K+30 帧高画质模式和 60 帧高帧数模式。高帧数模式依然使用了 PS4 版本的屏幕空间反射技术(SSR),该技术只能针对屏幕画面里的物体进行反射,画面之外的物体就束手无策,会导致视觉表现不连贯的问题。
而高画质模式采用了光线追踪反射(ray traced reflections),还有光线追踪环境光遮蔽(ray traced ambient occlusion,下文简称 RTAO)。RTAO 因为通过视频或者截图是很难向观众展现出来,因此不作为本次重点讨论部分,但总之 RTAO 可以提供诸如僻暗的角落这种地方更加真实的黑暗效果。
光线追踪确确实实带来了画面提升,但截图展现的效果还是有瑕疵。光线追踪的表现过程和帧数表现之间敏感度很高,而开发者受制于有限的资源去实现光追效果。效果不够理想具体要从光线追踪反射的原理出发来进行解释。
光线追踪反射大约分成四个步骤。我们用 4K 30 帧画面进行讨论,这样每一帧的运算时间是 33.3 毫秒,假设其中 8 毫秒用户光追反射运算。(笔者注:此处和下文的所有运算时间仅为理论模型,帮助读者更好地进行理解,并非实际数据)
第一步,光追反射基于能从任何方向发射出来的光而实现——可以从屏幕画面以外的地方发出,以及非常非常远的地方发出。游戏需要生成一个简单易读的版本场景来给后续的步骤做计算。越庞大越复杂的细节,越多动态的物体,那就需要越多的 GPU 时间来生成它。
第二步就是光线追踪了,也是有专门硬件进行加速的步骤。光线照射到第一步建立好的简单版本场景。为了准确绘制出与几何体的碰撞,所有场景里的物体周围都有一个看不见的长方体轮廓。当光线打到了一个物体的轮廓上,就会被标记为后续需要着色的地方。越多数量的光线,越多数量的物体,就会有越多的碰撞,由此带来更长的处理时间。
第三步就是给第二步标记的像素点着色。越多击中的像素点,以及越复杂的着色方式,就需要 GPU 更长的处理时间。因为光线的数量是有限的(跟现实世界中近乎无限的光无法比拟),最终结果会看起来很粗糙,充满了噪点。所以还需要最后第四步对画面进行降噪处理。最终,呈现出更加真实令人信服的反射。
即便第二步有专门的硬件加速,但整个过程对于 GPU 的负担仍然很大,妥协是不可避免的。
现在,假设这四步分别消耗了 6、6、6、1 毫秒,总共是 19 毫秒,这与先前设定的 8 毫秒相差甚远。那么该如何做出有效的妥协来让画面看起来仍然不错,同时符合游戏设计目标呢?通常前三步比较适合降低效果。
不仅仅是主机游戏,PC 游戏也有针对反射分辨率进行调节的情况。DF 使用了一块 RTX 2060 Super 对《幽灵行者》继续了测试。(笔者注:DF 表示虽然这是一款虚幻 4 引擎的光追游戏,但作为近似比较是可行的。同时 RTX 2060S 表现与 RTX2070 和 RX5700 接近,显存带宽与 PS5 的 GPU 相同,适合与 PS5 进行比较。)
在 4K 分辨率和 4K 光追反射下,一个小场景下保持画面不动勉强能保持 30 帧的水平。若将光追反射分辨率调整至 1080P,帧数会增加到接近 40 帧附近,这就给 GPU 留出了充足的资源去运算其他部分。到了一个户外场景下,4K 光追反射让帧数下降到了 20 帧出头,而 1080P 光追反射让帧数提升至 30 帧出头。
这就是为什么 PS5 的《漫威蜘蛛侠》选择了这种方法去保证帧数的稳定性。类似的做法我们在《GT赛车 7》当中也有见到过。
假设降低反射分辨率让运算时间分别缩短至 6、2、2、1 毫秒,那么总共 11 毫秒还与目标的 8 毫秒有一定差距。这时候要对第一步进行处理了。通过减少动态物体可以降低运算量。比如在《迈尔斯·莫拉莱斯》的这些截图当中,一些 NPC 没有了反射。这样一来缩短了第一步的运算时间,假设这样将运算时间控制在了 3、2、2、1 毫秒,就刚好符合预期的 8 毫秒目标了。
还有一点是光追反射的距离。要反射越远的物体和越多的物体就需要在第一步和第二步进行更多的运算。《漫威蜘蛛侠》截图里的光追反射距离很远,这方面观感良好,应该不会出现远处物体突然在反射中出现或者消失的情况。《战地5》调整成低距离光追反射后就可以看到这种突兀的情况。
但由此也会增加运算资源消耗,假设此时运算时间增加至 4.5、2.5、2、1 毫秒,此时又需要做进一步的平衡。
我们很容易看到《漫威蜘蛛侠》的截图中反射部分缺少了很多树的叶子。树叶是一种透明物体,这种透明物体和粒子对于第二步光线追踪的负载非常大。比如在《战地5》中开启光追,制造一些粒子效果比如爆炸,以及在有大量树叶的场景中行动,就会让帧数出现明显的下滑。
因此,《漫威蜘蛛侠》里面反射出来的树是光秃秃的,《迈尔斯·莫拉莱斯》片段当中烟雾这种半透明物体没有反射就是为了减少第二步的运算量。这样,我们的运算时间就可以来到 4、1.5、2、1 毫秒的水平,还是比 8 毫秒稍微高了些,需进一步平衡。
我们可以看到蜘蛛侠战衣表面细腻的编织质感在反射中下降了很多,这样可以简化第三步着色的工作量。这种做法并不只有《漫威蜘蛛侠》,《德军总部 新血脉》也使用了相同的技巧。这样,我们就可以达到目标的运算时间了。
让我们来做个总结。《漫威蜘蛛侠》整个光追反射因为有限的资源做了很多妥协,但在最影响观感的地方做了强化,再进一步从其他地方妥协,这样达成一个最佳平衡效果。
在光线追踪方面进行妥协是很正常的一件事情,因为它所需要的算力实在太大。不过如何妥协则各厂商有不同的做法。我们已经看到索尼的做法是保证原游戏分辨率的情况对光追部分进行降质。英伟达则是让原游戏分辨率下降,这样光追分辨率也一同降低下去,然后通过 DLSS 深度学习超采样对画面进行拉伸,得到优秀的高分辨率效果。
如何运用光线追踪各开发商有点不同,现在大部分有光线追踪技术的游戏都是采用传统的光栅化技术加上部分光线追踪技术(比如光追反射)的过渡形态,比如《漫威蜘蛛侠》PS5版、《战争机器5》次世代 Xbox 版。
有些人会提到“路径追踪”。微软此前展示的《我的世界》和英伟达用来做光追演示的技术 Demo 《Marbles》一样使用的是“路径追踪”(Path Tracing)。路径追踪是另外一种与本文谈论的光追反射等完全不同的光追技术。它确实提供了更真实的画面效果,但因为光线数量庞大等因素,导致其在实时计算当中需要消耗的算力对于如今的硬件而言还是太大。
《我的世界》路径追踪技术 Demo 效果在 Xbox Series X 上仅有 1080P+30 帧,而且本身就是方块几何体的物体也可以更容易地实现出路径追踪效果。《Marbles》效果非常出色,但在 RTX 3080 显卡上也不过 1440P+30 帧的表现。现阶段估计还没到路径追踪能够大展身手的时候。
总之,光线追踪正式进入消费级游戏市场也不过两三年的时间,目前仍然处于初步探索阶段。而游戏主机肩负着新技术普及的重任,未来更多游戏的运用势必会让光线追踪发扬光大。但毕竟这是一段过程,新老技术共存的过渡形态估计是很长一段时间内开发商的主流做法。
微信内搜索VGTIME2015,关注我们
长按图片下载App,获取更多精彩内容