MENU

Bullet Physicsとはゲームと映画で使うOSS物理エンジン

Bullet Physics アイキャッチ
Bullet Physics

Bullet Physics(バレット・フィジックス)は、剛体・軟体・流体までを含むオープンソースの物理シミュレーションライブラリで、ゲーム開発から映画のVFX、ロボティクスや機械学習まで幅広く使われています。2003年にErwin Coumans氏が公開を始め、現在はBSDライセンスでGitHub上に配布されています。同氏はSony Computer EntertainmentやAMDで開発を続け、PlayStation 3の多くのタイトルや「2012」「Sherlock Holmes」などのハリウッド映画のVFXに採用された実績があります。物理学習や強化学習プラットフォームPyBulletの基盤にもなっており、Pythonからも手軽に利用できます。

目次

この記事の目次

  1. Bulletが扱える物理現象の種類
  2. シミュレーションループと積分法
  3. ゲーム開発と研究での採用事例
  4. PyBulletとビルド方法
  5. まとめ

Bulletが扱える物理現象の種類

Bulletが扱える物理現象の種類

Bulletの中心は剛体動力学で、btRigidBodyクラスで質量や慣性テンソルを設定し、シーンに追加して時間ステップを進めるだけで物理挙動が計算されます。衝突形状にはbtBoxShape、btSphereShape、btCapsuleShape、複雑な凸多面体用のbtConvexHullShape、地形向けのbtBvhTriangleMeshShape、複合形状のbtCompoundShapeなどがあり、用途に応じて選択します。摩擦係数や反発係数、減衰係数を個別に設定でき、リアルなゲームプレイ挙動を作り込めます。

ソフトボディは布、ロープ、ゼリーのような柔らかい物体を扱う機能で、btSoftBodyとして質点とバネ構造で表現します。バウンスする旗や引きずられるマント、流体的に変形するブロブの表現に向いています。さらに拘束(コンストレイント)としてヒンジ、ボールジョイント、スライダー、6自由度のジェネリックジョイントが用意され、これらを組み合わせるとラグドール、自動車のサスペンション、ロボットアームなどを構築できます。

シミュレーションループと積分法

シミュレーションループと積分法

BulletのワールドであるbtDiscreteDynamicsWorldはstepSimulation関数を呼ぶことで時間を進めます。内部では予測位置の計算、ブロードフェーズ(軸並行境界ボックスでの粗いペア候補抽出)、ナローフェーズ(GJKやMPRなど凸形状アルゴリズムでの厳密判定)、衝突応答(順次インパルス法のSolver)、位置補正という順で処理が走ります。デフォルトの内部固定ステップは1/60秒で、可変ステップを渡しても複数回の内部ステップに分けて安定性を保ちます。

速い物体のすり抜け(トンネリング)に対してはContinuous Collision Detection(連続衝突検出)を有効化することで、移動経路を考慮した判定ができます。Substep数や許容貫通量、ソルバ反復回数といったパラメータをチューニングすることで、安定性とパフォーマンスのバランスを取ります。MultiBody機能を使うと関節を持つロボットの剛体ツリーを効率的に解け、ロボティクス分野の研究で重宝されています。

ゲーム開発と研究での採用事例

ゲーム開発と研究での採用事例

ゲーム業界での採用例は数えきれず、Rockstar GamesやSCE Worldwide Studiosの作品、Crystal DynamicsのTomb Raider関連、GoogleのProject Tangoなど多岐にわたります。Bulletは商用利用に課金が発生しないBSDライセンスで提供されているため、PhysXやHavokのような他社製品と並んで「無料で使える業界標準」として広く受け入れられました。Blenderの剛体シミュレーション機能もBulletを内部利用しています。

学術や研究分野では、Erwin Coumans氏自身がGoogle Brainに移ってからPyBulletを整備し、ロボット制御や強化学習のシミュレータとして大きな存在感を持つようになりました。OpenAI GymのHumanoidやAntの一部環境、TensorFlowチュートリアルのロボット例、模倣学習研究のベンチマークなどで採用されています。MuJoCoが2021年に無料化されてから競合が増えましたが、Bulletは依然として軟体や流体まで含むトータルなOSSとして独自の地位を保っています。

PyBulletとビルド方法

PyBulletとビルド方法

ネイティブのBulletを使う場合は公式リポジトリのソースをCMakeでビルドし、btBulletDynamicsCommon.hなどをインクルードします。Windows、macOS、Linux、Android、iOSすべてをサポートし、libBulletDynamics、libBulletCollision、libLinearMathなどの静的ライブラリにリンクします。サンプルアプリケーション群が同梱されており、btDebugDrawerを使えばOpenGLでワイヤフレーム表示しながら挙動を確認できます。

Pythonから使うならpip install pybulletで一発導入でき、loadURDF関数でロボットの記述ファイルを読み込んだり、setGravity、stepSimulation、resetBasePositionAndOrientationといった関数で物理操作ができます。GUIモードでウィンドウ表示しながらデバッグでき、DIRECTモードで高速ヘッドレス実行も可能です。Gymnasium(旧Gym)と組み合わせれば独自の物理ベンチマーク環境を作るのも容易で、研究プロトタイプの定番ツールチェーンとなっています。

まとめ

Bullet Physicsは20年以上の歴史を持ち、ゲームから映画、ロボット研究まで支え続けるオープンソース物理エンジンです。剛体、軟体、ジョイント、連続衝突検出という基本機能を網羅しつつBSDライセンスで自由に使え、PyBulletを通じてPython研究者からもアクセスしやすいことが強みです。リアル志向の物理表現を低コストで導入したいときの第一候補として、Bulletの選択肢を覚えておく価値があります。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次