Collision Detection
The problem can be defined as Intro The problem can be defined as if, where and when two objects intersect.
Collision Detection Collision detection, as used in the games community, usually means intersection detection of any form Intersection detection is the general problem: find out if two geometric entities intersect – typically a static problem Subtle point: Collision detection is about the algorithms for finding collisions in time as much as space
Classification of Collision Detection Type of objects convexity/concavity rigid/deformable polygons/curves 1-Dimensional/2D/3D/N-D static/dynamic Time of collision discrete/continuous exact/approximate Motion of objects linear/non-linear predictable/dynamic bounded/unbounded angular motion Other factors realtime/off-line number of objects allowable error margin frame vs. path
Choosing an Algorithm The geometry of the colliding objects is the primary factor in choosing a collision detection algorithm “Object” could be a point, or line segment Object could be specific shape: a sphere, a triangle, a cube, … Objects can be concave/convex, solid/hollow, deformable/rigid, manifold/non- manifold
Collision Detection in the Video Game Package For pair (j, k) of Sprites: if the boundingBox(j) does not intersect boundingBox(k), return no intersection let m be the intersection of j and k if m is empty, return no intersection otherwise, return intersection This algorithm uses a simple test for intersection when possible (intersection of bounding boxes), and a more exact test when the bounding box fails to determine intersection.
Collision Detection in the Video Game Package What this collision detection is not good at doing: determining path intersections (important for fast moving objects or low model frame rates) determining time/location of first intersection predicting intersections handling a large number of Sprites
Part 1: Bounding Volumes Reduce complexity of collision computation by substitution of the (complex) original object with a simpler object containing the original one.
Bounding Volumes The original objects can only intersect if the simpler ones do. Or better: if the simpler objects do NOT intersect, the original objects won’t either.
Different BVs used in game programming: Bounding Volumes Different BVs used in game programming: Axes Aligned Bounding Boxes (AABB) Oriented Bounding Boxes (OBB) Spheres k-Discrete Oriented Polytopes (k DOP) Sphere OBB k-DOP AABB
Oriented Bounding Box (OBB) Bounding Volumes Oriented Bounding Box (OBB) Align box to object such that it fits optimally in terms of fill efficiency Computationally expensive Invariant to rotation Complex intersection check
Separating Axes Theorem Bounding Volumes The overlap test is based on the Separating Axes Theorem (S. Gottschalk. Separating axis theorem. Technical Report TR96-024,Department of Computer Science, UNC Chapel Hill, 1996) Two convex polytopes are disjoint iff there exists a separating axis orthogonal to a face of either polytope or orthogonal to an edge from each polytope.
Bounding Volumes Each box has 3 unique face orientations, and 3 unique edge directions. This leads to 15 potential separating axes to test (3 faces from one box, 3 faces from the other box, and 9 pairwise combinations of edges).
Not invariant to rotation Bounding Volumes K-DOP Easy to compute Good fill efficiency Simple overlap test Not invariant to rotation
k-DOPs are used e.g. in the game Bounding Volumes k-DOPs are used e.g. in the game ‘Cell Damage’ (XBOX, Pseudo Interactive, 2002)
Part 2: Collision on different scales: Bounding Volumes Part 2: Collision on different scales: Hierarchies
Hierarchies Idea: To achieve higher exactness in collision detection, build a multiscale BV representation of the object
Hierarchies
Each node contains all primitives of its subtree Hierarchies Simple example: Binary tree Each node contains all primitives of its subtree Leaves contain single primitive
Hierarchies
Hierarchies
Hierarchies
How to create a hierarchy tree Hierarchies How to create a hierarchy tree Top down: Use single BV covering whole object Split BV Continue recursively until each BV contains a single primitive
Start with BV for each primitive Hierarchies Bottom up: Start with BV for each primitive Merge
Example for top down using OBBs : Hierarchies Example for top down using OBBs :
Hierarchies Comparison AABB / OBB
Part 3: Collision between Multiple Objects Part 3: Collision between Multiple Objects
Grid Method: Create 3d grid volume overlay Multiple Objects Grid Method: Create 3d grid volume overlay Only check collision between objects sharing at least one cell
Multiple Objects 2D example
Sort and Sweep Create single AABB for each object Multiple Objects Sort and Sweep Create single AABB for each object Project BVs onto coordinate axes Create a sorted list of start and endpoints for each coordinate axis, hence store the intervals created by each object (Cont’d)
If startpoint of object i is hit, insert i into ‘active list’ Multiple Objects Traverse each list If startpoint of object i is hit, insert i into ‘active list’ If endpoint of object i is hit, remove i from ‘active list’ If 2 objects i1,i2 are active at the same time they overlap in the dimension processed Objects overlapping in all single dimensions overlap in world
S3 S1 E3 S2 E1 E2 S1 S2 E1 S3 E2 E3 Multiple Objects X Y 3 1 2 OVERLAP 1,2 s1 s2 e1 s3 e2 e3
Note: sort and sweep for a single step is relatively expensive. Multiple Objects Note: sort and sweep for a single step is relatively expensive. Since not all objects are transformed for the next frame, the list is not created newly for each frame, but updated.