ETCPACK
如何將一個 4x4 的像素塊編碼為 64 位數據呢?
以上就是編碼後的 64 位數據塊表示的意義
以RGB555基本色和RGB3333顏色差表示的編碼為例,每個4x4 像素塊經過ETC1 編碼後的 64 位數據的內存布局大概是這樣
假如編碼前像素塊表示為下圖
我們需要得到圖中編號2對應像素的顏色,需要進行如下的解碼步驟:
indivial 模式,直接將4位數復制到尾部,得到8位
differential 模式,將5位中的高3位復制到尾部,得到8位
differential 模式,一定是將子塊1基本色和子塊2偏移值相加後再進行補位
上面知道目標像素位於子塊2,這里還需要從編碼數據的34-36獲得子塊2的修正表索引,得到索引為(1,1,0)=6,根據上面的映射表,根據下標(6, -b) 可以索引到像素的顏色差值為-106
其實從上面的解壓過程可以推測出編碼的過程
參考:
UI圖集壓縮優化,以及對Dither和ETC1演算法的深入了解
幾種主流貼圖壓縮演算法的實現原理詳解
OES_compressed_ETC1_RGB8_texture