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. winserver 资源下载

    http://msdn.itellyou.cn/  下载各种系统资源,支持迅雷下载,速度杠杠的

  2. 浅尝NODE.js

    Node.js是Google公司开发的,安装好必要的环境以后,可以在服务端上跑的js,可以接收和回应http请求,所有方法都支持异步回调,大大提高事务执行效率. 学习地址:http://www.run ...

  3. 解决MAC Appium设备连不上IOS的的问题'idevice_id' program is not installed

    解决MAC Appium设备连不上IOS的的问题 错误的: [XCUITest] The 'idevice_id' program is not installed. If you are runni ...

  4. Java for LeetCode 087 Scramble String

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  5. American Heritage usaco

    基础题,主要思路是找到根,然后分别递归即可: #include<iostream> #include<cstring> #include<string> #incl ...

  6. 《CSS权威指南(第三版)》---第一章 CSS和文档

    主要学习的知识是怎么把CSS和HTML文档关联: 1.这是默认的样式表 <link rel="stylesheet" href="" type=" ...

  7. <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目

    项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...

  8. UEditor上传文件的默认地址修改

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text.Re ...

  9. 搭建LoadRunner中的场景(二) 集合点

    Rendezvous: 这个单词来自于法语,军队集合的意思.LoadRunner中是指各虚拟用户在同一时刻完成指定的操作. 一. 集合点设置步骤 1. 在脚本中需要测试并发性能的操作之前加入集合点. ...

  10. RabbitMQ消息队列随笔

    本文权当各位看官对RabbitMQ的基本概念以及使用场景有了一定的了解,如果你还对它所知甚少或者只是停留在仅仅是听说过,建议你先看看这篇文章,在对RabbitMQ有了基本认识后,我们正式开启我们的Ra ...