note.x

Stage3D Physics library “Pellet”

Adobe製Stage3D用フレームワーク Proscenium に付属してくる物理演算ライブラリ「Pellet」を単独で使ってみた。

btConvexHullShape Test(要:FlashPlayer11)

Pellet は、C++で書かれたオープンソースの物理演算ライブラリ「Bullet」のAS3移植版。
BulletはBlenderのゲームエンジンで使われてたりする。(MMDが採用してるっていうほうが通りがいいのかな)そのAS3ポートといえば、

Away3D 4.0 jiglib vs Bullet « DevJamMemo
AwayPhysicsを使って衝突判定をしてみる
Flash Player 11 対応の 3D 物理演算ライブラリ「AwayPhysics」 | ClockMaker Blog

等のエントリーですでに紹介されているAway3D4.0用のAwayPhysicsがあるけど、PelletはAlchemyでネイティブのBullet呼び出す形式ではなくて、ピュアAS3で書いてるっぽい? そういう理由からか、現状はBulletの一部の機能が実装されている状況。Petit Bullet 略して Pellet ってことなんだろうか。

機能・パフォーマンス的にAwayPhysicsに及ばないけど、描画と完全に切り離して扱うことができるので自前ライブラリと組み合わせて動かすことができた。Box2DとかJigLibとか触ったことがあれば概ね扱いは同じ。

  1. dynamicsWorldにもろもろのパラメータ渡して初期化
  2. dynamicsWorld内で扱うbtRigidBodyを登録
  3. EnterFrame毎に stepSimulation() で演算
  4. btRigidBodyの行列を、表示用のオブジェクトにコピー

みたいな流れ。

とはいうものの、JigLibと比較すると設定しなくちゃならない必須パラメータが随分多い上に、リファレンスの類が何も用意されてないので、最低限動かすのに必要な情報は Proscenium のサンプルコード

  • TestPhysicsAPI.as
  • TestPhysicsFractalTerrain.as
  • TestPhysicsStaticMesh.as
  • Tutorial06_SimplePhysics.as

から拾った。特にTestPhysicsAPI.as が有用。

あと、Pellet.swc内の catalog.xml からクラス一覧を取り出して、本家Bulletのリファレンスや、Bullet 2.76 Physics Japanese Manual と突き合わせながら用意されてそうなメソッドを探した。無駄に労力使って泥臭く。開発環境大事 orz 「bt〜」というクラス名を本家Bulletと揃えてくれてあるので、アタリを付けるうえでとても助かる。

エントリー冒頭のデモは、凸構造形状を扱うクラスbtConvexHullShapeを使って、球などで近似しない場合にどの程度動くのかを試したもの。一つのコリジョンデータあたり20頂点くらいなんだけど10個くらい動くとキツい。勘所が分かってないのでオレの実装がしょーもないことやってる可能性のほうが高いけど、大量のオブジェクトをガンガン出してヒャッハーしたいとなるとやっぱ球か。

 

ということで btSphereShape(球体)100個。

btSphereShape Test(要:FlashPlayer11)

自分の環境だと40〜45fps。マジメに最適化やって改善できるんだろうか。。

 

地形との衝突判定用途の検証に、凹面三角形メッシュを扱うbtBvhTriangleMeshShapeを使ったウォークスルーも作ってみた。

btBvhTriangleMeshShape Test(要:FlashPlayer11)

初期化に結構な負荷と時間がかかりますが、気長にお待ちください。
カーソルキーで移動、Z,Xキーでカメラのピッチング操作。
※モデルデータは、BTAさん制作の「ケロリン町1.05」をお借りしました。
※主な道路に沿う形でコリジョンメッシュ作ったので、通れそうで通れない路地があったり、ぶつかるはずのオブジェを貫通したりします。

コリジョンメッシュは△1000程度。これは思っていたより現実的な速度で動いた。コリジョンのポリゴン削ればさらに負荷を下げられるかもしれない。

 

今のところ btPoint2PointConstraint、btHingeConstraint といった、複数の剛体を繋いで複雑な物理モデルを構成するためのクラスの大部分が移植されてないようなので、連動して btRaycastVehicle、btKinematicCharacterController という有用なアクションインターフェースが使えない。この辺でもAwayPhysicsに大きく差をつけられてる感じ。

もうひとつ気になるのは、Proscenium を含めて今後もAdobeが開発を続ける気があるのかどうか。Pixel Bender 3Dもツールキットさえ提供されないまま消えてしまいそうだし、同じようにフェードアウトしそうな悪寒。Stage3D API 直叩き派としては描画ライブラリを規定しないPelletのほうが扱いやすいし、名前もカワイイので今後も開発が続行されることに期待したい。
あとリファレンス欲しい。


TRACKBACK

  1. [...] Stage3D Physics library “Pellet” [...]

  2. [...] You are seeing this because your blog was recently used as part of a DDOS attack against Trilema. [...]

Trackback URL : http://blog.r3c7.net/as3-stage3d/647/trackback/

COMMENTS

  1. 匿名 - 2012.12.03 5:27:28

    wow

Leave a Reply