DirectX11のDDS



DirectX11では、DDSファイルフォーマットが新しくなりました。                                                            


すぐ忘れてしまうので、メモ書き程度に。
DirectX9でもDDSファイルが使用可能でしたが、DirectX11では新しい形式が追加され、またフォーマット名も変わりました。

DirectX9 のDDSフォーマット
 種類 圧縮率 備考
 DXT1 1/8 アルファなし or 1bitアルファ
 DXT2 1/4 変化が急なアルファ値
 DXT3 1/4 変化が急なアルファ値
 DXT4 1/4 変化が緩やかなアルファ値
 DXT5 1/4 変化が緩やかなアルファ値

DirectX11 のDDSフォーマット
 種類 圧縮率 備考 更に備考
 BC1 1/8 アルファなし or 1bitアルファ
 DXT1と同等
 BC2 1/4 変化が急なアルファ値 DXT2, DXT3と同等
 BC3 1/4 変化が緩やかなアルファ値 DXT4, DXT5と同等
 BC4 1/8 1成分のみ 高さマップなどに使われる
 BC5 1/4 2成分のみ 法線マップなどに使われる
 BC6H 1/4 HDR用 NEW!!
 BC7 1/4 変化が緩やかなアルファ値 NEW!!


DirectX9ではDXT1~5で呼ばれていましたが、これがBC1~3になりました。
また、特殊な使われ方をするBC4とBC5が追加、また新たにHDR(ハイダイナミックレンジ)のBC6Hと、DXT5から圧縮アルゴリズムが改良されたBC7が登場しています。
(BC4とBC5はATI1、ATI2として以前から存在していたもののようです)

これらはDirectX9と同様に、DirectX11でグラフィックカードのメモリを節約することができます
DirectX11内では、DXGI_FORMAT_BCx~みたいな特殊なフォーマットで定義されています。

なお、これらは以前と同じくすべて非可逆圧縮です。元の画像には戻らず、どこか劣化が発生します。
ただ、DirectX9と同様に、上手にフォーマットとツールを選んであげれば、ほぼ劣化せずに、4分の1以下のメモリで使用することができます。

BC7はかなり綺麗になったようなので、試してみてはいかがでしょうか。



BC1~BC3 って変わったの?                                             


なぜDXTからBCという名前に変わったのかは分かりませんが、DXT1はBC1、DXT3はBC2、DXT5はBC3と基本的に同じです。
なにやらDirectX10以降では、拡張ヘッダというものを使うこともできるそうで、これを使うとDirectX9では使用できなくなります。
DirectX9で使っていたDDSファイルは、DirectX11でも使用可能です。



どうやって作るの?                                             


またDirectX9のときと同様に、扱えるツールは非常に少ないようです。
旧来のBC1~BC3については、DirectX9で使っていたツールがそのまま使えます。

ただし、BC4、BC5、BC6HやBC7で出力できるツールは私はほとんど知りません。
有名っぽいのは以下の3つのようです。

DirectXTex (Microsoft製)
https://directxtex.codeplex.com/

NVIDIA texture tools (2010/5 以降更新なし)
https://code.google.com/p/nvidia-texture-tools/

ISPC Texture Compressor (2015/9/13時点の最新更新が2015/9/2)
https://software.intel.com/en-us/articles/fast-ispc-texture-compressor-update

が、すべてプロジェクトファイル付きのコマンドライン実行形式であり、ユーザーフレンドリーとはとても言えません(2015/9/13現在)。

もっと良いツールがありましたら、教えてください。



MikuMikuMoving v2                                             

実装完了。


Comments