Blender ウォッチング

普通のWebカメラでモーションキャプチャー、3Dモデルをさくっと動かそう!

キャプチャーしたデータの利用と応用

慧ちゃんを動かしてみた

 本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。

 前回に引き続きWebカメラの映像からモーションキャプチャーを行う「Blender」のアドオン「BlendArMocap」(cgtinker氏作)をご紹介します。比較的導入が簡単で、複雑な操作の必要もないアドオンです。

 ただし執筆時点ではベータ版のためか、「脚」のモーションの適用が実装されていません(キャプチャー自体はされます)。

キャプチャーしたモーションデータを使用する方法

 前回キャプチャーしたデータはもちろん、実際に「アーマチュア」オブジェクトと関連付け、アニメーションさせることができます。

 なお、ここではすでに前回で「BlendArMocap」アドオンのインストールと、サイドバー([N]キー)からの実行により、手のモーションが取得できている物とします。

「Rigify」アドオンの有効化

 まずはアドオンで推奨されている「Rigify」アドオンを使用して人体の「リグ」(骨組みなどを模した機構)を作り、アニメーションできるようにします。

「Rigify」アドオンの有効化

 「Rigify」アドオンは「Blender」にバンドルされているスクリプトの一つです。

 [編集]メニュー-[プリファレンス...]から[Blenderプリファレンス]画面を表示し、下図の番号に従って有効化してください。

[Blenderプリファレンス]画面から「Rigify」アドオンを有効化

「Rigify」による人体リグの作成

 アドオンを追加したら、次は制御する「アーマチュアオブジェクト」を追加します。

 [3Dビューポート]の[追加]-[アーマチュア]メニューの[Human (Meta-Rig)]を実行します。

[追加]-[アーマチュア]メニューから[Human (Meta-Rig)]を追加

 これは「メタリグ」と呼ばれる特殊なアーマチュアオブジェクトで、本来はキャラクターモデルに合わせて編集した後、そのモデル専用に調整されたアーマチュアオブジェクトを生成する物ですが、ここでは単なるテスト用ですので、何もせず生成させます。

 画面右端の[プロパティエディター]を[アーマチュアプロパティ]に切り替え、[Rigify Buttons]パネル内の[Generate Rig]ボタンをクリックします。

[アーマチュアプロパティ]の[Rigify Buttons]エリアにある[Generate Rig]ボタンをクリック

 少しした後、上記のように別のアーマチュアオブジェクト(「rig」)が生成されます。

 デフォルトではアニメーションを付けるための「ハンドル」が表示されています。しかし今回は使用しないので、これらを非表示にし、代わりに実際に変形を行う「骨組み」を表示します。また、先ほど追加したメタリグも不要なので非表示にしておきましょう。

  1. 画面右上の[アウトライナー]中の「cgt_DRIVERS」が図のようにたたまれていなければ、左端の三角をクリックしてたたんでおきます。
  2. その下の[metarig]項目の右にある目のアイコンをクリックし、下図のように閉じた状態にして非表示にします。
  3. 新しくできたアーマチュアオブジェクト(「rig」)が選択中であることを確認し、下の[アーマチュアプロパティ]の[スケルトン]エリアにある[レイヤー]欄の格子の中から下図の位置を1つ目はクリック、2つ目は[Shift]+クリックで選択します。
①、②、③の順序で設定

 これで準備はできました。

キャプチャーデータの関連付け

 ではキャプチャーしたデータを関連付けましょう。前回開いた[3Dビューポート]のサイドバーから設定します。

 [3Dビューポート]のサイドバーから[BlendArMoCap]タブの[BlendArMoCap]パネルを表示し、[Animation Transfer]エリアから次の2つを設定し、[Start Transfer]ボタンをクリックします。

  1. [ドライバー]プルダウンリスト:[cgt_DRIVERS]
  2. [アーマチュア]プルダウンリスト:[rig]
[BlendArMoCap]パネルの[Animation Transfer]エリアから図のように設定し、[Start Transfer]ボタンをクリック

 設定が終わったら、前回同様、[スペース]キーでアニメーションしてみましょう。[Esc]キーで終了です。

手の部分だけアニメーションしていることに注意
【「BlendArMocap」でキャプチャーしたモーションを「Rigify」で生成した人体Rigに反映 - 窓の杜】

「Transfer」の仕組み

 この機能は「Transfer」と書いてはいますが、実際はアーマチュアの特定の名前のボーンに「コンストレイント」という、動きを制御する機能を追加し、前回の最後([Start Detection]押下後)に生成されたエンプティのデータを参照させているだけです。

 では実際にその様子を見てみましょう。

 「rig」オブジェクトが選択状態のはずですので、まずそのまま画面左上から[3Dビューポート]を[ポーズモード]に変更し、指を囲む「円」(下図参照)をクリックして選択します。その後、[プロパティエディター]の「プーリーと骨」のアイコン(下図参照)をクリックし、「ボーンコンストレイントプロパティ」に切り替えます。

[ポーズモード]に変更後、指先の「円」をクリックで選択し、囲み内のアイコンをクリックして[ボーンコンストレイントプロパティ]に切り替え

 すると上図のように[回転コピー]という「コンストレイント」が設定されていることがわかります。

 そして「ターゲット」というプロパティに設定されているのが、前回お話した「エンプティ」なのです。その回転アニメーションを、このコンストレイントでボーンにコピーしているというわけです。

キャプチャーしたデータの流れ

 ちなみに、この後に再び[Start Detection]ボタンでキャプチャーを行うと、Webカメラからのデータ解析により、ほぼリアルタイムでこのアーマチュアをアニメーションさせることができます。

自作リグへの応用

 上述のとおり、キャプチャーしたモーションはエンプティにありますので、要は同様にコンストレイントをスクリプトが設定できるなら、「Rifify」で作成したリグ以外でも利用可能です。

 とはいえ、実際は上記のターゲットのボーン以外にもスクリプト中で他のボーンにもアクセスしているため、自作リグのボーン名を「Rigify」に合わせて付け直すのは面倒ですし、スクリプトの対応箇所を変更するのもリスクがあります。

 そのため、「Rigify」でリグを作成した後、このリグ内のボーンを参照するコンストレイントを自作リグ側のボーンに作成して、移動や回転をコピーしてしまうのが現実的だと思われます。

 冒頭でも紹介したこの動画では、「エンプティ群」(キャプチャーデータ群)→「rig」(Rigify製リグ)→「プロ生ちゃんリグ」まで、「コンストレイント」を利用し、リアルタイムでキャプチャーデータを渡しています。

【「BlendArMocap」でキャプチャーしたモーションをリアルタイムでプロ生ちゃんに反映 - 窓の杜】

 残念ながらこの動画ではあまり調整できておらず、腰回りも完全固定でモーションもうまく反映できていませんが、いずれにせよ一方向の画像だけのキャプチャでは限界があるので、このような用途ではなく、編集することを前提した、非リアルタイムの用途に割り切る方がいいと思います。

動画にはプロ生ちゃんこと「暮井 慧」を使用させていただいています。許諾をいただいたPronama LLC様、VRMモデルを公開されている120様に感謝いたします。

終わりに

 最後は少々残念な結論になってしまいましたが、うまく補正ができるのであれば、安価にキャプチャーできるのはありがたいです。アドオン自体もまだ完成版ではなく、今後に期待したいところです。