转载:Unity3D教程:Unity3D在IOS上的优化

文章ytwunity » 2013年 1月 17日, 14:40

1、角色

每个角色尽量使用一个Skinned Mesh Renderer。这是因为当角色仅有一个Skinned Mesh Renderer时,Unity会使用可见性裁剪和包围体更新的方法来优化角色的运动,而这种优化只有在角色仅含有一个Skinned Mesh Renderer时才会启动。

角色Material数量:2-3个

骨骼数量:小於30个

面片数量:300-1500

一般角色没有IK结点,是因为角色的动作大多数都是事先设定好的,并不需要经过IK操作来进行实时计算(Rogdoll除外),所以在模型导入时,不要将IK结点一起导入。

2、静态实体

不要附加Animation Component,在静态实体上附加Animation部件虽然对结果没有影响,但却会增加一定的CPU开销来调用这一组件,所以尽量去掉该组件。

网格顶点数:小於500

UV值范围尽量不要超过(0, 1)区间,尽量保证UV值不越界,这对於将来的纹理拼合优化很有帮助。

3、地形

地形的分辨率大小,长宽均尽量小於257。这是因为地形太大,会造成大量顶点数据,给你的内存带宽造成一定的影响,在目前的ios设备中,内存带宽是非常有限的,需要尽量节省。同时,如果用Unity自带的地形,一定也要使用Occlusion Culling,因为Unity的刷地形工具虽然方便,但却是framekiller,刷过之後,你会发现drawcall增加的非常多。

混合纹理数量,不要超过4。地形的混合操作是很耗时的,应该尽量避免。能合并的纹理尽量合并。

4、纹理

纹理格式,建议png或tga。不用转成ios硬件支持的PVRTC格式,因为Unity在发布时会帮你自动转的。

纹理尺寸,长宽小於1024。同时应该尽可能地小,够用就好,以保证纹理对内存带宽的影响达到最小。

支持Mipmap,建议生成Mipmap。虽然这种做法会增加一些应用程序的大小,但在游戏运行时,系统会根据需求应用Mipmap来渲染,从而减少内存带宽。

检查Alpha值,如果纹理的alpha通道均为1,则用RGB的24位纹理来代替RGBA的32位纹理。(据说Unity内部会进行自动检测)。

5、光源

光源“Important”个数,建议1个,一般为方向光。“Important”个数应该越小越少。个数越多,drawcall越多。

Pixel Light数目:1-2个。

6、粒子特效

屏幕上的最大粒子数,建议小於200个粒子。

每个粒子发射器发射的最大粒子数,建议不超过50个。

粒子大小,如果可以的话,粒子的size应该尽可能地小。因为Unity的粒子系统的shader无论是alpha test还是alpha blending都是一笔不小的开销。同时,对於非常小的粒子,建议粒子纹理去掉alpha通道。

7、音频

游戏中播放时间较长的音乐(如背景音乐),使用.ogg或.mp3的压缩格式。

较短音乐(如枪声),使用.wav和.aif的未压缩音频格式。

8、相机

裁剪平面,将远平面设置成合适的距离。远平面过大会将一些不必要的物体加入渲染,降低效率。

根据不同的物体设置不同的远裁剪平面,Unity提供了可以根据不同的layer来设置不同的view distance,所以我们可以实现将物体进行分层,大物体层设置的可视距离大些,而小物体层可以设置地小些,另外,一些开销比较大的实体(如粒子系统)可以设置得更小些等等。

9、碰撞

尽量不用MeshCollider,如果可以的话,尽量不用MeshCollider,以节省不必要的开销。如果不能避免的话,尽量用减少Mesh的面片数,或用较少面片的代理体来代替。

10、其他

Drawcall:尽可能地减少Drawcall的数量。IOS设备上建议不超过100。减少的方法主要有如下几种:Frustum Culling,Occlusion Culling,Texture Packing。Frustum Culling是Unity内建的,我们需要做的就是寻求一个合适的远裁剪平面;Occlusion Culling,遮挡剔除,Unity内嵌了Umbra,一个非常好OC库。但Occlusion Culling也并不是放之四海而皆准的,有时候进行OC反而比不进行还要慢,建议在OC之前先确定自己的场景是否适合利用OC来优化;Texture Packing,或者叫Texture Atlasing,是将同种shader的纹理进行拼合,根据Unity的static batching的特性来减少draw call。建议使用,但也有弊端,那就是一定要将场景中距离相近的实体纹理进行拼合,否则,拼合後很可能会增加每帧渲染所需的纹理大小,加大内存带宽的负担。这也就是为什麽会出现“DrawCall降了,渲染速度也变慢了”的原因。

非运动物体尽量打上Static标签,Unity在运行时会对static物体进行自动优化处理,所以应该尽可能将非运行实体勾上static标签。

场景中尽可能地使用prefab的实例化物体,以降低内存带宽的负担。检查实体的PrefabType,尽量将其变成PrefabInstance,而不是ModelPrefabInstance。



* 原文链接: http://www.unitymanual.com/851.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值