継続的衝突検出 (CCD)
概要
継続的衝突検出 (Continuous Collision Detection, CCD) は、速い動きをする物理エンティティが他の物理コライダーと衝突するために使用されます。これにより、エンティティがコライダーを通り抜けるトンネリング現象を防ぐことができます。
CCD アルゴリズムには、予測的 と スイープベース の 2 つの一般的なアプローチがあります。Quantum は性能の観点から、ステートレスの物理エンジンに結びついた 予測的な継続的衝突検出 を実装しています。予測的 CCD アプローチは、並列処理に適しており、角運動をうまく扱うため、パフォーマンスが求められ、ゲームプレイの多くのシナリオで必要となります。
予測的 CCD アルゴリズムは、エンティティの PhysicsBody
コンポーネントの線形 Velocity
と AngularVelocity
に基づいて、広域フェーズ中に使用される最小バウンディングボックスを増加させます。これはエンティティがそのエリア内の他の物理オブジェクトと衝突する可能性があると「予測する」ため、すべての候補をソルバーに渡します。この予測は、衝突を解決する際にすべての接触制約を考慮し、トンネリングを防ぎます。
セットアップ
CCD を設定するには、2 つの簡単なステップが必要です。これらは、エディットタイムと / またはランタイムの両方で実行できます。
注意: CCD がシミュレーションに与えるパフォーマンスへの影響を考慮し、CCD 機能は エンティティごとに 有効にされています。全球的 に有効になることはありません!
エディットタイム
ステップ 1: シミュレーション設定の Physics
セクションで Allow CCD
ブーリアンをチェックします。

ステップ 2: エンティティプロトタイプの PhysicsBody
コンポーネントの Config
で Use Continuous Collision Detected
フラグを有効にします。

ランタイム
特定の状況やゲームの瞬間にのみ CCD が必要な場合、CCD を動的にオンまたはオフに切り替えることができます。
ステップ 1: 現在のゲーム状態の PhysicsSceneSettings
で AllowCCD
プロパティを切り替えます。これらはフレームの一部であり、SimulationConfig
アセット内に見つかる物理値で初期化されます。 重要: ランタイム中に SimulationConfig
アセットを変更しないでください。これは非決定的であり、非同期状態を引き起こします!
C#
frame.PhysicsSceneSettings->CCDSettings.AllowCCD = true;
ステップ 2: CCD を使用するエンティティに対して PhysicsBody
コンポーネントの UseContinuousCollisionDetection
プロパティを切り替えます。
C#
var physicsBody = f.Unsafe.GetPointer<PhysicsBody3D>(myEntityRef);
physicsBody->UseContinuousCollisionDetection = true;
設定
SimulationConfig
アセットは、物理エンジンを初期化するためのデフォルト値を保持します。CCD に関連する要素を含みます。Continuous Collision Detection (CCD)
セクションで見つかるデフォルト値は、ほとんどのゲームに最適であり、エッジケースが発生したときにのみ注意深く調整するべきです。
AllowCCD
: 物理ボディがその設定フラグで CCD を有効にしている場合に CCD を実行できることを許可します。CCDLinearVelocityThreshold
: CCD が許可されている場合、これの設定により有効な物理ボディに対して CCD が実行され、線形速度の大きさがこのしきい値を上回る場合。CCDAngularVelocityThreshold
: CCD が許可されている場合、これの設定により有効な物理ボディに対して CCD が実行され、角速度の大きさがこのしきい値を上回る場合。CCDDistanceTolerance
: CCD チェック下の物理ボディが接触していると見なされる絶対距離値。MaxTimeOfImpactIterations
: 2 つの物理ボディ間の影響時間を計算する際に CCD アルゴリズムが実行する最大反復回数。MaxRootFindingIterations
: 指定された分離軸で 2 つの物理ボディ間の距離が許容範囲を下回る時間を計算する際に実行される最大反復回数。
既知の制限
予測的 CCD は機能が完全であるものの、予測的アプローチの既知の制限に注意してください。
現在のアルゴリズムは、通常の物理衝突解決と並行して単一の CCD 反復を実行します。言い換えれば、CCD 衝突が検出されて解決された後、そのエンティティの残りのデルタ時間は CCD に関係なく統合されます。したがって、高速で移動しているエンティティが密集している環境では、トンネリングが発生する可能性があります。
Back to top