[Maya] FreezeTransformの注意点

Mayaの基本操作である「FreezeTransform」ですが、Rotateに関しては注意が必要なので
その注意点についてまとめてみました。

モデルをリリースする際や、RIGを作成する際は、アトリビュートの初期値が綺麗になるようにしてリリースする方が良いです。
その際、値をゼロに戻すのが「FreezeTransfomation」です。

Helpにてこの機能を調べてみますと、

トランスフォームのリセットは、選択したオブジェクトに行った変換をゼロに戻すよう設定します。この項目を使用すると、オブジェクトを作成、または最後に「フリーズ」したとき以降に行われたすべての変換が元に戻ります。

トランスフォームのフリーズは、選択したオブジェクト上の現在の変換をオブジェクトのゼロの位置にします。

と出てきます。
ココに出ている「変換」とは、平行移動・回転移動・拡大縮小などの 幾何変換の事だと思われます。
(詳しくは私も知らないのでググってください)

で。
一体何に気をつけないと行けないのかと言うと、

1 回転軸の向きを維持したまま0にはできない
2 Freezeすると、現在位置がWorld座標系の0位置になる

というこの2点です。

Get Adobe Flash player

実際にやってみました。
Rotateに対してFreezeをかけると、軸が元に戻ってしまうのが分かるかと思います。
どういうことかというと、上記の通りFreezeは「値をゼロにする」のではなく「変換をゼロにする」からって事なのだと思います。
回転の変換がゼロになったので、維持してほしい軸も0になる・・・と。

とはいえ、斜めの状態で数値を0にしたいケースもあるはずです。(リグを作る時は特に)
その場合は、0にしたいノードの上にオフセット用のノードを作り、そっち側で回転するようにしてやればOKです。

freezeTransform

こんな感じ。

ついでにスクリプトを書いてみました。
今選んでいるノードの上に、オフセット用のダミーノードを作るスクリプト。
初期化したいノードを選択→ createDummyNodeSelection() を実行するとオフセットノードが作成されます。

2つめの World座標がゼロになる というのは、
xform -q -ws -t;
とかしたときに、原点座標以外にいても フリーズしたら帰ってくる値が0になるよ という事です。
Rotateがリセットされる時ほど、問題にはならないのですが
スクリプトで2つのノードの位置を合わせたい時などをしたいときに「Worldで取得してるのに位置が合わねぇ・・・」と、混乱したりします。

そんな感じで、Freezeするときには軸を維持するかどうかちゃんと考えないと思わぬ事故を引き起こします。
特に、Freezeはグループの子供に対してもすべて実行されてしまうので、うっかりグループのトップノードにFreezeしてしまわないようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。


*