Parent epic: #554
Stretch. Do not pick up until Slices A–F land.
Goal
A radius-based envelope skinning model alongside the weight-paint approach (#558) and the AI biharmonic auto-weights (#402). Envelopes are the classic Maya/Houdini "every bone has a tubular influence; vertices inside it weight to that bone with smooth falloff" model. Cheap, predictable, and great as a starting point that the weight brush refines.
Scope
- Per-bone envelope params:
head_radius, tail_radius — inner zone where weight is 100%.
outer_radius — outer zone where weight falls off to 0 along a configurable curve.
- Falloff curve — linear / smooth / configurable Bezier.
- Compute envelope weights:
- For each vertex, compute distance to every bone's "capsule" (the swept-radius along the bone's axis).
- Weight =
1.0 inside inner, 0.0 outside outer, smoothly interpolated between.
- Normalize across all contributing bones.
- Optional "weight only to nearest N bones" cap (default 4 — game-engine constraint).
- Modes:
- Envelope-only: weights are read from envelopes, no hand-painted weights.
- Envelope + paint: envelopes provide the base; painted strokes (Slice D) override locally. "Reset to envelope" button resets a stroke region.
- Visualization: render the inner + outer capsules as translucent overlays in the viewport when envelopes are enabled.
- Compare with:
- Operations:
- "Auto-fit envelope to mesh" — for each bone, compute the envelope radii from the local mesh diameter around the bone.
- "Apply envelopes to weights" — bake the envelope-computed weights into the actual
VertexBoneAssignments (after which the user can switch off envelope mode and continue with weight paint).
Acceptance Criteria
Effort
~9 days.
Parent epic: #554
Stretch. Do not pick up until Slices A–F land.
Goal
A radius-based envelope skinning model alongside the weight-paint approach (#558) and the AI biharmonic auto-weights (#402). Envelopes are the classic Maya/Houdini "every bone has a tubular influence; vertices inside it weight to that bone with smooth falloff" model. Cheap, predictable, and great as a starting point that the weight brush refines.
Scope
head_radius,tail_radius— inner zone where weight is 100%.outer_radius— outer zone where weight falls off to 0 along a configurable curve.1.0inside inner,0.0outside outer, smoothly interpolated between.VertexBoneAssignments (after which the user can switch off envelope mode and continue with weight paint).Acceptance Criteria
scene.skel.envelope.*.Effort
~9 days.