2011年5月20日金曜日

Ericsson Texture Compressionへの圧縮方法

ETC1のフォーマット概要と圧縮法について。

問題は、ETC1へ圧縮するにあたり計算時間が許容できないので、
速い計算方法はないものかというもの。

詳細は、Open GL ES の拡張OES_compressed_ETC1_RGB8_textureの仕様に説明されている。
RGB 24bitの4x4ピクセルを、64ビットに圧縮する。
4x4を、2x4又は4x2のサブブロックに分割し、
サブブロック2つ分のベースカラーにRGB 8bit、
サブブロックそれぞれに差分テーブルのインデックス 3bit、
16ピクセルそれぞれに2bitの、差分テーブルの要素を示すビット 2bit、
残りは、サブブロックの割り方に1bit、ベースカラーの表現方法に1bit、
となる。
base color = 8x3 = 24bit
color table = 3bit x 2 = 6bit
bits for color table = 2bit x 16 = 32 bit
mode flags = 2bit

解凍する場合、計算イメージとしては以下のようになる。
ピクセルの色 = ベースカラー + 差分テーブル[ 2ビットインデックス ]

どう圧縮するかが悩むところ。
差分テーブルは以下左から、テーブル番号、2bit値で11、10、00、01、
0 -8 -2 2 8
1 -17 -5 5 17
2 -29 -9 9 29
3 -42 -13 13 42
4 -60 -18 18 60
5 -80 -24 24 80
6 -106 -33 33 106
7 -183 -47 47 183

テーブル値をどう算出したか妄想すると、統計ではないかと。
計算すべきものは以下の3つ。
・各サブブロックのベースカラーの計算
・ベースカラーに対して、テーブルの決定
・テーブルとベースカラーに対して、2ビットインデックスの計算

発見的手法しかないのかこれは。

0 件のコメント:

コメントを投稿