長い間更新していませんでしたが、まだ生きてます。
SplineIKGenerator
複数の連続したFKリグに対して、スプラインIK制御の外部リグを生成するものを作成しました。
※まだ実践的なテストが不十分なので、あまり使い勝手は良くないかも・・・しれません。
ダウンロード
使い方
ダウンロードしたファイルを解答してその中の、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と同じですし、早々にサポート終了されるなんて考えていないんですが、どうでしょうね。