1.内存和包体优化
https://blog.csdn.net/qq_28976599/article/details/126270475
2. 计算加速
1). 开启多线程加速
2).分帧计算(也算加速吧)
3).jobSystem + burst
线程安全的多线程处理结构(jobSystem) + 基于硬件优化的llvm加速编译器,将IL/.NET 二进制代码转换为高度优化的机器码(burst)
burst链接: link
burst用的少的话最好只做简单类型的计算,有很多类型和语法的限制在里面
另外对汇编也不是很熟,对当前机型的支持率也没有对应的概念
4).compute shader
大规模GPGPU算法,类似于CUDA,DirectCompute、OpenGL Compute等(不同渲染框架的不同叫法)
硬件配置:android: opengl es 3.1, ios:metal api
3.代码优化
1) gc相关:Strings,Unity函数调用(GameObject.tag等),Boxing,Coroutines,LINQ与Regular Expressions,定时、定策略的gc,使用增量式垃圾回收
2) 代码执行相关:Update更新代码优化,空update移除,删去多余Debug,Animator.StringToHash等,选择正确的数据结构,缓存GameObjects和组件,对象池策略
3)发热:cpu在30帧时耗时需不超过22ms, 60帧为每帧11毫秒。
4.draw call
- ui的draw Call 链接: link
- 场景DrawCall
静态合并:内存翻倍,效率高
动态合并 打断的条件: 900 vertex attributes/no more than 300 vertices.
transform的镜像, 不同的材质 , lightMap, 多pass
可动态合并类型: Mesh Renderers,Trail Renderers, Line Renderers, Particle Systems and Sprite Renderers
unity draw call batching: link
3)gpu instance : 低内存,高效率,但不可裁剪
4)提前合并: 合贴图,分uv
5)项目中遇到blendshap使用compute skinning的时候会生成300多个DispatchCompute的DC,此时关掉compute skinning会有比较好的优化效果
5.gpu
1.带宽(降纹理大小验证):手机gpu带宽其实很吃紧
2. 像素计算(降分辨率验证): 透明对象的overDraw严重,复杂shader计算。对应场景对象的分级排序管理(zTest)。
3. 顶点相关
4. 附上大佬整理的渲染优化策略图
6.资源对应的一揽子设置
动画帧的内存,减帧,精度,读写,网格对应的设置,纹理贴图,项目的一堆设置等
7.常用性能工具
unity profiler,unity frameDebugger,本地资源可视化工具, uwa对应工具,render Doc,snapDragon profiler.