オブジェクトスナップは
ターゲットオブジェクトに対して、トランスフォームをビシっと合わせてくれる
Maxユーザーおなじみの位置合わせ機能だ
Mayaにはなかったので
MELを使った、オブジェクトスナップを作ったのサ
イロイロ機能しない部分があったので
調整調整
総括すると
moveに関しては
まず、相手のオブジェクトの位置情報を
そのまま植える訳にはいかないのだ
理由は、アニメーションに使うオブジェクトの位置ピボットは
RotationPivotで、ほかのハンドラじゃない
なので
相手のオブジェクト情報と、今の自分の位置情報を取り出す
↓
次に、その差分をだす
↓
差分だけmoveで相対移動してやる
これで、ピボットがどうなっててもびしっと位置を合わせられる
回収する位置情報は、objectCenterでローカル値を取得
相手 – 自分 = 移動値
になる
回転は、これまたややこしいのだけど
xformで相手の回転情報を、ワールドスペース、つまりワールド回転値で取得
それを貼り付ける
回転は
xform -q -ws -ro “対象”;
の様な感じで取得
貼り付けの際は
rotate -a -ws “回転値” “ターゲット”;
を使う
スケールとシェアは
ロカール参照でしか取得できないので
それぞれxformで取得する
この際にピボットの引数に注意
でこれらを合わせて
ようやく一あわせが完了になる
むろん、一部の軸のみって設定は
アトリビュートをロックしてもよし
貼り付けの際に軸を限定するもよし
手っ取り早いのはアトリビュートをロックするのかな
といった感じ
xformでmatrixをそのまま割り当てないのは
やっぱりピボット問題が大きいし、4x4matrixなので見にくい
Maxの様な3×3だったらいいのになぁ~
matrix変換をMayaで扱うのは
ちょいとやっかいかな
その反面、move、rotate、scaleはMaxにはない反転や軸制限があっていいね
Maxだったら、手っ取り早いのはmatrix
逆に位置とか回転とかをいじり出すと、ちと苦労するかも
んー、また今度まとめてみよう
一番の注意は
MaxとMayaでコントローラー周りの仕様かな