
In CG, techniques such as bump mapping, normal mapping, parallax mapping etc. are used to incorporate geometrical detail using texture-based data. Similar approaches have been adopted for physics, that essentially apply small random perturbations to collision normals to mimic imperfect surfaces.
As a motivation for this, consider a scenario where a perfect sphere is dropped on a perfectly level plane - the ball bounces over the same spot along a vertical axis. Even worse, additional spheres dropped exactly above the original one, will bounce above the ball and settle in perfect balance, resulting in a vertical stack of balls. While this behaviour concides with the physics model used, it is not a suitable representation of the real world. A ball with microscopical imperfections will bounce about on an similarly imperfect floor. In addition, any attempt of dropping a ball exactly on top of another ball results in the ball bouncing off sideways.
I have so far attempted the random normal perturbation approach. I define a surface perturbation coefficient as one of several material properties per body. Coefficients of two bodies in contact are added together (to accordingly increase the potential deviation) and the resulting value is used as a range for a uniform RNG. This in turn is used to alter the X, Y and Z components of the collision normal, followed by a renormalisation to retain the normal vector's unit-length.
This approach works fine for the contrived scenario above - the balls bounce off to one side or another to a degree dependent on the perturbation coefficient. I was also hoping however, that for rolling balls, it might also simulate random meandering on a plane, especially when a ball rolls slowly, but the effect of normal perturbation seems to have no or very little effect in this respect.
I am now considering a more sophisticated approach where the perturbation becomes a function of the contact point coordinates, much like perlin noise. This approach would have the advantage of allowing a simulation to be reproduced exactly as it does not involve random parameters. It might also give better results for balls rolling on a slightly bumpy surface as a result of the perturbation function.
What are your thoughts on these approaches?