« 良い氷報告。 | トップページ | 古き良き NetView。 »

2008年9月23日 (火)

氷のリジッドボディ実験。


氷なんですがね。

しばらくは凝ったことやろうとせず、色気を捨てて、ひたすら基本をつかもうと色々実験しているわけです。 ほとんどマニュアルに書いてあるようなことば かりなんですが、まあ、実験の記録・メモくらいのものってことで。


ICE の中でやる Rigid Body Dynamics のごく基礎的な実験。コリジョン編。



まず、厚みのない床 に対して正常に跳ね返ってくれるかどうか。

←このビデオの通りなんですが、厚みのないやつじゃダメでした。

床と Cube の間になんかすき間ができてますよね。 コリジョン判定のオフセットでもあるのかと思いきや見当たらず、マニュアルを読んでみるとやはり厚みのあるものに しろ、とある(ICE Particle Collisions with Obstacles というページ)。

ってことで障害物には、ちゃんと厚みのある、閉じた、ソリッドなオブジェクトを使えってことで。 従来の RBD と同じですね。





次は障害物の形状な んだけど・・・・。 これも最初はわからなくてけっこう悩んでしまった。

ビデオの最初にあるように、普通の平らな平面では、Cube たちは普通に跳ね返ってくれます。 いい子です。

次に、壁を作ってみようとポリゴンの一部を Extrude しました。 すると・・・・。 なんじゃこれはゴルァ。 形状ちゃんと認識してねえのかよ。

いじるべき設定も見当たらない。 悪い子です。

マニュアルを読んでみると、「くぼみ・穴は無視されます」 って書いてやがる。なんだとゴルァ。
結局、大まかな形で しか計算してくれないようで、しかもこのビデオを見る限りは大まかもいいところで。
ちなみにマニュアルのページはさっきと同じ、 ICE Particle Collisions with Obstacles というページです。

しかたなく、床1枚と壁2枚にオブジェクトを分けることによって全てをただのボックス形状という状態にし、その3つをそれぞれコリジョンオブジェクトとし て ICE ツリーにぶち込んでやったら、やっと想定どおりのコリジョンになりました。 めんどく せぇよ ゴルァ。  しかもこういう直角ばかりでできたものならともかく、オーガニックで複雑な凸凹面とかだったらどうすんだよ箱の組み合 わせだけで作るの無理だよゴルァ

上のビデオの最後にあるように、ICE じゃない従来の RBD はコリジョンのタイプとして Actual Shape が選べるので、こういう問題はなかったです。 なんで ICE の RBD だとこれができないの? この「片手落ち感」が、ううむ、いかにも Softimage らしい・・・・。





そしてさらに、 ICE で RBD している時のパーティクル側の形状による衝 突判定が・・・・。 前にム スカをやってみた時も 「あれ? 衝突にちゃんと形状を反映してなくない?」 とちょっと気になっていたのだが、ちゃんと実験してみたらやは り・・・・。

基本的に、パーティクルに Set Instance Geometory を使ってジオメトリを飛ばしています。 そして、 これまでの実験は 「障害物がただの箱ではない」とう状態でしたが、以下の実験は逆に 「パーティクル の形状がただの箱ではない」 という状態です。


← で、このビデオを見るとわかると思いますが、Cube は正常に衝突判定されているように見えます。

しかし Cone(黄色)は・・・・。 ナナメの線、つまりとんがった頂上に向かう面の傾きが考慮されていないらしく、頂上付近が床から浮いてしまっている。

不定形なオブジェクト(紫)も試してみたがやはり同じ。 床との間にすき間ができていて、どう見てもその角度じゃ安定しねえだろっていうポーズのまま滑っ ていっている。

どうなってんですかゴルァ。

ということでこれも マニュアルを熟読してみると・・・・。  Making ICE Particles into Rigid Bodies というページに、

If you’re using instanced geometry on the particles, a bounding sphere shape is used, not the object’s actual geometry. Sorry.

インスタンスジオ メトリを使っている場合は、(衝突判定に)オブジェクトの実際の形ではなく、バウンディングスフィアが使われます。 すいません。


あやまられちまったよ Orz

ってことで、Softimage さんが侘びを入れているように、オブジェクトの実際の形は無視され、オブジェクトを取り囲む球=バウンディングスフィアとして扱われる だそうです。  Instanced Geometory を使わない場合(つまりエミッションで指定したパーティクルの形をそのまんま使う場合)も、Sphere か Box か Capsule のどれかとして扱われる、つまり実際の形を必ずしも反映せず、簡略化した形で判定するという意味のことが書いてあります。

