NUKEX Furnace Coreノードについて パート3

NUKEXまたはNUKE STUDIOで使用可能なFurnace Coreノードと、Furnaceのツールを基にしたノードについて、使用方法を前半、後半に分けて紹介致します。こちらの記事は、後半の記事です。

前半は、こちらのページよりご覧いただけます。

 

こちらの記事では、以下のノードについて紹介致します。

  • VectorGenerator(F_VectorGenerator)
  • Kronos(F_Kronos)
  • MotionBlur(F_MotionBlur)
  • MatchGrade(F_MatchGrade)
  • F_RigRemoval
  • F_WireRemoval

こちらの記事で使用している素材は、前回に引き続き、Foundry社のFurnace用のチュートリアル素材です。

データはこちらのページに記載されているURLからダウンロードが可能です。

 

▼VectorGeneratorノード

入力したシーケンスから、モーションベクター情報を含む画像を生成することができます。情報は2組(forward、backward)のモーションベクター(x[赤]、y[緑])で構成され、ベクターチャンネルとして格納されます。

このノードで作成された情報は、後述するKronosノード、またはMotionBlurノードで使用することができます。ある素材に対して複数回上記のノードを適用するというような場合には、あらかじめVectorGeneratorノードの情報をシーケンスとして出力し、再利用することをお勧めします。

こちらの素材に対して、VectorGeneratorノードを適用します。

  1. Readノードを作成し、モーションベクターを生成する素材を読み込みます。Readノードを選択した状態で、VectorGeneratorノードを作成します。
     

     
  2. この時点で、結果は出力されています。VectorGeneratorノードにViewerノードを接続し、Viewerのレイヤー切り替えメニューを選択すると、[motion][forward][backward]が、素材のレイヤーとして追加されていることを確認できます。
     

各レイヤーについて、以下にて紹介致します。

 

[forward]

シーケンス内ののフレームを現在のフレームに近似させるために必要なxおよびy方向のオフセット情報をピクセル毎に保存します。

 

[backward]

シーケンス内ののフレームを現在のフレームに近似させるために必要なxおよびy方向のオフセット情報をピクセル毎に保存します。

 

[motion]

[forward]のベクター情報をrおよびgチャンネルに、[backward]のベクター情報をbaチャンネルに入力し、合わせたものです。

取得する情報の精度は、[Vector Detail]で調整が可能です。以下の左の画像は[Vector Detail]を0.3、右の画像は[Vector Detail]を1.0に設定した時の結果画像です。

 

 

▼Kronosノード

リタイムを行うためのノードです。シーケンスからモーションベクター情報を取得し、それを基に補間を行い、より自然に減速、または加速させることができます。VectorGeneratorノードから出力されたモーションベクター情報を使用することも可能です。

Kronosノードは、最初のフレームより前、および最後のフレームより後に画像を追加することはできません。Kronosノードのリタイムは速度を基に現在のシーケンスを伸ばし、各フレームに配置し、間の空いたフレームに対して、モーションベクター情報を利用して画像を生成します。

そのため、リタイム後のフレーム数は、(<最後のフレーム番号>-<最初のフレーム番号>)÷<Output Speedの数値>+1になります。例えば1-10の範囲のシーケンスを[Output Speed]0.5でリタイムした場合、フレーム数は(10-1)÷0.5+1= 19 となります。

こちらのノードはインプットが5つ用意されています。5つ目のインプットは左側の三角をドラッグすることで表示できます。

各インプットについては以下の通りです。

Source リタイムを適用する素材を入力します。
Matte 前景のマスク情報を入力するためのインプットです。モーションベクター情報の生成時に参照するために使用できます。
MoSrc Sourceインプットに接続した素材からモーションベクター情報が取得しづらい場合に、代わりに計算に使用する素材を入力することができます。
FgVecs/BgVecs 別のノードで取得されたモーションベクター情報を入力することができます。

こちらのシーケンスに、Kronosノードを適用します。

  1. Readノードを作成し、リタイムを行う素材を読み込みます。Readノードを選択し、Kronosノードを作成します。
     

     
  2. プロパティの[Input Range]で、リタイムを行う範囲を指定します。[Reset]ボタンで、現在のインプットのフレーム範囲を入力することができます。
     

     
  3. [Method][Motion]であれば、モーションベクター情報を基にリタイムが行われます。[Timing]でタイミングの制御方法を切り替え、すぐ下の項目で数値を設定します。モーションベクター情報の精度は、VectorGeneratorと同様、[Vector Detail]で調整することができます。

