Platform SDK: DirectX

ディゾルブ、フェード、およびワイプ

ディゾルブ、ワイプ、およびフェードなどの映画やビデオでよく使われる特殊効果をアプリケーションで利用することが増えている。

ディゾルブでは、フレームが徐々に変わることによってある画像が別の画像にスムーズに移行する。Direct3D はこれと同様のエフェクトを実現するためにマルチ テクスチャ ブレンディングを使用する方法を提供しているが、ディゾルブにステンシル バッファを使用するアプリケーションは、ディゾルブの実行中にこのテクスチャ ブレンディング機能をほかのエフェクトに利用できる。

ディゾルブを実行するとき、アプリケーションは 2 つの異なる画像をレンダリングしなければならない。アプリケーションはステンシル バッファを使用して、レンダリング ターゲット サーフェスに各画像のどのピクセルを描画するのかを制御する。一連のステンシル マスクを定義して、連続するフレームのステンシル バッファにこれらのマスクをコピーできる。別の方法として、最初のフレーム用の基本ステンシル マスクを定義し、このマスクを増分して変更することもできる。

ディゾルブの最初で、最初の画像のほとんどのピクセルがテストにパスするようにステンシル関数とステンシル マスクをアプリケーションで設定する。最後の画像のほとんどのピクセルは、ステンシル テストに失敗しなければならない。フレームが続くにつれて、最初の画像のピクセルでテストにパスするピクセルが徐々に少なくなるように、ステンシル マスクを更新する。フレームが続くにつれて、最後の画像のピクセルでテストに失敗するピクセルが徐々に少なくなる。このように、任意のディゾルブ パターンを使用してディゾルブを実行できる。

フェード インまたはフェード アウトは、ディゾルブの特殊なケースである。フェード インするときは、ステンシル バッファを使用して、黒色の (または白色の) 画像から 3D シーンのレンダリングにディゾルブする。フェード アウトはこれと逆で、3D シーンのレンダリングから始まって、黒色の (または白色の) 画像にディゾルブする。フェードには、どのようなパターンでも使用できる。

Direct3D アプリケーションは、ワイプにも同様な技術を使用する。たとえば、アプリケーションは左から右へのワイプを実行する。最後の画像は、最初の画像の上に徐々にスライドするように左から右に移動する。ディゾルブの場合と同様、連続フレームのステンシル バッファにロードする一連のステンシル マスクを定義するか、続けて最初のステンシル マスクを修正する必要がある。このステンシル マスクは、最初の画像のピクセルの書き込みを無効にし、最後の画像のピクセルの書き込みを有効にするために使用する。

ワイプの順序とは逆の順序で最後の画像のピクセルを読み出さなければならないという点で、ワイプはディゾルブよりも少し複雑である。つまり、ワイプが左から右に移動する場合、アプリケーションは最後の画像のピクセルを右から左に読み出さなければならない。