このプロジェクトについて
godot-box3dは、Erin Catto氏の3D物理エンジンであるBox3DをGodot 4に統合するGDExtensionで、組み込みのPhysicsServer3Dのドロップイン代替として機能します。標準のGodot物理ノードはそのまま動作し、シーンを変更する代わりにプロジェクト設定を変更するだけで済みます。このプロジェクトは初期段階かつ実験的とされており、Box3D自体も新しいエンジンです。
動機: 著者はGodotでSourceエンジンの「SkillSurf」を再現するSurfsUpを開発中です。サーフマップは長い凹型トリメッシュランプ、高速コーナー、ジオメトリ下のヘッドサーフなどで物理に負荷をかけます。Godotの組み込み物理とgodot-joltはその一部で問題があると報告されています。Box3DはSource 2の物理エンジンであるValveのRubikon-liteに由来するため、Rubikon系のソルバーを試す価値があると考えられました。GodotのPhysicsServer3DとBox3Dの間のブリッジはgodot-joltのアーキテクチャに従っています。
Godot向けの別のBox3Dバインディングであるbox3d-godotとの比較: box3d-godotはBox3Dを14個のカスタムノードとして公開し、Godotの物理と並行して動作しますが、このプロジェクトは代わりにGodotの物理を置き換えます。これにより標準ノードと既存のアドオンは動作し続けますが、爆発、ジャイロスコープトルク、ソルバープロファイリング、非同期ステッピングなどのBox3D専用機能はPhysicsServer3Dインターフェースからは利用できません。box3d-godotはより多くのジョイントタイプ(8対3)、実際のホイール制約、より多くのプラットフォーム(Android、Web)を提供しますが、このプロジェクトはハイトフィールドとレイキャストによるVehicleBody3Dをサポートします。READMEには、このプロジェクトは現在、ジョイントタイプ、ConeTwistと6DOF、クエリ結果のシェイプごとのインデックス、プロファイリング、プラットフォームに関してbox3d-godotに遅れを取っていると記載されています。どちらも本番環境対応とは説明されていません。
動作するもの: リジッド、スタティック、キネマティックボディ。ボックス、スフィア、カプセル、シリンダー、凸ポリゴン、凹ポリゴン(トリメッシュ)、ハイトマップ、ワールド境界などのシェイプ。オーバーラップイベント、重力/ダンピングオーバーライド、優先順序付け、ポイント重力を持つエリア。直接スペース状態クエリ(レイキャスト、ポイントおよびシェイプ交差、シェイプキャスト、collide_shape、rest_info)。CharacterBody3Dとmove_and_slide()が機能するためのbody_test_motion。実際の接触点、法線、インパルスを持つ接触監視。ペアごとの衝突例外。ピン、ヒンジ、スライダージョイント。自動検出された物理コアとworker_countオーバーライドを備えたマルチスレッドソルバーで、ワーカー数に関係なく決定的。デモハブ、決定的ベンチマーク、19のヘッドレス回帰テストを備えたテストプロジェクト。
残りの作業には、分離レイシェイプ、ConeTwistジョイント、Generic6DOFJoint3D(Box3Dには軸ごとのロック/リミット/モーター制約がないため、忠実なマッピングは存在しない)、SoftBody3D、クエリおよび接触結果のシェイプごとのインデックス、ソルバープロファイリング、macOSユニバーサルバイナリと公証、より多くのプラットフォームとアーキテクチャ、パフォーマンスベンチマークとチューニングが含まれます。
動作の違いは文書化されています: Area3Dはトリメッシュまたはハイトマップボディを検出しません。Box3Dの凹型シェイプは設計上センサービジターとして機能できないためです。collide_shape()はBox3DがGJKを公開するため、貫通深度なしで接触点を報告します。シェイプクエリには凸型クエリシェイプが必要です。摩擦と反発の組み合わせが異なります(摩擦はsqrt(a*b)、反発はmax(a,b)。Godotのmin(a,b)とクランプされた合計とは対照的)。そのため、マテリアルの再調整が必要になる場合があります。
READMEには、固定シードから固定ラティス上にボックスを4096ボディが存在するまで落とすベンチマークシーンが含まれており、LinuxでGodot 4.7.2.rcで実行されます。報告された結果では、Box3D Physicsは、この特定の高密度ボックスワークロードにおいて、16.66 msでのボディ数、中央値ステップ、p95ステップ、ピークステップ、メモリでJolt Physics、Godot Physics、Rapier3Dより優れています。READMEは、4つのバックエンドすべてが4096ボディのかなり前に予算を超えていること、これは過負荷時の劣化を測定するものであること、高密度ボックスの山はレイキャスト、キャラクターコントローラー、ジョイントについて何も示さないため、ランキングではなく出発点として捉えるべきであることを明示的に警告しています。
要件: Godot 4.3以降(テストプロジェクトは4.7を対象)。インストールはReleasesのアドオンzipから、addons/godot-box3d/をプロジェクトにコピーし、Project Settings → Physics → 3D → Physics EngineをBox3D Physicsに設定して再起動します。ソルバーはデフォルトで物理コアごとに1つのワーカーを使用し、physics/box3d/worker_countで上書きできます。macOSは進行中と説明されています: Apple Siliconのみ、公証なし、コンパイル以外は未テスト。LinuxとWindowsがテスト済みプラットフォームです。ビルドはCMakeを使用し、LinuxからWindows DLLをクロスコンパイルするためのMinGW-w64ツールチェーンファイルがあります。テストは、拡張機能をビルドし、登録し、バックエンドのロードを検証し、19の回帰テストを実行し、失敗またはBox3D RIDのリーク時に非ゼロで終了するヘッドレススクリプトを通じて実行されます。貢献は歓迎されます。MITライセンス。Box3DはMITであり、プロジェクトは同じくMITのgodot-joltから構造的なインスピレーションを得ています。
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.