(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:4BPP
- RGB顏色上:存兩個RGB565的顏色值,耗費32Bit;16個像素-每個像素存2Bit選取兩個顏色blend方式,耗費32bit – 共計: 64Bit
DXT3:8BPP
- RGB顏色上:同DXT1,共計: 64Bit
- Alpha: 每個像素存4Bit透明度值 - 共計: 64Bit
DXT5:8BPP
- 顏色上:同DXT1,共計: 64Bit
- Alpha: 存兩個8Bit的透明度值,耗費16Bit, 每個像素存3Bit在兩個透明度上插值 – 共計: 64Bit
2. ETC紋理格式
ETC格式有ETC1, ETC2兩個版本
ETC1僅支持RGB格式
ETC2格式有多種,有RGB的,有R/RG的,也有支持RGBA格式的種類。
也是劃分4*4的block塊
2.1 ETC1紋理格式
ETC1: 4BPP
etc1只存儲RGB色,不存儲alpha通道值,平均4Bit/像素-4BPP;
塊上也是劃分爲4*4的塊,每塊的顏色組成上:
-
存2組RGB值: 佔用24字節
一種是:R4,R4,G4,G4,B4,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個區域; -
接下來是32Bit, 每個像素佔2Bit選取索引,選取顏色組中的向下調整,還是向上調整的量。
2.1 ETC2紋理格式
ETC2-RGB: 4BPP
兼容 etc1,並且擴展了兩外3種拆分模式;
ETC2-RGBA: 8BPP
- etc2的RGB部分和etc2-RGB一致,佔64bit
- 另外有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劃分的block也爲4*4的塊,每塊的顏色組成上:
包含2個顏色,和顏色的插值設置塊,劃分了多種設置的方式;
另外這兩個顏色值被拆分成不同的位數,同樣的位數可以表示RGB/RGBA,包含了alpha時,位數並未增多。
2BPP劃分的block爲8*4的塊,不同於4BPP的圖片,對於像素混合控制塊定義也進行了簡化/插值控制,進一步簡化佔用。
不同於etc/dds,移動端對於pvr紋理要求是square,長寬一致。
附錄
最後, 推介一下參考的文檔, 是兩個特別讚的文檔, 從中可以詳細看到編碼的格式和說明.
另外裏面有一個圖片很經典,印象深刻:
描述了使用壓縮紋理 vs 使用壓縮圖片的資源消耗差異。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)