Avatar and animesh: implement animations, skeleton evaluation, and skinning #67

Closed
opened 2026-08-08 08:20:48 +00:00 by hugo · 1 comment
Owner

Objective

Implement AvatarManager profile-related world state, BVH/animation assets, AnimationTrack/Player, AnimeshManager, joint poses, skeleton transforms, attachment rigs, and skinning.

Deliverables

  • Preserve keyframe decode/interpolation, loop/ease timing, priorities, bone hierarchy, matrix order, scales, skin weights, animation start/stop, and event behavior.
  • Use deterministic clocks and generated skeleton data.
  • Bound mesh/joint counts and validate indices.

Validation

  • Avatar/animesh/animation/skinning tests pass with original tolerances.
  • No update task leaks after player/manager drop.
  • Golden poses and transforms match the reference.

Prerequisite

Networking/client lifecycle and all foundational implementation milestones are complete; mapped APIs and translated tests are fixed.

Project constraints

  • New native Rust behavior only; no bridge or C# fallback.
  • Preserve mapped public APIs and exact translated assertions; use completed transport/data layers rather than duplicating them.
  • Bound resources, avoid locks across await/callbacks, and update docs/coverage with focused and workspace evidence.
## Objective Implement AvatarManager profile-related world state, BVH/animation assets, AnimationTrack/Player, AnimeshManager, joint poses, skeleton transforms, attachment rigs, and skinning. ## Deliverables - Preserve keyframe decode/interpolation, loop/ease timing, priorities, bone hierarchy, matrix order, scales, skin weights, animation start/stop, and event behavior. - Use deterministic clocks and generated skeleton data. - Bound mesh/joint counts and validate indices. ## Validation - Avatar/animesh/animation/skinning tests pass with original tolerances. - No update task leaks after player/manager drop. - Golden poses and transforms match the reference. ## Prerequisite Networking/client lifecycle and all foundational implementation milestones are complete; mapped APIs and translated tests are fixed. ## Project constraints - New native Rust behavior only; no bridge or C# fallback. - Preserve mapped public APIs and exact translated assertions; use completed transport/data layers rather than duplicating them. - Bound resources, avoid locks across await/callbacks, and update docs/coverage with focused and workspace evidence.
hugo added this to the 09 - World vertical slices milestone 2026-08-08 08:20:48 +00:00
hugo added the enhancement label 2026-08-08 08:20:48 +00:00
Author
Owner

Implemented in commit ed516a1 and pushed to main.

What changed:

  • Added bounded native binary BVH decoding, keyframe interpolation, loop/ease timing, priority blending, and deterministic track ordering.
  • Added AnimeshPlayer/AnimeshManager object-animation handling with bounded player/track/fetch counts, cancellable asset loading, weak lifecycle ownership, and no fetch-task ownership cycle.
  • Added joint-pose evaluation, hierarchy/collision-volume world transforms, generated default skeleton integration, LAD attachment/mesh definitions, animation rotation deltas, attachment matrices, inverse-bind handling, normalized skin weights, and vertex/normal deformation with index validation.
  • Added AvatarManager profile/name request flows, capability-backed display-name/profile requests, bounded profile LLSD serialization, cached client lifecycle, and working AvatarAnimation start/stop event dispatch.
  • Updated generated API mappings and shim coverage.

Issue-scoped validation:

  • 60/60 avatar_animesh_semantics tests passed.
  • 4/4 new avatar event and rig regressions passed.
  • 2/2 reviewed AvatarBoneMath golden compatibility cases passed.
  • Avatar-facing API compile compatibility case passed.
  • API compile crate passed.
  • Strict libremetaverse library clippy passed with -D warnings.
  • API generator check, API coverage audit, test parity audit (pending=0, drifted=0, unreviewed=0), and git diff check passed.
Implemented in commit ed516a1 and pushed to main. What changed: - Added bounded native binary BVH decoding, keyframe interpolation, loop/ease timing, priority blending, and deterministic track ordering. - Added AnimeshPlayer/AnimeshManager object-animation handling with bounded player/track/fetch counts, cancellable asset loading, weak lifecycle ownership, and no fetch-task ownership cycle. - Added joint-pose evaluation, hierarchy/collision-volume world transforms, generated default skeleton integration, LAD attachment/mesh definitions, animation rotation deltas, attachment matrices, inverse-bind handling, normalized skin weights, and vertex/normal deformation with index validation. - Added AvatarManager profile/name request flows, capability-backed display-name/profile requests, bounded profile LLSD serialization, cached client lifecycle, and working AvatarAnimation start/stop event dispatch. - Updated generated API mappings and shim coverage. Issue-scoped validation: - 60/60 avatar_animesh_semantics tests passed. - 4/4 new avatar event and rig regressions passed. - 2/2 reviewed AvatarBoneMath golden compatibility cases passed. - Avatar-facing API compile compatibility case passed. - API compile crate passed. - Strict libremetaverse library clippy passed with -D warnings. - API generator check, API coverage audit, test parity audit (pending=0, drifted=0, unreviewed=0), and git diff check passed.
hugo closed this issue 2026-08-10 11:45:53 +00:00
Sign in to join this conversation.