图片纹理压缩
一、纹理压缩的必要性
1、无需CPU解压即可被GPU读取,节省CPU时间和带宽
2、节省大量内存消耗
3、部分压缩格式可以节省图片体积
在不同移动GPU平台下选择GPU支持的压缩纹理,就可以在不需要CPU解压的情况下直接被GPU采样,节省CPU内存和带宽,也可以节省存储空间,如果目标平台不支持设置的压缩格式,纹理将解压为RGBA32或者RGB24,增加CPU消耗
二、图像文件格式和纹理格式的区别
1、常见的图像文件格式png、bmp、tga、jpg、gif
2、常见的非压缩纹理格式RGBA8888、RGBA4444、RGB888、RGB565
3、文件格式不能被GPU识别,文件格式被读取后还需要经过CPU解压成纹理格式才能被GPU使用
三、压缩格式的作用
不同于png、jpg这种硬盘压缩方式,DXT,ETC等纹理压缩方式可以在游戏运行中无需CPU解压就被GPU直接采样,可以极大的减少内存和带宽的占用,提升运行效率,对移动游戏而言更是如此。
四、简单的纹理非压缩格式
RGBA8888(RGBA32)一像素32位,即一像素内存消耗4字节
RGBA4444(RGBA16)一像素16位,即一像素内存消耗2字节
RGB888(RGB24)一像素24位,即一像素内存消耗3字节,无透明通道
RGB565(RGB16)一像素16位,即一像素内存消耗2字节,无透明通道
RGBA8888 一像素4字节,1024*1024需要占用1024*1024*4 = 4194304Byte = 4M;512*512需要占用512*512*4 = 1048576Byte =1M
RGB565一像素2字节,1024*1024需要占用2M;512*512需要占用0.5M
五、压缩格式
DXT 分为DXT1-DXT5五个级别,DXT3和DXT5支持包含4位alpha通道的RGB纹理,有损压缩
ATC 支持带有Alpha的RGB纹理压缩
PVRTC2/4 IOS平台都支持,使用PowerVR GPU的Android设备也支持,多采用PVRTC4位压缩模式; 尺寸要求为2的N次幂,要正方形
ETC1 RGB4bit OpenGL ES2.0版本支持,移动GPU均支持,遗憾的是不支持alpha通道;对于透明纹理,在Android设备上,可以把RGB和Alpha拆到2张ETC1纹理上,游戏中再合成使用。 尺寸要求为2的N次幂,宽高可不同
ETC2 ARGB/RGB4bit OpenGL ES 3.0以上才支持,补全了ETC1不支持Alpha通道,支持更高质量的压缩,但从Android官方数据来看,还有相当大的设备是采用Opengl ES2.0; 尺寸要求为4的倍数
ETC 一种为感知质量设计的有损算法,其依据是人眼对亮度改变的反应要高于色度改变,类似于DXT,ETC也是把4x4的像素块压缩成一个64或128位的数据块,也是有损压缩
ASTC 是IOS系统下的PVRTC的代替方案,压缩比增加到0.25,并且不需要设置图片为方形。注意: 从IOS9(A8架构)Apple 手机开始支持ASTC压缩格式 ,如果 考虑放弃Apple 6代之前的手机兼容问题了,可以直接使用了。如果GPU不支持这种压缩格式,则解压为 RGB或者RGBA。会增加cpu解压时间,并占用较多内存。

浙公网安备 33010602011771号