Citation: Michael Girard, A. A. Maciejewski, "Computational Modeling for the Computer Animation of Legged Figures," Computer Graphics 19(3):263–270, SIGGRAPH '85 (ACM DOI 10.1145/325334.325244). Girard later led the biped component of the 1996 character plugin whose file format pipeline_max decodes (see pipeline_max_design.md §10), so this paper is the closest thing to a published spec of that system's design intent. A full transcription of the paper was prepared during the 2026-07-08 IK session and lives in the session record; this page is the working digest — the model structure in our own terms, mapped onto the decoded format. Equation numbers below refer to the paper.
Limb control. Denavit-Hartenberg joint chains; per-frame linearization Δx = J(θ)·Δθ (eq 1) with the Jacobian built from the display transforms (eq 3); joint updates via the Moore-Penrose pseudoinverse (least-squares minimum-norm, eqs 4–5). Redundant DOF are resolved in the null space (eq 6): Δθ = J⁺Δx + (I − J⁺J)·∇H with H = Σ αᵢ(θᵢ − θ_cᵢ)² — per-joint center angles θ_c with gains αᵢ acting as springs pulling the redundant DOF toward an animator-chosen posture while the end-effector constraint is met exactly.
Foot paths under IK. The transfer (swing) trajectory is a Catmull-Rom spline through Cartesian foot key positions; the foot travels exactly along the spline and the joint angles are derived from it. This is stated as the explicit design departure from joint-space keyframing.
The plant constraint (eq 10). A supporting foot is held by solving, each frame, for the foot position in the moving hip frame that equals the previous frame's foot position in world space. Pinning is a per-frame world-space re-expression, not a stored curve.
Gait / timing model. Relative phase per leg, duty factor, supportDuration = stroke / bodySpeed (eq 7), P = supportDuration + transferDuration (eq 8), leg state as a phase clock (eq 9).
Foothold planning (eq 11). Footholds are chosen so the leg reaches its reference leg position (the "standing" posture) exactly at mid-stance, using the predicted future body transform at t + transferDuration + 0.5·supportDuration. The generic swing trajectory is then warped between liftoff point and planned foothold "so that the height in the world and proportional distance moved next to the body are preserved."
Vertical dynamics (eqs 12–13). Each supporting leg applies a constant upward force during support: a_y = F/m − g; airborne time follows transferDuration = (a_y/g)·supportDuration; push/fall/restore phases are symmetric about mid-stance so each leg's contribution stabilizes itself. The body's vertical motion is the superposition of per-leg ballistic contributions — walking oscillation and running flight both fall out of the same rule as gait phase and force magnitude vary.
Horizontal dynamics (eqs 14–15). Desired path = animator spline; desired acceleration = velocity-error feedback, clamped by Σ F_maxᵢ/m over the feet currently on the ground.
Yaw dynamics. Per-leg push/restore angular accelerations bring the body to the desired heading exactly at each mid-stance; the acceleration is the heading change over one gait period divided by pushDuration·(pushDuration + fallDuration). (Transcription caveat: the numerator subscript reads as "σ at mid-stance one period later" — the physically sensible reading for a phase-locked controller, and dimensionally consistent.)
| PODA concept | Decoded counterpart | Status |
|---|---|---|
| Eq 10 world re-expression plant | §10r pivot constraint: planted keys pin pA in world (Object space, [11]=2); ankle = W(t) − R·pLocal |
The §10r model is the descendant with the pivot generalized from "foot point" to selectable heel/ball/toe pivots |
| Catmull-Rom foot spline through Cartesian keys | §10r W-spline: TCB vec3 through per-key pivot positions — TCB at default params (t=c=b=0) IS Catmull-Rom | Lineage exact; the shipping system exposed the TCB params PODA fixed |
| Center angles + gains null-space resolution (eq 6) | Candidate model for what the 2-bone solve sidesteps: the hip-swivel/knee-plane choice on 3-link legs, and the whole redundancy resolution on 4-link legs (mount/bird rigs) | OPEN — see experiment (6) below; possibly related to the undecoded per-limb tables 0x01f4..0x01fc or the "ballistic tension" record field [1] |
| Per-leg constant-force ballistic superposition (eqs 12–13) | gravAccel record (0x00ca), Dynamics Blend on the vertical COM track, and the §10d-bis "footstep-driven vertical" class — mort_idle's unexplained constant 1.3272 is a dynamics OUTPUT of exactly this kind | OPEN — see experiment (7) below |
| Mid-stance reference leg position foothold planning (eq 11) | Footstep gizmo semantics; footstep keys re-keyed into standard tracks (0x0102 sub-anim table, §10d-bis round 3) | Consistent; not needed for export replication (footsteps arrive pre-baked) |
| Gait phase clock (eq 9) | Not stored — the exported files carry resolved keys only | Informational |
(6) Redundancy resolution via center angles. For the 4-link-leg class (nage_*_monture etc., §10p E3) and any residual solve-level mismatch on 3-link legs: implement the eq-6 null-space attraction (center angles = the figure-mode/reference pose angles, per-joint gains) instead of the current knee-plane preservation, and A/B. Probe first whether the per-limb tables 0x01f4..0x01fd or limb record field [1] ("ballistic tension") move when the reference pose changes — a --diff-rig single-variable probe in gen_biped_fields_probe.ms style.
(7) Keyless-vertical as ballistic superposition. Re-open the mort_idle 1.3272 constant with eqs 12–13: reconstruct candidate per-leg support windows from the leg keytracks, take gravAccel from 0x00ca, and check whether a constant-force ballistic superposition (stabilized about mid-stance) reproduces the reference vertical. Even a one-file closure would confirm the dynamics pathway and unlock the ship_tank class properly instead of by-constant.
(8) In-plant foot rotation, PODA lens. PODA holds the whole foot frame by eq 10 (position AND orientation re-expressed per frame) — pure world-hold. The shipping system's observed in-plant rotation (§10r open item (a)) passes outside its keys' geodesic, which eq 10 world-holding would produce naturally when keys are sampled FROM a world-held solve. Test: on coup_fort's plant, compare the reference foot rotation against a per-frame world-hold that resets to the stored key at each key time (piecewise world-hold with key snaps) — a candidate not yet in the rejected list, and cheap to evaluate against the existing ikpath reconstruction.