CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Blender2.9】実写合成しよう!~VFX入門~
はじめに
こんにちは!
今回は3DCGソフト「Blender」上での、簡単な「実写合成」の方法について紹介します!
3DCGを実写背景動画と合成してみよう!
「実写合成」とは、文字通り実写映像(動画・静止画)と3DCGを合成する手法です。
実写合成を使うことで、こちらの動画のように、実写の中に3DCGモデルを登場させることができます!
今回は、こちらの動画の作成方法を順を追って説明します!
手順は大きく分けて以下の3ステップです!
- VFXプロジェクトを作成し、動画を読み込む。
- モーショントラッキング&シーンの作成をする。
- CGオブジェクトを配置し、レンダリングする。
VFXプロジェクトを立ち上げよう!
「実写合成」をするには、「VFXプロジェクト」という実写合成専用の設定を使います。
「VFX」とは「視覚効果(Visual Effects)」の略で「映像作品において映像を加工して現実に見ることのできない視覚効果を追加すること」です。
参考:Wikipedia
VFXプロジェクトを作成する
Blenderを立ち上げると、こちらのメニューが現れます。
通常、3Dモデリングをする場合は「全般」を選ぶと思いますが、今回は「VFX」を選択します。
「全般」を選択しまった後でも、こちらのように左上のメニューから「ファイル」→「新規」→「VFX」を選択して開け直せます。
すると、こちらのような画面が現れます。
3DモデリングでしかBlenderを触ったことのない方は、画面配置がいつもの「Layout」と違うので最初は戸惑うかもしれませんね。
ですが、心配無用です!
VFXプロジェクトは実写合成に必要な設定が既にされた状態になっているので、初心者でも比較的簡単に実写合成できます!
動画を読み込む
VFXプロジェクトを開いたら、まずは動画を読み込みます。
今回はこちらの無料動画を使わせていただきます。
ダウンロードした動画を、こちらのようにドラッグアンドドロップでBlenderの画面に読み込みます。
もちろん、自分で撮影した動画を使ってもOKです!
ただし、あとで説明するトラッキングの作業の難易度が高くなるので、動きの多い動画や人や車などの障害物の多い動画ははじめのうちは避けた方がよいでしょう。
FPS・終了フレームの設定
つぎに、フレームの設定をします。
読み込んだ動画のフレーム率(1秒当たり何フレームあるか)を確認します。
フレーム率は、Windowsであればこちらのように右クリック→詳細で確認できます。
フレーム率を確認したら、こちらのように「レンダープロパティ」のフレーム率を動画のフレーム率と同じ(今回は29.97FPS)に設定します。
また、終了フレーム数も設定しておきます。
フレーム数が多いとレンダリングに時間がかかってしまいますので、今回は150フレームにしておきます。
ちなみに、「フレーム数」を「フレーム率」で割ると動画の長さが計算できます。(今回は150÷29.97≒5秒程度)。
モーショントラッキングをしよう!
2つめのステップの「モーショントラッキング」の設定方法を説明します!
「モーショントラッキング」とは、「動画上の特徴点(マーカー)の動きからカメラの動きを解析する」ことです。
モーショントラッキングを行うことで、実写の中にCGが存在するようにカメラを動かすことが可能になります!
トラッキング
トラッキングとは、「マーカーを配置して、1つ1つのマーカーを追跡して動きをデータ化する」作業です。
マーカーの配置
まずは、画面左の「トラック」→「マーカー」のメニューを選択してマーカーを追加します。
「追加」「削除」でマーカーを手動で追加・削除することができますが、こちらのように「特徴点を検出」を選択することで自動でマーカーを配置できます。
「特徴点を検出」を選択したあと、左下のメニューからマーカー配置方法を設定できます。
- 余白:フレームの端からの距離(初期設定:16)
- しきい値:特徴点がトラッキングに十分とみなされるしきい値(初期設定:0.5)
- 距離:マーカー同士の間隔(初期設定:120)
今回は、初期設定のままマーカーを配置します。
マーカーを配置するときは、「現在のフレーム」が1フレーム目になっているか確認しておきましょう!
トラッキング設定
つぎに「トラッキング設定」の項目を設定します。
各項目を設定することで、「特徴点のサイズ変更」「回転・スケールの追加」「後のフレームから前のフレームへのトラッキング」などができますが、今回は動きが少ないので初期設定のままでOKです。
トラッキングの実行
マーカーの配置とトラッキング設定が終わったら、トラッキングを実行します。
画面左下の「トラック」から右矢印のボタンをクリックするとトラッキングが行われ、画面下にマーカーの動きを示すグラフが出力されます。
このあと「カメラモーションの解析」を行うためには、有効なマーカー(最終フレームで黄色になっている)が8点以上必要です!
7点以下の場合は、「マーカーの配置」に戻り、「特徴点の検出」の設定を変更して再トライしてみてください。
トラッキングの詳しい設定についてはこちらの記事で解説していますので、合わせて参照ください!
カメラモーションの解析
トラッキング実行後、マーカーの動きからカメラの動き(カメラモーション)を解析します。
カメラモーションの解析設定・解析
画面左の「解析」のメニューからカメラモーションの解析設定を行います。
「絞り込み」から「焦点距離」「光学中心」にチェックを入れます。
「カメラモーションの解析」を押すと、解析が行われ、画面下のグラフにカメラモーションを示す青い線が出力されます。
右上に表示される「Solve error」(解析誤差)の値を確認します。
この値が大きいと実写合成をしたときのズレが生じるのでできるだけ小さくする必要があります。
こちらのSolve errorは1.02なので悪い数字ではありませんが、0.3を目標にさらに小さくしたいと思います。
クリーンアップ
誤差が大きいマーカーを削除する「クリーンアップ」の作業を行います。
こちらのように、左側のメニューから「クリーンアップ」を選択します。
「エラー」の項目にマーカーごとの誤差のしきい値を入力します。
目標値の0.3をそのまま入力するとマーカーが減りすぎてカメラモーションが解析できなくなる可能性があるので「1」を入力します。
Solve errorの値が0.21となり、目標値の0.3より小さくなったのでこれでOKです!
トラッキングの方法についてはこちらのYoutube動画を参考にさせていただきました。
座標系の設定
つぎに、3Dモデルを配置するための座標系の設定をします。
こちらの動画のように設定します。
動画内の手順は以下です。
- 基準となるマーカー3点を選択して「座標系」→「床」でXY平面を設定する。
- ↑の3点のうち1点を選択し「原点を設定」する。
- 残り2点をそれぞれ選択→「X軸を設定」「Y軸を設定」する。
選んだマーカーによっては、こちらのように座標系が傾いてしまう場合があります。
傾いたままでもモデルは配置できますが、生成したオブジェクトの向きを修正したりする手間が出てくるので、傾かないような3点を選び直した方があとあとの作業がラクです。
シーン設定
座標系の設定が完了したら、画面左の「シーン設定」のメニューで背景とトラッキングシーンを設定します。
「背景として設定」を選択し、読み込んだ動画を背景として設定します。
また、「トラッキングシーン設定」を選択します。すると、3Dビューポート上に立方体オブジェクトと平面が配置されます。
これで、2番目のステップ「モーショントラッキング&シーンの作成」が完了です!
レンダリングしよう!~「影」の設定
実写合成の3番目のステップ「3Dオブジェクトを配置し、レンダリングする」について説明します。
VFXプロジェクトの設定について
作業に入る前に、実写合成のためのVFXプロジェクトのデフォルト設定について説明します。
実写合成では、「前景(Foreground)」と「背景(Background)」2つのビューレイヤをそれぞれレンダリングして、コンポジットノードで合成しています。
…といきなり言ってもわからないと思うので、詳しく説明します。
ビューレイヤについて
ビューレイヤとは、「それぞれのコレクションをレンダリング対象に含める/含めないの設定」のことです。
VFXプロジェクトには「Foreground」と「Background」2つのビューレイヤと「foreground」と「background」2つのコレクションが設定されています(名前が同じで紛らわしいですが…)。
こちらのように、画面右上でビューレイヤの切り替えができます。
それぞれのビューレイヤで、「コレクションプロパティ」の設定内容が違います。
「Foreground」のビューレイヤでは「background」に「ホールドアウト」のチェックが入っています。
これは、「隠れた部分を、レンダリングしないようマスクする」という設定です。
こちらは「Foreground」のビューレイヤをレンダービューで表示した様子です。
初期状態では「foreground」のコレクションに立方体が、「background」のコレクションに平面が設定されていますが、平面に隠れた立方体の下半分はレンダリングされないようになっています。
また、「Background」のビューレイヤでは「foreground」のコレクションに「間接的のみ」のチェックが入っています。
これは、「影や反射などはレンダリングされるが、オブジェクト本体はレンダリングされない」という設定です。
「Background」のビューレイヤを表示すると、以下のように平面に映った立方体の影のみ表示されています。
コンポジットノードについて
VFXプロジェクトでは、映像同士を組み合わせたり加工する「コンポジット」という機能で実写とビューレイヤを合成しています。
こちらのように「Compositing」のタブを開くとデフォルトで設定されたコンポジットノードを見ることができます。
ノードの内容はこのようになっており、基本的にデフォルト設定から変更不要です。
ですが、ビューレイヤの出力と背景動画は「アルファオーバー」という「透明以外の部分を重ね合わせる」ノードで重ね合わせるので、実写合成するにはビューレイヤの背景を透過させる必要があります。
レンダリング方法~Cyclesの場合
↑で説明したVFXプロジェクトの設定を踏まえて、レンダリング方法を説明します!
影を出力するのはCyclesの方が簡単なので、まずはCyclesで動画を出力してみましょう!
オブジェクトの作成方法
3Dビューポートで、立方体オブジェクトを削除したあと、ショートカットキー「Shift+A」で「モンキー」を追加します。
サブディビジョンサーフェスモディファイア(レベル2)を追加したあと、右クリックで「スムーズシェード」をかけました。
マテリアルを追加し、好きな色を付けます。
今回はモンキーが地中から浮き上がってくる映像を作りたいので、アニメーションを設定します。
こちらのように、1フレーム目でモンキーを選択し「Ctrl+G→Z」で平面より下にモンキーを移動させたあと、「I」→「位置」でキーフレームを挿入します。
同じように、100フレーム目で平面より上にモンキーを移動させたあとキーフレームを挿入します。
アニメーションを再生し、浮き上がる動きになっていることを確認します。
背景を透過しよう!
レンダービューを表示します。
このままだと暗いので、ライトオブジェクトを選択し「ポイント」から「サン」に変更し、明るさを3程度に設定します。
レンダーエンジンは「Cycles」に変更しておきます。
このまま試しに画面上の「レンダー」→「画像をレンダリング」(もしくはショートカットキー「F12」)でレンダリングしてみますが、こちらのように背景が灰色になってしまっています。
背景動画と合成するためには、先ほど説明したように、ビューレイヤの背景を透明にする必要があります。
こちらのように「レンダープロパティ」→「フィルム」→「透過」にチェックをONにすることでビューレイヤの背景が透明になり、背景動画と合成できるようになります。
↑の動画だと、モンキーの位置が画面の手前すぎるので、このあとモンキーと平面を奥の方に移動させました。
動画の出力方法
最後に、動画を出力方法を説明します。
「レンダープロパティ」→「出力」からファイルフォーマットを「FFmpeg」、エンコードを「MPEG4」を選択します。
画面上の「レンダー」→「動画をレンダリング」(もしくはショートカットキー「Ctrl+F12」)でレンダリングするとMPEG4形式(.mp4)で動画が出力されます。
レンダリングした動画はこんな感じです!
モンキーの下に影が映り込んでいるので、実写背景の中にCGのモンキーが浮き上がってくるように見えていますね。
こちらのように、平面オブジェクトに設定された「シャドウキャッチャー」によってモンキーの影だけ表示されるようになっています。
※シャドウキャッチャーはCyclesのみ有効です!
Cyclesのレンダリング手順の説明は以上です!
レンダリング方法~Eeveeの場合
「Cyclesではレンダリングに時間がかかるので、Eeveeで動画を出力したい!」という方のためにEeveeでの出力方法も載せておきます!
Eeveeは、こちらの機能が対応していません(Blender2.93)。
- シャドウキャッチャー
- コレクションの「間接的のみ」の設定
Eeveeではシャドウキャッチャーが無効のため、レンダープロパティでEeveeを選択してレンダリングすると、こんな感じで平面がそのまま表示されてしまいます。
Eeveeでレンダリングする場合は、シャドウキャッチャーの代わりとなるマテリアルノード設定が必要です。
影を出力するためのノード(シャドウキャッチャーの代わり)
影だけを表示しそれ以外の部分は透明にするマテリアルを設定します。
「シェーダーエディター」の画面上で、「Shift+A→シェーダー」から、「ディフューズBSDF」「透過シェーダー」「シェーダーミックス」のノードを追加します。
また、「Shift+A→コンバーター」から、「シェーダーからRGB」「RGBからBW」「カラーランプ」のノードを追加します。
▼【カラーランプの機能と使い方】はコチラ!
追加したノードをこちらのようにつなぎます。
こうすることによって、平面の影の部分は黒く、それ以外の部分は透明に表示されるようになります。
また、透過を有効にするためにマテリアルプロパティ→「不透明」から「アルファブレンド」に変更します。
すると、「Background」のビューレイヤを選択した状態でレンダービューを表示すると、モンキーの下に影が表示されます。
「影」のノード設定は以上です!
ノード設定はこちらのYoutube動画を参考にさせていただきました。
オブジェクトをマスクする方法
先ほど記したようにコレクションの「間接的のみ」がEeveeでは無効なので、こちらのように地中に隠れた部分が表示されてしまいます。
以下2つの対処方法(オブジェクトをマスクする)を紹介します!
- 「foreground」のコレクションに「ホールドアウト」を設定する
- 「background」のコレクションの下にもう1個コレクションを追加して「ホールドアウト」を設定し、平面を複製して格納する
1. 「foreground」のコレクションに「ホールドアウト」を設定する
「Background」のビューレイヤを選択したあと「foreground」のコレクションを選択し、コレクションプロパティで「ホールドアウト」にチェックを入れます。
この状態でレンダリングすると、こちらのようにモンキーの地面から下が隠れて表示されるようになります。
この方法は後で紹介する「2.」の方法に比べて手間は少ないですが、よくよく見ると、ホールドアウトの影響でこちらのようにモンキーと影の間に白い線が表示されてしまっています。
気になる方は「2.」の方法を試してみてください!
2. 「background」のコレクションの下にもう1個コレクションを追加
まず平面を選択し、「Shift+d」でコピーします。
このままだともとの平面をマスクしてしまうので、複製した平面を少し-Z(下方向)に移動させます。
複製した平面を選択して「M」で新規コレクションに追加し、追加したコレクション(Collection3)を「background」の下に移動させます。
「Foreground」を表示した状態でCollection3を選択し、「ホールドアウト」にチェックを入れたあと、「Background」のビューレイヤに切り替えて同様に「ホールドアウト」にチェックを入れます。
この状態でレンダリングすると、こちらのように「1.」の方法より自然な仕上がりになりました!
こんな感じで、(手間は少しかかりますが)Eeveeでも実写合成ができました!
まずはCyclesで実写合成に慣れたあとで、Eeveeでの方法にチャレンジしてみると良いと思います。
静止画背景と合成するには?
静止画背景とCGを合成するには、「ワールド背景」にHDRI画像を設定するか、背景画像をコンポジット合成します。
詳しくは「Vtuberの解剖学」で紹介したこちらの記事を参照ください!
オブジェクトの下に平面オブジェクトを追加し、今回紹介した「シャドウキャッチャー」を設定することでこちらのようにリアルな影が作れます!
まとめ
長い記事になってしまいましたが、最後まで読んでいただきありがとうございました!
CGモデリングだけでリアルな空間を作りこむのも良いですが、実写合成をやってみると、Blenderの別の楽しさが味わえますので、ぜひ試してみてください!
実写合成の手順まとめとポイント
- VFXプロジェクトを作成し、動画を読み込む。
- ポイント:フレーム率は読み込む動画に合わせる。
- モーショントラッキング&シーンの作成をする。
- ポイント:クリーンアップで誤差を減らす。
- ポイント:座標系が傾かないようにマーカーを選択する。
- CGオブジェクトを配置し、レンダリングする。
- ポイント:レンダリングプロパティ→「フィルム」→「透過」で背景を透過する
- ポイント:Eeveeの場合は追加設定が必要。