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. CALL FUNCTION 'BAPI_PO_CREATE1' 相关报错

    *&---------------------------------------------------------------------**& Report  ZQJ06*&am ...

  2. linux卸载软件

    rpm -q -a 查询当前系统安装的所有软件包 rpm -e 软件包名 参数e的作用是使rpm进入卸载模式,对名为某某某的软件报名进行卸载 rpm -e 软件包名 -nodeps 由于系统中各个软件 ...

  3. linux撤销命令

    u撤销上一步操作 ctrl+r恢复上一步被撤销的操作

  4. 微信小程序开发:学习笔记[3]——WXSS样式

    微信小程序开发:学习笔记[3]——WXSS样式 快速开始 介绍 WXSS(WeiXin Style Sheets)是一套用于小程序的样式语言,用于描述WXML的组件样式,也就是视觉上的效果. WXSS ...

  5. Swift 烧脑体操(四) - map 和 flatMap

    前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困 ...

  6. 调用微信接口token的问题

    前言 微信的影响力众所周知,越来越多的人也都离不开它,工作,生活,社交的好帮手.相信大家对微信公众号,小程序也都不陌生,那么在开发公众号,小程序的时候需要调用到微信的接口,固然就会遇到token的问题 ...

  7. hdu1015 —— 回溯

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 因为之前看了下刘汝佳的<算法入门经典>,就用类似打印全排列,八皇后的方法做.本以为不 ...

  8. redis简介及安装

    1 redis简介及安装 1.1 Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. 首 ...

  9. 蓝天白云大草原风景PSD背景素材

    蓝天白云大草原风景PSD源文件背景素材,蓝天白云,大草原,风景,背景素材,自然风景,草原景色,绿色清新背景 地址:http://www.huiyi8.com/psd/

  10. 分享知识-快乐自己:Linux—jdk 安装步骤

    1.查看现有版本:java -version 2.查看jdk的具体版本: rpm -qa| grep jdk || rpm -qa| grep gcj 3.删除已安装jdk包: rpm -e --no ...