在 Intel 核芯显卡上使用 VRR 可变刷新率串流

在我的 Surface Pro 8 某次驱动更新后,我发现它终于支持了 VRR(可变刷新率,Variable Refresh Rate)。

也就是说,显示器的刷新率不再是固定的 60/120 Hz,而是会根据内容的显示速度,动态调整刷新率。这能带来更低的延迟,以及在游戏帧率波动时,提供更平滑的画面效果。

虽然 Surface Pro 并不适合直接运行大型游戏,但它很适合拿来串流运行在高性能 PC 上的游戏。在支持 VRR 后,还能略微降低推流的延迟,并改善画面流畅度。

当我在 Surface Pro(Intel Iris Xe)开启 Moonlight,在 PC(Radeon RX 9070 XT)上开启 Sunshine,将 PC 的内容串流到 Surface Pro 时,却出现了一些问题:

  • 当 PC 上游戏处于复杂场景,帧率位于 48~115 fps 时,我在 Surface 上能看到流畅完整的画面。我十分满意。
  • 可当 PC 上运行的游戏在一些简单场景,帧率超过 115 fps 时,Surface 上不仅会掉帧,还会有画面撕裂
画面撕裂大概长这样(模拟图)

VRR 自身并不是一颗银弹:当游戏内容的帧率(fps)约等于或高于显示器的刷新率(Hz)时,显示画面会产生撕裂(tearing)。这是由于 VRR 在帧率 ≥ 刷新率时会失效。而我的 Surface Pro 的屏幕是 120Hz,PC 屏幕的刷新率是 120/144Hz。

VRR 真复杂,如何正确设置呢?

如何正确设置 VRR

第一步:在 Surface Pro 开启 VRR

首先,在运行 Moonlight 的机器,也就是我的 Surface Pro 上,开启 VRR。

我的 Surface Pro 使用的是 Intel Iris Xe 核芯显卡,打开 Intel 的显卡控制面板,并开启 VRR:

第二步:在 Surface Pro 上开启 VSync(垂直同步)

这是为了在 PC 输出画面的帧率(fps)约等于 Surface Pro 屏幕的刷新率的情形下,避免显示画面出现撕裂。

接着, 在 Intel 的显卡控制面板开启 VSync:

咦?这里并没有 VSync 选项。看来 Intel 的天才工程师忘记了在新版控制面板给老核显加入 VSync 设置。

好在旧版显卡控制面板依然有这个设置,我们进入微软商店下载旧版 Intel 显卡控制面板:Intel® Graphics Command Center

然后开启 Smart VSync:

第三步:在 Surface Pro 上设置 Moonlight

打开 Moonlight,进入设置。我们将帧率设置为与 PC 的刷新率相同,然后关闭 V-Sync。

这是因为 Moonlight 的 V-Sync(垂直同步)会让 VRR 在 Windows 下失效。我们的核芯显卡刚才已经开启了 Smart VSync,没有必要再在 Moonlight 开启。

这里可以顺便调整一下编码器,使用 HEVC / AV1 硬件编码/解码器,提升视频编解码效率,同时降低 CPU 负担。

这样,Surface Pro 上的设置就完成了。接下来我们进入运行 Sunshine 的 PC 设置。

第四步:确保 PC 的刷新率 ≤ Surface Pro 的刷新率

我的 Surface Pro 的刷新率已经设置到了最高 120Hz,因此我们需要将 PC 的刷新率设置到 ≤ 120Hz。我在 PC 上设置为了与 Surface Pro 相同的 120Hz。

这是为了避免 PC 输出画面的帧率(fps)大于 Surface Pro 屏幕的刷新率,造成画面出现跳帧/掉帧现象。

下面的 Dynamic refresh rate 是省电功能,并不是 VRR,这里保持关闭即可。

第五步:限制游戏最大帧率,关闭游戏自带的 VSync(垂直同步)

关闭游戏自带的 VSync 是为了让游戏输出动态帧率的内容。限制游戏最大帧率是为了让最高帧率不大于屏幕刷新率,避免出现跳帧/掉帧。

首先,我们进入游戏的设置,关掉游戏自带的 VSync 垂直同步功能(如果有),这里以『莱莎的炼金工房』为例:

如果游戏自带了帧率限制功能,可以将其设置为与 PC 显示器刷新率一致,也可直接关闭游戏的帧率限制功能。

我比较习惯关闭游戏的帧率限制(如果可能的话),并使用 PC 的独立显卡提供的帧率限制功能。例如对于 AMD 显卡,可以使用 Frame rate target control / Radeon Chill 来限制帧率:

不同的锁帧方法可能在延迟或帧时间的稳定度上有一定区别,可以自行对比尝试。

在启用 VRR 时,一般认为的最佳实践是将帧率限制到比刷新率稍低一些。例如对于 120Hz 的刷新率,我们可以限制为 115 fps 来避免撕裂并降低延迟。

但在 Surface 上,我们已经通过启用 Smart VSync 避免撕裂,同时考虑到许多游戏是在 60fps 的倍率下设计的,我们也可以将最大帧率设置为与显示器相同,即 120fps。但这可能会因为 VSync 带来一些额外的延迟。


完成以上设置后,在 Surface Pro 上全屏运行 Moonlight,并在 PC 上全屏运行游戏。现在,即使游戏帧数波动,画面也应依然流畅;而在帧数接近显示器刷新率时,画面也不会出现撕裂。

在 Moonlight 可以按下 Ctrl + Alt + Shift + S 显示统计信息,查看帧数的变化。也可以用手机的慢动作摄影拍摄电脑屏幕,在慢动作下观察帧显示时间是否稳定,是否有跳帧、掉帧、撕裂的现象。

此外,如果你运行 Moonlight 的笔记本电脑是 Intel Wi-Fi 网卡,并且有每 10 分钟掉帧/破音的情况,可以参考:解决 Intel Wi-Fi 网卡串流游戏卡顿

Coxxs

本文(https://dev.moe/3452)由 Coxxs 原创,转载请注明原文链接。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注