伝説のBox2D物理演算を3Dに:Catto氏の新作
2Dゲーム開発に興味がある方なら、Box2Dを知らない人はいないでしょう。Angry Birds、Limbo、そして数百ものプロジェクトがこのエンジン上に構築されてきました。その作者、Erin Catto씨가 최근 새로운 프로젝트를 공개했습니다 — Box3D。Cでゼロから書かれたリジッドボディ3D物理ライブラリです。
Box3Dとは
このライブラリは移植可能なC17で書かれており、標準Cライブラリ以外の外部依存はありません。プロジェクトに含まれているサンプルは、sokol graphicsバックエンドとDear ImGuiインターフェースを使用してC++20で書かれています。デモアプリケーションはWindows、macOS、Linuxで問題なくビルドでき、WebAssembly経由でブラウザ上で物理シミュレーションを直接実行できます。

肥大化した商用代替品とは異なり、Box3Dは純粋なパフォーマンス、データ指向のアプローチ、そして予測可能性に重点を置いています。
主な機能
ベクトル演算とパフォーマンス
物理エンジンコアは、x86プロセッサ用のSSE2ベクトル命令とARM用のNeonを активно活用しています。 экзотик платформаやSIMDをサポートしていないマイクロコントローラ向けにプロジェクトをビルドする場合は、BOX3D_DISABLE_SIMDマクロ定義によりベクトル演算を無効にできます。
Soft Stepソルバーとジョイントタイプ
Soft Stepアルゴリズムがリジッドボディの動作を処理します。エンジンは凸包、カプセル,球体,多角形メッシュ,高さフィールドをサポートしています。複数の形状を単一のボディに取り付けることができます。
利用可能なジョイント:
- ヒンジとスライダー
- 距離制約とモーター
- ウェルドとホイールジョイント
- 設定可能なリミット、スプリング、摩擦
リソースを節約するために、アイランドスリープシステムが 使用されています。オブジェクトのグループが停止した場合、エンジンは一時的にそのグループを計算から除外します。
決定論性とシミュレーション記録
物理ワールドの計算結果は、異なるプラットフォーム間で常に同一になります。これはネットワーク対応マルチプレイヤーゲームにとって重要です。シミュレーションの記録とリプレイが標準でサポートされており、物理バグのデバッグが容易になります。
連続衝突検出
高速移動するオブジェクトが壁を貫通しないのは、完全な連続衝突検出(CCD)システムのおかげです。アルゴリズムは高速な直線運動と回転の両方を処理します。
プロジェクトへの統合方法
CMakeプロジェクトにBox3Dを統合するのは、FetchContentを使用すれば literally 数分で完了します:
include(FetchContent)
FetchContent_Declare(box3d
GIT_REPOSITORY https://github.com/erincatto/box3d.git
GIT_TAG v0.1.0)
FetchContent_MakeAvailable(box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
サードパーティコードをローカルに保ちたい場合は、標準的なadd_subdirectoryも使用できます:
add_subdirectory(extern/box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
開発におけるAIについて率直に語る
READMEに記載された興味深い詳細 — 作者はライブラリ作成におけるニューラルネットワークの役割を正直に描述しています。Erin Catto씨는 단위 테스트の生成、CMakeの設定、Box2Dからのコード移行、ベンチマークの作成、コードレビューにLLMを使用していることを明示しています。しかし、すべての物理エンジロジックは自分で書いており、すべてのコード行に個人的な責任を持っていると述べています。
誰が使うべきか
CまたはC++で独自の3Dエンジンを書いていて、大規模なグラフィックスやエンジンオーバーヘッドのないコンパクトな物理ライブラリを探しているなら、Box3Dは詳細に調べる価値があります。プロジェクトは現在release 0.1.0段階で、プルリクエストは閉じられており問題の報告のみを受け付けています。しかし、ソースコードはMITライセンスの下で公開されており、非常に読みやすいコードです。
関連プロジェクト