2015年11月23日月曜日

Ericsson Texture Compression 1に透過情報を入れる

Unity 3D用のコンバータを作成してみる.
https://github.com/taqu/YUVDither

ETC1 に無理やり透過情報を入れる.


まず, RGBを, YUVに変換する.

Yは平均と, R成分に保存する.
また, 隣のピクセルとの差分を1/2乗してG成分に保存する.

次に, UVは縦横半分にして, B成分に保存する.

最後に透過Aは, 縦横半分にして, さらに平均と
差分の1/2乗に分解して, B成分の残りに保存する.

周波数分解してみたり, 試行錯誤してみたがこれが一番良かった.
元画像のレンジが広ければ, Y成分を2成分に保存するとかできるかもしれない.
1ビットアルファに割り切った方が奇麗かも.

24bit版も追加..
 元と比べると顕著に色相が変化するのがどうにも.

16bit版追加, これが最も実用的かもしれない.
RGB565フォーマットを使用する.
まず, YUVに変換後, YをG成分に保存, UVを横半分にしてBに保存, 透過AをRに保存する.
最後に, RGBを拡散誤差法でディザリングする.
レイアウトは24bit版と同じなので, シェーダも同じ.
色相は変化するが, RGBA4444に比べてざらつきは格段に減少する.


0 件のコメント:

コメントを投稿