A pose modifier that simulates joints with
physics: hair, cloth, tails, straps and other parts that should swing after the
motion of the character. The animation still plays on these joints. The simulation
starts from the animated pose on every frame and adds the swing.
The joints are given as groups of joint trees.
Each tree is a root joint and everything below it in the skeleton. By default the
root is pinned: it keeps its animated position. Every joint below it is a particle
that moves under gravity, is pulled back to its animated place, collides, and keeps
its distance to its parent. The
pinning data of a tree can pin more joints.
What happens on each frame, in order:
- The collision shapes are moved to the current pose.
- Each simulated joint keeps a part of its velocity (
Damping), falls under gravity,
and is pulled toward its animated position relative to its simulated parent
(AnimPoseAttraction).
- The joints are pushed out of the collision shapes, and the constraints are solved:
the lateral links, and the rod constraints of groups with
UseRodPhysics.
- Each joint is kept inside a cone around its animated direction (
LimitAngle) and
at its length from its parent (Stretch).
- The result is written to the pose. Each joint is blended between its animated and
its simulated transform by the weight of the modifier times
GlobalEnvelope times
the joint's Envelope.
The simulation runs in world space, after every other pose modifier. So the
movement and the turning of the unit swing the joints, with no setting for it. Lengths
and radii are in world units, with the scale of the skin already applied.
Collision shapes are spheres and capsules attached to joints, read from the file
named by 0xbb1d1aac, plus a ground plane. The plane is horizontal, at the height of
the lowest joint of the bind pose, and moves with the unit.
The weight of the modifier is 1 when DefaultOn is true and 0 when it is false. A
DynamicsChainBlendEventData on a clip changes
it while the event is active.