zoukankan      html  css  js  c++  java
  • 【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渲染速率低于刷新率
     
    所以开关垂直同步各有其利弊,要依项目运行需求来开关,在游戏中当然是可以给用户提供这个开关以选择性能和画面连续性。
     
     

  • 相关阅读:
    django文章对本项目有用的收集
    C#Selenium常用语法功能 很好的文章,值得参考收藏
    C# selenium 高级
    隐士等待与显示等待
    技术不可持续性所面对的挑战及解决方案
    机器人语言特性探索2-正在发生的趋势
    下一个十年计划,兼谈上十年的总结
    机器人语言特性探索1-总体方向
    中国文化
    网络化沟通及协作的人机交互编程语言-机器人语言5(总结)
  • 原文地址:https://www.cnblogs.com/weigangblog/p/15543169.html
Copyright © 2011-2022 走看看