从今天开始,我们打开“小教程”——小科普的兄弟专栏,介绍一下我们在配电脑或者玩游戏过程中经常遇到的专业术语。
在《小科普》第一期,我们就来谈谈游戏中经常遇到的一个屏幕选项——垂直同步
我们在第一次演讲中就和你谈到了垂直同步的作用。可惜演讲有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