LoginSignup
1
0

More than 1 year has passed since last update.

Mocopiで撮ったモーションをVRoidキャラにMayaのHumanIKでリターゲット

Last updated at Posted at 2023-03-27

はじめに

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に読み込みます。
BVH読み込み

FBXとして出力します。
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点トラッキングなので相当丁寧に補正されているんだと感じました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0