三重缓冲有必要开吗是开好还是不开好?

2017-03-27 23:59
来源:
极客湾
从今天开始,我们会开启“小教程”的兄弟栏目——小科普,给大家介绍在配电脑或玩游戏过程中经常会遇到的专业名词。
第一期“小科普”我们来讲讲游戏中经常会遇到的一个画面选项——垂直同步
我们曾在一期语音里和大家讲探讨过垂直同步的功用,可惜语音有 60 秒的长度限制,并不能和大家解释清楚,那么今天就来详细分析一下“垂直同步”:
它到底是干嘛用的?
它有什么缺点吗?
和它搭档的“三重缓冲”又是个啥?
以及最重要的一点:我在游戏中到底该不该开启它?
(本文中的部分内容参考自外媒 Anandtech 的技术文章,我们将在文末提供其链接)
另外,本文阅读起来有难度,如果你是抱着太长不看的心态阅读,建议直接看最后的结论 。
▌垂直同步是干嘛的?
要想解答这个问题,首先得来说说“垂直同步”所解决的问题——画面撕裂。当我们在玩游戏的时候,有没有遇到下图这种情况呢:
一帧画面被分割开了,这种情况便是“画面撕裂”。
不过你可能会说,我用的可是高端显卡呀,为什么还会出现这种问题呢?
你还别说,越是高端的显卡,跑到的帧数越高,还就越容易出现这种问题。
这里就要说说说画面撕裂产生的原因了。为了方便各位理解,我们先来简单说说显卡与显示器之间是如何工作的:
可以看到,显存中的“帧缓冲区”(Framebuffer)是图像传输的一个关键区域,显卡所生成的一帧画面会先被写入帧缓冲区。而一台 60Hz 的显示器每秒能够显示 60 幅画面,也就是说每 1/60 秒(当显示器刷新完一幅画面时)会给显卡发送一次“垂直同步信号“,向帧缓冲区索取一次画面数据,然后显示出来。
不过光有一个帧缓冲区会产生一个问题,这一个缓冲区会不断地写入新的画面并发送给显示器,这样一来“写入的全过程”就会被展现在屏幕上了,这就会导致画面闪烁等问题。因此,现代的图形工作流程中使用的多是双重缓冲:
双重缓冲有一前一后两个缓冲区,显卡只会将绘制完的图像写入后缓冲区,与此同时只有前缓冲区中的图像会被发送给显示器。
当后缓冲区中的“新鲜”图像写入完成后,注意啦,程序不会将后缓冲区的画面传输到前缓冲区,而是会进行缓冲区的交换(Swap)——将前缓冲区和后缓冲区的名字对调,即前缓冲区成了后缓冲区,后缓冲区成了前缓冲区。这样以后,刚刚绘制在后缓冲区的图像就能顺利地传给显示器了。经过这么一折腾,程序就可以在往后缓冲区写入图像的同时,不影响显卡将前缓冲区中的画面传给显示器,然后进行下一次“缓冲区交换”。
但是双重缓冲有个问题,两个缓冲区随时都可能发生交换,所以就会出现这种情况:前缓冲区中的画面才刚传输了一半给显示器,两个缓冲区就发生交换了,后面传输的都是原来后缓冲区中的画面(即下一帧画面)。于是,显示器上的一幅画面成了前后两帧的结合,这就是画面撕裂。这种问题在高帧率情况下尤为显著,因为帧率越高,前后缓冲区的交换就越为频繁,发生这种事件(画面没输出完就交换了)的概率自然也就更高。
-哇,原来画面撕裂是这么来的啊!那有没有什么办法能解决它呢?
-当然有了,那就是“垂直同步”选项。
(PS:“垂直同步”是一种简写,完整的称呼应是“等待垂直同步信号”)
开启垂直同步,就相当于在帧缓冲区里架设了红绿灯。当显示器尚未完成一帧画面的刷新时,红灯亮起,两个缓冲区不允许交换;当显示器刷新完一帧画面时,绿灯亮起,此时缓冲区可以进行交换了。这样以后就杜绝了“在进行数据传输的过程中交换缓冲区“的可能,自然也就解决了画面撕裂的问题。
不过为啥这个功能要叫“垂直同步”呢?这是因为在 CRT 大屁股显示器的年代,显示器的刷新是逐行或隔行刷新的,电子枪一行一行地打下去,打完每一行就称这一行完成了“水平同步”,打到最后一行的最后一个像素点就完成了一帧画面的显示,然后显示器会给显卡发送“垂直同步信号”,表明垂直向的像素点也完成了同步,即这一帧刷新完成了。
- 哇,垂直同步这么好,那我现在就去游戏里打开它,如何?
- 别急,“垂直同步”虽然能彻底杜绝画面撕裂,但是它的副作用同样很明显——操作延迟。
在帧率比显示器刷新率高很多的情况下,为了将显示器的刷新时间和显卡向缓冲区写入画面的时间保持同步,必然就需要人为地增加延迟,来延后“过快生成的画面“向显示器的输出。因此在竞技游戏中,开启垂直同步后的手感会大打折扣。
这里用一个实例来作说明:
这是未开启垂直同步时,传统双重缓冲下的图像,由于 300fps 的高帧率,每两个“垂直同步信号“之间会生成高达 5 幅画面,这就导致了严重的画面撕裂。
这是开启了垂直同步后的图像,可以看得出画面撕裂的问题确实得到了解决,但为了将帧缓存交换的时间和显示器刷新时间保持同步,帧缓存中的画面将会延后一个刷新周期被显示出来。在使用 60Hz 显示器时,一个刷新周期的时间高达 16.67ms,也就是说本来一秒五帧的图像延迟只有 3.3ms,现在因为要干等一个刷新周期,延迟一下子就增加到了 13.3ms,对于连 5ms 和 1ms 显示器都能分清的电竞选手而言,这多出来的10毫秒延迟是非常要命的。
- 哎呀,不开垂直同步会画面撕裂,开了又会有延迟,那画质和性能就不能兼得吗?
- 能啊,要想画质与操作兼得,有两个办法
第一个办法,买个 G-SYNC 或 FreeSync 的电竞显示器
这些显示器可以动态调整自己的刷新率,使其和显卡输出画面的帧率完全同步,这样不仅可以在解决画面撕裂的同时不出现操作延迟,还可以在帧率低于 60fps 的情况下同样提供垂直同步的效果,消除画面撕裂。不过,这毕竟是个要花大钱的办法,而且据我所知,几乎没有哪个电竞屏的屏幕素质是很优秀的,为了达到低延迟,许多电竞屏都采用了 TN 面板,对于电竞选手而言当然无可厚非,但对我这样的画面党来说,这样的屏幕看起来就有点难以接受了。
第二个办法,相信大家已经猜到了:三重缓冲!
既然垂直同步的延迟是因为显卡输出完一幅图像就歇着等待红绿灯了,无法响应鼠标键盘最新的操作,那么我们为啥不让显卡一直工作呢?这样不就能一直响应最新的输入操作了吗?三重缓冲就是基于这种思路设计的,它在双重缓冲的基础上再加入了一个帧缓冲区,组成了一个前缓冲区,两个后缓冲区的规格。程序来回向两个后缓冲区写入图像,每次显示器刷新时,前缓冲区就和最近完成写入的那个后缓冲区交换。可以看到,即便有一个缓冲区要受到红绿灯的管控,另外两个缓冲区还是可以来回写入图像,于是就不需要人为增加画面延迟了。
这张图便说明了三重缓冲的原理,这种方法结合了前两种的优点。
不过三重缓冲也并非完美无瑕。首先由于需要一个额外的帧缓冲区,因此它会占用更多的显存空间。比如我们在 4K 分辨率下运行《质量效应:仙女座》,三重缓冲额外占用了约 200MB 的显存,对我们而言尚可接受。其次,它的延迟虽然远远低于双重缓冲下的垂直同步,但相比不开垂直同步还是可能略微高一点,因为无垂直同步的画面在给你带来撕裂的同时,也会包含最新帧的图像,如果开启了三重缓冲,那么画面中这“后面一帧“的多余元素就会被剔除,延迟自然会略微高于前者一点点。不过和满屏的画面撕裂相比,我显然还是会选择三重缓冲的……
看到这里,你肯定迫不及待地想要开启三重缓冲了吧,的确,垂直同步+三重缓冲是种非常棒的技术,可以有效地改善画面撕裂,同时不造成画面延迟。但是问题来了,DirectX 并不原生支持三重缓冲!而是使用了一种叫“预渲染队列“的方式。这种方式与三重缓冲不同的地方在于,它不会丢弃显卡渲染完却未被使用的帧(即过时的帧),而会强制将这些旧帧显示出来,因此会造成更大的操作延迟,甚至比光开垂直同步的延迟还要大。DirectX 的游戏若想使用三重缓冲,需要游戏厂商提供相应的支持。
很可惜的是,不少采用 DX API 游戏虽然在画面选项里提供了”三重缓冲“选项,实际上却是使用了“包含 3 个缓存空间的预渲染队列”,这些游戏使用的到底是不是真正的三重缓冲,只有你亲身体验后才能弄明白。所以,能不能开启三重缓冲,还要看游戏厂商的心情啊!
▌总结:
垂直同步和三重缓冲到底该不该开呢?如果游戏支持,条件允许的话(对于 60Hz 显示器的用户,显卡能跑到 60 帧以上),还是尽量开起来试试。但如果你的显卡达不到这么高的速度,或者你经过试验发现某一款游戏在三重缓冲下的操作延迟依然很高,那还是把它关了吧。
本文的阅读难度不低
如果大家有任何疑惑
都可以给我们留言
我们在之后会考虑
将本文做成视频的形式
以便更形象地向大家说明
“垂直同步”和“三重缓冲”的工作原理
如果各位有任何其他的名词希望我们解释
也可以告诉我们哦!
最后附上参考资料,欢迎大家参阅
原文来自外媒Anandtech:
Triple Buffering: Why We Love It
http://www.anandtech.com/show/2794/
国内超能网的译文:
http://bbs.expreview.com/thread-21762-1-1.html
喜欢我们的推送别忘了点一个顶,
向亲朋好友推荐一下我们的文章,
或者赞赏一下,
我们下期再见啦!返回搜狐,查看更多
责任编辑:

2023-07-06 17:29
来源:
科技资讯全都有发布于:山西省
垂直同步,这个词对于游戏玩家来说并不陌生。当然,关于它的开和关,各种意见都有。那么,到底该开还是该关呢?
屏幕撕裂,怎么影响游戏体验?
为了更好地了解垂直同步对游戏体验的影响,首先有必要了解它的实际工作原理。VSync 一词是垂直同步的缩写,也是在游戏中大家见到的设置项目的英文。
这是一项为避免称为“屏幕撕裂”的烦人的视觉缺陷而开发的技术,而“屏幕撕裂”是游戏中最讨厌的事情之一。
当由于显示器的刷新率和显卡的帧速率之间的不同步而导致视频游戏图像被拉伸或撕成两半时,就会发生这种情况,即(每当 显卡每秒向显示器发送的帧数超过其处理能力时)。结果是两帧将投影在同一屏幕上更新,这是一种令人不快的撕裂,严重降低了体验。
那么出现这种现象的原因是什么呢?
在没有垂直同步时,只要是优化正确的游戏,现在的显卡都会火力全开的尽可能快地渲染帧(除非出现任何瓶颈)。在主流3A游戏中,一个高端显卡可以轻松地以 1080p 的速度每秒吐出数百帧渲染的画面。
每当显卡绘制帧时,它都会在所谓的“帧缓冲区”中渲染它(下图)。帧缓冲区,是显存中划分的一部分,用于存储要在显示器上显示的最终图像的信息。关闭垂直同步后,显卡会尽可能快地把帧渲染到帧缓冲区,而显示器会尽可能快地在屏幕上绘制帧缓冲区内的画面。
假设显示器的刷新率为 60 Hz,并且你正在以 100 FPS 的渲染速度玩游戏。这意味着显示器每秒可以更新自身(并渲染下一帧)60 次,但显卡每秒发送 100 帧。这比显示器可以显示的速度快 66%。
树干的上半截和下半截明显分开了,这就是画面撕裂
由于显示器无法一秒内显示所有 100 帧,因此它最终会同时显示每 x 帧的 33% 和随后 x+1 帧的 66%。结果,玩家会看到一个画面帧 x 的三分之一,而其余帧是帧 x+1的内容,对于高速运动的游戏画面来说,显然就会出现参照物在画面上的错位,从而造成了一种“撕裂感”。只要帧速率停留在 100 FPS,这种情况就会继续。
而从根本上,这是显卡传统的“双缓冲”机制造成的:双缓冲是一种通过利用两个缓冲区而不是一个缓冲区(即后台缓冲区back buffer和前端缓冲区front buffer)来减少屏幕撕裂的技术。两个缓冲区一个位于显示器上,后台缓冲区位于显卡上。
一旦显示器完成了一帧,那么后台缓冲区和前台缓冲区就会交换——它们被重新命名,但没有任何东西被复制。然后以前的后台缓冲区变成前台缓冲区,反之亦然。
然后显示器 "刷新 "并显示该帧。使用这种双缓冲,“交换”可以随时发生,即使前端缓冲区正在将数据发送到显示器面板。发生这种情况时,屏幕的一半由较早帧的像素组成,而其余部分由较新的帧组成,这就是导致撕裂的根本原因。
配置不好,为啥不能开垂直同步?
在VRR可变帧率同步(G-sync、FreeSync)出现前,对于撕裂现象,一般是通过将显卡的缓冲次数“增加”来实现缓解。此时防止撕裂的最常见方法是“等待”交换缓冲区,直到显示器显示完当前帧,并准备好接收下一帧。将缓冲区交换与帧像素的垂直刷新进行同步,就称为“垂直同步”。
当显卡实际渲染的帧速率高于刷新率时,这非常有效(下图)。
看到这里你会发现,这个“等待”可能会造成一个延迟。除了帧延迟,还会有什么问题?
如果你的游戏fps低于刷新率(假设为 60Hz),例如你显卡差,实际帧率只有 45fps 而不是 60fps。这比刷新率低 33%。那么,每次显示器刷新时,只会渲染下一帧的 66%。结果是将再次显示同一帧。
之后,显卡完成在帧缓冲区中绘制帧,但前端缓冲区已包含一个帧,并且在显示器刷新之前无法交换它。因此,它等待显示器刷新,然后交换帧。然后,最后显示第二帧,整个过程重复。这造成了每两个周期显示一帧,渲染实际上减慢了2 倍,将生成的 FPS 降至 30fps。
也就是说,在60Hz的垂直同步条件下,如果显卡跑不到60fps,则在打开垂直同步的情况下,玩家在显示器上,看到的30fps的帧率的画面!就是“配置不好不要开垂直同步”的原因。
画面不撕裂,但实际上你“卡”了
看到这里你会发现,垂直同步等待缓冲本身就会造成一个“延迟”,就是下图的红色块时间段。
放在实际游戏体验就是,画面没撕裂,但实际上你看到的画面和游戏实际画面有延迟。这在电竞游戏中是致命的。
哪怕是采用了下面的三重缓冲技术也是如此:它添加了第三个缓冲区,这个额外的缓冲区允许显卡继续渲染,因为屏幕缓冲区会重新显示同一帧两次,并且渲染流不会受到阻碍。而在双缓冲(打开垂直同步)中,后台缓冲区必须等待前端缓冲区刷新,并且在交换其中的帧之前无法开始渲染下一帧。
三重缓冲(一般要在显卡驱动中打开)垂直同步(游戏中打开)降低了延迟,或者说,它是把缓冲等待的延迟分开了,只要显卡渲染帧率够高,等待期分割得够细碎,那么这种延迟超出了人感官感知能力,画面滞后就几乎“无感”了。但是,延迟还是存在的。
另外,三重缓冲时获得的帧率通常具有误导性。大多数OSD 工具(如微星小飞机AfterBurner和FRAPS)测量的是 每秒更换一次前端缓冲区的次数,而不是 显卡每秒渲染的帧数,在三重缓冲时,误差就大了。
那么,开还是不开垂直同步?
如果你主要玩单机游戏,图像撕裂非常明显并干扰了游戏体验,那么绝对值得打开垂直同步,并在显卡驱动中打开三重缓冲,特别是在你硬件配置能保证帧率大于屏幕刷新率的时候。
另一方面,如果每个帧速率都很重要并且响应时间最重要,例如在CS GO之类电子竞技游戏中,则应禁用垂直同步。电竞玩家都在为每一个微瞬间而战,限制刷新率不会产生最好的效果。
如果您不喜欢垂直同步的缺点,显示器又支持的话,尽量考虑使用G-sync.或者Freesync 作为替代方案可能会更有帮助。这种可变同步帧率保证了尽可能小的帧率延迟和由此产生的输入延迟。
·END·
编辑:项汉秋
“摆脱低端“的升级!这个帧率同步技术不再“可有可无”!
都是“Sync”,差别可大咯:不同刷新率同步技术解密
入门显卡帧率/画质双修的“黑科技”,FSR 2.0游戏实测 返回搜狐,查看更多
责任编辑:

