テクスチャ圧縮フォーマットDXTC・ETCのTips CEDEC2013復習編(1)

ウェブテクノロジ R&D部の上田です。

今回は、CEDEC2013の公募セッションから、テクスチャ圧縮フォーマットのDXTC・ETCに関するTipsをピックアップしてご紹介したいと思います。

なお、CEDEC2013公募セッションの全スライド資料は、下記からダウンロードできますので、本記事で興味を持たれた方は、ぜひそちらもご覧ください。
CEDEC2013『工程の手戻りを最小限に 圧縮テクスチャ(PVRTC・DXTC・ETC)における傾向と対策』発表資料

1.DXTCのTips

1.1 ブロックノイズ対策

DXTCのTips一つ目は、以下のような輪郭線付近のブロックノイズに対する対処の仕方です。
dxtc01_lanc_50per
上の図のように、輪郭線付近でブロックノイズが出てしまっている場合、思い切って輪郭線を太くする、もしくは輪郭線をなくすとブロックノイズが減少します。
dxtc02_lanc_50per
DXTCは4×4ピクセルを1ブロックとして独立して圧縮していますが、この1ブロック内に輪郭線の色・輪郭の内側の色・輪郭の外側の色という3つの傾向が違う色が入り込んでしまうと、ブロックノイズが発生する原因になってしまいます。
このため、輪郭線を無くす、あるいは輪郭線を太くすると、1ブロックに入り込む色が2つに抑えられて、ブロックノイズが減少します。

なお1ブロックは4×4ピクセルであるので、輪郭線の太さは3ピクセル以上にすると効果が高いです(逆に1~2ピクセルの輪郭線はブロックノイズの原因となりやすい傾向があります)。

1.2 DXT1~5の使い分け

DXTCのTips二つ目は、DXT1~5の使い分けについてです。
DXTCを使っていて、下の図のようにアルファチャンネルのグラデーション部分が段々になってしまったことはないでしょうか?
dxtc03_lanc_50per
これはDXT1~5の使い分けを間違ったことが原因になっています。

上の図ではDXT3が使用されていますが、このようなアルファチャンネルでグラデーションを表現するような場合、DXT5を利用したほうが綺麗に出力されます。
dxtc04_lanc_50per
DXT1~5の使い分けは、以下のようにするのがベストです。

  • アルファチャンネルなしの画像ではDXT1を利用する
  • アルファチャンネルありの画像では基本的にDXT5を利用する
  • DXT5を利用してアルファチャンネル部分の劣化が酷かった場合のみ、DXT3を試してみる
  • DXT2とDXT4は乗算済みアルファの指定があるときのみ利用する。それぞれDXT2はDXT3に、DXT4はDXT5に対応している

なお、最近の規格ではDXTCの代わりにBCと呼ばれるものが利用されていることがあります。この場合、BC1がDXT1に、BC2がDXT3に、BC3がDXT5にそれぞれ対応しています。

2.ETCのTips

2.1 ブロックノイズ対策

ETCのTips一つ目は、以下のような色の境目に出現するブロックノイズに対する対処の仕方です。
etc01_lanc_50per
こんな時は、DXTCとは逆に黒や白の輪郭線をつけてしまいましょう。
etc02_lanc_50per
ETCでは色の境目でブロックノイズが出やすいのですが、隣接している色が黒や白の場合はブロックノイズが抑えられます。この点はDXTCとは異なる特性なので、頭の片隅に記憶しておくとちょっと役に立つと思います。

2.2 ETCでアルファマスクを作るときの注意点

ETCではアルファチャンネルありの画像を扱うことができません。そこで、RGBチャンネルのみの画像とは別に、アルファチャンネル情報を持つマスク画像を別に作成し、表示するときに処理する、といった方法が考えられます。
etc03_lanc_50per
このとき、注意点が一つあって、マスク画像をRGBチャンネルのどれか1色で作ってしまうと、マスク画像が劣化してしまう、ということがあります。
etc04_lanc_50per
このようにマスク画像を作成するときは、RGBチャンネルのどれか1色を使うのではなく、RGBチャンネル全てを同じ値として、アルファチャンネルのマスク画像を作ると品質の良いマスク画像を作ることができます。
etc05_lanc_50per
理由としては、ETCでは圧縮後に1ブロック内で使うことのできる色は、代表色と呼ばれる色から、RGBチャンネル全てに対して同じ値を足したり引いたりして決定されます。
そのため、RGBチャンネル全てに同じ値が入っているものよりも、RGBチャンネルのどれか1色だけが使われている場合の方が、圧縮後に使える色と圧縮前の色が違ってしまうことが多いということがあります。


DXTCとETCに関しては、以下の記事でさらに詳細な説明を記載しています。そちらをご覧いただけるとDXTC・ETCに関する知識を更に深めることができると思います。

タグ , , | 2020/06/16 更新 |