V-Sync/撕裂

什么是 V-Sync 以及什么是撕裂?

V-Sync(垂直同步)是 Windows 系统的一个功能或 RV 在计算机上使用的图形驱动程序。当 RV 对帧完成渲染后,它将等到显示设备显示当前帧后再进行显示。这可确保您不会在设备显示帧的过程中看到帧更新。如果看到帧更新,这种情况称为“撕裂”,症状是在水平线上方看到的帧与在水平线下方看到的帧不同。有时,水平撕裂线会随着时间的推移上下移动,但有时它会保留在帧的同一区域。

RV 中的 V-Sync 选项

在 RV 的渲染首选项中,有一个“Video Sync”选项。根据不同的平台,可以使用此选项来启用/禁用 V-Sync。在 OS X 和 Windows 中,默认行为是启用 V-Sync。在这些平台上,可以使用 RV 首选项来禁用系统 V-Sync。

在 Linux 中,事情要复杂得多。对于安装了 NVIDIA 驱动程序的 Linux,有两种完全不同的 OpenGL V-Sync 方法:一个在驱动程序层面,另一个则由 RV 控制。此外,NVIDIA 驱动程序可以识别众多能够控制 V-Sync 操作方式的环境变量,尤其是在多个显示器连接到 GPU 之时。

不同版本的 RV

RV 3.12.12 版本中更改了内部渲染,使其更“现代化”。在 OS X 和 Windows 中,除了 RV 播放一些媒体时“速度更快”(尤其是在演示模式下)之外,没有其他明显更改。但是,在 Linux 中,根据不同的驱动程序版本,V-Sync 的行为在 3.12.12 及更高版本的 RV 中可能会有所不同。

影响所有平台的计时问题

最难理解的问题关系到显示器/放映机的物理特性以及在该设备上播放的媒体的帧速率。

在刷新速率为 60 Hz(60 帧/秒)的显示器上播放 24 Hz(24 帧/秒)的媒体时,仅可模拟在 24 Hz 影片放映机上播放的帧的计时。无法真正获得相同的计时。原因很简单:60 无法被 24 整除。 

RV 尝试以尽可能接近设备速率(在这种情况下为 60 Hz)的速度进行播放,并以一种赏心悦目的方式将 24 帧分散到 60 实际帧上,设法解决此问题。如果查看帧的计时,您会看到一些帧连续播放 3 次,而其他帧仅播放 2 次。 

解决该问题的唯一方法是匹配输出设备速率和媒体速率,使得设备速率是媒体速率的整数倍。

在装有 NVIDIA 驱动程序的 Linux 上使用 V-Sync

Linux 上的 NVIDIA 驱动程序有很多 V-Sync 选项:

  1. NVIDIA 设置控制面板中的驱动程序 OpenGL V-Sync(忽略名称类似的 XVideo V-Sync)
  2. RV 渲染首选项中的 V-Sync
  3. __GL_SYNC_TO_VBLANK 环境变量
  4. __GL_SYNC_DISPLAY_DEVICE 环境变量

令人遗憾的是,所有这些选项可以彼此交互。我们建议您使用以下设置:

  1. 驱动程序的 OpenGL V-Sync 设置为 ON
  2. RV 的 V-Sync 设置为 OFF
  3. 不要设置 __GL_SYNC_TO_VBLANK
  4. 如果您有 2 个或 2 个以上显示器连接到 GPU,请对 _GL_SYNC_DISPLAY_DEVICE 进行设置以指示要同步的显示器。RV 启动后,驱动程序不能更改同步设备,因此应明确选择自己需要的显示器。否则,驱动程序将自行选择(通常为“主”显示器)。将环境变量设置为该驱动程序使用的显示器的名称,如 DFP-1、CRT-1 等。

查看从中启动 RV 的 Shell 的任何输出,了解 V-Sync 相关诊断消息。RV 尝试检测将导致撕裂的配置。如果检测到错误配置,RV 将在 Shell(或控制台窗口)中通知您。在演示模式下,RV 将弹出一个对话框,警告即将发生撕裂(如果可以检测到)。

在任何情况下,都不应同时设置驱动程序的 V-Sync 和 RV 的 V-Sync。

常见 Linux 问题

在 Linux 上,可以针对各种任务调整内核。在执行大量繁重计算时,通常希望为每个进程分配更长的时间切片。但这会对 RV 产生不利影响。RV 适合用于许多较短的时间切片。如果内核设置为处理长时间切片,则可能导致播放稳定性不佳。一种解决办法是使用 RV 的实时调度,如流式播放中所述。

关注

0 评论

登录写评论。