[ODE] Semi-rigid dynamics

Engin Cilasun engin at vividimage.co.uk
Fri Oct 3 01:04:26 MST 2003


Hi,

I'm thinking of storing responses to forces (offset amount) as tables, on a per-vertex basis. Each table element will contain how much that vertex was moved by the given force (forces are in object space). Combined with rigid physics of ODE, this could help one better simulate "solid-soft combined" objects such as:

- a plant in a pot (hard:plant pot as a cylinder etc, soft:plant itself)
- a human limb (hard:arm as a cylinder/syphil, soft: fingers, rest of flesh etc)
- a plastic drink bottle (hard:body as a cylinder, soft:whole bottle)
- anything with "simulation-wise ignorable" soft bits (i.e. deforming the soft bit will not effect the simulation dramatically)

Pre-compute this:
- Store "offset amount" of all vertices, for a given force vector. Force vectors (say loads of them, about 10,000) will be randomly (and evenly) generated on a bounding sphere placed around the object, pointing towards the object's origin. For each vertex, these scalars (just the offset amount, maybe normalized) will be compressed using spherical harmonics, reduced to a convenient 25 coefficient table.

At runtime do this:
- Do normal physics sim. step using rigid bodies etc.
- Use contact callbacks or other method to derive forces acting on the body, project these forces onto the bounding sphere of the object (just the perpendicular components) and "cook" one spherical harmonic coefficient table (25 floating point values again)
- Do a dot product with the coefficients of each vector to find how much they're offset. (this step is computation intensive but is really very very easy to do in a very short "vertex shader" >:))

Let me know what you think of such a method,

Engin Cilasun
engin at vividimage.co.uk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://webserver.computershop.calgary.ab.ca/pipermail/ode/attachments/20031003/07b7134c/attachment.htm


More information about the ODE mailing list