Tips

modoでワールド回転からローカル角度を計算する方法

IKのようにチャンネルモディファイヤによって制御されているアイテムから、リギングのためローカル座標を取得したいことがあると思います。ローカル角度は「自分のワールド回転と、親オブジェクトの逆行列をかける」と求めることができます。

画像では親アイテム(スケルトン)のWorld RotationをMatrix Invertで逆行列を求めています。
Matrix InvertのOutputを、ローカル角度を求めたいアイテムのWorld RotationとMatrix Composeを使用して掛けます。
Matrix Composeはチャンネルにリンクした順で計算します。(マトリクスの計算はかけ算の順番で結果が変わるので注意が必要です)
最終的にマトリクスをMatrix To Euler を使用してXYZの角度に変換します。

測定ノードの Measure Angle で角度を求めることもできます。

 

 

一般的にマトリクスからオイラー変換する場合には複数の解があり、Matrix To Euler ノード1つで3軸分の角度をユーザーが望む形で出力すのは数学的に難しいらしいです。オイラーを使う以上フリップは避けられませんが、「回転順序」を変更するとフリップの発生する方向が変わるので、フリップ角度を取得できるかしれません。

下の画像はWorldRotationをMatrix To Eulerでオーラーにしたとき、特定の角度で回転がフリップした例。回転順をXZY に変更しているので、フリップは発生するもののデフォルトの状態より望ましい状態になります。

サンプルファイル

 

modo13.2以降のバージョンジョンでは、Twist Extractorが追加されています。見た目の角度を維持する場合はTwist Extractorが楽でいいかもしれません。

サンプルファイル

 

参考

Modo Tips



 

記事のまとめページ

コメントを残す