垂直同步、绘制效率、显示器刷新频率与帧率

从后缓存到显示器      

最近在看D3D的架构,在这过程中对帧率这个一直认为很简单的东西有了更多的理解。在过去看来,帧率就是显卡渲染一帧所用时间的倒数,现在看来远远不是这个样子。

要真正理解这个问题要从绘制数据从显存中到屏幕的这一个过程来说起,下图就是这个过程

 

 

              显存中存在前后缓存,前缓存就是屏幕上最终看到的像素,而后缓存是绘制使用,后缓存绘制好一帧,通常就交换一次,写给前缓存,而显示器则从前缓存不断的读取数据。

 

交换帧率与刷新帧率

              通常我们很在意渲染的效率,其实就是绘制的效率,这就是图中的f1,也成为交换帧率,f1决定了显卡一秒能绘制多少次,以前一直以为这就是用户的帧率了,其实不是,因为还有其他因素。

              我们看到显示器读取前缓存也存在一个频率,即f2,f2也被称为显卡的刷新频率,即显卡按照多少的频率去讲前缓存的数据给显示器绘制一次,它不管前缓存的数据是否是新的还是旧的。由此可见我们最终用户看到的帧率是f1 和 f2的共同结果。实际的帧率f应该表述为显示器所能表现的缓存交换帧率,即在1秒内有多少个后缓存的传递到了显示器。这样看f=min(f1,f2),即受这两个帧率的制约了。比如说你渲染很快,一秒绘制60次,但是显卡一秒只想显示器刷30次,那帧率最高也只有30,再比如你渲染很慢,因为模型特别大,一秒画10次,显示器一秒刷60次,那用户看到的实际帧率也只有10。到这里似乎帧率是被这两者决定的,但是其实还不是这样。

 

垂直同步与帧率

              从图中可以看到一点就是前缓存处于被后缓存写而被显示器读的状态,那么这过程就极有可能发生读写冲突,而显示器的绘制是从上到下一行行刷新的,一种典型的情况就是显示器在读这一帧时前缓存被写入新的下一帧数据,那么显示器的上部分和下部分将显示不同帧的画面,这就是常出现的“画面撕裂”现象,他就是因为缓存交换太快不等显示器读完而造成的。

为了解决这个现象,引入了“垂直同步”的相关技术,垂直同步就是指显示器从上到下绘制一个完整帧的画面的一个过程,在这个过程中,显卡保证不去改变前缓存,如果这过程绘制好一帧,那么后缓存发现前缓存在被读取就不进行交换操作,这样的结果会保证显示器绘制不被撕裂,但是也带来了另一个问题,就是卡帧率,因为正常的交换帧率被显示器的垂直同步各种打断掉,交换帧率大大降低,降低最终帧率。

              看来垂直同步与不垂直同步是两个极端,他们分别代表着最高的画面完整度与最高的帧率。所以在实践中就产生了很多种折中的办法,就是允许显卡最多在n帧刷新中只打断一次缓存交换,n越大越接近完全不用垂直同步,帧率越高,n越小越接近垂直同步,撕裂现象概率越小。垂直同步、不垂直同步和几种折中其实就对应了D3D9的交换参数的D3DPRESENT_DONOTWAIT、D3DPRESENT_INTERVAL_IMMEDIATE和D3DPRESENT_INTERVAL_ONE(~FOUR)。那么最终的帧率f应该接近与min{f1-min{f1,f2}/(1+n),f2},通常f2都是足够大的。

 

           所以帧率不仅与交换帧率、刷新帧率有关,还与垂直同步策略有关,所以我们可以看到一些玩家的游戏中关闭垂直同步会卡机,也有一些玩家打开垂直同步会降低帧率,就是这个原因。

 

显存

              当然我们看到垂直同步会制约帧率的时候,是因为我们这个图中的的前缓存存只有一处,处于读写冲突状态,那么会想只要让显存不存在这种状态不就行了吗,那需要显存非常大,后缓存是生产者,显卡是消费者,前缓存如果足够的大(可以分成n多块),那么生产者就有可能不用顾忌的往缓存上堆新东西,事实上完全的不存在冲突是不太可能的,因为显存的大小永远存在一个限制,只要缓存大小有限制,就必然可能出现生产者和消费者的冲突,存在冲突,要么选择生产者等消费者(生产降低,即帧率降低),要么消费者拿到的东西会紊乱(即撕裂),但是显存越大,这种潜在的冲突的可能性就越小,问题就越容易避免。

              所以我么看到显卡显存较大的客户端及时完全关闭垂直同步(即理论最大帧率)也不太容易撕裂,或者完全打开垂直同步帧率还是非常高,显存不仅有利于绘制也有利于解决前缓存冲突提高帧率。

              基于这些思考,所以在选择渲染策略时,一定要充分考虑垂直同步的策略,根据潜在用户的硬件、游戏的绘制效率、刷新效率一起考虑,知道帧率是由绘制效率,显卡刷新效率和垂直同步策略三者共同决定的。在D3D9中微软推荐使用的垂直同步策略时D3DPRESENT_INTERVAL_ONE,即最接近完全垂直同步的折中策略,即最多在一次显卡刷新中打断一次缓存交换,实际帧率应该是接近于f1/2,如果最终用户看到的要在30帧的话,z在f2是60的情况下,那么f1要在60帧以上。

时间: 2024-09-11 15:19:03

垂直同步、绘制效率、显示器刷新频率与帧率的相关文章

