2012/07/08

ICE : N Points Constraint

0 comment
リアクション: 
ひさびさの更新ですー。
なかなか忙しくて土日にパソコンに向かうのがおっくうになってきましたw

でも、ICE で N Points Constraintにチャレンジしてみました。

通常のN Points Constraintは、Rotationが無いんですよね。残念です。誠に。
3Pointsにはあるんですけどねー。こいつは便利です。
ですが、Rotationを付けないのには訳があったんですねー。
作ってみると無いのには納得できました。なるほどなぁ(含)

通常、車体の揺れなどを表現するために、傾きをリギングする場合、コンストレイントは、Directionが4つ必要になります。それぞれUpVectorを付けたほうが安全かしら。
3Pointsが4つでも出来ますね。Direction1つと3Pointsが3つでもいいかな。
Blend Weightがそれぞれ、1, 0.5, 0.333333, 0.125と少しずつ傾きを加える方法です。

もし、軸が6本あったら、コンストレイントは、6つ必要になります。
Blend Weightの計算が大変です。

ですので、ICEを使って、自動的に3Pointsを発生させて、傾きの平均を出して、N Pointsを作ろうじゃないかって考えました。

やることは、すべてのポジションから、3Pointsをそれぞれ出して傾きを平均化すればOKです。
(こ・・・言葉にするとこんなに簡単・・・w)

ICE : N Points Constraint

出来たICEツリーは、こちらになりました。

では、解説します。
まずは、やはり3PointsをICEで表現しなきゃですね。

3点からベクトルを2つ取って法線をだす


上の図からポイントからポイントを引いてベクトルを取り、法線を出していきます。

ベクトルとベクトルをCross Productでかませば法線が取れます。
取れたら平均化して、Rotationへ変換すれば、OK!

で、ここがポイントなんですが、このベクトルの順序が逆だと法線が逆向きになります。
なので、Groupを作るときは、時計回りか、もしくは、反時計回りに入れてください。
じゃないと、変になります・・・。

ポジションは、Group登録すべてのポジションの平均化のみでいいですね。
でも、外したほうが使いやすいですかね。

あとは、親の影響を受けさせるために、親のマトリクスをかけて、グローバル変換をします。

これで完成。

意外とスマートに組めました。

これで、100 Points Constraintも現実のものに。
なんてのは、無いでしょう。

ダウンロードも出来ます。2013ですけどいいですか?

N Points Constraint (SI2013 Scene)