(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:

  1. 颜色上:存两个RGB565的颜色值,耗费32Bit,每个像素存2Bit在两个颜色上插值 – 共计: 64Bit

DXT3:

  1. 颜色上:存两个RGB565的颜色值,耗费32Bit,每个像素存2Bit在两个颜色上插值 – 共计: 64Bit
  2. Alpha: 每个像素存4Bit透明度值 - 共计: 64Bit

DXT5:

  1. 颜色上:存两个RGB565的颜色值,耗费32Bit,每个像素存2Bit在两个颜色上插值 – 共计: 64Bit
  2. 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的块,每块的颜色组成上:

  1. 存2组RGB值: 占用24字节
    一种是:R4,R4,G4,G4,B4值,合成为两个RGB颜色;
    另一种是:R5,R-Delta3, G5,G-Delta3, B5, G-Delta3,也是合成两个RGB颜色值;

  2. 存两个颜色变化组选择索引:占用6Bit
    每个索引占3Bit,颜色变动组有8种,每个组上:有2个向下调整量,2各向上调整量

  3. 下来是各1Bit的控制位2各,占2Bit
    第一个控制位DiffBit,用于设置2组RGB值,是使用第一种还是第二种拆分方法;
    第二各控制位设定,像素组的拆分,是42,24的2个区域区域;

  4. 接下来是每个像素占2Bit的选取位,选取颜色组中的向下调整,还是向上调整的量。

2.1 ETC2纹理格式

  1. etc2-RGB 兼容 etc1,并且扩展了两外3种拆分模式;
  2. 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 使用压缩图片的资源消耗差异。
纹理压缩格式DXT/PVR/ETC编码浅析
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

相关文章: