ディゾルブ、フェード、スワイプ (Direct3D 9)
ディゾルブ、スワイプ、フェードなど、映画やビデオでよく使用される特殊効果が、ますますアプリケーションでも使用されるようになっています。
ディゾルブでは、スムーズなフレーム シーケンスで、1 つのイメージが徐々に別のイメージに置き換えられます。 Direct3D では複数のテクスチャのブレンドを使用して同じ効果を生む方法が提供していますが、ディゾルブにステンシル バッファーを使用するアプリケーションでは、ディゾルブを使用しながら、他の効果にテクスチャ ブレンド機能を使用できます。
アプリケーションでディゾルブを行うときは、2 つの異なるイメージをレンダリングする必要があります。 ステンシル バッファーを使用して、レンダー ターゲット サーフェスに描画される各イメージのピクセルを制御します。 一連のステンシル マスクを定義し、後続のフレームのステンシル バッファーにコピーできます。 または、最初のフレームに基本のステンシル マスクを定義して、徐々にそれを変えていくこともできます。
アプリケーションは、ディゾルブを開始するときに、最初のイメージのピクセルのほとんどが、ステンシル テストに合格するように、ステンシル機能とステンシル マスクを設定できます。 最後のイメージのピクセルの大半は、ステンシル テストに不合格になります。 後続のフレームでステンシル マスクは更新されて、テストに合格する最初のイメージのピクセルは徐々に少なくなります。 フレームが進むにつれて、テストに不合格になる最後のイメージのピクセルは徐々に少なくなります。 この方法では、アプリケーションは任意のディゾルブ パターンを使用して、ディゾルブを実行できます。
フェード インやフェード アウトは、ディゾルブの特殊なケースです。 フェード インでは、ステンシル バッファーを使用して黒または白のイメージから 3D シーンのレンダリングへとディゾルブします。 フェード アウトは反対に、3D シーンのレンダリングから始めて、黒または白のイメージにディゾルブします。 フェードは、利用したい任意のパターンを使用して実現できます。
Direct3D アプリケーションでは、スワイプに同様の手法を使用します。 たとえば、アプリケーションが左から右へのスワイプを実行する場合、最初のイメージの上に最後のイメージが左から右にスライドする形で表示されます。 ディゾルブと同様に、後続のフレームでステンシル バッファーに読み込まれる一連のステンシル マスクを定義するか、最初のステンシル マスクを順次変更します。 ステンシル マスクは、最初のイメージのピクセルの書き込みを無効にし、最後のイメージのピクセルの書き込みを有効にするために使用されます。
スワイプは、ディゾルブよりもやや複雑で、アプリケーションがスワイプの逆の順序で最後のイメージのピクセルを読み取る必要があります。 つまり、スワイプが左から右に移動する場合、アプリケーションは最初のイメージのピクセルを右から左に読み取る必要があります。
関連トピック