UDN
Search public documentation:

TextureComparisonJP
English Translation
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

DXTC: DXTC の例と技術的比較

本書の概要:DirectX テクスチャの圧縮されたタイプとパレットかされタイプの比較。経験とスキルのすべてのレベルにおいて最適。

本書の変更記録:文書要約目的のため、Tom Lin (DemiurgeStudios?)によって最後に更新。原著者は、Lucas Alonso.

はじめに

目的

本書の目的は、コンテンツ(内容)クリエーターの方々に、どのようなときにDXTC フォーマットを使って、テクスチャを圧縮することが適切であるか、どのようなときに圧縮しないままにして置いたほうがよいか、そして、どのようなときにBrightを使ってパレットかするべきかの点について説明することです。

DXTC の基本事項

本書において、DXTC アルゴリズムの部分で言及しているのは、カラーに関する情報にかかわる部分です。その理由は、*すべてのDXTCの異体(DXT1-5)*において、同様な方法で処理されている為です。カラー情報は、標準パレットビットマップと同じような方法で保存されています。違うのは、イメージ全体を256色のカラーパレットを使って保存するのに比べて、DXTCは4X4ピクセルブロック毎に小さなパレットを使って保存する点です。このミニパレットは4色を表現できます。しかし、そのうちの2色は後の2色からインターポレートされていて、実際にはファイルに保存されません。このため、通常は65kのビットマップをたったの32kに圧縮することができます。このため、ビデオメモリーに2倍の量のテクスチャを保存することや、同じ量のテクスチャを2倍の解像度で保存することができます。

colourtable.gif

NVIDIA DXT1 について

NVidiaハードウェアにおけるDXT1ディコンプレッサー(解凍器)の実装は質的に若干の問題があります。これは、テクスチャが内部で32ビットでなく16ビット色でプロセスされる為で、特に暗いシェーディングの質がかなり悪くなります。他のDXTCフォーマット(DXT2-5)はこの影響を受けません。問題なのはアルファ情報を保存することです。圧縮しようとするテクスチャがアルファチャンネルを使わない場合には、これには何の利点もありません。しかし、アルファ情報を使わないただ1つのフォーマットが質的問題を抱えている為、特別の場合にだけこのアルファ情報を使わないフォーマットを使うことになります。

テクスチャ 1

SOURCE SOURCE 細部
Bradley1_SOURCE.png Bradley1_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
Bradley1_BRIGHT.png Bradley1_BRIGHT_ZOOM.png
DXTC DXTC 細部
Bradley1_DXTC.png Bradley1_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
Bradley1_DXT1.png Bradley1_DXT1_ZOOM.png

この例では、3種のテクスチャの違いが、標準スケールでは見分けがつきにくくても、ズームインすることによって、DXTC圧縮によるアーチファクト(同一色の小さなブロック)が見られます。この例では、アーチファクトは拡大してもほとんど目に付きません。ですから、この手のテクスチャはDXTCを使うのに最適です。インゲームである、NVidia DXT1はかなりぼやけて見えます。ですから、画質の低下が気にならないというのでなければDXT3の使用を考えてみるべきかもしれません。

=---+++色の勾配

SOURCE SOURCE 細部
Gradient_SOURCE.png Gradient_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
Gradient_BRIGHT.png Gradient_BRIGHT_ZOOM.png
DXTC DXTC 細部
Gradient_DXTC.png Gradient_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
Gradient_DXT1.png Gradient_DXT1_ZOOM.png

しかし、この例では、Brightでは画質が保持されているのに、DXTCテクスチャにバンドが現れているのが簡単に見えます。前述したように、DXTCアルゴリズムが4X4ピクセルブロック毎に4色しか使わない為です。つまり、そのブロックの中でカラーバリエーションが十分にあるときはこのような結果になります。明らかに、このような場合にはDXT1を使うべきではありません。

テクスチャ 2

SOURCE SOURCE 細部
MoreRocks_SOURCE.png MoreRocks_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
MoreRocks_BRIGHT.png MoreRocks_BRIGHT_ZOOM.png
DXTC DXTC 細部
MoreRocks_DXTC.png MoreRocks_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
MoreRocks_DXT1.png MoreRocks_DXT1_ZOOM.png

例1のようなタイプのテクスチャの場合にDXTCが通常使われます。DXTC圧縮による質の低下がほとんど気になりません。

テクスチャ 3

SOURCE SOURCE 細部
Wall_SOURCE.png Wall_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
Wall_BRIGHT.png Wall_BRIGHT_ZOOM.png
DXTC DXTC 細部
Wall_DXTC.png Wall_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
Wall_DXT1.png Wall_DXT1_ZOOM.png

また標準テクスチャです。DXTCのアーチファクトが拡大されたテクスチャ上で簡単に見えても、ソーステクスチャとDXTCの圧縮版とでは違いがほとんどわかりません。この場合にはBright もなかなか良い仕事をします。

虹色の勾配

SOURCE SOURCE 細部
Rainbow_SOURCE.png Rainbow_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
Rainbow_BRIGHT.png Rainbow_BRIGHT_ZOOM.png
DXTC DXTC 細部
Rainbow_DXTC.png Rainbow_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
Rainbow_DXT1.png Rainbow_DXT1_ZOOM.png

この例では、 Brightがテクスチャで使われている42000色をたったの256色に収めるのに苦労しているのが見えます。Brightの試みはちょっと感動的ですが、この場合はDXTCの圧縮あるいは非圧縮の32ビットテクスチャが賢明な選択です。そしてDXT1は避けるべきです。

テキスト/HUD アート

SOURCE SOURCE 細部
Text_SOURCE.png Text_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
Text_BRIGHT.png Text_BRIGHT_ZOOM.png
DXTC DXTC 細部
Text_DXTC.png Text_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
Text_DXT1.png Text_DXT1_ZOOM.png

複雑なテキストあるいはハドイメージや関連したテクスチャでは、この例でも見られるように、DXTCはあまりお勧めできません。テキストの周りのブロックアーチファクトがかなり醜い効果をだしています。Bright の非圧縮テクスチャのほうがお勧めです。

DXTC の悪夢

SOURCE SOURCE 細部
Haha_SOURCE.png Haha_SOURCE_ZOOM.png
BRIGHT BRIGHT 細部
Haha_BRIGHT.png Haha_BRIGHT_ZOOM.png
DXTC DXTC 細部
Haha_DXTC.png Haha_DXTC_ZOOM.png
NVIDIA DXT1 NVIDIA DXT1 細部
Haha_DXT1.png Haha_DXT1_ZOOM.png

これは本当に不公平です。:-) 4X4ブロックに16色収めて、DXTCが、我慢できる程度に圧縮できるはずはありません。この場合、Brightでは、テクスチャ全体で16色しかないので問題ありません。

  • 保障された画質が必要なときは DXT1 を避けてください - Nvidia ハードウェア上の問題がない違ったタイプの DXTC を選び、Nvidia ハードウェア上で DXT1テクスチャを試した跡で、最終決断をしてください。
  • 画質が一番重要である特別な目的のテクスチャにはDXTC を使わないでください。例えばテキストやハイト(高度)マップの場合です。
  • 普通のテクスチャを圧縮するときにはぜひ DXTC を使ってください。画質の低下はほとんど気になりません(DXT3/5).
  • アップロードの前に、8ビットのパレットテクスチャは32ビットに変換される為、ディスク上での保存サイズが小さくてすむ意外に何の利点もありません。非圧縮の32ビットと比べて同じに見えるときだけ使ってください。