Inside Digital Foundry-我们如何测量控制台帧速率

2019-09-25 16:50 197

这是我们在Digital Foundry上提出的最常见的问题之一 - 特别是在我们的YouTube频道上。我们如何测量控制台帧率并创建我们的性能视频?是否有某种控制台相当于经典的PC性能工具FRAPS?这是一个很长的故事,也是我们过去部分涵盖的故事,但最令我兴奋的关于扩展视频输出的方面之一就是有机会使用媒体来揭开我们的大部分工作神秘面纱,展示我们的工具和过程。这就是从这里开始的。

自从我们在2008年开始分析控制台性能以来,这些工具已经发展得非常好,但基本原理并没有改变。我们使用高端采集卡直接从源端口的HDMI端口抓取未压缩视频,并将每个帧与之前的帧进行比较,搜索重复数据,定位撕裂线,并从那里计算帧速率。

最初,我们只有一个命令行工具 - FPSdetect.exe - 可以扫描捕获的视频并告诉我们它的前一个框架有多么不同 - 有效地分析运行的游戏所需的所有数据v-sync有效。后来加入了FPSgraph.exe,这是另一个命令行工具,它使用FPSDetect生成的.txt文件,用熟悉的图形创建透明的TIFF文件。这是每帧一个TIFF,覆盖在Adobe After Effects中的源视频上 - 使用起来非常折磨,最终视频的预览选项有限。计算中的任何错误都需要手动编辑.txt文件,并重复整个企业。我们需要简化流程,所以我们更进一步,在下面的视频中展示了工具的开头 - FPSGui。

它包含两个主要元素:初始编辑器允许我们定义外观视频,图形,字体和视频数量(单个或多个分屏选项 - 我们目前最多支持四个来源)。然后是查看器,包含每个导入捕获的分析数据,以及几种可视化模式。在获得准确的分析方面存在许多挑战 - 找到撕裂位置就是其中之一,而那些观察模式对于确保准确性非常有帮助。

理论上,计算撕裂线位置是比较的简单情况每个帧与其前身一行一行,寻找常见数据块。在实践中,许多其他变量可能会使生活变得更加困难 - 有时HDMI数据会“抖动”,这意味着重复的帧不再具有数学上的相同性。使用自适应v-sync以60fps运行的游戏也可以看到在前一帧没有共同数据的情况下出现撕裂线,使得编程方法难以定位它们(??Titanfall教会了我们很多关于此的内容)。很少有新游戏以与我们之前见过的任何形式完全不同的方式呈现,这意味着需要进行一些手动修正或导入参数的更改。这就是我们的热图和绝对差异查看模式非常有用的地方,允许我们以类似于算法运行方式的“黑白”方式查看捕获。

检查潜在错误也有帮助极大地通过帧时间图,可以准确地显示任何给定图像在屏幕上保留多长时间。帧时间对于表现“瞬间”体验非常重要 - 有效地,它在游戏过程中突出了障碍和口吃,它对于验证良好的帧起搏也很重要,但它对我们确保分析准确性也很有用,突显了潜在的怪异。 30fps游戏中16ms的帧时间峰值......真的吗?在60fps的比赛中50ms口吃?这很奇怪,应该检查出来。绝大多数游戏都会扫描到FPSGui并再次导出而没有真正的问题,但多年来我们发现,与我们的算法一样好,有时外部变量会导致少数游戏出现问题 - 这就是我们的需要可视化模式才能完全了解正在发生的事情。最后,为了确保准确性,人工验证了算法的结果。

我们工具的最后一次重大修订增加了对Nvidia的FCAT的支持 - 一个覆盖PC的覆盖具有不同颜色边框的独立框架,使得撕裂线检测变得轻而易举。这也使我们能够以视频形式呈现基准测试,让我们更深入地了解PC性能以及瓶颈所在。我们还开展了一些工作,允许我们分析压缩源