学号:20021210601 姓名:韦苏恒
【嵌牛导读】讲解解决画面撕裂的几种以及引出VRR的介绍。
【嵌牛鼻子】画面撕裂 VRR
【嵌牛正文】
书接上文,解决画面撕裂的第一个土方法就是开垂直同步。垂直同步会强制Bufferswap,也就是帧传递发生在显示器的VBlank阶段,显卡如果提前画好了后缓存,此时如果你的显示器没有逐行扫描完前缓存的画面,就不允许发生帧传递,显卡就空载等着显示器扫描完毕。显示器扫描完毕前缓存的画面以后进入了VBlank阶段,再允许发生帧传递,前后缓存更替后显卡再开始画新的帧,所以这就是为什么你打开了垂直同步以后,帧率会被锁定在显示器最大刷新率下,因为显卡需要等着显示器去刷新,所以你的最大帧率肯定只能是显示器的刷新率了。60hz显示器开垂直同步就被锁60帧,144hz显示器开垂直同步就被锁144帧。
如果你开了垂直同步,假设你是的60hz显示器,显卡能一直输出60帧,那是没什么问题的,但是如果你的显卡性能在某一刻,不足以输出60帧的画面会发生什么呢?解决方法也很简单,就让显示器再重复逐行扫描一次前缓存,用这次重复扫描的时间去等待显卡绘制完成,等下次刷新进入VBlank的时候,如果显卡画好了,再执行帧传递,所以说你的显示器是重复显示了一次画面,算是跳过了一次,这就等效于降低了屏幕的刷新率,而屏幕的刷新率下降,就一定会导致画面出现不流畅的现象了。
所以呢为了解决这个情况,NVIDIA又推出了一个自适应垂直同步的功能,假设还是的60HZ显示器,在高于60帧的情况打开垂直同步,而如果帧率低于60帧以后,就不再让显示器继续重复显示前缓存了,而是直接关闭掉垂直同步,立刻交替前后缓存的画面,这样就可以缓解因显卡性能不能满足垂直同步的需要,而带来的刷新率变化导致的卡顿了。
但是垂直同步存在一个非常大的弊端,那就是延迟,由于显卡画好画面以后需要等着显示器进行逐行扫描,不能立马去更新画面,这就导致了显卡已经画好了后缓存里的画面,如果游戏里的场景发生了变化,就不能立马反馈到屏幕上,必须要等待显示器逐行扫描完毕以后才可以显示出来,所以你看到的画面都是滞后的,因此会产生延迟的现象。
而出了画面的延迟之外,它还会产生鼠标响应延迟,这个原因我们将来讲帧生成时间,和游戏引擎的延迟渲染的时候再介绍,这种延迟在一些单机里还好,如果是第一人称射击类网游,或者游戏里他就是致命的了,想要缓解这种延迟的方法也很简单,那就是打开三重缓冲的功能,三重缓冲很好理解,就是在原来的前后缓存当中再额外增加一个新的缓存,这虽然可以缓解垂直同步带来的部分延迟,但是不能根治,显示器的刷新率如果显著的低于显卡的输出帧,中缓存和后缓存都被显卡画完了,显卡还是需要停止工作去等待显示器进行逐行扫描,其产生的延迟现象还是不容忽视。
所以英伟达又搞了一个技术,叫做快速垂直同步,来解决垂直同步与三重缓冲导致延迟,普通垂直同步为了防止后缓存覆写前缓存的画面,缓存画完以后显卡就停下来了,而快速垂直同步则是在打开三重缓冲的基础上,允许中缓存和后缓存交替,也就是说显卡可以无限制的去绘制后缓存,绘制好图像以后,后缓存只会和中缓存交替,不会影响到前缓存的画面。如此循环往复,而显示器永远有一张完整的中缓存可以用来交替前缓存,所以画面永远不会发生撕裂。也正是由于显卡不需要等着显示器,可以无限制的去更新新的画面,所以这种快速垂直同步也被称之为无阻塞垂直同步。
这种垂直同步也有很大的弊端,那就是有很多的过往帧被显卡复写后抛弃了,导致帧与帧的间隔和运动差异巨大,会出现非常明显的帧生成时间不均匀导致的卡顿感,因此厂家们都在寻找一种新的解决方法,去解决画面撕裂的同时还不会产生延迟的技术,这个就是目前在购买显示器听到非常多的名词,G-sync和Freesync了。
G-sync和Freesync的官方叫法叫自适应显示器刷新率,简称VRR。其工作原理就是当显卡的输出帧低于显示器刷新率的时候,强制延长VBlank的时间,让显示器持续显示上一帧画面,不进行任何的操作,等到显卡渲染完成图像以后,再允许发生帧传递。以此来让显示器的刷新率去动态匹配显卡输出帧,也就是说垂直同步是显卡等显示器,VRR则是显示器等显卡,显示器会在显卡渲染好画面之前一直显示上一帧。
但是上面所讲的东西都是理论,如果放到实际可能情况会更复杂一点。好,上面我们已经简单了解了G-sync和Freesync对比垂直同步技术的不同之处,和实现原理,下文我们将继续介绍VRR的具体工作流程。