从今天开始,我们打开“小教程”——小科普的兄弟专栏,介绍一下我们在配电脑或者玩游戏过程中经常遇到的专业术语。

在《小科普》第一期,我们就来谈谈游戏中经常遇到的一个屏幕选项——垂直同步

我们在第一次演讲中就和你谈到了垂直同步的作用。可惜演讲有60秒的长度限制,无法向你解释清楚。所以今天,我们将详细分析“垂直同步”:

到底是用来干嘛的?

有什么缺点吗?

与伴侣的「三重缓冲」是什么?

还有最重要的一点:我应该在游戏里打开吗?

另外,这篇文章不好读。如果是长脑子看的话,建议直接看最后结论。

▌垂直同步是为了什么?

要解决这个问题,首先要说的是“垂直同步”解决的问题——画面撕裂。我们在玩游戏的时候,有没有遇到过下面的画面:

分一帧画面,这叫“撕图”。

不过,你可能会说,我用的是高端显卡。为什么这个问题还在发生?

你也别说越高端显卡帧数越高越容易出现这个问题。

下面我们就来说说图片被撕的原因。为了便于您理解,让我们简单谈谈显卡如何与显示器配合使用:

可以看出,视频内存中的“帧缓冲区”是图像传输的关键区域,显卡生成的一帧会先写入帧缓冲区。另一方面,一台60Hz的显示器每秒可以显示60张图片,也就是说每隔1/60秒,它就会向显示卡发送一个“垂直同步信号”,向帧缓冲器请求一次图片数据,然后显示。

但是,有帧缓冲区会导致问题。这个缓冲区会不断的写入新的图片并发送到显示器上,这样整个写入的过程都会显示在屏幕上,从而导致图片闪烁等问题。因此,大多数现代图形工作流使用双缓冲:

双缓冲区中有两个缓冲区。显卡只会将绘制的图像写入后缓冲区,而只会将前缓冲区的图像发送到显示器。

写后缓冲区的“新鲜”图像时,请注意程序不会将后缓冲区的图片转移到前缓冲区,而是交换)——前缓冲区和后缓冲区的名称,即前缓冲区变成后缓冲区,后缓冲区变成前缓冲区。之后,刚刚在后缓冲区中绘制的图像就可以平滑地传输到监视器上。经过这一折腾,程序可以在不影响显卡的情况下,将图像写入后缓冲区,将前缓冲区的图像传输到显示器,然后进行下一次“缓冲区交换”。

但是双缓冲有一个问题,因为两个缓冲随时可能交换,所以出现这种情况:前缓冲的图片刚传到显示器,两个缓冲交换,后面传原来后缓冲的图片。然后,显示器上的一个画面变成前后两帧的组合,这就是画面撕裂。这个问题在高帧率的情况下尤为明显,因为帧率越高,前后缓存的交换越频繁,发生这种事件的概率就越高。

-哇,画面就是这样流泪的!有什么办法解决吗?

——当然还有“垂直同步”选项。

开启垂直同步相当于在帧缓冲区设置红绿灯。显示器未刷新完一帧时,红灯亮,两个缓冲区不允许互换;当显示器刷新一帧时,绿灯亮,可以交换缓冲区。这样就消除了“数据传输过程中交换缓冲区”的可能,画面撕裂的问题也就自然解决了。

但是这个功能为什么叫“垂直同步”?这是因为在CRT大屁股显示器时代,显示器的刷新是逐行或隔行的,电子枪是逐行进行的。每一行结束后,就说这一行完成了“水平同步”,到了最后一行的最后一个像素就完成了一帧的显示。然后显示器会向显卡发送一个“垂直同步信号”,表示垂直像素也完成了同步,也就是这个帧刷新完成了。

-哇,垂直同步这么好,我现在去游戏打开怎么样?

-不用担心,虽然“垂直同步”可以完全防止画面撕裂,但是它的副作用也很明显——操作延迟。

当帧率远高于显示器的刷新率时,为了保持显示器的刷新时间与显卡将图片写入缓冲区的时间同步,需要人为增加延迟,以延迟“生成图片过快”向显示器的输出。所以在竞技类游戏中,开启垂直同步后的手感会大大降低。

这里有一个例子来说明:

这是传统双缓冲下,不开启垂直同步时的图像。由于300fps的高帧率,每两个“垂直同步信号”之间会产生多达5个画面,导致画面撕裂严重。

