【Unity】VSync垂直同步
最近在做UI页面拖拽优化的时候,发现一个问题,是列表还是项目中的地图,在拖拽过程中,几秒钟就可能顿一下闪一下。查了查,可能是因为垂直同步关闭导致的画面撕裂,看了看Edit--Project Settings--VSync Count,确实是关掉了垂直同步。
垂直同步在我印象里一直是用于优化CPU耗时的条目之一,但对垂直同步开关的影响反而一知半解。https://zhuanlan.zhihu.com/p/127974083 因此了解垂直同步在做什么,垂直同步开关各有什么影响,就很重要。
垂直同步:
1.刷新率和帧率
刷新率指的是显示器的刷新率,60Hz就是屏幕一秒会刷新60次画面。
缓冲区是显卡的缓冲区,显卡渲染好一张画面就会把画面存储在显卡的显存中,储存之后再去渲染下一张画面,显卡每秒钟产生120张画面也就是1/120秒就有一张画面放进缓冲区,下一个1/120秒,新的画面会给取代掉,这也就是帧数的概念。
显示器刷新率和显卡帧率不同步就会画面撕裂。
2.垂直同步
打开垂直同步后,当显示器尚未完成一帧画面刷新时候,前后缓冲区不允许交换,显示器刷新完一帧画面时,缓冲区才可以进行交换,不会在上一帧画面未显示完全就开始显示下一帧造成画面撕裂,也就是显卡画面刷新速度等待显示器刷新速度,使画面更流畅。
但是,帧率比显示器刷新率高很多的情况下,为了将显示器的刷新速度和显卡向缓冲区写入画面的时间保持同步,就要增加延迟,延迟“过快的生成画面”向显示器的输出,就会造成一定程度影像传输和操作反馈的延迟。这对需要快速反应的竞技类游戏是致命的。
3.关闭VSync是CPU优化最直接的一个方法,在Profiler中可以看到VSync占了很大比重
4.VSync关闭之后可以提高帧速率,但是画面可能会不连续。
只要有显卡,有显示器的设备都涉及到垂直同步,查看NVIDEIA控制面板可以看到垂直同步选项,而且有其介绍
关闭垂直同步
允许GPU不受刷新率限制进行渲染,并可以在单个刷新间隔对多个渲染帧进行扫描输出,会产生画面撕裂
开启垂直同步
限制GPU最大渲染速率为显示器的最大刷新率,并防止撕裂,但是由于渲染速率受限,延时可能较长且性能较低。另外,如果GPU渲染速率低于刷新率
所以开关垂直同步各有其利弊,要依项目运行需求来开关,在游戏中当然是可以给用户提供这个开关以选择性能和画面连续性。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