Shock Propagation

I tried the shock propagation algorithm as described in Kenny Erleben’s dissertation. It does amazing things for stacking. I was able to easily stack 20 boxes at a 30Hz time step and 5 iterations. However, it has some bad side effects.

The problem is that stacks of boxes are too stable. You could have a stack where each box has its center of mass just inside the edge of the box below it. The centerline of the stack would make almost a 30 degree angle from the vertical. Clearly such a stack should fall, but due to shock propagation, lower boxes don’t feel the weight of higher boxes. Shock propagation only provides for downward transfer of momentum, not of static forces.

Consider a suspension bridge. The normal dynamics phase will spread out the joint error among all joints. When the shock phase is added, all the error is pushed to the middle joints, resulting in a nasty gap in the bridge.

I was curious how well the commercial engines do under similar conditions. So I fired up NovodeX. It appears that NovodeX does not use shock propagation and behaves somewhat similar to my engine. I also tried Newton and it does not use shock propagation.

Still, I recommend reading Kenny’s dissertation due to the wealth of information it contains.

3 Responses to “Shock Propagation”

  1. Billy Zelsnack Says:

    I felt when I implement the shock propagation stuff (as in the rigidbodies with stacking paper) it helped more with mass ratios than stability. However, I spent a lot of time getting my physics to behave at low timesteps before that paper existed. Maybe that’s why I never noticed the increase in stability.

  2. John Krajewski Says:

    The rigidbodies with stacking paper suggests doing a few iterations of contact resolution before applying shock propagation so the objects can feel the weight, wouldn’t that solve the problem you described? I’m about to try implementing shock propogation myself and curious what to expect.

  3. Erin Catto Says:

    In my experience the shock propagation can incorrectly nullify instabilities in a slanted stack. It gets the last word in the step.

Leave a Reply