项目逼近后期,性能问题尤为突出。卡顿、帧数很低、内存过高等问题一一摆在面前。

就先从内存说起吧。

影响游戏内存的因数有很多:比如说纹理、网格、动画、音频、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选项默认是关闭的,如果开启这个选项,据说纹理的内存会增加一倍(没有测试过,抽空试一下。)