Bullet Physics ソフトボディーを使ってみる

Bullet PhysicsのSoftBodyが前から気になっていたので試してみます。ソフトボディーと聞いてまず”ぬいぐるみ”を思い浮かべたので、ぬいぐるみっぽい動きを実現することを目標にします。
まずは、任意形状のポリゴンモデルをSoftBody機能を使って動かすために必要な準備やパラメータ設定を調べ、実験用プログラムを作成します。

ソフトボディー(任意形状) GIFアニメ
ソフトボディー(任意形状) GIFアニメ


Soft Body

物理エンジンでよく使われる剛体とは異なり、衝突など力が加えられると変形する物体のシミュレーションです。使い所の難しい機能ですが、うまく使えばグラフィック表現が格段に上がるはずです。

Bullet Physicsの準備

基本的な操作は剛体と同じです。ソフトボディーを扱うための専用クラスを使用、いくつかの追加処理が必要です。

初期化

削除、終了処理

newで作成し、ポインタをBulletクラスに渡した場合、Bullet側で削除処理は行われない。newしたものは、すべて自分でdeleteする。Bulletクラス内部で作成されたものは一部を除きデストラクタで削除される。したがって、newしたものを管理するクラスなどを作成する必要あり(物理ワールドクラスだけでは難しい)。

メモリリーク

newしたものをすべてdeleteしてもメモリリーク発生。
btSoftBodyWorldInfoのm_sparsesdf(btSparseSdf)というメンバ変数に注意。内部で確保したメモリをデストラクタで解放しない(バグ?仕様?)。
btSparseSdf::Reset()で確保したメモリを解放。忘れずに。


ソフトボディーの作成

頂点や拘束などの設定を登録していくことで作成しますが、作成支援クラス(btSoftBodyHelpers)を使うことで面倒な作成処理をせずにソフトボディーを簡単に作成できます。細かい作成処理は必要になった時に調べることにして、とりあえずやってみる。

任意形状(3角形ポリゴン)のソフトボディー作成

btSoftBodyHelpers::CreateFromTriMesh()
にポリゴン情報を渡すだけ。

パラメータ調整

そのままでは形状が保てずつぶれてしまうため、形を保持するための設定が必要。必要なものだけ紹介。


サンプルプログラム

Bullet Soft Body実験用プログラム
簡単なスクリプトで剛体やソフトボディーを追加、パラメータ調整
Bullet Physics Soft Body Part1


リンクなど

Bullet Physics

Bullet Physics Library / Real-Time Physics Simulation

「Bullet Physics ソフトボディーを使ってみる」への1件のフィードバック

  1. 書いてあるメモリリークの回避方法のおかげで半日悩んだメモリリークから開放されました。ありがとう!
    もしこの情報に出会えなければもう半日くらい悩んだかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証:数字を入力してください(必須) * Time limit is exhausted. Please reload CAPTCHA.