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

はじめに

Javie 0.5.5 に Voodoo Camera Tracker のカメラデータを読み込む機能とJavieのカメラデータをVMDで書き出す機能を付けたので、こんなことができるようになりました。



これらはアイマス素材のカメラの動きをトラッキングし、テキストやMMDモデルなどを合成したものですが、実写素材でも同様のことができます。というかマッチムーブは普通、実写素材に対して行うものですね。マッチムーブと言えばニコニコ動画では「厳島神社の人」が有名ですが、あの方がやってることの超劣化版ということになるでしょうか。

そんなわけで、今回から2回にわけて「Voodoo Camera Tracker + Javie + MMD でお手軽マッチムーブ」という記事を書いていきます。今回は、Voodoo Camera Tracker の使い方(というか練習)と Voodoo Camera Tracker から書き出したカメラデータを Javie で読み込むところまで解説します。

ちなみに、僕はマッチムーブについては素人で、見よう見まねで適当にやってます。間違ったことを書いてたら指摘していただけるとありがたいです。あと、照明を合わせたりとかグレインマッチングとかその辺のことについては触れません。「お手軽マッチムーブ」という趣旨なので、その辺はご容赦ください。

Voodoo Camera Tracker について

Voodoo Camera Tracker は無料で利用できる*1マッチムーブソフトです。次の場所からダウンロードできます。
http://www.digilab.uni-hannover.de/download.html


基本的な使い方は次の記事がわかりやすかったので、これらも参考にしてください。

CGcompo Voodoo で始める!初めてのマッチムーブ
CGcompo マッチムーブのクオリティをアップさせよう!
http://translation.heteml.jp/wiki/index.php?Voodoo%20Camera%20Tracker%20HP%20%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3


なお、Voodoo Camera Tracker に期待し過ぎないでください。焦点距離が変化している(ズームを使用している)素材は正確にトラッキングできません。ズームを固定していても、その焦点距離がわからない場合は正しい焦点距離を推測するために何度もトラッキングしてみる必要があります*2。また、Voodoo Camera Tracker は一度に処理できるフレーム数が200〜400程度*3ですので、長いシーンをトラッキングするのも簡単ではありません。

練習用の素材を作成する

練習用の素材をMMDで作ります。ビデオカメラを持っている人はそのカメラで撮影した素材を使ってもいいのですが、焦点距離を調べたりするのが面倒だと思うので、最初はMMDで練習用の素材を作るのが良いでしょう。MMDで作った素材なら視野角から簡単に焦点距離を計算できます。

練習用の素材を作る手順は次のとおりです。

  • MMDで付属のステージを読み込みます。モデルは読み込みません。
  • 視野角は初期値の45°のままにし、適当にカメラワークを付けます。
    • カメラの初期位置と回転角を適当に弄っておきます。カメラの初期状態がステージに対して完全に正対していると後の作業が楽なのですが、実際にマッチムーブを行う素材がそのような状態で撮影されていることはまず無いと思いますので、練習でもカメラの初期状態を弄っておきます。
    • 練習用としては、最終フレームのカメラが最初のフレームのカメラに一致するように、つまりループ素材になるように作るのが良いです。そのように作ることで、Voodoo Camera Trackerでのトラッキングが正確に出来ていればトラッキングしたカメラの軌道も最初の位置に正確に戻ってきますし、トラッキングが不正確な場合はズレてしまうのですぐにわかります。
  • フレーム数は200程度にしておきます。
  • 出力サイズは512x384にしてください。
    • どんなサイズでもいいのですが、出力サイズが異なると後で計算する焦点距離の値も変わってきますので、練習ではこのサイズで出力しておいてください。

動画を連番TGAまたは連番PNGに変換できるソフトを入手し、練習用に作った素材を連番ファイルにします。Javieでも連番PNGの書き出しはできますが、かなり遅いです。他のソフトを使用することをお勧めします。僕はTMPGEnc無料版で連番TGAにしました。Voodoo Camera Tracker は連番TGAしか読めないと説明している記事が多いですが、連番PNGも読めます。少し前のバージョンまでは連番TGAのみだったようです。

Voodoo Camera Tracker はファイル名などに日本語が含まれているとダメらしいので、ファイル名と保存場所までの全てのフォルダ名を英数のみにしておいてください。

ラッキングの練習

Voodoo Camera Tracker を起動し、メニューから File -> Open -> Sequence を選びます。出てきたダイアログのBrowseボタンを押して、先ほど書き出した連番ファイルのどれか1つを選択します。Move Type を free move にします。OKボタンを押すと、連番ファイルが読み込まれウインドウ内に表示されます。


メニューから View -> Controls を選びます。出てきたダイアログの左下の方に、FreeMove という項目があります。これを選択すると右側の内容が FreeMove のものに切り替わります。右端にある Focal Length を User Fixed に変更します。


