Unite 2017 干货整理 优化篇

2017年05月16日

  将Unite 2017的一些演讲做了整理。 

  本篇有内存,CPU、GC、UI、渲染性能指标、Tips几个小节。 

  内容持续整理中。  

内存:

  1.Model Import Setting:Read/Write Enable 

  2.FBX Import Setting : Animation Type Generic ->None 

  3.Texture Import Setting:Generate MipMap 

  4.Audio import Setting: ios -> mp3, android ->vorbis (Force to mono) 

  5.Animation Clip 60 fps ->30 fps 

  6.Audio Clip Sampling rate : 40K ->20k 

  7.小的音频文件采用Decompress On Load 

  8.Model Import Setting : Normals & Tangents -> None 

  9.去掉不必要的Alpha通道 

  10.表格二进制化

  11.String使用intern处理 

  12.删除相同关键帧,自动以关键帧压缩 

  13.避免一些临时资源重复创建,例如www.texture 

  14.拆分alpha,对于没有渐变过度的alpha图进行尺寸压缩 

  15.控制Object池的使用,LRU算法 

  16.Android机必须使用ETC,IOS(PVRTC) 

  17.声音削减采样,尽量使用单声道或OGG格式 

  18.ETC1不支持带Alpha通道压缩纹理,拆分成2张ETC 

  19.模型压缩

CPU:

  1. 使用API预先编译Shader:Shader.WarmupAllShader(Shader Variant Collection) 

  2. 减少更新 

    ·unity animator optimize game object 

    ·及时停止不必要的Update 

      ·Animator 

      ·ParticleSystem 

    ·减少Billboard和Animation的Update操作 

  3.加载 

    ·使用加载队列 

    ·人物分帧异步加载 

    ·平衡预加载和即时加载的数量和大小 

  4.耗时操作分散离散到各帧 

  5.主动隐藏不在镜头内的动画对象

GC

  1.尽可能地减少new 

  2.优化不合适的new 

  3.使用object Pool 

  4.自定义的数组分配池,重写容器类 

  5.减小内存碎片 

  6.减少c#语言特性上的内存分配 

    ·foreach 

    ·重用函数delegate 

    ·string combine/split 

    ·减少反射的使用 

    ·封包拆包操作 

  7.每帧GC建议在100k以内

UI

  1.优化Panel,动静分离,降低Draw Call 

  2.针对飘字做特别优化 

    ·控制频率 

    ·控制数量 

  3.适当降低某些UI的更新频率 

  4.UI可以多线程合批,性能跟手机核心数有关 

  5.UICanvas划分一般准则 

    ·一个Canvas包含所有静态和不会改变的UI组件 

    ·另一个Canvas存放所有动态UI组件,如果动态UI数量较大,可以继续细分

  6.射线(Raycast)优化 

    ·必要的UI组件才开启"Raycast Target" 

    ·开启"Raycast Targets"的UI组件越少,层级越浅,性能越好 

    ·对于复杂的组件,尽量在根节点开启“”Raycast Targets" 

    ·OverrideSorting属性会打断射线,可以降低层级遍历的成本

  7.字体优化 

    ·预留足够的空间,避免字体出框(影响体验) 

    ·避免字体打断批处理 

    ·一般不建议使用best fit

渲染:

  1.减少Shader Map大小(自定义实现) 

  2.减少后处理等需要的rt数量和大小 

  3.按需重写默认的Shader 

  4.优化复杂的Shader 

    ·复杂特效的Shader需要特别优化(去除cutout,合并blend,优化指令数) 

    ·使用数学手段 

    ·使用Shader LOD 显示不同的效果,按机型使用vertex light和pixel light 

  5.避免使用alphaTest 

  6.适当增加面数,尽量减少后处理 

  7.削减PS指令数,转移到VS 

  8.注意不透明物体渲染顺序

  9.PC平台建议选择延迟渲染模式 

  10.移动平台如果不追求极限画质,建议选择前向渲染模式 

  11.如果移动平台追求画质,建议选择延迟渲染模式 

    ·要注意移动设备分辨率影响 

    ·给低配机器再写一条渲染管线 

  12.IOS读取设备机型,安卓读取显卡型号决定渲染质量等级(可建立配置表) 

    ·未知型号建立渲染等级判断方案(CPU主频,显存,FPS) 

    ·可根据此等级决定Shader和特效的渲染效果

  13.用一个图集处理所有粒子 

  14.控制半透明对象数量 

  15.多通道Shader不会合批 

  16.记得剔除不必要的背面绘制 

  17.Zwrite会占用带宽 

  18.混合(Blend)可能会导致Overdraw问题 

  19.尽量自己写Shader 

  20.控制带宽 

    ·贴图过滤选项 

    ·Mipmap 

    ·贴图大小 

    ·自定义的Buffer

  21.合并全屏滤镜 

  22.尽量使用unity宏 

  23.预加载shader 

  24.透明 

  25.自己写剔除代码 

  26.自己实现阴影 

  27.不再建议使用grab pass