ええっ そうなのっ。  計算を 軽くするためにそういうモードがあってもいいけどさ、「重くてもいいから Actual Shape 」 なモードはないのっ?  これじゃ、緻密にやりたいショットで使えないじゃん?  オンラインラウンチの ムービーや東京ラウンチイベントのデモの時、エイリアン君を箱に分解してザラザラザラと崩すデモを誇らしげにやっていたよね? あれって、わかりやすいか ら箱にしたんじゃなくて、箱しかできなかったってこと? 複雑な形を使おうとすると衝突判定の甘さがバレるから?  今回の実験で Cube が問題なく見えたのも、素直な形をしているのでバウンディングスフィアのような簡略化した衝突判定でもあまりバレてなかったってことなんでしょうかねえ。

しかも上のビデオの挙動を見る限り、バウンディングスフィアじゃなくて、 バウンディングボックスの間違いじゃないのかなあ、と思うんですが、どうですか。 Cone や紫の不定形のやつが球として扱われてるならもっとクルクル転が りそうなもんだけど、横向きに倒れて安定している奴とかが多いので、床との接地面は平らなんじゃないのかなと思うわけですよ。 球には平らな面がないの で、やはりボックスなのではないかと。 問題なく見える Cubeも 同じく、もし球として扱われていたらこんな風に床にベタッと貼り付いた状態で滑っていくはずないですよね? 球のように常にコロコロと転がりますよね?  どうですか Softimage さん。マニュアルの書き方間違えてませんか。 それとも、外部の障害物(この場合床)との判定はボックスで、パーティクル同士の判定はスフィアだとか、そ ういう意味ですか。



しかしまあ、なんつうか、まだ未完成なんですねえ氷は。 とんでもねえ金額を出して買ってるのになあ。
ま、もうちょっと研究して何か打開策が出てくるといいんですがね。
誰か実験して教えて下さい。





それともひとつ、こ れはコリジョンがらみとは関係ないのですが・・・・。

マニュアルの ICE + RBD のページ、つまり先ほどの ICE Particle Collisions with Obstacles や Making ICE Particles into Rigid Bodies のページに載っている ICE Tree の画像を見ると、Simulate Rigid Bodies ノードと Simulate Particles ノードの両方が ICETreeノードに接続されているんですよね。 



文 字でも Plug the Simulate Rigid Bodies’ Simulate output into a port on the ICETree node, above the Simulate Particles node (Simulate Rigid Bodies のアウトプットを、ICETree node の  Simulate Particles よりも上にあるポートにつなげ) と書いてある。

でも両方つなぐと、シミュレーションが倍速になっちまうように見えるの ですが、これでいいんでしょうかね。

←これを見るとわかると思います。

上: Simulate Particles だけ接続
中: Simulate Rigid Bodies だけ接続
下: その両方を接続

上記以外、まったく同じ設定のパーティクルです(1つの元から複製して作った)。 わかりやすいように色は変えましたがもちろん挙動に影響はないはず。

もちろん Force もないし、何の Randomize も Turbulize もしてないです。

そのスクリーン ショット↓


画像真ん中にあるように、パーティクルの発射 速度は 5 です。 つまり、1秒間に 5 ユニット進むスピード。
エミッタは -5 の位置に置きました。 シーンのフレームレートは 24fps です。
つまり、1フレーム目に生まれたパーティクルは、1秒後= 25フレーム目に  0 の位置に到達しているはずです。 で、画像右上の実際のシミュレーションの様子は 25 フレーム目のものです。

たしかにパーティクルのみ(上)のやつは、25 フレーム目で 0 に到達しています。スピード 5 が正しく反映されてます。

リジッドボディのみ(中)のやつは、少し遅い。リジッドボディによるパーティクル同士のコリジョンで遅くなったとか? あるいは Mass などのパラメータがリジッドボディの場合は違う効き方をして遅くなったとか? いずれにせよそれほどの差はない。

でも両方とも接続したやつ(下)は明らかに速い。よく見てみると 5 の位置まで到達しています。 -5 の位置から発射されて 1秒で 5 まで到達したのだからそのスピードは 10。 つまり、本来エミッションで設定したスピードの倍速で進んだことになります。

ってことで、結果から想像するに Simulate Rigid Bodies と Simulate Particles の両方をつなぐと、シミュレーションの計算が2重に行われてその分速くなる、もしくは変移量が倍になる(結果速く なったことと同じ)、という風に見えるのですが、どうでしょう? 誰か実験してください。 そしてもし常にこの挙動になるのであれば、マニュアルに書いてある両方つなぐという ICE ツリーは、よほど何か狙いがない限りは実用的じゃないと思うのですが、そんなことないですか Softimage さん。


勘違いがあれば指摘して下さい。





派手なデフォーメーションも、かっこいいパーティクルも無し。
だってできないんだもん。 ちっとも言うこと聞いてくれないんだもん。
だから今はまだ地味に、ぢみ~~~~ に研究するのです・・・・。
かなりつらい、この日々。





|

« 良い氷報告。 | トップページ | 古き良き NetView。 »

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: 氷のリジッドボディ実験。:

« 良い氷報告。 | トップページ | 古き良き NetView。 »