作者:zhouwenjun | 来源:互联网 | 2023-06-26 20:26
屏幕撕裂:在一次屏幕刷新中显示多个帧时显示,通常发生在屏幕水平移动
解决方法:垂直同步(VerticalSync)
它将同步图形显示器的刷新率,确保屏幕仅显示整个帧。
例如:屏幕刷新率为60HZ,即16ms更换一次画面,而GPU只需要12ms的渲染时间。剩下的4ms时间就不是一个整块的画面。启用垂直同步的话,如果GPU完成,它将不会呈现在这些刷新率之间。意味着达到12毫秒时,我们能够提供一帧时,每次显示器都要刷新。因此,当我们第一次输入一个帧时,然后每次显示器刷新时,它总是找到GPU刚产生的新帧
比如GPU渲染时间为17ms,由于采用Vsync,因此游戏还是以30fps的速度有效显示.。因为它只每两帧使用一次GPU渲染的画面
![在这里插入图片描述](https://img8.php1.cn/3cdc5/12e8e/b64/dbaca9cdbe32de6a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m96Zye,size_20,color_FFFFFF,t_70,g_se,x_16)
移动端强制使用垂直同步
垃圾回收
![在这里插入图片描述](https://img8.php1.cn/3cdc5/12e8e/b64/b4fee6b0b38e8085.png)
在profiler中搜索(只有存在垃圾回收时才找得到)
gc.alloc找到,点击某个垃圾多的地方,按F跳转到指定地方
gc.collect找到正在收集垃圾的帧
![在这里插入图片描述](https://img8.php1.cn/3cdc5/12e8e/b64/685a1f1ba0ce6769.png)
可以看到影响的具体
Profile Analyzer可以分析多个帧
在PackageManager中安装后打开
![在这里插入图片描述](https://img8.php1.cn/3cdc5/12e8e/b64/846fa660982ae67c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55m96Zye,size_20,color_FFFFFF,t_70,g_se,x_16)
打开后,Profiler也要打开
点击PullData到Analyzer中
![在这里插入图片描述](https://img8.php1.cn/3cdc5/12e8e/b64/1bb9ff0f9f3ed107.png)
在里面左键选择多个帧
在这里插入图片描述
点击compare可以进行比较两个时间段之间的区别
![在这里插入图片描述](https://img8.php1.cn/3cdc5/12e8e/b64/fd550f15efd4b6da.png)
Frame Debugger
用来分析渲染时每帧的状态