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:
@@ -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.
|
||||
|
||||
@@ -422,3 +422,18 @@ longer earns inline space). Verbatim:
|
||||
The inline Rukhanka section keeps the pointer (`AnimatedLitShader` lives in `_Project/Shaders/`, GUID-preserved
|
||||
from the deleted samples tree) so the deformation-material rule is still self-contained. Full rationale:
|
||||
[[DR-022_Animation_Pipeline_Rukhanka_Synty]].
|
||||
|
||||
## 2026-07-06 — condensation (pays the Humanoid-pipeline correction in Animation)
|
||||
|
||||
### Aim controls (verbatim from CLAUDE.md)
|
||||
- **Client-derived aim rides the EXISTING `PlayerInput.Aim` `[GhostField]`** (`PlayerInputGatherSystem`, managed, `GhostInputSystemGroup`: cursor ray → `AimMath.PlanarAimFromRay`); only the direction crosses the wire. Scheme = last-meaningful-actuation-wins **`byte`** (`PlayerInput.Scheme`, KBM=0/Gamepad=1 — compared in Bursted `AbilityFireSystem`); server gates `AutoTarget` to gamepad only. `AimReticleSystem` (client, observe-only) RE-raycasts the KBM ground point INSIDE itself (runs after the follow-cam LateUpdate → latching from the gather drifts a frame); hardware cursor hidden while aiming+focused.
|
||||
|
||||
### URP asset-version + VolumeProfile persistence (verbatim from CLAUDE.md)
|
||||
- **`VolumeProfile.Add<T>()` does NOT persist** (serializes `{fileID:0}`) — use `AssetDatabase.AddObjectToAsset(comp, profile)` + `SaveAssets`, verify on disk.
|
||||
- **A reverted engine/URP upgrade can stamp `URPGlobalSettings.asset` `m_AssetVersion` AHEAD of the package's `k_LastVersion`** (11>10, from the reverted 6.6 alpha); URP migrates forward-only so `URPPreprocessBuild` rejects it (*"not at last version"*) — **blocks player builds, not editor Play**. Fix: reflection-set `m_AssetVersion` back to `k_LastVersion` + `SaveAssets`.
|
||||
|
||||
### BefourStudios HDRP conversion (verbatim from CLAUDE.md)
|
||||
- BefourStudios art is **HDRP-authored** → magenta under URP 17.4 + Entities Graphics. **Convert, don't switch pipelines** (HDRP breaks EG): re-author to stock URP/Lit via `EnvArtTools.cs` (menu `ProjectM/Art/1. Convert Curated Env Materials`). Synty art is **URP-native — no conversion**.
|
||||
|
||||
### Synty HUD skin / HudTheme (verbatim from CLAUDE.md)
|
||||
- **Synty HUD skin via a build-safe `HudTheme` ★ (DR-024):** a runtime name-string `Resources.Load` of Synty sprites is **build-stripped** → use a curated `HudTheme : ScriptableObject` of serialized refs (`HudTheme.Get()` null-safe, flat fallback). `unityBackgroundImageTintColor` MULTIPLIES; don't set `unitySlice*` on 9-slice sprites (per-element ERROR); Synty sprites may import as **Multiple** → `LoadAssetAtPath<Sprite>` null. See [[DR-024_HUD_Synty_Skin_Theme]].
|
||||
|
||||
Reference in New Issue
Block a user