显示器刷新频率设置

  显示器的刷新频率就是场频,以Hz为单位.刷新的频率越高,画面显示的就越稳定,闪烁感越小. 在一般的情况,显示器的刷新频率在75Hz以上,用户的眼睛就基本感觉不到闪烁,85Hz以上就完全没有闪烁感.而显示器的最低刷新频率是60Hz,大家在使用的过程中可以使用85Hz的刷新频率. 此外,由于液晶显示器和传统显示器的显示原理不同,在使用液晶显示器的时候,刷新频率可以使用默认值.

显示器无法调整刷新频率怎么办

  在"显示属性"中显示器刷新频率无法调整,其实无法调整显示器刷新频率大多是因为人们没有选择正确的显示器类型或者显卡的驱动程序安装不正确所造成的.显示器类型的选择往往容易被忽视,许多用户将显示器类型设为"SUPERVGA"之类,结果就会造成无法调整显卡的刷新频率的问题. 要知道错误的刷新频率参数有可能对显示器产生危害,所以对于系统不能识别的显示器,应一律按照最保守的默认状态进行设置(60Hz).解决的方法就是在显示属性中选择正确的显示器类型,如果你使用的是Windo

电脑显示器的刷新频率找不到怎么办?

一.找回显示器的刷新频率 你是否遇见过这样的现象?格式化硬盘重装系统后,想更改一下显示器的刷新频率,打开显示属性对话框后却发现只有"默认的适配器"和"优化",其它选项全都不见了!有时甚至连这两项都没有!查看显卡驱动程序,明明已经正确安装了.那么,这究竟是怎么回事? 大多数人在装机的时候,对于显卡驱动程序往往非常注重,并且一般都能正确安装,可是对于显示器驱动程序通常都没有注意,而是在安装中让 Windows自动识别.然而Windows有时并不能正确识别显示器的型号,因

Win8设置屏幕分辨率和屏幕刷新频率图文教程

  Win8设置屏幕分辨率和屏幕刷新频率图文教程         Win8屏幕的改变可以实现多种操作设定,包括屏幕分辨率的调整.显示器的选择以及横竖屏的切换等等.Win8这些屏幕设定功能的运用,跟过去的操作系统相比,有什么特点或是不同点?我们就在本期的Win8大百科栏目中为大家介绍一下. 桌面上右键即可找到"屏幕分辨率"项 横纵屏的调整 在屏幕分辨率选项中,我们先来看看一项比较有意思的设置.这个有意思的设置就是横纵屏方向设定.如果您所使用的显示器是可以旋转的屏幕,那么配合这项功能来设定

电脑屏幕刷新频率是什么意思?

屏幕刷新频率其实是一个很抽象的头像,它是一种在屏幕上的图形图像由一个个因电子束击打而发光的荧光点组成,由于显像管内荧光粉受到电子束击打后发光的时间很短,所以电子束必须不断击打荧光粉使其持续发光.电子枪从屏幕的左上角的第一行开始,从左至右逐行扫描,第一行扫描完后再从第二行的最左端开始至第二行的最右端,一直到扫描完整个屏幕后再从屏幕的左上角开始,这时就完成了一次对屏幕的刷新. 屏幕刷新率设置多少合适? 首先你可以去查看你的电脑上面的频率刷新率是多少?详细内容你可以参考:屏幕刷新率怎么调 屏幕刷新频率

VB6中改变屏幕的分辨率和刷新频率!!!

分辨率|刷新 Option Explicit Public Declare Function ChangeDisplaySettings Lib "user32.dll" Alias "ChangeDisplaySettingsA" (ByRef lpDevMode As DEVMODE, ByVal dwFlags As Long) As LongPublic Declare Function EnumDisplaySettings Lib "user3

显示器刷新率设置太高导致黑屏怎么办

  显示器刷新率设置太高导致黑屏的解决方法. 1.在DOS下删除C:WINDOWSsystem32configSYSTEM,然后重启重装系统驱动即可. 2.开机按F8,选择用VAG方式启动,然后重新设置好刷新率并重启即可. 3.开机按F8,选择安全模式启动,删除显卡驱动,重启,重装显卡驱动即可. 4.最笨的方法:重装系统.

蚂蚁聚宝自定义行情刷新频率设置方法

1,如下图所示我们在手机中打开蚂蚁宝主页面,进入后我们点击"头像"图标,然后打开进入,如下图所示: 2,在进入到"个人设置中心" 我们找到我下面的 "系统设置",如下图所示: 3,接下来便来到了系统设置页面,在其下方我们可以看到"行情刷新频率"设置一栏,软件默认的是15秒,如下图所示: 4,然后我们点击"行情刷新频率",在此就有一个:5秒,15秒,30秒,60秒以及设置为不刷新,这具体多长时间我们选择合适自

修改360抢票的刷新频率+突破8车次限制,太简单了

       刚分享了一下12306网站刷票防挂js,居然没几个人看,估计都用其他刷票软件了,我之前一直用百度卫士自带的刷票工具,结果今年大家刷的太厉害了,12306不稳定,导致老是登录失败.于是不得不转向国民力荐的360抢票.打开刷票页面,居然让我必须安装360浏览器,这让人很无语.找了半天破解的方法,终于可以刷票了,结果发现360插件中的helper.dll无法在chrome中调用(chrome在45+后彻底废弃了NPAPI),所以虽然能刷票,但不能自动识别验证码,最后不得不下载360浏览器