Add MakeHuman head hair/body prototype and 12-variant rollout plan

This commit is contained in:
zwitschi committed 2026-11-04 18:08:03 +01:00
1 parent 958d3ae0ff
commit b297c4543f
9 files changed
+269 -89

No files matched your search

+45 -18
View File
@@ -26,10 +26,12 @@ five tint slots, 16,000/16,000 character cap, optional extra bones beyond the re
**Current state:** `assets/models/npc/` contains the tracked frozen `npc_base.blend` and its
gitignored `.blend1`; the 12 production characters are assembled procedurally by
`tools/blender_assets.py` from `_shape_head_mesh`, `_face`, `_hair` and `_hands_and_shoes`.
There is no per-part source asset library yet. The MakeHuman body prototype and its temporary
head/hand swap live under `tmp/npc-research/` and are not the shipped path. This overhaul supplies
the reusable head/face and hand parts that both the procedural characters and the MakeHuman body
can consume.
The MakeHuman head is now a second head source (`build_character(head="mh")`,
`build --head mh`, `npc_parts.py assemble --head mh`) and all 12 variants assemble inside the
16,000-triangle cap with it. The procedural body, hands and clothing remain unchanged. The
MakeHuman body prototype and its temporary head/hand swap live under `tmp/npc-research/` and are
not the shipped path. This overhaul supplies the reusable head/face and hand parts that both the
procedural characters and the MakeHuman body can consume.
This workstream supersedes the face/head and hands items in §C until the prototypes are approved;
the rest of §C remains the broad review checklist.
@@ -93,16 +95,18 @@ the rest of §C remains the broad review checklist.
- [x] Compare two or three subdivision/loop variants at 1.85 m front/three-quarter/profile and a
1.5 m portrait. Pick the variant that reads best before changing all 12 characters; keep the
rejected variants local.
- [-] Rebuild a standalone MakeHuman-derived head from the researched CC0 base and save it to
- [x] Rebuild a standalone MakeHuman-derived head from the researched CC0 base and save it to
`assets/models/blender_src/makehuman_head.glb`; record provenance/review in
`docs/makehuman-head-review.md` and the preview sheet. (Final build: 12,641 tris / 7,690
split verts; assembled `npc_casual` 15,532 tris / 13,310 verts / 14 bones, `inspect` clean.
Latest attempt: skin eyelid mask, recessed globes, flat iris/pupil discs, surface-anchored
brows. Vision verdict: still **REJECT** — globe depth is inconsistent between front,
three-quarter and profile, the lid does not visibly clip the globe, and the iris reads
decal-locked at three-quarter; prototype stays local and un-integrated.)
`docs/makehuman-head-review.md` and the preview sheet. Final build: 12,642 tris /
7,690 split verts, bounds x −0.094..0.094, y −0.180..0.042, z 1.530..1.803. The owner
accepted the **basic human head** on 2026-11-04; the automated vision gate still records
the eye-region REJECT as deferred polish (globe depth, lid overlap, iris at three-quarter).
The assembled path now adds a skull-conforming hair cap, a hidden-scalp trim and a narrowed
neck/shoulder body. Assembled `npc_casual --head mh`: 14,753 tris / 12,822 raw / 12,823
seam-split verts / 14 bones / 9 materials, `inspect` clean.
- [ ] Build true upper/lower eyelid masses that overlap the globe in front, three-quarter and
profile views (not a socket hole), then re-run the vision gate before integrating the head.
profile views (not a socket hole), then re-run the vision gate. Deferred: the owner accepted
the basic head, so this is polish, not a rollout blocker.
Compared `head_proto` at seg 24 (670 verts), 48 (1,558 verts) and 64 (2,470 verts) at 1.85 m
and 1.5 m, front/three-quarter/profile. Vision-judged: **s48 wins** — s24 is too faceted
@@ -117,12 +121,11 @@ the rest of §C remains the broad review checklist.
imported GLB came out black and is superseded by the proper `.blend`-source bake). Flag: the
prototype ears reach x ±0.162 vs the 0.1575 head-radius reference, so headgear may clip and
must be re-measured at rollout.
- [ ] Get owner sign-off on the one-variant prototype, then roll the approved head/face into the
other 11 variants one asset family at a time, with a before/after sheet per batch.
**Blocked on owner sign-off.** Sign-off material is ready: the s48 prototype vs the current
`_face` at 1.85 m front/three-quarter/profile
(`docs/blender_previews/sheet_head_proto_before_after.jpg`); the s24/s48/s64 comparison table
is in `docs/3d-model-review.md`. Rollout waits for the owner's go/no-go.
- [-] Owner review of the assembled one-variant prototype (`npc_casual --head mh`) before the
12 shipped GLBs change. The basic human head is accepted (2026-11-04); the review now covers
the skull-conforming hair cap and the narrowed neck/shoulder body silhouette. Local renders:
`tmp/npc-parts/prototype_mh/renders/` (portrait front/three-quarter/profile + full body).
Rollout starts only after this review.
### 4. Hands and grip prototype
@@ -151,6 +154,30 @@ the rest of §C remains the broad review checklist.
### 5. Assembly and rollout
**MakeHuman 12-variant rollout.** - [x] Make the head source selectable from the main builder:
`blender_assets.py build --head mh --only npc_casual,...` and
`npc_parts.py assemble --variant <name> --head mh --out <stem>`. The default stays `face`
until the hair/body review passes.
- [x] Verify every variant assembles with the MakeHuman head inside the 16,000/16,000 cap
(pre-export triangle counts, `inspect` clean; `npc_casual` seam-split verts 12,823):
`npc_casual 14,753`, `npc_jacket 15,153`, `npc_coat 15,817`, `npc_vest 15,579`,
`npc_dress 15,215`, `npc_hoodie 15,837`, `npc_firefighter 15,987`, `npc_guard 15,729`,
`npc_crowd_a 14,947`, `npc_crowd_b 14,693`, `npc_crowd_c 15,433`, `npc_crowd_d 15,833`.
- [x] Recover head budget without touching the accepted face: remove head faces fully covered by
the hair cap, keep boundary faces as a safety band, and trim the hidden neck plug to 12
segments. This saves ~950 tris on every variant.
- [ ] Owner approves the hair cap and full-body silhouette on the local `npc_casual` prototype.
- [ ] Rebuild the 12 committed character GLBs with `--head mh`, in asset-family batches, then
regenerate their AO maps and manifest entries. Never run a no-op full-library rebuild.
- [ ] Run `blender_assets.py audit`, `fit`, `inspect` and `texels`, plus
`python3 tools/npc_proportions.py report`; record the 12-variant proportion table.
- [ ] Re-run the Godot NPC tests and capture the 12 × 6 baseline
(`src/test/capture_npc_baseline.gd` → `python3 tools/npc_baseline.py sheet`); inspect the
sheet for outliers before committing.
- [ ] Update `docs/makehuman-head-review.md`, `docs/3d-model-review.md`,
`docs/blender_previews/README.md`, `docs/npc-model-sourcing.md`, `CREDITS.md` and
`docs/development-status.md` with the accepted head/hair/body state and final counts.
- [ ] Integrate the approved parts into `build_character` with deterministic joins, weights, UVs and
AO. The final output remains one `npc_base` skinned mesh under the existing 13-core armature;
optional extra bones are allowed but the core rest positions stay fixed;