見出し画像

🎡three.jsと一緒に使う物理エンジンammo.js(アモジェス) Bullet(バレット) の物理エンジンを JavaScript に直接移植して生まれたキセキの物理エンジン Kubric PyBulletも


ammo.js は、Emscripten を使用して Bullet の物理エンジンを JavaScript に直接移植したものです。ソースコードは人の手を加えずに直接 JavaScript に翻訳されているので、機能はオリジナルの Bullet と同じです。

Three.jsは多くを語っていないが、Bulletの移植ということなのでオリジナルがある。

'ammo' stands for "Avoided Making My Own js(自分のjsを作ることを避ける) physics engine by compiling bullet from C++" ;)

JavaScriptでコードを書きたい場合は、ammo.jsで自動生成されたバインディングコードを使うことができます。完全な例は
examples/hello_world.jsにある。

ammo.jsのすべての要素には、Ammo.*を介してアクセスする必要があります。例えば、Ammo.btVector3などです。サンプルコードを見ていただければわかります。
構造体やクラスのメンバ変数には、|get_|や|set_|を先頭に持つセッター関数やゲッター関数を使ってアクセスできます。例えば
rayCallback.get_m_rayToWorld()
は ClosestRayResultCallback から m_rayToWorld を取得します。JavaScript ネイティブのゲッターとセッターを使用すると、API を少しすっきりさせることができますが、パフォーマンスが低下する可能性があります。


画像1

とにかく実装があってよかった。

上のサンプルも楽しそうだが、three.jsのサンプルを見ていこう。

風船と黒豆

画像2
この空気抜けた感がすごい

Three.jsのコードをみていってみる。

Promiseで書いているみたいだ。initとaimeをみればしくみがわかりそう

このあたりがammoオリジナルなので、いくつかメソッドを見てみる。

https://pybullet.org/Bullet/BulletFull/classbtSoftBodyRigidBodyCollisionConfiguration.html

Doxyなリファレンスで好感が持てる


これは

円形テトリス

画像3


オブジェクトじゃらじゃらの泉

画像4

短くていいですね。

KubricはPyBulletやBlenderと連携し、豊富なアノテーションを持つフォトリアリスティックなシーンを生成するオープンソースのPythonフレームワークで、数千台のマシンに分散し、TBsのデータを生成する大規模ジョブにもシームレスに拡張可能です。Kubricはインスタンスセグメンテーションマスク、深度マップ、オプティカルフローなどの豊富なアノテーションを持つセミリアルな合成マルチオブジェクト動画を生成することができます。

https://pybullet.org/wordpress/

Google Colabを使って、Webブラウザで直接PyBulletを試すことができます。pip install pybulletは、プリコンパイルされたPythonのホイールがあるので、15秒程度で完了します。

https://github.com/bulletphysics/bullet3

  • Bullet:Bullet Physics Library(Bullet物理エンジン)は、リアルタイムの3Dゲームや映画、ロボットシミュレーションなどに利用されるオープンソースの物理シミュレーションライブラリです。剛体動力学、ソフトボディ動力学、衝突検出、連結制約などを扱うことができます。また、リアルタイムのリアルな動作を再現することが求められるVR(Virtual Reality)やAR(Augmented Reality)の分野でもよく用いられます。

  • Kubric:Kubricは物理シミュレーションを用いたシーン生成ツールで、機械学習やコンピュータビジョンのための学習データ生成を目的としています。Kubricを使えば、リアルな3Dシーンをプログラムで生成し、それに基づくラベル付けされたデータセットを作成することができます。これにより、教師あり学習のための大量のアノテーションデータを効率的に生成できます。

  • PyBullet:PyBulletはBullet物理エンジンのPythonインターフェースで、PythonからBulletの機能を利用できます。ロボットの動力学シミュレーションや強化学習の環境として使用されます。また、PyBulletにはGUIツールも含まれており、シミュレーションの視覚的な確認やデバッグが可能です。

  • ODE:Open Dynamics Engine(ODE)は、リアルタイムの物理シミュレーションを提供するオープンソースのライブラリです。主に3Dゲームやシミュレーション、VRで使用され、剛体のダイナミクスシミュレーションと衝突検出をサポートしています。弾性体や流体などのシミュレーションはサポートしていません。

ODEときたらwebots


お願い致します