在unity3d中贴图的内存消耗通常所占的比例比较搞,今天主要记录我所遇到的贴图优化及使用方面的问题。
贴图的使用过程中通常会遇到贴图模糊毛糙难看的情况,这一般是我们用于显示GUI图片的时候出现,那么相应的处理办法就是将导入到unity中的图片的类型改为GUI,unity默认导入的格式都是texture,这样图片就会比较接近如正常效果了。
另一种情况就是图片尺寸的要求要是2的幂次方,不然unity不会根据平台需要进行压缩,加大了程序尺寸,对于3d程序员来说,文理要求的本身也要是2的幂次方为最佳,提高性能。
还有一种情况就是,图片尺寸的大小,我们知道一张1024*1024的图片是4M,所以我们在压缩图集的时候应该尽可能1024*1024或更小。
再来说一个关于pvr算法问题,例如:一张1024*1024的贴图和一张1024*512的贴图,我们通常会选择哪一张?答案是选1024*1024,至于pvr算法的问题我也不太懂,我看到一片文章有介绍pvr与png的内存占用提供大家参考。
Zwoptex生成的spritesheet除了可以导出png格式的图片外还有pvr格式。pvr格式是iOS的显示芯片可以直接读取的,不需要经过解析就能直接显示,所以渲染速度更快,更节省内存。
我特意在cocos2D 2.0 rc1版本做了一项测试:
PVRTC2 和 PVRTC4 是两种pvr压缩的图像格式,他们都是pvr文件。这两种图像格式比普通图像有更快的加载速度和更小的内存占用。
PVRTC4: Compressed format, 4 bits per pixel, ok image quality
PVRTC2: Compressed format, 2 bits per pixel, poor image quality
一般pvr格式文件的图像格式有:
RGBA8888: 32-bit texture with alpha channel, best image quality
RGBA4444: 16-bit texture with alpha channel, good image quality
RGB565: 16-bit texture without alpha channel, good image quality but no alpha (transparency)
图像占用内存的公式是: numBytes = width * height * bitsPerPixel / 8
也就是说2048*2048的RGBA8888占用内存16MB,而PVRTC4只占用2MB