3D物理の勉強も兼ねて、ActionScript3.0で動く
OimoPhysicsという3D物理エンジンを作りました。
まだ製作途中ですが、とりあえず箱が動かせるようになったので記事にしました。
ちゃんと使えるようになるまでは、まだしばらくかかりそうです。
2Dの物理エンジンは何度か作ったことがありましたが、
一つ次元が増えるだけで、こんなにも大変になるとは想像も付きませんでした…
どうしてもたくさん箱を積み重ねてドカーンしたかったので、
動作速度に一番力を注ぎました。
鬼のような最適化やインライン展開の甲斐あって、
最初の頃より10倍以上高速化することができました。
インライン展開は可読性は落ちてしまいますが、その分の効果は大きいです。
(特に箱同士の衝突検出のコードは大変なことになってしまいました)
そんなこんなで今の所、AS3の3D物理エンジンでは一番高速に動作するはずです。
同じAS3の3D物理エンジンAwayPhysicsとの比較用に、
6x6x6の箱を積み重ねるデモを作ってみました。
(AwayPhysicsの方は、サンプルを少し弄った程度ですが…)
※追記あり
>> Launch Box demo (AwayPhysics Ver)
>> Launch Box demo (Faster, AwayPhysics Ver: by muzer)
>> Launch Box demo (OimoPhysics on Away3D Ver: by muzer)
10/16 追記:muzerさんが、AwayPhysicsのより高速なデモと、
OimoPhysicsをAway3D上で動かすデモを作って下さいました!
thank you, muzer! :D
結果、AwayPhysicsが相当速くなりました。
ソルバの繰り返し回数等が不明なので、あまり細かい比較はできないですが、
大体OimoPhysicsと同じくらいの速度で動いてます。
がしかし、色々試してみましたが、自分の環境ではどうやっても
この速度は出せず…
そもそもswfのデータ構造が違うようなので(Unityから書き出されたswfと同じ?)、
コンパイラが違うのかもしれないです。
高速なAwayPhysicsを使うためには、
普通にライブラリとしてインポートするだけでは不十分なようです。
うーむ…
今の所使える機能は、
・プリミティブな形状 (球体、箱)
・ひとつの剛体に複数の形状を使用
・Sweep And Prune による高速な広域衝突判定
・安定したスタッキング (Warm Start)
と少なめですが、今後は
・ジョイントのサポート(距離、ボール、ヒンジ、2軸ヒンジなど)
・連続衝突検出 (Continuous Collision Detection、高速で動く物体がすり抜けない)
・他のプリミティブな形状(カプセル、シリンダー、コーンなど)
・レイキャスト
・静的な剛体の三角ポリゴンメッシュ
などの機能も実装していければと思っています。
また、OimoPhysics は MIT License の下、オープンソースで開発しています。
ソースコードはこちら(GitHub)に置いてあります。
まだ突然クラスや関数が消滅したり名前が変わったりするかもしれないですが、
自由に試していただいて構いません。
最後に、開発にあたっては、衝突応答部分に Box2D を、
広域衝突判定に Bullet Physics を、
詳細な衝突判定に Open Dynamics Engine を参考にさせていただきました。
先人達の素晴らしい知恵と技術に感謝です。
上と下はつながっているのですか?
ボールが台から落ちた後、ボールと台が同時に見えるようにしてしばらく待つと
バグりました。
(突然画面が変わる)
一定以上重力で落ちると、ワープして上から降ってくるようになっています。
I don’t speak a word or Japanese, but really well done! This looks very promising so far!!! Keep it up, the flash community needs a fast opensource 3D physics engine!!
Congrats..
Did You try connect ur engine with any 3d framework???
It could be nice do performance testes with Yr engine with away3d.
Regards
Thanks!
I didn’t try to connect this to any 3d framework yet.
If do so, I have to study away3d or other 3d framework more…
Very impressive!
Hi, greate work!
here is OimoPhysics with Away3D test: http://muzerly.com/test/OimoAway3DTest.html
and awayphysics test: http://muzerly.com/test/BasicTest.html
Thank you for faster tests!
I’m going to append about that.
ちゃんと動くし楽しいです
[…] githubページ 今回紹介した中では唯一の純国産ライブラリ。物理エンジンに特化しています。 紹介記事 […]