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