MayaScripts_ParentSwitcher:一時的にリグの位置空間を変更する
お久しぶりです。
ここ最近は仕事が忙しかったり居住環境が変わったりと色々とありまして一切の更新が出来ませんでごめんなさい。
さて、今回は久しぶりに自作スクリプトの公開記事です。
※2022/1/9更新しました。
ParentSwitcher
アニメーション作業中、リグの位置空間を一時的に変更したいってことありますよね?
各3DソフトにあるHumanIKとかBipedにもそういった機能がデフォルトで設けられていることからして、これは全てのアニメーターが必要としていると断言しても過言ではないかと思います。
例えば、キャラクターが逆立ちするアニメーションを制作するとして・・・地面に手を着いた瞬間から胸の子供で動いていた手のリグをワールド空間上で制御したいとか、逆立ち中の両足は腰のローカル空間上で制御したいとか・・・挙げだしたらキリがないくらいに事例はありますよね。私は今までやってきたほぼ全ての作業においてこういった事に遭遇しました。
このスクリプトは任意のノードの位置空間をワールドにしたり、適当なノードのローカル空間になるように外部ノードを生成できます。また、生成した外部ノードを元のリグに戻すこともワンクリックで可能です。
■ ダウンロード
以下のリンクからダウンロードできます。
■ インストール
DLして解凍したフォルダ内の「ParentSwitcherフォルダ」を、以下の場所に配置してください。
C:\Users\"ユーザー名"\Documents\maya\scripts
で、実行するには以下の2行をシェルフ等に登録してお使いください。
import ParentSwitcher
ParentSwitcher.main()
■ 使い方
ノードをワールド空間上に制御を変更したい
任意のノードを選択して実行すると、そのノードのアニメーション情報を基に制御空間をワールド状態にした外部ノードを生成します。適当なノードのローカル空間に変更したい
ローカル空間にしたいノードを選択し、最後に親としたいノードを選択してください。「Ctrl」キーを入力しながら実行すると最後に選択されたノードを親として、それ以外のノードは親のローカル空間になるように外部ノードを生成します。元のリグにアニメーションをベイクしたい
外部ノードを選択した状態で実行すると、元のリグにアニメーションをベイクして外部ノードは削除されます。 「Shift」を押しながら実行するとこの機能はオフにできます。
基本的な使い方は以上ですが、他にもオプション機能があります。
● オプションウィンドウについて
「Shift + Ctrl」を押しながら実行すると、以下のようなウィンドウが立ち上がります。
■ Parent : 制御する位置空間を設定します。
- SceneRoot
- ワールド空間に設定。
- Transform
- 任意のノードを親としたローカル空間に設定。
- Setボタン を押すと選択されているノードを親とします。
■ Attribute : 影響を与えるTransformAttributeを設定します。
- Only Animated
- アニメートされているアトリビュートを自動で検出。
- 基本的にはこれで問題ありませんが、チェックを外せば以下から任意で選ぶことも出来ます。
- Translate
- 位置に影響。
- Rotation
- 回転に影響。
- Scale
- スケールに影響。
■ Time Range : アニメーションをベイクする時間を設定します。
- Timeline
- シーンのタイムラインに準じます。
- User
- 任意のフレームを設定できます。
■ Shape : 外部ノードの見た目を設定できます。
- Locator
- 見た目をLocatorにします。
- チェックを外せば以下の項目から別の見た目を選択できます。
- Shape Type
- 見た目の形状を選択。
- Shape Color
- 見た目の色を選択。
■ Option : その他の設定項目です。
- Auto Reverse
- 生成された外部ノードに対して実行した際に元のリグにアニメーションをベイクする処理を実行するか否か。
- Extract Parent
- 親として指定されたノードに追従する外部ノードを生成するか否か。
- チェックを外して実行すると、元リグの親子構造を 直接編集 します。
■ 実行ボタン
- Excute
- 設定した内容で実行します。
- Close
- ウィンドウを閉じます。
- ちなみに設定内容を保存する機能は設けていないので、ウィンドウを閉じると入力内容は破棄されますのであしからず。
■ 注意点
- 実行時はなるべく1つの用途に絞った利用にしてください。
- 外部ノードのアニメーションを元リグにベイクしつつ、新規で外部ノードを生成・・・みたいなことも可能ですが推奨しません。
- 親とするノードはよく考えて選択してください。
- リグの構造によっては親として指定するとコンストレイントサイクルが発生することがあります。
実行する前によく考えて、念の為に実行前にシーンをセーブしておくことをお勧めします。
- リグの構造によっては親として指定するとコンストレイントサイクルが発生することがあります。
- 外部ノードとの接続にはコンストレイントを利用しています。
- 各トランスフォームアトリビュートのXYZの3軸の内で、どれか1つでもロックしていたりエクスプレッション等の接続がある場合は 無視されます 。
■ 更新履歴
- ver 1.1.4 2022/01/09
- 生成されたノードが正しくAnimationLayerに追加できない問題を修正。
- ver 1.1.3 2021/12/27
- オプションウィンドウが正しく表示されない問題の修正。
- ver1.1.2 2021/08/14
- オプションウィンドウ名を修正。
- オプションウィンドウが正しく開かないことがあったのを修正。
- ver1.1 2021/07/11
- 実行時のModifierKeyを追加。
- 「Shift」を押しながら実行するとAutoReverseをオフにする。
- 「Ctrl+Alt」を押しながら実行するとExtractParentをオフにする。
- 生成されるノードはNamespaceを含めないように変更。
- 生成されるノードで未使用なTransformAttributeはLockするように変更。
- 実行完了後に関連ノードでセレクションリストを置き換える処理を追加。
- 実行時のModifierKeyを追加。
- ver1.0 2021/05/01
- 配布開始。
こんな感じです。
いつも通り、ご使用は自己責任でお願いします。
それではまた。