4. 垂直同步:V-Sync 原理与撕裂卡顿之谜
垂直同步,英文叫 V-Sync(Vertical Synchronization)。
这玩意儿在游戏图形设置里几乎都有,但很多人要么直接关掉,要么无脑打开。说实话,我以前也搞错过。有一次给一个射击游戏做性能调优,开了 V-Sync 画面倒是稳了,但鼠标延迟高得离谱,玩家反馈说“像在泥巴里游泳”。嗯,从那以后我才认真去研究它到底在干什么。
4.1 垂直同步到底在同步什么?
先搞清楚一个概念:显示器的刷新和 GPU 的渲染,是两个独立的过程。
- 显示器:以固定频率刷新画面,比如 60Hz 就是每秒刷新 60 次,每次从左上角到右下角逐行扫描。
- GPU:以不固定的速度渲染帧,快的时候一秒能跑 120 帧,慢的时候可能掉到 30 帧。
问题来了——当 GPU 渲染完一帧时,显示器可能正在扫描屏幕的中间位置。这时候如果 GPU 直接把新帧丢过去,显示器就会把上半截旧帧和下半截新帧拼在一起显示。这就是 画面撕裂(Screen Tearing)。
核心概念:垂直同步的本质,就是让 GPU 的帧输出节奏,对齐显示器的垂直消隐期(V-Blank)。说白了,就是让 GPU 等显示器画完当前帧,再送下一帧。
4.2 开启 V-Sync 的利与弊
我个人习惯在需要画面稳定的场景下开 V-Sync,比如看剧情动画、玩节奏类游戏。但它的代价也很明显。
| 项目 | 开启 V-Sync | 关闭 V-Sync |
|---|---|---|
| 画面撕裂 | 完全消除 | 可能出现 |
| 帧率上限 | 锁定为显示器刷新率(如 60 FPS) | 无上限,GPU 跑多快就多快 |
| 输入延迟 | 增加(通常 1~2 帧) | 最低 |
| 帧率波动 | 容易卡顿(掉到 30 或 20 FPS) | 平滑下降,不会突然腰斩 |
| 适用场景 | 剧情、电影化游戏、桌面应用 | 竞技射击、MOBA、高刷新率显示器 |
注意:开启 V-Sync 后,如果 GPU 渲染速度低于显示器刷新率,帧率会直接腰斩到刷新率的整数分之一。比如 60Hz 显示器,GPU 只能跑 55 FPS,V-Sync 会强制降到 30 FPS。这就是为什么有时候你感觉“开了垂直同步反而更卡”。
4.3 画面撕裂到底长什么样?
你想想看,显示器是从上往下逐行刷新的。如果 GPU 在显示器扫描到一半时换了帧,结果就是:屏幕上半部分还是旧帧,下半部分已经变成新帧了。这两帧的画面如果差异很大(比如镜头快速转动),中间就会有一条明显的错位线。
我在做赛车游戏时遇到过最典型的案例:玩家在高速过弯时,路面纹理在撕裂线处直接断开,左边是柏油路,右边变成了草地。嗯,这种体验非常出戏。
4.4 为什么 V-Sync 会导致卡顿?
这里有个关键点:V-Sync 会让 GPU 进入“等待”状态。
- GPU 渲染完一帧后,如果显示器还没完成当前帧的扫描,GPU 就必须停下来等。
- 等显示器进入 V-Blank(垂直消隐期),GPU 才能把帧缓冲区交换过去。
- 如果 GPU 渲染速度刚好卡在 55 FPS,它每帧都要等,但等的时间又不够凑成 60 FPS,结果就是帧率直接掉到 30 FPS。
这种“帧率腰斩”现象,在游戏里表现为:画面突然从流畅变成幻灯片,然后又恢复,反复横跳。说白了,V-Sync 把微小的帧率波动放大成了明显的卡顿。
4.5 双缓冲与三缓冲
为了解决 V-Sync 带来的卡顿,图形 API 引入了缓冲机制。
- 双缓冲(Double Buffering):一个前台缓冲区给显示器读,一个后台缓冲区给 GPU 写。交换时如果显示器没读完,GPU 就得等。这就是传统 V-Sync 的卡顿来源。
- 三缓冲(Triple Buffering):增加一个中间缓冲区。GPU 可以提前渲染下一帧到第三个缓冲区,即使显示器正在读前台缓冲区,GPU 也不会被阻塞。帧率波动时,三缓冲能保持更平滑的输出。
我的建议:如果你的游戏支持三缓冲,并且你的显存够用(多一个缓冲区大约多占 4~8 MB),优先开启三缓冲。它能大幅缓解 V-Sync 带来的卡顿感。我在优化《原神》PC 版时,就是靠三缓冲把 50~60 FPS 的波动稳成了 60 FPS 满帧。
4.6 垂直同步的核心流程
下面这张图,是我自己梳理的 V-Sync 工作流程。你看完应该能明白,为什么它既能消除撕裂,又会带来延迟。
4.7 什么时候该开,什么时候该关?
我个人的经验是:
- 开 V-Sync:玩 3A 大作剧情模式、看 CG 过场、桌面日常使用。画面稳定比延迟更重要。
- 关 V-Sync:打 CS:GO、Valorant、守望先锋这类竞技游戏。延迟低一秒,胜率高一分。画面撕裂?习惯了就好。
- 折中方案:如果你的显示器支持 G-Sync 或 FreeSync,那才是最佳选择。它们能动态调整显示器刷新率匹配 GPU 输出,既无撕裂也无卡顿。
一句话总结:垂直同步是用延迟换画面完整性的技术。它解决了撕裂,但引入了卡顿和输入延迟。理解它的原理,你才能在游戏设置里做出正确的选择。