衝突判定
球体スウィープボリュームを用いて連続的衝突判定(CCD)を行う「スイープに基づくCCD」では物体が等速直線運動を行うものとして、物体の角運動を無視しているため、やはり「壁抜け」を起こしやすい欠点がある。特にフリッパーが直線運動を全く行わない(回転運動しか行わない)ピンボールゲームでは顕著で、高速に動くボールが回転するフリッパーをすり抜ける致命的な結果となる。これを防ぐために、Unityでは投機的連続的衝突判定(投機的CCD)法が採用されている。詳しくはUnityユーザーマニュアルを参照のこと。
After an inelastic collision, special states of sliding and resting can occur and, for example, the Open Dynamics Engine uses constraints to simulate them. Constraints avoid inertia and thus instability. Implementation of rest by means of a scene graph avoids drift.
In other words, physical simulators usually function one of two ways, where the collision is detected a posteriori (after the collision occurs) or a priori (before the collision occurs). In addition to the a posteriori and a priori distinction, almost all modern collision detection algorithms are broken into a hierarchy of algorithms. Often the terms "discrete" and "continuous" are used rather than a posteriori and a priori.
It is difficult (but not completely impossible) to separate the physical simulation from the collision detection algorithm. However, in all but the simplest cases, the problem of determining ahead of time when two bodies will collide (given some initial data) has no closed form solution—a numerical root finder is usually involved.
Some objects are in resting contact, that is, in collision, but neither bouncing off, nor interpenetrating, such as a vase resting on a table. In all cases, resting contact requires special treatment: If two objects collide (a posteriori) or slide (a priori) and their relative motion is below a threshold, friction becomes stiction and both objects are arranged in the same branch of the scene graph.
球体スウィープボリューム同士の衝突判定を行うことで、高速に動くオブジェクト同士の衝突判定も行える。動く球同士の衝突判定の取り方を説明すると、動く球は、移動開始時の中心・速度ベクトルV・半径、で表すことができる。現在のフレーム(フレーム0)と次のフレーム(フレーム1)の間の時間において、0 < t < 1 となる媒介変数 t を使うと、球Aの中心は (A0 + t Va), 球Bの中心は (B0 + t Vb) と表せる。このように動いていく球A・球Bの中心どうしの距離が、半径の和以下になるような時刻 t が存在するか? を求める。
この手法では物体の角運動を無視しているため、回転運動をしているオブジェクトではやはり「壁抜け」を起こしやすい欠点があるのと、かなり計算機負荷の高い手法であるため、大量のオブジェクトが存在する状況では計算量が増大し、オーバーヘッド(いわゆる「処理落ち」)が発生する懸念がある。
2Dの場合は、円形のスウィープボリュームを用いる以外は同じである。1990年代以降のFPSでよく使われている(例えばアンリアルエンジンでは「カプセルスイープ」として実装されている)が、敵が遠くにいてもショットガンが1フレームで高速に真っ直ぐに敵に着弾するという、文字通りアンリアルな挙動になりがちである。