DDS ファイル リファレンス

DDS ファイル リファレンス

テクスチャおよびキューブ環境マップを保存するには、Microsoft® DirectDraw® サーフェイス (DDS) ファイル フォーマットを使う。 いずれも、ミップマップ レベルを定義してもしなくてもよい。このフォーマットでは圧縮ピクセル フォーマットおよび未圧縮ピクセル フォーマットを保存できる。DXTn 圧縮データを保存する場合はこのファイル フォーマットを使うとよい。このファイル フォーマットは、Microsoft DirectX® Texture ツール (DXTex ツール) のほか、サード パーティ製ツールの一部および Direct3D エクステンション (D3DX) ライブラリでもサポートされている。

このフォーマットは DirectX 7.0 で導入された。DirectX 8.0 では、ボリューム テクスチャのサポートが追加された。

  • ファイル レイアウト
  • サーフェイス フォーマット ヘッダー

ファイル レイアウト

DDS ファイルの基本構造は、ヘッダーと、1 つのバイナリ ファイルに記述された 1 つまたは複数のサーフェイスで構成される。ヘッダーは、4 文字のコード (FOURCC) と DDSURFACEDESC2 構造体から成る。このヘッダーは、ファイル全体の内容を識別するために必要なすべての情報を含んでいる。次の図に、DDS ファイルのレイアウトを示す。

DDS ファイル フォーマットのレイアウト

サーフェイス フォーマット ヘッダー

DDSURFACEDESC2 構造体は、DirectDraw ドキュメントに定義された標準のフラグおよび値を使ってファイルの内容を記述する。ただし、完全な互換性を確保するために、ファイルには限定された値セットを使う。アプリケーションやその他のツールで簡単にロードできるようにするには、堅固なリーダーでキー値を検証し、堅固なライターで、さまざまなフィールドおよびオプションに必要なフラグがすべて設定されていることを確認する。また、堅固なリーダーで、対応するフラグが設定されていない場合はフィールドを使わず、堅固なライターで、未定義のフィールドをすべて 0 に設定する必要がある。

次の表は、DDSURFACEDESC2 構造のメンバを示している。

メンバ 説明
DWORD dwSize 構造体のサイズ。このメンバは必ず 124 に設定すること。
DWORD dwFlags 有効なフィールドを示すフラグ。常に DDSD_CAPS、DDSD_PIXELFORMAT、DDSD_WIDTH、DDSD_HEIGHT を含めること。
DWORD dwHeight メイン イメージのピクセル単位の高さ
DWORD dwWidth メイン イメージのピクセル単位の幅
DWORD dwPitchOrLinearSize 未圧縮フォーマットの場合は、メイン イメージの走査線あたりのバイト数 (DWORD で整列)。 この場合は dwFlags に DDSD_PITCH を含める。圧縮フォーマットの場合は、メイン イメージの総バイト数。 この場合は dwFlags に DDSD_LINEARSIZE を含める。
DWORD dwDepth ボリューム テクスチャの場合は、ボリュームの深度。 この場合は dwFlags に DDSD_DEPTH を含める。
DWORD dwMipMapCount ミップマップ レベルが定義されたミップマップの場合は、メイン イメージのミップマップ チェーンに含まれる総レベル数。この場合は dwFlags に DDSD_MIPMAPCOUNT を含める。
DWORD dwReserved1[11]
DDPIXELFORMAT ddpfPixelFormat ピクセル フォーマットの構造体を指定する 32 バイトの値。
DDCAPS2  ddsCaps 能力の構造体を指定する 16 バイトの値。
DWORD dwReserved2

DDS ファイル フォーマットが受ける制約により、この説明に使ったフィールド名はDDSURFACEDESC2 フィールドに正確に対応していない。ただし、DDSURFACEDESC2 構造体を使うことは可能で、またこれを使うべきである。ファイルを検証するには、マジック DDS 値およびヘッダーの dwSize 値を使う。

ヘッダーの ddpfPixelFormat フィールドでイメージのピクセル フォーマットを指定する。 これを使って、Microsoft Direct3D® によってサポートされるすべてのフォーマットを記述できる。通常、DDS ファイルは RGB および FOURCC フォーマットのいずれかに限定される。一般的に、その他のフォーマットはサポートされていない。確実にサポートされるようにするには、RGB フォーマットは A8R8G8B8、A1R5G5B5、A4R4G4B4、R8G8B8、R5G6B5 に限定し、FOURCC フォーマットは DXT1、DXT2、DXT3、DXT4、および DXT5 に限定する。高度なリーダーでは、可能な場合はその他のフォーマットも処理される。

次の表は、DDPIXELFORMAT 構造体のレイアウトを示している。

メンバ 説明
DWORD dwSize 構造体のサイズ。このメンバは必ず 32 に設定すること。
DWORD dwFlags 有効なフィールドを示すフラグ。未圧縮フォーマットでは、RGB フォーマットを示すのに、通常 DDPF_RGB を使うが、圧縮フォーマットでは、DDPF_FOURCC を 4 文字のコードと共に使う。
DWORD dwFourCC 圧縮フォーマットの 4 文字のコード。この場合は dwFlags に DDPF_FOURCC を含める。DXTn 圧縮の場合は、これを "DXT1"、"DXT2"、"DXT3"、"DXT4"、または "DXT5" に設定する。
DWORD dwRGBBitCount RGB フォーマットの場合は、フォーマットに含まれる総ビット数。この場合は dwFlags に DDPF_RGB を含める。通常、この値は 16、24、または 32。A8R8G8B8 の場合は 32。
DWORD dwRBitMask
DWORD dwGBitMask
DWORD dwBBitMask
RGB フォーマットの場合、この 3 つのフィールドには赤、緑、および青チャンネルのマスクが入る。A8R8G8B8 の場合、これらの値はそれぞれ 0x00ff0000、0x0000ff00、および 0x000000ff になる。
DWORD dwRGBAlphaBitMask RGB フォーマットの場合、ここにはアルファ チャンネルのマスクがあればそのマスクが入る。この場合は dwFlags に DDPF_ALPHAPIXELS を含める。A8R8G8B8 の場合、この値は 0xff000000 になる。

このフォーマットの最後の詳細情報は、ヘッダーの ddsCaps フィールドに設定された能力ビットから推測される。ddsCaps 構造体のレイアウトを次の表に示す。

メンバ 説明
DWORD dwCaps1 DDS ファイルには必ず DDSCAPS_TEXTURE を含めること。ファイルがミップマップを含んでいる場合は、DDSCAPS_MIPMAP を設定する必要がある。ミップマップ、キューブ環境マップ、またはボリューム テクスチャのように複数のサーフェイスを持つ DDS ファイルでは、DDSCAPS_COMPLEX も設定する必要がある。
DWORD dwCaps2 キューブ環境マップの場合は、DDSCAPS2_CUBEMAP と、マップの 1 つあるいは複数の面 (DDSCAPS2_CUBEMAP_POSITIVEX、DDSCAPS2_CUBEMAP_NEGATIVEX、DDSCAPS2_CUBEMAP_POSITIVEY、DDSCAPS2_CUBEMAP_NEGATIVEY、DDSCAPS2_CUBEMAP_POSITIVEZ、DDSCAPS2_CUBEMAP_NEGATIVEZ) を含める。ボリューム テクスチャの場合は DDSCAPS2_VOLUME を含める。
DWORD Reserved[2]

DirectX 8.0 からは、キューブ環境マップを記述するときは必ずすべての面を定義することに注意すること。