屏幕撕裂,怎么影响游戏体验?
为了更好地了解垂直同步对游戏体验的影响,首先有必要了解它的实际工作原理。VSync 一词是垂直同步的缩写,也是在游戏中大家见到的设置项目的英文。
这是一项为避免称为“屏幕撕裂”的烦人的视觉缺陷而开发的技术,而“屏幕撕裂”是游戏中最讨厌的事情之一。
当由于显示器的刷新率和显卡的帧速率之间的不同步而导致视频游戏图像被拉伸或撕成两半时,就会发生这种情况,即(每当 显卡每秒向显示器发送的帧数超过其处理能力时)。结果是两帧将投影在同一屏幕上更新,这是一种令人不快的撕裂,严重降低了体验。
那么出现这种现象的原因是什么呢?
在没有垂直同步时,只要是优化正确的游戏,现在的显卡都会火力全开的尽可能快地渲染帧(除非出现任何瓶颈)。在主流3A游戏中,一个高端显卡可以轻松地以 1080p 的速度每秒吐出数百帧渲染的画面。
每当显卡绘制帧时,它都会在所谓的“帧缓冲区”中渲染它(下图)。帧缓冲区,是显存中划分的一部分,用于存储要在显示器上显示的最终图像的信息。关闭垂直同步后,显卡会尽可能快地把帧渲染到帧缓冲区,而显示器会尽可能快地在屏幕上绘制帧缓冲区内的画面。
假设显示器的刷新率为 60 Hz,并且你正在以 100 FPS 的渲染速度玩游戏。这意味着显示器每秒可以更新自身(并渲染下一帧)60 次,但显卡每秒发送 100 帧。这比显示器可以显示的速度快 66%。
树干的上半截和下半截明显分开了,这就是画面撕裂
由于显示器无法一秒内显示所有 100 帧,因此它最终会同时显示每 x 帧的 33% 和随后 x+1 帧的 66%。结果,玩家会看到一个画面帧 x 的三分之一,而其余帧是帧 x+1的内容,对于高速运动的游戏画面来说,显然就会出现参照物在画面上的错位,从而造成了一种“撕裂感”。只要帧速率停留在 100 FPS,这种情况就会继续。
而从根本上,这是显卡传统的“双缓冲”机制造成的:双缓冲是一种通过利用两个缓冲区而不是一个缓冲区(即后台缓冲区back buffer和前端缓冲区front buffer)来减少屏幕撕裂的技术。两个缓冲区一个位于显示器上,后台缓冲区位于显卡上。
一旦显示器完成了一帧,那么后台缓冲区和前台缓冲区就会交换——它们被重新命名,但没有任何东西被复制。然后以前的后台缓冲区变成前台缓冲区,反之亦然。
然后显示器 “刷新 “并显示该帧。使用这种双缓冲,“交换”可以随时发生,即使前端缓冲区正在将数据发送到显示器面板。发生这种情况时,屏幕的一半由较早帧的像素组成,而其余部分由较新的帧组成,这就是导致撕裂的根本原因。
配置不好,为啥不能开垂直同步?
在VRR可变帧率同步(G-sync、FreeSync)出现前,对于撕裂现象,一般是通过将显卡的缓冲次数“增加”来实现缓解。此时防止撕裂的最常见方法是“等待”交换缓冲区,直到显示器显示完当前帧,并准备好接收下一帧。将缓冲区交换与帧像素的垂直刷新进行同步,就称为“垂直同步”。
当显卡实际渲染的帧速率高于刷新率时,这非常有效(下图)。
看到这里你会发现,这个“等待”可能会造成一个延迟。除了帧延迟,还会有什么问题?
如果你的游戏fps低于刷新率(假设为 60Hz),例如你显卡差,实际帧率只有 45fps 而不是 60fps。这比刷新率低 33%。那么,每次显示器刷新时,只会渲染下一帧的 66%。结果是将再次显示同一帧。
之后,显卡完成在帧缓冲区中绘制帧,但前端缓冲区已包含一个帧,并且在显示器刷新之前无法交换它。因此,它等待显示器刷新,然后交换帧。然后,最后显示第二帧,整个过程重复。这造成了每两个周期显示一帧,渲染实际上减慢了 2 倍,将生成的 FPS 降至 30fps。
也就是说,在60Hz的垂直同步条件下,如果显卡跑不到60fps,则在打开垂直同步的情况下,玩家在显示器上,看到的30fps的帧率的画面!就是“配置不好不要开垂直同步”的原因。
画面不撕裂,但实际上你“卡”了
看到这里你会发现,垂直同步等待缓冲本身就会造成一个“延迟”,就是下图的红色块时间段。
放在实际游戏体验就是,画面没撕裂,但实际上你看到的画面和游戏实际画面有延迟。这在电竞游戏中是致命的。
哪怕是采用了下面的三重缓冲技术也是如此:它添加了第三个缓冲区,这个额外的缓冲区允许显卡继续渲染,因为屏幕缓冲区会重新显示同一帧两次,并且渲染流不会受到阻碍。而在双缓冲(打开垂直同步)中,后台缓冲区必须等待前端缓冲区刷新,并且在交换其中的帧之前无法开始渲染下一帧。
三重缓冲(一般要在显卡驱动中打开)垂直同步(游戏中打开)降低了延迟,或者说,它是把缓冲等待的延迟分开了,只要显卡渲染帧率够高,等待期分割得够细碎,那么这种延迟超出了人感官感知能力,画面滞后就几乎“无感”了。但是,延迟还是存在的。
另外,三重缓冲时获得的帧率通常具有误导性。大多数 OSD 工具(如微星小飞机AfterBurner和FRAPS)测量的是每秒更换一次前端缓冲区的次数,而不是 显卡每秒渲染的帧数,在三重缓冲时,误差就大了。
那么,开还是不开垂直同步?
如果你主要玩单机游戏,图像撕裂非常明显并干扰了游戏体验,那么绝对值得打开垂直同步,并在显卡驱动中打开三重缓冲,特别是在你硬件配置能保证帧率大于屏幕刷新率的时候。
另一方面,如果每个帧速率都很重要并且响应时间最重要,例如在CS GO之类电子竞技游戏中,则应禁用垂直同步。电竞玩家都在为每一个微瞬间而战,限制刷新率不会产生最好的效果。
如果您不喜欢垂直同步的缺点,显示器又支持的话,尽量考虑使用G-sync.或者Freesync 作为替代方案可能会更有帮助。这种可变同步帧率保证了尽可能小的帧率延迟和由此产生的输入延迟。