项目逼近后期,性能问题尤为突出。卡顿、帧数很低、内存过高等问题一一摆在面前。
就先从内存说起吧。
影响游戏内存的因数有很多:比如说纹理、网格、动画、音频、Mono堆内存等。
今天咱们主要研究一下纹理贴图。
1.纹理格式:
在项目中,尽可能使用ETC1和PVRTC4等GPU直接支持的图片格式,不仅内存占用低,性能也好。
当出现质量不合格的时候,再更改纹理格式,满足需求。
Unity对纹理的识别很智能,导入图片的格式无论是PNG,PSD还是TGA,都会被自动转换成Texture2D。
我们可以对纹理进行格式的设定。
近期我们针对NGUI的图集进行了处理:
在Android平台使用ETC1+Alpha通道图的方式;在IOS平台使用PVRTC4的纹理。(接下来的文章会介绍这个步骤的具体操作)
个别要求清晰度较高的,使用RGBA 16。但是使用RGBA 16的话,渐变的图片会惨不忍睹。所以使用RGBA 16的时候需要增加一些特殊处理(Dithering抖动)。
如果是要求高保真的话,就只能使用最高质量的RGBA 32的格式了。
2 .纹理大小
Unity的Mipmap视图很神奇,推荐大家可以在闲暇之余用一下。
把摄像机拉到游戏视角,MipMap视图中蓝色的表示贴图可以使用更大的纹理,红色的表示可以使用更小的纹理。
UIAtlas的贴图控制在1024*1024
另外需要控制特效贴图大小:128/64 我们项目之前特效都是在用256~~~~~~~
需要注意的是:需要压缩的纹理必须是方形的。
3.纹理的Mipmaps的选项
纹理的Mipmaps和LOD相似,只不过LOD是针对于模型,Mipmaps针对于纹理。
使用Mipmaps的好处当然是减少带宽,缓解CPU、GUP的压力,带来的后果是内存的增加。
UI的纹理肯定是需要关闭这个选项的,我们项目中特效的贴图也关闭了这个选项,因为我们对粒子特效错了相关处理(不在视锥体内的隐藏)
4.关闭Read&Write选项
纹理资源的Read&Write选项默认是关闭的,如果开启这个选项,据说纹理的内存会增加一倍(没有测试过,抽空试一下。)