Visual Studio でイメージ コンテンツ パイプラインを使用してリッチ テクスチャ形式をエクスポートする

この記事では、イメージ コンテンツ パイプラインを使用して、ミップマップ事前に乗算されたアルファを含むテクスチャ、さらには Direct2D または JavaScript アプリで使用できるテクスチャなどのテクスチャをエクスポートする方法について説明します。

ミップマップを含むテクスチャをエクスポートする

イメージ コンテンツ パイプラインは、プロジェクトのビルド フェーズ中にソース イメージから MIPMAP を生成できます。 特定の効果を実現するには、各 MIP レベルのイメージ コンテンツを手動で指定することが必要な場合があります。 各 MIP レベルのイメージ コンテンツを手動で指定する必要がない場合、ビルド時に MIPMAP を生成することにより、MIPMAP のコンテンツが決して非同期にならないようにすることができます。また、これにより、実行時に MIPMAP を生成する場合のパフォーマンス コストも必要なくなります。

この記事には、次の内容が含まれます。

  • イメージ コンテンツ パイプラインによって処理されるようにソース イメージを構成する。

  • MIPMAP を生成するようにイメージ コンテンツ パイプラインを構成する。

MIPMAP をエクスポートする

MIPMAP には、3D ゲームやアプリのテクスチャ サーフェス用に自動調整される画面領域詳細レベルがあります。 これは、テクスチャのダウンサンプル バージョンを事前に計算することによって、ゲームまたはアプリのレンダリング パフォーマンスを向上します。 ダウンサンプル バージョンを事前に計算するということは、テクスチャをサンプリングするたびにテクスチャ全体をダウンサンプルする必要がないことを意味します。

MIPMAP を含むテクスチャをエクスポートするには

  1. 基本的なテクスチャを作成します。 既存のイメージ ファイルを読み込むか、イメージ ファイルを作成します。 MIPMAP をサポートするには、テクスチャの幅と高さを 2 の累乗の同じサイズ (64x64、256x256、512x512 など) に指定します。

  2. イメージ コンテンツ パイプラインによって処理されるように、前の手順で作成したテクスチャ ファイルを構成します。 ソリューション エクスプローラーで、作成したテクスチャ ファイルのショートカット メニューを開き、[プロパティ] をクリックします。 [構成プロパティ]>[全般] ページの順に進み、 [項目の種類][Image Content Pipeline](イメージ コンテンツ パイプライン) に設定します。 [コンテンツ] プロパティが [はい] に、[ビルドから除外][いいえ] に設定されていることを確認します。 [適用] を選択します。

    [イメージ コンテンツ パイプライン] の構成プロパティ ページが表示されます。

  3. MIPMAP を生成するように、イメージ コンテンツ パイプラインを構成します。 [構成プロパティ]>[Image Content Pipeline](イメージ コンテンツ パイプライン)>[全般] ページの順に進み、 [MIPS の生成][はい (/generatemips)] に設定します。

  4. [OK] を選択します。

プロジェクトをビルドすると、イメージ コンテンツ パイプラインによってソース イメージは作業形式から、指定した出力形式に変換されます。同時に、MIP レベルが生成されます。 結果はプロジェクトの出力ディレクトリにコピーされます。

前乗算されたアルファを持つテクスチャをエクスポートする

イメージ コンテンツ パイプラインを使用すると、前乗算されたアルファを含むテクスチャをソース イメージから生成できます。 これらは、事前に乗算されたアルファを含まないテクスチャよりも簡単に使用でき、堅牢です。

このドキュメントでは、以下のアクティビティについて説明します。

  • イメージ コンテンツ パイプラインによって処理されるようにソース イメージを構成する。

  • 前乗算されたアルファを生成するようにイメージ コンテンツ パイプラインを構成する。

前乗算されたアルファ

前乗算されたアルファには、前乗算されていない従来のアルファよりも優れた点がいくつかあります。これは、前乗算されたアルファの方が、テクセルの色の効果 (シーンに追加される色) を透明度 (下にある色が透けて見える量) から分離することにより、現実世界における光と物質の相互作用を有効に表現できるためです。 前乗算されたアルファを使用する利点には、次のようなものがあります。

  • 前乗算されたアルファとのブレンドは、結合演算です。テクスチャのブレンド順序に関係なく、複数の半透明テクスチャをブレンドした結果が同じになります。

  • 前乗算されたアルファとのブレンドは本質的に結合であるため、半透明オブジェクトのマルチパス レンダリングが単純になります。

  • 前乗算されたアルファを使用することで、純粋な加算ブレンド (アルファをゼロに設定) と線形補間ブレンドの両方を同時に行うことができます。 たとえば、パーティクル システムでは、加算ブレンドされた炎のパーティクルを、線形補間を使用してブレンドされた半透明な煙のパーティクルにすることができます。 前乗算されたアルファを使用しない場合、煙のパーティクルとは別に炎のパーティクルを描画し、描画の呼び出し間でレンダリング状態を変更する必要があります。

  • 前乗算されたアルファを使用したテクスチャは、前乗算されたアルファを使用しないテクスチャよりも高い品質で圧縮できます。前乗算されたアルファを使用しないテクスチャをブレンドすると生じる可能性のある境界の変色 (ハロー効果) が起こることもありません。

