はじめに
Mocopiとは、Sonyから発売されている簡易モーションキャプチャーです。
6DoFのセンサーを6点装着することで、フルボディトラッキングすることが可能です。
ホームページはこちらです。(https://www.sony.jp/mocopi/)
スマートフォンと接続する必要があり、対応端末はホームページに記載されています。
(私のスマートフォンはiPhone11なので対象外なのですが、接続できました。)
VRoidとは、人型キャラクターの3Dモデルを作成できるフリーのモデリングソフトです。
ホームページはこちらです。(https://vroid.com/)
キャラモデルの準備とHumanIK対応
ご自由にキャラモデルを作成し、MayaのHumanIKに対応させてください。
詳細はこちらの記事に記載しています、「HumanIK対応」まで行ってください。
https://qiita.com/salt-k2t/items/b574f4269185d14151f3
モーション準備
Mocopiでモーションキャプチャし、BVHファイルをPCに送ってください。
BVHファイルはMaya標準だと読み込め無いため、一度Blenderに読み込みます。
FBXとして出力します。
ソフト間のスケールの違いがあるので書き出し時の設定をScale0.01とします。
モーションのHumanIK対応
mocopiモーションのFBXをロードし、HumanIKのマッピングを行います。
手動で設定するのが面倒だったので、スクリプト化しました。
よかったら使ってください。(マッピングが間違っていたら指摘いただけるとありがたいです。)
rig_name = "Mocopi"
mel.eval('hikCreateCharacter("{0}")'.format(rig_name))
mel.eval('hikUpdateCharacterList()')
mel.eval(' hikSelectDefinitionTab()')
model_root = "root"
cmds.select(model_root)
joint_settings = [["root", 1],
["torso_1", 8],
["torso_2", 23],
["torso_3", 24],
["torso_4", 25],
["torso_5", 26],
["torso_6", 27],
["torso_7", 28],
["neck_1", 20],
["neck_2", 32],
["head", 15],
["l_shoulder", 18],
["l_up_arm", 9],
["l_low_arm", 10],
["l_hand", 11],
["r_shoulder", 19],
["r_up_arm", 12],
["r_low_arm", 13],
["r_hand", 14],
["l_up_leg", 2],
["l_low_leg", 3],
["l_foot", 4],
["l_toes", 16],
["r_up_leg", 5],
["r_low_leg", 6],
["r_foot", 7],
["r_toes", 17]]
for joint_setting in joint_settings:
mel_command = 'setCharacterObject("{0}","{1}", {2}, 0);'.format(
joint_setting[0], rig_name, joint_setting[1])
mel.eval(mel_command)
リターゲット
キャラクタをキャラモデル(VRoid)に、ソースをモーションモデル(Mocopi)にします。
ベイク処理 → コントロール リグへのベイク処理
を実行します。
確認
早い動きや手を合わせる動きは難易度高いですが、アタリくらいであれば使えそうですね

まとめ
Mocopiで撮ったモーションを、VRoidキャラに、HumanIKでリターゲットしました。
MayaがBVHとVRM(glft)を読むことができない点が面倒ではありますが、
リターゲット性能は素晴らしく、大変便利ですね。
この価格でこの精度を出せるのであれば、個人ゲーム開発やVTuber配信などで重宝すると思います。
余談ですがmocopiの背骨(torso)って7本もあるんですね、6点トラッキングなので相当丁寧に補正されているんだと感じました。