| I am still defining this part. It seems to be a powerful, scalable way to define animation that lets all the minutiae take care of itself. It still needs a lot of work, so don't be too concerned at its unfinished state. |
By varying field gradient and sign, whether it is positioned in the agent or another object, and what it couples to, it should be possible to represent most phenomena.
A force with a negative sign attracts.
A force with a positive sign repels.
This translates nicely this into actual physics:
To simulate magnetic and electric fields, the agent has a positive or negative field (not force) that interacts with an object's positive or negative field. Two positives make a positive (repulsive) force as do two negatives. A positive and a negative make a negative (attractive) force.
Just as fields involved in inertia shouldn't interact with magnetic or electric fields there is not just one kind of field. It greatly simplifies calculations if there are many, many different fields, each affecting only one or a few other objects with matching field types.
To avoid confusion an object is called an agent when it is being animated by a force. To simplify matters it is useful to consider only one agent acted upon by a force at any time (even though there may be many other things going on at once). This would mean that forces are not symmetrical -- they work only upon the agent (for another object to move it must also be an agent). Is this a bad simplification? Forces are symmetrical in nature. For purely physical forces symmetry can be modeled easily by making both objects agents. But when modeling things like intention, for instance an agent maintaining distance from a wall in a maze, I can't see any use in making the force symmetrical.
To see how forces work, here are some examples:
How do you couple to the agent's acceleration?
Ball
mass=100
force
field x=y=z=-mass,
at center,
affect delta // what is acceleration (delta)?
How do you couple the relative speed of the object to the agent? The final affect values must be relative to the floor somehow, to let the ball roll.
Floor //some way of expressing the floor's friction component must be given too
Block
force
field x=z=-1/((d+0.99)*50)
at Floor.y=0
affect x z
Floor
Ball
force
field y=1/((d+0.99)*50)
at Floor.y=0
affect y
In the short term I need to define animation (including the intentional aspects) as if it is pure physics. In the future it should be possible to let agents have intelligence and genuine intent, but I don't have time just yet. Applying these kinds of purely physical models to animating all agents must be a short term solution. It will continue to suit such things as balls, kites, etc, but other AI solutions will be more useful for animating living creatures eventually.
In the mean time animating humans can be done this way:
It would be necessary to cascade entire hierarchies of these forces acting on systems. In order to walk to a door the humanoid needs to get up and repeat a complex set of walking movements, going around obstacles along the way.
Maintained by Miriam English