diff --git a/client/assets/characters/clothing/coveralls_basic/coverage.json b/client/assets/characters/clothing/coveralls_basic/coverage.json index a1ed29129..7ab2685fe 100644 --- a/client/assets/characters/clothing/coveralls_basic/coverage.json +++ b/client/assets/characters/clothing/coveralls_basic/coverage.json @@ -1,7 +1,6 @@ { "hides": [ "torso", - "torso_upper", "arm_upper_l", "arm_upper_r", "arm_lower_l", diff --git a/client/assets/characters/clothing/jacket_utility/coverage.json b/client/assets/characters/clothing/jacket_utility/coverage.json index c94bee561..953c402e8 100644 --- a/client/assets/characters/clothing/jacket_utility/coverage.json +++ b/client/assets/characters/clothing/jacket_utility/coverage.json @@ -1,7 +1,6 @@ { "hides": [ "torso", - "torso_upper", "arm_upper_l", "arm_upper_r", "arm_lower_l", diff --git a/client/assets/characters/clothing/shirt_henley/coverage.json b/client/assets/characters/clothing/shirt_henley/coverage.json index 82d9e7154..78b67382d 100644 --- a/client/assets/characters/clothing/shirt_henley/coverage.json +++ b/client/assets/characters/clothing/shirt_henley/coverage.json @@ -1,7 +1,6 @@ { "hides": [ "torso", - "torso_upper", "arm_upper_l", "arm_upper_r" ], diff --git a/tooling/blender_surface_deform_batch.py b/tooling/blender_surface_deform_batch.py index 9adefea44..e0a03f7c2 100644 --- a/tooling/blender_surface_deform_batch.py +++ b/tooling/blender_surface_deform_batch.py @@ -48,6 +48,7 @@ Decisions: D-162 (clothing pre-baked per body type via Surface Deform) import sys import os +import json import shutil import bpy @@ -436,5 +437,23 @@ if __name__ == "__main__": print(f" Visually verify these variants at gameplay zoom — Shrinkwrap") print(f" may produce pinching at extremities on extreme body types.") + # Write pipeline_log.json for provenance tracking + log_path = os.path.join(output_dir, "pipeline_log.json") + log_data = { + "reference": os.path.basename(reference_glb), + "bodies_dir": bodies_dir, + "variants": { + r["body_type"]: { + "status": r["status"], + "method": r.get("method", None), + "error": r.get("error", None), + } + for r in results + }, + } + with open(log_path, 'w') as f: + json.dump(log_data, f, indent=2) + print(f"\n Pipeline log written to {log_path}") + if errors: sys.exit(1) diff --git a/tooling/setup_clothing_metadata.py b/tooling/setup_clothing_metadata.py index d07ae262c..630ec5dce 100644 --- a/tooling/setup_clothing_metadata.py +++ b/tooling/setup_clothing_metadata.py @@ -45,7 +45,7 @@ CLOTHING_ITEMS = { "coveralls_basic": { "description": "Full-body work suit", "hides": [ - "torso", "torso_upper", + "torso", "arm_upper_l", "arm_upper_r", "arm_lower_l", "arm_lower_r", "hand_l", "hand_r", @@ -58,13 +58,16 @@ CLOTHING_ITEMS = { "jacket_utility": { "description": "Upper body outerwear", "hides": [ - "torso", "torso_upper", + "torso", "arm_upper_l", "arm_upper_r", "arm_lower_l", "arm_lower_r", ], "torso_variant": "full", }, "pants_cargo": { + # Note: pants hide leg segments but NOT foot segments. Boots (boots_work) + # hide feet. This distinction matters for the compositor — a character + # wearing pants + no boots shows bare feet via seg_foot_l/r. "description": "Lower body cargo trousers", "hides": [ "leg_upper_l", "leg_upper_r", @@ -75,7 +78,7 @@ CLOTHING_ITEMS = { "shirt_henley": { "description": "Upper body inner shirt", "hides": [ - "torso", "torso_upper", + "torso", "arm_upper_l", "arm_upper_r", ], "torso_variant": "full",