3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

joint ノードについて

最近、DependecyGraphを辿る機会が多くなりました。
DependecyGraphに関しては語ると長くなるので語らない…
というより僕がよくわかっていません(笑)
なんとなーく、迷子ちゃんの集まりなんだろう!で片づけました。

さて、今更ですがMayaのjointノードについてちょっとまとめます。
注意!凄くマニアックです(笑) あと間違っているところがあるかもしれません(^^;

f:id:blendcomp:20130813231212p:plain

jointとjointを繋げると必ず、inverseScaleというのに繋がれます。
さてこれはなんでしょう?と思ったのが調べるきっかけだったのですが。

まず、inverseScaleはSegment Scale Compensateの役割を担っています。
Segment Scale Compensateとは、
オンの時は、親を大きくしても子供のスケールは大きくなりません。
オフの時は、親を大きくしたら子供のスケールも大きくなります。

説明として3種類用意しました。
下にいけば行くほどつまらん説明になりますが…

~その1~
Segment Scale Compensateのチェックボックスがオン/オフによって
計算するか、スルーするかを決めています。そのためのコネクションです。
オンの時に計算してます。

↓ではどんな計算をしているか?

~その2~
コネクションはScale >> inverseScale です。
inverseScaleは目に見えないアトリビュートなので
スクリプトとかじゃないと数値をいじれません。
ですがデフォルトでは <x,y,z> = [1.0, 1.0, 1.0] が入っています。
scaleが全て1.0の時に、inverseScaleを[2.0, 4.0, 6.0]に変えると、
scaleは、[1.0/2.0, 1.0/4.0 ,1.0/6.0]と計算されます。
だからこのコネクション scale >> inverseScaleのコネクションは
同じ数値で割っているので子供のスケールは[1.0, 1.0, 1.0]になります。

↓子供のマトリックス見てみると…

~その3~
親のscaleを全て2.0にしたマトリックスは、
[2.0, 0.0, 0.0, 0.0]
[0.0, 2.0, 0.0, 0.0]
[0.0, 0.0, 2.0, 0.0]
[0.0, 0.0, 0.0, 1.0]

子供のinverseScaleが計算されたもののマトリックスは、
[0.5, 0.0, 0.0, 0.0]
[0.0, 0.5, 0.0, 0.0]
[0.0, 0.0, 0.5, 0.0]
[0.0, 0.0, 0.0, 1.0]

子供は親を継承しているので2.0の半分の1.0となります。
よって、スケール1.0を保持しているということになります。

いやー、面白いですね!
こういうところを調べるのもMayaの醍醐味ですな…。