こちらの記事では、前回の記事に引き続き、NUKE 10より追加されているSmart Vectorツールについて紹介致します。
※Footage courtesy of FOUNDRY(こちらの記事で使用している素材は、FOUNDRY社よりご提供いただいている素材です。)
※使用しているNUKEのバージョン:NUKEX 10.5v3
前回の記事では、1フレーム目のみ、ペイントを行いました。今回は、このペイント情報を他のフレームに適用します。
ベクトル情報を使用した変形の適用
それでは、VectorDistortノードを使用して、他のフレームにもペイント内容を適用してみましょう。
-
- カレントフレームを、ペイントしたフレームに移動させます。
- VectorDistortノードを追加します。SrcインプットにRotoPaintノードで作成したペイントを含むシーケンスを接続します。
- SmartVectorインプットを、モーションベクターデータを含む.exrファイルを参照しているSmartVectorノード、または.exrファイルを読み込んでいるReadノードのいずれかに接続します。
- VectorDistortノードのプロパティ内の[reference frame]に、ペイントを行ったフレームが入力されていることを確認してください。入力されていない場合は、ペイントしたフレームをカレントフレームにして、[set to current frame]をクリックし、VectorDistortノードが参照するフレーム数を設定します。もしくは、[reference frame]に直接フレーム数を入力します。
この段階のビューアの結果がこちらの画像です。各フレームのマーカーを消すことはできましたが、目や口、画像の端のあたりが変形の影響を受けています。
- VectorDistortノードの下にPremultノードを追加して、ペイントした部分だけを合成できるようにします。
- 結果をもとのシーケンスに合成します。Mergeノードを作成し、AインプットにPremultノードを、BインプットにReadノードを接続します。
- カレントフレームを、ペイントしたフレームに移動させます。
合成後の結果は、以下の通りです。ある1フレーム目にのみペイントした結果が、残りのフレームにも違和感なく適用されていることが確認できます。
補足:VectorDistortノードの計算範囲を指定する
今回は特に問題はありませんが、デフォルトでは、すべてのピクセルに対してVectorDistortノードの計算が適用されるため、処理が遅いことがあります。
VectorDistortノードのプロパティで[mask channel]にマスクチャンネルを指定すると、そのマスクの数値が0のピクセルには全く変形が適用されず、1のピクセルにのみ変形が適用されるようになります。これにより、処理時間を短縮することができます。
設定は、以下のように行います。
- Rotoノードを作成し、VectorDistortノードの上に接続します。[output]をmaskに指定します。
- ベジェツールなどで、VectorDistortの[reference frame]に入力しているフレームで、必要な範囲のみのマスクを作成します。
- VectorDistortノードのプロパティを開き、[channels]をAllにして、[mask channel]にmask.aを入力します。