Computer Game Design and Development Mathematics, Collision, and Physics Havok Destruction
Basic Problem Without physics: We must determine: There’s no gravity There’s no friction There are no collisions Objects pass through one another We must determine: If objects collide (collision detection) Where/when they collided (collision resolution)
Collision Detection Bullets (very fast) Characters (very complex) Naïve algorithms run in O(n2) Two primary methods: Overlap testing (most common) Intersection testing (sweeping)
Overlap Testing Determines if two objects overlap (duh!) Check each vertex of an object inside another? Exhibits the most error Is discrete (i.e. checks an exact point in time) Results: Give a time of collision Give a normal of collision Uses bisection…
Overlap Bisection
Limitations of Overlap Testing Design constraint? Speed of objects * time step < size of all objects? Reduce time step?
Intersection Testing “Sweep” an object from one point to another (i.e. “extrude” – sphere becomes capsule). Can calculate t with an equation-> See book for equation Doesn’t work well for network games
Collision Approximations Minkowski Sum – sweep origin of X across Y Intersection technique. These are the same!
Bounding Volumes and Boxes AABB OBB
About Bounding Volumes Simplest is sphere Next is capsule (2 spheres and a cylinder), Next are AABBs What can we do about character collisions?
Performance (avoiding O(n2)) Possible collision between R and B since overlap in all axis (2 in this case) Subdivide such that on average one object in each cell. Test against neighboring cells What if all are in one cell? Variable-sized objects? “Plane sweep” needs to be sorted! Which algorithm? Quicksort? Bubblesort?
Terrain Collision Determine which quad is easy Heightmap (x and z are fixed, y is variable) Which triangle in the quad? Compare x with z http://creators.xna.com/en-US/sample/collision3dheightmap
Resolving Collision Gross collision & subdivide if needed Three phases Prologue – ignore or trigger other events Collision – objects moved to point of impact, new velocities, calculate normal and penetration Epilogue – destroy object, effects, damage, etc
Particle Physics Basics Use consistent units (SI) – or bad stuff happens Particle kinematics Position (p) in 3-space, vector3 (x,y,z) = p(t) Velocity (v) = change in position over time, V(t) Acceleration (a) = change in velocity over time, a(t) Force (f) = results in change in acceleration over time, F(t) = ma(t) Calculus Derivatives and integrals go from one to another
Center of Mass
Collision Response (frictionless)
Other Definitions Kinematic objects: those that move Static objects: those that don’t, but affect those that do (terrain) Rigid bodies: objects that do not deform Soft bodies: those that do Center of gravity changes Cloth, deflated ball…
Rigid Body Collision Center of Mass Consideration
More Definitions Constraints: Ragdoll physics: Limitations on what objects can do Joint types: ball joint, hinge joint, sliding joint Ragdoll physics: Animated bones replaced by rigid bodies Good for violent death animations http://www.youtube.com/watch?v=4gR_dP4HaF8
Physics Engines Commercial Free/Shareware Game Dynamics SDK (Havok) Renderware Physics PhysX (NVIDIA) NovodeX SDK Free/Shareware Open Dynamics Engine (ODE) Tokamak Game Physics SDK Newton Game Dynamics SDK Bullet SDK
Demos http://www.havok.com/content/view/584/96/ http://www.tokamakphysics.com/index.htm