性能指标

  1.android 2g 低端机型 20-25 fps 内存不超过350mb 

  2.iOS 1g 低端机型运行20-25fps 内存不超过300mb 

  3.启动过场景速度尽量控制在5秒以内

Tips:

  1.输出2800*2000以上分辨率游戏截图 

    void CaptureScreenshot(string filename,int superSize = 0)

  2.并不是上PBR就会比之前效果好 

  3.要出好效果需要美术和程序坐在一起细心调试 

  4.PBR需要美术调整美术制作流程 

  5.PBR并不会大幅度增加硬件开销

  6.配置受光面(光源方向自己传入) 

  7.自己算反射源(环境光自己计算) 

  8.调整Shader LOD的API: 

    Shader.globalMaximumLOD 

    Shader.maximumLOD

  9.使用静态分析器优化代码 

    ·使用方法(VS2015以后版本) 

    1.Tools->NuGet Package Manager ->Manage NuGet Packages for solution 

    2.Browse -> UnityEngineAnalyzer

Unite 2017 干货整理 优化篇的更多相关文章

  1. Unite 2017 干货整理 同步篇

    http://www.kisence.com/2017/05/17/unite-2017-gan-huo-zheng-li-tong-bu-pian/ Unite 2017 干货整理 同步篇 2017 ...

  2. Unite 2017 | 基于Animation Instancing的大规模人群模拟

    在Unite 2017的国内技术专场,Unity技术团队为参会者们带来了Unity引擎功能相关的技术分享.今天这篇文章,将由Unity技术支持工程师金晓宇为大家分享基于Animation Instan ...

  3. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...

  4. Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log

    日常啰嗦 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外,这段时间也在学习docker的相关知识,所以博客就没有继续写了,推荐一本书<Docker技术入门与实战>(第二版) ...

  5. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化

    本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...

  6. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化

    阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...

  7. 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓

    汇聚了来自全球的 Unity开发者.发行商.培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日-13日在上海·国际会议中心隆重举行.Unite 大会是由 Unity ...

  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇

    优化篇 Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log Spring+SpringMVC+MyBatis+easyUI整合优化篇 ...

  9. (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)

    干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...

随机推荐

  1. 怎样拆分View Controller进而实现轻量级的View Controller[UIKit]

    參考文章来自objcio站点   为什么要编写轻量级的View Controller??   1.作为iOS项目中最大的文件,ViewControllers中的代码复用率差点儿是最低的 2.重量级的V ...

  2. elasticsearch 简单聚合查询示例

    因为懒癌犯了,查询语句使用的截图而不是文字,导致了发布随笔的时候提示少于150字的随笔不能发布. 我就很郁闷了. 下面的查询都是前段时间工作中使用过的查询语句. 开始的时候是使用nodejs构建es查 ...

  3. leetcode 890. Possible Bipartition

    Given a set of N people (numbered 1, 2, ..., N), we would like to split everyone into two groups of ...

  4. ASP.Net .Net4.0 HTTP 错误 404.17 - Not Found

    源:ASP.Net .Net4.0 HTTP 错误 404.17 - Not Found 用了网上很多方法,最后是用这个网友的方法解决的,在此做个记录. VS2010编写WebService与在IIS ...

  5. Matlab图像处理(03)-基本概念

    概念定义 动态范围:灰度跨跃的值域称为动态范围.上限取决于饱和度,下限取决于噪声. 对比度:一幅图像中最高和最低灰度级间的灰度差. 空间分辨率:图像中可辨别的最小细节的度量.常用度量每单位距离线对数和 ...

  6. adaptiveThreshold自适应二值化源码分析

    自适应二值化介绍: 二值化算法是用输入像素的值I与一个值C来比较,根据比较结果确定输出值. 自适应二值化的每一个像素的比较值C都不同,比较值C由这个像素为中心的一个块范围计算在减去差值delta得到. ...

  7. 【C】四则运算生成和核对器----by郁卓、谢明浩

    [Github项目地址] 完成功能: 1. 使用 -n 参数控制生成题目的个数 2. 使用 -r 参数控制题目中数值(自然数.真分数和真分数分母)的范围 3. 生成的题目中计算过程不能产生负数,也就是 ...

  8. jmeter-sampler(取样器)HTTP请求

    名称:用于标识一个sample. 注释:对于测试没任何影响,仅用来记录用户可读的注释信息. 服务名称或IP:http请求发送的目标服务器名称或者IP地址,比如:http://www.baidu.com ...

  9. listen 72

    Warmer Temps May Bollux Botanicals Global warming might seem like a botanical boon. After all, milde ...

  10. OpenCV——PS滤镜算法之 球面化 (凹陷效果)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...