Mixamo to Cascadeur to Houdini（KineFX）モーション

この記事はHoudiniアドベントカレンダー2021　13日目の記事です。

##はじめに
「作ったものを動かしたい！」
「簡単に動かしたい！」
「自分なりの動きも追加したい！」

そんな願いを叶えるべく、気になるツールのCascadeurをHoudiniで使ってみた記録です。
動く楽しさが伝わるといいなーと思います。

https://twitter.com/MasterWhet/status/1470109950835937281?s=20

零号機ベースモデル提供：Gato_Cangrejo氏

##この記事で紹介する内容
1. MixamoのモーションデータをCascadeurに取り込み加工
- モーションをHoudiniに取り込みリターゲット
- Rig attrib VOPで注視点や接地などの制御


###作業環境
- Houdini indie 19.0.383
- Redshift 3.0.59

###ツール類
- Mixamo
言わずと知れたAdobeグループのモーションデータ提供サービス
https://www.mixamo.com
- Cascadeur
とっても気になる物理モーション作成ツール
https://cascadeur.com

###参考記事
- Houdiniの新しいリギングとアニメーション：KineFX機能まとめ
https://qiita.com/jyouryuusui/items/cc4c7c529fed71f03df3
- KineFX Part2：MotionClipアニメーション入門
https://qiita.com/jyouryuusui/items/1ba0c8844c4d51b9878e
- kinefx list of tutorials（サルにもわかる Houdini）
http://ikatnek.blogspot.com/2021/02/kinefx-list-of-tutorials.html

※困ったときは公式ドキュメント。
　困ってなくても公式ドキュメント。

##MixamoのモーションデータをCascadeurに取り込み加工
###Mixamoからモーションダウンロード
定番のMixamo様から好みのモーションをCascadeurへ取り込みます。
FBX（スキンなし）なしでお好みのモーションを収集します。
![スクリーンショット 2021-12-13 004942.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/11b4aad1-b752-df86-401e-428da3b35e5e.jpeg)
今回は動きが大きくわかりやすいように、下記の5つのモーションを使いました。
![スクリーンショット 2021-12-13 011439.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/384938c1-5793-0716-c288-30e1d990a256.jpeg)
モーションデータをダウンロードしたら準備完了です。

###Cascadeurへ取り込み

用意したモーションFBXをCascadeurで開きます。
new scene - Import Fbx/Dae - Animation
![スクリーンショット 2021-12-13 012559_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/2b722387-041e-79e9-d1f4-3bea7d62370a.jpeg)

デフォルトの状態だと何も表示されていないので、左上のモード切替からジョイントモードに切り替えます。
![スクリーンショット 2021-12-13 013039.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/d9223cfe-cc28-2e08-28b7-ba3325d8c841.jpeg)

必要ないフレームを削除しておきます。
範囲選択してカギマークのボタンをクリックするとキーフレームが追加（削除）されます。
![スクリーンショット 2021-12-13 013456_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/e6943c83-2a5f-7aca-49f1-4794b390125a.jpeg)

次に新しいシーンを開き、追加するモーションを読み込みます。
モーションをコピーするためにコピーするジョイントとフレーム範囲を選択します。
Ctrl+Shift+C　コピー元のポイントをコピー

別シーンを開かず同一シーン内でトラックに複数モーションを並べてコピペできる方法がある気がしますが、私は別シーンの方が見やすい気がして分けることにしました。
![スクリーンショット 2021-12-13 013412_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/e1ff9243-2010-beae-0a7d-4879a071731e.jpeg)

コピー先のシーンに戻り、コピー先のジョイントとフレーム範囲を選択します。
Ctrl+Shift+V　コピー先にポイントをペースト
![スクリーンショット 2021-12-13 013642_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/5faae682-f452-7b85-c172-a57dc5f0699a.jpeg)

元のモーションとコピペしたモーションの間が断絶しているので範囲選択して補間ツールでつなぎます。
これを繰り返して複数モーションをつないだり、間に好きな動きを入れたりして調整します。
元のMixamoのFXBファイルは全フレームにキーが打ってあり、モーションを変更したい場合は特徴点となるフレームだけ残して削除し補間しても似た結果が再現されます。

![スクリーンショット 2021-12-13 013749_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/d024f7ef-ba2f-e7e4-adc4-cd40fb7d4e6d.jpeg)

好きなように調整したらFBX形式でモーションのみ保存します。
File - Export Fbx/Dae - Without Meshes
![スクリーンショット 2021-12-13 013851_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/87288b7d-10d9-9111-e1f3-ac9599aaab69.jpeg)



##モーションをHoudiniに取り込みリターゲット
ベースメッシュのスケルトンにモーションデータをリターゲットします。
KineFX登場後にずいぶん紹介されてるので、手順は軽く。


片側のみスケルトンを調整し、半分削除してミラーコピーします。
![スクリーンショット 2021-12-13 022051.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/5866093d-b9d6-5dad-0380-b0c811cd681c.jpeg)
![スクリーンショット 2021-12-13 022107.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/00792b73-0ebe-cf64-7343-44cf00299ebb.jpeg)
Cascadeurから書き出したFBXファイルをfbx anim importノードで読み込みrig stash poseのインプット左に接続。
![スクリーンショット 2021-12-13 022544.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/72875808-e343-e579-549d-148e196aa75f.jpeg)
fbx anim importノードをコピーし、OutputをRest poseに変えてからrig stash poseのインプット右に接続。
![スクリーンショット 2021-12-13 023355.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/43c8363d-a164-9198-cff8-9abc5133795c.jpeg)
rig match poseノードでソーススケルトンのポーズを調整。
map pointsノードでポイントの対応を指定。
![スクリーンショット 2021-12-13 022604.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/020bc03d-c6d0-c170-9b66-5644fdc43be9.jpeg)


##Rig attrib VOPで注視点や接地などの制御
プラスアルファの部分で便利な制御を追加します。

###Look at
カメラなどでも使う、特定のオブジェクト方向を追従するようにするVOPを追加しました。
rigattribvop内にlookatノードを追加して設定しています。

https://twitter.com/MasterWhet/status/1458780042759000067?s=20

###Collision
地面が凸凹していたり、傾斜していたりする際に足がめり込まないように追従します。
（うまくできていないですが）
![スクリーンショット 2021-12-13 023934.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/d544dfa2-1b62-b094-2bd5-cc1e902bf5db.jpeg)
Rig attrib VOPの第2、第3入力をVOPで参照するため、Compute transforms for inputのチェックを外しています。
![スクリーンショット 2021-12-13 024029_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/4c36f3c0-d18a-c9a3-0c67-50d00de819ec.jpeg)
接地対策はRig attrib VOPで指定する方法のほか、adapt to terrainノードを使う方法もあります。
![スクリーンショット 2021-12-13 024207.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/88e33103-529b-ee10-4d35-2b1ff29d0f2e.jpeg)



##おわりに
単純にMixamoモーションをつなぐだけだと足の入れ替えや態勢、重心の移動など不自然な点が出てきます。
実際の動きをよく観察することが魅力的なモーションへの近道だと実感しました。

実はMocap for allを使ったモーションキャプチャとMotion clipなどにも触れたかったのですがそこまでいけませんでした。

- Mocap for all
カメラ2つとPCで全身モーションキャプチャが始められるモーションキャプチャアプリケーション
https://vrlab.akiya-souken.co.jp

お手軽に始められて楽しいのでおすすめです！

Houdiniでよいクリスマスを！