Unity3D性能优化

摘要:
小于30。2.静态对象(1)控制网格顶点的数量,静态批处理(3)移除不需要的组件。3.内置地形(1)控制地形的分辨率,高度图大小小于257。(2) 在地形纹理中使用尽可能少的混合纹理,并使用wav或aif格式的未压缩格式。2.发动机优化(设置)1。光源(1)控制光源的数量,调用次数越多(2)控制重要光源的数量(实时作用于动态对象)。
一、美术资源优化
 
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性能优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++的关键字 explicit的作用———菜鸟级日记远程url文件地址转成byte下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

为什么要先装IIS后装.Net Framework?

1.动态页面和静态页面的区别   动态页面(动态网站):通过C#代码(或别的语言)与服务器的交互的实现(比如新建一个ashx一般处理程序中的C#代码就可以和服务器实现交互,修改数据库,上传图片等都属于和服务器的交互)  静态页面(静态网站):纯HTML+CSS+javascript开发的页面,负责页面的展示效果开发的网站一般是动静结合 2.为什么要先装II...

浅谈MindSpore的动态Shape

写在前面   在MindSpore开发过程中,由于动态Shape算子的开发需求,再加上MindSpore的动态Shape也在持续完善,笔者遇到了框架上的一些问题。通过查看源码和相关文档的方式,获得了初步的解决方案和感悟。这篇博客主要是将当时的见闻加以整理,并给出一点点开发建议。此外,当时笔者还做了组内分享,附件是分享的胶片,如果不想看文字版,也可以直接看胶...

Maven 多模块父子工程 (含Spring Boot示例)

 一、为什么要用Maven多模块 假设有这样一个项目,很常见的Java Web应用。在这个应用中,我们分了几层: Dao Service Web 对应的,在一个项目中,我们会看到一些包名: org.xx.app.dao org.xx.app.service org.xx.app.web org.xx.app.util 但随着项目的进行,你可能会遇...

MyBatis(五)MyBatis动态SQL

MyBatis 目录 MyBatis(一)MyBatis初识 - 青杉 - 博客园 (cnblogs.com) MyBatis(二)MyBatis标签 - 青杉 - 博客园 (cnblogs.com) MyBatis(三)MyBatis resultMap和注解 - 青杉 - 博客园 (cnblogs.com) MyBatis(四)MyBatis关联(级...

对象建模

面向对象建模 建模:为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。 建模的目的:减少复杂性。 面向对象方法最基本的原则:按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件。 用面向对象方法开发软件,通常需要建立3种形式的建模,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和...

Android实现简单的检测手机自由落体关闭屏幕

实现功能如下:在背景运行app,检测到自由落体状态时,熄灭屏幕,可重复测试。 1. 检测自由落体动作  需要使用到加速度感应器 TYPE_ACCELEROMETER SensorManager mSensorManager; private float mLastX; private float mLastY; private float mLastZ;...