やったこと
BlendArMocapのベータ版が1/31に無料リリースされたので、それを使ってBlender上のモデルに対してモーションキャプチャを使ってポーズやアニメーションを作成してみた
環境
Windows11
Blender2.93
使用アドオン:BlendArMocap, MBLab, Rigify
※BlendArMocapについて→GitHub
手順
BlendArMocapアドオンを追加する
BlendArMocapダウンロードページからzipファイルをダウンロードし、Blenderのアドオンに追加
Install dependenciesを実行
→No module named 'mediapipe'
と怒られる
BlendArMocapを使うために必要なmediapipe(Googleが提供するオープンソースのメディアデータ向け機械学習用フレームワーク)がBlenderの標準Pythonモジュールに入っていないので別途インストールが必要
→pipなどでインストール(パッケージインストール先がちゃんとPath/To/Blender 2.93/2.93/python/lib/site-packages
になるように注意)
Blenderに戻りInstall dependenciesを実行
→ContextMenuにBlendArMocapが表示される
リグコントローラ付きモデルを用意する
MBLabアドオンを追加し、ContextMenu>MBLabから特に何も指定せずCreate characterでモデルを生成する(自作モデルがあればそれを使う)
Rigifyアドオンを追加し、Add>Armature>Human(Meta-Rig)でリグを追加
→ リグの編集モードでモデルと合うように調節する
metarigのObjectDataProperties>RigifyButtonsからGenerateRigを実行してリグコントローラを生成
モデル→生成したrigの順で選択しSetParentで自動ウェイトでスキニングする
BoneHeatWeighting: failed to find solution for one or more bones
というエラーログが出たらモデルのメッシュの重複頂点を削除する(エラーが出なくなるまでMergeDistanceを大きくする)
モーションをキャプチャする
以上でモーションキャプチャする準備が整ったのでオブジェクトモードに切り替えてBlendArMocapを開く
- WebcamDeviceSlot: モーションキャプチャに使用するWebカメラを指定
- KeyStep: キーフレームの頻度を指定
- Target: BlendArMocapではHands(手)、Face(顔)、Pose(ポーズ)を別々でキャプチャできるので、キャプチャしたいターゲットを選ぶ
StartDetectionボタンを押すとBlender上でWebカメラの映像が表示されモーションキャプチャが開始される(Q/ESCキーか右クリックで終了できる)
キャプチャしたモーションをrigに流す
キャプチャしたモーションはDriverとしてOutlinerに生成される
BlendArMocapのAnimationTransferでrigに流したいDriverコレクションを指定してStartTransferで実行する
Timelineで再生するとキャプチャしたモーションでモデルが動いていることが確認できる
参考ページ
https://forest.watch.impress.co.jp/docs/serial/blenderwthing/1390871.html
https://github.com/cgtinker/BlendArMocap
https://www.youtube.com/watch?v=pji6IHNCnAk