最好的优化即是不要优化,从一开始就应该把优化当成是游戏设计中的一部分。
移动平台特点
和PC相比,移动平台上的GPU结构有很大的不同,资源非常有限,因为移动设备上的GPU架构更专注于更小的带宽。由于这些不同,一些游戏往往需要针对不同的芯片发布不同的版本。
影响性的因素
影响渲染效率的,主要有两个大课题CPU和GPU。GPU主要负责帧率,而GPU主要负责分辨率。
据此,造成瓶颈的主要有几个方面:
CPU:
- 过多的Draw call
- 复杂的脚本或物理模拟
GPU:
- 过多顶点
- 过多逐顶点计算
- 过多片元(可能是分辨率或是overdraw重绘造成的)
- 过多的逐片元计算
带宽:
- 使用过大纹理
- 分辨率更高的帧缓存
对于CPU来说主要是是每一帧里的Draw call的数目,因为每次CPU在通知GPU渲染之前都需要把数据(位置、法线、颜色等…)准备好,再调用一系列API让GPU渲染,如果过多,则会造成CPU瓶颈。
而对于GPU它负责整个流水线,它会做一系列工作最终把数据显示在屏幕上。因此主要和顶点数量、屏幕分辨率、显存有关。
渲染分析工具
统计空间
在Game视窗的右上方的Stats打开它。
信息名称 | 描述 |
每帧的时间和FPS | 在Graphic的右侧显示,处理一帧所需的时间和FPS |
Batches | 一帧中批处理的数目 |
Saved by batching | 合并处理数目,表明批处理节省了多少drawcall |
Tris和Verts | 要绘制三角面片数量和顶点数目 |
Screen | 屏幕大小与点用的内存大小 |
SetPass | 使用Pass数量 |
Visible Skinned Meshes | 渲染的网格数目 |
Animations | 播放的动画数目 |
性能分析器
通过Window>>Profiler打开。
绿线是批处理数量,蓝色是Pass数量,还有别的信息…
因为Unity在背景要进行很多工作,所以会花费比预期更多的draw call。
帧调试器
Window>>FrameDebugger可以清楚地看到每个一个Draw call的工作结果。
其他性能分析工具
Andriod:高通的Adreno分析工具,英伟达的NVPerfHUD工具
IOS:PowerVRAM的PVRUniSco shader,Xcode中的OpenGL ES Driver Instruments