===============================================================================

美术规格:

1、单个蒙皮网格渲染器
2、一个模型尽可能对应一个材质
3、移动平台:小于30个的骨骼 ;PC平台:大概15~60个骨骼
4、移动平台不要使用unity地形
5、模型三角面片数 :300 ~ 1500
6、静态模型:网格顶点数少于500
7、贴图大小使用256 ,使用压缩纹理模式
8、移动平台使用轻量级”移动平台”的着色器
9、移动平台:同屏面数不能超过五万,顶点数八万以下,DC控制在100以内
10、不使用阴影 不使用动态光照
11、使用LightMaps烘培光照贴图
12、双声道一致时可以转换成单声道
13、资源提取减小包体积

===============================================================================

影响性能的因素:

CPU:
过多的Draw Calls ( DrawCall是CPU调用底层图形接口。比如有上千个物体,每一个的渲染都需要去调用一次底层接口,而每一次的调用CPU都需要做很多工作,那么CPU必然不堪重负 )
复杂的脚本 ( 不重要的可以间距调用不用Update ) 或者物理模拟 ( 少用物理组件 )
频繁的GC ( GC是用来处理内存的,但是是由CPU来使用GC去处理内存,增加CPU开销 , 所以要尽量少的触发GC )
提高代码质量 , 代码优化 ( foreach , 字符串操作 )

GPU:
填充率,可以简单的理解为图形处理单元每秒渲染的像素数量
像素的复杂度,比如动态阴影,光照,复杂的shader等等
几何体的复杂度 , 减少计算复杂度(减少顶点数量)
GPU的显存带宽: 压缩图片,以适应显存带宽
MipMap

内存:
Unity3D内部内存
Mono托管内存
若干我们自己引入的DLL或者第三方DLL所需要的内存

顶点处理:
过多的顶点
过多的逐顶点计算

像素(Fragment)处理:
过多的fragment,overdraws
过多的逐像素计算

带宽:
尺寸很大且未压缩的纹理
分辨率过高的frame buffer

===============================================================================

优化技术:

顶点优化:
优化几何体
使用LOD(Level of detail)技术
使用遮挡剔除(Occlusion culling)技术

像素优化:
控制绘制顺序
警惕透明物体
减少实时光照

CPU优化:
减少Draw Calls
静态批处理 Batching static
动态批处理
利用网格的顶点数据信息 ( 合并到材质球 )
四分图或二分图
剥离A通道
减少GC ( 代码优化 )
字符串优化
循环优化
Update优化

GPU 优化:
减少绘制的数目
保持材质的数目尽可能少。这使得Unity更容易进行批处理
使用纹理图集(一张大贴图里包含了很多子贴图)来代替一系列单独的小贴图。它们可以更快地被加载,具有很少的状态转换,而且批处理更友好
合并网格合并材质纹理 , 而不是合并成子网格
如果使用了纹理图集和共享材质,使用Renderer.sharedMaterial 来代替Renderer.material
使用光照纹理(lightmap)而非实时灯光
使用LOD,好处就是对那些离得远,看不清的物体的细节可以忽略
遮挡剔除(Occlusion culling)
使用mobile版的shader , 因为简单
大型场景可使用九宫格场景切割法
优化显存带宽
压缩图片,减小显存带宽的压力。
OpenGL ES 2.0使用ETC1格式压缩等等,在打包设置那里都有
使用mipmap

内存优化:
管理好内存 , 合理释放
四分图或二分图
GC触发的两种情况:
1) 堆的内存不足时,会自动调用GC。
2) 我们自己也可以手动的调用GC。
3) 当GC超过200B

带宽优化:
减少纹理大小
利用缩放

动画:
控制骨骼数
减少动画帧数
Animator优化

===============================================================================

关于批处理与合并

动态批处理 :
同一材质 , 满足动态批处理限制条件 , 如顶点限制等 , 即可被unity自动动态批处理
可以移动

静态批处理 :
只需勾选静态项 , unity则会进行静态批处理 , 把静态项的物体全部合并到一个网格里面 , 但是他们都是子网格 , 在这个整体的静态网格内 , 只有使用同一个材质的网格才会被批处理合并DC , 静态批处理没有限制条件 , 但是会多出一份合并网格的内存 , 静态物体不可移动

合并网格纹理集 :
以上批处理都需要满足的一个条件就是需要同一材质 , 我们可以合并网格UV 从而使多个物体使用一个材质 , 从而批处理优化 .
情况一:
把多个网格合并UV , 然后多个网格使用一个纹理集 , 如果满足动态批处理的限制条件可不勾选静态项 , 让其动态批处理 , 如果不满足 , 则需要勾选静态项 , 让其静态批处理 , 从而优化DC

