Unity性能调试中的坑之垂直同步VSync
发布网友
发布时间:2024-10-01 10:44
我来回答
共1个回答
热心网友
时间:2024-10-08 10:29
在进行性能调试时,发现关闭垂直同步(VSync)后帧时间反而增加的现象,这与通常的预期相反。一般认为,关闭VSync后,GPU一旦完成渲染,即可立即显示到屏幕上,而无需等待垂直同步信号,因此每帧时长应更短。然而,我遇到的情况恰恰相反,关闭VSync后的帧时间比开启时更长。
通常,在性能调试中,关闭VSync被建议,以避免其可能带来的干扰。但若关闭VSync后帧时间增加,那么这一调试建议可能变得无意义。接下来,我们探讨这一现象的成因。
在进行真机调试时,通过Unity Profiler捕捉到的帧时长差异。
在Quality中将VSync Count设置为Don't Sync,再次进行真机调试时,Unity Profiler中捕捉到的帧时长。
从对比截图中可见,关闭VSync后Gfx.PresentFrame所需时间高达29.83ms,明显长于开启VSync时的13.20ms。同一场景下,为何渲染时间会如此不同?
在搜索过程中,找到了答案。在Unity论坛中了解到,Gfx.PresentFrame包含的不仅仅是GPU渲染时间,还包括VSync等待时间。
若未指定目标帧率(Application.targetFrameRate),默认情况下,手机平台的目标帧率设为30帧每秒,以节省电池。因此,即使关闭了VSync,程序仍以30帧目标帧率运行,从而导致关闭VSync后帧时间反而增加的现象。
解决这一问题的关键在于正确设置目标帧率。只需在代码中添加如下指令,即可修正帧时间问题。
参考链接:
Disabling V Sync on Android - Unity Forum
Unity - Scripting API: Application.targetFrameRate (unity3d.com)