From cdd2e025642f6d2211bada945c0c31062082bae8 Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Wed, 4 Nov 2026 15:18:49 +0100 Subject: [PATCH] Add the MakeHuman-head character head source (head=mh) with project eyes/brows/mouth and CC0 attribution --- CREDITS.md | 9 +++ assets/models/blender_src/makehuman_head.glb | Bin 0 -> 87072 bytes tools/blender_assets.py | 78 ++++++++++++++++++- tools/npc_parts.py | 17 ++-- tools/tests/test_npc_parts.py | 2 +- 5 files changed, 96 insertions(+), 10 deletions(-) create mode 100644 assets/models/blender_src/makehuman_head.glb diff --git a/CREDITS.md b/CREDITS.md index 94a31ea..a26e380 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -40,6 +40,15 @@ kept outside version control. The CC-BY preview images are included only as development evidence. Any future shipped derivative of CesiumMan or RiggedFigure must keep the attribution above. +### MakeHuman head source + +The decimated head used by the character head prototype is derived from the +MakeHuman / MPFB base mesh, **CC0** (`assets/models/blender_src/makehuman_head.glb`; +source `tmp/npc-research/makehuman/base.obj` with its bundled +`LICENSE.md`/`LICENSE.ASSETS.md`). It is retargeted, decimated and re-weighted by +project scripts; the exported character GLBs remain project assets. See ADR-0015 +and `docs/npc-model-sourcing.md`. + The venue geometry is authored procedurally in `src/game/world_builder.gd` as a stylized reconstruction. The Joke Shop is a fictional stand-in for the real Sunset Strip block; the game does not claim endorsement by, or an exact replica diff --git a/assets/models/blender_src/makehuman_head.glb b/assets/models/blender_src/makehuman_head.glb new file mode 100644 index 0000000000000000000000000000000000000000..9e58504cb93fa3f64011659ecd6c77867d53f7ee GIT binary patch literal 87072 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 O;veoSod5s!ivI&HuP^if literal 0 HcmV?d00001 diff --git a/tools/blender_assets.py b/tools/blender_assets.py index 7c79dce..3b6ea35 100644 --- a/tools/blender_assets.py +++ b/tools/blender_assets.py @@ -965,6 +965,72 @@ def _head_proto(mats, spec, subdiv=48): return parts +def _makehuman_head(mats, spec): + """MakeHuman head shape plus the project's eye/mouth/brow pieces. + + The AI-judged head rework (2026-11-04) picked the decimated MakeHuman head + over the displacement shell: it keeps the nose/chin/jaw landmarks at 1,573 + tris. The MakeHuman mesh has no eyeballs, so the project's sclera/iris/lid/ + brow pieces are added at the MakeHuman landmarks (eyes ≈ ±0.052, −0.160, + 1.664) for readability. Blender Z-up, face front −Y. + """ + skin, acc, hair = mats["skin"], mats["accessory"], mats["hair"] + white = material("eye_white", textured_solid=True) + src = SRC_DIR / "makehuman_head.glb" + before = {o.name for o in bpy.context.scene.objects} + bpy.ops.import_scene.gltf(filepath=str(src)) + # Drop the imported armature / glTF neutral bone; build_character re-weights + # the head to the contract rig. + for a in list(bpy.context.scene.objects): + if a.type == "ARMATURE" and a.name not in before: + bpy.data.objects.remove(a, do_unlink=True) + # Pick the newly imported mesh, not the already-built body. + head = next((o for o in bpy.context.scene.objects + if o.type == "MESH" and o.name not in before + and o.data.materials), None) + if head is None: + raise SystemExit(f"no head mesh in {src}") + head.name = "HeadShell" + # The decimated MakeHuman "hair" scalp slot reads as shaggy shards; collapse + # the head to one skin slot so the join does not collide with the body's + # cloth/pants slots (the project `_hair` cap provides hair later). + head.data.materials.clear() + head.data.materials.append(skin) + # Clean the ragged neck cut left by the Head-group extraction: bisect below + # the jaw and cap the hole so the head ends on a clean solid underside. + bm = bmesh.new() + bm.from_mesh(head.data) + bmesh.ops.bisect_plane(bm, geom=bm.verts[:] + bm.edges[:] + bm.faces[:], + plane_co=(0, 0, 1.50), plane_no=(0, 0, -1), + clear_outer=True) + boundary = [e for e in bm.edges if e.is_boundary] + if boundary: + bmesh.ops.holes_fill(bm, edges=boundary) + bm.to_mesh(head.data) + bm.free() + parts = [head] + for s in (-1.0, 1.0): + # The MakeHuman socket is a deep cavity (floor ≈ −0.105); keep the + # sclera recessed so it never breaks the face silhouette. + ex, ey, ez = 0.052 * s, -0.125, 1.664 + parts.append(sphere("EyeWhite", 0.019, (ex, ey, ez), white, seg=10, + rings=6, scale=(1.25, 0.62, 0.85))) + parts.append(sphere("Iris", 0.0105, (ex, ey - 0.007, ez), acc, seg=8, + rings=5, scale=(1.0, 0.55, 1.0))) + parts.append(sphere("UpperLid", 0.020, (ex, -0.135, ez + 0.014), + skin, seg=8, rings=4, scale=(1.20, 0.32, 0.24), + rot=(math.radians(-10), 0, 0))) + parts.append(sphere("LowerLid", 0.017, (ex, -0.135, ez - 0.012), + skin, seg=8, rings=4, scale=(1.10, 0.22, 0.18), + rot=(math.radians(6), 0, 0))) + parts.append(box("Brow", (0.055, 0.014, 0.012), (0.052 * s, -0.165, 1.705), + hair, rot=(0, 0.14 * s, 0.0))) + # A subtle mouth line on top of the MakeHuman lips for readability. + parts.append(sphere("Mouth", 0.028, (0, -0.165, 1.58), acc, seg=8, rings=5, + scale=(1.0, 0.28, 0.12))) + return parts + + def _hands_and_shoes(mats, spec): skin = mats["skin"] shoe = mats["accessory"] @@ -1122,7 +1188,10 @@ def _clothing(spec, mats): return parts -def build_character(name, head_proto=False): +def build_character(name, head="face"): + """Build one character. `head` picks the head source: "face" (current + primitive face), "proto" (connected-shell displacement prototype) or + "mh" (decimated MakeHuman head + project eyes/brows/mouth).""" spec = dict(CHARACTERS[name]) if name == "npc_hoodie": spec["beard"] = True @@ -1137,7 +1206,12 @@ def build_character(name, head_proto=False): _assign_body_slots(body, spec, body_mats) _auto_weights(body, layout) - head_parts = _head_proto(mats, spec) if head_proto else _face(mats, spec) + if head == "mh": + head_parts = _makehuman_head(mats, spec) + elif head == "proto": + head_parts = _head_proto(mats, spec) + else: + head_parts = _face(mats, spec) hair_style = spec["hair"] if spec["layer"] != "hood" else "buzz" head_parts += _hair(hair_style, mats["hair"]) head = join(head_parts, "head") diff --git a/tools/npc_parts.py b/tools/npc_parts.py index bf75e14..61efea3 100644 --- a/tools/npc_parts.py +++ b/tools/npc_parts.py @@ -54,7 +54,7 @@ PROTOTYPE = "npc_casual" # canonical one-variant prototype # The four buildable parts. `head` is the bare head shell; `face` is the shell # plus nose/eyes/mouth/ears; `hand_l`/`hand_r` are the left/right hand geometry. PART_NAMES = ("head", "face", "hand_l", "hand_r", "head_proto", - "hand_l_proto", "hand_r_proto") + "hand_l_proto", "hand_r_proto", "head_mh") _HAND_PREFIXES = ("Palm", "Finger", "Fingertip", "Thumb", "ThumbTip") @@ -109,6 +109,8 @@ def build_part(name, variant, out, subdiv=48): obj = ba._hand_proto(mats, spec, side=-1.0) elif name == "hand_r_proto": obj = ba._hand_proto(mats, spec, side=1.0) + elif name == "head_mh": + obj = ba.join(ba._makehuman_head(mats, spec), "head_mh") else: side = -1.0 if name == "hand_l" else 1.0 hs = ba._hands_and_shoes(mats, spec) @@ -164,14 +166,15 @@ def extract_part(name, variant, out): return _extract_group(mesh, group, out) -def assemble(variant, out, head_proto=False): +def assemble(variant, out, head="face"): """Assemble a variant (currently rebuilds the procedural character). This proves the end-to-end wiring; once parts are approved, this swaps the new part GLBs in instead of calling ``build_character`` directly. Pass - ``head_proto=True`` to build with the connected-shell prototype head. + ``head="mh"`` or ``head="proto"`` to build with the MakeHuman or prototype + head source. """ - objs = ba.build_character(variant, head_proto=head_proto) + objs = ba.build_character(variant, head=head) mesh = next(o for o in objs if o.type == "MESH") arm = next(o for o in objs if o.type == "ARMATURE") out = Path(out) @@ -279,8 +282,8 @@ def main(argv=None): asm = sub.add_parser("assemble") asm.add_argument("--variant", default=PROTOTYPE) asm.add_argument("--out", required=True) - asm.add_argument("--head-proto", action="store_true", - help="use the connected-shell prototype head") + asm.add_argument("--head", default="face", choices=("face", "proto", "mh"), + help="head source (face | proto | mh)") insp = sub.add_parser("inspect") insp.add_argument("--file", required=True) @@ -316,7 +319,7 @@ def main(argv=None): extract_part(args.part, args.variant, args.out) print(f"extracted {args.part} -> {args.out}") elif args.cmd == "assemble": - assemble(args.variant, args.out, head_proto=args.head_proto) + assemble(args.variant, args.out, head=args.head) print(f"assembled {args.variant} -> {args.out}") elif args.cmd == "inspect": inspect(args.file) diff --git a/tools/tests/test_npc_parts.py b/tools/tests/test_npc_parts.py index f8bcf51..85a2009 100644 --- a/tools/tests/test_npc_parts.py +++ b/tools/tests/test_npc_parts.py @@ -12,7 +12,7 @@ class CliTests(unittest.TestCase): self.assertEqual( set(npc_parts.PART_NAMES), {"head", "face", "hand_l", "hand_r", "head_proto", - "hand_l_proto", "hand_r_proto"}, + "hand_l_proto", "hand_r_proto", "head_mh"}, ) def test_blender_commands_fail_cleanly_without_bpy(self):