2016年11月24日木曜日

Freeze Transformations その2

今回もまた、おもむろにspaceLocatorを作成して適当に移動・回転・拡縮します。

で、Modify から Freeze Transfomations を実行。



ピボットが原点へ移動し、Translate は shape の Local Position に変化。
rotateとscaleが何処へ行ったかは謎です。


ロケータのフリーズで注意しないといけないのは、階層構造になった時。


こんな感じに階層構造になっていた場合、子の locator2 ほうをフリーズすると、


ピボットが親の位置に移動しますが、親の locator1 をフリーズすると、


子の locator2 のピボットも原点に移動してしまいます。
せっかく階層に配置したのにフリーズかけてしまいグチャグチャみたいな事になりがち・・・。

Reset Transfomations と Freeze Transfomations を間違えたのか、酷い構造のデータを見た事があります。
自分ではこんなデータを作らないように注意しときたいですね。


ただ、このフリーズ機能、アニメーションさせる前限定の機能。
アトリビュートにアニメカーブが接続されているとフリーズ実行時に

// Error: Freeze Transform was not applied because locator1.scaleX has incoming connection. //

みたいな事になります。

2016年11月14日月曜日

Freeze Transformationsその1

なんかチャネルボックスの数値がゼロになるような機能です。

まずは、選択オブジェクトのピボットが見えるよう設定を変更します。


初期状態では Off になっているので On に。
これで選択したオブジェクトのピボットが表示されるようになります。
リガーであれば表示させておくことをオススメ。

ピボットの見た目はこんなん。



おもむろにpolyCubeを作成して適当に移動・回転・拡縮します。


変形が分かりやすいようにlocalAxisを表示しています。
※メインメニューの Display -> Transform Display -> Local Rotation Axes

こんな感じのオブジェクトに Freeze Transform を実行するとこうなります。


この機能が実行されるコマンドは makeIdentity というもの。
メニュー名と一致していないのですがコマンド名から大体の処理内容が予想できますね。

フリーズ前のこんなマトリクスが
-----------------------------
x: 0.1440 -0.0708 -1.1282 0
y: 0.3970  1.1363 -0.0206 0
z: 0.8128 -0.2818  0.1214 0
t: 1.1656  2.5396  0.0000 1
-----------------------------

フリーズ後、このようになります。
------------
x: 1 0 0 0
y: 0 1 0 0
z: 0 0 1 0
t: 0 0 0 1
------------

オブジェクトのマトリクスが単位行列になってしまいました。


バインドする場合は、更に Reset Transform を実行します。


すると、ピボットが原点に移動したように見えます。
※実際は親オブジェクト基準の位置になります。

こうしておかないと、エンジンによってはピボットの差を加味してくれない場合があるので、
頂点が想定の位置とズレてくる事があります。


ちなみに、フリーズする前にリセットを行うと・・・

トランスフォームの変形がリセットされるだけなので、順番は重要。
なんとなく使ってもらわれると困る機能の一つです。