以下の画像は、左がRetimeノード、右がKronosノードで2倍の長さにリタイムした時の結果のアニメーション画像です。フレーム再生速度を落としています。単純に隣接するフレームを複製している左に比べて、右は補間されていることが確認できます。

以下は、Kronosノード適用後の結果を通常の速度で再生した画像です。

尚、Kronosノードの処理は、FgVecs/BgVecsインプットを使用してモーションベクター情報を入力することで、計算時間を短縮することが可能です。

 

 

▼MotionBlurノード

シーケンスの動きを基にモーションベクター情報を取得し、モーションブラーを適用できます。VectorGeneratorノードから出力されたモーションベクター情報を使用することも可能です。

Kronosノードと同じ手法、技術を使用しています。基本的なインプットや設定項目は同じですが、こちらは設定項目がより単純なものになっています。

以下のシーケンスに、MotionBlurノードを適用します。

  1. Readノードを作成し、モーションブラーを適用する素材を読み込みます。Readノードを選択し、MotionBlurノードを作成します。
     

     
  2. 適用した時点で、シーケンス内の動きを基に、モーションブラーが適用されます。
     

     
  3. モーションブラーをよりスムーズにする場合は[Shutter Sample]を上げ、モーションブラーの範囲を調整したい場合は[Shutter Time]を調整します。

以下は、MotionBlurノードを適用した後のアニメーション画像です。

 

Kronosノードと同様に、FgVecs/BgVecsインプットを使用して、モーションベクター情報を入力することで、計算時間を短縮することが可能です。

 

 

▼MatchGradeノード

ソースに入力した素材の色と、ターゲットに入力した素材の色を一致させるための補正内容を計算することができます。MatchGradeノードでは、以下のようなことが行えます。

  • 色調補正が適用された素材と適用されていない素材から色調補正内容を抽出する
  • 異なる2つの素材で、片方の色調にもう片方の色調を合わせる

また、計算した結果をファイルとして出力することも可能です。

各項目について、手順を紹介致します。

 

色調補正が適用された素材と適用されていない素材から色調補正内容を抽出する

左の素材に対して、右は色調補正がすでに適用され、書き出しが行われた素材です。MatchGradeノードを使用し、右の色調補正の結果を計算し、取得します。

  1. Readノードで、色調補正前の素材と、補正後の素材をそれぞれ読み込みます。補正前の素材を読み込んだReadノードを選択して、MatchGradeノードを作成します。そして、Targetインプットに補正後の素材を読み込んだReadノードを接続します。
     

     
  2. プロパティ内の[Task][Match Graded Source]のままにします。このモードはSourceとTargetそれぞれに接続した素材のピクセル間の色の違いを確認するため、補正後の素材のサイズ等が異なっている場合は、[Align Target to Source]ボタンをクリックして、自動的に作成されるノードで同じサイズ、位置になるように調整します。また、書き出しの際に上下に黒いボーダーが含まれるような場合は、[Crop Target]にチェックを入れてから[Align Target to Source]ボタンを押し、調整します。
     

     
  3. [Ref Frames]Sourceの項目で、補正内容を解析するためのリファレンスフレームを設定します。カレントフレームをリファレンスフレームにしたいフレームへ移動させ、プロパティの右側にある鍵と+のアイコンをクリックします。
     

     
  4. [Analyze Reference Frames]ボタンを押し、解析します。しばらくすると、結果が表示されます。解析結果が望ましくない場合は、[Ref Frames]を追加する、[Pre LUT]をLinearまたはLogarithmicに変更する、[LUT Resolution]を上げる、等を行い、再度解析します。

以下の画像は、左が補正前の画像、中央が補正後の画像、右が補正前の画像にMatchGradeの結果が適用された画像です。

また、上記のVectorscopeタブの結果は以下の通りです。

最終的に、プロパティ内最下部の[Export]メニューよりファイルを出力し、[Create OCIOFileTransform]ボタンからさらにそのファイルを読み込んだOCIOTransformノードを作成することで、こちらの結果をエクスポートして別の素材へ適用することができます。

 

異なる2つの素材で、片方の色調にもう片方の色調を合わせる

