是否使用垂直同步(VSync)?

5

我正在决定是否在使用OpenGL开发的新游戏中使用VSync。目标是为用户提供最佳游戏体验,并在性能和质量之间取得良好平衡。该游戏旨在运行于旧计算机(Intel/Netbook)和新计算机(NVidia/i7 desktop)。我知道VSync的目的是防止撕裂,但是即使关闭了VSync,我也从未能够复制这个撕裂问题。为了提供最佳体验,应该打开还是关闭VSync?


1
你确定在应用程序中关闭VSync时,显卡驱动程序不会继续保持它吗?通常有驱动程序设置可以取代应用程序设置。根据我的经验,屏幕撕裂是一个相当容易重现的问题。 - rotoglup
3个回答

9
关于这个问题可以说很多事情。让我来数一下:
1. 如果你看不到撕裂,那么你可能已经启用了垂直同步,即使你认为没有启用。原因可能各不相同,但最终,在帧中间交换缓冲区非常明显,如果发生任何移动(可能之一的原因是您未配置翻转缓冲区,因此某些内容必须复制您的帧缓冲区)。
2. 启用垂直同步也会有明显的伪影。通常,它会创建显示时间不固定的帧,更多地与显示刷新率相关,而不是与渲染速率相关。这可能会导致微小的抖动,而且很难控制,因为您不知道在生成帧时它将在哪个滴答显示,因此,您无法补偿运动伪影。这就是为什么有些人尝试将其渲染速度锁定到刷新率的原因。始终以60fps(或30fps)进行渲染,更新时间为time += 16.7ms。John Carmack一直在寻求一种模式,即“在60Hz下启用垂直同步,但如果我错过了截止日期,则不进行同步”,我认为这就是这个原因。
3. 启用垂直同步可以节省电力(对于上网本很重要)。
4. 关闭垂直同步会减少输入延迟(当您的输入在显示之前3帧时,它可能开始起作用)。您可以尝试一些补偿措施,但最终,在最后一刻注入输入更新是很困难的。
因此,最终答案是没有完美的答案。这取决于游戏中更重要的事情。您需要查看的内容:您想要实现哪个帧速率,输入延迟有多重要,游戏中有多少运动,功率是否会成为问题。

非常好的观点。对于我这样的游戏玩家来说,开启VSync是必须的,因为撕裂完全破坏了我的游戏体验,但微卡顿更糟糕。 - Michael Stum

4
为了提供最佳用户体验,请在菜单中提供一个选项,用于开启/关闭VSync。这样用户可以自行决定。您可能无法重现撕裂的问题,但它确实是某些系统上的真实问题。
至于默认设置应该是什么,我不确定,我认为这是您的选择。我更喜欢默认关闭垂直同步,因为启用时会稍微降低性能,大多数人不会注意到撕裂或不关心它,但也有充分的理由默认启用它。

@schnaader:您如何向非技术人员解释这种选项的作用以及他们何时可能需要它? - Matti Virkkunen
@Matti - 大多数游戏玩家都会意识到撕裂现象,有些人会为了获得额外的2%(或其他)帧率而接受它。 - ChrisF
@ChrisF:会在网簿上玩游戏的是什么样的玩家? - Matti Virkkunen
@DXM:禁用垂直同步确实可以减少用户操作和实际游戏反馈之间的延迟。这对于玩射击游戏的“硬核”玩家非常有价值,因为它可以让他们更快地对敌人/其他玩家的行动做出反应。 - rotoglup
@n0rd 物理计算并不在我的渲染线程上进行,它们都在一个独立的、专门的物理线程上进行。 - bbosak
显示剩余4条评论

2

我认为VSync的默认设置应该是开启的(基于我的所有游戏经验,而非编程经验 :))。仅仅因为你看不见它,也不能放弃好的实践。

  • 也许你不能像其他玩家那样紧盯着屏幕
  • 也许当你看到一点小的撕裂时,你没有像其他玩家那样感到烦恼
  • 也许你特定的屏幕比其他屏幕更好的隐藏了撕裂现象

正如schanaader所提到的,通常游戏会将vsync作为视频设置菜单中的一个配置选项。对于不知道什么是vsync的用户,其默认值仍然应该是“开启”的,并且如果用户足够了解,他们可以通过调整它来查看差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接