Microsoft DirectX 8.0 (Visual Basic)

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

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

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

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

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

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

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

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