Refine the MakeHuman head (weld lids/brows, add hair cap) and add the user review page
Full build / Import + headless tests (push) Successful in 40s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-04 15:36:55 +01:00
1 parent 0b2f124ffe
commit 2e1e4d7f70
5 files changed
+78 -9

No files matched your search

+25 -9
View File
@@ -1008,7 +1008,28 @@ def _makehuman_head(mats, spec):
bmesh.ops.holes_fill(bm, edges=boundary)
bm.to_mesh(head.data)
bm.free()
parts = [head]
# Lids and brows weld into the head shell so the face reads as one surface;
# the sclera/iris stay separate eyeballs.
shell_parts = [head]
for s in (-1.0, 1.0):
ex, ez = 0.052 * s, 1.664
shell_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)))
shell_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)))
shell_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)))
shell = join(shell_parts, "HeadShell")
bm = bmesh.new()
bm.from_mesh(shell.data)
bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.008)
bm.to_mesh(shell.data)
bm.free()
parts = [shell]
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.
@@ -1017,17 +1038,12 @@ def _makehuman_head(mats, spec):
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)))
# A skull-conforming buzz cap sized for the smaller MakeHuman cranium.
parts.append(_hair_cap("Hair", hair, 1.70, 1.56, radius=0.115,
center=(0, 0.008, 1.66), scale=(0.95, 1.04, 1.05)))
return parts