このプロジェクトについて

BepuPhysics for Rust は、BepuPhysics v2 の逐行翻訳であり、著者はこれを非常に高性能な物理エンジンとして説明しています。このポートは、SIMD 最適化された衝突検出と制約解決という元の特徴を維持し、マルチスレッド用の自動作業分配によるロックフリーのタスク スケジューリングを追加し、Bevy ゲーム エンジンとのオプションの統合を提供します。空間クエリのサポートには、フィルタリングされたレイキャストと形状スイープが含まれます。 ビルド要件は注目に値します。このクレートは、portable_simd と generic_const_exprs の機能を使用するため、Rust nightly 1.95.0 以降が必要であり、macOS (NEON SIMD) または x86_64 (SSE/AVX2) を対象としています。インストールは通常の Cargo 依存関係であり、bevy 機能フラグでプラグインが有効になります。 Bevy パスは、最も簡単な開始方法として提示されています。BepuPhysicsPlugin がデフォルトのプラグインに加えて追加され、重力がリソースとして挿入され、ボディがコンポーネントで生成されます。具体的には、Dynamic、Static、Kinematic ボディ用の RigidBody バリアント、球、立方体、カプセル、円柱用のコライダー、および質量、摩擦、反発、線形または角減衰用の材料プロパティです。速度コンポーネントは、シミュレーションと双方向に同期します。追加のチューニング コンポーネントには、ボディ局所軸周りの回転ロック(yaw を解放する UPRIGHT プリセットと、すべてをロックする ALL プリセットを含む)、接触が表面のどれくらい先で作成されるかを制御する投機的マージン、スリープ閾値、および空間クエリのフィルタリングのみに使用されるクエリ レイヤー マスクが含まれます。リソースには、Gravity と、タイムステップ、サブステップ、スレッド数、および決定論性を設定する BepuConfig があり、後者はリプレイやネットワーク シナリオを意図しています。 空間クエリは、BepuSpatialQuery システム パラメータを通じて公開されており、シミュレーションを共有モードで借用するため、複数のクエリ システムを並列で実行でき、システムごとにスクラッチ メモリが割り当てられます。クエリは、物理ステップ セットの外でスケジュールする必要があります。API は、最接近ヒットと全ヒットのレイキャスト、および形状スイープをカバーし、QueryFilter はエンティティの除外、レイヤー マスク、静的のみまたはボディのみの制限をサポートします。README は、SweepResult::StartPenetrating バリアントを特に強調しています。これは、すでに接触している状態で始まるスイープ用であり、その場合、衝突時間、接触点、法線は定義されていないため、ポートではこれをミスやヒットとは別に保持し、呼び出し元が処理方法を決定できるようにしています。エンティティの解決は、ボディとスタティックのハンドルが同じ生の値を持つ場合でも異なるオブジェクトを参照するため、コライダーの可動性を分岐してからハンドルを使用するように文書化されています。