VRCでモーションキャプチャーをしよう[フラット向け]

# はじめに
* VRCにおける自分の動きをレコーディングしてモーションを作る方法を説明します
* [フラット](https://booth.pm/ja/items/3562180)を使うことを想定していますが、その他でもほぼ変わりません
* [HUMR](https://booth.pm/ja/items/2731418)を使います
    * ぜひ商品ページの説明を熟読下さい [^1]

# Unity準備
* 次をいれたプロジェクトを用意しておく [^2]
    * フラット(無印、Anibどちらでも)
    * [HUMR_OutputLogLoader](https://booth.pm/ja/items/2731418)


# VRC初期設定（初回のみ）
* VRChatの小さいメニュー、歯車タブより「ログの出力」をONにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/74ee79eb-ab29-afb6-f660-aadfc1572570.png)

# 動きの記録
* アバターをフラットに変更（無印サンプルフラットを推奨 [^3]）
* [モーション記録ワールド](https://vrchat.com/home/launch?worldId=wrld_5962f8a1-bc92-481e-b05a-7cb90eadce34&instanceId=0)に行って、記録したい動きをする
* 動きが終わったら、VRCを終了する
    * 記録は、ワールドに入った瞬間に開始、VRC終了時に保存される [^4]

# 動きの抽出
* fbxファイル[^5]をHierarchyにいれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/181c20a3-6ab9-4a4f-7e00-6b663d4f3368.png)

* Inspectorから　Add Component→Output Log Loader(HUMR)をアタッチする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/0097dbd3-7cf3-3a74-8794-af7aa9d89f37.png)

* Display Nameにモーションを記録したキャラクター名を入力する
* LoadOutputLogから適切なログを選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/2ed45946-6e81-bda9-6233-33881d315369.png)
:::note info
* ログは基本的に最大2日分保存されています
* 表示されている数字は、VRC起動時刻を表しています
例：_04-03-22 = AM4時3分22秒
:::

* LoadLogToExportAnimボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/7865f857-d64c-9ba5-d280-eb845e4994d1.png)
* エクスポート画面が出て処理が実行される[^6]ので、終わるまで少し待つ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/3736df00-b2fe-e2eb-183e-7c9599d765fd.png)
* Assets/HUMR/FBXs/(自分の名前) というフォルダが出来ている[^7]ので移動する。その中のfbxをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/3c254337-08fb-b85d-fcc5-5c9c3a3dddb6.png)
* [より良くするための手順](#より良くするための手順)を好みに応じて実行する
* InspectorにおいてAnimationを押す。下にアバターサンプルが出ていなければ二重線部分をクリックして表示させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/6c97e84c-384e-1a09-922d-7d8a277111ad.png)
* 再生ボタンを押して記録したものが読み込めていることを確認[^8]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/a8175669-9cfe-b7b6-d122-e26f8b90bfca.png)


# ループ設定・トリミング(前後不要部削除)と抽出
* ウィンドウサイズをうまく調整して以下の表示が見えるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/eff401c2-8072-9aa2-1b6a-b14ed8dae6b2.png)
* ループモーションにするならLoop Timeにチェックをいれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/57d424f7-87d5-7613-4699-9995731f06e5.png)
* アニメーションの範囲をバーで調整して、欲しい場所だけ再生されるようにする [^9]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/859d53bf-16f1-7c4d-e30b-70450b3fa7ee.png)
* 下の方にスクロールして、Applyを押す [^10]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/6a526844-4091-190f-8d4c-01547aae5a81.png)
* fbxの右矢印を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/6b62d293-cec2-f36b-7467-c2158ff52af5.png)
* Animationをクリックして、Ctrl+Dを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/032c837a-d554-5d92-7914-1f82bdb373e8.png)
* モーションデータの出来上がりです！あとはこれを実際に使いたいプロジェクトにコピーしてEmoteBox等で実行して下さい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/987bc675-ca86-65f1-494a-d714757ada61.png)



