Docs: suit pose shipped (07-22) — session log + roadmap A0 update; Blender pose-bake gotchas

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 18:44:58 -07:00
parent eaff8d16e3
commit 5e0044b492
2 changed files with 26 additions and 4 deletions
@@ -178,9 +178,11 @@ Runs parallel with 46 where possible.
> lamp emissive tamed + bloom threshold raised (killed a blown chest streak), Drowner faced-to-camera + accents
> boosted, triad recomposed (crate in-pool / Drowner at the lit edge / suit center). Grayscale now shows the
> beacon as the value winner + a mid-value warm territory — the three-way mechanical judge PASSES.
> **Still open for sign-off: the suit POSE (a Blender rig+pose sitting — the body is an unrigged Synty mesh +
> 37 welded attachments; aligns with the A3 Wick-sculpt work) + the eyes-on-only criteria (flicker-cadence,
> the "this game and no other game" call).** See [[2026-07-21_ArtStaging_A0_Value_Pass_J]].
> **07-22 update — the suit POSE is now done** (the `.blend` was already rigged; the T-pose was a missing
> Armature-modifier on the base body — fixed, posed a grounded stance, baked static, reimported into ArtStaging;
> width 2.05→1.04 m, silhouette reads top-down). **Still open for A0 sign-off: only the eyes-on-only criteria —
> flicker-cadence (steady beacon vs guttering flora) and the binding "this game and no other game" call.** See
> [[2026-07-21_ArtStaging_A0_Value_Pass_J]].
## A1 — Pipeline proof (runs alongside Phase 1)
@@ -26,7 +26,27 @@ T-posed. Four of five fixes were staging (headless); the fifth (pose) is a Blend
player" line never ran → an empty 5-slot bar polluted the frame. Fix: root defaults `DisplayStyle.None` at
build, flips to Flex only when a local player is found — also kills any pre-connect/menu flash in gameplay.
## NOT done — the suit pose (operator-gated Blender sitting)
## UPDATE (07-22) — the suit pose IS now done
Operator greenlit ("go ahead and do the next fixes"), so the pose shipped via `/art-dev`. The suit `.blend`
turned out to be **already rigged** to the Synty humanoid skeleton — the Unity static-T-pose was because the base
body/armour/head carried vertex groups with **no Armature modifier** (only the kit attachments had them), and 2
lamp parts were unweighted. Rig cleanup (added the modifiers; weighted ChestLamp/LampRim to Spine_03), posed a
grounded combat-ready stance (shoulders down ~63°, elbows braced forward ~22° — axis found by a 2-probe render
loop since the Synty bone rolls are non-standard: local Z = the swing, negative = down), baked the pose to static
geometry and re-exported. **Master `.blend` keeps the rig+pose re-editable**; the GLB overwrite flowed into the
connected ArtStaging prefab instance (38 parts intact, materials + the extracted staging emissive preserved).
Suit width 2.05 m (T-pose) → 1.04 m (posed). Verified from the front + top-down game camera + in the composed
ArtStaging scene (full/200px/grayscale) — reads as a heavy standing diver. Commit `eaff8d16e`.
**Blender gotchas banked (07-22):** (1) glTF `export_apply=True` does NOT bake an armature POSE — the exporter
special-cases armature modifiers as skinning and writes bind pose; to bake a pose to static, apply the deform
first (depsgraph `new_from_object(evaluated)` → assign `o.data` → clear modifiers), THEN export. (2) blendermcp's
headless context makes `bpy.ops.export_scene.gltf` throw `Context has no attribute active_object` and
`modifier_apply.poll() failed` — wrap ops in `bpy.context.temp_override(window, area(VIEW_3D), region,
active_object, object, selected_objects)`, or avoid the operators entirely (depsgraph bake). → cookbook.
## (superseded) the pose was deferred at first — kept for the record
The staging suit is one combined Synty body mesh (`SM_Chr_SpaceSoldier_Male_01`) welded with 37 static kit
attachments, **no rig** in the exported asset (Unity: SMR=0, no Animator). Posing the T-pose requires a Blender