unity画面闪烁问题

ARFoundation初始化时突然出现一帧历史画面或者说画面闪烁

  • 症状
    在场景中有一个普通相机,普通按钮,点击后创建 ARFoundation 预制体,里面包含了 ARSession 组件,还有用于AR的Camera
    然后屏幕会突然闪一下,显示的是0.几秒前的画面

  • 排查

    • 在界面上打印时间,可以确认确实就是几秒前的画面
    • 去掉AR的Camera,此时只有普通相机,仍然会闪烁
    • 去掉 ARSession 组件,不会闪烁,说明是 ARSession 问题
    • 取消 ARSession 上的 MatchFrameRate ,不会闪烁,说明是 MatchFrameRate 问题
    • 排查跟 MatchFrameRate 相关的代码,发现注释掉 ARSession.Update 中的如下代码
          Application.targetFrameRate = subsystem.frameRate;
          QualitySettings.vSyncCount = 0;
      
      则不会闪烁,说明跟设置帧率有关
    • 最后经过不断试验,确认,当 QualitySettings.vSyncCount 有进行切换,则会进行闪烁,否则不会
      比如 打包时 Quality 中设置的 VSync Count = Every V Blank,也就是 QualitySettings.vSyncCount=1
      则开启ARSession.MatchFrameRate 会设置 QualitySettings.vSyncCount=0,此时 vSyncCount 的值发生改变
      所以会闪烁
  • 原因
    QualitySettings.vSyncCount 的值发生改变,导致闪烁,估计是值为1和0时的缓冲模式不同

  • 解决
    保证 QualitySettings.vSyncCount 不会发生改变,有2种办法:

    1. 取消 ARSession 上的 MatchFrameRate,如果需要的话,可以进入AR后在代码中设置为true
    2. 打包时设置 Quality 中设置的 VSync Count = Don’t Sync

猜你喜欢

转载自blog.csdn.net/qmladm/article/details/131030712