这是开始垂直同步后的图像。可以看出,图片撕裂的问题确实得到了解决,但是为了保持帧缓存器交换时间与显示刷新时间同步,帧缓存器中的图片会在一个刷新周期后显示。使用60Hz显示器时,一个刷新周期的时间高达16.67ms,这意味着每秒5帧的图像延迟只有3.3 ms,现在因为等待一个刷新周期,延迟突然增加到13.3 ms,对于能区分5ms和1ms显示器的电竞选手来说,多出来的10 ms延迟是非常可怕的。

-哦,不打开垂直同步,画面会撕裂,打开会有延迟,这样就不能兼顾画质和性能了吗?

-是的,画质和操作都有两种方式。

第一种方法是买个G-SYNC或者FreeSync的电竞显示器

这些显示器可以动态调整刷新率,使其与显卡输出画面的帧率完全同步,不仅可以解决无操作延迟的画面撕裂,还可以提供垂直同步效果,消除帧率低于60fps时的画面撕裂。不过这毕竟是一种花钱的方式,而且据我所知几乎没有一款电竞屏幕的屏幕质量是优秀的。为了达到低延迟,很多电竞屏幕都采用了TN面板,这对于电竞玩家来说是可以理解的,但是对于我这样的图片党来说似乎有点无法接受。

第二种方式,相信大家都猜到了:三重缓冲!

既然垂直同步的延迟是因为显卡输出一个图像后在等红绿灯,无法响应鼠标键盘的最新操作,那为什么不让显卡一直工作呢?这样就可以随时响应最新的输入操作了?三重缓冲就是基于这种思想设计的,在双缓冲的基础上增加一个帧缓冲,形成一个前缓冲和两个后缓冲。该程序将图像来回写入两个后缓冲区,每次刷新显示器时,前缓冲区都会与最近完成写入的后缓冲区交换。可以看出,即使一个缓冲区由红绿灯控制,另外两个缓冲区仍然可以来回写入图像,因此不需要人为增加画面延迟。

这个图说明了三重缓冲的原理,它结合了前两者的优点。

但是,三重缓冲并不完美。首先,因为需要一个额外的帧缓存,所以会占用更多的视频内存空。比如我们在运行4K分辨率的《质量效应:仙女座菌株》时,三重缓冲占用了大约200MB的视频内存,这是我们可以接受的。其次,虽然它的延时远低于双缓冲下的垂直同步,但可能比没有垂直同步的略高,因为没有垂直同步的画面不仅会给你带来眼泪,还会包含最新的帧图像。如果启用三重缓冲,画面中“下一帧”的冗余元素会被消除,延迟自然会比前者略高。不过比起全屏的撕,我明显会选择三重缓冲...

看到这里,你迫不及待的打开三重缓冲。的确,垂直同步+三重缓冲是一项很棒的技术,可以在不造成画面延迟的情况下有效改善画面撕裂。但问题是DirectX本身并不支持三重缓冲!相反,使用了一种称为“预渲染队列”的方法。这种方法与三重缓冲的区别在于,它不会丢弃显卡渲染的未使用帧,而是会强制显示这些旧帧,从而造成更大的操作延迟,甚至大于光学垂直同步的延迟。如果DirectX游戏想要使用三重缓冲,游戏厂商需要提供相应的支持。

遗憾的是,虽然很多使用DX API的游戏在屏幕选项中提供了“三重缓冲”选项,但实际上使用的是“3缓存的预渲染队列空”。这些游戏是否使用真正的三重缓冲,只有亲身体验过才能明白。所以三重缓冲能否开启,取决于游戏厂商的心情。

▌总结:

应该开启垂直同步和三重缓冲吗?如果游戏支持且条件允许,尽量驱动。但是如果你的显卡达不到这么高的速度,或者你发现某款游戏在三重缓冲下操作延迟还是很高的,那就关掉。

这篇文章的阅读难度不低

如果你有任何疑问,

你可以给我们留言

我们以后会考虑的

把这篇文章做成视频

为了更生动地向你展示

“垂直同步”和“三重缓冲”的工作原理

如果你还有其他名词想让我们解释

你也可以告诉我们!

最后,请参考随附的参考资料

原文来自国外媒体Anandtech:

三重缓冲:我们为什么喜欢它

http://www.anandtech.com/show/2794/

国内超级电网翻译:

http://bbs.expreview.com/thread-21762-1-1.html

我喜欢我们的推介会,忘了订上衣,

向亲朋好友推荐我们的文章,

或者欣赏它,

下次见!

1.《三重缓冲要不要开 小科普 | 游戏中的“垂直同步”与“三重缓冲”究竟是个啥?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《三重缓冲要不要开 小科普 | 游戏中的“垂直同步”与“三重缓冲”究竟是个啥?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1679025.html