Docs: Blender clip pipeline in session log; CLAUDE.md Humanoid correction (net-zero)

The 'Synty share one Generic skeleton' note was WRONG - the pipeline is
HUMANOID (CharactersAvatar isHuman, muscle-curve clips). Corrected + the
Blender clip recipe added; paid for by archiving Aim-controls, the URP
m_AssetVersion blocker, VolumeProfile persistence, HDRP-convert and the
HudTheme bullets (verbatim in the gotchas archive, 2026-07-06 section).
39,959 bytes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 20:49:28 -07:00
parent b7db292987
commit 7350e4dd63
3 changed files with 44 additions and 13 deletions
@@ -85,11 +85,28 @@ stale copy interpolates `Tuning.StartingOre`; expedition ground receded via proj
fleet died mid-run ([[workflow-agent-quota-failures-look-clean]]) — salvaged the completed verdicts from
`journal.jsonl` and hand-synthesized; the folded design is in [[Iteration_2026-07_CoopHades]].
## Blender-authored animation clips — BUILT + Play-validated (same session, operator: "you blender author, do it fully")
**The pipeline is HUMANOID, not Generic**`CharactersAvatar.isHuman=true`, clips are muscle curves (CLAUDE.md
corrected; muscle retargeting plays one clip on the player AND every monster rig). Four clips authored
programmatically in Blender on `PolygonSyntyCharacter.fbx` (full-body keys per pose; world-space hip-drop helper —
the armature object carries a 90° X FBX rotation, so naive "down" goes backward; poses verified by EEVEE renders +
numeric bone world positions): **A_Death_FallBack** (0.90 s = exactly the 54-tick corpse window; recoil → fall →
flat-on-back → settle), **A_Fire_OneHand**, **A_Dash_Lean**, **A_HitReact**. Export: per-action FBX, Key All Bones +
Force Start/End + FBX Units Scale. Import: `CreateFromThisModel` (**CopyFromOther FAILS on Blender's extra `Armature`
node** — "Transform 'Armature' not found in HumanDescription"); all root motion baked into pose. Wiring: Death state
motion swapped on BOTH controllers (was a crouch idle); player gains `IsFiring`+Fire and `IsDashing`+Dash states
(AnimatorController API); `PlayerAnimationDriveSystem` routes `FireActive` to IsFiring (melee owns IsAttacking
again) + derives IsDashing from the local predicted `DashState` window (not replicated → remotes skip the lean).
A_HitReact imported, wiring deferred (needs a hit-tick source). **Play-validated**: forced `IsDead` (via the Rukhanka
parameter-hash buffer write, driver disabled) renders the soldier flat on the ground in-game — the
Blender→FBX→Humanoid→Rukhanka chain proven end-to-end. 456/456.
## Next session
Phase 1 leftovers: real death/fire/dash clips (needs the Synty Sword/Bow Combat animation packs — operator decision
to buy, or Blender-author on the shared Generic skeleton), creature locomotion for monsters (PolygonDog re-rig for the
Swarmer is inventoried), remaining clarity swaps (distinct spit/pickup/harvest meshes, weapon meshes, projectile point
lights), knob rows for the new tunables in the overlay UI. Then the **Phase 1 gate: one honest solo campaign to
Victory + a LAN lap**. Phase 2 (hub-ification) requires the adversarial design review before code. Blender workstream
(portal gate ring, hub crystal, boss kitbash, decals) can start any time.
Phase 1 leftovers: HitReact wiring, creature locomotion for monsters (PolygonDog re-rig for the Swarmer is
inventoried), remaining clarity swaps (distinct spit/pickup/harvest meshes, weapon meshes, projectile point lights),
knob rows for the new tunables in the overlay UI. Then the **Phase 1 gate: one honest solo campaign to Victory + a
LAN lap** (now also gating: death-fall feel, fire thrust, dash lean, corpse-window timing). Phase 2 (hub-ification)
requires the adversarial design review before code. Blender hero-prop workstream (portal gate ring, hub crystal, boss
kitbash, decals) is next in the art track — the clip pipeline is proven.