(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
参考文档:
https://www.khronos.org/registry/DataFormat/specs/1.1/dataformat.1.1.pdf
http://cdn.imgtec.com/sdk-documentation/PVRTC%20Specification%20and%20User%20Guide.pdf
未详细的总结梳理,下面是对纹理压缩格式认识的简述,认识可能多有不足;仓促期间,后续有机会再详细总结。
1. DXT纹理格式
DXT格式常位于的.DDS文件中,常见的格式有DXT1, DXT3, DXT5:也即BC1/BC2/BC3。
DXT1表达RGB色,不带mipmap情况,平均4Bit/像素-4BPP;
DXT3/DXT5表达RGBA色,8BPP。
DXT格式划分为4*4的块Block,每块的颜色组成上:
DXT1:
- 颜色上:存两个RGB565的颜色值,耗费32Bit,每个像素存2Bit在两个颜色上插值 – 共计: 64Bit
DXT3:
- 颜色上:存两个RGB565的颜色值,耗费32Bit,每个像素存2Bit在两个颜色上插值 – 共计: 64Bit
- Alpha: 每个像素存4Bit透明度值 - 共计: 64Bit
DXT5:
- 颜色上:存两个RGB565的颜色值,耗费32Bit,每个像素存2Bit在两个颜色上插值 – 共计: 64Bit
- Alpha: 存两个8Bit的透明度值,耗费16Bit, 每个像素存3Bit在两个透明度上插值 – 共计: 64Bit
2. ETC纹理格式
ETC格式有ETC1, ETC2两个版本
ETC1仅支持RGB格式
ETC2格式有多种,有GB的,也有支持RGBA格式的种类。
2.1 ETC1纹理格式
etc1: etc1只存储RGB色,不存储alpha通道值,平均4Bit/像素-4BPP;
块上也是划分为4*4的块,每块的颜色组成上:
-
存2组RGB值: 占用24字节
一种是:R4,R4,G4,G4,B4值,合成为两个RGB颜色;
另一种是:R5,R-Delta3, G5,G-Delta3, B5, G-Delta3,也是合成两个RGB颜色值; -
存两个颜色变化组选择索引:占用6Bit
每个索引占3Bit,颜色变动组有8种,每个组上:有2个向下调整量,2各向上调整量 -
下来是各1Bit的控制位2各,占2Bit
第一个控制位DiffBit,用于设置2组RGB值,是使用第一种还是第二种拆分方法;
第二各控制位设定,像素组的拆分,是42,24的2个区域区域; -
接下来是每个像素占2Bit的选取位,选取颜色组中的向下调整,还是向上调整的量。
2.1 ETC2纹理格式
- etc2-RGB 兼容 etc1,并且扩展了两外3种拆分模式;
- etc2-RGBA的RGB部分和etc2-RGB一致,另外有alpha部分拆分模式如下
a. alpha值占8位
b. multipier占4位,取值0-15
c. 数据偏移表索引占4位,取值16种
d. 每个像素占3Bit,共使用48Bit,每个bit选取使用数据偏移种的一项
3. PVR纹理格式
pvr格式有4种:
Format_PVR_2BPP_RGB
Format_PVR_4BPP_RGB
Format_PVR_2BPP_RGBA
Format_PVR_4BPP_RGBA
4BPP划分的同DDS一样,也为4*4的块,每块的颜色组成上:
也同DDS一样,包含2个颜色,和颜色的插值设置块;
不同于DDS,这两个颜色值被拆分成不同的位数,同样的位数可以表示RGB/RGBA。
2BPP划分为8*4的块,不同于4BPP的图片,对于像素混合控制块定义也进行了简化/插值控制,从而进一步简化占用。
附录
最后, 推介一下参考的文档, 是两个特别赞的文档, 从中可以详细看到编码的格式和说明.
另外里面有一个图片很经典,印象深刻:
描述了使用压缩纹理 vs 使用压缩图片的资源消耗差异。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)