Rewrite NPC plans around the Quaternius base
This commit is contained in:
1 parent
2e1bb19e2c
commit
9968bc0a4c
17 files changed
+364
-536
No files matched your search
@@ -10,14 +10,6 @@ canonical implemented-features list in `docs/development-status.md`.
|
||||
the licence gate. Downloads live in `tmp/research/` (gitignored): DDG image search, street-view
|
||||
frames, neighbouring buildings — never committed, never shipped. Promotion into
|
||||
`docs/screens/refs/` always passes the sidecar licence + privacy gate and `CREDITS.md`.
|
||||
- **MakeHuman head accepted (2026-11-04, owner):** the basic human head is a pass.
|
||||
`assets/models/blender_src/makehuman_head.glb` is the CC0 MakeHuman-derived head
|
||||
(12,642 tris / 7,690 split verts). The automated vision gate still records REJECT on
|
||||
the eye/lid region (globe depth, lid overlap, iris at three-quarter) as deferred
|
||||
polish, not a blocker. The assembled path (`build_character(head="mh")`) adds a
|
||||
skull-conforming hair cap derived from the closed head shell, hides the scalp under
|
||||
that cap, and narrows the neck/shoulder body. Default head source stays `face` until
|
||||
the owner reviews the hair/body and the 12-variant rollout starts.
|
||||
- **AI-assisted asset review loop (2026-11-04):** head/face shape decisions use a concept +
|
||||
judge loop — generate a target concept (`generate_textures.generate_image`, Seedream) and use
|
||||
`tools/describe_image.py` as the vision judge, iterating on the mesh until the judge's specific
|
||||
@@ -25,43 +17,6 @@ canonical implemented-features list in `docs/development-status.md`.
|
||||
(`_head_proto` oscillates between "decorated egg" and "spiky wedges" at ~3/5 on the coarse
|
||||
sphere). Review page: `docs/screens/head-review/README.md`; methodology note:
|
||||
`docs/3d-model-review.md` §AI-driven head rework.
|
||||
- **MakeHuman hair/body prototype (2026-11-04):** `npc_casual --head mh` is
|
||||
14,753 tris / 12,822 raw / 12,823 seam-split verts / 14 bones / 9 materials,
|
||||
`inspect` clean. All 12 variants were counted at 14,693–15,987 tris. Hair uses flat
|
||||
shading normals because the old hair normal map caused dark tangent patches on the
|
||||
new cap. Scalp faces fully covered by the hair cap are deleted (saves ~950 tris);
|
||||
the accepted face geometry is untouched. The procedural body was narrowed at the
|
||||
neck/shoulders (shoulder root z 1.345, chest 0.158, neck 0.060/0.054) and its skin
|
||||
decimate dropped to 0.21. The local renders are in
|
||||
`tmp/npc-parts/prototype_mh/renders/`.
|
||||
- **MPFB full-body prototype (2026-11-04):** the current body candidate is the local MPFB 2.0.18
|
||||
pipeline at `tmp/npc-research/build_mpfb_npc.py` (dev-only; no `.mhclo` clothing installed).
|
||||
It creates a macro-driven human, bakes targets, adds the `game_engine` rig, captures arm
|
||||
points/weights, removes the rig, applies the helper MASK, scales to 1.81 m, retargets the A-pose
|
||||
arms to the contract wrist, cuts the neck at 1.505, decimates, bisects the clothing boundaries,
|
||||
paints the five slots, adds a short neck flare, project hands, rounded shoes and cuffs, the
|
||||
accepted head and the 14-bone contract armature. Current output: **15,317 tris / 13,690 glTF
|
||||
verts / 13,702 seam-split verts / 1.810 m / 14 bones / 10 materials**; `inspect` clean and feet
|
||||
grounded. The torso is inflated radially by 12% through z 0.72–1.40 to loosen the shirt. The
|
||||
neck is a radial cut of the decimated column bridged by a four-ring, 20-segment lathe (lower
|
||||
rings painted cloth, reads as a crew neck); the ankles are hidden by a bevelled 0.11 m shoe
|
||||
shell, an inset 0.111 × 0.286 m sole, a tongue and a 0.08 m pant cuff. Sleeve cuffs use the
|
||||
`cloth` slot and the `accessory` slot is carried by the sole. A light smoothing pass on the
|
||||
closed thigh/hip region softens the decimated silhouette. Earlier torus collar, cloth cylinder
|
||||
collar, skin neck-blend sphere and destructive neck `smooth_vert` pass failed: the shells read as a
|
||||
brace, shelf or donut, and vertex smoothing tore the open collar boundary into a dark hole. An
|
||||
untucked shirt-hem band at the hips also failed: it read as a hanging white flap at the crotch.
|
||||
Protruding flat sole plates read as skates/bricks and were replaced by an inset sole under a
|
||||
rounded shell; laces were dropped for triangle budget. The neck skin rule needed a `z > 1.35`
|
||||
guard: without it the `radius < 0.08` test painted skin at the crotch. Lowering the hem to
|
||||
z 0.80 (unitard), tilting it up at the front (high-cut swimwear) and a 13% hem flare (peplum)
|
||||
were all rejected; the remaining crotch V is the dark hollow under a body-painted shirt. A quick
|
||||
open, flared solidified tube (0.150→0.196 m, z 1.05→0.80, 24 segments, ~288 tris) also failed:
|
||||
it read as a hanging apron/tabard. The real fix is a shaped shirt shell with armholes and a
|
||||
curved hem, not a tube. Remaining polish: crotch V, partly loosened shirt,
|
||||
angular thigh facets. The prototype uses flat slot colours because the one-shot MPFB UV unwrap
|
||||
does not match the per-slot NPC atlases. Renders:
|
||||
`tmp/npc-parts/mpfb_proto/renders84/`; body-only: `body_only.glb`.
|
||||
- **Project agent skills (2026-11-03):** two tracked skills live in `.agents/skills/`:
|
||||
`gig-line-blender-asset-contract` and `gig-line-release-qa`. They are guidance only,
|
||||
add no runtime dependency and are referenced from `tools/README.md`. The third-party
|
||||
@@ -97,11 +52,6 @@ canonical implemented-features list in `docs/development-status.md`.
|
||||
(94 skills + shared `references/`), gitignored, kept out of Godot's scanner by
|
||||
`.agents/.gdignore`. Keep the pack flat when updating (`cp -a <pack>/.claude/skills/. ...`).
|
||||
Pi gates project `.agents/skills` behind project trust.
|
||||
- **NPC model sourcing (ADR-0015):** CC0 acceptable for shipped assets; CC-BY only with
|
||||
attribution in `CREDITS.md`; no service assets with redistribution restrictions. The procedural
|
||||
generator is the primary path. Quaternius and MakeHuman were evaluated as references only, not
|
||||
shipped bases (Quaternius: 62-bone T-pose rig mismatch; MakeHuman: needs retopology + custom
|
||||
rig + clothing).
|
||||
- **Gaussian splatting (unversioned):** offline/development-only until an ADR proves licence,
|
||||
privacy, Compatibility/Web cost and mesh collision. Accepted photo channels: team captures,
|
||||
permissioned user/volunteer photos, clearly licensed downloads; every set needs a
|
||||
@@ -117,18 +67,18 @@ canonical implemented-features list in `docs/development-status.md`.
|
||||
- **Character mesh cap (2026-11-05):** all characters use 24,000 tris / 24,000 glTF vertices
|
||||
(`CHAR_MAX_TRIS`/`CHAR_MAX_VERTS` in `tools/blender_assets.py`; `npc_pipeline.MAX_TRIANGLES`/
|
||||
`MAX_VERTICES`). The required 13 core bones stay, optional extra bones are allowed, and the
|
||||
low-poly `npc_base` fallback remains the shipped fallback. The raise funds the MPFB body and a
|
||||
seamless neck/shoulder junction. Measure the 24-NPC/Web budget after
|
||||
low-poly `npc_base` fallback remains the shipped fallback. The raise funds the Quaternius base bake and
|
||||
the 12-variant clothing detail. Measure the 24-NPC/Web budget after
|
||||
any geometry change; never silently lower the cap without a new decision.
|
||||
- **MPFB prototype neck (2026-11-05):** a boolean cylinder (r 0.102) cuts the body neck bore; a
|
||||
smooth lathe covers it. The accepted head keeps a wide flat cut brim at 1.53, so the prototype
|
||||
trims the head at 1.55 (discarding only the neck stub) and matches the lathe to the smaller
|
||||
elliptical opening. This removes the square collar, dark notches and wide brim. Remaining: a
|
||||
thin jaw crease and a hard shirt-shoulder point in three-quarter view. Do not re-add a torus,
|
||||
flat disk, collar shell or destructive neck smoothing; those were rejected.
|
||||
- **MPFB prototype count (2026-11-05):** 19,747 tris / 16,851 glTF verts / 1.810 m / 14 bones /
|
||||
10 materials; `inspect` clean. Body-only head/neck surgery lives in
|
||||
`tmp/npc-research/build_mpfb_npc.py` (backups in `/tmp/build_mpfb_npc_94.py`).
|
||||
- **Quaternius is the NPC base (2026-11-05, owner):** ADR-0017 supersedes the generator-first
|
||||
sourcing decision. The CC0 Quaternius Ultimate Modular character pack is the primary NPC mesh
|
||||
and animation source. Stage 1 bakes a proportion-warped, 13-core-contract `npc_base` so
|
||||
`NpcAvatar`, gear and animations keep working; the 62-joint/24-clip source rig is authoring
|
||||
input, not a runtime dependency. If the warp fails the silhouette gate, Stage 2 needs a new ADR
|
||||
for a 62-joint runtime, not a hybrid. The MakeHuman head and procedural `npc_base` remain
|
||||
tested fallbacks until the Quaternius rollout ships. Quaternius source: CC0, attribution in
|
||||
`CREDITS.md`; the three researched GLBs and licence notes are kept in
|
||||
`tmp/npc-research/quaternius/`. MPFB/MakeHuman body work is closed; do not add new work there.
|
||||
- **Engine baseline:** Godot 4.7.2 stable (official editor `~/.local/bin/godot`). The system's
|
||||
`godot-runner` cannot load arbitrary project paths (compiled without path overrides); use the
|
||||
official editor binary.
|
||||
@@ -167,27 +117,6 @@ canonical implemented-features list in `docs/development-status.md`.
|
||||
out of a portrait frame (park the rest of the crowd away instead).
|
||||
- Blender: `bisect_plane` and thin bevels leave zero-area triangles (Godot "non-finite normal in
|
||||
LOD generation"); `_clean()` + a weld after bisect fixes them and the audit rejects them.
|
||||
- MakeHuman head/hair gotchas: the imported head is broad and flat, so a separate hair
|
||||
ellipsoid floats or leaves a bald patch; derive the cap from the closed head shell and
|
||||
boolean-cut the hairline. Do not reuse the skull's UVs with the old `hair_normal.png`
|
||||
(dark tangent patches) — hair skips the normal map. Generate the cap before deleting
|
||||
the hidden scalp, or the cap inherits the hole. The flatpak sandbox cannot read `/tmp`;
|
||||
helper scripts must live under `$PWD`.
|
||||
- MakeHuman OBJ intake transform (`base.obj`): the source is Y-up, 16.946 units tall. To reach
|
||||
the project Blender Z-up / metres / front -Y space: scale 0.10739, translate y +0.907 (ground
|
||||
the feet), then rotate +90° around X (maps +Y→+Z up and +Z→−Y front). The full-res head carries
|
||||
internal geometry (eyes/teeth/mouth shells) and is non-manifold; voxel-remesh and Catmull-Clark
|
||||
subdivision both fragment it into shards. On the decimated head, weld first
|
||||
(`remove_doubles` ~0.0002) then Laplacian `smooth_vert`; subdivision without the weld splits
|
||||
along the GLB seam vertices.
|
||||
- MPFB gotchas: call `TargetService.bake_targets(body)` before any decimate (shape-key
|
||||
modifier error); add the built-in rig and capture arm weights before applying the MASK
|
||||
modifier, or `build_basemesh_position_info` divides by zero on an emptied bone group;
|
||||
decimate before bisecting the clothing loops, or the decimator collapses the bisect
|
||||
into a sawtooth. Clear custom split normals after joining (imported MPFB normals leave
|
||||
flat-shaded thigh facets). Imported GLBs may include helper `Cube`/`Icosphere` meshes at
|
||||
±1.0, so select `npc_base` explicitly. Delete the MPFB hands by hand/finger vertex-group
|
||||
weights, not only by `|x|`, or leftover fingers become pants-coloured fins.
|
||||
- Image models have per-model size floors/caps (Seedream needs 1920+; `GEN_SIZE=2048`, do not
|
||||
lower; gpt-5-image-mini caps lower). `generate_image` applies model-specific sizing; concept
|
||||
generation defaults to `--request-size 1536`.
|
||||
@@ -269,9 +198,9 @@ 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
|
||||
polish/texture/integration passes and the Blender + realism asset pipeline (see `DONE.md` and
|
||||
`CHANGELOG.md`). The 12-character library (realistic face + four crowd variants) and the
|
||||
Comedy Store map rebuild are complete. **Priority (2026-11-04, owner):** 1) the **Blender NPC
|
||||
model overhaul** (head/face/hands, local part pipeline), 2) finish the MakeHuman character + the
|
||||
3D model and map improvements, 3) ship it all together in the **0.10.0 minor**. The 0.9.7/0.9.8
|
||||
Comedy Store map rebuild are complete. **Priority (2026-11-05, owner):** 1) the **Quaternius NPC
|
||||
base migration** (bake the CC0 Quaternius character to the runtime contract), 2) the 3D model and
|
||||
map improvements, 3) ship it all together in the **0.10.0 minor**. The 0.9.7/0.9.8
|
||||
character patches are published; `TODO.md` is the priority source. Test counts as of 2026-11-04:
|
||||
Godot 277/277, Python 167/167, `check_docs` OK.
|
||||
|
||||
|
||||
Reference in new issue
Block a user