Oct 08, 2011

dropping 800 pigs - 800 匹の豚を落とす

CheetahBullet スクリプトを使って、800 匹の豚を落としてみた。

スクリプトの使い方と、このシーンの作り方を紹介しています。


CheetahBullet を使ってみる

まずスクリプトのインストールをすませておいて下さい。ファイルが多いですが、~/ライブラリ/Application Support/Cheetah3D/scripts フォルダ以下の決まった位置にファイルをコピーするだけです。

インストールが完了したら、同梱のサンプルファイルを開いてみて下さい。
試しに sim1.jas を開いてみましょう。最初はワイヤフレームのオブジェクトが見えているだけのシーンが表示されています。ここでエラーが出る場合は、スクリプトのインストールがうまく行っていないので、再度確認してみて下さい。

まずシミュレーション計算して、結果ファイルを作成します。Group という名前のフォルダについた CheetahBullet Sim タグの create ボタンをクリックして chdata という拡張子のついたシミュレーション結果ファイルを作成します。

ch_20111008_cb_t1.png

ファイル保存ダイアログが開くので、適当な場所・名前で結果ファイルを作成して下さい。このタグのついたフォルダ内のオブジェクトで物理計算が行われます。マシン/シミュレーション内容によって計算時間は変わりますが、しばらく待つと計算が終了します。

計算がおわったら、この結果ファイルを表示オブジェクトにセットします。表示オブジェクトは計算結果のオブジェクトの種類によってポリゴン・スプライン・パーティクルの3種類があり、任意の数だけシーンに追加できます。sim1.jas の場合は、ポリゴンオブジェクトのみなので、CheetahBullet Polygon Rep オブジェクトを使うことになります。サンプルではあらかじめ追加されています。このオブジェクトの sim. file パラメータに、先ほど作成した結果ファイルをセットして下さい。セットすると、ポリゴンが表示されたと思います。

ch_20111008_cb_t2.png

この表示オブジェクトには、いくつか重要なパラメータがあります。
1つは先ほどセットした sim. file で、これはシミュレーション結果ファイルをセットします。
次は frame で、これは結果ファイルのどのフレームを呼び出して表示するかを設定します。この frame パラメータをアニメーションすることで、物理シミュレーションのアニメーションを再生(または逆再生)することができます。
次は、sim. target です。これには物理計算をしたオブジェクトのフォルダ( sim1.jas の場合は Group フォルダ)をセットします。通常は CheetahBullet Sim タグが付けられたフォルダをセットすることになります。
最後に、計算結果からどのオブジェクトを表示するかを target 1 - 10 に設定します。

sim1.jas サンプルでは、あらかじめ設定されているので、アニメーションを再生してみて下さい。落ちた箱にボールがぶつかるアニメーションが再生されました?

Group フォルダ内のオブジェクトにはいくつかタグがついていると思います。このタグで、シミュレーション内での属性を設定しています。これらのタグについては、いろいろ試してみて下さい。


豚を落としてみる

さて本題の豚が落ちるシミュレーションをやってみましょう。

シーンに物理シミュレーション用のオブジェクトを配置します。今回は、床用のボックスと豚をパーティクルで配置します。ボックスの名前を base 、大きさは 100 : 0.5 : 100 にしてみました。このオブジェクトに CheetahBullet Tags/RigidBody タグを付けて、シミュレーション内で固定オブジェクトとして設定します。mesh type を static mesh にセットしてください。

ch_20111008_cb_p1.png

次にパーティクル配列オブジェクトで豚を配置します。今回は Cheetah3D のサンプルとしてついてくる Pig.jas の豚を使いました。ここで重要なのは、衝突判定に使うポリゴンオブジェトのポリゴン数は出来るだけ小さくする事です。今回は Pig.jas の body ポリゴンを流用し、シンメトリモディファイアのみを適用した状態(オブジェクトブラウザでポリゴンアイコンをダブルクリックして、モディファイアをポリゴンに固定化/焼き付け状態)にしています。その後接合ツール等で、ポリゴンを整理し 200 ポリゴンのオブジェクトをシミュレーション用に使ってます。

ch_20111008_cb_p2.png

次に、物理計算用の base ポリゴンオブジェクトと パーティクル配列オブジェクトをグループ化して、フォルダに入れてやります。このフォルダに CheetahBullet Sim タグを付けて、シミュレーション結果ファイルを作成しましょう。

計算結果ファイルができたら、これを表示するオブジェクトを作成します。今回は CheetahBullet Particle Rep オブジェクトをシーンに追加して下さい。 このパラメータにそれぞれ結果ファイル sim. file 、計算対象オブジェクトのフォルダ sim. target 、表示ターゲットのパーティクル target 1 をセットします。

ch_20111008_cb_p3.png

次に次に表示オブジェクトの frame パラメータを、0 - 120 にアニメーションするよう設定します。

次に表示パーティクルオブジェクトの子オブジェクトに、Pig フォルダを設定してやりましょう。この時、計算で使用した body オブジェクトとサイズが同じになるよう気をつけて下さい。Pig.jas からそのままコピーすると拡大縮小パラメータが違っています!

ch_20111008_cb_p4.png

このようにパーティクルでシミュレーションする場合、衝突判定計算用のオブジェクトと表示オブジェクトは違う物を使うことが可能です。

また床として設置した base オブジェクトは、表示オブジェクトでシミュレーション結果を表示させる必要はありませんよね。動きませんから。 (Wink)

今回のように大量のパーティクルを細かいメッシュで使う場合は、表示オブジェクトの表示タイプを box にしておいた方が良いでしょう。

ch_20111008_cb_p5.png


このシーンをベースに、パラメータを調整した作成したのが、最初のムービーです。800 匹と思ってましたが、2 列にしたので、 1600匹でしたね。 (Tongue)

また不明な点等コメント頂ければとおもいます。

それでは。

2 Comments

Re: dropping 800 pigs - 800 匹の豚を落とす

やっぱり豚さんはポリゴン数を押さえた方がイイですか?

From : KOSUKE @ 2011-10-13 11:20:48 Edit

Re: dropping 800 pigs - 800 匹の豚を落とす

こんばんは、コメントどうもです。

シミュレーション計算時の衝突判定用ポリゴンは、できるだけ少ない方が計算も速くすみますね。判定が甘くてよければ、もっと少なくしてもいいと思います。

では、また。

From : tg @ 2011-10-17 00:59:36 Edit

Post Your Comment


(Smile) (Wink) (Laugh) (Foot in mouth) (Frown) (Gasp) (Cool) (Tongue) (Ambivalent) (Angry) (Cry) (Sealed) (Touched) (Undecided) (Yum)

You must fill all *s. e-mail won't be publicized.