情况二:
把多个网格合并UV , 然后再把他们合并成一个网格使用一个纹理集材质 , 这样做也没有动态批处理和静态批处理( 除非场景里有多个这个合并的网格存在.. )的概念 , 因为它已经被合并成一个单网格 , 只有一个材质 , 所以也只有一个DC , 好处是不需要勾静态项 , 优化了内存 , 可以移动 , 但是不足处是增加了的包体大小 , 原因是增加了一份合并网格的本地资源.

所以优化就要根据具体情况做出对应的取舍啦 !

unity3d之游戏优化的更多相关文章

  1. 移动平台Unity3D 应用性能优化

    WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...

  2. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  3. 《Unity3D/2D游戏开发从0到1》正式出版发行

    <Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息:      书籍的名称: <Uni ...

  4. Unity3D手机游戏开发

    <Unity3D手机游戏开发> 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 ...

  5. Unity3D - 图形性能优化:优化着色器载入时间

    Unity官方文档之"图形性能优化-优化着色器载入时间"的翻译,E文链接. Optimizing Shader Load Time 优化着色器载入时间 Shaders are sm ...

  6. unity3D:游戏分解之曲线

    一提到曲线,很多新手就头疼了,包括我.查了很多资料,终于有个大概的了解.想深入了解曲线原理的,推荐一个链接http://www.cnblogs.com/jay-dong/archive/2012/09 ...

  7. 关于《Unity3D/2D游戏开发从0到1》书籍再版说明

    关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于U ...

  8. Unity3D 入门 游戏开发 Unity3D portal game development

    Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...

  9. unity3d 给游戏添加音源 Unity3d adds a sound source to the game

    unity3d 给游戏添加音源 Unity3d adds a sound source to the game   作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:3131345 ...

随机推荐

  1. 脚本:定时释放 Linux/CentOS 缓存【转载自:杭州山不高】

    定时释放Linux/CentOS缓存的脚本(yl_dropcaches)如下: #!/bin/bash used=`free -m | awk 'NR==2' | awk '{print $3}'` ...

  2. Myeclipse设置自动联想功能

    ///声明,博客园暂无转载功能,这篇博客是转载自贞心真义. 最近初学Java,正在使用MyEclipse来编写新的项目,刚开始打开MyEclipse感觉这个工具既陌生又熟悉,熟悉之处在于编辑器的几大共 ...

  3. 计算机网络课设之TCP通讯录

    这篇文章我主要是想对这学期末计算机网络课程设计所做的一个小项目也就是基于tcp协议的通讯录做一个总结梳理.项目的具体的代码实现是基于C语言,当然在此之前网上也有一些基于c++编写的tcp通讯录,原理都 ...

  4. 实现函数 ToLowerCase()

    /** * 实现函数 ToLowerCase(),该函数接收一个字符串参数 str, 并将该字符串中的大写字母转换成小写字母,之后返回新的字符串. * 输入: "Hello" * ...

  5. Carte上面的作业1、2天就会丢失的问题

    发现Carte上面的作业莫名其妙就会没有,问了客户的维护人员说也没删除. 对象时间也是No Limit,但还是隔1.2天就不见了. 那说明之前配置这里还是无效 <slave_config> ...

  6. Codeforces Round #556 (Div. 2)-ABC(这次的题前三题真心水)

    A. Stock Arbitraging 直接上代码: #include<cstdio> #include<cstring> #include<iostream> ...

  7. Android的启动模式(下)

    Android中的启动模式(下) 在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的 ...

  8. (转)CentOS 7 安装 Python3、pip3

    原文:https://ehlxr.me/2017/01/07/CentOS-7-%E5%AE%89%E8%A3%85-Python3%E3%80%81pip3/ CentOS 7 默认安装了 Pyth ...

  9. CentOS 7进入救援模式的方法

    CentOS 7版本进入救援模式并修改密码:方法1: runlevel 显示当前的运行级别(进入救援模式需要进入单用户模式) 方法2: ①.开机时随便按下键盘,进入系统选择菜单 ②.选择第一项,按e键 ...

  10. div实现高度自适应的textarea

    textarea使我们常常使用的一种表单形式,多用于大段文字的输入,大多数情况下,textarea都是可以满足需求的,但是当我们希望这个输入框高度自适应的时候,textarea就很难做到了. ok,主 ...