Bullet物理エンジンの使い方 DAZ Studio用スクリプト

DAZ Studioで、物理演算エンジンBulletを動かす覚書。

DAZ Studioの物理エンジンと言えば布シミュレーションのdForceだが、ゲームのような当たり判定つきの剛体物理を扱うBulletを使ってみたい。

球とかシリンダーとか動かしてもさほど楽しくないけど、こういったプリミティブを透明化してDAZの高品質モデルをペアレントすれば、なんだか楽しそうだ。

参考)Bullet Real-Time Physics Simulation (Bullet公式サイト)

Bulletは、プレステ4などのゲームにも組み込まれている実績抜群の物理演算エンジン。最新では、サイバー物理学の分野で使われ、仮想空間内で視覚情報からロボットに学習をさせたあと、物理的な機械の体に学習済みモデルを乗せ換えて効率よくロボットの自動化ができるんだとか。未来がもう、そこまで来ているなぁ。

mcjCasual氏のフリースクリプトでBulletを動かす

Bulletは、エンジンと名がつくだけあって、単体では起動して動くようなものではない。人間が扱いやすいようにするインタフェースが必要なのだ。

そこで、今回も有料級のスクリプトを惜しげも無く公開しているmcjCasual氏のスクリプトを使わせていただこう。なお、Windows専用だ。

mcjCasual氏のサイトは、DAZで売られているような便利ツールが無料で公開されている。しかも暗号化せず自由に中身が見られるようにして公開されてる。たぶん、ここからスクリプトをパクって売ってるヤツもいるんじゃないかと思うほどだ。

mcjBulletService01 – mcasualsdazscripts3

mcjBulletServer01のインストール

物理計算を行う「Server」モジュールと、値の設定・送信・受信を行う「Client」スクリプトの2本立て。

Serverと名前がついてるけども、別のマシンを用意しなくてもいい。あくまで、DAZ Studioとは別の処理で物理計算をするよ、というような意味合いだ。

ページの一番下にスクロールすると、わかりにくいけどダウンロードリンク(下向き矢印のアイコン)があるので、クリックしてダウンロードする。
ContentLibraryタブにて、適当なフォルダを選んでBrowse to Folder Locationを選ぶと、その場所を指すフォルダがエクスプローラで開くのえ、そこにファイルをコピー。

インストール直後はContent Libraryに表示されないので、Content Libraryのコピー先フォルダ上で右クリック→Refreshで最新の情報表示となり、アイコンが出現するはずだ。

これで準備は完了だ。

mcjBulletServer01の使い方

シーンに適当なプリミティブ(画面上部からCreate→New Primitiveで作れる)を呼び出す。

地面代わりにCubeを引き伸ばしたものを置く。(多少厚みがあると、「突き抜け」防止になる)

Cubeは多少傾けて坂にしておく。

さらに転がりやすそうなCylinder(円柱)やSphere(球)を配置する。

ここから、ツールを使って「物理属性の指定」と「シミュレーション実行」をおこなっていく。

Sceneタブにて、地面代わりのCubeをクリックして、選択状態にする
Content Libraryにて、mcjPhysicsClient01をダブルクリックで起動する。

初回のみ、Select Serverをクリックして、Serverモジュールをコピーした場所を指定。
make static ( mass = 0 )をクリックし、&Exitをクリック
この操作で「Cubeは、物理演算では固定された障害物扱い」という設定をしている。
&がついてるのは何らかのミスだと思うけど、気にせず進む。
Exitでいったん終了するのは、そうしないと別のオブジェクトを選択できないからだ。
Sceneタブにて、球(または円柱)を選択状態にし、Content Libraryにて、mcjPhysicsClient01をダブルクリックで起動する。
make dynamic ( mass = 1 )をクリック
set mass をクリック
&Exitをクリック
ここでは、球(または円柱)は、物理演算の結果を受けて動く物体だということと、重み(mass)を設定して、坂で転がるように指定している。
同様に、シーン内の物体全てにstaticかdynamicかの設定をしていく。
そしてついに、物理演算実行だ。
Content Libraryにて、mcjPhysicsClient01をダブルクリックで起動する。
下記の1,2,3を順番にクリック
&Exitをクリック

画面に2-が2つあるけど、きっと何かのミスなので気にせず進む。

ボタンの意味は…

  • 1- Upload scene シーン情報をServerモジュールに渡す
  • 2- Run Simulation シミュレーション実行。完了したらピッと音がする
  • 2- Download Results 計算結果をTimelineに反映

シミュレーションは、一瞬で完了する。さすが、ゲームに使われているだけあって高速だ。

Timelineタブから、再生ボタンクリックで、シミュレーション結果のアニメーションが再生される。

ServerモジュールとClientモジュールの連携はファイル渡し

Serverモジュールの製作日付は2015年なので、だいぶBULLETバージョンとしては古そう。だけど、ServerモジュールとClientスクリプトは、テキストファイルで連携しているだけっぽいので、Serverモジュールの差し替えは、難しくないんじゃないかな。

おいおい挑戦してみようと思う。

まとめ

いったんここまで。あとは後日、追記していくことにしよう。