为什么帧率达到 60fps 就流畅?

引言:

做过显示性能优化的同学应该常常听到别人说显示性能优化的目标就是达到60 fps, 但是至于为什么是60 fps 而不是 55 fps 或者 65 fps 就众说纷纭了,例如知乎上的这个问题为什么安卓不把系统显示帧数提高?

  • 为什么是60fps ? 这是因为人眼与大脑之间的协作无法感知超过60fps的画面更新。
  • 好像眼睛能识别的帧数低于60很多,而系统到60帧依然很清晰了
  • 60fps 完全够了

但是这些答案既没有相关文献引用也没有进行因果关系的分析,用大脚趾思考一下都会感觉不怎么靠谱。

凭借钻研到底的精神,我们一个一个地来细细探究这些问题。


# 一. 人眼的感知极限并不是 60fps

我们从维基百科以及果壳中,可以查到:

”有了平滑度高的60hz之后,更有极度连贯的120hz的电视推出,而超过大概85赫兹的视频,像是画面每更新一次只会发光几百分之一秒的阴极射线管及等离子显示屏,此时已经到达大脑处理视频的极限,人眼并无法分辨与更高更新率的差异,因此使用主动式快门眼镜的3D电视更新率达到200赫兹或以上,对人眼来说是无法看到左右视角切换的过程。“

因此,人眼的感知极限是高于 60 fps 的。


# 二. 画面帧率越高,体验越好

维基百科中提到几个重要的帧率数值:

  • 12 fps:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候,就会认为是连贯的
  • 24 fps:有声电影的拍摄及播放帧率均为每秒24帧,对一般人而言已算可接受
  • 30 fps:早期的高动态电子游戏,帧率少于每秒30帧的话就会显得不连贯,这是因为没有动态模糊使流畅度降低
  • 60 fps:在实际体验中,60帧相对于30帧有着更好的体验
  • 85 fps:一般而言,大脑处理视频的极限

注:如果需要了解动态模糊技术相关知识,可以查阅这里 (https://link.jianshu.com/?t=https://www.zhihu.com/question/21081976/answer/34748080)

所以,总体而言,帧率越高体验越好。一般的电影拍摄及播放帧率均为每秒24帧,但是据称《霍比特人:意外旅程》是第一部以每秒48帧拍摄及播放的电影,观众认为其逼真度得到了显著的提示。


# 三. 性能优化的极限是 60fps

这里出现了一个悖论:既然帧率越高体验越好,那为什么我们的显示性能优化只需要做到 60 fps 就 OK 了? 具体的原因就要从我们使用的设备说起了。

首先,我们需要明确一点:生成图像的设备(如显卡)与显示图像的设备(如显示器)是分离的。下面我们分别进行讨论:

# 1. 显示器的刷新频率是固定的

目前, 大多数显示器根据其设定按 30Hz、 60Hz、 120Hz 或者 144Hz 的频率进行刷新。 而其中最常见的刷新频率是 60 Hz。 这样做是为了继承以前电视机刷新频率为 60Hz 的设定。 而 60 Hz 是美国交流电的频率, 电视机如果匹配交流电的刷新频率就可以有效的预防屏幕中出现滚动条,即互调失真。(这样我想起了一个老段子:马屁股决定航天飞机火箭助推器的宽度)

# 2. 显卡的生成图像的频率是变化的

因为,显卡的生成图像的频率与显示器的刷新频率是相互独立的。因此,就涉及到了一个配合的问题。

最理想的情况是两者之间的频率是相同且协同进行工作的,在这样的理想条件下,达到了最优解。但实际中显卡的生成图像的频率是变化的,如果没有有效的技术手段进行保证,两者之间很容易出现这样的情况:当GPU还在渲染下一帧图像时,显示器却已经开始进行绘制,这样就会导致屏幕撕裂(Tear)。这会使得屏幕的一部分显示的是前一帧的内容,而另一部分却在显示下一帧的内容。

屏幕撕裂(Tear)的问题,早在 PC 游戏时代就被发现, 并不停的在尝试进行解决。 其中最知名可能也是最古老的解决方案就是 V-Sync 技术。

V-Sync 的原理简单而直观:产生屏幕撕裂的原因是显卡在屏幕刷新时进行了渲染,而 V-Sync 通过同步渲染/刷新时间的方式来解决这个问题。显示器的刷新频率为 60 Hz,若此时开启 V-Sync,将控制显卡渲染速度在 60 Hz 以内以匹配显示器刷新频率。这也意味着,在 V-Sync 的限制下,显卡显示性能的极限就限制为 60 Hz 以内。