2024年5月13日月曜日

orientJointの新しいフラグ

 maya2025になり、新機能として「補助軸の方向を自動設定(Auto orient secondary axis)」というのが追加されたようです。


 機能の説明を読むと、ルートジョイントと末端ジョイントの軸を操作するようです。末端ジョイントが親と同じ方向をになるというのは、なんとなく分かりますが、ルートジョイントが子・孫によって定義された平面というのは、いまいちピンときません。

 とりあえずスケルトンを作ってテストです。

 1つ作ってグループ化して複製。GUIから設定を変えて適用するのは面倒なので、スクリプトを組んでみます。

{
    joint -e -oj "xyz" -sao "xup" -ch -zso "group1|joint1";
    joint -e -oj "xyz" -sao "xup" -ch -zso -aos "group2|joint1";
    
}

 group2のほうにある -aosが autoOrientSeconduryAxisのフラグです。これを実行すると

 のようになります。左側が旧来通りのコマンド、右側が新機能ありです。
 新しいフラグを付けた方の末端の軸が親と同じになっています。
 末端への効果は一目瞭然ですが、ルートの方は分かりづらい感じです。

 定義された平面というのが分かりづらいので、もう一つ別のパターンで確認してみます。リラックスした姿勢でモデリングされたときに配置されるようなAポーズの腕の場合を見てみます。

 これも上のジョイント名と同じにしてあるので、同じスクリプトで軸を回転させてみます。すると、

 奥側が新しいフラグを適用したジョイントなのですが、ルートジョイントの軸がひっくり返ったように見えます。
 このルートジョイントの向きは、子ジョイントと孫ジョイントが定義した平面に設定されているように見えます。まぁ、説明の通りのようなのですが、なんか思っていたのとは違う感じがしてしまいます。
 jointOrient(oj)フラグや secondaryAxisOrient(sao)フラグを駆使すれば制御出来そうな雰囲気はありますが、スケルトンの状態との兼ね合いもありそうで難易度は高そうです。

 末端の軸を親に合わせる為だけであれば、新しく追加された aosフラグを使用しないで、jointOrientアトリビュートを setAttrでゼロにする方法をとったほうが安全そうです。



0 件のコメント:

コメントを投稿