2024年1月19日发(作者:)

刷新率那点事:为什么只能是30和60?

“30 vs 60”靠什么锁定?速度的极限?

一般我们看到某某某超级大作的主机版信息都会看到这样一句话,“该游戏运行在900p分辨率30fps”或是“1080p60fps”。这几个数字对各位来说应该都已经不陌生了吧。不过我被人问过一个问题:“为什么不是30就是60?不能是别的数字吗?”

“30 vs 60”

这个问题还得从“刷新率”这个词说起。简单的说(用最科学的方式来解释的话„„大概不会有人想看吧!),刷新率就是显示设备每秒更新画面数量的上限,在显像管(CRT)时代,刷新率指的是阴极射线枪的电子束在垂直方向上扫描呈现画面的速度,而对液晶显示器(LCD)来说指的是面板更新画面的频率,前者根据显像管等级不同、分辨率不同在设备之间存在区别,而对目前的液晶显示器而言,最流行的标准数字是60Hz。就是说,你我现在正在面对的这台显示器十有八九是一台60Hz的设备,它所能支持的帧数上限也就是60fps:每秒更新60次画面。

有了这个前提,回答开篇的问题就简单的多了:要保证画面的视觉流畅以及操控的响应一致,帧数只能是刷新率(60Hz)的倍数。大于60的帧数没有意义,又不能小于24这个动态画面的下限,那么只剩下了30与60这两个数。在30和60fps下,每一帧将在屏幕上分别存在33.33毫秒和16.67毫秒,然后被下一帧替换,每一帧的存在时间对等,玩家的操作响应延迟也会一直是一致的,视觉和操作上都不会有迟滞感,完美。

那为什么不能是别的数字?很好,我们假设你把游戏的帧数设定在了45fps的上限,那么在同样的一秒网格图上,每一帧的显示存在时间就变成了这样:

为了简化表达,图中我们假设有15帧显示了33.33毫秒,而剩下的45帧则显示了16.67毫秒,实际情况比这要复杂得多。而每一帧的平均存在时间?早不知道飘到哪里去了。这样不平均的帧同步时间带来的就是明显的12Cr1MoVG合金管卡顿感和操作的响应时间变化。为了避免这样的现象发生,现代游戏的帧数上限要么是30fps,要么是60fps,少数帧数不固定的游戏也大多提供了锁定到30fps的选项,典型的例子有能达到约40fps的《声名狼藉:次子》,不锁定60fps的《最后生还者》,Xbox 360版《泰坦天降》以及《杀戮地带:暗影坠落》的单人战役。

在实际的引擎渲染中,帧数显示稳定但画面迟滞操作延迟的现象也不少见,这就是所谓的“帧生成速率”(frame pacing)问题。虽然引擎可以做到每秒输出30或60帧画面,但渲染管线中生成速率的不固定导致每帧之间的速率间隔不是固定的33.33/16.67毫秒,最典型的例子就是From Software的“魂”系列游戏,《血源诅咒》的frame pacing问题就一直没有得到修复。

▲《血源诅咒》中帧生成速率的波动非常常见

靠什么锁定?

从机制上说,游戏锁定帧数采用的都是同一种方式:垂直同步。顾名思义,它将游戏引擎输出画面的速率与显示设备的(垂直方向)刷新率同步,这其中又有两种更深层次的机制:双重缓冲与三重缓冲。

所谓“缓冲”(Buffer),指的是设备(主机/PC)输出的要显示在屏幕上的画面原始数据,为了减少缓冲与显示设备连续交换之间产生的画面闪烁,随后出现了双重缓冲的做法,即设置一个后部缓冲(back buffer)和一个前部缓冲(front buffer),设备将显示数据输出到后部

缓冲,在每一帧之间将前后缓冲交换,显示设备则将前部缓冲描绘到屏幕上。

但这个做法有个缺陷:一旦后部缓冲的更新速率超过了前后缓冲的交换频率——也就是显示设备的刷新率,两帧更新之间就会出现著名的画面撕裂现象,而启用垂直同步将前后缓冲交换的速率固定,又会大幅度提高输入延迟,并在后部缓冲无法及时更新(帧数不足)的情况下会大幅度降低实际画面更新速率,最近的一个例子,就是PS4版《巫师3》早期版本在沼泽地区帧数不足时,游戏直接锁定到20fps的诡异现象。

▲《丧尸围城》《战争机器》等上世代中早期游戏都是画面撕裂的大户

针对这个缺陷的解决办法是再增加一个后部缓冲,即所谓的“三重缓冲”,双后部缓冲确保了输出设备不需要因为刷新率的限制而降低处理速度,过期多余的帧数据直接丢弃的做法进一步减少了双重缓冲带来的输入延迟,目前这是大部分现代游戏通行的设置,在Windows 7和以上的系统中,桌面模式会强制启用三重缓冲,这也是不少软硬件优化攻略推荐将游戏在窗口模式最大化(也叫做无边框窗口模式)下运行并开启垂直同步的原因。对不原生提供无边框窗口模式的游戏,也有Borderless Gaming等工具来手动实现。

▲设置画面时把垂直同步和无框窗口打开总是没有错的

速度的极限?

在PC领域,突破60Hz的努力早已有了长足的进步。超过60Hz的液晶面板早已不是新闻,120Hz刷新率在高端3D电视已经成为标配,而对桌面显示设备来说,最大的技术进步则是动态刷新率的出现。

“动态刷新率”顾名思义,就是将显示设备的刷新率与输出设备的帧生成速率同步,后端输出设备以多快的速度提供画面数据,显示设备就以多快的速度显示这些数据。这样做的好处显而易见:垂直同步实际上是永远启用的,无需等待缓冲更新的做法则提供了最原始的画面显示延迟与输入延迟,对于未来将进入桌面显示技术主流的高刷新率(120Hz/144Hz乃至更高的165Hz)面板来说,也无需无缝钢管担心输出设备因为机能问题无法达到这么高的帧率,毕竟对现代游戏来说,要在1080p以上的分辨率达到120fps以上的帧数,还是相当有难度的。

不过动态刷新率技术与现有显示技术的区别,导致它们目前需要特殊的软硬件技术支持。两大图形处理器厂商NVIDIA与AMD走了不同的路线,分别推出了名为G-Sync和FreeSync的动态刷新率技术。NVIDIA利用自己的市场霸主地位,通过嵌入显示器的自有技术芯片来实现,优势是可以根据每款显示器采用的面板进行独立调整,劣势自然是水涨船高的价格;AMD采取的是开放模式,通过DisplayPort自适应刷新标准实现动态刷新率,后端调整则通过驱动实现,价格自然要亲民许多,不过对拖影效果的消除不够优秀,这个问题也一直在通过驱动进行优化。

▲G-Sync真心不便宜

对PC游戏而言,在实体液晶显示器过时之前,高刷新率面板和动态刷新率技术将是未来几年的流行趋势,1440p(2560x1440)144Hz的G-Sync/Freesync显示器如今是高端玩家的宠儿,而4K等更高的分辨率受限于显示接口的带宽问题,高刷新率还不现实(最新的HDMI

2.0标准才能实现4K60Hz,尚未进入商用的DisplayPort 1.4a则可以实现4K120Hz/8K60Hz)。

而对于主机平台来说,只能期望下一代PS/Xbox主机以及NX能够提供更强的机能和更新的接口标准支持了,不过在成本控制以及60Hz显示设备占据统治地位的现实面前,主机提供高刷新率支持的可能性在短期内还是看不到的,但回头说来,这本来就是游戏这种廉价娱乐方式里的奢侈品,它棒吗?当然。有必要吗?倒是不见得。