【硬件科普】全网最详细易懂的G Sync Freesync 垂直同步工作原理科普
电脑中的帧是由显卡渲染出来的,60FPS意味着显卡在一秒钟内绘制了60张画面,然后发送给显示器显示
显示器在显示动态画面时都是利用逐行扫描完成的,显示器在收到一个完整帧后,会从屏幕的左上角开始一行一行进行绘制,直到绘制到右下角,这一幅完整的帧就被显示了出来,然后显示器会将扫描点从右下角挪回左上角,这个重置扫描点的过程称为Vblank
显示器的60Hz意味着显示器可以在一秒内进行完整的60次全画幅的逐行扫描,所以刷新率越高的屏幕所能表现出来的帧数也就越多
总结:帧数指的是显卡一秒内渲染好了多少张画面,而刷新率指显示器一秒内逐行扫描的次数,他俩不是相同的概念
帧缓存(Frame Buffer):因为显示器的刷新率是固定的,但显卡输出的帧数会随着场景的复杂度变化,因此为了让变化的帧数和刷新率相匹配,就需要帧缓存
默认情况下有两个帧缓存,前缓存(FrontBuffer)和后缓存(BackBuffer),显卡在渲染好一帧画面时会先写入后缓存,等待后缓存写入完毕,前后缓存发生交换,后缓存变为前缓存,前缓存变为后缓存,整个过程称为帧传递(Buffer Swap),显示器会根据刷新率读取前缓存中画面绘制在显示器上
只要帧数和刷新率不匹配就会发生画面撕裂:
- 帧数 > 刷新率:当显示器渲染前缓存中画面时,显卡已经又绘制完成到后缓存中,发生前后缓存交换,显示器渲染了一半前缓存一半后缓存
- 帧数 < 刷新率:当显示器渲染完一次后,由于前缓存还未被交换,因此继续再次渲染同样的前缓存,在渲染过程中,显卡绘制完成,发生前后缓存交换,显示器又渲染了一半前缓存一半后缓存
垂直同步:强制帧传递(前后缓存交换)发生在显示器的Vblank阶段,即保证帧数和刷新率一致
- 显卡如果提前绘制好后缓存,显卡就必须空等着,直到显示器绘制完前缓存,因此打开垂直同步后,帧率会被锁定在显示器的最大刷新率下
- 显卡如果绘制慢与刷新率,那么显示器就只能再次刷新前一次的前缓存,直到Vblank阶段的后缓存绘制完毕,才能刷新出新画面,因此此时就会发生画面不流畅的现象(自适应垂直同步:帧数如果高于60帧,则打开垂直同步,如果低于60帧,则关闭垂直同步,立即刷新)
垂直同步的延迟问题:因为垂直同步下帧传递必须在Vblank阶段,即在显示器完整刷新完一次后,这就导致显卡已经绘制到后缓存中的画面,无法立刻反馈到屏幕上
快速垂直同步(无阻塞垂直同步):通过三重缓冲,在前后缓存中添加中缓存,并允许中缓存和后缓存不停进行交替,于是显卡就可以不停绘制新画面到后缓存中,显卡就无须等着显示器,并且同时中缓存有着完整的一帧,来和前缓存进行替换,也就不会发生画面撕裂
快速垂直同步的问题:由于显卡的后缓存中很多帧都被复写抛弃了,导致帧和帧的间隔和运动巨大,会出现非常明显的帧生成时间不均匀导致的卡顿感
G-sync/Freesync(自适应显示器刷新率、VRR):当显卡的输出帧低于显示器刷新率时,强制延长Vblank时间,让显示器持续显示上一帧画面,不进行任何操作,等显卡完成下一帧的图像渲染后再允许帧传递,以此来让显示器的刷新率去动态匹配显卡输出帧
G-sync和Freesync只能解决帧数与刷新率的撕裂现象,当帧数大于刷新率时还是会出现画面撕裂,因此打开G-sync和Freesync的同时,要么锁帧到小于显示器刷新率的2-4帧,要么打开垂直同步
- 垂直同步:显卡等显示器
- VRR:显示器等显卡
G-sync和Freesync区别:
- 两者都是通过调整显示器的Vblank来调整刷新率,实现原理相同
- G-sync是NVIDIA搞的,需要授权和收费,但因为需要授权,因此实现效果都好于Freesync
- Freesync是免费的标准,是DP接口中一个附加协议