移动端纹理压缩格式

非压缩格式

格式 内存消耗 (bytes/pixel) 描述
RGBA8888(RGBA32) 4bpp RGBA通道各占用8位
RGBA4444(RGBA16) 2bpp 每个像素2字节
RGB888(RGB24) 3bpp 每个像素3字节,RGB通道各占用8位,无透明通道
RGB565(RGB16) 2bpp 每个像素2字节,RGB通道各占用5/6/5位,无透明通道

压缩格式

格式 压缩比 GPU支持 描述 图片要求
DXT DXT1:0.3/DXT5:0.6 Windows\Android(Nvidia Tegra and Intel Bay Trail) 分为DXT1-DXT5这五个级别,DXT1 适用于不具有透明度或者仅具有一位Alpha的贴图,DXT3和DX5支持包含4位alpha通道的RGB纹理
ATC RGBA/RGB RGBA:0.25/RGB:0.125 Qualcomm -Adreno 高通GPU支持格式,支持带有Alpha的RGB纹理压缩。
PVRTC RGBA/RGB 2bit:0.125/4bit:0.25 PowerVR IOS平台都支持,支持每个像素2位或者4位的纹理,包含或者不包含alpha通道都可以;PVRTC 2-bpp把一个8×4的像素单元组压成一个64位的数据块,压缩效果比较差;PVRTC 4-bpp把一个4×4的像素单元组压成一个64位的数据块。游戏中使用4位压缩更多。 尺寸为2的N次幂,并且宽高相同。
ETC1 RGB 4Bit 0.125 支持Opnegl ES2.0的GPU OpenGL ES2.0版本支持,移动GPU均支持的一个格式,遗憾的是不支持Alpha通道。ETC1把一个4x4的像素单元组压成一个64位的数据块。游戏开发中采用最多的格式,不过麻烦的是需要对Alpha通道进行单独存储,Unity5.4.3版本之后提供了官方支持 尺寸为2的N次幂,长宽可不同
ETC2 ARGB/RGB 4bit RGBA:0.25/RGB:0.125 支持Opnegl ES3.0的GPU OpenGL ES 3.0以上才支持,补全了ETC1不支持Alpha通道,支持更高质量的压缩。虽然如此,从Android官方数据来看,还有相当大的设备是采用Opengl ES2.0;使用需要谨慎,不过随着设备更新换代,开发时间周期比较长的游戏可以考虑直接使用 尺寸为4的倍数

Unity官网对每个平台默认的纹理压缩格式以及使用建议给出了详细描述,需要注意的是:在不同移动GPU平台下选择GPU支持的压缩纹理,就可以在不需要CPU解压的情况下直接被GPU采样,节省CPU内存和带宽,也可以节省存储的体积。如果目标平台不支持设置的压缩格式,纹理将解压为RGBA32或者RGB24,浪费CPU时间和内存

ASTC

从IOS9(A8架构)Apple 手机开始支持ASTC压缩格式 ,如果考虑放弃Apple 6代之前的手机兼容问题了,可以直接使用了。相对于PVRTC2/4而言,ASTC(4X4)的压缩比会增加到0.25,不过显示效果也会好很多,而且不需要把图片设置为方形。

Using ASTC Texture Compression for Game Assets 说明的比较详细,也给出了一些使用上的建议,即针对不同贴图类型给出不同的压缩方案。

ARM的参考资料: ASTC: The Future of Texture Compression

引用

[1]: "常用纹理和纹理压缩格式" http://blog.csdn.net/ynnmnm/article/details/44983545
[2]:"Unity Compressed" https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
[3]: "移动设备的纹理压缩方案" http://gad.qq.com/article/detail/72
[4]: "关于U3D贴图格式压缩" http://blog.sina.com.cn/s/blog_5b6cb9500102vi6i.html
[5]: "各种移动GPU压缩纹理的使用方法" http://www.cnblogs.com/luming1979/archive/2013/02/04/2891421.html
[6] "版本分布情况" https://developer.android.com/about/dashboards/index.html#Screens

纹理资源压缩测试对比: http://gad.qq.com/article/detail/37502

猜你喜欢

转载自blog.csdn.net/taoqilin/article/details/82692759