# より良くするための手順
:::note info
Ctrl+Dで分離するより前の時点でこの手順を実行するとより正しいアニメが出力されるはずなのですが、体感できるほどの違いはないように思います。
:::
* InspectorからRig、Configureをそれぞれクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/7a6bb443-eeee-f477-bc07-ecab26dbfc8f.png)
* InspectorでChestがNoneになっているはずなので、Hierarchyからいれる
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/75cb331a-cbd2-8f7d-a117-303b43ebfe28.png)
* Headをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/f4cac01a-1b1f-683b-d6d0-c075339b98c6.png)
* Jawにマッピングされているボーンをクリックして、キーボードのDeleteを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/14314c7e-0cf6-abcd-46f0-6e2868737b2f.png)
* Inspectorを下にスクロールしてDoneを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/da8226df-0f5c-e864-7613-357eb34898b9.png)


# 動きの取り込み
:::note info
これはうまくExport出来なかった時のトラブルシューティング手順です。通常必要ありません
:::
* Advanced:CustomOutputLogPathをクリックするとパスが表示されるのでそれをコピーしてエクスプローラで開く
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/b2cfe237-a060-81a3-0b65-452d12cf03d9.png)
* ファイルサイズが0でないログ(output_Log_日付_時刻.txt)を開く
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/7d0ff7e3-ddd2-34c3-e8c6-4ec4b2463a18.png)
* テキスト内を「HUMR:」で検索する。下のようなものが出れば、赤で囲った部分がDisplay Name。　出なければ、そのログにはレモーションレコードした情報が保存されていないので、他のログを探す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/4d34447b-528d-b6cd-eb84-f9f5549c4557.png)


[^1]: 無料ダウンロード方法の案内もあります（便利だと思ったらぜひ購入して下さい！）
[^2]: 既存プロジェクトに追加でやってもよいですが、アバターにLogLoaderをつけるとAv3Emuなどとの相性が悪く管理が難しくなります。そのあたりの操作ミス防止・説明の簡便さのため新規プロジェクトで説明しています。
[^3]: アクセサリをArmatureの中に入れていたりすると変な記録になるので改変済みは避けるとよいです（逆に、ボーン構造を変える改変をしていて、汎用的でないモーションを作るならそのアバターそのものがよいです）。無印・Anibはどちらでもいいですが説明の簡便さのためとりあえず無印を推しています。
[^4]: 入った瞬間からなので最初は変な姿勢になります。また終了するまで保存されません。
[^5]: prefab、fbxのいずれも同じ結果になります。Av3Emuの誤動作防止のためfbxを使うとよいです。無印・Anibどちらでもよいです。
[^6]: もしエクスポート画面が出ない場合、ログが取れていないか、DisplayNameが誤っている可能性が高いです。[ログの見方](#ログの見方)を参考に確認して下さい。
参考までにここではVRCで取得したログを元にGenericアニメーション(アバターを動かす事はできないアニメーション)を一度作成し、そのアニメーションをFBXに組み込んで(ここでFBX Exporterというアセットを使っている)、HumanoidとしてUnityに再読込させる(この時点でアバターを動かせるアニメーションに変換される)という処理をしているようです。Hierarchy上の存在をファイルに出力するのはUnity的には出力なので「エクスポート」というウィンドウのようです。
[^7]: AnimationController,GenericAnimationsフォルダも作成されますが、使いません（GenericAnimationでHumanoidアバターを動かすことは出来ません！）
[^8]: 最初にすごい姿勢をしていたり、最後にログアウトの動きをしていたり、影が濃かったりしますが、とりあえず実行した動きが保存されていればOKです。fbxでのLoadingを推奨しましたが、もしprefabで実行してboneに追従がうまくいかないアクセなどあるとこの時点で空中に固定されて表示されて邪魔になることがあります。
[^9]: 最初と最後のフレームは全てのキーが完全に記録されます。ループアニメを作るときはその最初と最後のデータだけ作ってあとは自動補間すると（多少滑らかすぎて機械的にはなるけれど）自然な感じにできると思います
[^10]: 範囲外のアニメデータは消されます。あとから必要になったらもう一度Loadすればいいだけですが、すぐ必要なことが明確ならばfbxをCtrl+Dで増やしておくと便利だと思います