Parent epic: #397 ## Goal Compute high-quality skinning weights for a mesh + skeleton using **libigl**'s bounded biharmonic weights — no ML, header-only C++. ## Scope - Add libigl as a header-only dep (only the subset we need: `igl::bbw`, `igl::boundary_conditions`). - CLI: `qtmesh skin model.fbx --algo biharmonic -o skinned.fbx`. - GUI: Animation Mode action "Compute skin weights" when an entity has a skeleton but missing/poor weights. - MCP: `compute_skin_weights` tool. - Pair with the auto-rigger task (#397 Tier 3) — biharmonic weights are the natural completion step after Pinocchio places the skeleton. - Preview: re-render the entity with new weights and a default test pose. ## Acceptance Criteria - [ ] A static mesh + a manually placed skeleton produces deformable skinning that follows bone rotations smoothly. - [ ] Weights sum to 1.0 per vertex and are non-negative. - [ ] Works for at least the standard humanoid skeleton from the test suite. - [ ] Unit test on a simple mesh+skeleton fixture. - [ ] Sentry breadcrumb `ai.assist.skin_weights` recorded. ## Effort ~5 days.
Parent epic: #397
Goal
Compute high-quality skinning weights for a mesh + skeleton using libigl's bounded biharmonic weights — no ML, header-only C++.
Scope
igl::bbw,igl::boundary_conditions).qtmesh skin model.fbx --algo biharmonic -o skinned.fbx.compute_skin_weightstool.Acceptance Criteria
ai.assist.skin_weightsrecorded.Effort
~5 days.