投機的衝突判定は、Continuous Speculative モード用の CCD (連続的衝突判定) アルゴリズムです。
投機的衝突判定は、スイープベースの衝突判定よりも計算負荷が軽くなります。また、直線移動 (例えば、直線上を移動するボール) と回転移動 (例えば、ピンボールのフリッパーがピボット上で回転するときにボールと衝突する) の両方の結果として発生する衝突にも有効です。
ただし、Continuous Speculative の精度も低くなります。また、衝突を見逃した場合と同様に、アルゴリズムが衝突を誤って予測し、コライダーがコースを外れてしまう “false 衝突” が発生する可能性があります。
投機的 CCDは、オブジェクトの直線運動と回転運動の両方に基づき、オブジェクトのブロードフェーズで最小の軸平行バウンディングボックス (AABB) を拡張することにより機能します。このアルゴリズムは、次の物理演算ステップで接触の可能性があるすべてのものを選択し、ソルバーにフィードするため、投機的です。ソルバーは、リジッドボディがどの衝突もトンネリングしないように、すべての接触制約が満たされるようにします。
現在の速度に基づく拡張した AABB は、移動軌道に沿った潜在的な接触をすべて検出するために役立ち、ソルバーによる衝突の見逃し (“トンネリング”) を防げます。
投機的 CCD は一般的にスイープベースの CCD よりもリソース負荷が低くなります。なぜなら、解決と統合のフェーズ中ではなく、衝突判定フェーズ中でのみ計算するためです。さらに、投機的 CCD は、スイープベースの CCD では検出できない可能性のある接触を検出することができます。これは、投機的 CCD が、オブジェクトの直線的なモーションと角度のあるモーションの両方に基づいてブロードフェーズ AABB (軸平行バウンディングボックス) を拡張するためです。
ただし、投機的 CCD は false 衝突 (または “ゴースト衝突”) を引き起こす可能性があり、この場合オブジェクトの動きは、投機的接触点によって影響を受けるべきでないときに影響を受けます。これは、投機的 CCD が、直近点アルゴリズムに基づいて接触の可能性をすべて収集するため、接触法線の精度が低くなるためです。これにより、高速のオブジェクトがテッセレーションされた衝突の特徴に沿ってスライドし、そうなるべきではないのに跳ね上がることがよくあります。例えば、以下の図では、スフィアは t0 から動き始め、右に向かって水平に移動し、積分後の予測位置は t1 です。拡張した AABB はボックス b0 と b1 に重なり、CCD によって c0 と c1 で 2 つの投機的接触が発生します。投機的 CCD は直近点アルゴリズムを使用して接触を生成するため、c0 の法線は非常に傾いており、ソルバーは傾斜した線と見なします。
このように傾いている法線は、積分後に t1 がまっすぐ前方に移動せず、上方に飛んでしまう原因になります。
さらに、投機的な接触は、衝突判定のフェーズでのみ計算されるため、投機的 CCD は衝突の見逃しを引き起こすことがあります。接触解決中にオブジェクトがソルバーからあまりに大きなエネルギーを得ると、積分後に最初に拡張した AABB の外側に飛び出してしまう場合があります。AABB のすぐ外側に衝突がある場合、オブジェクトはすり抜けます。
例えば、以下の図では、棒が右回りに回転する間にスフィアが t0 から左に移動しています。衝突によってスフィアにあまりにも大きなエネルギーが加えられると、t1 で拡張した AABB (赤い点線の矩形) から出る場合があります。AABB のすぐ外側に衝突がある場合、下の青色のボックスのように、スフィアがそれをすり抜けてしまう場合があります。これは、ソルバーは解決のフェーズと積分のフェーズでは拡張した AABB 内の接点の計算のみを行い、衝突判定を行わないためです。