feat: clothing lane, character sources, and DCC bridges
Bulk import of the working lanes that were living untracked on the PC. Content: - characters/ Lena/male body lanes, bakes, texture work, run logs - clothing/ garment pipeline, configs, gates, contract docs - garments/ MD-authored garment sources (.zprj/.zpac) - UAL-Lib/ Universal Animation Library 2 source (.blend/.fbx/.glb) - tools/ blender_bridge, iclone_bridge, md_bridge, tailor, glm_agent - docs/, plans/, dev/, .agents/plans/ Repo hygiene: - .gitattributes: LFS now covers .blend, .zprj, .zpac, .obj, .npy and the Reallusion .iAvatar/.ccAvatar/.ccRestore containers. Without this the ~3.8 GB in this commit would land as raw blobs. .png/.jpg are left out on purpose — ~250 are already tracked raw and converting them would rewrite every one without shrinking history. - .gitignore: exclude /accurig/ (~1 GB AccuRig program files, redistributable from Reallusion, nothing authored here) and /dev/null/ (git-lfs hook copies dropped by a `>/dev/null` redirect on Windows). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"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)"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"min_island_verts": 40,
|
||||
"name": "bottomTest2",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_skirt_v1_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": 4000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE",
|
||||
"hem_mm": 30,
|
||||
"_note_hem": "Short A-line mini: 30mm graded hip->hem clearance so leg swing stays inside the hem. Standard dress weights (no skirt bones) - this is a first-pass review asset on the STANDARD body; expect the known no-skirt-bones hem compression on deep leg swings."
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.15,
|
||||
0.25,
|
||||
0.75
|
||||
]
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/test2",
|
||||
"gender": "Female",
|
||||
"set": "Test2",
|
||||
"note": "Blue A-line mini skirt (lena_skirt_v1, MD-authored proof garment 2026-07-30) - Legs slot, dress-gradient weights on the standard body."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "bottom_test2_f",
|
||||
"displayName": "Bottom Test 2",
|
||||
"charisma": 0.06,
|
||||
"workSpeed": 0.05,
|
||||
"category": "casual"
|
||||
},
|
||||
"expect": {
|
||||
"penetration": {
|
||||
"depth_mm": 1.0,
|
||||
"max_verts": 0,
|
||||
"clips": [
|
||||
"Idle",
|
||||
"Walk"
|
||||
],
|
||||
"frames_per_clip": 6
|
||||
},
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [
|
||||
1851,
|
||||
2045
|
||||
],
|
||||
"tris": [
|
||||
3583,
|
||||
3961
|
||||
],
|
||||
"z": [
|
||||
8.2,
|
||||
11.7
|
||||
],
|
||||
"x": [
|
||||
-2.2,
|
||||
2.4
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"name": "bottom_test1",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_piupiu_v3_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin_SkirtRig_4seg.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "spine_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.028,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Bottom": {
|
||||
"slot": "Legs",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 8000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE",
|
||||
"hem_mm": 14
|
||||
},
|
||||
"weights": "skirt_bones",
|
||||
"color": [
|
||||
0.45,
|
||||
0.35,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/bottom_test1.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/test1",
|
||||
"gender": "Female",
|
||||
"set": "Test1",
|
||||
"note": "piupiu v3 (32 discrete flax strands from a 60mm rigid waistband) as the neutral-named bottom_test1_f. Exported against the 4-SEGMENT SkirtRig body so the skin carries all 32 skirt joints."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "bottom_test1_f",
|
||||
"displayName": "Bottom Test 1",
|
||||
"charisma": 0.1,
|
||||
"workSpeed": 0.02,
|
||||
"category": "ceremonial"
|
||||
},
|
||||
"expect": {
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [
|
||||
2900,
|
||||
3100
|
||||
],
|
||||
"tris": [
|
||||
3950,
|
||||
4300
|
||||
],
|
||||
"z": [
|
||||
4.4,
|
||||
11.2
|
||||
],
|
||||
"x": [
|
||||
-2.6,
|
||||
2.7
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"penetration": {
|
||||
"depth_mm": 1.0,
|
||||
"max_verts": 0,
|
||||
"clips": [
|
||||
"Idle",
|
||||
"Walk"
|
||||
],
|
||||
"frames_per_clip": 6
|
||||
}
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"_note": "NAMING: no cultural names on test garments (Jeremy 2026-07-31) - see ariki-game/src/Character/OutfitCatalog.cs class doc. Item id snake_case + gender suffix (bottom_test1_f), set id PascalCase (Test1) because it composes {Gender}_{Set}_{Slot}.gltf, folder lowercase (outfits/test1/).\n\nexpect.islands is MEASURED from work/bottom_test1/census.json (2026-07-31), not carried over from v2: 1 island, 3002 verts, 4120 tris, z 4.685..10.893, x -2.338..2.391 in PRE-SCALE census units (align.scale_* 0.1 applied later in `prepare`), i.e. hem 0.469 m and band top 1.089 m, matching the MD-side measurement. Bounds widened for tolerance, not tightened. v3 renumbered the MD patterns to Pattern_18856 / Pattern_20333 (v2's were Pattern_31891 / Pattern_32004) - README calls a config mapping the wrong islands 'the silent killer', so G2 was run first and passed on 1 island.\n\nSKIRT WEIGHTS HAVE ONE OWNER. garment_pipeline.py:876 strand_weights is hardcoded to two segments; this garment needs four. Run animation/clothing/skirt_garment_weights.py AFTER export - it reads segment count off the rig - or the game gets a 2-segment blend that reads as a rig regression."
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"min_island_verts": 40,
|
||||
"name": "capeTest1",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_cape_v2_garment.fbx",
|
||||
"align": {
|
||||
"top_bone": "neck_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.0,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Cape": {
|
||||
"slot": "Body",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 8000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.88,
|
||||
0.88,
|
||||
0.86
|
||||
],
|
||||
"_note_weights": "dress gradient: cape hem hangs to mid-thigh; nearest-face transfer alone would split the hem between legs in walk cycles, the pelvis gradient below hip keeps it hanging as one panel."
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/capetest1",
|
||||
"gender": "Female",
|
||||
"set": "CapeTest1",
|
||||
"note": "Broad mantle cape (lena_cape_v2, 2026-08-04, ref tools/tailor/references/cape_test1_ref.png) - Body-slot overlay like the feather cloak. Flat color until textured."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "cape_test1_f",
|
||||
"displayName": "Cape Test 1",
|
||||
"charisma": 0.12,
|
||||
"workSpeed": 0.01,
|
||||
"category": "ceremonial"
|
||||
},
|
||||
"expect": {
|
||||
"penetration": {
|
||||
"depth_mm": 1.0,
|
||||
"max_verts": 0,
|
||||
"clips": [
|
||||
"Idle",
|
||||
"Walk"
|
||||
],
|
||||
"frames_per_clip": 6
|
||||
},
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [
|
||||
4375,
|
||||
4835
|
||||
],
|
||||
"tris": [
|
||||
8480,
|
||||
9372
|
||||
],
|
||||
"z": [
|
||||
4.0,
|
||||
14.7
|
||||
],
|
||||
"x": [
|
||||
-2.65,
|
||||
2.77
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"name": "dress",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/garments/thin-unweld.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "neck_01",
|
||||
"scale_xy": 1.18,
|
||||
"scale_z": 0.95,
|
||||
"z_nudge": 0.03,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Dress": {
|
||||
"slot": "Body",
|
||||
"islands": [
|
||||
0,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13
|
||||
],
|
||||
"cut_above_z": 1.13,
|
||||
"tris": 4500,
|
||||
"planar_deg": 5,
|
||||
"bake_size": 1024,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.72,
|
||||
0.3,
|
||||
0.28
|
||||
],
|
||||
"cut_outboard_x": 0.26,
|
||||
"cut_outboard_z_above": 1.02,
|
||||
"prune_scraps_x": 0.2,
|
||||
"weld_band": [
|
||||
0.93,
|
||||
1.14,
|
||||
0.008
|
||||
]
|
||||
},
|
||||
"Bodice": {
|
||||
"slot": "Body",
|
||||
"type": "bodyshell",
|
||||
"z0": 1.1,
|
||||
"z1": 1.385,
|
||||
"bones": [
|
||||
"spine_01",
|
||||
"spine_02",
|
||||
"spine_03"
|
||||
],
|
||||
"offset_mm": 6,
|
||||
"tris": 1400,
|
||||
"planar_deg": 3,
|
||||
"bake_size": 512,
|
||||
"color": [
|
||||
0.72,
|
||||
0.3,
|
||||
0.28
|
||||
]
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/mddress",
|
||||
"gender": "Female",
|
||||
"set": "MDDress",
|
||||
"note": "v1 = one-piece long-sleeved dress (ISL_000 + center buttons). Jacket (ISL_001) + its buttons (ISL_002-009) deferred to v2."
|
||||
},
|
||||
"drop_materials": [
|
||||
"Material441866",
|
||||
"Material441989"
|
||||
],
|
||||
"min_island_verts": 40,
|
||||
"torso_boost": {
|
||||
"z0": 1.0,
|
||||
"z1": 1.1,
|
||||
"xy": 1.2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "pari",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_pari_v3_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "neck_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.0483,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Pari": {
|
||||
"slot": "Body",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 4000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.5,
|
||||
0.2,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/taniko.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/kapahaka",
|
||||
"gender": "Female",
|
||||
"set": "Kapahaka",
|
||||
"note": "T\u00c4\u0081niko bodice (pari) - Body slot"
|
||||
},
|
||||
"min_island_verts": 40
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "piupiu",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_piupiu_v2_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "spine_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.037,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Piupiu": {
|
||||
"slot": "Legs",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 8000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE",
|
||||
"hem_mm": 14
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.45,
|
||||
0.35,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/piupiu.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/kapahaka",
|
||||
"gender": "Female",
|
||||
"set": "Kapahaka",
|
||||
"note": "Flax skirt (piupiu) - Legs slot"
|
||||
},
|
||||
"min_island_verts": 40
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "piupiu_sb",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_piupiu_v2_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin_SkirtRig.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "spine_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.037,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Piupiu": {
|
||||
"slot": "Legs",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 8000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE",
|
||||
"hem_mm": 14
|
||||
},
|
||||
"weights": "skirt_bones",
|
||||
"color": [
|
||||
0.45,
|
||||
0.35,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/piupiu.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/kapahaka",
|
||||
"gender": "Female",
|
||||
"set": "KapahakaSB",
|
||||
"note": "Flax skirt (piupiu) on the skirt-boned SkirtRig Lena copy - Legs slot. Same garment as piupiu.json; differs only in body + weights mode."
|
||||
},
|
||||
"min_island_verts": 40
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"extends": "tests/extends_parent.json",
|
||||
"name": "extends_child",
|
||||
|
||||
"weld_threshold": 0.0009,
|
||||
|
||||
"align": {
|
||||
"z_nudge": 0.042,
|
||||
"xy_nudge": [0.01, 0.0]
|
||||
},
|
||||
|
||||
"parts": {
|
||||
"Skirt": {
|
||||
"islands": [2],
|
||||
"fit": { "offset_mm": 7 }
|
||||
},
|
||||
"Belt": {
|
||||
"slot": "Body",
|
||||
"islands": [3],
|
||||
"tris": 600
|
||||
}
|
||||
},
|
||||
|
||||
"export": { "set": "TestSetChild" },
|
||||
|
||||
"catalog": { "displayName": "Child Skirt" },
|
||||
|
||||
"_note": "Fixture for garment.py --selftest ONLY. Exercises: scalar override (weld_threshold), object merge-per-key (align.z_nudge overrides while top_bone/scale_* survive), array-replaces-whole (align.xy_nudge, parts.Skirt.islands), nested part override (parts.Skirt.fit.offset_mm changes, fit.mask survives), part addition (Belt), and inheritance of everything untouched."
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "extends_parent",
|
||||
"source": "C:/parent/source.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "spine_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.037,
|
||||
"xy_nudge": [0.0, 0.0]
|
||||
},
|
||||
"parts": {
|
||||
"Skirt": {
|
||||
"slot": "Legs",
|
||||
"islands": [0, 1],
|
||||
"tris": 8000,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "surface",
|
||||
"color": [0.45, 0.35, 0.15]
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/testset",
|
||||
"gender": "Female",
|
||||
"set": "TestSetParent"
|
||||
},
|
||||
"catalog": {
|
||||
"id": "testset_legs_f",
|
||||
"displayName": "Parent Skirt",
|
||||
"charisma": 0.05,
|
||||
"workSpeed": 0.04,
|
||||
"category": "casual"
|
||||
},
|
||||
"expect": {
|
||||
"islands": { "count": 2 }
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"_note": "Fixture for garment.py --selftest ONLY. Not a real garment; never built."
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "piupiu_sb",
|
||||
"_note": "G2 self-test config (agent B lane). Mirrors configs/piupiu_sb.json's parts/export, plus an expect.islands block whose bounds were DERIVED from the real clothing/work/piupiu_sb/census.json (island 0: verts 3620, tris 7104, z [5.184, 11.126]). Run: python clothing/gates/g2_census.py --config clothing/configs/tests/g2_selftest.json --work clothing/work/piupiu_sb. Bounds are in census (pre-align) units, not metres — align.scale_z 0.1 is applied later in prepare.",
|
||||
"parts": {
|
||||
"Piupiu": {
|
||||
"slot": "Legs",
|
||||
"islands": [0],
|
||||
"tris": 8000
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/kapahaka",
|
||||
"gender": "Female",
|
||||
"set": "KapahakaSB"
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"expect": {
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [3550, 3700],
|
||||
"tris": [7000, 7200],
|
||||
"z": [5.0, 11.3],
|
||||
"z_span": [5.8, 6.05],
|
||||
"x": [-2.5, 2.6]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"name": "pari",
|
||||
"_note": "G5/G3 validation config (agent C). Mirrors configs/pari.json and adds an expect block. Ground truth: the neckline gapes off the sternum in walk/dance, so a correct G5 FAILS on the gape band here while --rest (G3) passes.",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_pari_v3_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": { "top_bone": "neck_01", "scale_xy": 0.1, "scale_z": 0.1, "z_nudge": 0.0483, "xy_nudge": [0.0, 0.0] },
|
||||
"parts": {
|
||||
"Pari": {
|
||||
"slot": "Body",
|
||||
"islands": [0],
|
||||
"tris": 4000,
|
||||
"planar_deg": 5,
|
||||
"fit": { "target": "BODY_SHELL", "mask": "full", "offset_mm": 3, "wrap_mode": "OUTSIDE" },
|
||||
"weights": "dress",
|
||||
"color": [0.5, 0.2, 0.15],
|
||||
"texture": "../tools/tailor/textures/taniko.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/kapahaka",
|
||||
"gender": "Female",
|
||||
"set": "Kapahaka",
|
||||
"note": "Taniko bodice (pari) - Body slot"
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"expect": {
|
||||
"penetration": {
|
||||
"max_verts": 0,
|
||||
"depth_mm": 1.0,
|
||||
"clips": ["Idle", "Walk", "Dance"],
|
||||
"frames_per_clip": 6,
|
||||
"gape": {
|
||||
"Pari": {
|
||||
"_note": "Calibrated by scanning body exposure in 3 cm z-slices (agent C). The pari is a scoop-neck crop top: its hem sits at z~1.06 and the neckline scoop bottoms out at z~1.325, so z 1.15-1.30 is the strip the garment MUST cover. band_x clips the arms out of the band (they fall in the same z range and are never covered, which swamped a naive band). gap_mm 0 = score only rays that miss the fabric entirely.",
|
||||
"band_z": [1.15, 1.30],
|
||||
"band_x": [-0.11, 0.11],
|
||||
"facing": [0.0, -1.0, 0.0],
|
||||
"facing_min": 0.35,
|
||||
"ray_mm": 50,
|
||||
"gap_mm": 0,
|
||||
"max_exposed_verts": 60,
|
||||
"max_exposed_delta": 25
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "piupiu",
|
||||
"_note": "G5/G3 validation config (agent C). Mirrors configs/piupiu.json and adds an expect block. Ground truth: a thigh punches through this skirt in motion, so a correct G5 FAILS here while --rest (G3) passes.",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_piupiu_v2_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": { "top_bone": "spine_01", "scale_xy": 0.1, "scale_z": 0.1, "z_nudge": 0.037, "xy_nudge": [0.0, 0.0] },
|
||||
"parts": {
|
||||
"Piupiu": {
|
||||
"slot": "Legs",
|
||||
"islands": [0],
|
||||
"tris": 8000,
|
||||
"planar_deg": 5,
|
||||
"fit": { "target": "BODY_SHELL", "mask": "full", "offset_mm": 3, "wrap_mode": "OUTSIDE", "hem_mm": 14 },
|
||||
"weights": "dress",
|
||||
"color": [0.45, 0.35, 0.15],
|
||||
"texture": "../tools/tailor/textures/piupiu.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/kapahaka",
|
||||
"gender": "Female",
|
||||
"set": "Kapahaka",
|
||||
"note": "Flax skirt (piupiu) - Legs slot"
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"expect": {
|
||||
"penetration": {
|
||||
"max_verts": 0,
|
||||
"depth_mm": 1.0,
|
||||
"clips": ["Idle", "Walk", "Dance"],
|
||||
"frames_per_clip": 6,
|
||||
"max_verts_rest": 2,
|
||||
"_note_rest": "The shipped piupiu has ONE 8 mm nick in the fitting pose; the pose-dependent defect is 78-197 verts up to 93 mm. A rest budget of 2 keeps G3 honest about the fit while letting the posed sweep own the real signal."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"name": "md_pari_backfill",
|
||||
"_note": [
|
||||
"BACKFILL PROOF, not a shipping config. Transcribes tools/tailor/md_pari.py (pari v2,",
|
||||
"the kapa haka taniko bodice) into the `md` block schema so draft_garment.py can be",
|
||||
"diffed call-for-call against the hand-written original. Semantic differences must be",
|
||||
"zero. It carries no Blender (`align`/`parts`) blocks -- MD stage + gate G1 only.",
|
||||
"md.exports is deliberately empty because md_pari.py never exported; a shipping config",
|
||||
"sets exports to all four with a versioned export_basename (see md.export_basename).",
|
||||
"md.snapshot is md_pari.py's tempfile path verbatim; a shipping config points it at",
|
||||
"work/<name>/qc/drape.png. expect.drape.snapshot overrides it here so G1 can be run",
|
||||
"against the committed review render tools/tailor/screenshots/lena_pari_v2.png."
|
||||
],
|
||||
|
||||
"md": {
|
||||
"reset": "new_project",
|
||||
"avatar_fbx": "C:/Users/Jeremy/tinqs/animation/tools/tailor/avatar/Lena_QuatSkin_Avatar.fbx",
|
||||
"avatar_scale": 10.0,
|
||||
"add_arrangement_points": true,
|
||||
"auto_translate": true,
|
||||
|
||||
"zfab": "C:/Users/Public/Documents/MarvelousDesigner/New Assets/Fabric/(Default for Simulation).zfab",
|
||||
"texture": "C:/Users/Jeremy/tinqs/animation/tools/tailor/textures/taniko.png",
|
||||
"texture_dpi": 96.012,
|
||||
|
||||
"panels": [
|
||||
{
|
||||
"name": "front",
|
||||
"note": "tank-style, shoulder->waist 350 tall, 550/panel (snug over 1083 bust), straps 90 wide; scoop 105 deep so its floor = band top ~ z 1.30",
|
||||
"dx": 0.0,
|
||||
"points": [
|
||||
[65.0, 325.0], [155.0, 350.0], [205.0, 271.25], [275.0, 245.0],
|
||||
[345.0, 271.25], [395.0, 350.0], [485.0, 325.0],
|
||||
[550.0, 185.0], [550.0, 0.0], [0.0, 0.0], [0.0, 185.0]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"note": "same block, shallower 45 scoop; lines 0 shoulder_L | 1-4 scoop (open) | 5 shoulder_R | 6 armhole_R | 7 side_R | 8 hem | 9 side_L | 10 armhole_L",
|
||||
"dx": 800.0,
|
||||
"points": [
|
||||
[65.0, 325.0], [155.0, 350.0], [205.0, 316.25], [275.0, 305.0],
|
||||
[345.0, 316.25], [395.0, 350.0], [485.0, 325.0],
|
||||
[550.0, 185.0], [550.0, 0.0], [0.0, 0.0], [0.0, 185.0]
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
"seams": [
|
||||
{ "a": "front", "b": "back", "lines": [0, 5, 7, 9] }
|
||||
],
|
||||
|
||||
"arrangements": [
|
||||
{ "panel": "front", "point": "Body_Front_Center_1", "offset": [50, 55, 50] },
|
||||
{ "panel": "back", "point": "Body_Back_Center_1", "offset": [0, 55, 50] }
|
||||
],
|
||||
|
||||
"sim": {
|
||||
"strengthen": false,
|
||||
"settle_frames": 300,
|
||||
"relax_frames": 0
|
||||
},
|
||||
|
||||
"snapshot": "C:/Users/Jeremy/AppData/Local/Temp/tinqs_md_pari_v2.png",
|
||||
|
||||
"export_dir": "C:/Users/Jeremy/tinqs/animation/tools/tailor",
|
||||
"export_basename": "lena_pari_v3",
|
||||
"exports": []
|
||||
},
|
||||
|
||||
"expect": {
|
||||
"bands": {
|
||||
"taniko": {
|
||||
"top_m": 1.31,
|
||||
"bottom_m": 1.05,
|
||||
"tol_m": 0.03,
|
||||
"from": "cover"
|
||||
}
|
||||
},
|
||||
"drape": {
|
||||
"snapshot": "C:/Users/Jeremy/tinqs/animation/tools/tailor/screenshots/lena_pari_v2.png",
|
||||
"height_m": 1.777,
|
||||
"min_row_cover": 0.4,
|
||||
"z_range": [0.3, 1.6],
|
||||
"mask": {
|
||||
"mode": "colors",
|
||||
"tol": 30,
|
||||
"_note": "taniko palette: three reds, the black outline, two cream whites",
|
||||
"colors": [
|
||||
[173, 37, 39], [130, 26, 29], [146, 29, 31],
|
||||
[36, 32, 32], [194, 186, 168], [230, 225, 215]
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"name": "md_piupiu_backfill",
|
||||
"_note": [
|
||||
"BACKFILL PROOF, not a shipping config. Transcribes tools/tailor/md_piupiu.py (piupiu",
|
||||
"v2, the kapa haka flax skirt) into the `md` block schema. Exercises the half of the",
|
||||
"schema md_pari_backfill.json does not: the strengthen/relax two-pass settle and the",
|
||||
"two-point A-line panel. Semantic differences against the original must be zero.",
|
||||
"md.exports is empty because md_piupiu.py never exported; the v2 .zprj/.fbx/.obj/.zpac",
|
||||
"on disk were produced by separate --exec calls."
|
||||
],
|
||||
|
||||
"md": {
|
||||
"reset": "new_project",
|
||||
"avatar_fbx": "C:/Users/Jeremy/tinqs/animation/tools/tailor/avatar/Lena_QuatSkin_Avatar.fbx",
|
||||
"avatar_scale": 10.0,
|
||||
"add_arrangement_points": true,
|
||||
"auto_translate": true,
|
||||
|
||||
"zfab": "C:/Users/Public/Documents/MarvelousDesigner/New Assets/Fabric/(Default for Simulation).zfab",
|
||||
"texture": "C:/Users/Jeremy/tinqs/animation/tools/tailor/textures/piupiu.png",
|
||||
"texture_dpi": 43.307,
|
||||
|
||||
"panels": [
|
||||
{
|
||||
"name": "front",
|
||||
"note": "length 600 (waist 1.05 -> hem 0.45); tension waist 500/panel (< 1095 hip circ, no elastic); A-line hem 820",
|
||||
"dx": 0.0,
|
||||
"points": [[160.0, 600.0], [660.0, 600.0], [820.0, 0.0], [0.0, 0.0]]
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"note": "identical block; lines 0 waist | 1 side_R | 2 hem | 3 side_L",
|
||||
"dx": 1000.0,
|
||||
"points": [[160.0, 600.0], [660.0, 600.0], [820.0, 0.0], [0.0, 0.0]]
|
||||
}
|
||||
],
|
||||
|
||||
"seams": [
|
||||
{ "a": "front", "b": "back", "lines": [1] },
|
||||
{ "a": "front", "b": "back", "lines": [3] }
|
||||
],
|
||||
|
||||
"arrangements": [
|
||||
{ "panel": "front", "point": "Body_Front_Waist", "offset": [50, 30, 50] },
|
||||
{ "panel": "back", "point": "Body_Back_Waist", "offset": [0, 30, 50] }
|
||||
],
|
||||
|
||||
"sim": {
|
||||
"strengthen": true,
|
||||
"settle_frames": 250,
|
||||
"relax_frames": 50
|
||||
},
|
||||
|
||||
"snapshot": "C:/Users/Jeremy/AppData/Local/Temp/tinqs_md_piupiu_v2.png",
|
||||
|
||||
"export_dir": "C:/Users/Jeremy/tinqs/animation/tools/tailor",
|
||||
"export_basename": "lena_piupiu_v2",
|
||||
"exports": []
|
||||
},
|
||||
|
||||
"expect": {
|
||||
"bands": {
|
||||
"flax": {
|
||||
"top_m": 1.05,
|
||||
"bottom_m": 0.45,
|
||||
"tol_m": 0.03,
|
||||
"bottom_tol_m": 0.04,
|
||||
"from": "cover"
|
||||
}
|
||||
},
|
||||
"drape": {
|
||||
"snapshot": "C:/Users/Jeremy/tinqs/animation/tools/tailor/screenshots/lena_piupiu_v2.png",
|
||||
"height_m": 1.777,
|
||||
"min_row_cover": 0.4,
|
||||
"z_range": [0.2, 1.3],
|
||||
"mask": {
|
||||
"mode": "colors",
|
||||
"tol": 24,
|
||||
"_note": "flax strand yellows + the black geometric banding; tol 24 (not 30) keeps the body's baked-in beige underwear out of the mask",
|
||||
"colors": [
|
||||
[184, 152, 104], [168, 136, 104], [200, 168, 136], [152, 136, 88],
|
||||
[184, 168, 120], [200, 184, 136], [24, 24, 24], [40, 24, 24]
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"name": "piupiu_sb_test",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_piupiu_v2_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin_SkirtRig.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "spine_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.037,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Piupiu": {
|
||||
"slot": "Legs",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 8000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE",
|
||||
"hem_mm": 14
|
||||
},
|
||||
"weights": "skirt_bones",
|
||||
"color": [
|
||||
0.45,
|
||||
0.35,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/piupiu.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/animation/clothing/work/piupiu_sb_test/export",
|
||||
"gender": "Female",
|
||||
"set": "KapahakaSBTest",
|
||||
"note": "SCRATCH export target. Deliberately NOT the shipped kapahaka folder and NOT the real KapahakaSB set id - see _note."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "kapahaka_legs_sbtest_f",
|
||||
"displayName": "Piupiu (skirt bones, test)",
|
||||
"charisma": 0.1,
|
||||
"workSpeed": 0.02,
|
||||
"category": "ceremonial"
|
||||
},
|
||||
"expect": {
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [
|
||||
3400,
|
||||
3800
|
||||
],
|
||||
"tris": [
|
||||
6800,
|
||||
7400
|
||||
],
|
||||
"z": [
|
||||
5.0,
|
||||
11.5
|
||||
],
|
||||
"x": [
|
||||
-2.6,
|
||||
2.9
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"penetration": {
|
||||
"depth_mm": 1.0,
|
||||
"max_verts": 0,
|
||||
"clips": [
|
||||
"Idle",
|
||||
"Walk"
|
||||
],
|
||||
"frames_per_clip": 6
|
||||
}
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"_note": "TEST FIXTURE for the unified clothing pipeline (garment.py + gates). Geometry/align/parts are a byte-copy of configs/piupiu_sb.json; everything else differs on purpose.\n\nDEFUSED 2026-07-31 (integration): export.out_dir used to point at the LIVE ariki-game/assets/quaternius/outfits/kapahaka and export.set was the real 'KapahakaSB', so a --to export run would have OVERWRITTEN the shipped Female_KapahakaSB_Legs.gltf. out_dir is now this config's own work dir and the set id is 'KapahakaSBTest', which collides with nothing and is deliberately absent from OutfitCatalog.cs (so G8 warns 'not registered' - that is the correct answer for a test set, and the run is safe to do end to end).\n\nexpect.islands is the measured truth from work/piupiu_sb_test/census.json: 1 island, 3620 verts, 7104 tris, z 5.184..11.126, x -2.228..2.517, in PRE-SCALE census units (align.scale_* 0.1 is applied later in `prepare`) - bounds are widened for tolerance, not tightened.\n\nexpect.penetration carries the contract defaults and IS EXPECTED TO FAIL at the `skin` stage: this garment is the shipped thigh-through-the-piupiu bug, and reproducing it headlessly is the point of G5. At `fit` (G5 --rest, written as qc/g3.json) the same block FAILS on a genuine 1-vert / 8.0mm rest-pose nick in 20_fit.blend - a real finding, deliberately not tuned away; set max_verts_rest: 1 here if a 1-vert rest budget is ever ruled acceptable."
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"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": "topTest1",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_pari_v4_garment.fbx",
|
||||
"align": {
|
||||
"top_bone": "neck_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.0,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Top": {
|
||||
"slot": "Body",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 4000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.5,
|
||||
0.2,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/top_test1.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/test1",
|
||||
"gender": "Female",
|
||||
"set": "Test1",
|
||||
"note": "Flat front/back re-cut bodice - Body slot."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "top_test1_f",
|
||||
"displayName": "Top Test 1",
|
||||
"charisma": 0.14,
|
||||
"workSpeed": 0.01,
|
||||
"category": "ceremonial"
|
||||
},
|
||||
"expect": {
|
||||
"penetration": {
|
||||
"depth_mm": 1.0,
|
||||
"max_verts": 0,
|
||||
"clips": [
|
||||
"Idle",
|
||||
"Walk"
|
||||
],
|
||||
"frames_per_clip": 6
|
||||
},
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [
|
||||
1301,
|
||||
1438
|
||||
],
|
||||
"tris": [
|
||||
2511,
|
||||
2776
|
||||
],
|
||||
"z": [
|
||||
10.42,
|
||||
14.82
|
||||
],
|
||||
"x": [
|
||||
-2.43,
|
||||
2.38
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"min_island_verts": 40,
|
||||
"name": "topTest2",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_tee_v1_garment.fbx",
|
||||
"align": {
|
||||
"top_bone": "neck_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.0,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Top": {
|
||||
"slot": "Body",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 4000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.85,
|
||||
0.85,
|
||||
0.85
|
||||
]
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/test2",
|
||||
"gender": "Female",
|
||||
"set": "Test2",
|
||||
"note": "White tank/tee (lena_tee_v1, first MD-authored proof garment 2026-07-30) - Body slot. Flat color until a texture is authored."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "top_test2_f",
|
||||
"displayName": "Top Test 2",
|
||||
"charisma": 0.06,
|
||||
"workSpeed": 0.05,
|
||||
"category": "casual"
|
||||
},
|
||||
"expect": {
|
||||
"penetration": {
|
||||
"depth_mm": 1.0,
|
||||
"max_verts": 0,
|
||||
"clips": [
|
||||
"Idle",
|
||||
"Walk"
|
||||
],
|
||||
"frames_per_clip": 6
|
||||
},
|
||||
"islands": {
|
||||
"count": 1,
|
||||
"mapped": {
|
||||
"0": {
|
||||
"verts": [
|
||||
2176,
|
||||
2406
|
||||
],
|
||||
"tris": [
|
||||
4227,
|
||||
4671
|
||||
],
|
||||
"z": [
|
||||
9.9,
|
||||
14.9
|
||||
],
|
||||
"x": [
|
||||
-2.2,
|
||||
2.25
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"name": "top_test1",
|
||||
"source": "C:/Users/Jeremy/tinqs/animation/tools/tailor/lena_pari_v4_garment.fbx",
|
||||
"body": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/derived-bodies/Ariki_Female_QuatSkin_SkirtRig_4seg.glb",
|
||||
"weld_threshold": 0.0006,
|
||||
"shell_mm": 4,
|
||||
"align": {
|
||||
"top_bone": "neck_01",
|
||||
"scale_xy": 0.1,
|
||||
"scale_z": 0.1,
|
||||
"z_nudge": 0.0483,
|
||||
"xy_nudge": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parts": {
|
||||
"Top": {
|
||||
"slot": "Body",
|
||||
"islands": [
|
||||
0
|
||||
],
|
||||
"tris": 4000,
|
||||
"planar_deg": 5,
|
||||
"fit": {
|
||||
"target": "BODY_SHELL",
|
||||
"mask": "full",
|
||||
"offset_mm": 3,
|
||||
"wrap_mode": "OUTSIDE"
|
||||
},
|
||||
"weights": "dress",
|
||||
"color": [
|
||||
0.5,
|
||||
0.2,
|
||||
0.15
|
||||
],
|
||||
"texture": "../tools/tailor/textures/top_test1.png"
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"out_dir": "C:/Users/Jeremy/tinqs/ariki-game/assets/quaternius/outfits/test1",
|
||||
"gender": "Female",
|
||||
"set": "Test1",
|
||||
"note": "pari v4 (twisted side seam fixed with (True,True), tapered 95mm, symmetric arrangement) as the neutral-named top_test1_f. Body slot, no skirt bones."
|
||||
},
|
||||
"catalog": {
|
||||
"id": "top_test1_f",
|
||||
"displayName": "Top Test 1",
|
||||
"charisma": 0.14,
|
||||
"workSpeed": 0.01,
|
||||
"category": "ceremonial"
|
||||
},
|
||||
"min_island_verts": 40,
|
||||
"_note": "NAMING: no cultural names on test garments (Jeremy 2026-07-31) - see ariki-game/src/Character/OutfitCatalog.cs class doc.\n\nBody is the *_SkirtRig_4seg.glb copy purely so the top and bottom of this set are fitted against the SAME body the bed spawns; a Body-slot garment uses weights=dress and never touches the skirt ring, so the extra 32 joints are inert here.\n\nNo `expect` block yet - the pari has no measured penetration baseline, and its known open defect is the in-game neckline gape, which did NOT reproduce in the Blender checkpoint (so it is G6/in-game territory: attach, material or LOD, not authoring)."
|
||||
}
|
||||
Reference in New Issue
Block a user