|
首先推荐一篇别人总结的经验,非常全面:
移动游戏性能优化通用技法 - 0向往0 - 博客园 (cnblogs.com)
1.参考的LOD分级
LOD低 | LOD中 | LOD高 | 帧率 | 30 | 30 | 30 | 水面 | 无深度+无GrabPass | Blit颜色+深度图 | Blit颜色+深度图 | 材质效果 | 低 | 中 | 高 | 阴影 | 阴影片 | 主角ShaderMap+其他角色阴影片 | ShaderMap实时阴影 | 粒子特效(美术制作)
玩法自定义不同LOD | 低 | 中 | 高 | 辉光 | 关 | 开 | 开 | 屏幕分辨率 | 中(宽720) | 高(宽720) | 高(宽1080) | 抗锯齿(SMAA) | 关 | 关 | 关 | 贴图质量 | Full Res | Full Res | Full Res | LodGroupBias | 0.8 | 0.9 | 1.0 | 隐藏一些场景物件 | 美术配置 | 美术配置 | 暂时没有 | 渲染等级
(雾效、光照计算等差异) | 低 | 中 | 高 | 颜色映射ColorGrading | 关 | 随场景设置 切换 | 随场景设置 切换 | LightShaft | 关 | 关 | 随场景设置 | 景深(部分Timeline+3DUI开启) | 关 | 关 | 关 | 2、美术资源
各类资源导入器(图集、贴图、特效、模型、动画),定期检测工具检测美术资源、数据、代码不规范的地方
主要是制定规范,关注内存和渲染。
内存:图片的压缩、分辨率。资源是否冗余,加载激活卸载是否合理。配置文件,动画,音频,字体,粒子特效,shader。
渲染:DrawCalls、Batches、Overdraw、面数、顶点数、Camera.Render、Shader变体、材质数量(SetPassCalls)、贴图合批
举例:3d冒血字,GPU Skinning
3、程序代码
内存优化:C#堆内存,lua堆内存,gc
算法优化:寻路算法优化,使用缓存池,同屏人数剔除系统
CPU耗时优化:
1)尽最大可能降低Lua与C#的交互频次,优化思路:采用批处理,将Lua数据合批发送给C#;全局函数使用静态函数代替单例调用函数等。
2)降低高频函数的使用频次,优化思路:优化代码写法,合并复用性较低的函数;调整游戏逻辑,system仅管理生效单位而非全量单位等。
3)代码逻辑优化,使用合适的数据结构,优化思路:在编写代码时进行多方面考虑,不断调优逻辑,例如:相同的判断移到循环外面、缓存需要多次查找的变量等。
优化实例:表现位移逻辑剥离
堆内存优化:
1)控制Lua表(Table)的数量, 优化思路:调整数据结构,将相同含义的数据合在一个表里;高频使用的表不必每次都new等。
2)代码优化,优化思路:注意代码细节,例如:对高频使用的代理可以将其存成全局变量、考虑使用定长数组等。
优化实例:Lua定点数的使用
渲染管线优化
优化策略:优化深度图获取(不使用Z-PrePass减少DC),单Pass后处理(减少全屏Blit次数,优化带宽),iOS带宽优化(Load/Store Action),优化水面GrabPass等
4、工具
通用:Unity Profiler、UWA(got,本地资源检测,真人测试)、Perfdog、Instrument
DrawCalls:UWA工具、Profiler(DC数量)、FrameDebugger(Batch数量)
基于FrameDebugger的当前帧分析工具(Editor可用)
unity自带的统计工具

UI的DC:Unity Profiler
内存:MemoryProfiler
CPU:Profile Analyzer —— 集成在Unity中,基于Unity Profiler 的数据分析工具,可对数据进行保存,导入,对比等操作。
调试:Remote Inspector 可以实时查看和修改手机包中Hierarchy+Inspector
GPU:Unity自带 overdraw,mipmap
粒子:GlobalGetParticleEffectData 一个开源的小工具,用来统计粒子制作阶段的DrawCalls和粒子量,离线工具辅助分析特效的粒子量
合批工具:MeshBaker、自己写场景特效排序工具,辅助批次合并
逆向包资源工具:AssetStudio
iOS专项优化工具:
渲染:Xcode Frame Capture:iOS最好用的帧分析工具(每个渲染指令耗时、Shader耗时占比、一些工具提示的渲染问题、带宽占用)
内存:Instrument
Android分析工具:
帧分析工具:Snapdragon Profiler、RenderDoc |
|