我的电脑是ATI蓝宝石4830至尊版,在显卡设置那里我看见OPenGL设置有三重缓冲!(看图)我是经常玩大型游戏的人~打网游和魔兽3C等!我想问这个三重缓冲应不应该开?开...
我的电脑是ATI蓝宝石4830至尊版,在显卡设置那里我看见OPenGL设置有三重缓冲!(看图)我是经常玩大型游戏的人~打网游和魔兽3C等!我想问这个三重缓冲应不应该开?开了是不是玩游戏顺畅些?开了会不会发热大些或者什么的?开了会不会对显卡或者电脑有一定的伤害?(这问题一定要答)先在这儿离谢谢了!!
展开
选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部
3倍缓冲是A卡的硬件提升帧数的一个技术,和N卡的physx物理加速技术大同小异。不过A卡锁定了3重,N卡其实在有些游戏里可以加速达到5倍多,甚至更高。这个建议开。不过你只玩魔兽/3D网游这些,用这个显卡大材小用了,实际上开不开对你的游戏速度不会影响太大。也可以不开,你会发现基本没有区别。只有在运行显卡杀手级别的游戏,比如《刺客信条》,《孤岛危机》的时候。这个东西对你的游戏提升很明显。
已赞过已踩过你对这个回答的评价是?评论
收起
展开全部
我是经常玩大型游戏的人~打网游和魔兽3C等!------唉,笑死人了
收起
更多回答(2)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...

我要回帖

更多关于 三重缓冲有必要开吗 的文章

 

随机推荐