my funeral week

少しでも日々の生活に変化を。

MayaScripts_SplineIKGenerator : 連続するFKにスプラインIKをアタッチする

長い間更新していませんでしたが、まだ生きてます。

SplineIKGenerator

複数の連続したFKリグに対して、スプラインIK制御の外部リグを生成するものを作成しました。
※まだ実践的なテストが不十分なので、あまり使い勝手は良くないかも・・・しれません。

ダウンロード

www.dropbox.com


使い方

ダウンロードしたファイルを解答してその中の、SplineIKGeneratorフォルダを以下の場所に配置してください。

C:\Users\"ユーザー名"\Documents\maya\scripts

実行するには以下の2行。

import SplineIKGenerator
SplineIKGenerator.main()


例えば、以下のようなリグに対して有効です。

まず、SplineIKを適応したいFKリグを根本から順に選択し、スクリプトを実行 してください。

すると、以下のような設定画面が開き、SplineIKリグが生成されます。

この時点では、まだリグとして使用できません。
設定を完了し、Acceptボタン を押すことで、リグが使用可能な状態になります。


設定画面について

各設定項目については以下の通りです。

  • Set follow root node ボタン
    生成するSplineIKリグの 親ノードを設定 できます(空の状態だと、グローバル空間に生成します)。
    親にしたいリグを選択して、このボタンを押すと、右のテキストフィールドにそのリグが入力されます。
    例えば、キャラクターの尻尾に適応したいなら、お尻のリグや重心付近のリグを親に指定すれば、生成されるリグはその子供のトランスフォームとして設定されます。

  • Num of control points
    生成するSplineIKリグの コントローラ数 を指定します。
    2以下、または選択しているFKの総数以上の値は、入力できないようになっています。

  • Tip length
    SplineIKリグの 先端の長さ を指定します。
    選択しているFKリグの距離感から大体の長さをデフォルト値にしていますが、生成されるJointの先端付近を見ながら適当な値に変更してください。負の値も可能です。

  • Tip axis
    SplineIKリグの 先端の方向 を指定します。
    こちらもTipLengthと合わせてJointを見ながら値を変更してください。

  • Up axis
    SplineIKリグの 上方向 を指定します。
    こちらもJointを見ながら値を変更してください。

  • Rig scale factor
    生成するSplineIKリグの コントローラのシェイプの大きさの係数 です。
    大きすぎる場合は値を下げ、小さすぎる場合は上げてください。

  • Rig color
    生成するSplineIKリグの コントローラのシェイプの色 を指定できます。
    初期値はランダムな色になりますので、好きな色に変更してください。

  • Rig rotate order
    生成するSplineIKリグのコントローラは、位置と回転制御でアニメートする仕様になっています。
    なので、コントローラの回転順序 を予め指定できるようになっています。

  • Accept/Cancel ボタン
    設定を完了 して、リグを使用可能な状態にします。
    Cancelを押すと生成を中止して、UIを閉じます。


生成されるリグについて

FKにつけられているアニメーションはコントローラに引き継がれます。
コントローラは移動と回転で制御する仕様 となっており、根本付近のコントローラは基本的に回転だけで制御 する想定です。

設定画面にて、親ノードを指定した場合は、コントローラが入っている階層の親ノードが、指定したノードとParentConstraintで接続されています。


仕様について

エラーのハンドリングについては、まだ甘い状態です。実行前に必ずシーンをセーブしてから行ってください
適応したいFKリグがアニメーションレイヤーに入っていたり、既に他のノードとコンストレイントなどで接続されている場合は、恐らく正しく実行できません。
また、FKリグの回転アトリビュートのXYZがすべてアニメート可能な状態を想定していますので、そちらも予めご了承ください。

SplineIKという仕様上、あまり極端に曲げてしまうと、フリップを起こします。
そういう際は、各Joint階層にオフセットとなるLocatorを仕込んでいますので、一時的にグローバル制御にコンストレイントする等で対応してください。
※下図でいうと、FK1~7_offsetというLocatorがオフセットに該当します。


特殊な実行

このスクリプト生成されたリグの親ノードを選択して、スクリプトを実行 すると、接続先のFKリグのアニメーションをベイクして、生成されたSplineIKリグを削除 する機能があります。
リグを破棄して、再びFKでアニメーションを編集したい場合は、この実行方法が便利です。


余談

Maya2022からPython2.Xから3.Xに切り替わり、そしてMaya2023からPymelが標準インストールではなくなりました。
どうやら、Pymel自体の開発管理は、LUMA Pictures?というところが行っているらしく、Autodeskではないんですかね。
将来的にPymelが使えなくなることも見越して、今回のスクリプトは、Maya.commandsのみを利用しました。
こちらは、Pythonで書けるとは言え、Mayaの操作自体は殆どMelと同じですし、早々にサポート終了されるなんて考えていないんですが、どうでしょうね。