MatchGradeノードを使用して、左の画像を右の画像の色調に合わせるということを行います。

  1. Readノードで、それぞれの素材を読み込みます。色調補正を適用する素材を読み込んだReadノードを選択して、MatchGradeノードを作成します。そして、Targetインプットに解析を行う素材を読み込んだReadノードを接続します。
     

     
  2. プロパティ内の[Task][Match Different Clip]に変更します。
     

     
  3. [Ref Frames]SourceおよびTargetの項目で、補正内容を解析するためのそれぞれの素材のリファレンスフレームを設定します。カレントフレームをリファレンスフレームにしたいフレームへ移動させ、各プロパティの右側にある鍵と+のアイコンをクリックします。リファレンスフレームは、解析結果をより正確にするため、可能な限りシーケンス内の各要素(草、空等)の比率が似ているものを選んでください。
     
  4. また、必要に応じて、マスクを使用して解析範囲を制限します。MatchGradeは両方のマスク情報を解析時に使用することができます。こちらの素材では、Targetインプットに入力した素材に不要な要素が含まれているため、これを除外します。Rotoノードでマスクを作成し、[Mask]プロパティでInvert Alphaを選択します。


      
  5. [Analyze Reference Frames]ボタンを押し、解析します。しばらくすると、結果が表示されます。解析結果が望ましくない場合は、[Ref Frames]を追加する、[Pre LUT]をLinearまたはLogarithmicに変更する、[LUT Resolution]または[Iterations]を上げる、等を行い、再度解析します。

以下の画像は、左が補正前の画像、中央が補正後の画像、右が補正前の画像にMatchGradeの結果が適用された画像です。

また、上記のVectorscopeタブの結果は以下の通りです。

 

 

▼F_RigRemovalノード

フレーム間での動きから要素を判断し、別のフレームから取得した適用することで、細かい手間をかけずに、シーケンス内に含まれる不要なオブジェクトやリグを除去することができます。仕様上、背景に異なる動きをしているオブジェクトが複数あるようなシーケンスはあまり得意ではありませんが、そうでないものに関しては非常に速い処理が可能です。

こちらのシーケンス内の走行しているバイクを、F_RigRemovalノードで除去します。

  1. クリーンプレートの作成を行う素材をReadノードで読み込みます。Readノードを選択し、F_RigRemovalノードを作成します。
     

     
  2. プロパティの[Rig Region]で、不要なオブジェクトを指定する範囲の指定方法を選択します。こちらでは、簡単なマスクを使用して処理するために、RigMask Alphaを選択します。Rotoノードを作成し、マスクを作成します。F_RigRemovalノードのRigMaskインプットにRotoノードを接続します。
     


    以下の画像は、マスク内容をViewer上でオーバーレイで表示したアニメーション画像です。
  3. 現時点の結果を確認し、背景を使用するフレームの長さを[Frame Range]で調整します。

F_RigRemovalノードの適用後の結果は以下の通りです。地面はまだ少し影が残っていますが、手前の木や柱には影響せず、バイクのみが消えていることが確認できます。

 

 

▼F_WireRemovalノード

シーケンス内に含まれる、ワイヤーを取り除くことができます。背景が複雑な場合でも、比較的ワイヤーを取り除くことが可能です。また、シーケンス内で動くワイヤーをトラッキングする機能も含まれています。

こちらのシーケンスのワイヤーを、F_WireRemovalノードで取り除きます。

  1. ワイヤーが含まれている素材をReadノードで読み込みます。Readノードを選択した状態で、F_WireRemovalノードを作成します。
     

     
  2. F_WireRemovalノードのプロパティが開き、Viewerタブ上にハンドルが表示されます。カレントフレームをキーフレームを設定したいフレームまで移動させ、ハンドルの各ポイントをドラッグし、ワイヤーに重ねます。追加でいくつかキーフレームが必要な場合は、フレームを移動し、ハンドルを調整します。
     

     
  3. プロパティ内にある再生ボタンをクリックすると、指定した場所からワイヤーのトラッキングを行います。
     

     
  4. 結果を確認します。[On-Screen Wire]Hideに設定して、一時的にハンドルを非表示にします。[Repair]でワイヤーを除去するための処理方式を設定し、[Filter Size]および[Temporal Offset]で調整します。

F_WireRemovalノードの適用後の結果は以下の通りです。

 

Furnace Core ノードおよびFurnaceに関連するノードの紹介は以上となります。