[移行記事]キャラクターのジョイントリダクション
ここ最近進めていたHoudini上でのジョイントのリダクションを適用した比較 良さげ

元記事のデータ
記載日:2024 9/24
移行する際にわかりづらいなと感じる部分があったので一部加筆、修正しています。
https://www.notion.so/10abb0f9429180589153cdf5c6fdface?pvs=4
環境
Houdini Indie 20.5.332
モデル、モーションはmixamoを利用させてもらった
構成
主要な部分は二つでやること自体はシンプル。
- モデル、モーションに対して JointDeleteノードでジョイント数を削減
- ジョイントを消すとスキンウェイトが破綻するのでJointCaptureBiharmonicノードで再度バインドをする

Houdiniの自動スキニングである「JointCaptureBiharmonic」が非常に精度が良く、LODのキャラクターくらいなら作れるのでは無いかという予想で準備した仕組み
YBot7割削減テスト
シンプルな素体でのジョイント削減テスト。指などのジョイントを削減している。




Unreal上に出力したgif。
YBotくらいシンプルなモデルなら破綻もほぼ見当たらない
(股回りだけメッシュの重なりが近いためよく見ると少しだけ破綻している)

飾りがあるキャラクター削減テスト
飾りのような形状を含むメッシュでは部分的に破綻も見られた。


肩部分の飾りがheadに張り付いてしまっている。かたいものは別途バインド範囲を分離して行うと良さそう。

JointCaptureBiharmonicで対応不可能なモデル
JointCaptureBiharmonicでの自動バインドは非常に優秀だが非多様体メッシュやMayaシーン内でLocatorを含むなどで分離したポイントが残っている場合などでは正常に動作しない場合がある。

mixamoの上記キャラクターはスカート内の足が蓋がないシリンダーのためエラーがでてしまう。穴を埋めたメッシュをスキニングしてからウェイトだけ転写するなど工夫すればいけるかも。
実際に運用に使うなら仕様に穴あきメッシュを使わないなど入れたほうが良さそう。
削減の限界
YBotくらいシンプルなモデルならかなり無茶な削減をしても動作するが当然ジョイントを削減しすぎるとモーションにスキン形状が引っ張られて破綻がわかりやすくなってしまう。
以下の画像は肩ジョイントを削除したらさすがに肩回りのスキン形状がぱっと見で判るくらいに伸びてしまったもの。


完全に自動で運用というよりは目視を許容できるフローの方が相性は良さそう。
まとめと感想
思った以上に良い結果が得られたので良かった。実際にパイプラインとして落とし込むなら
- プレビューしながらジョイント削減を行えるような仕組み
- メッシュのリダクションも入れた総合キャラクターリダクション (スキンメッシュのポリゴンリダクションもHoudiniはとてもきれいに実施してくれる)
- ジョイントが残る部分に対しては元メッシュのスキンウェイトを転送する
あたりも含めるとよりよい仕組みを作れそう。
ポリゴンリダクションも含めたキャラクターリソース全体の削減テストをZennにも興味があればそちらも見てください。
https://zenn.dev/konno/articles/fa88c93f7b4413
スキンメッシュのパイプラインというのはどうしても手作業が多くなるというのが定説だったのでKineFXの機能を利用したスキンメッシュのパイプライン検討は他にもいろいろ試していきたい。

fish_ball
プロシージャル魚類