紋理壓縮格式DXT/PVR/ETC編碼

(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

  1. RGB顏色上:存兩個RGB565的顏色值,耗費32Bit;16個像素-每個像素存2Bit選取兩個顏色blend方式,耗費32bit – 共計: 64Bit

DXT3:8BPP

  1. RGB顏色上:同DXT1,共計: 64Bit
  2. Alpha: 每個像素存4Bit透明度值 - 共計: 64Bit

DXT5:8BPP

  1. 顏色上:同DXT1,共計: 64Bit
  2. 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的塊,每塊的顏色組成上:

  1. 存2組RGB值: 佔用24字節
    一種是:R4,R4,G4,G4,B4,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. 接下來是32Bit, 每個像素佔2Bit選取索引,選取顏色組中的向下調整,還是向上調整的量。

2.1 ETC2紋理格式

ETC2-RGB: 4BPP
兼容 etc1,並且擴展了兩外3種拆分模式;

ETC2-RGBA: 8BPP

  1. etc2的RGB部分和etc2-RGB一致,佔64bit
  2. 另外有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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章