Unite 2017 干货整理 优化篇
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 干货整理 优化篇的更多相关文章
- Unite 2017 干货整理 同步篇
http://www.kisence.com/2017/05/17/unite-2017-gan-huo-zheng-li-tong-bu-pian/ Unite 2017 干货整理 同步篇 2017 ...
- Unite 2017 | 基于Animation Instancing的大规模人群模拟
在Unite 2017的国内技术专场,Unity技术团队为参会者们带来了Unity引擎功能相关的技术分享.今天这篇文章,将由Unity技术支持工程师金晓宇为大家分享基于Animation Instan ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log
日常啰嗦 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外,这段时间也在学习docker的相关知识,所以博客就没有继续写了,推荐一本书<Docker技术入门与实战>(第二版) ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化
阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...
- 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓
汇聚了来自全球的 Unity开发者.发行商.培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日-13日在上海·国际会议中心隆重举行.Unite 大会是由 Unity ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇
优化篇 Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log Spring+SpringMVC+MyBatis+easyUI整合优化篇 ...
- (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)
干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...
随机推荐
- Halcon下载、安装
下载地址: 官网:http://www.halcon.com/halcon/download/ Halcon学习网:http://www.ihalcon.com/read.php?tid=56 { 最 ...
- pymysql 模块的使用
一 . pymysql 的下载和使用 在python 中操作数据库需要用到 pymysql 模块. (1) . pymysql 模块的下载 pip3 install pymysql (2) . ...
- hadoop —— MapReduce例子 (数据排序)
参考:http://eric-gcm.iteye.com/blog/1807468 file1.txt: 2 32 654 32 15 756 65223 file2.txt: 5956 22 650 ...
- SDUT OJ 2616 简单计算
简单计算 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 某天,XX 给YY 出了一道题,题目是: 给出n 个十进制的数,找出这n ...
- Could not find JSON in http://updates.jenkins-ci.org/update-center.json?id=default&version=2.7.4
14-Sep-2016 21:43:58.241 INFO [Download metadata thread] hudson.model.AsyncPeriodicWork$1.run Finish ...
- Ubuntu 更新/安装nodejs
nvm nvm是一个开源的Node版本管理器,通过简单的bash脚本来管理.切换多个Node.js版本.和nvm提供类似功能的还有tj写的n,它们的功能大同小异,整体来说nvm要稍强大一下.值得注意的 ...
- jupyter-notebook重设项目工作路径
一. . Anaconda Prompt 命令(方法没生效) 1 选择一个用于存放config文件的文件夹(先创建) 2 在cmd中进入该文件夹的路径 3在cmd中 输入命令 jupyter not ...
- 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)
c#实现P2P文件分享与传输系统 二.设计 - 续(NAT穿透) 首先要抱歉,因为这些日子较忙,没有写文章,这个系列拖了很久,现在开始继续. 上一篇文章介绍了p2p系统Tracker Server和 ...
- BZOJ1146:[CTSC2008]网络管理
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...
- C++多态的实现条件
#include <iostream> class Person{ public: virtual void say(){ std::cout<<"person&qu ...