Presentation on theme: "Advanced Character Physics"— Presentation transcript:

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.