Re-prioritize: Rig harness -> MakeHuman -> 3D re-eval -> 0.11.0; move character development to DONE
This commit is contained in:
1 parent
09d07452af
commit
75dea2e7c2
3 files changed
+202
-139
No files matched your search
@@ -3,14 +3,62 @@
|
||||
Work is grouped by theme. Each item should be small enough to complete and verify on its own;
|
||||
see `AGENTS.md` for the workflow and `MEMORY.md` for the decisions behind these plans.
|
||||
|
||||
**Priority order:** 3D model and local map re-evaluation → character development →
|
||||
versioned release milestones (0.10.0) → future/deferred work. See `AGENTS.md` §Priority and
|
||||
Versioning and §Local Blender skills.
|
||||
**Priority order (2026-11-04, owner):** 1) fix the `Rig` pose harness (unblocks pose/weight
|
||||
and portrait evidence), 2) the MakeHuman character pipeline (more realistic bodies than the
|
||||
procedural generator), 3) re-evaluate the 3D models against the new characters, 4) push the
|
||||
**0.11.0** minor release. See `AGENTS.md` §Priority and Versioning and §Local Blender skills.
|
||||
|
||||
The MIT Blender skill pack lives locally at `.agents/skills/blender-skills/` (gitignored). Every
|
||||
3D workstream below names the skills to load; they are guidance only, and the project contract,
|
||||
`blender_assets.py audit`/`fit`/`inspect` and the capture gates stay authoritative.
|
||||
|
||||
## Fix the Rig pose harness
|
||||
|
||||
Goal: `src/test/capture_npc_pose.gd` reports a pose but saves rest frames; the root cause is
|
||||
narrowed to the skinned mesh ignoring its `Rig` parent transform. Fixing it unblocks the
|
||||
weights/pose column of the 3D review and the pose/portrait evidence for the MakeHuman intake.
|
||||
|
||||
*Skill route: `rigging`; evidence in `docs/3d-model-review.md` §"Pose evidence is blocked".*
|
||||
|
||||
- [ ] Answer why the skinned mesh ignores its `Rig` Node3D transform. Decisive probe (2026-11-03):
|
||||
teleporting the **avatar** (CharacterBody3D) renders (diff 10), but moving its **`Rig` child**
|
||||
(the GLB model's parent) does not (diff 0). Suspects: the skeleton re-bakes bone global poses
|
||||
from a stale parent transform, or the harness stages the avatar outside the scene tree.
|
||||
- [ ] Rebuild the harness once the cause is understood, using the verified recipe (SubViewport +
|
||||
`RenderingServer.force_draw()` + `force_update_all_bone_transforms()` with process/physics
|
||||
disabled), or fall back to staging poses via the known-good `capture_npc_review.gd`.
|
||||
- [ ] Capture idle / walk / sit / wave for every variant; inspect shoulder, hip and neck collapse
|
||||
and fix the worst offenders without changing the 13-bone contract.
|
||||
|
||||
## MakeHuman character pipeline
|
||||
|
||||
Goal: replace the procedural body generator with the CC0 MakeHuman base for the next character
|
||||
pass — retopologised, rigged and dressed in project-owned clothing — so bodies read more
|
||||
realistic than the current primitive shapes. This promotes the deferred MakeHuman evaluation to
|
||||
an active track; ADR-0015 (CC0 / CC-BY with attribution) still governs every intake.
|
||||
|
||||
*Skill route: `retopology`, `rigging`, `uv-workflow`, `materials`, `character-artist`,
|
||||
`asset-optimization`, `godot-export`, `qa-review`.*
|
||||
|
||||
### Intake and adaptation
|
||||
|
||||
- [ ] Add an `adapt` path in `tools/blender_assets.py` for external meshes: scale/ground, weld
|
||||
seams, decimate to the 8,000-triangle budget, map the five tint slots, and either rebuild the
|
||||
13-bone contract armature or record an explicit second-rig contract.
|
||||
- [ ] Keep `blender_assets.py audit` as the single final gate; add a regression test for the intake
|
||||
report/adaptation using a deterministic synthetic or licence-cleared fixture.
|
||||
- [ ] Document the adapter commands and go/no-go checks in `docs/asset-tooling.md`.
|
||||
|
||||
### MPFB / MakeHuman body pipeline
|
||||
|
||||
- [ ] Prototype the local MPFB/MakeHuman pipeline outside the repo (retopology, custom rig,
|
||||
project-owned clothing) and commit only the final CC0-derived assets with provenance.
|
||||
- [ ] Decide the rig strategy: retarget the MakeHuman mesh to the frozen 13-bone `npc_base`
|
||||
contract (needs a proportion warp, like the Quaternius no-go), or add a second rig/animation
|
||||
path behind its own ADR.
|
||||
- [ ] Re-run `inspect`/`audit`/`fit`/proportions and the 24-NPC budget after each intake; keep the
|
||||
procedural generator as the fallback until a MakeHuman variant ships.
|
||||
|
||||
## 3D model and local map re-evaluation
|
||||
|
||||
Goal: re-judge every shipped 3D asset against the newly available Blender skill guidance, rank
|
||||
@@ -25,7 +73,8 @@ the 0.10.0 release candidate.
|
||||
rebuilds and the face/foliage prototypes) stay **blocked** until the full local map rebuild
|
||||
(H–M) is done **and** a fresh 3D model review runs against the new maps. The measurements and
|
||||
scorecard in `docs/3d-model-review.md` stand as the pre-rebuild baseline, not a go-ahead to start
|
||||
character work now. Character development stays gated behind that second review.
|
||||
character work now. (Character development has since shipped — see `DONE.md` — and the next
|
||||
character pass is the MakeHuman pipeline above.)
|
||||
|
||||
**Map rebuild status (2026-11-03):** H–M are complete — the Joke Shop is now a 6.0 m low hall
|
||||
(dark stucco, white signature fascia, tied-back curtains, hotel tower) and Hollywood/TV Studio
|
||||
@@ -131,19 +180,8 @@ licence-free zone only.
|
||||
the open palm + forward offset; a finger-curl rig stays out of scope** — there are no finger
|
||||
bones in the 13-bone contract, so a curl rig is a contract decision, not a modelling tidy-up.
|
||||
Recorded as ranked gap #6 (accept; revisit only if face work opens the budget).
|
||||
- [ ] Weights/pose: capture idle, walk, sit and wave; inspect shoulder, hip and neck collapse;
|
||||
fix the worst offenders using `rigging` practice without changing the 13-bone contract.
|
||||
**Blocked:** the new `capture_npc_pose.gd` reports the seated/walking pose while the saved
|
||||
frames still show the rest pose; direct bone writes deform the mesh, so this is a staging/
|
||||
capture discrepancy that may also affect live venue frames. See
|
||||
`docs/3d-model-review.md` §"Pose evidence is blocked".
|
||||
- [ ] Rebuild the pose harness. **Re-attempt 2026-11-03 narrowed the root cause:** the recipe
|
||||
(SubViewport + `force_draw()` + `force_update_all_bone_transforms()` + disabled process/physics)
|
||||
still produced byte-identical rest frames. Decisive probe: teleporting the avatar renders
|
||||
(diff 10) but moving the `Rig` child does not (diff 0) — the skinned mesh ignores its `Rig`
|
||||
parent transform, so `rig_y=-0.339` never reaches the render. Next attempt must answer why
|
||||
the skinned model ignores the `Rig` node, or stage poses via the known-good
|
||||
`capture_npc_review.gd` fallback.
|
||||
- [ ] Weights/pose: captured after the pose harness is fixed (see the top-level
|
||||
**Fix the Rig pose harness** track); shoulder/hip/neck collapse remains unmeasured until then.
|
||||
- [x] UV/texel density: measured (64–122 px/m authored, 287–440 px/m effective fabric on the 4×
|
||||
repeat; table in `docs/3d-model-review.md`). Decision: **accept as-is** — the maps are
|
||||
neutral/runtime-tinted (not painted skin), so density controls only subtle weave/noise, and
|
||||
@@ -561,121 +599,6 @@ pass. The current `_build_comedy_store_building()` stays as the fallback.*
|
||||
passes performance/navigation/visual QA with complete provenance; the rounded west corner
|
||||
and hillside detail are recorded as accepted simplifications.
|
||||
|
||||
## Character development
|
||||
|
||||
Goal: break the eight-character clone effect with four licence-cleared crowd-variety looks while
|
||||
keeping the frozen `npc_base` bone, tint-slot and gear-attach contract. The procedural generator is
|
||||
the primary path; Quaternius is a reviewed reference and MakeHuman is deferred to a separate local
|
||||
development pipeline.
|
||||
|
||||
The roster build is deliberately sequenced **after** the 3D model and local map re-evaluation: the new variants
|
||||
must inherit the reviewed face/hand/gear baseline instead of multiplying whatever it finds.
|
||||
|
||||
*Skill route: `character-artist`, `retopology`, `rigging`, `uv-workflow`, `materials`,
|
||||
`asset-optimization`, `lowpoly-style`, `godot-export`, `qa-review`.*
|
||||
|
||||
### Source review and decision
|
||||
|
||||
- [x] Research free/open-source character sources and evaluate at least three downloads against
|
||||
the existing Blender contract. (Measured Quaternius CC0, Kenney CC0, Khronos
|
||||
CesiumMan/RiggedFigure CC-BY and the MakeHuman CC0 base mesh; none is a drop-in.
|
||||
Results, local preview sheet and SHA-256 provenance are in
|
||||
`docs/npc-model-sourcing.md`.)
|
||||
- [x] Review the sourcing research with the project owner and choose Option A (procedural),
|
||||
Option B (Quaternius CC0 intake) or Option C (MakeHuman/MPFB body pipeline); record the
|
||||
decision in an ADR and in `MEMORY.md`. (2026-11-03: extend the procedural generator as the
|
||||
primary path, keep Quaternius as a reviewed prototype/reference, defer MakeHuman to a
|
||||
separate local pipeline. Recorded in ADR-0015 and `MEMORY.md`.)
|
||||
- [x] Add a source licence allow-list and provenance rule: CC0 preferred, CC-BY only with
|
||||
attribution in `CREDITS.md`, and no service assets whose terms restrict redistribution.
|
||||
(ADR-0015; the CC-BY research previews are attributed in `CREDITS.md`.)
|
||||
- [x] Decide whether the external preview sheet stays local under `tmp/` or is committed with
|
||||
the required CC-BY attribution. (Committed as
|
||||
`docs/blender_previews/sheet_npc_sources_research.jpg` with Cesium CC-BY attribution;
|
||||
the project-owned crowd prototype sheet is also committed.)
|
||||
|
||||
### Intake and validation
|
||||
|
||||
- [x] Add a Blender `inspect` path that imports a GLB, applies node transforms, reports
|
||||
tris/verts, bounds, bones, materials, UVs and skinning, and lists contract failures.
|
||||
(`blender_assets.py inspect --file ...` applies parent/object transforms, converts to
|
||||
Godot Y-up, ignores the importer's bone-shape helper and prints budgets, bones, slots,
|
||||
UVs, skinning and animations with issues/warnings; `--json` and `--category` supported.
|
||||
Seven synthetic contract tests added; all 46 library GLBs inspect clean. `audit` remains
|
||||
the final gate.)
|
||||
- [ ] Add an `adapt` path for future external assets: scale/ground, weld seams, decimate, map the
|
||||
five tint slots, and either rebuild the contract armature or record an explicit second-rig
|
||||
contract. Use `retopology`/`rigging`/`uv-workflow` guidance for the manual steps, but keep
|
||||
the Quaternius no-go: a contract rebuild needs a proportion warp, so this is not on the
|
||||
character critical path.
|
||||
- [ ] Keep `tools/blender_assets.py audit` as the single final gate; add a regression test for the
|
||||
intake report/adaptation using a deterministic synthetic or licence-cleared fixture.
|
||||
- [ ] Document the adapter commands and the go/no-go checks in `docs/asset-tooling.md`.
|
||||
|
||||
### Quaternius prototype
|
||||
|
||||
- [x] Prototype one Quaternius CC0 variant: weld/decimate to budget and capture Idle/Walk
|
||||
renders. (12,518 imported verts -> 3,199 after weld -> 2,423 / 4,654 tris after a 0.75
|
||||
decimate; Idle/Walk quality is good. Preview in
|
||||
`docs/blender_previews/sheet_npc_sources_research.jpg`.)
|
||||
- [x] Measure the prototype against the `npc_casual` controls: silhouette, rest pose, body
|
||||
proportions and gear fit. (No-go for a contract rebuild: T-pose 62-bone realistic rig,
|
||||
~0.96 m hip, ~1.68 m arm span and ~0.153 m shoulder joint do not match the arm-down
|
||||
13-bone contract. Keep as reference; a second rig/animation path needs its own ADR.)
|
||||
- [x] Make a go/no-go decision on Option B. (No-go for the current pass; proceed with the procedural
|
||||
generator and keep Quaternius as a visual/style reference.)
|
||||
|
||||
### Roster and runtime
|
||||
|
||||
- [x] Approve four crowd-variety looks (build, head silhouette, hair/beard, outer layer and
|
||||
accessory; no clothing that labels the NPC's behaviour). (`npc_crowd_a` bun/slim/sunglasses,
|
||||
`npc_crowd_b` bald/broad/beard/shoulder bag, `npc_crowd_c` coat/umbrella, `npc_crowd_d`
|
||||
hood/cup; prototype sheet committed.)
|
||||
- [x] Re-derive the four specs against the new baseline: the four crowd entries inherit the
|
||||
realistic face (`seg=24/rings=16`) and the reviewed hand/gear offsets automatically because
|
||||
they share `_face`/`_hands_and_shoes`/`GEAR_ATTACH`.
|
||||
- [x] Generate the four variants: built via `blender_assets.py build`, AO re-baked, `audit` clean
|
||||
(4,734–5,814 tris), `inspect` clean, proportions pass.
|
||||
- [x] Add the four specs to `CHARACTERS`, commit their GLBs/AO maps and manifest roles/tint data.
|
||||
(Note: this adds ~2 MB to the next release build via `export_filter=all_resources` — accepted
|
||||
for the crowd-variety roster.)
|
||||
- [x] Per-role pools: `character_model_for()` now picks from `CHARACTER_POOLS` by seed — the
|
||||
routine crowd roles gain the crowd variants (tourist → casual/crowd_a/crowd_d,
|
||||
confused_visitor → casual/crowd_b, intoxicated → casual/crowd_c) while the special roles
|
||||
keep their existing alternation (guest ⅓ jacket, trespasser/threat ½ hoodie). The test
|
||||
now checks seed-stability plus that every pool entry resolves to a committed GLB
|
||||
(277/277).
|
||||
- [x] Gear fit + inspect for the four new variants: `fit` is clean (sunglasses band=inside,
|
||||
shoulder bag clear; cup/umbrella are hand gear with the forward offset), `inspect` clean,
|
||||
proportions pass.
|
||||
- [x] Crowd-variety reference: five licence-cleared Commons photos fetched to
|
||||
`tmp/research/crowd-variety/`; the AI proposal set stays the next step for detail.
|
||||
- [x] Baseline + portrait rows: the four variants are in `capture_npc_baseline.gd` and
|
||||
`sheet_npc_baseline.jpg` (12 variants × 6 views); review-doc rows added.
|
||||
|
||||
### QA and release
|
||||
|
||||
- [x] Gates with the expanded library: 24-NPC budget smoke 152,464 tris / 168 meshes / 6.94 ms
|
||||
(under 50 ms), portrait baseline 12 variants × 6 views, `fit` clean, Godot 277/277, Python
|
||||
160/160. No release build is created for this unversioned track.
|
||||
- [x] Docs: `docs/development-status.md`, `docs/3d-model-review.md` and the baseline sheet updated;
|
||||
`CREDITS.md` needs no change (the crowd variants are procedural, no new source). Accepted
|
||||
visual limits: the crowd accessories (umbrella canopy, cup, sunglasses, beard) read at
|
||||
full-body distance but not in the head-only portrait framing.
|
||||
- [x] Exit: the 12-character library passes contract audit, portrait/gear acceptance, the 24-NPC
|
||||
budget and licence/provenance review; the runtime contract (13 bones, five tint slots,
|
||||
`npc_base` fallback) is unchanged.
|
||||
|
||||
### Deferred MakeHuman local pipeline
|
||||
|
||||
- [x] Evaluate the MakeHuman CC0 base mesh for a later separate local development pipeline.
|
||||
(19,158 verts / 36,972 tris; scaled to 1.82 m; decimate 0.35 -> 3,780 verts / 6,468 tris;
|
||||
UVs present, no normals/material groups/rig. Feasible only with retopology, a custom rig and
|
||||
project-owned clothing; keep out of CI/build.)
|
||||
- [ ] Decide whether body-shape diversity still matters after the 12-character library lands; if
|
||||
yes, prototype the local MPFB/MakeHuman pipeline outside the repo and commit only the final
|
||||
CC0-derived assets with provenance.
|
||||
|
||||
## Maintenance and documentation hygiene
|
||||
|
||||
Unversioned housekeeping that keeps the planning sources trustworthy. Do these when they block a
|
||||
@@ -756,7 +679,7 @@ published while the gates below remain open.
|
||||
| Area | Remaining gap | Milestone |
|
||||
| --- | --- | --- |
|
||||
| 3D model and local map re-evaluation | Skill-guided asset scorecard/repairs; OSM/3D data, reference-derived facades, AI-assisted composition and map QA | Unversioned |
|
||||
| Character development | Four crowd variants, deterministic role pools, gear fit and runtime integration | Unversioned |
|
||||
| Character development | Complete (moved to `DONE.md`); the MakeHuman body pipeline is the next character pass | 0.11.0 |
|
||||
| Content and balance | External first-time-player evidence, balance sweeps/tuning and content lock | 0.10.0 |
|
||||
| Audio, accessibility and localization | Accessibility/localization acceptance, caption coverage and pseudo-locale/layout sign-off | 0.10.0 |
|
||||
| Performance and platform | Target-hardware matrix, Web/Desktop HQ profiling and frame/memory evidence | 0.10.0 |
|
||||
@@ -769,9 +692,10 @@ The 0.9.3 UI, 0.9.4 animation, 0.9.5 texture, 0.9.6 integration and save-migrati
|
||||
complete in `DONE.md`; they are not remaining gaps. The 2026-11-01 documentation audit
|
||||
(architecture ownership, stale-claim cleanup and obsolete-plan removal) is also closed.
|
||||
|
||||
**Priority:** finish the unversioned 3D/local-map and character tracks first. The 0.10.0
|
||||
milestone accepts only release-blocking fixes until its external-playtest, legal/storefront,
|
||||
signing and platform gates clear; only then can the candidate become a final release.
|
||||
**Priority (2026-11-04):** fix the `Rig` pose harness, then the MakeHuman character pipeline,
|
||||
then re-evaluate the 3D models, then ship the **0.11.0** minor release. The 0.10.0 candidate
|
||||
still accepts only release-blocking fixes until its external-playtest, legal/storefront, signing
|
||||
and platform gates clear.
|
||||
|
||||
## Milestone 0.10.0 — Release candidate
|
||||
|
||||
@@ -927,6 +851,24 @@ order. Only a release-blocking defect from those tracks may enter this milestone
|
||||
- [ ] Exit: the release candidate is content-locked, externally played, legally reviewed,
|
||||
documented, reproducibly built, and approved as the 0.10.0 release candidate.
|
||||
|
||||
## Milestone 0.11.0 — MakeHuman characters
|
||||
|
||||
Goal: ship the MakeHuman-derived character bodies as a new minor release, with the pose harness
|
||||
fixed and the 3D models re-evaluated against them. This follows the 0.10.0 release candidate;
|
||||
the sequencing is Rig harness → MakeHuman intake → 3D re-evaluation → release.
|
||||
|
||||
- [ ] Fix the `Rig` pose harness and capture the weights/pose evidence (see the top track).
|
||||
- [ ] Intake a MakeHuman CC0 body through the `adapt` path (retopology → rig → clothing → AO) and
|
||||
pass `inspect`/`audit`/`fit`/proportions plus the 24-NPC budget.
|
||||
- [ ] Re-evaluate the 3D scorecard against the new characters (Section B owner review) and record
|
||||
the accepted limits.
|
||||
- [ ] Run the full QA matrix and a local release build for 0.11.0; bump `config/version`, write the
|
||||
`CHANGELOG.md` entry, tag and publish per the Release Procedure.
|
||||
|
||||
**Exit:** a 0.11.0 build ships the MakeHuman character pass with the pose harness fixed and the
|
||||
scorecard re-reviewed; the runtime contract (13 bones, five tint slots, `npc_base`) is either
|
||||
preserved or replaced behind an accepted ADR.
|
||||
|
||||
## Roadmap dependencies and risks
|
||||
|
||||
- Content volume is the largest schedule risk; tutorial and campaign work must not outrun the
|
||||
|
||||
Reference in new issue
Block a user