Files
animation/characters/female/lena_nude/HANDOFF_reatlas_v02.md
T
jeremy 3ba86b2ea8 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>
2026-08-06 15:55:43 -07:00

4.5 KiB
Raw Blame History

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.pyhires_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

  1. Colorspace is not cosmetic. image.pixels returns 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 inherit colorspace_settings.name from their source.
  2. 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).
  3. 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.