性能标准
推荐耗时:
性能提现到玩家直观感受,就是帧率,为了达到要求的帧率,就要控制CPU的耗时,不同类型的游戏,对帧率要求不一样。下面是推荐耗时:
推荐内存:
避免游戏闪退的重点在于控制PSS内存(实际物理内存Proportional set size)峰值。而PSS内存的大头又在于Reserved Total中的资源内存和Mono堆内存。对于使用Lua的项目来说,还应关注Lua内存。
只有当PSS内存峰值控制在硬件总内存的0.5-0.6倍以下的时候,闪退风险才较低。举例而言,对于2G的设备而言,PSS内存应控制在1G以下为最佳,3G的设备则应控制在1.5G以下。
而对于大多数项目而言,PSS内存大约高于Reserved Total 200MB-300MB左右,故2G设备的Reserved Total应控制在700MB以下、3G设备则控制在1G以下。
渲染模块推荐值:
随着游戏对画质效果的要求越来越高,越来越多的项目遇到的性能瓶颈会来自于GPU的压力,GPU的压力会受到帧率,分辨率,三角形面片数,后处理,Shader复杂度,Overdraw等多方面的影响,因此我们对于不同分档的机型需要做一些对应的调整,在不同档位的机型上要做较为细致的区分,从而达到越高端的机型画质表现越好,而在低端机型上又能保证一定的流畅性。下表中可以当做一个模板,对于不同的游戏类型的需求可以再进一步调整,其中绿色的数值如果能达到的话会更优。
推荐工具
Unity Profiler
建议真机调试、快捷键A(把当前帧的数据,自适应到窗口)、F(Timeline 下选中一个,快速聚焦到合适窗口)
Profiler Modules 可以按需加减,Frame 默认记录300帧的数据,可以在Preference->Analysis->Profiler中更改,最高是2000,高了会增加profile的消耗
Rendering 的数据,影响其中的很大原因是 摄像机视角的改变
Unity Frame Debugger
- 查看当前帧画面的渲染流程,它可以列出所有的绘制调用,并能够按照顺序逐步执行每个调用。
- 查看Draw Call的调用次数,并通过顶点/索引数量来间接衡量场景的渲染代价。
- 还能够检查Batch是否正常合批,以及检查不合批的原因。
- 还可以访问着色器属性以获得关于材质和着色器的更多信息,也可以得到被对象使用的数据的引用。
Mali Offline Compiler
Documentation – Arm Developer 官方文档
a. 该工具主要用来计算Shader的复杂度,结合分档的高中低数值来判断Shader是否过于复杂。
b. 它是一个命令行工具,提供静态分析GPU着色器。它主要可以用于验证着色器的语法、识别性能瓶颈、衡量任何变化对性能的影响。
选中shader,编译成文件后,选择其中的片元着色器或顶点着色器代码,用mali命令行分析
c. 从Unity编辑器中获得FRAGMENT Shader。
从它的报告中我们能得到一些优化的建议:
- 尽量不要使用if、discard语句
- 减低相关运算量,减少反三角函数等复杂函数的使用
- 避免类型转换
- 减少使用32位的高精度浮点数,不过position和depth最好还是用332位
- 避免触发spilling等等
Xcode FrameDebugger
它只支持metal 型号的机器测试,即iPhone,在Edit Scheme 中,选中GPU为metal,既可以截取对应帧的信息,和Unity Frame Debugger类似,但功能更全一些
开启后,在真机上运行时,通过下方工具栏,截取: