项目进入了中期之后,就需要对程序在移动设备上的表现做分析评估和针对性的优化了,首先前期做优化,很多瓶颈没表现出来,能做的东西不多,而且很多指标会凭预想,如果太后期做优化又会太晚,到时发现一些问题改起来返工量就有太大。前一阵子花了大量时间从 cpu gpu 内存 启动时间 到发热量对项目做了一翻大规模的体检和优化,效果还是显著的,在这里做个笔记,以后开发项目时可以作为经验和提前关注
1.项目情况:笔者所在项目是一个非常重度的手游,甚至开始就是瞄着端游做的,3D世界,2.5D视角,RPG,即使战斗,美术品质要求极高(模型 贴图精度高 ,超过目前市场同类产品)。对于目前大多数移动设备来看,挑战不小,对手机的各种硬件都是挑战。、
2.目标机型:偏中高端,尽量兼容低端,android至少sumsung S3能流畅,ios至少iphone4s流畅。
3.性能指标:内存占用250M以下(这样大量512的机器不会挂掉),初始包100m之内(太多运营不干,太少实在是装不下。。)

用于分析和测试性能的一些利器:

1.首先是unity在编辑器下的statics窗口:提供了dc和顶点数这两个重要指标的查看。缺点在设备看不到,但是对于dc数和顶点数来说,设备和编辑器差不多,用它可以大体看出渲染的压力。
2.unity自带的profiler:可以连接设备看到设备上cpu gpu mem的信息,使用的时候需要勾选development模式。有点是cpu的占用在脚本的层面看的非常仔细,哪个函数占用了太多时间一眼就能看出,基本是分析脚本效率的最佳工具,但是gpu大部分设备不支持看不到,显示的mem信息不太准确,基本上偏离实际占用的内存
3.unity的internal profiler:在playersetting上可以勾选这个选项,勾选后,连接设备,在android的adb或者mac的xcode里会每隔几秒打印出很多关键指标,这个其实非常有用,不过这个功能直到很后期才发现,详细文档见http://docs.unity3d.com/Manual/iphone-InternalProfiler.html
4.android上的adb:adb提供了一组非常强大的分离android程序的工具,http://developer.android.com/tools/help/adb.html
而最常用的是用adb的dumpsys 指令,https://source.android.com/devices/tech/input/dumpsys.html
最常见的包括: adb shell dumpsys meminfo appname 查看实时的内存占用,android的内存分为ps rs,我们一般看ps为准,关于ps rs这些概念可参看http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android
adb shell dumpsys cpuinfo appname 查看实时的cpu占用,注意这里的cpu可能过百,这是因为多核的原因
adb shell dumpsys gpuinfo appname 查看实时的gpu情况
5.android 的monitor
安装adt后,在sdk\tools\monitor.bat下面有个monitor,是我认为android看性能最好的工具之一,因为它是图形化的,而且基本集成了adb的功能,从内存到cpu到gpu,还有很有用的网络流量使用情况,它的cpu占用是c++层面的统计,看不到脚本,这需要突破那个profilor结合。
6.android上的mongkey测试:它可以模拟随机的用户输入,用来验证你的程序的强壮性吧
adb shell monkey -p -v packname 1000
随机模拟1000条用户事件
7.ios:ios上的工具则显得更加专业更加统一一些,ios就用xcode自带的instruments了
这里有个详细的文档https://developer.apple.com/library/mac/documentation/developertools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html
看来这么多工具,其实很多是要配合使用的,做u3d开发,其实不只是学会U3D的事情,要让U3D在手机上运行的好,还需要对各个平台有较深的了解。

利用这些工具法线了一些瓶颈,同时也采取了各种策略来提高性能,反正目标就是cpu占用降低,内存占用减少,启动快,发热小,帧率高,GPU占用少,发现的一些问题和做出的具体的一些努力列举如下:
1.使用assetbundle,实现资源分离和共享,将内存控制到200m之内,同时也可以实现资源的在线更新
2.顶点数对渲染无论是cpu还是gpu都是压力最大的贡献者,降低顶点数到8万以下,fps稳定到了30帧左右
3.只使用一盏动态光,不是用阴影,不使用光照探头
粒子系统是cpu上的大头
4.剪裁粒子系统
5.合并同时出现的粒子系统
6.自己实现轻量级的粒子系统
animator也是一个效率奇差的地方
7.把不需要跟骨骼动画和动作过渡的地方全部使用animation,控制骨骼数量在30根以下
8.animator出视野不更新
9.删除无意义的animator
10.animator的初始化很耗时(粒子上能不能尽量不用animator)
11.除主角外都不要跟骨骼运动apply root motion
12.绝对禁止掉那些不带刚体带包围盒的物体(static collider )运动
NUGI的代码效率很差,基本上runtime的时候对cpu的贡献和render不相上下
13每帧递归的计算finalalpha改为只有初始化和变动时计算
14去掉法线计算
15不要每帧计算viewsize 和windowsize
16filldrawcall时构建顶点缓存使用array.copy
17.代码剪裁:使用strip level ,使用.net2.0 subset
18.尽量减少smooth group
19.给美术定一个严格的经过科学验证的美术标准,并在U3D里面配以相应的检查工具

