大家好,又见面了,我是你们的朋友全栈君。
原文:G-Sync vs FreeSync: The Future of Monitors
如果你经常关注显示器, 或是爱在电脑上玩游戏/看电影,那么你可能需要了解以下两个最新的技术: Nvidia 的 G-Sync 以及 AMD 的 FreeSync。
有关显示器的基础知识
目前, 大多数显示器根据其设定按 30Hz、 60Hz、 120Hz 或者 144Hz 的频率进行刷新。 而其中最常见的刷新频率是 60Hz (这意味着显示器将在 1 秒内刷新屏幕 60 次)。 这样做是为了继承以前电视机刷新频率为 60Hz 的设定。 而 60Hz 是美国交流电的频率, 电视机如果匹配交流电的刷新频率就可以有效的预防屏幕中出现滚动条(即互调失真)。
人眼感知的极限
不知你是否听过这个广为流传的谣言: 显示器之所以按 60Hz 的频率进行刷新是因为这是人眼感知的极限? 实际的情况是, 当年在设计 PC 机的显示器之时就选择沿用电视机的 60Hz 作为其刷新频率, 也许当时并没有什么特别的原因去改变这个设定。 而实际上, 人类的大脑和眼睛每秒钟可以处理大约 1000 帧的图像数据, 大多数人也可以真实的感知出 150FPS(帧/秒)的帧率变化。 但电影往往以 24FPS 的速度播放(首个以 48FPS 拍摄的电影是《霍比特人:意外旅程》, 它获得了观众的不同的反映, 有人认为高帧速率使这部电影显得过于逼真)。
需要注意的是, 虽然人类能感知的帧率远高于显示器实际的帧率, 但提高帧率所带来的收益却是递减的。 对视频而言, 虽说只要它的帧率高于 24FPS 就已经足够流畅了, 但是帧率越高肯定能带给更清晰的观感。 这正是游戏玩家喜欢让游戏运行在 60FPS 或更高的帧率上的原因, 因为这与 30FPS (前一代控制台游戏的标准)相比有非常明显的差异。
显卡与显示器的协同工作
绝大多数的游戏都存在的一个问题是, 虽然显示器可以每秒刷新60次(60Hz)、 120次、 144次等等, 但图像数据从显卡(GPU)中传到显示器的频率却不一定相同。 即使 GPU 每秒渲染 60 帧图像数据, 显示器也按每秒 60 次的速度进行刷新, 但其中每一帧之间的时间间隔一般不尽相同。
画面卡顿
这很重要, 这是因为当显示器固定每隔 1/60 秒刷新一次的同时, GPU在渲染两帧之间的时间差却是不断变化的。
Source: Nvidia
请考虑如下场景: 某游戏的实时帧率是 60FPS (假设这已经是一个不错的指标)。 但是, 其中一半帧与帧之间的时间差是1/30秒, 而另一半帧与帧之间的时间差是 1/120 秒。 当时间差为 1/30 秒时, 这期间显示器将会刷新两次, 但显示的都是前一帧的图像。 当时间差为 1/120 秒时, 后一帧的图像将会覆盖掉前一帧的图像, 因此前一帧的图像将永远不会出现在屏幕中。 这就出现了“微卡顿”(micro-stuttering), 而人眼能够明显的感知出这个现象。
这就意味着, 即使游戏的能够每秒渲染出 60 帧, 但每帧渲染时间的不同也会导致画面的不流畅。 而采用多GPU架构的系统也可能导致“微卡顿”现象: 当不同 GPU 渲染图像帧的时间与标准时间不匹配时, 也会导致系统产生类似的延迟, 出现“微卡顿”现象。
画面迟滞
更常见的问题是, 当 GPU 在渲染复杂度很高图像帧时会导致 GPU 的渲染帧率低于 30FPS, 这使得画面如同幻灯片一般。 因为每一帧复杂程度不尽相同, 因此渲染的帧率也将随之改变。 所以即使游戏平均帧率为 30FPS, 有可能其中一半的时间是 40FPS, 而另一半的时间内却只有 20FPS。 与“微卡顿”不同的是, 这里讨论的有点类似与帧渲染耗时的方差。 在上面这个例子中, 你在游戏过程中的一半时间如同灾难一般, 因为你想玩的是视频游戏而非幻灯片游戏。
屏幕撕裂
可能最普遍的问题是屏幕撕裂。 当GPU还在渲染下一帧图像时, 显示器却已经开始进行绘制, 这样就会导致屏幕撕裂。 这会使得屏幕的一部分显示的是前一帧的内容, 而另一部分却在显示下一帧的内容, 而在显示器中这样的分割往往以水平分割的形式出现。
Source: Wikimedia Commons
以上问题早已被 PC 游戏产业所发现, 并不停的在尝试进行解决。 其中最知名可能也是最古老的解决方案就是 V-Sync 技术, 它主要用于处理屏幕撕裂问题。
Source: Nvidia
V-Sync
V-Sync 的原理简单而直观: 产生屏幕撕裂的原因是 GPU 在屏幕刷新时进行了渲染, 而 V-Sync 通过同步渲染/刷新时间的方式来解决这个问题。 显示器的刷新频率为 60Hz, 若此时开启 V-Sync, 将控制 GPU 渲染速度在 60Hz 以内以匹配显示器刷新频率。
正如先前讨论的那样, 这仅仅是让 GPU 在某个确定的时间开始渲染某一帧, 但这并不意味着这一帧就一定能够及时的呈现在你的面前。 仅仅如此, GPU 还是难以匹配显示器的刷新频率, 有时它能满足要求(渲染速度超过 60FPS), 有时就不行了(渲染速度低于 60FPS)。
Source: Nvidia
虽然 V-Sync 解决了屏幕撕裂的问题, 但它却带来了新的麻烦: 当帧率低于 60FPS 时将会出现明显的画面卡顿和迟滞现象, 因为 GPU 一直在尝试让渲染时间能够与屏幕刷新时间能够匹配。 若关闭 V-Sync, 40~50FPS 即使有些许的屏幕撕裂现象, 但也许完全是可玩和合理的。但开启 V-Sync 后, 40~50FPS 所引起的迟滞, 估计会无法让人愉快的玩耍。
Source: AMD
不知道为什么, 自从 V-Sync 提出以来, 人们一直都试图让 GPU 的渲染速度去匹配显示器的刷新速度, 却没有考虑过其他的方案。 这样的情况直到去年才有了改变: 让显示器的刷新速度去匹配 GPU 的渲染速度。 虽然这是一个显而易见的解决方案, 但是估计人们早已形成了定势思维:显示器的刷新频率必须固定在 60FPS、120FPS或者144FPS。
这个想法似乎更简单明了。 如果让 GPU 的去匹配显示器刷新频率, 无论画面复杂程度如何都需要 GPU 都能能够跟上显示器的刷新频率。 但是反之, 让显示器去匹配 GPU的渲染频率, 仅仅需要在 GPU 渲染完成后向显示器发出信号, 显示器响应该信号进行刷新就行。
这样一来, 只要帧率大于 30FPS 都是可玩的, 这解决了关闭V-Sync会造成屏幕撕裂, 但开启V-Sync会造成画面卡顿或迟滞(帧率低于 60FPS 时)的两难问题。 在这样的方案下, 帧率在 30-60FPS 之间的可玩性将高于从前, 而游戏的呈现效果也更为顺畅。
现代的解决方案
该解决方案有两种实现形式: Nvidia 提出的专利技术 G-Sync 以及 AMD 提出开放标准 FreeSync。
G-Sync
G-Sync 技术于 2013 年底被提出, 它是以显示器的附加模块的形式出现(于2014年初正式产品化)。 G-Sync 模块受专利保护, 它取代了传统显示中的脉冲计数器(scaler)。 但 G-Sync 模块并非真正意义上的硬件计数器, 而是将这部分工作转交 GPU 进行控制。在未获得更多内部实现机制的情况下, 我们只能简单的说 G-Sync 模块用于决定显示器何时(或何频率)绘制下一帧。 本文稍后将进行更深入的讨论。
该方案的问题在于: 要么显示器制造商在制造显示器时嵌入 G-Sync 模块, 要么用户购买 DIY 套件并安装于兼容的显示器上。 但这都将产生额外的费用。 虽然该方案是有效的, 并且有助于 Nvidia 控制自身成本, 但却显著地提高了显示器的价格。 此外,G-Sync 仅能在配备了高于GTX 650 Ti的Nvidia GPU的PC机上工作。 这意味着使用 AMD 和 Intel 集成显卡的人就不那么不走运了。
FreeSync
在采用 Adaptive-Sync 技术(稍后解释)的显示器已经发布的情况下, AMD 于 2014 年初从另一个方面推出了 FreeSync, 在本文撰写时(2015年初)依然未有上市计划。 FreeSync 是一个开放标准, VESA(视频电子设备协会)于2014年4月采用 Adaptive-Sync 技术作为 DisplayPort 1.2a 的规范。
Adaptive-Sync 是 AMD 的 FreeSync 必要组成部分, 它使得显示器可以基于GPU来改变刷新率。 而 DisplayPort 是一种通用、 开放的标准, 支持所有的现代显卡和大多数现代显示器。 然而, 应该指出的是, 尽管 Adaptive-Sync 是 VESA DisplayPort 1.2 及 1.3 规范的一部分, 但它是可选的而非强制性的。 这意味着并非所有基于 DisplayPort 1.3 的显示器都会支持 Adaptive-Sync。 虽然我们非常希望能引入这样一个十分强大的通用标准, 但即便是引入 Adaptive-Sync 都会在制造显示器时引入的验证和测试的额外成本。
需要明确区分的是, Adaptive-Sync 是 DisplayPort 的功能, 它允许改变显示器的刷新频率, FreeSync 与 AMD该项技术相偕同是为了通过 Adaptive-Sync 在显示帧被GPU渲染出来时刷新屏幕。
AMD 认为 FreeSync 在三个方面比 G-Sync 优秀: “无许可费、 没有昂贵的或受专利保护的硬件模块以及没有通信开销(Communication Overhead)。”
前两条很明显, 这也正是 G-Sync 主要的问题: 需要支付许可费, 需要购买/安装受专利保护的硬件模型。 而要说清楚第三条有那么点小复杂。
通信协议的区别
为了弄清楚第三条, 我们需要详细分析一下 Nvidia 的 G-Sync 模块与显示器的交互方式。 这儿我们仅仅概述该系统如何工作并与 FreeSync 的相关实现做对比。
G-Sync 模块改变了垂直消隐的间隔(VBLANK interval)。 VBLANK(Vertical Blanking Interval)是显示器绘制完前一帧最后一行之后与开始绘制下一帧第一行之前的时间间隔。 在此期间, 显示器将一直显示前一帧直到间隔结束后它开始绘制新帧。 通常而言, 由脉冲计数器或者其他类似功能的组件来决定 VBLANK 的间隔, 但是现在 G-Sync 模块接管了这个功能。 虽然 LCD 面板并不需要 VBLANK(但CRT有), 但为了兼容当前操作系统需要有固定刷新频率的设定, 他们都带有有这样一个模块。
G-Sync 模块修改 VBLANK 的目的在于让显示器持续显示旧帧直到 GPU 完成新帧渲染为止。 这样做的缺点在于系统需要反复的轮询以确认显示器是否正在刷新。 若此时显示器正在刷新, 系统需要等待显示器完成刷新之后才能渲染新帧。 这产生一定的可衡量的(如果够小的话)性能问题。 更多的 G-Sync 技术实现细节, 可以在这里找到。
正如 AMD 指出的那样, FreeSync 不需要基于任何轮询系统。 DisplayPort 的 Adaptive-Sync 协议使得系统可以通过发送信号的方式在任意时间控制屏幕刷新, 因此不需要判断显示器是否正在刷新。 因此没有额外的性能开销, 流程也更简单明了。
与Nvidia相同, FreeSync 也仅支持新的GPU。 只有高于Radeon HD 7000系列的 GPU 才支持 FreeSync。
编者修订:
高于 Radeon HD 7000 系列的 GPU 以及 Kaveri, Kabini, Temash, Beema 和 Mullins 的 APU 都支持通过 FreeSync 技术用来进行视频回放和节电(如降低静态图像的帧率)。
但是,只有 Radeon R7 260, R7 260X, R9 285, R9 290, R9 290X 以及 R9 295X2 支持在游戏过程中动态改变刷新频率。
读完上文,你也许觉得 FreeSync 才是更好的选择, 我这样认为。 但我们还是需要详细的分析两者的优缺点(对比过程中将忽略两者共同的优点, 如都可以获得流程的游戏性能)。
优点和缺点
Nvidia G-Sync
优点:
目前已经可以在各种各样的显示器上使用;
实现于强大的 Nvidia GPU 之上。
缺点:
需要受专利保护硬件以及许可费, 因此相对费用更高(DIY 套件的售价高达200美元, 直接购买 OEM 版的显示器也许更便宜);
限制用户只能使用配备了 Nvidia GPU 的系统;
轮询过程中的两次握手对性能有负面影响。
AMD FreeSync
优点:
基于 Adaptive-Sync 技术, 该技术已经成为 VESA DisplayPort 1.2a 以及 1.3 的标准;
开放的标准意味着没有额外的许可费用, 而唯一的成本是兼容性/性能测试(AMD 声称采用 FreeSync 的显示器比采用 G-Sync 技术的便宜 100 美元);
可以随时发送刷新信号, 因为无需轮询系统即没有通信开销。
缺点:
采用 G-Sync 技术的显示器在2014年初就已上市, 但直到2015年3月, 市面上依然没有采用 FreeSync 技术的显示器;
尽管 FreeSync 是开放标准, 但 Intel 和 Nvidia 都没有宣布支持该技术(甚至连 Adaptive-Sync 都不支持), 所以目前只是 AMD 一个人在玩。
写在最后
即使现在 G-Sync 已经取得了一定的市场份额, 但我依然认为 FreeSync 将最终胜出。 因为 Nvidia 无法 100% 的掌控整个 GPU 市场, 而 G-Sync 却只能在 Nvidia 的系统中使用。 尽管十分不情愿, 但是 Nvidia 最终可能会支持 Adaptive-Sync 并发布相应的驱动程序。 更重要的原因是, 采用 Adaptive-Sync 技术的显示器的负载能力明显高于使用 G-Sync 技术的显示器, 并且其表现相同甚至更好。
Nvidia 在这场战争中终将失败。 然而当他们放弃之时, 消费者则是其中最大的受益者。 在此之前, 如果你使用 Nvidia 的 GPU, 你可以选择市场上众多采用 G-Sync 技术的显示器来提升游戏流畅度。 如果你使用 AMD 的 GPU, 几个月之后你也可以类似的解决方案。 不管怎样, 这两套方案都切实的改善了游戏和其他需要实时渲染的任务, 所以不管 G-Sync 与 FreeSync 之间的争斗如何, 你都是最大的赢家。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132806.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...