谈谈我对画面撕裂,垂直同步,Freesync以及G-sync的理解「建议收藏」

谈谈我对画面撕裂,垂直同步,Freesync以及G-sync的理解「建议收藏」最近一直在接触图形学相关的知识,感觉之前在学OpenGL的时候不需要思考帧缓冲是怎么处理到显示器上的,驱动都帮我做好了,现在在接触vulkan的时候发现自己对Swapchain这个东西的工作原理不是很了解,去网上搜索资料的过程中发现了垂直同步这个知识点,以前玩游戏的时候也经常看到但是不明白什么意思(对不起!我不是一个合格的游戏玩家>-<),觉得自己还是得搞清楚一下,于是整理了一下自己对…

大家好,又见面了,我是你们的朋友全栈君。

最近一直在接触图形学相关的知识,感觉之前在学OpenGL的时候不需要思考帧缓冲是怎么处理到显示器上的,驱动都帮我做好了,现在在接触vulkan的时候发现自己对Swapchain这个东西的工作原理不是很了解,去网上搜索资料的过程中发现了垂直同步这个知识点,以前玩游戏的时候也经常看到但是不明白什么意思(对不起!我不是一个合格的游戏玩家>-<),觉得自己还是得搞清楚一下,于是整理了一下自己对垂直同步及相关概念的理解

开始正文!

CRT是阴极射线管显示器,以传统的CRT显示屏刷新显示来看,他的工作方式是从上往下从左往右的顺序不断读取某个特定内存缓冲中的数据来刷新屏幕上的显示,渲染程序也同时不断更新该内存缓冲以达到输出动态的画面。

显示器会存在一个刷新频率的因素:以Hz为单位,一般是60Hz或144Hz,由显示器决定,这是一个比较固定的数值,不会有太大的浮动,可能温度会影响这个频率吧(显示器,硬件决定);渲染程序也会存在一个刷新频率的因素: 以FPS(帧每秒)为单位,因为这个刷新是由应用程序控制的,影响因素会很多,比如CPU,GPU的影响,算法的影响,这些都会影响计算一个画面所需要的时间,从而影响该频率(应用程序和CPU,GPU,主要是程序,其次是硬件)

那么当两个频率不一致时,很容易出现几种问题:

该怕地裹紧小被子

1、画面撕裂

什么是画面撕裂呢,画面撕裂就是显示器在显示一个画面时,中间存在一条或多条明显的“分界线”,这一般是由于每秒帧数要高于刷新频率,可能显示器单位时间内显示1个画面,而程序已经计算出了第二帧,显示器在刷新第一帧画面到一半的时候,也就是频幕中间那个位置,剩下的图像已经被应用程序替换成了第二帧,没有办法,第一帧剩下的一半已经被丢弃了,显示器只能将第二帧的下半部分和第一帧的上半部分拼在一起显示,这样就会有一个明显的分界线,这就是画面撕裂

FPS与刷新率同步
FPS与刷新率同步
谈谈我对画面撕裂,垂直同步,Freesync以及G-sync的理解「建议收藏」
FPS高于刷新率画面出现撕裂

 

 

 

 

 

2、跳帧

原理也是和画面撕裂一样的,画面撕裂只是在显示过程中丢弃了某帧一部分,跳帧就是正好那一个帧都被完整丢弃了

3、输出延迟

上面两个问题都是因为FPS高于刷新率,那么输出延迟差不多是FPS低于刷新率,显示器在刷新玩一个画面后发现第二帧图像还没计算出来,没办法只能继续显示第一帧内容,导致了延迟,由于可能第二次刷新画面到一半时,第二帧图像来了,这又出现了画面撕裂。

输出延迟是一个很头疼的问题,代表你的CPU、GPU不过关,或者说这个渲染程序算法太复杂了,有一个特殊情况可以避免FPS过低导致的画面撕裂,就是当FPS是刷新率的约数的时候,因为可以凑整的嘛。这大概也是为什么显示器选择刷新率为60Hz或144Hz的原因,因为它们的约数多啊,60一共有11个约数,144一共有12个约数
60Hz:30Hz,20Hz,15Hz,12Hz,10Hz,6-1Hz
144Hz:72Hz,48Hz,36Hz,24Hz,18Hz,16Hz,12Hz,8Hz,6Hz,4Hz,2-1Hz

谈谈我对画面撕裂,垂直同步,Freesync以及G-sync的理解「建议收藏」

由于两个频率不一致会出现这些问题,那么需要一些手段来让两个频率达到一致或者说同步,就不会出现还没用就被丢弃这样的性能浪费和画面撕裂这种头痛的问题