前乗算されたアルファを使用したテクスチャを作成するには

  1. 基本的なテクスチャを作成します。 既存のイメージ ファイルを読み込むか、イメージ ファイルを作成します。

  2. イメージ コンテンツ パイプラインによって処理されるようにテクスチャ ファイルを構成します。 ソリューション エクスプローラーでテクスチャ ファイルのショートカット メニューを開き、[プロパティ] をクリックします。 [構成プロパティ]>[全般] ページの順に進み、 [項目の種類][Image Content Pipeline](イメージ コンテンツ パイプライン) に設定します。 [コンテンツ][はい] に、[ビルドから除外][いいえ] に設定されていることを確認し、[適用] ボタンをクリックします。 [イメージ コンテンツ パイプライン] の構成プロパティ ページが表示されます。

  3. 前乗算されたアルファを生成するようにイメージ コンテンツ パイプラインを構成します。 [構成プロパティ][イメージ コンテンツ パイプライン][全般] の順にクリックし、 [Convert to pre-multiplied alpha format](前乗算されたアルファ形式に変換) プロパティを [はい (/generatepremultipliedalpha)] に設定します。

  4. [OK] を選択します。

    プロジェクトをビルドすると、イメージ コンテンツ パイプラインによってソース イメージが作業形式から、指定した出力形式に変換されます。同時に、前乗算されたアルファが生成されます。結果はプロジェクトの出力ディレクトリにコピーされます。

Direct2D または JavaScript アプリで使用するためのテクスチャをエクスポートする

イメージ コンテンツ パイプラインにより、Direct2D の内部レンダリング規則と互換性のあるテクスチャを生成できます。 この種のテクスチャの用途に適しているのは、Direct2D を使用するアプリや、JavaScript で作成する UWP アプリです。

このドキュメントでは、以下のアクティビティについて説明します。

  • イメージ コンテンツ パイプラインによって処理されるようにソース イメージを構成する。

  • Direct2D または JavaScript アプリで使用できるテクスチャを生成するようにイメージ コンテンツ パイプラインを構成する。

    • ブロック圧縮形式の .dds ファイルを生成する。

    • 前乗算されたアルファを生成する。

    • MIPMAP の生成を無効にする。

Direct2D のレンダリング規則

Direct2D のコンテキストで使用するテクスチャは、次に示す Direct2D の内部レンダリング規則に準拠している必要があります。

  • Direct2D では、前乗算されたアルファを使用することで透明性と透光性を実現します。 Direct2D と組み合わせて使用するテクスチャには、前乗算されたアルファが含まれている必要があります。この要件は、テクスチャで透明性または透光性を使用しない場合でも同様です。

  • テクスチャは次のいずれかのブロック圧縮形式の .dds ファイルで提供する必要があります。

    • BC1_UNORM 圧縮

    • BC2_UNORM 圧縮

    • BC3_UNORM 圧縮

  • ミップマップはサポートされていません。

Direct2D のレンダリング規則に準拠したテクスチャを作成するには

  1. 基本的なテクスチャを作成します。 既存のイメージ ファイルを読み込むか、新しいイメージ ファイルを作成します。 .dds 形式でブロック圧縮をサポートするには、100 x 100、128 x 128、256 x 192 など、サイズの幅と高さが 4 の倍数であるテクスチャを指定します。 ミップマッピングはサポートされていないため、テクスチャは正方形である必要はなく、サイズも 2 の累乗である必要はありません。

  2. イメージ コンテンツ パイプラインによって処理されるようにテクスチャ ファイルを構成します。 ソリューション エクスプローラーで、作成したテクスチャ ファイルのショートカット メニューを開き、[プロパティ] をクリックします。 [構成プロパティ]>[全般] ページの順に進み、 [項目の種類][Image Content Pipeline](イメージ コンテンツ パイプライン) に設定します。 [コンテンツ][はい] に、[ビルドから除外][いいえ] に設定されていることを確認し、[適用] ボタンをクリックします。 [イメージ コンテンツ パイプライン] の構成プロパティ ページが表示されます。

  3. 出力形式を、いずれかのブロック圧縮形式に設定します。 [構成プロパティ] で、 [イメージ コンテンツ パイプライン][全般] ページの順にクリックし、 [圧縮] プロパティを [BC3_UNORM 圧縮 (/compress:BC3_UNORM)] に設定します。 要件に応じて、他の BC1、BC2、または BC3 形式を選択することもできます。 Direct2D では現在、BC4、BC5、BC6、または BC7 テクスチャはサポートされていません。 各種の BC 形式の詳細については、「ブロック圧縮 (Direct3D 10)」を参照してください。

    注意

    指定した圧縮形式により、イメージ コンテンツ パイプラインによって生成されるファイルの形式が決まります。 これは、イメージ エディターからソース イメージの [形式] で指定する形式とは異なります。[形式] で指定するのは、ソース イメージ ファイルがディスクに格納されるときのファイル形式 (作業形式) です。 通常、圧縮された作業形式は必要ありません。

  4. 前乗算されたアルファを使用して出力を生成するようにイメージ コンテンツ パイプラインを構成します。 [構成プロパティ][イメージ コンテンツ パイプライン][全般] の順にクリックし、 [Convert to pre-multiplied alpha format](前乗算されたアルファ形式に変換) プロパティを [はい (/generatepremultipliedalpha)] に設定します。

  5. MIPMAP が生成されないように、イメージ コンテンツ パイプラインを構成します。 [構成プロパティ][Image Content Pipeline](イメージ コンテンツ パイプライン)[全般] ページの順に進み、 [MIPS の生成] プロパティを [いいえ] に設定します。

  6. [OK] を選択します。

    プロジェクトをビルドすると、イメージ コンテンツ パイプラインによってソース イメージが作業形式から、指定した出力形式に変換されます。同時に、前乗算されたアルファが生成されます。結果はプロジェクトの出力ディレクトリにコピーされます。

Visual Studio のイメージ エディターを使用して、DirectX アプリ開発で使用されるテクスチャとイメージを作成または変更する方法の詳細については、「テクスチャおよびイメージを使用する」を参照してください。