メニューから File -> Open -> Initial Camera を選びます。出てきたダイアログ内の Film Back の値を 5.12 と 3.84(素材のサイズの1/100)にします。素材の縦横比と同じであれば何でも構いませんが*4焦点距離の計算にも使いますので、練習ではこの値を入力してください。

焦点距離を計算し、Focal Length の欄に入力します。焦点距離の計算は次の式を用います。

焦点距離 = (Film Backの右側に入れた値) / (2 * tan((視野角/2) * (PI/180)))

Film Backの右側に入れた値=3.84, 視野角=45 なので、

焦点距離 = 3.84 / (2 * tan((45/2) * (PI/180))) = 4.63529004

となります。この計算には関数電卓などが必要ですが、グーグルの検索欄に入力すれば計算してくれます。


Initial Camera の設定を終えたらトラッキングを開始します。ウインドウ右下にあるTrackボタンを押してください。終わるまでしばらくかかるので待ちましょう。

ラッキング中の様子


ラッキングが終わったら、メニューから View -> 3D Scene Viewer を選びます。検出されたカメラの軌道が3D空間に表示されるので、カメラが滑らかに移動し最終フレームで最初の位置に戻ってきていることを確認します(前述したように、素材をそのように作ってある場合)。トラッキングが不正確だと、カメラの軌道がガタガタになったり最終フレームで元に戻ってこなかったりするので、明らかに失敗している場合はこの段階ですぐにわかります。


Viewerの画面上でマウスをドラッグして視点を移動したり回転したりできます。"U", "I", "O", "P" の各キーを押すと移動や回転の仕方が変わります。また、右クリックと左クリックでも移動や回転の仕方が異なります。

しかし、正確にトラッキングできているかどうかはまだわかりません。次はその確認のための作業です。メニューから View -> Modeling Tools を選ぶと、ウインドウ左側にボタンが幾つも現れます。四角いアイコンのボタンを押すとトラッキングした3D空間内に四角形が追加されるので、それをMMDステージのスクリーンに合わせます。移動、回転、拡大縮小の各ツールを駆使して合わせてください。3D Scene Viewer 上でも四角形を操作できます。四角形をスクリーンに合わせたら、同様に床にも四角形を合わせます。

スクリーンと床に四角形を合わせた
そのときの 3D Scene Viewer

スクリーンと床に四角形を合わせたら、再生してみます。再生中、四角形がスクリーンや床にきちんと張り付いたままであれば正確にトラッキングできています。トラッキングが不正確だと徐々にずれていってしまいます。完全に一致させるのはなかなか難しいので、ある程度の妥協は必要です。

ラッキングしたカメラデータの書き出し

正確にトラッキングできていることを確認したら、カメラデータをファイルに書き出します。メニューから File -> Save -> Textfile を選んでください。

四角形の位置と回転角を得る

スクリーンに貼付けた方の四角形は、その位置と回転角が後の作業で必要になります(床の方は不要です)。位置と回転角は次の手順で表示することができます。

  • ウインドウ左の矢印アイコンのボタンを押します
  • 四角形の四隅の点どれかにマウスを合わせて右クリックするとダイアログが表示されます

Voodoo Camera Tracker での作業はこれで終わりです。

Voodoo Camera Tracker から書き出したカメラデータをJavieで読み込む

Javieを起動し、メニューから File -> 読み込み -> Voodoo Camera Trackerカメラデータ(Textfile) を選んでください。ファイルを選択した後に表示されるダイアログ内で、フレームレートを練習用素材と同じにしてください。その他の設定は初期値のままで構いません。

Finishボタンを押すとコンポジションが作成されます。そのコンポジションにはカメラレイヤーひとつだけが含まれ、トラッキングしたカメラデータの通りにキーフレームが設定されています。


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

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


これでカメラデータの読み込みは完了です。

練習用の素材とともにテキストや平面を配置してみる

練習用の素材をプロジェクトに読み込み、コンポジションに入れます。そして、テキストや平面を作成し、適当に移動、回転して配置します。再生してみて、MMDのステージ内に存在しているように見えれば成功です!

次回

次回は、JavieからカメラデータをVMD形式で書き出してMMDに読み込ませます。MMDで作った動画をトラッキングして、そのカメラデータをまたMMDに持っていっても面白くないというか無意味なので、どうしましょうかね。ケータイのカメラだとあまり精度よくトラッキングできないんですよね。


追記:後編書きました
http://d.hatena.ne.jp/butyricacid/20110901/1314883171

*1:商用利用は不可のようです

*2:焦点距離を自動判定する機能もありますが、かなり誤差があります。冒頭の動画は焦点距離を手入力し、その値を少しずつ変えて5回くらい試行しました。

*3:僕が試した限り、400フレームでも頻繁にクラッシュしました。

*4:実写素材の場合はカメラの撮像素子のサイズを入力します。

*5:Voodoo Camera Tracker の Initial Camera で、素材のサイズの1/100の値を Film Back に設定したため、ここで100倍する必要があります