垂直同步工作原理
2021/12/17 6:27:46
本文主要是介绍垂直同步工作原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
垂直同步工作原理
参考:【硬件茶谈】全网最详细易懂的G-sync Freesync 垂直同步工作原理科普
概览
- 画面撕裂
- 前后缓存
- 垂直同步
- 自适应垂直同步
- 三重缓存
- G-sync,Freesync
- LFC低帧补偿(Low Frame Compensation)
基本概念
显卡相关
帧:
每一副静态画面。
帧数:
一秒钟闪过去的图片数量(FPS)。
输出帧:
显卡一秒钟渲染好并发送给显示器多少张画面。
显示器相关
目前显示器显示动态画面都是利用逐行扫描完成的。
逐行扫描:
显示器在收到一个完整的帧以后,会从屏幕的左上角开始一行一行地进行绘制,一直绘制到屏幕的右下角。
Vblank:
显示器重置扫描点(把扫描点从右下角挪到左上角)的过程
屏幕刷新率:逐行扫描的速度,144Hz的显示器可以在1秒钟之内进行完整的144次全画幅的逐行扫描。刷新率越高画面延迟越低画面越流畅。
前后缓存
FrameBuffer(帧缓存):
显卡在不同画面的运算压力不同,帧数会一直变化,显示器刷新率是固定的,为了让一个波动的输出帧能匹配固定的刷新率,就引出了帧缓存这个东西。默认是有两个帧缓存:FrontBuffer(前缓存)和BackBuffer(后缓存)。
BufferSwap(帧传递):
显卡在渲染完画面后不会直接交给显示器显示而是先写入BackBuffer,BackBuffer写入完毕之后前后缓存会发生交换,这个交换的过程称为BufferSwap。
画面撕裂
显卡帧数高于刷新率
显卡在显示器逐行扫描完画面之前就提前绘制好了后缓存,此时发生了BufferSwap,显示器接着去绘制帧传递之后的前缓存,导致了画面的撕裂。
显卡帧数高于刷新率
显示器在BufferSwap之前完成了对前缓存的逐行扫描。这时只能继续逐行扫描前缓存,然后在第二次逐行扫描中途后缓存绘制完毕发生了BufferSwap,显示器又开始画帧传递后的前缓存。第一帧是完整的B,而第二帧上半幅是B,下半幅是C。
垂直同步
概念:
显示器未完成Vblank之前显卡完成即使绘制完后缓存也强制地空载等待显示器扫描完毕。
效果:
- 不会发生撕裂。
- 因为显卡需要等待显示器刷新,所以这时最大帧率只能是显示器的刷新率了。
缺点:
- 如果显卡不足以负担压力,导致后缓存在Vblank后还未绘制好,这时会再次扫描前缓存利用这次重复扫描的时间去等待显卡绘制,在再次完成Vblank之前显卡画好了再进行帧传递。算是跳过了1帧,等效于降低了屏幕的刷新率导致了画面不流畅。
- 延迟:显卡画好画面以后等待显示器进行逐行扫描,不能立即更新画面导致了已经画好了后缓存里的画面,在游戏场景发生变化时不能立马反馈到屏幕上,必须要等待帧传递之后才能显示出来,所以看到的画面都是滞后的。
自适应垂直同步(Adaptive V-Sync):
为了规避垂直同步掉帧的缺点,在高于显示器刷新率的时候打开垂直同步,而帧率低于60帧以后直接关闭掉垂直同步,立刻交替前后缓存的画面,这样就可以缓解因显卡性能不能满足垂直同步的需要而带来的刷新率变化带来的卡顿。
三重缓存
原理:
增加中缓存。
效果:
缓解垂直同步带来的部分延迟,当显卡性能显著低于显卡的输出帧,中缓存和后缓存都被显卡画完,显卡还是需要停止工作等待显示器逐行扫描。
快速垂直同步(无阻塞垂直同步):
初衷:
解决垂直同步和三重缓冲导致的延迟。
原理:
-
普通的垂直三缓是在显示器完成扫描后交换中缓存和前缓存再将交 换后的中缓存与后缓存交换。这时显卡再去写入后缓存。
-
而快速垂直同步是打开三缓的基础上允许中缓和后缓交替,显卡不会出现空载的情况,无限制地绘制后缓存。
效果:
显示器中永远有一张完整的中缓存可以用来交替前缓存,画面永远不会发生撕裂。显卡不需要等待显示器,可以无限制的更新新的画面,所以快速垂直同步也被称为无阻塞垂直同步。
弊端:
很多过往帧被显卡复写后抛弃,导致帧与帧之间间隔与运动差异巨大,出现非常明显的帧生成时间不均匀导致的卡顿。
G-Sync和FreeSync(自适应显示器刷新率,简称VRR)
初衷:
达到解决画面撕裂的同时还不会产生延迟。
Variable Refresh Rate的原理:
显卡输出帧低于刷新率时强制延长Vblank的时间让显示器持续显示上一帧画面,发生帧传递后再刷新显示器。让显卡刷新率动态匹配显卡输出帧。
概括:
- 垂直同步是显卡等显示器
- VRR是显示器等显卡
弊端:
帧率高于刷新率时由于显示器进行一次逐行扫描的时间不变,当未开启垂直同步时前后缓存交替导致画面撕裂。所以同时要锁帧低于显示器2-4帧或开启垂直同步
LFC
原理:
让刷新率变为帧率的整数倍,进行两次或三次四次刷新显示一帧去模拟刷新率等于帧率。
这篇关于垂直同步工作原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13怎么通过 JavaScript 或其他编程语言来实现监听屏幕高度变化功能?-icode9专业技术文章分享
- 2024-11-12聊聊我们那些年用过的表达式引擎组件
- 2024-11-12让项目数据更有说服力:五款必备数据可视化管理工具推荐
- 2024-11-12人到一定年纪,要学会远离多巴胺
- 2024-11-12解读:精益生产管理的目的是什么?如何操作?
- 2024-11-12Sku预研作业
- 2024-11-12文心一言API密钥:分步申请指南
- 2024-11-12初学者指南:轻松掌握后台交互
- 2024-11-12从零开始学习:封装基础知识详解
- 2024-11-12JSON对象入门教程:轻松掌握基础用法