public static class VariationHarnessPlays an interaction across a range of bodies, props and ground, and measures it.
Remarks
The single highest-value tool in doc 34, and the answer to its first risk. The honest cost of constraints is marking up a library of clips, and what makes that cost bearable is not authoring faster but knowing when to stop.
Four measurements, because four different things go wrong: a goal misses (Residual), a contact sinks into what it was supposed to rest on (Penetration), a hand snaps between two frames (Jerk), and a limb runs out of arm (Reached).
⚠ "Joint limits hit" is Reached and they are not the same thing. The plan asks for joint limits; no skeleton in this engine carries any, which DefaultConstraintArbiter already says. What can be measured is whether the chain was fully extended while the goal was still missing — a straight arm reaching for something out of range — which is the failure a limit would have caught in the cases that matter here. Reporting it under the name it actually has beats reporting a limit check that does not exist.
⚠ Nothing here touches a graphics device, a window or the ECS, so a CI machine runs it exactly as an editor does. That is not a happy accident: it is why the measurements are taken from LastResiduals and the pose rather than from anything rendered.
Methods (2)
public static VariationReport Run(HarnessPlan plan)Runs the whole matrix.
public static HarnessSubject Rebuild(HarnessPlan plan, HarnessCase row)The configuration one row of a report was, rebuilt.
Used by (6)
- HarnessTestsVixen.Animation.Tests
- JointLimitTestsVixen.Animation.Tests
- PlaybackVixen.Animation
- HarnessDocumentVixen.Editor.AssetEditors
- HarnessViewTestsVixen.Editor.AssetEditors.Tests
- VariationHarnessViewVixen.Editor.AssetEditors