Voodoo Camera Tracker + Javie + MMD でお手軽マッチムーブ 後編


だいぶ間があいてしまいましたが、前回の続きです。前回は練習用の映像をMMDで作成し、そのカメラワークをトラッキングしてJaive上でテキストや平面を合成しました。今回は実写映像を使用します。Voodoo Camera Tracker で実写映像のカメラをトラッキング、Javieを経由しVMD形式に書き出してMMDに読み込ませます。そして、最終的にはMMDレンダリングした映像と元の映像をJavie上で合成します。



こんな感じのものができあがります。実写映像は http://www.nicovideo.jp/watch/sm15066519 の 2:47 付近から使用させていただきました。

レンズ補正

実写映像の場合、(特に広角で撮影した場合には)映像が歪曲して映ってしまいます。精度の高いトラッキングを行うために、まずはこの歪みを補正します。左の画像が歪みのある状態、その歪みを補正したものが右の画像です。画像下部に映っている水路が、左はかなり曲がっていますが右はほぼ直線になっています。

Javieでこの処理を行うには「レンズ補正」エフェクトを使用します*1。「レンズディストーションを反転」をオンにし「量」を調整します。


本来ならこちらに書かれているように、方眼紙などを撮影してレンズ補正の量の適正な値を調べるべきですが、今回は自分で撮影した映像ではないので見た目で適当に補正しました。

シャープ化、高コントラスト化

ラッキングを行う映像は、シャープ化と高コントラスト化をすることでより多くの特徴点を拾うことができるようになります。シャープ化には「シャープ」または「アンシャープマスク」エフェクトを、高コントラスト化には「輝度&コントラスト」エフェクトを使用します。

Voodoo Camera Tracker でトラッキング

Voodoo Camera Tracker でのトラッキング手順は前回と同じですが、ひとつ補足しておきます。

焦点距離がわからない場合は正しい焦点距離を推測するために何度もトラッキングしてみる必要があります。

と前回書きました。では、そのトラッキングは具体的にどのように試行すればよいのかということがわかりにくかったかと思います。

試行を繰り返す際、焦点距離の値をどれくらいずつ変化させたらよいのかというのがわかりにくいですが、焦点距離は視野角から計算できるということを思い出してください*2。視野角であれば、例えば最初は5°単位で変化させて試行し、トラッキング結果が良くなってきたら1°ずつ変えて試行する、という具合にできるでしょう。

今回の動画では 30→20→25→30→35→32→33→32.5 と視野角を変化させて(焦点距離を計算し)試行を繰り返しました。

Voodoo Camera Tracker 上で四角形を作る

前回はMMDステージのスクリーンに四角形を合わせましたが、今回はスクリーンに相当するような物体は映っていないので、地面の適当な位置に四角形を合わせます。

カメラデータをJavieで読み込む

前回、カメラデータをJavieで読み込む手順の中で次のように書きました。

次に、ヌルオブジェクトを作成します。ヌルオブジェクトを3Dレイヤー化し、位置を 0.0, 0.0, 0.0 にしてください。アンカーポイントに先ほどの四角形の位置を100倍した値を入力します。四角形の回転角を全て正負逆にして回転に入力します。このヌルオブジェクトをカメラレイヤーの親にします。

このヌルオブジェクトの設定を行うことで、四角形に対して(今回の場合ならMMDステージのスクリーンに対して)コンポジションの座標軸が正対し、3Dレイヤーは初期状態でスクリーンに対して並行になります。このヌルオブジェクトの設定を行わないと座標軸が傾いたままとなるため、3Dレイヤーの配置が難しくなります。

しかし、実はこれだけだと座標軸が±90°あるいは180°回転している場合があります。前回のようにJavie上での作業だけであればこれはさほど問題ではありませんが、VMDを書き出してMMDに読み込ませる場合は地面の向きが上下逆になったり横向きになったりしてしまい、そのままでは使い物になりません。そこで、次のようにして座標軸を完全に一致させます。

まず、一旦VMDを書き出して(書き出し方は次の項目で説明しています)MMDに読み込ませてみます。地面の向きがおかしい場合、Javieに戻ってヌルオブジェクトの「方向」プロパティを設定します。

設定すべき値は 0, 90, 180, 270 の組み合わせで、例えば (90, 0, 0) かもしれないし (270, 0, 180) かもしれません。3Dに慣れた人なら、正しくない地面の向きから方向プロパティに設定すべき値の組がすぐにわかるかもしれませんが、そうでない場合は適当に設定してみてください。方向プロパティを設定したら再びVMDを書き出してMMDに読み込ませ、地面の向きを確認します。

JavieからVMD形式で書き出す

メニューから「File→書き出し→MMDカメラデータ(.vmdファイル)」と選択してください。このメニュー項目は、タイムラインパネルがアクティブになっていないと選択できないので注意してください。

Javieの座標系とMMDの座標系はスケールがずいぶん異なるので、「スケール」には2%とか5%くらいの値を入れると良いと思います。なお、スケールは「小さな値を入れるほどMMD上でモデルの表示が大きく」なります。

「位置の基準」は、Javie上のどの点をMMD上での原点にするかの指定です。xとzの値はある程度適当でもMMD上でモデルの位置を動かせばよいのですが、yの値は正確に合わせないとMMDの地面と実写映像の地面が合わなくなるので注意してください。

VMDファイル上で視野角の値は整数値しか取ることができないため、VMDに書き出す際には四捨五入/切り捨て/切り上げのどれかを行うことになります。「視野角の丸め」はその指定です。丸め方法が不適切だと視野角の値が不規則に+1または-1変化してしまい、MMD上で再生すると画面がぶるぶると揺れた映像になることがあります。

VMDファイルをMMDで読み込む

これは特に問題ないでしょう。VMDファイルを読み込み、MMD上での作業を終えたらAVIに書き出してください。

MMDから書き出したAVIと元の映像をJavie上で合成する

これも普通に重ねるだけですので大きな問題はないかと思いますが、いくつか注意事項があります。MMDから書き出したAVIファイルをJavieのプロジェクトパネルに読み込んだら、右クリックして「メディアオプション」を選択してください。そして「乗算済みアルファ」を選択し、カラーマットの色をMMDの背景色と同じ色にします。*3


合成には「レンズ補正した」実写映像を使用してください。補正前のオリジナル映像に合成してしまうと、歪みが大きい部分ではMMDの映像と合わなくなってしまいます。

まとめ

なんかもうめんどくさくなってきたwので一番大事なことだけ書きます。

  焦点距離超重要

正確な焦点距離を推測できていれば Voodoo Camera Tracker のトラッキングはかなりの精度が出ます。これがうまくできてないと他のことは何をやっても無駄です。正確な焦点距離を推測するために何度も試行するのは面倒ですが頑張りましょう。

*1:AEのレンズ補正エフェクトと大体同じですが、パラメーターがいくつか異なります。

*2:計算式は前回の記事をご覧ください。

*3:MMDから書き出したAVIって、乗算済みアルファで書き出されてますよね?