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
@@ -2033,3 +2033,122 @@ with a 0.291 Pillow gap. A clean worktree built Linux/Windows/macOS/Web/HQ at
|
|||||||
161.5/197.1/148.0/97.8/241.5 MB; the Web zip and HQ override were checked and
|
161.5/197.1/148.0/97.8/241.5 MB; the Web zip and HQ override were checked and
|
||||||
the HQ binary launched headless. Tagged `v0.9.6`; Gitea run 1296 passed checks
|
the HQ binary launched headless. Tagged `v0.9.6`; Gitea run 1296 passed checks
|
||||||
and the full build and published seven assets.
|
and the full build and published seven assets.
|
||||||
|
|
||||||
|
## Character development
|
||||||
|
|
||||||
|
Completed 2026-11-04. The procedural crowd-variety roster (four new variants, per-role pools)
|
||||||
|
shipped with the realistic face; the external-asset intake and the MakeHuman body pipeline were
|
||||||
|
promoted to the active **MakeHuman character pipeline** track in `TODO.md`.
|
||||||
|
|
||||||
|
## 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.)
|
||||||
|
- [x] `adapt` path: promoted to the **MakeHuman character pipeline** track (2026-11-04).: 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.
|
||||||
|
- [x] Audit gate + intake regression test: promoted to the **MakeHuman character pipeline** track.
|
||||||
|
- [x] Adapter documentation: promoted to the **MakeHuman character pipeline** track.
|
||||||
|
|
||||||
|
### 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.)
|
||||||
|
- [x] Body-shape diversity decision (2026-11-04, owner): **yes** — use MakeHuman for the next
|
||||||
|
character pass. Promoted to the **MakeHuman character pipeline** track.
|
||||||
@@ -175,8 +175,10 @@ canonical implemented-features list in `docs/development-status.md`.
|
|||||||
|
|
||||||
The playable build covers the three venues, tutorial/campaign/checkpoints, the 0.9.3–0.9.6
|
The playable build covers the three venues, tutorial/campaign/checkpoints, the 0.9.3–0.9.6
|
||||||
polish/texture/integration passes and the Blender + realism asset pipeline (see `DONE.md` and
|
polish/texture/integration passes and the Blender + realism asset pipeline (see `DONE.md` and
|
||||||
`CHANGELOG.md`). Active work is the unversioned **3D model and local map re-evaluation** track,
|
`CHANGELOG.md`). The 12-character library (realistic face + four crowd variants) and the
|
||||||
then character development, then the 0.10.0 release candidate — `TODO.md` is the priority source.
|
Comedy Store map rebuild are complete. **Priority (2026-11-04, owner):** 1) fix the `Rig` pose
|
||||||
Test counts as of 2026-11-03: Godot 277/277, Python 160/160, `check_docs` OK.
|
harness, 2) the MakeHuman character pipeline, 3) re-evaluate the 3D models, 4) ship the **0.11.0**
|
||||||
|
minor release — `TODO.md` is the priority source. Test counts as of 2026-11-04: Godot 277/277,
|
||||||
|
Python 160/160, `check_docs` OK.
|
||||||
|
|
||||||
<!-- b64: RWFzdGVyIGVnZzogYSByYXJlIHJhZGlvIHRyYW5zbWlzc2lvbiAiwr9Ew7NuZGUgZXN0w6EgbGEgbW90YT8iIGZpcmVzIHZpYSBHYW1lTWFuYWdlci5fbWF5YmVfcmFkaW9fZWFzdGVyX2VnZyAoMi41JSBjaGFuY2UgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJhZGlvIGNhbGwpLiBTdHJpbmcga2V5IHJhZGlvLmVhc3Rlcl9lZ2cgaW4gY29udGVudC9zdHJpbmdzLmVuLmpzb24uIERvIG5vdCByZW1vdmUu -->
|
<!-- b64: RWFzdGVyIGVnZzogYSByYXJlIHJhZGlvIHRyYW5zbWlzc2lvbiAiwr9Ew7NuZGUgZXN0w6EgbGEgbW90YT8iIGZpcmVzIHZpYSBHYW1lTWFuYWdlci5fbWF5YmVfcmFkaW9fZWFzdGVyX2VnZyAoMi41JSBjaGFuY2UgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJhZGlvIGNhbGwpLiBTdHJpbmcga2V5IHJhZGlvLmVhc3Rlcl9lZ2cgaW4gY29udGVudC9zdHJpbmdzLmVuLmpzb24uIERvIG5vdCByZW1vdmUu -->
|
||||||
@@ -3,14 +3,62 @@
|
|||||||
Work is grouped by theme. Each item should be small enough to complete and verify on its own;
|
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.
|
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 →
|
**Priority order (2026-11-04, owner):** 1) fix the `Rig` pose harness (unblocks pose/weight
|
||||||
versioned release milestones (0.10.0) → future/deferred work. See `AGENTS.md` §Priority and
|
and portrait evidence), 2) the MakeHuman character pipeline (more realistic bodies than the
|
||||||
Versioning and §Local Blender skills.
|
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
|
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,
|
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.
|
`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
|
## 3D model and local map re-evaluation
|
||||||
|
|
||||||
Goal: re-judge every shipped 3D asset against the newly available Blender skill guidance, rank
|
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
|
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
|
(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
|
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
|
**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
|
(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
|
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.
|
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).
|
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;
|
- [ ] Weights/pose: captured after the pose harness is fixed (see the top-level
|
||||||
fix the worst offenders using `rigging` practice without changing the 13-bone contract.
|
**Fix the Rig pose harness** track); shoulder/hip/neck collapse remains unmeasured until then.
|
||||||
**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.
|
|
||||||
- [x] UV/texel density: measured (64–122 px/m authored, 287–440 px/m effective fabric on the 4×
|
- [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
|
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
|
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
|
passes performance/navigation/visual QA with complete provenance; the rounded west corner
|
||||||
and hillside detail are recorded as accepted simplifications.
|
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
|
## Maintenance and documentation hygiene
|
||||||
|
|
||||||
Unversioned housekeeping that keeps the planning sources trustworthy. Do these when they block a
|
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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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
|
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.
|
(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
|
**Priority (2026-11-04):** fix the `Rig` pose harness, then the MakeHuman character pipeline,
|
||||||
milestone accepts only release-blocking fixes until its external-playtest, legal/storefront,
|
then re-evaluate the 3D models, then ship the **0.11.0** minor release. The 0.10.0 candidate
|
||||||
signing and platform gates clear; only then can the candidate become a final release.
|
still accepts only release-blocking fixes until its external-playtest, legal/storefront, signing
|
||||||
|
and platform gates clear.
|
||||||
|
|
||||||
## Milestone 0.10.0 — Release candidate
|
## 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,
|
- [ ] Exit: the release candidate is content-locked, externally played, legally reviewed,
|
||||||
documented, reproducibly built, and approved as the 0.10.0 release candidate.
|
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
|
## Roadmap dependencies and risks
|
||||||
|
|
||||||
- Content volume is the largest schedule risk; tutorial and campaign work must not outrun the
|
- Content volume is the largest schedule risk; tutorial and campaign work must not outrun the
|
||||||
|
|||||||
Reference in new issue
Block a user