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,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."
|
||||
}
|
||||
Reference in New Issue
Block a user