Add a pose review harness and record the blocked pose capture
Full build / Import + headless tests (push) Successful in 43s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 10:59:23 +01:00
1 parent 2d67e14e52
commit 7a5b902797
7 files changed
+358 -13

No files matched your search

+32 -8
View File
@@ -88,14 +88,15 @@ yet reviewed; this document is the place to fill it.
| Character | Silhouette | Face @1.85 m | Hands/grip | Weights/pose | Cloth/hair | LOD | Verdict |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `npc_casual` | accept (0.9.4) | P1 (faceted planes) | accept (open palm) | — | accept | accept (two-quad impostor) | pending owner |
| `npc_jacket` | accept | P1 | accept | — | accept | accept | pending owner |
| `npc_coat` | accept | P1 | accept | — | accept (hem 0.76 stride) | accept | pending owner |
| `npc_vest` | accept | P1 | accept | — | accept | accept | pending owner |
| `npc_dress` | accept; performer props dominate | P1 | accept | — | accept | accept | pending owner |
| `npc_hoodie` | accept (hooded criterion) | accept (lower face only) | accept | — | accept | accept | pending owner |
| `npc_firefighter` | accept | P1 | accept | — | accept | accept | pending owner |
| `npc_guard` | accept | P1 | accept | — | accept | accept | pending owner |
| *(pose evidence blocked: see "Pose evidence is blocked" below)* | | | | | | | |
| `npc_casual` | accept (0.9.4) | P1 (faceted planes) | accept (open palm) | blocked | accept | accept (two-quad impostor) | pending owner |
| `npc_jacket` | accept | P1 | accept | blocked | accept | accept | pending owner |
| `npc_coat` | accept | P1 | accept | blocked | accept (hem 0.76 stride) | accept | pending owner |
| `npc_vest` | accept | P1 | accept | blocked | accept | accept | pending owner |
| `npc_dress` | accept; performer props dominate | P1 | accept | blocked | accept | accept | pending owner |
| `npc_hoodie` | accept (hooded criterion) | accept (lower face only) | accept | blocked | accept | accept | pending owner |
| `npc_firefighter` | accept | P1 | accept | blocked | accept | accept | pending owner |
| `npc_guard` | accept | P1 | accept | blocked | accept | accept | pending owner |
### Gear (18)
@@ -162,6 +163,29 @@ for presence, not re-reviewed for art quality.
| The Joke Shop | 22,680 tris / 454 meshes | shape-language review pending |
| TV Studio | — | shape-language review pending |
## Pose evidence is blocked (2026-11-03)
The weights/pose column cannot be filled yet. A pose harness was added
(`src/test/capture_npc_pose.gd`, staged in `tmp/model-pose*`), and its output does not match the
state it reports:
- `_animate()` applies the seated pose (logged `rig_y=-0.339`, `leg0=-1.357`) and
`Skeleton3D.get_bone_pose_rotation()` returns the rotated quaternion at capture time, yet the
saved frame shows the rest pose.
- Ruled out: missing skeleton (one `Skeleton3D`, mesh bound to it, `same=true`), hidden mesh
(hiding `npc_base` removes the body), pose not applied (proxies and bone poses verified),
and unbound skinning: writing a single bone rotation directly (`HipL`, `KneeL`, `Spine`,
`ShoulderL`, `ElbowL`, `Head`) changes the rendered pixels, and a bone *position* offset moves
the head. A standalone probe that calls the same `_animate()` sequence renders the crouch.
- Also observed: a staged in-game `film` pose frame showed the arms down, so this may affect the
live game rather than only the harness. That is why it is a P0/P1 candidate rather than a QA
tooling nit.
Next step is a focused diagnosis: compare the harness/venue staging with the standalone probe
(SceneTree lifetime, node parents, first-frame skin bind, capture timing) and add a scene test
that asserts a posed avatar renders differently from its rest frame. Do not mark the pose/weight
scorecard row until that test exists.
## Ranked candidate gaps
Ordered by expected player-visible gain per unit of work. None is approved for fixing yet; the
+16
View File
@@ -307,6 +307,22 @@ height/head/shoulder/hip/torso/leg/arm/foot guide; the current results are in
[`npc-proportion-audit.md`](npc-proportion-audit.md). It reads the exported GLBs
and does not require Blender.
`capture_npc_pose.gd` is the pose/deformation harness for the 3D re-evaluation: idle,
walk-contact, walk-pass and seated poses of all eight variants, full-body plus shoulder
close-ups. **It is currently blocked**: the applied pose is visible in the rig and bone values
but not in the captured frames, so do not use its sheets as pose evidence. The reproduction and
what was ruled out are in [`3d-model-review.md`](3d-model-review.md) §"Pose evidence is blocked".
The baseline sheet tool accepts a custom view list, which is also how pose sheets are tiled:
```bash
# baseline set (six views, eight variants)
python3 tools/npc_baseline.py sheet --dir tmp/npc-baseline
# pose set produced by capture_npc_pose.gd
python3 tools/npc_baseline.py sheet --dir tmp/npc-pose \
--views idle,walk_contact,walk_pass,sit --out tmp/npc-pose/sheet_pose.jpg
```
`capture_npc_baseline.gd` is the 0.9.4 neutral baseline: eight characters ×
front/three-quarter/profile/back/full-body/crowd = 48 frames with a fixed
camera, studio lighting and no venue/HUD/animation. The raw PNGs stay in