« Reassign Locally は Group ピックも桶。 | トップページ | 全体AO。 »

2013年7月12日 (金)

チェインアップベクタさんの殺し方。

またやっちまった。今日もこれで40分くらいは失ったね。 このクソ急ぎの時に限ってこれだ。



メモりますよ。チェインアップベクタのぶっ殺し方です。


よくある腕や足などの2ボーンのチェインなんかで、最初のボーンにチェインアップベクタを設定するじゃないですか。 で、なんらかの都合でアップベクタをやめたときに、一箇所いじり忘れると挙動がおかしくなったまま、そしてそれに気づかずどうしてこんなヘンな動きをするのだろう俺はどこかいじって壊しちゃったかななどと大騒ぎすることになるのです。俺何回もやってます。



まず、チェインアップベクタを設定すると何がどうなるかと言うと・・・・

Upv1

ボーン以下の Kinematic Joint プロパティの下に、SkeletonUpVectorOp が出来ますね。 歯車アイコンです。つまりオペレータ。 毎フレ計算してその都度結果をアップデートするようなものがオペレータですね。

そしてもうひとつ。Kinematic Joint プロパティの PPG を開いて、Resolution Plane タブを見るとわかりますが、Res,Plane というパラメータが、デフォルトでは Default という値だったのが、チェインアップベクタを実行すると自動で Up Vector という値に変わっています。

このように、オペレータの降臨と、Res.Plane の値を Up Vector に更新するという2つが、チェインアップベクタを実行したときに得られる結果です。 この2つというのが重要。

ちなみに、Res.Plane が Up Vector になっているということは、「ボーン自身・エフェクタ・ボーンから見たあるベクトルで示される1点」 という3点を結んだ三角形を仮想的に設定し、ボーンをその三角形の平面上でしか動けなくする、とういことをやってるのだと思います。 そして 「あるベクトル」 というのが、ユーザがピックしたアップベクタオブジェクトのポジションです。 そしてこのオブジェクトと、この Res.Plane への接続を担当してくれているのが、つまり接続先を保持しておいてくれるのが、上記 SkeletonUpVectorOp だと思えばいいんじゃないでしょうかね。  違ってたら指摘して下さい。




んでね、これからアップベクタを削除するわけですが、アップベクタの削除って、皆さんどうやってますかね?  「チェインアップベクタの解除」 なんて機能は、ないですよね? ね?

なので、アップベクタオブジェクトを削除してしまうか、アップベクタオペレータを削除する以外に無いと思うんですが、どうですか?  何か知っていたら教えて下さい。



んで、そのどっちでもいいからやります。 アップベクタ先のオブジェクトを消すか、SkeletonUpVectorOp を消すのです。 アップベクタ先のオブジェクトを消したら自動的に SkeletonUpVectorOp は消えてくれます。 SkeletonUpVectorOp を消したときは、当然アップベクタオブジェクトは残ります。 物は消さずにアップベクタの効果だけなくしたいときはこちらがいいですね。


ってことで、こうやって消したら、めでたくアップベクタ抹殺完了・・・・・ではないのですね。  2つありましたよね。 オペレータの降臨と、プロパティの中の Res.Plane の値です。 この2つのうち、オペレータの降臨の方は、オペレータを削除あるいはアップベクタオブジェクトを削除したことによるオペレータの消失で、クリアできています。 でもプロパティの中の方は、自動では更新されないわけですよ。 先ほどの Up Vector という値がそのまま残っているわけですよ。

これに気づかずにボーンのエフェクタをつかんで IK で動かしたりすると、挙動が不審になります。いや、不審ではないんだけど、動かしづらくなります。思ったように動いてくれない。 それは、Res.Plane が Up Vector になったままだからです。 ボーンはあくまでもここで指定されたベクタを使ってレゾリューションプレーン(上記の三角形)を生成してしまうのだと思います。 もはやアップベクタオブジェクトは無くなっていても、値を Up Vector のままにしている以上、このプロパティ内で指定された数値でプレーンを作れと言っているわけですからね。


ってことで、ここを Default に戻します。

Upv2

これでめでたく、通常の挙動になりました。 おしまい。


まとめると、

チェインアップベクタをぶっ殺すには、

・アップベクタオペレータの削除(アップベクタオブジェクトの削除でも同じ)

・Kinematics Joint プロパティの中の Resolution Plane タブの Res.Plane というパラメータの値を Default に戻す

この2つをやらないと元に戻ったことにはなりません。
という話でした。





いっつも忘れるんだよこれ。



.

|

« Reassign Locally は Group ピックも桶。 | トップページ | 全体AO。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: チェインアップベクタさんの殺し方。:

« Reassign Locally は Group ピックも桶。 | トップページ | 全体AO。 »