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>
4.5 KiB
Handoff: re-atlased nude Lena — lena_nude_decimated_glb_v02.glb
2026-08-06. Jeremy asked for the decimated nude body re-atlased and versioned. This is a UV + texture change only: the geometry is byte-for-byte the v01 mesh.
The file
characters/female/lena_nude/lena_nude_decimated_glb_v02.glb
| sha256 | cd3d53550470ae5a1958dc473ce11793f746b13f78ac911e6d426b6f7b9f5825 |
| parent | lena_nude_decimated_glb_v01.glb |
| recipe | hires_claude/24_seams.py → hires_claude/31_reatlas.py |
| mesh | 31,964 v / 64,957 tris in Blender — identical to v01 |
| exported verts | 42,980 (v01: 46,810) — the new layout needs fewer seam splits |
| maps | basecolor + normal + rm embedded, 4096², JPEG q95, correct colorspaces |
| rig | none — unrigged, transforms applied |
Rebuild:
blender --background --python 24_seams.py -- ../lena_nude_decimated_glb_v01.glb atlas_v02
blender --background --python 31_reatlas.py -- atlas_v02/seamed.blend atlas_v02 \
../lena_nude_decimated_glb_v02.glb
What changed
| Tripo atlas (v01) | new atlas (v02) | |
|---|---|---|
| UV islands | 5,870 | 968 |
| charts holding 99% of the area | 84 | 14 |
| atlas coverage | 62.0% | 68.6% |
| texel-density spread | 1.8× | 1.00× |
| per-triangle area-scale p95 / p99 | — | 1.77 / 2.27 |
The 14 charts are torso, head, two arms, two legs, two hands (back + palm each) and two feet (upper + sole each). Seams run up the back midline, the back of each arm and the inner leg, with rings at neck, shoulder, wrist, hip and ankle — every landmark measured off the mesh's own cross-section radius profiles, so the rules port to any density.
It looks the same, on purpose. Five matched views diff at mean |Δ| 0.0012, p99 0.0118, with
0.19% of body pixels over 0.05 (33_ab.py). Her original tones are untouched — this pass bought a
paintable, uniform-density layout, not a new look.
Three traps this pass hit, so you don't
- Colorspace is not cosmetic.
image.pixelsreturns linear values for an sRGB image and raw values for a Non-Color one, and re-encodes the same way on save. The normal and rm maps are Non-Color; writing them into default (sRGB) images gamma-encoded them, so 0.5 came back as 0.21 — every stored normal became a large false perturbation and she rendered dark and wet-plastic. New maps must inheritcolorspace_settings.namefrom their source. - Use the minimum-stretch solver, not angle-based. ABF is conformal: it preserves angles and
is free to crush area. At her folds it squashed 4,502 triangles (3.7% of her surface) below one
texel, and they came out untextured.
method='MINIMUM_STRETCH'took per-triangle area-scale p05 from 0.03 to 0.33 and the untextured count from 4,502 to 569 (0.56%, all genuine sub-texel slivers absorbed by the 16 px padding pass). - Watch the LOW tail of the distortion stat. p95/p99 measure stretching; it was p05 = 0.03 — crushing — that was losing whole patches. I read past it twice.
Also tried and rejected: splitting the 1,649 non-manifold edges before unwrapping. It cost +3,512 verts and made the collapsed-face count worse (4,502 → 5,482), because the collapse was a solver problem, not a topology one.
Still broken, and not from this pass
The ragged grey tears on the face, across the underbust, and as flecks down the arms and shins
are in v01 already — I rendered v01 through the same script to confirm, and they are identical in
position and shape (hires_claude/beauty_input_v01/ vs beauty_atlas_v02/). They are the 835
boundary edges / dangling flaps the v01 handoff lists as a known defect. A re-atlas cannot fix
geometry. They need mesh surgery before this body ships.
The other v01 defects carry over untouched: 25 backfacing triangles, the head still being original
Tripo output, and the glossy rm map.
What this does NOT do
Jeremy's stated goal is to keep her original texture and replace only the breast and underwear region. This pass deliberately does not touch colour — it only rehouses it. The re-authoring step (a gradient-domain fill pinned to her surrounding skin at the boundary, so the old bra/briefs outline cannot ghost) is the next stage, and it is much easier now that the charts are anatomical and uniform-density.
Note that keeping her original texture keeps its known incoherence: her feet read 0.11 luma darker
and 50% redder than her belly, and the rosy chest V remains. Measured in
hires_claude/21_seam_probe.py; see the lena-tripo-atlas-chart-soup note.