public sealed class DefaultConstraintArbiterThe shipped arbiter: one weighted pass, stated with its limits.
No guide page documents this yet — the page shows what the code says about itself.
Remarks
What it does. Goals are grouped by the chain they move. Within a group, per kind, the absolute goals are averaged by weight and the additive ones are summed and applied on top — averaging two recoils would make them weaker than one, which is the opposite of what additive means. Kinds are satisfied position → orientation → aim, each within the freedom the previous left. Every goal reports a residual.
How priority works. A multiplier and a tie-break, not a hard ordering: the highest priority present takes its share of the chain first, and the rest is what is left over. A full-weight high-priority goal therefore wins outright, and a half-weight one leaves half the chain to everybody else — which is continuous, so a priority that fades in does not cause a jump.
⚠ What it is not, stated plainly because an author will hit all three. It does not guarantee that a high-priority goal is satisfied exactly when a low-priority one conflicts; it does not distribute error up the hierarchy towards the root; and it does not resolve cyclic goals — two hands each targeting the other — other than by the damping that falls out of solving them in a fixed order. Those need a staged solve, which is a much larger piece of work with a much larger authoring surface, and which is what IConstraintArbiter is for.
⚠ There are no joint limits to clamp against yet. The plan's rule says to clamp, and the only limit the engine currently has is TwoBoneIk's refusal to stretch a bone. A skeleton that carried per-joint ranges would be clamped here; none does, and pretending otherwise in a doc comment would be worse than saying so.
Stateless, and therefore safe to share across the animators the system evaluates in parallel. Everything it accumulates is a local.
Fields and properties (1)
public static DefaultConstraintArbiter SharedThe one every stack uses unless it is given another.
Methods (1)
public void Solve(in ConstraintSolveContext context, Span<BoneTransform> pose)Decides what every chain does, and does it.
Used by (3)
- ConstraintStackVixen.Animation
- ConstraintTestsVixen.Animation.Tests
- RigidBodySolverVixen.Animation