2010年08月01日

[XSI ICE] ICEで布シム

XSIには紐シムが無いのでICEで出来ねぇものかと色々調べてたら布シムが出来た。

SimulateParticlesノードを使ったもの

ベレ法で計算したもの

 

SimulateParticlesノードを使ったほうのICEツリー

20100801_01 
20100801_02
  モデリングコンストラクションに初期化用のICEツリーを作ってます。
MassとSizeはGravityフォースで使うので設定
_Original_Positionは頂点の元の位置です。ピンコンストレインで使います。
_Original_NeiborLengthは隣の頂点までの長さです。クロスフォースを計算するのに使います。
_Pinはピン止めする頂点でtrueにします。クラスタに含まれていたらtrueに設定してます。

20100801_03
シミュレーション部分のICEツリー
20100801_04
GetClothForceコンパウンド内部
隣の頂点への向きで最初の長さと現在の長さの差分を大きさにしたベクトルを全部足して出力してる。
20100801_05
PinConstraintコンパウンド内部

ベレ法で計算した方のICEツリー

 20100801_06
モデリングコンストラクションに初期化用のICEツリーは上のヤツとほぼ同じですが、
_Prev_Positionというアトリビュートを追加してます。ベレ法で一つ前の位置が必要になるので追加しました。

 20100801_07
シミュレーション部分のICEツリー
サンプルのVerletClothとほぼ一緒。
クロスをフォースにしたらあまりよろしくない結果になったので、重力などのフォースだけベレ法で計算。
最後に隣の頂点同士で引っ張り合わせて布っぽくした。
20100801_08
SimVerletコンパウンド内部。
ベレ法の計算方法は
次の位置 = 現在の位置x2 - 一つ前の位置 + Force x (ΔTime x ΔTime)
但しΔTimeは一定でなければいけない。
20100801_09
Clothコンパウンド内部
_Pinがfalseの時にGetClothForceのベクトルを現在の位置に足してる。
GetClothForceコンパウンドは上とほぼ同じだけど、合計ではなくて平均を出力してる。
20100801_10
MoveOutsideコンパウンド内部
SimulateParticlesノードを使わないので、ビルトインのコリジョンが使えないので自前で作った。
と言ってもシミュレーションではなくて、コリジョンオブジェクトにめり込んでいたら押し出すだけ。

次回は紐シム

ごきげんよう

【XSI ICEの最新記事】
posted by ika at 22:30 | Comment(0) | TrackBack(0) | XSI ICE | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。