{ "body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin_SkirtRig_4seg.glb", "weld_threshold": 0.0006, "shell_mm": 4, "min_island_verts": 40, "name": "bottomTest1", "source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_piupiu_v3_garment.fbx", "align": { "top_bone": "spine_01", "scale_xy": 0.1, "scale_z": 0.1, "z_nudge": 0.0, "xy_nudge": [ 0.0, 0.0 ] }, "parts": { "Bottom": { "slot": "Legs", "islands": [ 0 ], "tris": 8000, "planar_deg": 0, "fit": { "target": "BODY_SHELL", "mask": "full", "offset_mm": 3, "wrap_mode": "OUTSIDE", "hem_mm": 80, "_note_hem": "80mm, up from the 14 the old piupiu used. This is what stops the leg clipping through: it gives the skirt a real BELL that the leg swings INSIDE, rather than cloth lying on the thigh for the leg to punch through. Graded 0 at the hip to full at the hem, so the waistband still rides the hip. 45 was not enough; 80 holds through Walk and Dance." }, "weights": "skirt_bones", "color": [ 0.45, 0.35, 0.15 ], "texture": "../tools/tailor/textures/bottom_test1.png", "_note_planar": "0, NOT the default 5. reduce applies a planar DISSOLVE unconditionally before the tri-budget check, and these strands are flat strips, so deg 5 collapsed 3012 verts -> 884, destroying the vertical rows the 4-segment skirt ring needs to bend smoothly (the rig session's ask 4). The 8000-tri budget was never the constraint (4136).", "_note_texture": "bottom_test1.png is generated by tools/tailor/textures/make_bottom_test1.py and MUST stay V-only (constant along U). A strand garment samples a different U slice per strand, so any horizontal variation makes the woven bands misalign strand-to-strand and read as noise. Measured before/after: mean horizontal stdev per row 50.2 -> 5.9. The pre-strand original is kept as bottom_test1_prestrand.png." } }, "export": { "out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/test1", "gender": "Female", "set": "Test1", "note": "32 discrete strands from a 60 mm rigid waistband - Legs slot. Bound to the 4-SEGMENT skirt ring." }, "catalog": { "id": "bottom_test1_f", "displayName": "Bottom Test 1", "charisma": 0.1, "workSpeed": 0.02, "category": "ceremonial" }, "expect": { "penetration": { "depth_mm": 1.0, "max_verts": 0, "clips": [ "Idle", "Walk" ], "frames_per_clip": 6 }, "islands": { "count": 1, "mapped": { "0": { "verts": [ 2861, 3162 ], "tris": [ 3929, 4342 ], "z": [ 4.21, 11.26 ], "x": [ -2.73, 2.79 ] } } } }, "post_export": { "_why": "MANUAL, REQUIRED, ORDER-SENSITIVE. clothing/skirt_garment_weights.py owns skirt weights; garment_pipeline.py's own 2-segment strand_weights is overwritten by it and whichever runs LAST wins. Must run AFTER export, BEFORE import. Nothing in garment.py enforces this \u2014 use clothing/reproduce_test1.py, which reads this block.", "tool": "clothing/skirt_garment_weights.py", "body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin_SkirtRig_4seg.glb", "env": { "SKIRT_HEM_FREE": "0.02", "SKIRT_FOLLOW_MAX": "0.70", "SKIRT_CONTACT_R": "0.22", "SKIRT_FALLOFF": "0.14" }, "_why_env": "The tool's defaults (FOLLOW_MAX 0.20, HEM_FREE 0.55) were tuned against the SHORT continuous piupiu. This skirt hangs to y 0.451 with the knee at ~0.517, so HEM_FREE 0.55 put the whole knee region in the no-follow band and the knee came through the cloth. These values lift mean thigh follow 0.128 -> 0.698, which is what carries cloth WITH the knee. Env overrides were ADDED to that script by this session; its defaults are unchanged so other garments are unaffected.", "expect": "mean thigh follow ~0.70, NO dead strands (all 8 non-zero)" } }