Motion capture with an ordinary web camera, let's move the 3D model quickly!
本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。【この記事に関する別の画像を見る】前回に引き続きWebカメラの映像からモーションキャプチャーを行う「Blender」のアドオン「BlendArMocap」(cgtinker氏作)をご紹介します。比較的導入が簡単で、複雑な操作の必要もないアドオンです。ただし執筆時点ではベータ版のためか、「脚」のモーションの適用が実装されていません(キャプチャー自体はされます)。◆ キャプチャーしたモーションデータを使用する方法前回キャプチャーしたデータはもちろん、実際に「アーマチュア」オブジェクトと関連付け、アニメーションさせることができます。なお、ここではすでに前回で「BlendArMocap」アドオンのインストールと、サイドバー([N]キー)からの実行により、手のモーションが取得できている物とします。■ 「Rigify」アドオンの有効化まずはアドオンで推奨されている「Rigify」アドオンを使用して人体の「リグ」(骨組みなどを模した機構)を作り、アニメーションできるようにします。□「Rigify」アドオンの有効化「Rigify」アドオンは「Blender」にバンドルされているスクリプトの一つです。[編集]メニュー-[プリファレンス...]から[Blenderプリファレンス]画面を表示し、下図の番号に従って有効化してください。□「Rigify」による人体リグの作成アドオンを追加したら、次は制御する「アーマチュアオブジェクト」を追加します。[3Dビューポート]の[追加]-[アーマチュア]メニューの[Human (Meta-Rig)]を実行します。これは「メタリグ」と呼ばれる特殊なアーマチュアオブジェクトで、本来はキャラクターモデルに合わせて編集した後、そのモデル専用に調整されたアーマチュアオブジェクトを生成する物ですが、ここでは単なるテスト用ですので、何もせず生成させます。画面右端の[プロパティエディター]を[アーマチュアプロパティ]に切り替え、[Rigify Buttons]パネル内の[Generate Rig]ボタンをクリックします。少しした後、上記のように別のアーマチュアオブジェクト(「rig」)が生成されます。デフォルトではアニメーションを付けるための「ハンドル」が表示されています。しかし今回は使用しないので、これらを非表示にし、代わりに実際に変形を行う「骨組み」を表示します。また、先ほど追加したメタリグも不要なので非表示にしておきましょう。・画面右上の[アウトライナー]中の「cgt_DRIVERS」が図のようにたたまれていなければ、左端の三角をクリックしてたたんでおきます。・その下の[metarig]項目の右にある目のアイコンをクリックし、下図のように閉じた状態にして非表示にします。・新しくできたアーマチュアオブジェクト(「rig」)が選択中であることを確認し、下の[アーマチュアプロパティ]の[スケルトン]エリアにある[レイヤー]欄の格子の中から下図の位置を1つ目はクリック、2つ目は[Shift]+クリックで選択します。これで準備はできました。■ キャプチャーデータの関連付けではキャプチャーしたデータを関連付けましょう。前回開いた[3Dビューポート]のサイドバーから設定します。[3Dビューポート]のサイドバーから[BlendArMoCap]タブの[BlendArMoCap]パネルを表示し、[Animation Transfer]エリアから次の2つを設定し、[Start Transfer]ボタンをクリックします。・[ドライバー]プルダウンリスト:[cgt_DRIVERS]・[アーマチュア]プルダウンリスト:[rig]設定が終わったら、前回同様、[スペース]キーでアニメーションしてみましょう。[Esc]キーで終了です。■ 「Transfer」の仕組みこの機能は「Transfer」と書いてはいますが、実際はアーマチュアの特定の名前のボーンに「コンストレイント」という、動きを制御する機能を追加し、前回の最後([Start Detection]押下後)に生成されたエンプティのデータを参照させているだけです。では実際にその様子を見てみましょう。「rig」オブジェクトが選択状態のはずですので、まずそのまま画面左上から[3Dビューポート]を[ポーズモード]に変更し、指を囲む「円」(下図参照)をクリックして選択します。その後、[プロパティエディター]の「プーリーと骨」のアイコン(下図参照)をクリックし、「ボーンコンストレイントプロパティ」に切り替えます。すると上図のように[回転コピー]という「コンストレイント」が設定されていることがわかります。そして「ターゲット」というプロパティに設定されているのが、前回お話した「エンプティ」なのです。その回転アニメーションを、このコンストレイントでボーンにコピーしているというわけです。ちなみに、この後に再び[Start Detection]ボタンでキャプチャーを行うと、Webカメラからのデータ解析により、ほぼリアルタイムでこのアーマチュアをアニメーションさせることができます。■ 自作リグへの応用上述のとおり、キャプチャーしたモーションはエンプティにありますので、要は同様にコンストレイントをスクリプトが設定できるなら、「Rifify」で作成したリグ以外でも利用可能です。とはいえ、実際は上記のターゲットのボーン以外にもスクリプト中で他のボーンにもアクセスしているため、自作リグのボーン名を「Rigify」に合わせて付け直すのは面倒ですし、スクリプトの対応箇所を変更するのもリスクがあります。そのため、「Rigify」でリグを作成した後、このリグ内のボーンを参照するコンストレイントを自作リグ側のボーンに作成して、移動や回転をコピーしてしまうのが現実的だと思われます。冒頭でも紹介したこの動画では、「エンプティ群」(キャプチャーデータ群)→「rig」(Rigify製リグ)→「プロ生ちゃんリグ」まで、「コンストレイント」を利用し、リアルタイムでキャプチャーデータを渡しています。残念ながらこの動画ではあまり調整できておらず、腰回りも完全固定でモーションもうまく反映できていませんが、いずれにせよ一方向の画像だけのキャプチャでは限界があるので、このような用途ではなく、編集することを前提した、非リアルタイムの用途に割り切る方がいいと思います。動画にはプロ生ちゃんこと「暮井 慧」を使用させていただいています。許諾をいただいたPronama LLC様、VRMモデルを公開されている120様に感謝いたします。・利用ガイドライン ◆ 終わりに最後は少々残念な結論になってしまいましたが、うまく補正ができるのであれば、安価にキャプチャーできるのはありがたいです。アドオン自体もまだ完成版ではなく、今後に期待したいところです。
窓の杜,山崎 聡