UNITY3d在移动设备上的一些优化实战(一)-概述相关推荐

  1. 边缘设备上的实时AI人员检测:入门

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 得益于深度学习(DL),实时视频流中的人的实时检测几年前就已经解决了.但是,在边缘和物联网设备上并不总是那么容易,因为它 ...

  2. 一种用于人脸检测的设备上的深度神经网络

    欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 译者:QiqiHe 苹果公司开始在iOS 10中使用深度学习进行人脸检测.随着Vision框架的发布,开发人员现在可以在他们的应用程序中使用这种 ...

  3. 使用 TFLite 在移动设备上优化与部署风格转化模型

    文 / Khanh LeViet 和 Luiz Gustavo Martins,技术推广工程师 风格转化 (Style Transfer) 是一种优化技术,用于采集两张图像,一张内容图像(如建筑物), ...

  4. 响应式设计和移动端优化:如何实现页面在不同设备上的适配和优化

    章节一:介绍响应式设计和移动端优化 响应式设计是一种使网页能够自适应不同设备和屏幕尺寸的设计方法.它通过使用流式网格布局.媒体查询和弹性图片等技术,使得网页能够在不同分辨率和设备上呈现出最佳的布局和用 ...

  5. TensorFlow Lite:TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案 | Google 开发者大会 2018...

    Google 开发者大会 (Google Developer Days,简称 GDD) 是展示 Google 最新开发者产品和平台的全球盛会,旨在帮助你快速开发优质应用,发展和留住活跃用户群,充分利用 ...

  6. 干货 | 如何使用 CNN 推理机在 IoT 设备上实现深度学习

    作者 | 唐洁 责编 | 何永灿 通过深度学习技术,物联网(IoT)设备能够得以解析非结构化的多媒体数据,智能地响应用户和环境事件,但是却伴随着苛刻的性能和功耗要求.本文作者探讨了两种方式以便将深度学 ...

  7. 如何用TensorFlow在安卓设备上实现深度学习推断

    在 Insight 任职期间,我用 TensorFlow 在安卓上部署了一个预训练的 WaveNet 模型.我的目标是探索将深度学习模型部署到设备上并使之工作的工程挑战!这篇文章简要介绍了如何用 Te ...

  8. vue渲染大量数据如何优化_Vue - Table表格渲染上千数据优化

    Vue - Table表格渲染上千数据优化 此次项目经验会谈谈常常在项目中,针对成千上万数据渲染优化的不断探索来谈谈本身的体会,其目的就是保证用户浏览上万条数据的时候,UI要很流畅,确保用户操做过程当 ...

  9. 收藏起来,史上最全的 MySQL 高性能优化实战总结!

    一.前言 MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询 ...

  10. 史上最全的MySQL高性能优化实战总结!

    https://www.jianshu.com/p/4af41b682e06 1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思 ...

最新文章

  1. python语言及其应用-Python语言及其应用.PDF
  2. JavaScript判断图片是否加载完成的三种方式
  3. 【字符编码】彻底理解字符编码
  4. arduino uno r3引脚图_Arduino入门: 安装和熟悉Arduino IDE
  5. SQOOP 导出SQL SERVER中数据
  6. 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(下)
  7. FISCO BCOS PBFT是什么 基础流程
  8. MyBatis3 注解SQL 的使用方法
  9. 远程计算机超出最大连接数,远程桌面超出了最大连接数怎么办呢?
  10. mfc入门基础(三)创建对话框
  11. 反其道而行 - 登录gitbub
  12. 你能获得的数据量越大,你能挖掘到的价值就越多。
  13. BJTU1935 铁憨憨骑士团的购买装备
  14. 【期末大作业】公益网站ps平面设计
  15. 京东产品上架如何批量上传商品素材?
  16. 服务器xp系统网页打不开网页,ie浏览器打不开网页,xp系统ie打不开网页-
  17. vscode 过程试图写入的管道不存在
  18. 【十一】消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
  19. Android:从零开始打造自己的深度链接库(一):ARouter简介
  20. python print用法可以不加引号吗_python的print函数不加括号吗

热门文章

  1. 如何用思维导图快速理解PMBOK-PMP第六版教材
  2. JDK64位安装与JDK环境配置图文教程
  3. [lammps教程]OVITO绘制原子应力云图
  4. MySQL 基础一(B站黑马程序员MySQL教程笔记)
  5. Kali2020.1安装AWVS12 详细过程
  6. Eclipse中文汉化包安装教程
  7. 嵌入式 | 51 单片机《手把手教你51单片机-C语言版》
  8. 干货|手把手教你写单片机的结构体
  9. Eclipse 安装tomcat插件(针对新版本的,Eclipse安装目录没有starup.jar的Eclipse)
  10. 金蝶计算机会计实验报告总结,会计实训总结(精选5篇)