Blender ウォッチング
普通のWebカメラでモーションキャプチャー、3Dモデルをさくっと動かそう!
キャプチャーしたデータの利用と応用
2022年3月4日 06:55
本連載では、無料の高機能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製リグ)→「プロ生ちゃんリグ」まで、「コンストレイント」を利用し、リアルタイムでキャプチャーデータを渡しています。
残念ながらこの動画ではあまり調整できておらず、腰回りも完全固定でモーションもうまく反映できていませんが、いずれにせよ一方向の画像だけのキャプチャでは限界があるので、このような用途ではなく、編集することを前提した、非リアルタイムの用途に割り切る方がいいと思います。
終わりに
最後は少々残念な結論になってしまいましたが、うまく補正ができるのであれば、安価にキャプチャーできるのはありがたいです。アドオン自体もまだ完成版ではなく、今後に期待したいところです。