キャプチャモーションのリターゲットパイプラインを構築する
キャプチャしたモーションをいつでもリターゲットできるようにしておく

リターゲットについて
体型や骨構造の異なるキャラクターに同じモーションデータを適用しようとすると関節が伸びたりなどの破綻が発生する。

これを解決するために体形に合わせてモーションを変換する作業がリターゲットであり、
フーディニではリターゲットを行う仕組みが用意されている。
今回はそれが記載されている公式ドキュメントを追って、モーションキャプチャデータをリターゲットするための構成を構築していく。
アニメーションの転送
https://www.sidefx.com/ja/docs/houdini/character/kinefx/retargeting.html
リターゲットの仕上げとクリーンアップ
https://www.sidefx.com/ja/docs/houdini/character/kinefx/retargetcleanup.html
今回記事で追った内容が公式ドキュメントの内容すべてではないので、
より調整やブラッシュアップが行いたい場合は上述の公式ドキュメント2リンクを参照すればいろいろできることを増やせると思う。
環境
Houdini Indie 20.5.445
リソースは転送用のキャラクターとしてmixamoとキャプチャしたモーションはバンダイナムコ研究所が公開してくれているモーションキャプチャのデータを利用させてもらう。
(おまけで完全に体形の異なる猫もfabの年末セールで購入したのでそちらでもテストしている)
mixamo
https://www.mixamo.com/
Bandai-Namco-Research-Motiondataset
https://github.com/BandaiNamcoResearchInc/Bandai-Namco-Research-Motiondataset
Cats Pack | Fab
https://www.fab.com/ja/listings/43c831f0-fc9f-499d-8d53-9596047dbb5e
※リンク先のBandai-Namco-Research-Motiondatasetのモーションデータは CC BY-NC 4.0 で提供されているので営利目的では使えません。
補足:ノードキャッシュについて
おそらくHoudiniでモーションを扱う工程全体に言えることなのかと思うが、RigPoseなどでノード内部にキャッシュが残ってしまいノードの状態が更新されない場合が多々ある。
そういった場合は 上部メニュー/ windows/ Cache Managerからキャッシュのクリアを行う、シーンを開きなおすなどでキャッシュをクリアすればノードの状態が更新される場合がある。

リターゲットを行うためのノードグラフ

houdiniのドキュメントに記載されているモーションキャプチャの構成をベースに作成していく
実行すると以下のような精度でリターゲットできる。

以下、各ノードの動作の説明。
rig stash pose
デフォルトのポーズを rest transform アトリビュートとして保管するためのノード。 第1入力にはリターゲット元のモーションを入力する。ExtractLocomotionはwalkなどの移動値を別に保管して中央に固定するためのノード。
第2入力にTポーズ、Aポーズなどのデフォルトポーズを入力する。Bandai-Namco-Research-Motiondataset にはデフォルトポーズが見当たらなかったので比較的Aポーズに近かったdataset-1_guide_normal_001.bvh
をtimeshiftノードでの1フレーム目に固定して入力している。

rig pose
スケルトンの状態をアトリビュートとして保存するノード。
ここではmixamoのデフォルトポーズがTポーズなのでモーションキャプチャデータのデフォルトポーズ(として仮定した)Aポーズに近いポーズに変更している。

余談だがこの「モーションキャプチャ側にStashポーズで持たせたポーズに合わせる工程」を怠ると以下のようなポーズの差分だけずれたリターゲット結果になってしまう

map points
転送元と転送先でジョイント同士でFootとFoot、HandとHand…みたいな組み合わせを設定するためのノード。
ノードを選択している状態でシーンビュー上でEnterを押すとジョイントの組み合わせをシーンビューで設定できるような状態になる。
今回は16ジョイントで組み合わせを設定している。

Full Body IK Configure Targets
full body ikを動作させるための設定を追加できるノード。
接地の高さ補完の機能が使えるのでそれを利用している。
(滑りを軽減する方法もどこかで見た気がするが今回ちょっと見つけられませんでした。機能が判り、有効そうであればいずれ追記します。)


実行結果と所感

今回、設定をあんまり厳密に作っていないため補完系の機能を強めすぎると重心がずれたりというような症状も見受けられたが、他にもリターゲットに利用できそうな精度向上のための補完機能もあるのでそのうち有用かどうか試してみたい。
おまけ
4足に2足を適用できるかテストするためにFabの年末セールで買った猫もリターゲットしてみた。
元のモデルが2足にすると破綻してしまうものだったので、まぁ。
これだけだと実用かどうかの判断は難しいが…適当な調整でまぁまぁ動いたので設定を試行錯誤すればもっと無茶なモーションの汎用化もできるかも



fish_ball
プロシージャル魚類