SIにもピボットがありますが、これはセンターと違います。
この2つを間違えてる人も居るよう(特にMayaユーザー)なので、ちょっとだけ説明します。
実は自分もちょっと前まで良く分かっていませんでした。
因みに、こないだ作ったスクリプトはピボットではなく、センターのスクリプトです。
オブジェクトのピボット
SIではセンター以外に、ピボットという奴もあります。
普段はピボットとセンターが重なっているけど、
これはセンターをお動かさずに中軸を自由に動かせる奴です。
ALT キー 、 または「D」(Maya レイアウト)を押すとこのピボットを動かせます。
そして、CTRL + 中クリック でピボットリセットが出来ます。
ピボットを動かしたままに残すと色々と面倒な事になってしまうので、動かした後にリセットした方が良いと思います。
どういう時に使う?
例えば、中心以外のところを中軸にして回転したいけど、オブジェクトのセンターを弄りたくない。
こういう時に、ピボットを一時的に移動して、回転して、ピボットリセットでやると簡単に出来ます。
そして、オブジェクトのセンターはそのまま残ります。
コンポーネントのピボット
コンポーネントにまた別のピボットがあります。
コンポーネントを選択して、ALT (Mayaレイアウトなら D) を押して、ピボットを動かせるようになります。
このピボットはオブジェクトのと違って、自動にリセットされるので何もしなくてOKです。
どういう時に使う?
例えば、ボックスの上の面を全部選んで、ピボットを横のエッジに動かして回転すると蓋のように回転が出来ます。
選択解除するとこのピボットが消えるのでピボットは元通りです。
アニメーション用のピボット
オブジェクトのピボットと違います。こいつはAFAIK オブジェクトのローカルキネマティックスのPPGでしか動かせないやつです。アニメーションキーも打てますが、PPG上でしか出来ません。なので機能的には便利だけど、操作は不便です。
どういう時に使う?
フレームでピボットの位置が変わるモーションが欲しい時ですね。
例えば、ダイスを転がす時に、エッジを中軸にして回転させた後に次のエッジにピボットを動かしてまた回転させるというモーションを付ける場合。
しかしPPGだけじゃ不便なので、ImVFX (Constantine Tarasenkov) は便利なスクリプトを作りました。
実行すると、カソルでピボットの位置を選ぶだけでキーが打たれるので、ピボットのPPGはもうほぼ要らなくなります:
xsi = Application
frame = xsi.GetValue("PlayControl.Current")
pivot = xsi.PickPosition("Set new pivot position and key it", "Remove key on the current frame")
if pivot[0] == 1:
v3 = XSIMath.CreateVector3(pivot[1],pivot[2],pivot[3])
m4x4 = XSIMath.CreateMatrix4()
obj = xsi.Selection[0]
obj.Kinematics.Global.Transform.GetMatrix4(m4x4)
m4x4.Invert(m4x4)
v3.MulByMatrix4InPlace(m4x4)
x, y, z = 0, 0, 0
x, y, z = v3.Get(x, y, z)
xsi.SetValue("*.kine.local.pposx", x)
xsi.SetValue("*.kine.local.pposy", y)
xsi.SetValue("*.kine.local.pposz", z)
xsi.SavePivotKey(["*"], "siTrn", frame)
xsi.RotationTool()
elif pivot[0] == 2:
try:
xsi.RemoveKey("*.kine.local.pposx,*.kine.local.pposy,*.kine.local.pposz,*.kine.local.pcposx,*.kine.local.pcposy,*.kine.local.pcposz", frame)
except:
pass
ピボットについてもっと詳しく知りたい方は、マニュアルを読んでください。