次の方法で共有


テクスチャー ブレンディング (Direct3D 9)

Direct3D では、単一のパスで 8 つまでのテクスチャーをプリミティブにブレンドすることができます。複数のテクスチャー ブレンディングを使用すると、Direct3D アプリケーションのフレーム レートを大幅に上げることができます。アプリケーションでは、複数のテクスチャー ブレンディングを採用することで、テクスチャー、影、スペキュラ ライティング、ディフューズ ライティングなどの特殊効果を単一のパスで適用できます。

テクスチャー ブレンディングを使用するには、アプリケーションで、最初に、ユーザーのハードウェアがテクスチャー ブレンディングをサポートしているかどうかを確認する必要があります。この情報は、D3DCAPS9 構造体の TextureCaps メンバーにあります。ユーザーのハードウェアでテクスチャー ブレンディング機能を照会する方法の詳細については、「IDirect3DDevice9::GetDeviceCaps」を参照してください。

テクスチャー ステージとテクスチャー ブレンディング カスケード

Direct3D では、テクスチャー ステージの使用によって、単一パスでの複数のテクスチャー ブレンディングがサポートされます。テクスチャー ステージは 2 つの引数を取り、それらに対してブレンディング処理を実行して、その後の処理またはラスター化に結果を渡します。テクスチャー ステージを具体的に表すと、次の図のようになります。

Blended output

上の図のように、テクスチャー ステージは、指定された演算子を使用して、2 つの引数をブレンドします。一般的な演算には、引数のカラーまたはアルファ成分の単純な乗算や加算がありますが、実際にサポートされている演算は 24 を超えます。ステージの引数には、関連付けられたテクスチャー、補間されたカラーまたはアルファ (グーロー シェーディング時の補間)、任意のカラーとアルファ、以前のテクスチャー ステージの結果などがあります。詳細については、「テクスチャー ブレンディングの処理と引数 (Direct3D 9)」を参照してください。

    Direct3D では、カラー ブレンディングとアルファ ブレンディングは区別されています。アプリケーションでは、カラーとアルファについて個々にブレンディングの演算と引数を設定し、これらの設定の結果は互いに独立しています。

複数のブレンディング ステージで、引数と演算を組み合わせて使用することによって、単純なフローベースのブレンディング言語を定義できます。1 つのステージの結果は別のステージに移行し、さらにそのステージから次のステージに移行します。その後も同様に続きます。結果が、ステージからステージに渡され、最終的にポリゴンでラスター化される概念を、一般に、テクスチャー ブレンディング カスケードと呼びます。次の図は、個々のテクスチャー ステージがテクスチャー ブレンディング カスケードを構成しているようすを示しています。

Texture blending cascade

デバイス内の各ステージには、ゼロから始まるインデックスがあります。Direct3D では、最大 8 つのブレンディング ステージを使用することができますが、必ずデバイスの能力をチェックして、現在のハードウェアでサポートされるステージの数を確認する必要があります。最初のブレンディング ステージはインデックス 0 にあり、2 番目のブレンディング ステージはインデックス 1 にあり、その後、インデックス 7 まで同様に続きます。システムは、インデックスの昇順でステージをブレンドします。

ステージは、必要な数だけ使用してください。未使用のブレンディング ステージは既定で無効になります。つまり、アプリケーションで最初の 2 つのステージのみを使用する場合、演算と引数の設定が必要なのは、ステージ 0 と 1 のみです。システムでは 2 つのステージがブレンドされ、無効なステージは無視されます。

    4 つのステージを使用するオブジェクトや、2 つのステージのみを使用するオブジェクトなど、状況に応じてアプリケーションで使用するステージの数が変わる場合は、以前に使用したすべてのステージを明示的に無効にする必要はありません。1 つのオプションとして、最初の未使用のステージについてカラー処理を無効にすると、それよりもインデックスが大きいステージはすべて適用されなくなります。2 番目のオプションとして、最初のテクスチャー ステージ (ステージ 0) にカラー処理を設定すると、テクスチャー マッピングをまとめて無効にすることができます。3 番目のオプションとして、テクスチャー ステージの D3DTSS_COLORARG1 が D3DTA_TEXTURE で、そのステージのテクスチャー ポインターを NULL にした場合、そのステージおよびそれ以降のすべてのステージは処理されません。

追加情報は次のトピックに含まれます。