学习目标
- V-Sync(垂直同步)
- VRR(可变刷新率)
- G-Sync(Nvidia)
- FreeSync(AMD)
- 无同步:关闭同步技术,显卡和显示器各自发挥;
- 应用场景对比分析
学习实践
- 控制开启
- V-Sync:OpenGL可以通过
glfwSwapInterval(1)
控制开启 V-Sync(1 表示开启,0 表示关闭) - VRR:
- V-Sync:OpenGL可以通过
- OpenGL如何控制显卡帧率(无上限、有上限)
基础概念
- 显卡帧率:显卡每秒生成的画面帧数,一般以FPS(Frame Per Second)为单位,例如60FPS相当于1s内能绘制60帧的画面,帧率越高,显卡每秒生成的画面数量就越多,整体画面看起来就越流畅;
- 刷新率:显示器每秒更新屏幕内容的次数,一般以Hz(赫兹)为单位,例如60Hz相当于显示器每秒刷新屏幕60次
V-Sync(Vertical Sync, 垂直同步)
- 背景:显卡帧率和显示器刷新率不一致,显卡在后缓冲区绘制完成后进行前后缓冲切换,而显示器刚此时还在读取前缓冲区数据进行屏幕绘制,最终导致画面撕裂问题
- 思路:显卡等显示器刷新
- 方案:显示器在每帧刷新完成后再通知显卡进行前后缓冲切换,确保屏幕每次刷新时都只会读取同一帧的数据
- 适用场景:显卡帧率 > 显示器刷新率
- 问题:延迟和卡顿
- 输入延迟:简单来所就是未开启V-Sync,对于高帧率的显卡在低刷新率的显示器上,即使画面撕裂,但显示器部分画面数据还是能以显卡最近一次绘制结果为准,但开启V-Sync后只能受限于显示器刷新率;
- 帧率下降:如果显卡的帧率 低于 屏幕刷新率,那V-Sync会导致帧率下降的问题,例如显卡帧率只能达到50FPS,在刷新率为60Hz的显示器中,最终被V-Sync将帧率锁定到30FPS(显示器一帧刷新完成后显卡还未完成渲染,因此显示器又开始下一帧的刷新,即使显卡完成渲染后也只能等显示器第二帧刷新完成)
VRR(Variable Refresh Rate, 可变刷新率)
- 背景:解决V-Sync中帧率低于刷新率时的延迟和卡顿问题
- 思路:显示器等显卡刷新
- 方案:显示器每次刷新完成后进入等待状态,等显卡绘制完成前后缓冲区交换后,显示器再开始执行刷新
- 适用场景:显卡帧率 < 显示器刷新率,一般高刷新率的显示器能让VRR的生效区间更广;
应用场景对比分析
组合方式 | 适用场景 | 优缺点 |
---|---|---|
仅开启 V-Sync | 显示器不支持 VRR,且显卡帧率稳定 | 避免屏幕撕裂 可能引入输入延迟 |
仅开启 VRR | 显示器和显卡支持 VRR | 动态避免屏幕撕裂 无输入延迟 最佳体验 |
同时开启 V-Sync + VRR | 不建议 | VRR 功能受限 可能增加输入延迟 |
关闭 V-Sync,关闭 VRR | 追求高帧率,容忍屏幕撕裂 | 无限制帧率 可能出现屏幕撕裂 |
参考资料
- 【硬核科普】超过240Hz的刷新率有用吗?你需要多高的刷新率:https://www.bilibili.com/video/BV19MfeYrEDn?vd_source=8bea9daddff2f8145a07b82f98babecc
- DeepSeek相关解答
- Nvidia如何开启G-Sync:https://www.nvidia.com/content/Control-Panel-Help/vLatest/zh-cn/mergedProjects/nvdspCHS/To_use_variable_refresh_rates.htm