我正在决定是否将 VSync 用于我一直在使用 OpenGL 开发的新游戏。目标是为用户提供最佳的游戏体验,并在性能和质量之间取得良好的平衡。该游戏设计用于在较旧的(英特尔/上网本)计算机和较新的(NVidia/i7 台式机)计算机上运行。但是,我知道 VSync 的目的是防止撕裂;即使关闭了垂直同步,我也无法重现这个撕裂问题。提供最佳体验;应该打开还是关闭 VSync?
问问题
3467 次
3 回答
9
关于这个问题有很多可以说的。让我数一数:
- 如果你没有看到撕裂,你很可能是垂直同步的,即使你认为你没有。原因可能会有所不同,但最终,如果发生任何移动,在帧中间交换缓冲区是非常明显的(一个原因可能是您没有配置为翻转缓冲区,因此必须复制帧缓冲区)
- vsync on 也有明显的伪影。通常,它会创建显示时间可变的帧,与显示刷新率的关系比渲染率更重要。这会产生微小的卡顿,并且很难控制,因为您不知道何时生成帧将显示在哪个刻度上,因此您无法补偿运动伪影。这就是为什么有些人试图将他们的渲染速度锁定在刷新率上。始终以 60fps(或 30fps)的速度渲染,时间更新是
time += 16.7ms
John Carmack 一直在要求一种模式,即“以 60Hz 垂直同步,但如果我错过了最后期限就不要同步”,我认为这就是这个原因。 - vsync on 省电(对上网本很重要)
- vsync off 减少了输入延迟(当您的输入在显示前 3 帧时,它可能开始变得重要)。您可以尝试补偿其中的一部分,但最终,很难在最后一刻注入输入更新。
所以最重要的答案是没有完美的答案。这真的取决于什么对你的游戏更重要。你需要看的东西:你想要达到的帧率,多少输入延迟很重要,游戏中有多少移动,功率是否会成为一个问题。
于 2011-05-07T21:11:49.220 回答
4
为了获得最佳用户体验,请在菜单中放置一个选项来打开/关闭 VSync。这样用户就可以决定了。您可能无法重现撕裂,但在某些系统上这绝对是一个真正的问题。
至于什么应该是默认设置,我不确定,我认为这是您的选择。我更喜欢默认关闭垂直同步,因为它在启用时会降低性能,并且大多数人不认识撕裂或不在乎它,但默认情况下也有充分的理由启用它。
于 2011-05-07T19:55:14.530 回答
2
我相信 VSync 的默认设置应该打开(基于我所有的游戏,而不是编程经验 :))。仅仅因为你没有看到它,并不意味着你不应该遵循一个好的做法。
- 也许你不能像其他游戏玩家那样密切注视屏幕
- 也许当你看到一点点眼泪时,你并不像某些游戏玩家那样生气
- 也许您的特定屏幕比其他屏幕更能隐藏撕裂
正如 schanaader 所提到的,通常游戏会将 vsync 作为配置选项保留在视频设置菜单的某个位置。对于那些不知道 vsync 是什么意思的人来说,默认值仍然应该是“开启”的,如果用户足够了解,他们可以选择调整它来看看有什么区别
于 2011-05-07T20:04:06.443 回答