Advanced Character Physics Paper writtten by Thomas Jakobsen from IO Interactive Presentation by Semih Kekül
Glacier The methods and algorithms in this paper have all been integrated to this engine IO Interactive’s in-house game engine Used for Hitman: Codename 47 Goals: believability (stability) high speed of execution An iterative aproach: Adjustable error margin can be stopped at any time
the right combination of several techniques A so-called Verlet integration scheme. Handling collisions and penetrations by projection. A simple constraint solver using relaxation. A nice square root approximation that gives a solid speed-up. Modeling rigid bodies as particles with constraints. An optimized collision engine with the ability to calculate penetration depths.
Verlet integration(1) f=ma
Verlet integration(2) It is quite stable since the velocity is implicitly given and consequently it is harder for velocity and position to come out of sync. It works due to the fact that 2x – x* = x + (x- x*) x- x* is an approximation of the current velocity(the distance traveled last time step).
Collision and contact handling by projection Offending points are simply projected out of the obstacle.
Solving several concurrent constraints by relaxation Infinitely stiff springs! How do we do that? |x2 – x1| = 100
Solving several concurrent constraints by relaxation(2) delta = x2 – x1; deltalength = sqrt ( delta*delta); // dot product diff = (deltalength - restlenght) / deltalength ; x1 += delta * 0.5 * diff; X2 -= delta * 0.5 * diff; How do we combine this constraint with the previous cube constraint? Relaxation
Relaxation
Cloth Simulation delta = x2 – x1; deltalength = sqrt ( delta*delta); // dot product diff = (deltalength - restlenght) / deltalength ; x1 += delta * 0.5 * diff; X2 -= delta * 0.5 * diff; delta = x2-x1; deltalength = sqrt(delta*delta); diff = (deltalength-restlength)/deltalength; x1 += delta*0.5*diff; x2 -= delta*0.5*diff; Get rid of sqrt
Rigid bodies A tetrahedron: 4 particles at vertices, 6 edges which are stick constraints Put it in a cube, Verlet handles it.
Rigid bodies(2) What if the world is concave?
Rigid bodies(3) A simpler approach with sticks Assume we can detect collisions and we know the penetration depth and penetration points: A linear combination of x1 and x2 is p = c1 * x1 + c2 * x2 ; c1 + c2 = 1 We want p’ = q
Rigid bodies(4)
Rigid bodies(5) p’ ∆ = q ∆ (they are moving in the same direction)
Articulated Bodies (x2-x0) ○ (x1-x0) < α ; for reality of human body
Articulated Bodies(2) No rotation around lenght axis of limbs.