垂直同步、Freesync、G-Sync,这里有三种同步方式(sync理解成同步)

 其中垂直同步是早期技术,当时还没办法用应用程序控制显示器的刷新频率,所以这种同步是控制应用程序方面帧输出的频率达到和显示器一样的, 垂直同步相对于其他两个技术的优点就是泛用性强,不存在显示器不支持调整频率就无法使用的情况,不受设备的限制。

采用垂直同步其实就是在FPS高于刷新率的时候压低FPS,而FPS低于刷新率的时候就失去了意义,还是会出现频率不一致时的相关问题,所以在FPS低于刷新率的时候不建议开启垂直同步,开了其实影响不大。

FreesyncG-Sync则是垂直同步升级版,在垂直同步发展了一段时间之后,出现了允许调整刷新频率的显示器,在FPS高于刷新率的时候和垂直同步差不多,但是在FPS低于刷新率的时候,他可以调整刷新率以适应FPS,不一定要调到和FPS一样,只要调成是FPS的倍数就能避免画面撕裂,原因在上文说了
    Freesync是AMD公司的技术,比G-Sync更早出现
    G-Sync是Nvidia公司的技术,G-Sync不免费,支持G-Sync的显示器价格会比支持Freesync的显示器贵些,如果你是nvidia的忠实粉,那你当然会选择G-Sync对吧,(只有小孩才做选择,我全都要,手动滑稽)
    后两者在实现细节上是肯定有差异的但是原理一致

总结一下吧,这些问题都是由于FPS以及刷新率这两个频率的不同导致的,而解决方案就是将两个频率同步,这样既能避免渲染过多且多余图像的浪费,又能保证画面的舒适流畅,相对于垂直同步这个比较年迈的技术,AMD公司的Freesync和Nvidia公司的G-Sync这两个技术优化了垂直同步,原本只能压低FPS来保持同步,现在能同通过调整显示器的刷新率来解决这些画面问题

再说一下,Freesync和G-Sync技术调整刷新率的范围并不是1到最大刷新率的,而是有一个规定范围

参考的文献资料网上有很多,我就不列出来了^-^

最后祝大家工作顺心如意

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132773.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • https证书怎么申请?「建议收藏」

    https证书怎么申请?「建议收藏」来看一下https证书申请都需要什么?怎么安装呢?https是什么?http和https是我们上网的时候经常见到的网络协议,当我们进入一个网站的时候,网站的域名有时候是http开头的,有时候又是https开头的,可能你们会好奇,这两者究竟有什么区别呢?https证书又是什么呢?安装https的证书究竟有没有什么作用呢?安装https证书的步骤如何,是简单还是复杂呢?关于http和…

  • 随机梯度下降法和批量梯度下降法_梯度下降法优化

    随机梯度下降法和批量梯度下降法_梯度下降法优化深度学习最常用的优化方法就是随机梯度下降法,但是随机梯度下降法在某些情况下会失效,这是为什么呢?带着这个问题我们接着往下看。一个经典的例子就是假设你现在在山上,为了以最快的速度下山,且视线良好,你可以看清自己的位置以及所处位置的坡度,那么沿着坡向下走,最终你会走到山底。∑i=1n∇θf(θ;xi,yi)+∇θϕ(θ)\sum_{i=1}^{n}\nabla_{\theta}f\left(\theta;x_{i},y_{i}\right)+\nabla_{\theta}\phi(\theta

  • encoder和decoder的区别_python encode函数

    encoder和decoder的区别_python encode函数python内部的字符串一般都是Unicode编码。代码中字符串的默认编码与代码文件本身的编码是一致的。所以要做一些编码转换通常是要以Unicode作为中间编码进行转换的,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。decode:的作用是将其他编码的字符串转换成Unicode编码,name.decode(“GB23…

  • NSGA2算法MATLAB

    NSGA2算法MATLABNSGA2算法MATLAB实现(能够自定义优化函数)以前写了一个简单的NSGA2的算法能够用在ZDT1函数上:http://www.omegaxyz.com/2017/05/04/nsga2matlabzdt1/那个NSGA2的算法不具有普遍性,下面参考课国外的课题小组的代码重新修改了内部冗余内容,使之能够自定义优化函数。更多内容访问omegaxyz.comNSGA2的过程为:

  • Java安全之基于Tomcat实现内存马

    Java安全之基于Tomcat实现内存马0x00前言在近年来红队行动中,基本上除了非必要情况,一般会选择打入内存马,然后再去连接。而落地Jsp文件也任意被设备给检测到,从而得到攻击路径,删除we

    2021年12月13日
  • 分享二个.net开源的论坛

    分享二个.net开源的论坛http://www.jinhusns.com/Products/Downloadhttp://www.jinhusns.com/Document/FrameworkDocument/

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号