UNITY3D手游优化1认识硬件和资源规范/优化
谈Unity3D优化前,我们首先针对需要优化的机型硬件有个认识。对于每种类型机型有个大概的了解,在优化的时候才更有针对性,每次优化的预期效果才能做到更精准.
以下数据参考比较权威的GeekBench4和gfxBench的数据针对CPU/GPU性能做对比
机型 | CPU/GPU | 单核(GB4) | 多核(GB4) | 1080p T-Rex Offscreen | 备注 |
SmartisanM1 | Snapdragon821/Adreno 530 | 1877 | 4685 | 92.7 |
|
OnePlus 3 | Snapdragon820/Adreno 530 | 1707 | 4135 | 90.1 |
|
Galaxy S5 | Snapdragon801/Adreno 330 | 961 | 2542 | 26.8 |
|
Mi 2S | Snapdragon600/Adreno 320 | 715 | 1666 | 15.3 | 中配机最低要求 |
RedMi 1S | Snapdragon400/Adreno 305 | 501 | 1185 | 5.7 | 低配机最低要求 |
|
|
|
|
|
|
iphone 7 | A10 | 3412 | 5611 | 106.8 | 强大的单核性能 |
iPhone 6s | A9 | 2495 | 4199 | 81.6 |
|
iPhone 6 | A8 | 1548 | 2587 | 48.1 |
|
|
|
|
|
|
|
| i7 4790 | 4332 | 13886 |
|
|
| i3 3240 | 3135 | 5908 |
|
|
| AMD Phenom II X4 955 | 2170 | 6377 |
|
|
| i3 380M | 1816 | 3478 |
| 一代i3笔记本U |
| T2130 | 845 | 1292 |
| 2007的笔记本CPU |
|
|
|
|
|
|
| gtx970 |
|
| 984.2 | 桌面主流GPU依然强大 |
| hd 530 |
|
| 121.7 | i3-6100核显 |
| hd 4400 |
|
| 55.9 | i3-4130核显 |
| hd 3000 |
|
| 30.3 | i3 380M核显 |
| gt 640M |
|
| 98.5 |
|
数据来源
GeekBench4: http://browser.geekbench.com/v4/cpu/search
gfxBench (1080pT-Rex Offscreen): https://gfxbench.com/result.jsp
从以上数据可以看出:
1、IOS系统的流畅一部分得益于单核性能的强大
2、Android而言, 高配的性能瓶颈更可能出现在CPU,中低配可能出现在GPU.低配的效果可以砍的狠点
3、手机硬件发展还是挺快的.可以乐观预期,不久后出现3A制作的手游
4、即使跑分接近,受限于散热,高温降频.手机真实性能也会打些折扣.
大致了解手机硬件后,首先需要做的是制作资源规范.好的规范和自动检测流程是游戏优化的基础.
对于MOBA类游戏,规范如下:
3D角色规范
|
| 高 | 中 | 低 | 高(展示) | 低(展示) |
英雄 | 面数 | 1650 | 900 | 900 | 6500 | 6500 |
贴图 | _MainTex(256) | _MainTex(256) | _MainTex(256) | _MainTex(512) | _MainTex(512) | |
野怪 | 面数 | 1650 | 600 | 600 |
|
|
贴图 | _MainTex(256) | _MainTex(256) | _MainTex(256) |
|
| |
小兵 | 面数 | 600 | 300 | 300 |
|
|
贴图 | _MainTex(128) | _MainTex(128) | _MainTex(128) |
|
|
骨骼数 英雄不要超过40,其他不要超过20
技能特效规范
|
| 高 | 中 | 低 |
特效 | 粒子数量 | 15 | 11 | 8 |
贴图尺寸 | 320 | 320 | 320 | |
面数 | 500 | 500 | 500 | |
渲染器数量 | 6 | 4 | 3 |
场景规范
| 高配 | 中配 | 低配 |
同屏最高面数 | 1.8W | 1.8W | 1.5W |
drawcall | 15 | 15 | 15 |
贴图数量 | 贴图1024*3 透贴512*1 地表256*6 河道256*1 天空盒512*1 基地箭塔512*2 | 贴图1024*3 透贴512*1 地表256*6 河道256*1 天空盒512*1 基地箭塔512*2 | 贴图1024*3 透贴512*1 地表256*6 河道256*1 天空盒512*1 基地箭塔256*2 |
lightmap | 1024*1 | 1024*1 | 512*1 |
功能草透贴(alpha) | 透贴 | 透贴 | 实模 |
其他透贴(alpha) | 有 | 无 | 无 |
地图周边配景 | 有 | 有 | 无 |
出生点特效 | 有 | 有 | 无 |
其他场景特效 | 有 | 无 | 无 |
地表混合 | 单块地表多维子材质数量最多为2个材质球,特殊情况可考虑3个。 | ||
模型Animation Type | None | None | None |
声音规范:
| 高 | 中 | 低 |
同时音效个数 | 20 | 15 | 10 |
环境音 | 有 | 无 | 无 |
其他制作的注意事项
1、3D角色动画和特效上的动画,CullingType默认设置成BaseOnRender,可以减少CPU消耗.
某些特殊的特效动画,是通过把相应的结点设置成active false来做的.如果Anim的所有Render子结点都成false,动画的再次激活就会有问题
对于这些特殊的特效,可以手动检测并相应修正CullingType为AlwaysAnimate.
2、场景内的小物件去掉static,手动合批.能省内
3、不要用UNITY_Terrain
4、Mesh除非有特殊用途,都设置成不可读/写
规范最终保证中配情况的数据如下:
平均dc不超过100,峰值不超过200.三角形峰值不超过60000,均值不超过35000.PSS内存峰值不超过350M,均值不超过320M
在上面规范的基础上,还要有一个自动检测资源的流程,每日把检测结果通知到相关人并敦促修改.
除了资源规范外,还需要:
1、由于技能机制问题(比如单技能产生了5+的同一特效),可能存在资源符合规范但是实际跑起来性能比较差的情况.那么就需要单一英雄实际跑的渲染信息收集.超过一定的值给予警告.
2、每次出新英雄,都要做专项的性能测试.如果性能过差,找出可能的问题并修复
3、引入资源池,循环复用.使用完回收时,不做active = false.通过挪出屏幕来做.
4、自动分析单局信息,做充分的预加载.如果确实限于内存不能完全预载,可以内存越多预载越多的方式来做.
5、团战时,引入一个当前渲染压力的参数值,超过一定值,自动播放低级的效果.