スケルトンによる変形と物理演算を併用する方法について書いてみます。
結論から言うとそれっぽく動くけど、スケルトンのフリップを回避できませんでした。用途によっては使えるかもしれないので問題点を含め手順を書いておきます。
今回試した方法はソフトボディ計算したメッシュに、スケルトンを「ポリゴンの位置」「ポリゴンの法線」コンストレイントする方法です。
作成手順です。
- スケルトン、バインド済みのメッシュ、ソフトボディ計算用のメッシュを準備します。
ソフトボディはあらかじめ「シミュレーションを演算」でキャッシュを作成しています。 - セットアップモードをONにして、スケルトン、メッシュの順に選択して「ポリゴンの位置」コンストレイントを適用します。このとき補正オプションはONです。
- 同じ要領で「ポリゴンの法線」コンストレイントを適用します。
「ポリゴンの位置」コンストレイントは位置をポリゴンにくっつけてくれますが、スケルトンに回転の情報は伝わりません。「ポリゴンの法線」コンストレイントを使用することで位置と回転をスケルトンに与えています。 - セットアップモードをOFFにしてアニメーションを再生すると、スケルトンによってバインドしたメッシュが変形します。
ここでスケルトンは動くのにバインドしたメッシュが変形しない場合は、シーンを「保存」した後に「ファイル / 復帰 」を使用してシーンをリロードすると正しく動くようになります。おそらくダイナミクスのキャッシュとデフォーマの評価順に問題があって、シーンロード時にだけ正しく動作してる気がします。
一見それっぽく動いてる用に見えますが、よく見るとスケルトンがフリップしてるのがわかります。ソフトボディの計算でポリゴンがゆがんでるのが原因だと思いますが、ソフトボディでポリゴンを安定させるのは大変な気がします。
ポリゴンにスケルトンをコンストレイントする方法はスカートのように厚みのないメッシュに向いてると思います。厚みのあるモデルはチェーンの作り方のように、パスコンストレイントしたカーブに「ダイナミックカーブ」を使用すると、メッシュの「半径グラディエント」を衝突判定に使用することができるので便利かも知れません。
スケルトンとダイナミクスの問題点
modoのダイナミクスはメッシュかカーブがないと衝突判定の範囲を制御できません。スケルトンに「アクティブリジッドボディ」を適用して「衝突実行」をONにすると物理計算はできますが、コリジョンサイズが 1m 固定になってしまいます。
どこかでコリジョンサイズを変更できれば、ピンやスプリングコンストレイントを使ってスケルトンを物理計算できるようになる気がします。下の画像はシーン全体を1mのコリジョンにあわせたものです。
スケルトンを使うとアニメーションをベイクできるので、他のソフトにモーションを出力できるというメリットがあります。modo内で完結するならラップデフォーマのケージメッシュにソフトボディを適用する方法が手軽かもしれません。