Replace procedural boxers with rigged CC0 Barbarian model - #286
Merged
Conversation
Vendor KayKit Adventurers Barbarian.glb (CC0) and retarget-bake the project's boxing motion onto its 41-bone armature: world-delta retarget for torso/head, child-aim retarget for limbs, hips translation scaled by rest ratio. The generated fighter GLB carries all 18 combat clips at authoritative tick timing, phase-locked via combat-manifest.json. Runtime: SkinnedBoxer (SkeletonUtils.clone, per-fighter mixer, cloned materials only where appearance differs, shared geometry/texture), canonical bone adapter with missing-bone diagnostics, runtime glove meshes for corner colors, and the BoxingGraph driving layered blending, foot locking, and constrained additive IK strictly after mixer.update. Procedural animator preserved behind ?procedural=1 and as load-failure fallback. Adds /hands/model-lab: clip player with crossfade, SkeletonHelper, bone hierarchy and clip/track inventory, triangle/material/texture stats, transform controls, and warnings reporting.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
Reviewer-found: the post-mixer IK used the procedural rig's -Y bone axis while the Barbarian's children sit at +Y (limbs aimed 180 degrees off), segment lengths are now measured from the bones instead of hardcoded for the old proportions, the foot-lock threshold derives from the rig's ankle rest height, and aim/drip heights use the model's head and chest rest positions. Runtime glove meshes now sit on the fist, dispose with the fighter, and the renderer only preserves the drawing buffer in lab mode. BONE_ADAPTER has one source, model-lab clones the cached scene, and a no-op-aim regression test pins the convention.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Per player direction: replaces the hand-built procedural boxers with a real rigged model.
Asset: KayKit Adventurers Barbarian.glb — CC0 (Kay Lousberg), vendored with license in web/hands/assets-src/. Inspected: 41-bone armature, 76 in-place authored clips, T-pose, ~1.35m, faces +Z, 4,045 tris, 1 palette texture; props (axes/shield/mug/hat/cape) stripped at generation.
Pipeline: scripts/generate-fighter-glb.ts retarget-bakes our 18 combat clips onto the armature (world-delta for torso/head, child-aim for limbs, scaled hips), preserving manifest phase-locking. Canonical BONE_ADAPTER with hard diagnostics on missing bones. Embedded base64 like the previous GLB (exact 3-file manifest intact).
Runtime: SkeletonUtils.clone per fighter, one AnimationMixer each, independent materials only where appearance differs (gear gloves, clearcoat), shared geometry/texture; corrections after mixer.update only; debug markers via adapter; procedural animator behind ?procedural=1 + automatic fallback on load failure.
/hands/model-lab: play/pause/seek/loop/crossfade, SkeletonHelper, bone hierarchy print, clip durations/tracks, triangle/material/texture inventory, transform controls, warnings.
Evidence: model-lab screenshot, in-ring screenshots, zero console errors, frame timings, missing-clips list, and remaining defects are documented in docs/hands-lab-architecture.md. 1,892 Python + 145 frontend tests green; deterministic bundle; golden replay still byte-stable.