一、美术资源优化
 
1.动态物体,角色、怪物、NPC
(1)控制面的数量,300-2000个
(2)控制Skinner Mesh Renderer的数量,1个
(3)控制材质数量,1-3个
(4)控制骨骼的数量,小于30个
2.静态物体
(1)控制网格顶点数,少于500个
(2)标记为static,静态批处理
(3)移除不需要的组件
3.自带地形
(1)控制地形的分辨率,高度图尺寸小于257
(2)地形纹理中尽量使用少的混合纹理数,不要超过4个
4.纹理
(1)格式,采用压缩格式
(2)尺寸,长宽小于1024
(3)建议使用MipMap,有可能增加程序大小,但会提高渲染效率
5.音频
(1)长音乐(背景音乐),使用ogg或mp3格式
(2)短音乐,使用wav或aif格式的未压缩格式
 
二、引擎优化(设置)
 
1.光源
(1)控制光源的数量,数量越多,drawcall越多
(2)控制Important光源的数量(实时作用于动态物体),1个或0个
(3)Pixel Light Couht(动态物体上作用的光源数量,不包含mportant光源),1-2个
2.相机
    裁剪平面,根据不同场景进行不同的修改
3.粒子
(1)屏幕上的粒子总数,建议小于200个
(2)每个粒子发射器发射的粒子总数,建议小于50个
(3)粒子的大小,粒子的size应尽可能的小
(4)对于非常小的粒子,在粒子的纹理中可以去除Alpha通道
4.物理引擎
(1)尽量使用Sphere Collider/Box Collider,避免使用Mesh Collider
5.渲染
(1)避免使用Alpha Test和Alpha Blend,Alpha Test的性价比较低,可能的话使用Alpha Blend代替Alpha Test
(2)将使用的Alpha Test和Alpha Blend的像素数降至最低,尽量不要超过两个两个屏幕的像素数
 
三、DrawCall
 
1.Static Batching
原理:<1>静态VertexBuffer + 动态IndexBuffer
           <2>将同种材质的物体合并在一个大的VertexBuffer中
           <3>在运行时,通过视锥裁剪来动态的改变IndexBuffer
注意:使用static batching后会额外增加内存开销来存储Batch后的数据
 
2.Dynamic Batching,对于相同材质的动态物体,Unity会自动对其进行batching
原理:<1>动态VertexBuffer + 动态IndexBuffer
 
注意:<1>目前之支持小于900顶点的网格物体
      <2>如果shader中使用了Position/Normal/UV三种属性,只能Batching 300顶点以下数的物体;如果使用Position/Normal/UV/UV1/Tangent等属性,则只能Batching 180顶点以下的物体
      <3>缩放物体无法与非缩放物体进行Batching
 
四、纹理合并
 
五、遮挡剔除,Occlusion Culling
 
六、代码.
if(Time.frameCount % 6 == 0){ }
(2)减少使用临时变量,尤其是在Update方法中
(3)定期垃圾回收
(3)优化数学运算:<1>减少使用float,使用int
                   <2>减少使用复杂的数学函数,比如sin/cos等函数
                   <3>改除法为乘法
 

Unity3D性能优化的更多相关文章

  1. Unity3D性能优化--- 收集整理的一堆

    http://www.cnblogs.com/willbin/p/3389837.html 官方优化文档--优化图像性能http://docs.unity3d.com/Documentation/Ma ...

  2. Unity3D - 性能优化之Draw Call

    Unity3D - 性能优化之Draw Call 分类: Unity 3D2012-09-13 11:18 1002人阅读 评论(0) 收藏 举报 性能优化引擎测试脚本图形算法 Unity(或者说基本 ...

  3. Unity3D 性能优化

    Unity3D 性能优化 一.程序方面 01.务必删除脚本中为空或不需要的默认方法: 02.只在一个脚本中使用OnGUI方法: 03.避免在OnGUI中对变量.方法进行更新.赋值,输出变量建议在Upd ...

  4. Unity3D性能优化小tips——把this.transform缓存缓存起来

    Unity3D开发时中有一个小tips,这在官方的文档里其实有提及的,但不那么显眼,这里小说一下: 在MonoBehaviour进行编程时,我们经常会用this.transform, this.gam ...

  5. Unity3D性能优化之Draw Call Batching

    在屏幕上渲染物体,引擎需要发出一个绘制调用来访问图形API(iOS系统中为OpenGL ES).每个绘制调用需要进行大量的工作来访问图形API,从而导致了CPU方面显著的性能开销. Unity在运行时 ...

  6. Unity3D性能优化总结

    一.程序方面 01.务必删除脚本中为空或不须要的默认方法: 02.仅仅在一个脚本中使用OnGUI方法. 03.避免在OnGUI中对变量.方法进行更新.赋值,输出变量建议在Update内. 04.同一脚 ...

  7. Unity3D性能优化最佳实践(四)资源审查

    Asset auditing - 资源审查 许多项目发生效能问题的真正原因只是由于人员操作不当或是试东试西,而不小心改到导入设定影响到导入的资源.(例如最近的gitlab惨案) 对于较大规模的项目,最 ...

  8. (转)Unity3D - 性能优化之Draw Call

    Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),索引(顶点如 ...

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

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

随机推荐

  1. zabbix-3.0.3 mysql表分区的方法

    目的:解决mysql空间越来越大,mysql性能出现瓶颈,zabbix会无端出现大量agent超时报警 中间遇到一个mysql问题:5.1版本的mysql不支持分表(其实是支持的,需要重新编译mysq ...

  2. 如何利用报表工具FineReport实现报表列的动态展示

    相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活.现有的方式都是通过变向的隐藏等方式来实现. 那该如何解决呢?这里分享帆软报表设计器FineReport的实 ...

  3. 项目自动化建构工具gradle 入门3——生一个exe的helloWorld

    前两次呢,我们能够用一个外部的jar 来实现输出helloWorld.但问题是我每次都要用java -jar 来执行,这样我们自己玩还可以,让用户玩就不好了.所以我们生成一个exe给他们吧.这次我们仍 ...

  4. jpa

    学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...

  5. 让div盒子相对父盒子垂直居中的几种方法

    div相对于父盒子垂直居中的几种方法,之前在网上看到很多种方法,确实说的很对,也很具体,但是我感觉对于初学者来说,一目了然是最重要的,所以,我把很高深的技巧,和很复杂的css样式都剔除掉,旨在让更多人 ...

  6. Weekly Traning Farm 16

    先安利一下这套比赛,大概是doreamon搞的,每周五晚上有一场,虽然没人做题目质量挺高的 http://codeforces.com/group/gRkn7bDfsN/contests(报名前要先报 ...

  7. [LeetCode] Longest Consecutive Sequence 求最长连续序列

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  8. CSS布局

    1流动模型 先来说一说流动模型,流动(Flow)是默认的网页布局模式.也就是说网页在默认状态下的 HTML 网页元素都是根据流动模型来分布网页内容的. 流动布局模型具有2个比较典型的特征: 第一点,块 ...

  9. 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法

    手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法 最近碰到Android微信内置浏览H5页面,因为其中的文本输入框(input)放置在靠近页面的中下方,点击文本框以后,则输入框会被弹出的手机 ...

  10. javascript-style-guide

    /* 1.类型types 原始值:存取直接作用于它自身 string number boolean null undefined var foo=1; var bar=foo; bar=9; cons ...