Raise character limits and document optional Blender MCP
Full build / Import + headless tests (push) Successful in 41s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-04 13:47:16 +01:00
1 parent 50a48d2256
commit aec1fb7b69
20 files changed
+303 -96

No files matched your search

+15 -13
View File
@@ -53,13 +53,14 @@ MANIFEST = OUT_DIR / "manifest.json"
SLOTS = ["skin", "cloth", "pants", "accessory", "hair"]
BONES = ["Head", "HipL", "HipR", "KneeL", "KneeR", "ShoulderL", "ShoulderR",
"ElbowL", "ElbowR", "HandL", "HandR"]
# The eight library variants may use more geometry than the frozen npc_base
# fallback (6000 tris / 4000 verts). Raised to 8000/8000 on 2026-11-02 so the
# remaining face, hand-grip and clothing work is not forced to replace detail.
# The glTF vertex count is after UV-seam splits; each avatar is still one
# skinned mesh, and `smoke_npc_budget.gd` must confirm the 24-NPC frame time.
CHAR_MAX_TRIS = 8000
CHAR_MAX_VERTS = 8000
# Character cap raised to 16000/16000 on 2026-11-04 for the head/face/hand
# overhaul and possible MakeHuman parts. The required 13 core bones stay, but
# optional extra bones (fingers, face, toes) are allowed; they must not move the
# core rest positions. The glTF vertex count is after UV-seam splits; each
# avatar is still one skinned mesh, and `smoke_npc_budget.gd` must confirm the
# 24-NPC frame time before accepting the increase.
CHAR_MAX_TRIS = 16000
CHAR_MAX_VERTS = 16000
GEAR_MAX_TRIS = 1500
PROP_MAX_TRIS = 4000
@@ -2135,14 +2136,15 @@ def inspect_glb(path, category=None) -> dict:
return result
def adapt_glb(path, out_path, target_tris=8000):
def adapt_glb(path, out_path, target_tris=16000):
"""Import an external GLB and adapt it toward the library contract.
Applies node transforms, grounds the feet (lowest vertex at y = 0), welds
duplicated seam vertices and decimates to `target_tris`, then exports the
result to `out_path` as a GLB. The five tint slots and the 13-bone contract
armature are deliberately NOT auto-mapped — that is a manual retopology/rig
step. Returns before/after measurements for the intake report.
result to `out_path` as a GLB. The five tint slots and the required 13 core
bones (optional extra bones are allowed) are deliberately NOT auto-mapped —
that is a manual retopology/rig step. Returns before/after measurements for
the intake report.
"""
if bpy is None:
return {"ok": False, "error": "adapt must run inside Blender"}
@@ -2537,8 +2539,8 @@ def main(argv=None):
ada.add_argument("--file", required=True,
help="external GLB to adapt (absolute path; runs in Blender)")
ada.add_argument("--out", required=True, help="where to write the adapted GLB")
ada.add_argument("--target-tris", type=int, default=8000,
help="decimate target (default 8000)")
ada.add_argument("--target-tris", type=int, default=16000,
help="decimate target (default 16000)")
tex = sub.add_parser("texels", help="per-slot texel density of the character GLBs")
tex.add_argument("--only", default="")
tex.add_argument("--json", action="store_true")