帧率与刷新率
显示器能够呈现出视频画面与我们小时候玩的连环画一样,都是通过快速翻动一张张微小变化的画面形成动态画面。在玩游戏时,显卡负责渲染每一帧图片,显示器负责将渲染的图片扫描到显示屏上。当我们翻动连环画的速度越快且连环画越密集,呈现出的画面连贯性越好,动态效果越好。与连环画相似,显卡渲染的图片越密集,且显示屏刷新速度能跟得上显卡的渲染速度,那么我们看到的动态效果就越丝滑。
这里就要引入帧率与刷新率的概念。帧率表示图像处理器(GPU)每秒渲染出多少帧的静止画面,单位为fps(Frame Per Second)。比如在玩游戏时帧率为60fps,表示图像处理器每秒渲染60帧静态画面。不过,当突然切换到场景复杂的画面时,帧率会不稳定,这就是我们玩游戏时遇到的“掉帧”现象。显卡性能越强大,动态效果会越流畅。
刷新率与帧率概念非常相似,它表示显示器每秒能刷新多少帧静止画面,单位为Hz。这里要区别的是,表示GPU渲染图片能力引入帧率概念,表示屏幕显示速度引入刷新率概念。显卡内的GPU负责制造画面,图像显示器负责呈现画面。某电竞屏幕的刷新率是144Hz,就是说该显示器每秒能够显示144张图片。刷新率越高,观看屏幕时的闪烁感越小,视频播放时稳定性越好,人眼看起来越舒适,对视力保护就更好。
帧率与刷新率匹配
显示器收到显卡渲染的图像后不是像PPT一样一张一张的播放图片,而是通过扫描的方式呈现。目前大多数显示器都是通过逐行扫描的方式呈现一幅画面,即一行一行的扫描,从左上角开始,到右下角结束。扫描完成后显示器会将扫描点从右下角挪到左上角,这个过程被称之为VBlank。有时我们会人为增加VBlank时间来实现刷新率与帧率的匹配。
理想情况下,显卡渲染一副图片后显示器刚好可以进行扫描,即帧率与刷新率相同就可达成显卡与显示器完美配合。但实际上我们玩游戏时经常发现,就算帧率与刷新率相同有时也会在游戏场景复杂时发生卡顿。这是因为游戏每帧的画面复杂程度不同,显卡处理图像的计算压力不同,会影响帧率变化。为了能让波动的帧率匹配固定的刷新率,我们让显卡进行帧缓存,默认设置一般为两个帧缓存,分别为前缓存(FrontBuffer)、后缓存(BackBuffer)。显卡渲染好一副图片不会直接交给显示器,而是先放到后缓存,然后进行前后缓存交换,即帧传递(Bufferswap),交换后显示屏开始扫描前缓存图像,如此循环往复。
当帧率与刷新率相同时,显示器与显卡配合流畅。当某一时刻显卡渲染比显示器刷新慢时,显示器扫描完A图片后显卡还未完成B图片渲染,此时无帧传递发生,显示器仍然会再次扫描A图片。在扫描A图片过程中B图片突然渲染好了,此时发生帧传递,显示器未扫描部分进行B图片的扫描。显示器显示的图片一部分是A的,一部分是B的,这就是我们在玩游戏时遇到的图片撕裂。当某一时刻显卡渲染比显示器刷新快时,显示器在还未扫描完A图片时显卡就已经渲染好B图片,此时发生帧传递,A图片还未扫描完的部分进行B图片扫描,仍然发生图片撕裂。不过这种撕裂往往存在于图片上边缘或下边缘,不易被人眼察觉。
解决画面撕裂的办法有两种,第一种是开垂直同步。当开启垂直同步后,显示器扫描完A图片后B图片还没有渲染好,此时显示器会再次扫描A图片,等A图片扫描完毕后才进行帧传递,并进行B图片扫描。这种情况相当于显示器重复了一帧画面扫描,跳过了一帧画面,等效降低了刷新率,会产生画面卡顿感。显示器未扫描完A图片时B图片就已经被显卡渲染好,此时由于开启垂直同步,不发生帧传递,只有等显示器扫描完A图片后才进行B图片传递与扫描。这就相当于将帧率锁定到与显示器一致。比如一款游戏以144fps帧率运行,显示屏只有60Hz的刷新率,那么开启垂直同步后游戏只能以60fps运行。
后来,NVIDIA为了解决开垂直同步产生卡顿问题,提出了自适应垂直同步技术,即当帧率大于刷新率时开启垂直同步,当帧率小于刷新率关闭垂直同步。但这种技术存在最大弊端是延迟,显卡会等待显示器扫描完一帧画面才会进行帧传递,当画面发生变化时显示器无法及时扫描,因此在玩游戏时观看画面都是滞后的,此外还会产生鼠标响应延迟。解决延迟问题的方法并不难,就是打开三重缓存功能。该功能在前缓存和后缓存中间加一个中缓存,给显卡留出更多处理时间。这种方法虽然可以解决垂直同步带来的延迟问题,但仍然是治标不治本的方法。当刷新率显著低于帧率时,中缓存和后缓存都被显卡渲染完了显示器还未扫描完当前画面,此时延迟仍然存在。
NVIDIA为了解决仍然存在的延迟问题提出了快速垂直同步技术,该技术在开启三重缓存的基础上让中缓存与后缓存循环交替。当显卡画好中缓存和后缓存后显示器仍然未完成当前画面的扫描,则中缓存和后缓存交替,显卡开始新画面渲染,直到显示器扫描完才发生中缓存与前缓存的帧传递,然后显示器开始按照前缓存画面扫描,这样就始终有一个画好的中缓存能够向前缓存传递。该技术虽然解决了延迟问题,但很多渲染好的画面被显卡抛弃,导致生成的动态画面不均匀,给人带来卡顿感。
NVIDIA和AMD为了解决以上垂直同步带来的问题分别提出了G-Sync、FreeSync,官方将这两个技术叫做自适应显示刷新率(VRR)。当帧率低于刷新率时,显示器刷新率动态匹配帧率,即显示器扫描完一帧图面后等待显卡传递新图。VRR与垂直同步区别是,VRR让刷新率匹配帧率,而垂直同步是让帧率匹配刷新率。当帧率稳定、且略低于刷新率的时候,显示器与显卡可以做到很好的匹配,画面不会撕裂和延迟,这是G-Sync和FreeSync最理想的状态。但当帧率高于刷新率时仍然存在画面撕裂问题,因此官方推荐开启VRR,锁帧低于刷新率2-4Hz或开启VRR、垂直同步。开启垂直同步又会出现延迟问题。当帧率远低于刷新率时,由于刷新率的适配有下限,需要引入低帧补偿机制(LFC)进行补帧。LFC需要预判补帧数,当显卡输出帧率不稳定时,预判补帧两帧结果实际只需要补一帧,就会出现帧率与刷新率匹配不好的问题,此时开垂直同步则发生延迟,不开则产生画面撕裂。VRR理想状态要求帧率稳定,锁帧低于刷新率2-4Hz,在这种情况下没有VRR也只会在显示器上下边框出现画面撕裂,人眼不易察觉,那VRR有什么意义?
G-Sync、FreeSync技术虽然比较火热,但效果仍然有限,在选购游戏本时没必要纠结电脑是否附带该技术。撕裂、延迟、卡顿问题不可能完美解决,关注你的侧重点就好了。一些职业游戏玩家喜欢超高帧率运行游戏,虽然显示器无法达到显卡渲染速度,看似造成过多帧数浪费,产生画面撕裂,但有效减少了卡顿与延迟问题。
人眼能分辨多少帧率
网上对人眼分辨帧率上限各执一词,有人说是60Hz,有人说是144Hz。我比较认同人眼不能简单拿显卡帧率比较这个观点。人眼感受动画机理与显示器播放动画不同,感光细胞是近乎一瞬间感受到一副画面,看到的画面是运动的,而非频闪。真正决定人眼帧率上限的是大脑带宽限制,当我们接收到的信息过多时,大脑会对处理不过来的信息压缩。比如我们看到高速转动的车轮时车轮变模糊了,这就是常说的动态模糊。从直观测试的角度讲,人与人之间所看到画面的帧率上限并不相同,有的人能看到144Hz刷新率与240Hz的刷新率之间有区别,有的人确不能。不过大多数人认同,当你看惯了刷新率120Hz的屏幕后,再看60Hz的就会觉得卡顿,这就是我们说的“回不去了”。
为什么24fps的电影看起来很流畅,60fps的电影看起来很卡?
电影每一帧的画面更像人眼看到的真实场景,对运动物体有动态模糊,可以认为物体运动时一帧画面相当于游戏内的多帧画面,因此人们并不觉得卡,而游戏本来就是一个交互场景,设计复杂,往往需要更高帧率。有时游戏为了减少卡顿感,往往会提供动态模糊开启/关闭功能。
VR设备晕眩问题
VR产品的晕眩感一大原因来自于机器的低刷新率、低帧率。当人戴上VR设备后头左右摇晃时,画面的低刷新率和低帧率带来延迟,使视觉与体感总是不匹配的,导致恶心、晕眩。VR仍有很多问题需要解决,在肉眼可见的未来,当我们能在VR世界自由翱翔,在茶余饭后完全沉侵在虚拟世界,这将是我们工程师值得骄傲的战绩。