2017年5月6日土曜日

【Tips】Scaleを使ったStretch&Squashの小技

Scaleを使用してStretch IKなどはネットで調べると色々なサイトで紹介されています。

Stretch&Squashを使用したカートゥーンの表現では体積を一定に保つ事が重要で、体積を一定に保たないでScaleをかけてしまうと単純に長くなったり、短くなった状態で見えてしまいます。そこでStretchやSquashさせた軸以外は縮小や拡大させて体積を保つような処理が必要です。今回はそんな体積を一定に保つ方法をご紹介です。

実はとても簡単な方法ですが、理解しやすいように1辺が1の長さの立方体を考えます。実際のセンチメートルやメートル等のような値ではなく比率で考えます。

体積を導く式は以下のように式です。


このときにStretch&Squashをかける軸を仮に高さ方向にした時、奥行の軸と横の軸の値が何になるのかを計算で導きます。仮に辺の長さを以下のようにおきます。


上記の式に各軸を当てはめると以下のような数式になります。
この時に横軸のXと奥行き軸のZは同じなので、XにZを代入します。



今回知りたいのはZの値なのでこれをZについて整理します。


さらに整理すると

ZとXは同じ値なのでXも同じです。
つまりScaleYの値がわかればX軸とZ軸には上記の式の計算結果をいれてあげればいいわけです。これをMayaで実現するにはノードエディターで以下のようにコネクションを繋げるだけです。



MotionBuilderではRelationコンストレインで以下のようなコネクションをつなげてあげれば同じ動作をします。


これをskeletonにも同じような設定をしても同じ結果が得られます。