Unity3d基本优化条目

mac上用MarsEdit写博文很难改成和windows live writer上格式一样,也就将就了,以后都当笔记来做博文,坚持手写,杜绝慵懒的复制

几乎我们所有的优化概念都告诉我们

?????第一条,要想程序运行更流畅就要牺牲更多的内存,作为代价,用内存换流畅,比方说 近处的贴图质量高,远处使用低质量的贴图(mipmap),近处使用高模远处使用低模(Lod)

? ? ?第二条,用CPU换内存,例如在资源不使用的情况下Destory掉,然后用诸如:Resource.UnloadUnUsedAsserts或者是gc释放,但是这个调用可能很频繁,增加CPU负担

? ? ?第三条,合理使用看项目需求而定,优化是有条目的,作为开发人员可以抓住最基本优化套路,然后遵循项目的具体需要酌情考虑

?????简单考虑从三个方面入手 资源方面,引擎方面,代码方面


?

?

美术资源方面

?

动态物体{

控制面片数量 300 - 2000

控制skinned mesh为一个

控制材质数量1-3个

控制骨骼数量小于30根

?}

?

静态物体{

控制网格的顶点数小于500个

标记为static,static batching内部会优化,例如三个物体标记static会在一个drawcall渲染 注意:即使使用了static,不同的shader还是会增加drawcall,增加一种不同类型的材质(即使材质使用的都是同一个shader),增加一个drawcall

animation组件 尽量不要附加

?}

?

纹理{

自带地形 控制分辨率 地图高度尺寸小于257

地形纹理中使用更少的混合纹理数目 不要超过四个

纹理格式采用压缩格式

纹理尺寸小于1024

建议使用mipmap,虽然会真增加程序的大小但是会提高渲染效率,文件大小会增加到133%,所以做个取舍吧

(一张图理解mipmap)

?}

?

音频{

播放时间长的音乐使用 .ogg .mp3

时间比较短的 用 .wav .aif

?}

?

?

?

引擎方面优化

?

光源设置{

满足效果的前提下控制灯数量

控制important光源的数目(在light选项render mode下可选 )

尽量1个或者干脆没有

个数越多drawcall越多

pixel light count可以控制受影响的灯光的数量(选项在 Quality Setting > Pixel Light Count)

使用Lod(多细节层次)

?}

?

相机设置 {

设置合理的裁切范围

遮挡剔除?

?}

?

粒子优化{

屏幕上的粒子总数不超过200个

建议每个粒子发射器发射的总数不超过20个

粒子的size尽可能小,对于非常小的粒子可以去除粒子贴图中的alpha

?}

?

物理引擎优化{

碰撞体优化尽量使用球形盒子碰撞 避免使用mesh collider

?}

?

渲染优化{

避免使用alpha test与alpth blend,如果使用使用alpth代替alpha test,如果无法代替将alpth test的像素降低到最小

DrawCall Batching unity在渲染时可以将一些物体合并,从而使用一个drawcall

?

static batching 对静态物体batching 对几何数据没有大小限制,原理 静态verterx+动态index buffer 将同种材质合并 在一个大的vetexbuffer中,注意 使用stati cbatching会增加内存开销来储存batch后的数据

?

dynamic batching 对于动态物体unity会对其自动batching,原理 动态vertexbuffer+indexbuffer 注意,目前仅支持小 于900顶点的网格物体,如果shader里使用position,narmal,uv三种属性,则智能batch 300顶点以下的物体,如果使 用position,normal,uv,uv1,tangent等属性则只能batch180顶点以下的物体

?

缩放物体无法与非缩放物体进行batch

?

纹理合并texture batching

?}

?

?

代码优化方面

1.如每隔x帧数调用一次 Time.frameCount%x==0

2.使用invokeRepeating函数,在启动.5秒后每隔1秒执行一次InvokeRepeating("DoSometing",.5f,1f)

3.尽量使用乘法而不是除法

4.合理使用gc,频繁的gc调用会增加cpu的负担,不手动调用只有当内存到达一定阀值gc才会被运行时调用,也就是说在我们做切换场景之列的动作时手动调用即可

?

时间: 2024-10-06 01:14:45

Unity3d基本优化条目的相关文章

深入浅出聊Unity3D项目优化:从Draw Calls到GC

前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的余地就少了很多.但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需要时才去网上扒一些只言片语的资料.也恰逢年前,寻思着周末认真写点东西遇到节假日没准也没什么人读,所以索性就写了这篇临时的文章.题目很土,因为用了指向性很明确的“Unity3D”,让人少了遐(瞎)想的空间,同时用了“高大全

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

Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),索引(顶点如何组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API——或者就简单地看作是通知GPU——开始绘制,GPU基于这些数据,经过一系列运算,在屏幕上画出成千上万的三角形,最终构成一幅图像. 在Unity中

深入浅出聊Unity3D项目优化:从Draw Calls到GC (难度2 推荐5)

原文出处: 慕容小匹夫的博客(@慕容小匹夫) 前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己"文(dou)学(bi)"加工留下的余地就少了很多.但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需要时才去网上扒一些只言片语的资料.也恰逢年前,寻思着周末认真写点东西遇到节假日没准也没什么人读,所以索性就写了这篇临时的文章.题目很土,因为用了指向性很明

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

Unity3D性能优化--- 收集整理的一堆 官方优化文档--优化图像性能http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html Unity3D性能优化专题性能优化是一个异常繁琐而又涉及到项目开发的方方面面的一个过程,它的本质是在运行时的一个时间里尽可能完美展现丰富的内容.实现优化可以通过优化资源.渲染.粒子.物理等模式:也可以通过修改模型大小.减少纹理尺寸并结合Unity3D的一些相关特性来

unity3d android 优化

最近项目进入收尾阶段,之前对项目做了很多优化,mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等,在IOS上还好,但是android上,试过几款手机,从低端到高端,发现性能还是很差,所以又花了几天来研究摸索,终于把游戏性能搞定.记录下来,留作以后参考. 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RGBA 16bit 或者

Unity3D项目优化(转)

前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的余地就少了很多.但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需要时才去网上扒一些只言片语的资料.也恰逢年前,寻思着周末认真写点东西遇到节假日没准也没什么人读,所以索性就写了这篇临时的文章.题目很土,因为用了指向性很明确的“Unity3D”,让人少了遐(瞎)想的空间,同时用了“高大全

[Unity3D]图形渲染优化、渲染管线优化、图形性能优化

原地址:http://blog.sina.com.cn/s/blog_5b6cb9500101dmh0.html 转载请留下本文原始链接,谢谢.本文会不定期更新维护,最近更新于2013.11.09 主要内容也可以参考: http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html 最简单的优化建议: 1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标

Unity3D性能优化

一.美术资源优化 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)尺寸,长宽

Unity3D性能优化之内存

Unity内存分类: Unity引擎开发的移动游戏,内存有三大部分: 程序代码:包括unity引擎,使用的库,和所写的游戏代码,在编译后,得到的运行文件将会被加载到设备中执行,并占用一定内存.这部分内存实际上是没有办法去“管理”的,它们将在内存中从一开始到最后一直存在.优化只能减少使用的库. 托管堆(Managed Heap):被Mono使用的一部分内存,对于Unity开发,其实充当了基本类库的角色.托管堆用来存放类的实例(比如用new生成的列表,实例中的各种声明的变量等).“托管”的意思是Mo