Files
jeremy c12c4f156c feat(lena): v02 lane recipes + the archival full-res master
The v02 chain, which exists because bisecting the shard-eye defect proved it lives in
the hires MASTER rather than in any v02 step: the early heal chain ran whole-mesh welds
and reset custom split normals, and the eye/lash shells only read as an eye through
Tripo's authored normals. Every descendant inherits it, including the shipped body.

  48_decimate_headsafe  body/hands only, head bit-identical (feathered ramp)
  49_seams_v02          24_seams with a density-aware hip landmark — the v01 rule fired
                        at u=0.610, mid-belly, on the head-protected vert count
  50_seams_headuv       body-only unwrap; the head KEEPS its original Tripo charts.
                        SLIM collapsed the undecimated lash/brow slivers to points and
                        ANGLE_BASED packed at half v01's texel density; the face was
                        the best-mapped region of the source atlas, so it is reused
  51_reatlas_v02        31_reatlas + centroid splats for sub-texel triangles — the
                        skipped set IS the lashes, which rendered as grey glass
  52_head_transplant    the PRISTINE ORIGINAL head onto the decimated nude body
  53_rig_transfer       54_crotch_refill

55_fullres_v02.blend is pinned in .lanekeep as THE archival master: full-res nude body
+ pristine original head, crotch refill and texture despeckle applied, 883,404 v /
1,761,640 f. It supersedes 34_v04 as the lane root (34_v04's head has the shard eyes).

Also: tools/graft_hands.py, the Marvelous Designer hunter-skirt configs v1-v8, the
hunter cloth texture generator, and Mako's measurement card.

Per .agents/rules/working-files.md the per-attempt .blend files under work/lena/v02
are SCRATCH ("never committed") — the .py recipes here are the history and regenerate
any of them from the pinned master. See the ignore rule landing next.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 18:53:17 -07:00

222 lines
7.2 KiB
JSON

{
"name": "hunter_skirt_v5",
"_worksheet": {
"block": "aline_skirt (generated), panel outline then hand-shaped",
"reference": "male-clothing-hunter-gpt-v2{,-side,-back}.png",
"measured_targets": {
"waist_top_m": 1.075,
"solid_hem_m": 0.685,
"fray_tips_m": 0.65,
"method": "garment band located by warm-dark mask in all 3 reference views, expressed as fraction of figure height (back 0.598/0.373, side 0.610/0.396), averaged and projected onto Lena's 1.777 m",
"flare_measured": 1.38,
"flare_used": 1.45,
"flare_note": "reference flares 1.38 (widths 98->134 px back, 102->142 px front); raised to 1.45 because 1.38 clears Lena's 109.5 cm hip by only 2.7 cm and a binding hem rides up"
},
"why_shaped": "v1 and v2 both failed in SIMULATION while their pre-sim snapshots were clean, which is what proved the pattern and arrangement were right. The straight-sided trapezoid takes its waist from 0.91 x HIP (99.6 cm), but at z=1.075 Lena measures only 71.5 cm -- 28 cm of surplus. v1 (no elastic) slid to the crotch and folded inside out; v2 cinched it with elastic but only at frame 250, by which time the surplus had already buckled into a flap that flipped through itself. Lena's 42 cm hip-to-waist drop over 13 cm of height is the root cause: no straight-sided cone can both grip a 71.5 cm waist and clear a 109.5 cm hip (it would need a 209 cm hem). A curved side seam solves it the way real tailoring does.",
"ease_profile_cm": {
"waist_z1.075": -3.5,
"z1.010": 5.0,
"hip_z0.945": 6.1
},
"hem_circ_cm": 126.0,
"silhouette_note": "hem/waist ratio is 1.85 vs the reference's measured 1.38. The extra fullness is forced by Lena's hips, not a drafting choice -- the same garment on the male reference body hangs nearly straight.",
"seam_pairing_discovery": "CROSS-PAIRED sides, front RIGHT <-> back LEFT: [(1,7),(2,6),(3,5),(7,1),(6,2),(5,3)] with (False, False). Established by a 4-cell sweep with the failing case as control (scratchpad/seams/seam_sheet.png): same-index (True,True) -- the rule in the marvelous-designer skill and what blocks.py emits -- COLLAPSES this panel, and so does same-index (False,False). Both cross-paired variants hold. The skill's rule ('identical panels need (True,True) on same-index sides') is derived from a trapezoid whose side is a SINGLE edge; reversal emulates mirroring there. With a 3-segment shaped side seam it does not, and the unrolled-cylinder truth takes over: front spans 0-180 deg and back 180-360, so front's right edge meets back's LEFT.",
"failure_history": "v1 no elastic: slid to the crotch, folded inside out. v2 elastic at frame 250: too late, surplus had already buckled. v3 shaped panel but negative waist clearance: solver ejected the penetrating cloth, blew up by frame 20 in BOTH stiff and soft (that symmetry is what ruled out fabric stiffness). v4 clearances fixed but still collapsed -> isolated to seam pairing. Every failure had a CLEAN pre-sim snapshot, which is what kept pointing away from the pattern and at the sim."
},
"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": "tools/tailor/textures/hunter_cloth.png",
"texture_dpi": 130.0,
"panels": [
{
"name": "front",
"dx": 0.0,
"note": "SHAPED skirt panel with POSITIVE clearance everywhere above the hip. Waist half 370 (+2.5 cm ease -- v4's -3.5 cm started the cloth INSIDE the body and MD ejected it), 468 at y=325 (+3.0), 575 at the hip y=260 (+5.5), 625 at the hem. Lines: 0 waist | 1-3 side_R | 4 hem | 5-7 side_L.",
"points": [
[
127.5,
390.0
],
[
497.5,
390.0
],
[
546.5,
325.0
],
[
600.0,
260.0
],
[
625.0,
0.0
],
[
0.0,
0.0
],
[
25.0,
260.0
],
[
78.5,
325.0
]
]
},
{
"name": "back",
"dx": 875.0,
"note": "identical panel offset by dx (NOT mirrored) -> sides must CROSS-pair",
"points": [
[
127.5,
390.0
],
[
497.5,
390.0
],
[
546.5,
325.0
],
[
600.0,
260.0
],
[
625.0,
0.0
],
[
0.0,
0.0
],
[
25.0,
260.0
],
[
78.5,
325.0
]
]
}
],
"seams": [
{
"a": "front",
"a_line": 1,
"b": "back",
"b_line": 7,
"reverse_a": false,
"reverse_b": false
},
{
"a": "front",
"a_line": 2,
"b": "back",
"b_line": 6,
"reverse_a": false,
"reverse_b": false
},
{
"a": "front",
"a_line": 3,
"b": "back",
"b_line": 5,
"reverse_a": false,
"reverse_b": false
},
{
"a": "front",
"a_line": 7,
"b": "back",
"b_line": 1,
"reverse_a": false,
"reverse_b": false
},
{
"a": "front",
"a_line": 6,
"b": "back",
"b_line": 2,
"reverse_a": false,
"reverse_b": false
},
{
"a": "front",
"a_line": 5,
"b": "back",
"b_line": 3,
"reverse_a": false,
"reverse_b": false
}
],
"arrangements": [
{
"panel": "front",
"point": "Leg_Skirt_Front",
"offset": [
50,
92,
50
]
},
{
"panel": "back",
"point": "Leg_Skirt_Back",
"offset": [
0,
92,
50
]
}
],
"sim": {
"strengthen": true,
"settle_frames": 150,
"relax_frames": 50,
"elastic": [
{
"panel": "front",
"line": 0,
"total_length": 350.0
},
{
"panel": "back",
"line": 0,
"total_length": 350.0
}
],
"elastic_frames": 60
},
"cam_viewpoint": 2,
"presim_snapshot": "C:/Users/Jeremy/AppData/Local/Temp/tinqs_md_hunter_skirt_v5_presim.png",
"snapshot": "C:/Users/Jeremy/AppData/Local/Temp/tinqs_md_hunter_skirt_v5.png",
"back_snapshot": "C:/Users/Jeremy/AppData/Local/Temp/tinqs_md_hunter_skirt_v5_back.png",
"export_dir": "C:/Users/Jeremy/tinqs/animation/tools/tailor",
"export_basename": "lena_hunter_skirt_v5",
"exports": []
},
"expect": {
"bands": {
"hunter_skirt_v2": {
"top_m": 1.075,
"bottom_m": 0.685,
"tol_m": 0.03,
"bottom_tol_m": 0.04,
"from": "cover"
}
}
}
}