Microsoft DirectX 8.0 (Visual Basic) |
DXTex ツールでは、新しい DXTn 圧縮フォーマットを使用したテクスチャ マップを作成できる。DXTn 圧縮されたテクスチャの作成は難しいことではない。ただし、Microsoft® Direct3D® では、Direct3DTexture8 オブジェクトを使用して自動的に変換できる。上級の開発者であれば特定のニーズを満たすツールを作成することもできるが、DXTex ツールは便利で基本的な機能を備えている。
ソース :(SDK ルート)\Samples\Multimedia\Direct3D\DXTex
実行可能ファイル :(SDK Root)\Bin\DXUtils
DxTex では、各テクスチャ マップはドキュメントであり、同時に複数のドキュメントを開くことができる、従来のユーザー インターフェイス (UI) を使用している。ただし、DxTex でドキュメントを開いているときは、各ドキュメントでは 1 つまたは 2 つのフォーマットでテクスチャを使用できる。たとえば、.bmp ファイルをインポートすることができる。これによって、自動的に 32 ビット ARGB テクスチャが作成される。次に、このテクスチャを DXT1 フォーマットに変換できる。この時点でドキュメントでは 2 つのフォーマットでイメージが開いており、ウィンドウをクリックするか、[View] メニューの [Original View] または [New View] をクリックして、これらのフォーマットを切り替えることができる。このように操作することで、イメージ圧縮によって生じる不自然な効果を確認でき、イメージの品質を段階的に劣化させることなく別の圧縮フォーマットを簡単に試すことができる。たとえば、この方法を使用せずに、イメージを ARGB から DXT1 に変換すると、アルファの 1 ビットを除くすべてのビットが失われる。
その後 DXT2 に変換しても、アルファ レベルは 2 つしか存在しないことになる。DxTex システムでは、この 2 回目の変換は元の ARGB フォーマットから行われ、変換後の DXT2 イメージには、DXT2 がサポートする 16 レベルのアルファがすべて含まれる。このイメージを保存すると、元のフォーマットは破棄されて新しいフォーマットのみが保存される。
DxTex インターフェイスを使用するときには、次の点に注意すること。
DxTex では、3D ハードウェアが使用可能かどうかに関係なく、Microsoft Direct3D リファレンス ラスタライザを使ってテクスチャを描画する。したがって、大きなテクスチャ (256x256 ピクセルを超える) の場合、プログラムは CPU の速度に応じていくらか遅くなることがある。
DxTex ネイティブ ファイル フォーマットは、DirectDrawSurface に情報をカプセル化するため、DDS ファイル フォーマットと呼ばれる。フォーマットは、次のとおりである。
Magic As Long '0x20534444, または "DDS" ddsd As DDSURFACEDESC2 ' サーフェスのフォーマットについての ' 情報を提供する。 Data1 As Any ' メイン サーフェスに関するサーフェス データを格納する ' 配列の最初の要素。 [Data2 As Any...]' アタッチされたサーフェスに関するサーフェス データを格納する ' 配列の最初の要素が続く。
このフォーマットは読み書きが簡単で、DXTn 圧縮だけでなく、アルファやマルチ ミップ レベルなどの機能もサポートする。DirectX SDK の Compress サンプル アプリケーションでは、DDS ファイルを正しくインポートする方法を示している。
DXTn 圧縮したテクスチャを使用するために DDS フォーマットを使う必要はなく、その逆の場合も同様であるが、これら 2 つは連携している。
ミップマップは、複数の解像度であらかじめフィルタ処理されたテクスチャ イメージを提供することによって、画質を向上させ、テクスチャ メモリの帯域幅を減少させる手法である。
DxTex のミップマップを生成するには、ソース イメージの幅と高さが共に 2 の累乗になっている必要がある。このミップマップを生成するには、[Format] メニューの [Generate Mip Maps] をクリックする。フィルタリングは、単純なボックス フィルタで実行される。つまり、最も近い 4 つのピクセルが平均化されて目的のピクセルが作成される。
多くのテクスチャ フォーマットには、各ピクセルの不透明度の情報を提供するアルファ チャネルが含まれている。DxTex はテクスチャにおけるアルファを完全サポートする。.bmp ファイルをインポートする場合に、サイズが同じ 2 つのファイルが存在し、その一方のファイル名が "_a" で終わるときには (Sample.bmp および Sample_a.bmp など)、"_a" で終わるファイルがアルファ チャネルとしてロードされる。この 2 つ目の .bmp の青のチャネルがアルファ チャネルに格納される。ドキュメントを開いた後は、[File] メニューの [Open As Alpha Channel] をクリックして、明示的に .bmp ファイルをアルファ チャネルとしてロードできる。
アルファ チャネルを RGB チャネルなしで直接表示するには、[View] メニューの [Alpha Channel Only] をクリックする。アルファ チャネルがグレースケール イメージとして表示される。アルファ チャネルがロードされていない場合、すべてのピクセルでアルファ チャネルは 100 パーセントとなり、[Alpha Channel Only] を選択するとイメージが白く塗りつぶされる。アルファ チャネルを非表示にするには、[Alpha Channel Only] をもう一度クリックする。
通常のビューではアルファ チャネルのエフェクトが目に見えるが、これは、ウィンドウがバックグラウンド カラーで塗りつぶされており、アルファ チャネルが 100 パーセント未満のテクスチャでは、そのカラーが透けて見えるからである。バックグラウンド カラーを変更するには、[View] メニューの [Change Background Color] をクリックする。この選択を実行しても、テクスチャそのもの、またはファイルを保存するときに書き込まれるデータには影響しない。
DXT2 および DXT4 フォーマットでは、あらかじめ計算されたアルファが使用される。つまり、サーフェスに格納される赤、緑、および青の値には、対応するアルファ値が既に乗算されている。Direct3D では、あらかじめ計算されたアルファが含まれるサーフェスから、あらかじめ計算されていないアルファが含まれるサーフェスへのコピーはできない。したがって、DxTex の処理によっては、DXT2 および DXT4 フォーマットでは実行できないものもある。たとえば、アルファ チャネルとして開く、DXT3 への変換、DXT5 への変換などがそうである。DXTn テクスチャをサポートしない Direct3D デバイス では、これらのフォーマットを使用したテクスチャをサポートすることは難しい。これは、Direct3D ではこれらのフォーマットを従来の ARGB サーフェスにもコピーできないためである (ARGB サーフェスでもあらかじめ計算されたアルファが使用されている場合はコピーできるが、このような場合はまれである)。このような理由から、可能であれば DXT2 より DXT3 を、DXT4 より DXT5 を使用する方が簡単である。
コマンドライン オプションを使って、入力ファイル、出力ファイル名、および処理オプションを DxTex に渡すことができる。出力ファイル名を指定した場合は、その出力ファイルを書き込んだ後にプログラムが自動終了し、ユーザー インターフェイスは表示されない。
dxtex [infilename] [-a alphaname] [-m] [DXT1|DXT2|DXT3|DXT4|DXT5] [outfilename] infilename: ロードするファイルの名前。 .bmp または DDS ファイルが可能。 -a alphaname: 次のパラメータはアルファ チャネルとして ロードする .bmp ファイルの名前。 アルファ ファイル名を指定しないと、DxTex は Infilename_a.bmp. という名のファイルを探し、 アルファ チャネルとして使用することに 注意すること。 -m: ミップマップが生成される。 DXT1|DXT2|DXT3|DXT4|DXT5: 圧縮フォーマット。フォーマットを指定しないと イメージは ARGB-8888 となる。 outfilename: 出力ファイル名。 このオプションを指定しないと ユーザー インターフェイスは現在のファイルと すべての必要な操作を表示する。 出力ファイル名を指定すると、 アプリケーションはセーブ後、 ユーザー インターフェイスを表示せずに 終了する。