Detailed physics effects

Add comment!

May 26th, 2009

Physics libraries like ODE help simulate large-scale rigid body interactions, but they are only a small part of a complete game physics system. For detailed physics effects, it is usually more efficient to write unique subsystems. This is because all physics engines are necessarily based on vastly simplified model of reality, using assumptions known to be false. By writing new sub-systems, we can use different sets of assumptions for different situations, and achieve more realistic results with less computation. For example, check out this destroyable wall I created while working on a cover-based shooter (using simple cube chunks for clarity, instead of real jagged wall chunks).

This works by treating the wall as a 2-dimensional grid that propagates stress fractures in a manner resembling a cellular automaton. Each particle that breaks off is then treated as a Newtonian particle, with random spin and bounce vectors to simulate rigid body physics. This ran smoothly and was easy to implement -- it would be difficult and inefficient to create a general-purpose physics engine that supported the same kind of destruction. Here is another fast special-case glass-shattering effect I wrote for a robot combat game:

Glass

In Lugaru, I used many special-case effects to try and make materials more believable. Blood dripped down characters' bodies from cuts. Trees shook from impacts and dropped leaves. Bodies falling on snow left imprints. Here is a picture of Turner after blocking a claw swipe with his face, showcasing the blood physics.

Lugaru blood

For Overgrowth, I would like to continue to focus on special physics effects, leaving our general rigid body solver to handle ragdolls, weapons and other large objects. Can you think of any physics effects we can work on that are often neglected in games? Some ideas we are considering include dripping blood, weapon and armor damage, and air turbulence.