• 如果觉得宅男频道还不错,Ctrl+D放进你的收藏夹吧~
  • 宅男频道所有内容均来自互联网用户分享,如有违规内容,纯属本站管理不善,请及时联系我们删除。
  •    2018-08-9 14:18:05  ACGN观察  1 条评论

    在上一期的“游戏卡不卡,究竟用什么来判断?”文章中,我们讲述了关于游戏画面流畅性的一些基础概念,例如帧率、帧渲染时间以及等效帧率等。这部分数据基本上是由处理器和显卡的计算性能所决定的。但这对儿“核心兄弟”计算渲染完成的画面就是用户最终看到的画面么?显然半路还有个“程咬金” —— 显示器

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    这哥们已经是第二次出境了,但不要在意这些细节

    显示器和显卡之间的数据交换不同步,产生了很多人“耳熟但不能详”的撕裂、延迟以及跳帧等一系列问题。这些现象相信不少人都在游戏过程中体验过,在战况激烈,瞬息万变的电竞赛场上,这些微小的影响就可能被放大到左右战局的地步。想要解决这些问题,就要首先知道这些问题产生的根本原因:显卡渲染生成画面的速率超过了显示器本身的刷新率,以及显卡渲染画面所需时间的不均等性。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    信号周期的不同步是所有画面问题的主要根源

    先让我们站在一帧画面的视角上,了解一下整个系统的运转过程:当一帧画面被GPU渲染完成后,首先会被发送到一个叫做“帧缓冲”(Frame Buffer,实际上就是在显存中开辟的一块专门的存储空间,这里面存储的是屏幕上每一个像素点的R、G、B、Alpha通道等信息,可以想象成屏幕画面在显存空间的映射)中,在这里等待显示器将其取走。在几个到十几个毫秒后,显示器的帧同步信号到达(正确的应该叫做场同步信号,这是从CRT时代的场同步信号代表一帧画面扫描完毕继承过来的),将这一帧画面进行读取,并最终绘制在屏幕上面。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    同步信号到达(闪烁的上升沿青色指针),画面被取走

    这个看起来十分简单的过程,运转起来却总是会不尽如人意:首当其冲的就是画面闪烁问题。因为一个帧缓冲同时负责与GPU和显示器双方沟通,就难免出现当GPU向帧缓冲内写入数据的时候,显示器的帧同步信号到达并抓取画面的情况,这种边写入边读取的状态(再加上DRAM芯片的刷新机制)就造成了显示的画面会出现频繁的闪烁。

    既然是因为同时读写导致了闪烁的问题,那么将帧缓冲分成两个部分,分别负责读/写不就好了?“双重帧缓冲”就这么应运而生:两个帧缓冲分别称为“前端缓冲”和“后端缓冲”,GPU只负责向后端缓冲内写入新的画面帧数据,而显示器的帧同步信号则只从前端缓冲中抓取画面数据。但这个前后端缓冲区并不是绝对固定的,而是随时互换。也就是当GPU向后端缓冲写完一帧画面数据的时候,这个缓冲区立即变成前端缓冲。而之前存放较老画面帧的前端缓冲则立即变为后端缓冲,并等待GPU向其写入更新的画面后再次变成前端缓冲。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    双重帧缓冲的核心在于前后端缓冲的切换机制

    这样的更替机制能够让显示器尽可能显示最新渲染出来的画面,同时解决了画面闪烁的问题。但一个新的问题出现了:我们目前常见的显示器,标准刷新率是60Hz(至于为什么以60Hz为标准,这又是一个类似“马屁股决定火箭直径”的故事了),这意味着每隔16.7ms,显示器会发送一次帧同步信号,但显卡渲染画面帧的速度并不是固定的,这种一个固定周期一个不等周期搭配起来,就可能出现当显示器的帧同步信号到达前端缓冲,正在读取画面数据的时候,后面GPU已经向后端缓冲写完新一帧画面,前后缓冲调换的情况。此时后半部的画面数据就变成了新一轮次前端缓冲中的画面,最终显示器上呈现出的就是一部分老画面混合一部分新画面的景象,这就是“撕裂”。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    1/250倍速下可以看到严重且频繁的画面撕裂

    举个例子理解起来会更直观一点:假设显卡间隔渲染全红色或全蓝色画面,某一个瞬间,GPU将渲染完的红色画面写入后端缓冲。然后这个后端缓冲立即变为前端缓冲,开始等待显示器的帧同步信号。于此同时,GPU开始向新的后端缓冲中写入蓝色的画面。几个毫秒(如果仅仅是红蓝画面,那时间要短得多,这里仅为了方便理解而放大了时间)后帧同步信号到达前端缓冲开始读取红色画面的数据,当读到一半的时候,后端缓冲中蓝色的画面已经写入完毕变身前端缓冲,此时显示器不得不接着从新的前端缓冲中读取接下来的蓝色画面数据。当这一帧画面全部读取完毕显示到屏幕上的时候,就变成了我们不想看到的一半红色一半蓝色的画面。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    因为撕裂效果而出现了不应该存在的画面

    在某些极端情况下,GPU的渲染速度太快,以至于在帧同步信号到达后的读取过程中,前后端缓冲交换了多次,那最终屏幕上呈现的就会是多次撕裂的画面。

    解决画面撕裂的办法同样很简单:既然是因为GPU输出画面帧的速度太快导致前后端缓冲频繁交换导致的,那只要规定在显示器的帧同步信号到达并读取完画面帧数据后,前后端缓冲才允许进行位置交换就可以了。因为画面扫描都是以“行”方向进行的,因此撕裂都是垂直方向上的画面被分割,所以消除撕裂的技术也就被称为“垂直同步”。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    在游戏画面设置里,通常可以找到“垂直同步”选项

    垂直同步虽然让画面撕裂消弭于无形,但受限于常规显示器的刷新率只有60Hz,因此游戏的帧率也就只有60FPS。强制降低帧率的结果不仅让高性能显卡的性能无从发挥,同时操作延迟的问题也被放大了。举个例子:我们在游戏中使用鼠标转动视角。鼠标提供的定位信息决定了画面变化的量。目前的游戏引擎对操作输入的处理周期大概是3~4帧。而垂直同步变相拖慢了GPU渲染画面的时间(等待帧同步信号的过程中新渲染出来的画面帧不能替换到前缓冲中去),使得连续的鼠标移动操作不能生成连续的游戏画面视角转动帧,操作就出现了延迟。在对抗激烈,画面变化频繁的竞技类游戏中,延迟对操作带来的负面影响甚至远大于画面撕裂,这也是“垂直同步无用论”的诞生的根源。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    垂直同步就是让显卡的输出服从显示器的同步信号

    为了缓解垂直同步带来的问题,“三重帧缓冲”应运而生。GPU轮番向两个“后端缓冲”中写入新的画面帧,当一个后端缓冲写完后,立即向“前端缓冲”同步数据,显示器依旧只从前端缓冲中抓取画面帧。如此一来,GPU就摆脱了帧同步信号的限制,能够更快的根据用户的操作向前渲染画面帧,此时开启垂直同步信号则只限定前后端缓冲的交换速率,虽然帧率上限仍然还是等同于显示器的刷新率(因为Fraps之类的帧率显示软件实际上都是在监测前部缓冲区的更替速率),但操作延迟得到了有效地控制。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    三重帧缓冲通过释放显卡性能来解决开启垂直同步后延迟问题

    三重帧缓冲带来的缺点是显存占用的增加:标准的1920×1080 32bit色彩的画面需要占用约8MB的显存空间,在三重帧缓冲状态下显存占用就是24MB。如果再开个8xAA,那就变成了192MB。对于早期的显卡来说,这样的显存占用几乎是灾难性的。然而对于现在动辄8GB的显存容量来说,即使是4K分辨率在8xAA也不过才占用768MB,完全不叫事儿(这只是帧缓冲的显存占用,游戏过程中还有大量的材质、光影甚至是后处理数据来挤占显存空间)。另外,三重帧缓冲并不是DirectX所支持的技术(DirectX中有个近似概念被叫做“预渲染队列”,最多可以预渲染8帧画面,有部分游戏会使用3个预渲染队列,并将其在设置中也称为三重帧缓冲,但实际上预渲染的画面是不允许丢弃的,会在其后的时间内依次更替到前端缓冲中被显示出来,在GPU渲染速度高于显示器刷新率的时候反而可能导致更严重的画面延迟),因此尽管NVIDIA和AMD都在驱动里提供了对三重帧缓冲的支持,也还是要游戏有针对性的优化才能正常发挥作用。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    《反恐精英:全球攻势》的设置中就可以看到开启三重缓冲的选项

    闪烁、撕裂和延迟都已经被解决或者得到缓解,那我们是不是能好好玩游戏了呢?显然还不能,因为还有“跳帧”没有解决。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    跳帧会让我们看不到本应该存在的画面帧

    上图中显示器最终输出的画面里,显示“4”和“8”的画面被跳过了,这就是跳帧的原理。当GPU渲染画面帧的时间比显示器刷新间隔更短时,就存在某些画面帧在上一个帧同步信号之后生成,但在下一个帧同步信号到来之前,就在帧缓冲中被新的画面帧替换掉的情况。无论是双重帧缓冲还是三重帧缓冲,都无法避免这个问题。而且显卡的性能越好,被跳过的帧就越多。只是通常游戏中被跳过的连续帧之间画面的变化很小,很容易被“脑补”过滤掉(关于脑补画面的机制,请参见上期文章“游戏卡不卡,究竟用什么来判断?”),不易被我们感知到。但如果画面变化非常剧烈,大脑的运算无法弥合其间的差异,跳帧就会被我们察觉到了。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    在两次帧同步信号(青色箭头指针闪烁)之间,前端缓冲里的画面帧2(蓝色)被刷新了,显示器就跳过了这一帧画面

    综上所述,即使CPU和GPU的计算性能足够强,能够输出非常高的帧率,但画面撕裂、操作延迟以及跳帧仍然会对我们的游戏体验产生严重的干扰(双重帧缓冲已经得到非常普遍的应用,因此画面闪烁的问题在当前游戏体验中已经极少见到),除了视觉观感的劣化,延迟和跳帧更是会影响玩家对于游戏中物体位移的判断,在激烈且快节奏的主视角射击游戏中,这是非常致命的。那能不能更彻底的同时解决撕裂、延迟和跳帧问题呢?最简单粗暴的办法是加速显示器的刷新周期:60Hz的显示器一个刷新周期要16.7ms,120Hz就缩减到了8.3ms。高刷新率降低了撕裂出现的机率,并且在垂直同步开启时能够尽可能解放显卡性能,降低了操作延迟。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    高刷新率显示器的价格门槛已经逐渐降低

    虽然有一定效果,但暴力提升刷新率这种方案并没有从根本上解决问题。更聪明的办法是,既然所有问题都与显示器的固定刷新周期有关,那让这个刷新周期变成动态的就可以了,这就是“主动同步技术” —— 换个更简单的说法:传统的垂直同步技术是让高速的显卡听命于低速的显示器,而主动同步技术则是让低速的显示器听命于高速的显卡 —— NVIDIA的G-SYNC和AMD的Free-Sync都是基于这个原理。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    刷新率“动”起来,游戏世界才更加精彩

    NVIDIA通过在显示器中增加额外的硬件模块,使得GPU在向后端缓冲写入一帧画面,转换为前端缓冲时,会立即向显示器发送一个请求同步信号,显示器收到该信号后立即开始抓取并绘制该画面。如此一来,GPU渲染的每一帧画面都能够及时的被显示出来,同时每一次屏幕刷新也都是一帧完整的画面,撕裂和跳帧现象都不复存在。当然在G-SYNC模式下,每一帧的渲染时间无法短于显示器绘制一屏画面的时间(也就是最高帧率会锁定到显示器的刷新率上限,NVIDIA提供了自适应模式,该模式下帧率超过刷新率上限时会自动关闭G-SYNC功能)。不过随着对更高刷新率面板的支持(目前已经有FHD下240Hz的产品),这个限制造成的影响已经微乎其微。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    G-SYNC算是目前相对最为成熟的主动画面同步技术

    AMD则是通过DisplayPort接口的自适应刷新标准来实现动态刷新率的调节,无需额外的芯片,完全靠驱动本身实现。这样在成本和开放性上都比G-SYNC更容易接受,但效果上要略逊一筹。

    撕裂、延迟还有跳帧,还让不让人好好玩游戏了?

    这台显示器144Hz、G-SYNC HDR、4K、IPS、量子点、骚气底座、败家之眼LED都有了,还要什么?嗯,还要有钱,毕竟2W

    所以,仅仅追求更好的处理器和显卡,只是为游戏体验打下了一个良好的基础,而想要得到“绝佳”的游戏体验,一款高刷新率(最好带有主动同步技术)的显示器,同样至关重要。

     

    本文原始地址:http://www.zhainanpindao.cc/8185.html

    本站只做信息分享,转载请注明出处来自宅男频道

    相关推荐

    发表评论

    1. 不得不说如果不是专门为了打电竞,现在低价高刷新率显示器画面效果十分感人。

      骑着蚂蚁闯天下 御宅达人 LV.3 7个月前 (08-09) [0] [0]