Record the AI-assisted asset review loop and MakeHuman OBJ transform gotchas in MEMORY.md
Full build / Import + headless tests (push) Successful in 45s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-05 19:22:43 +01:00
1 parent 48a9795248
commit f0d4b81239
1 file changed
+17 -1
+17 -1
View File
@@ -18,6 +18,13 @@ canonical implemented-features list in `docs/development-status.md`.
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
fixes converge. This is what picked the MakeHuman head over the procedural displacement head
(`_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
@@ -156,6 +163,13 @@ canonical implemented-features list in `docs/development-status.md`.
(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;
@@ -228,6 +242,8 @@ canonical implemented-features list in `docs/development-status.md`.
- Character checks: `python3 tools/blender_assets.py inspect|audit|fit`,
`python3 tools/npc_proportions.py`
- Docs: `python3 tools/check_docs.py` (every tracked image must be linked from its folder README)
- Head/part pipeline: `python3 tools/npc_parts.py build|extract|assemble|inspect|sheet|compare`
(Blender subcommands run under flatpak). Head sources: `build_character(head="face"|"proto"|"mh")`.
- Reference research: `python3 tools/refcollect.py search <q> --slug <block> --limit N`
(local-only), `tools/refboard.py` (Commons), `tools/three_up.py compose/rows`,
`tools/scene_concepts.py generate/anchor/realism`
@@ -247,6 +263,6 @@ Comedy Store map rebuild are complete. **Priority (2026-11-04, owner):** 1) the
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
character patches are published; `TODO.md` is the priority source. Test counts as of 2026-11-04:
Godot 277/277, Python 162/162, `check_docs` OK.
Godot 277/277, Python 167/167, `check_docs` OK.
<!-- b64: RWFzdGVyIGVnZzogYSByYXJlIHJhZGlvIHRyYW5zbWlzc2lvbiAiwr9Ew7NuZGUgZXN0w6EgbGEgbW90YT8iIGZpcmVzIHZpYSBHYW1lTWFuYWdlci5fbWF5YmVfcmFkaW9fZWFzdGVyX2VnZyAoMi41JSBjaGFuY2UgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJhZGlvIGNhbGwpLiBTdHJpbmcga2V5IHJhZGlvLmVhc3Rlcl9lZ2cgaW4gY29udGVudC9zdHJpbmdzLmVuLmpzb24uIERvIG5vdCByZW1vdmUu -->