Oct 12, 2011

How to make Cloth with CheetahBullet - 布の作り方

CheetahBullet で箱に布を落としてみます。

ch_20111012_cb.jpg


シーンを準備する

まず立方体と平面を追加して、平面のサイズを 3:3 に、分割数を 60:60 に設定しておきます。平面は立方体の上に移動しておきましょう。

ch_20111012_cb_tut1.png

立方体のほうは固定させるので、RigidBody タグを付け、"mesh type" を "static mesh" に設定します。平面の方には、とりあえず SoftBody タグを付けておきましょう。

ch_20111012_cb_tut2.png

この2つのオブジェクトをグループ化し、そのフォルダに Sim タグを付けて、計算結果ファイル( .chdata )を作成します。
タグのプロパティーの "create sim. file" の "create" ボタンをクリック、保存先/保存名を設定して、結果ファイルを作成します。Mac の性能によって、少し時間がかかるかもしれません。

ch_20111012_cb_tut3.png

次に、出来た計算結果ファイルを表示する Rep オブジェクトをシーンに追加します。今回はポリゴンオブジェクトなので、Polygon Rep オブジェクトを使います。追加した Polygon Rep オブジェクトのプロパティを設定します。
計算に使った平面オブジェクトは、モードタグのプロパティでワイヤフレーム表示にしておきましょう。

  • sim. file: 作成した .chdata ファイルをセットします
  • sim. target: 計算に使用したオブジェクトのはいったフォルダーをセットします
  • target 1: 表示させるオブジェクトをセットします。今回は平面オブジェクトのみをセットして下さい。(立方体は動かないので結果ファイルから表示させる必要はありません)

ch_20111012_cb_tut4.png

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

ch_20111012_cb_tut5.png

アニメーションを再生すると、立方体を突き抜けて失敗している結果になっているのが分かると思いますが、とりあえず今はこれで OK です。 (Foot in mouth) 基本的な設定は完了したので、後は平面に付けた SoftBody タグのプロパティを調整 -> 結果ファイルのアップデート( Sim タグの update sim. file の "update" をクリック )を繰り返して調整してみましょう。


SoftBody のパラメータで遊ぶ

SoftBody タグには、沢山のパラメータがあります。実はすべてのパラメータを理解しているわけではなく、そのまま Bullet Physics のライブラリに直接渡して計算しています。なので勘違い・間違っている記述もあるかもしれません。 (Tongue)

またパラメータの組み合わせによって、ポリゴンが破綻する場合もあります。が、気にせずいろいろ試してみて下さい。(この辺の使い難さについては、Bullet のアップデートも合わせて改善する予定ですが…)

Bullet Physics (2.78) を使った SoftBody の衝突判定には、ポリゴンのポイントを使って衝突判定する方法と、ポイントとは別にオブジェクトを分割したクラスターを使った方法の2種類があります。クラスターを使った場合は、自分自身との衝突も検知できるのですが、設定によっては少し計算時間がかかったりします。作りたいシーンによって使い分ける事になると思います。

まずクラスターを使わない場合の設定を試す

SoftBody タグの Solve Iterations -> "position iter." の値を 8 にあげて、Sim タグの "upadte sim. file" の "update" ボタンをクリックして再計算させてみましょう。

ch_20111012_cb_tut6.png

次にクラスターを使った場合の設定を試す

クラスターを使うために Collision -> "use cluster" / "self collision" にチェックをいれます。クラスター数を 800 にしてみましょう。"self collison" にチェックを入れた場合、"margin(余白)"の値を小さくする必要があります。今回は 0.02 にしておきます。

重要なのが、衝突判定の精度をあげるため、計算時間のステップをあげる必要がある事です。計算全体のステップをあげるには、Sim タグのフレームレートをあげる事もできますが、今回は SoftBody タグの "time scale" パラメータを使います。今回は、平面の計算のみ4倍の精度になるよう 0.25 を設定します。(これはクラスターを使わない場合も有効なのですが、設定よりシミュレーション速度が遅くなるという問題がでます。実際のシーンで使う場合には、Rep オブジェクトの "frame" パラメータのアニメーションの動きを速くしてやる等の対応が必要ですね)

ch_20111012_cb_tut7.png

結果はこんな感じです。

ch_20111012_cb_tut7.png

クラスターを使う場合も、そうでない場合も、一長一短あります。シーンによって使い分けてみて下さい。


最後に Rep オブジェクトにサブディビジョンモディファイアを適用して、ポリゴンを滑らかにして完成です。完成サンプルでは、チェッカーテクスチャのマテリアルを使ってみましたが、こういう柔らかい物の場合 Toon シェーダーも面白いですよね。

ch_20111012_cb2.jpg

バグや制限も多くて、まだまだ使い難いのですが、また試してみて下さい。 (Wink)

2 Comments

Re: How to make Cloth with CheetahBullet - 布の作り方

おぉ!
これはありがたい。一度この通りためしてみます。

From : KOSUKE @ 2011-10-13 11:17:45 Edit

Re: How to make Cloth with CheetahBullet - 布の作り方

どうもです。是非お試し下さい。

SoftBody はまだまだクセがあるので、ちょっと使い難いですけど…

From : tg @ 2011-10-17 01:00:42 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.