feat(characters): ship lena_leafbikini_base_v01 as female Ariki default

Lena with the leaf bikini sculpted into the mesh — a separate character
descending from her own Tripo original, not a lena_base_v02. Full-res
(1,029,360 v) at 1.777 m, now Ariki_Female_QuatSkin.glb + LOD1.

First nearest-surface graft in the rig lane: AccuRig had to be fed a 20:1
decimated bait, so the index-exact graft the two earlier ships used was
impossible. The bait recovers AccuRig's 9.346 mm offset in closed form, which
makes it a required input forever — copied into the ship folder, and rig-work's
"disposable" rule amended to say so. Mesh moved 0 mm, 0 unweighted verts.

lena_base_v01 goes superseded, not rolled-back: she lost the default slot but
Ariki_Female_QuatSkin_Nude.glb is untouched, so per rule 9 her folder stays put.

Also lands the leaf-cut lane (work/lena_leafbikini): hue-keyed seam detection
that removes the leaf shell and leaves both holes open by request, registered
as a lane milestone with its sha256. Corrects the rig-work trap note — baits do
carry embedded textures; it is AccuRig that strips them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 16:09:45 -07:00
parent d6f1587eb0
commit eae8327811
23 changed files with 2361 additions and 8 deletions
+20 -6
View File
@@ -8,6 +8,14 @@ skeleton out of AccuRig and back. AccuRig refuses the raw ~1.9M-tri FBX outright
the pristine GLB and only the *skeleton* from the bait — see
`.agents/plans/rig-graft-lane-2026-08-04.md` for the lane.
**"Disposable" now has one exception, and it is about reproducibility, not shipping.**
A bait that fed a *nearest-surface* graft is a required input to that graft forever: it
is the only thing index-exact with the AccuRig return that is also in the pristine GLB's
space, so it is what recovers AccuRig's offset in closed form. Such a bait gets **copied**
(not moved) into the ship folder alongside the AccuRig output. It is still never shipped
to the game, and the copy here stays disposable. First case:
`lena_leafbikini_base_v01` — see that folder's README, "the bait is the bridge".
Per `../REGISTRY.md` rule 11 this folder is exempt from the filename grammar and gets
no Derived-artifacts rows; the grafted body's notes column names the bait its skeleton
came from. The tool-era names are kept on purpose so these stay recognisable as
@@ -18,7 +26,7 @@ throwaway.
| file | tris | notes |
|---|---|---|
| `lena_tripo_rigbait.fbx` | 77,999 | from `originals/female/female_lena_tripo.glb` |
| `lena_leafbikini_tripo_rigbait.fbx` | 77,999 | from `originals/female/female_lena_leafbikini_tripo.glb` (2026-08-13); leaf-bikini garment sculpted on — fine for AccuRig (silhouette only), fingers distinct |
| `lena_leafbikini_tripo_rigbait.fbx` | 77,999 | from `originals/female/female_lena_leafbikini_tripo.glb` (2026-08-13); leaf-bikini garment sculpted on — fine for AccuRig (silhouette only), fingers distinct. **Rigged and shipped 2026-08-13** as `lena_leafbikini_base_v01`; copy preserved in that ship folder |
| `mako_tripo_rigbait.fbx` | 78,000 | from `originals/male/male_base_bald_tripo_v1.glb` |
| `*_qa_front.png`, `*_qa_hand.png` | — | QA renders; fingers fully distinct, no webbing |
@@ -30,11 +38,17 @@ sibling emitted from the same decimation; when that lands, these are superseded.
## Traps
- Baits are geometry-only (~3.5 MB — a GLB's packed textures don't survive the FBX
embed), so AccuRig shows a grey model. That's fine for rigging, but it means the
July "Dummy001 export" check can't use textures: **verify AccuRig's output by mesh
name + tri count instead.**
- AccuRig exports come back to this folder as `<character>_tripo_accurig.fbx`.
- Baits are geometry-only (~3.5 MB), so AccuRig shows a grey model. That's fine for
rigging, but it means the July "Dummy001 export" check can't use textures: **verify
AccuRig's output by mesh name + tri count instead.**
*Correction 2026-08-13:* the parenthetical used to read "a GLB's packed textures don't
survive the FBX embed". They do — `rigbait_decimate.py` exports with
`embed_textures=True`, and `lena_leafbikini_tripo_rigbait.fbx` carries 4K basecolor and
normal in its `.fbm/`. What is actually true is the reverse direction: **AccuRig strips
them**, and its return has no images at all. Verify by mesh name + tri count either way.
- AccuRig exports come back to this folder as `<character>_tripo_rigged.fbx` (plus a
settings `.json` and an often-empty `.fbm/`). The older `_tripo_accurig.fbx` spelling in
the lane plan was never what the tool actually wrote.
- These files used to live in `ariki-game/assets/models/characters/rig-work/` and
needed a `.gdignore` to stop Godot importing them. Nothing here is a game asset;
that is precisely why the folder moved.
Binary file not shown.
@@ -0,0 +1,429 @@
{
"lena_leafbikini_tripo_rigged": {
"Version": "1.10.1822.1",
"Scene": {
"Name": true,
"SupportShaderSelect": true
},
"Export Directory": "C:/Users/Jeremy/tinqs/animation/characters/rig-work",
"Object": {
"lena_leafbikini_tripo_rigged": {
"Generation": "AccuRig",
"Physics": {
"Collision Shapes": {
"RL_BoneRoot": {},
"CC_Base_Hip": {},
"CC_Base_Pelvis": {},
"CC_Base_L_Thigh": {},
"CC_Base_L_Calf": {},
"CC_Base_L_Foot": {},
"CC_Base_L_ToeBaseShareBone": {},
"CC_Base_L_ToeBase": {},
"CC_Base_L_PinkyToe1": {},
"CC_Base_L_RingToe1": {},
"CC_Base_L_MidToe1": {},
"CC_Base_L_IndexToe1": {},
"CC_Base_L_BigToe1": {},
"CC_Base_L_CalfTwist01": {},
"CC_Base_L_CalfTwist02": {},
"CC_Base_L_KneeShareBone": {},
"CC_Base_L_ThighTwist01": {},
"CC_Base_L_ThighTwist02": {},
"CC_Base_R_Thigh": {},
"CC_Base_R_ThighTwist01": {},
"CC_Base_R_ThighTwist02": {},
"CC_Base_R_Calf": {},
"CC_Base_R_Foot": {},
"CC_Base_R_ToeBase": {},
"CC_Base_R_PinkyToe1": {},
"CC_Base_R_BigToe1": {},
"CC_Base_R_IndexToe1": {},
"CC_Base_R_MidToe1": {},
"CC_Base_R_RingToe1": {},
"CC_Base_R_ToeBaseShareBone": {},
"CC_Base_R_KneeShareBone": {},
"CC_Base_R_CalfTwist01": {},
"CC_Base_R_CalfTwist02": {},
"CC_Base_Waist": {},
"CC_Base_Spine01": {},
"CC_Base_Spine02": {},
"CC_Base_NeckTwist01": {},
"CC_Base_NeckTwist02": {},
"CC_Base_Head": {},
"CC_Base_FacialBone": {},
"CC_Base_JawRoot": {},
"CC_Base_Tongue01": {},
"CC_Base_Tongue02": {},
"CC_Base_Tongue03": {},
"CC_Base_Teeth02": {},
"CC_Base_R_Eye": {},
"CC_Base_L_Eye": {},
"CC_Base_UpperJaw": {},
"CC_Base_Teeth01": {},
"CC_Base_L_Clavicle": {},
"CC_Base_L_Upperarm": {},
"CC_Base_L_Forearm": {},
"CC_Base_L_ForearmTwist01": {},
"CC_Base_L_ForearmTwist02": {},
"CC_Base_L_ElbowShareBone": {},
"CC_Base_L_Hand": {},
"CC_Base_L_Mid1": {},
"CC_Base_L_Mid2": {},
"CC_Base_L_Mid3": {},
"CC_Base_L_Index1": {},
"CC_Base_L_Index2": {},
"CC_Base_L_Index3": {},
"CC_Base_L_Ring1": {},
"CC_Base_L_Ring2": {},
"CC_Base_L_Ring3": {},
"CC_Base_L_Pinky1": {},
"CC_Base_L_Pinky2": {},
"CC_Base_L_Pinky3": {},
"CC_Base_L_Thumb1": {},
"CC_Base_L_Thumb2": {},
"CC_Base_L_Thumb3": {},
"CC_Base_L_UpperarmTwist01": {},
"CC_Base_L_UpperarmTwist02": {},
"CC_Base_R_Clavicle": {},
"CC_Base_R_Upperarm": {},
"CC_Base_R_UpperarmTwist01": {},
"CC_Base_R_UpperarmTwist02": {},
"CC_Base_R_Forearm": {},
"CC_Base_R_ForearmTwist01": {},
"CC_Base_R_ForearmTwist02": {},
"CC_Base_R_ElbowShareBone": {},
"CC_Base_R_Hand": {},
"CC_Base_R_Mid1": {},
"CC_Base_R_Mid2": {},
"CC_Base_R_Mid3": {},
"CC_Base_R_Ring1": {},
"CC_Base_R_Ring2": {},
"CC_Base_R_Ring3": {},
"CC_Base_R_Thumb1": {},
"CC_Base_R_Thumb2": {},
"CC_Base_R_Thumb3": {},
"CC_Base_R_Index1": {},
"CC_Base_R_Index2": {},
"CC_Base_R_Index3": {},
"CC_Base_R_Pinky1": {},
"CC_Base_R_Pinky2": {},
"CC_Base_R_Pinky3": {},
"CC_Base_R_RibsTwist": {},
"CC_Base_R_Breast": {},
"CC_Base_L_RibsTwist": {},
"CC_Base_L_Breast": {},
"meshes_0_": {}
}
},
"ExpressionSet": "4",
"Expression": {
"V_None": {
"Bones": {}
},
"V_Open": {
"Bones": {}
},
"V_Explosive": {
"Bones": {}
},
"V_Dental_Lip": {
"Bones": {}
},
"V_Tight_O": {
"Bones": {}
},
"V_Tight": {
"Bones": {}
},
"V_Wide": {
"Bones": {}
},
"V_Affricate": {
"Bones": {}
},
"V_Lip_Open": {
"Bones": {}
},
"V_Tongue_up": {
"Bones": {}
},
"V_Tongue_Raise": {
"Bones": {}
},
"V_Tongue_Out": {
"Bones": {}
},
"V_Tongue_Narrow": {
"Bones": {}
},
"V_Tongue_Lower": {
"Bones": {}
},
"V_Tongue_Curl_U": {
"Bones": {}
},
"V_Tongue_Curl_D": {
"Bones": {}
},
"Brow_Raise_Inner_L": {
"Bones": {}
},
"Brow_Raise_Inner_R": {
"Bones": {}
},
"Brow_Raise_Outer_L": {
"Bones": {}
},
"Brow_Raise_Outer_R": {
"Bones": {}
},
"Brow_Drop_L": {
"Bones": {}
},
"Brow_Drop_R": {
"Bones": {}
},
"Nose_Sneer_L": {
"Bones": {}
},
"Nose_Sneer_R": {
"Bones": {}
},
"Cheek_Raise_L": {
"Bones": {}
},
"Cheek_Raise_R": {
"Bones": {}
},
"Cheek_Puff_L": {
"Bones": {}
},
"Cheek_Puff_R": {
"Bones": {}
},
"Head_Turn_Up": {
"Bones": {}
},
"Head_Turn_Down": {
"Bones": {}
},
"Head_Turn_L": {
"Bones": {}
},
"Head_Turn_R": {
"Bones": {}
},
"Head_Tilt_L": {
"Bones": {}
},
"Head_Tilt_R": {
"Bones": {}
},
"Head_L": {
"Bones": {}
},
"Head_R": {
"Bones": {}
},
"Head_Forward": {
"Bones": {}
},
"Head_Backward": {
"Bones": {}
},
"Jaw_Open": {
"Bones": {}
},
"Jaw_Forward": {
"Bones": {}
},
"Jaw_L": {
"Bones": {}
},
"Jaw_R": {
"Bones": {}
},
"Tongue_Out": {
"Bones": {}
},
"Tongue_Up": {
"Bones": {}
},
"Tongue_Down": {
"Bones": {}
},
"Tongue_Tip_Up": {
"Bones": {}
},
"Tongue_Tip_Down": {
"Bones": {}
},
"Tongue_Narrow": {
"Bones": {}
},
"Tongue_Wide": {
"Bones": {}
},
"Tongue_Roll": {
"Bones": {}
},
"Tongue_L": {
"Bones": {}
},
"Tongue_R": {
"Bones": {}
},
"Tongue_Bulge_L": {
"Bones": {}
},
"Tongue_Bulge_R": {
"Bones": {}
},
"Eye_Blink_L": {
"Bones": {}
},
"Eye_Blink_R": {
"Bones": {}
},
"Eye_Squint_L": {
"Bones": {}
},
"Eye_Squint_R": {
"Bones": {}
},
"Eye_Wide_L": {
"Bones": {}
},
"Eye_Wide_R": {
"Bones": {}
},
"Eye_L_Look_L": {
"Bones": {}
},
"Eye_R_Look_L": {
"Bones": {}
},
"Eye_L_Look_R": {
"Bones": {}
},
"Eye_R_Look_R": {
"Bones": {}
},
"Eye_L_Look_Up": {
"Bones": {}
},
"Eye_R_Look_Up": {
"Bones": {}
},
"Eye_L_Look_Down": {
"Bones": {}
},
"Eye_R_Look_Down": {
"Bones": {}
},
"Mouth_Smile_L": {
"Bones": {}
},
"Mouth_Smile_R": {
"Bones": {}
},
"Mouth_Frown_L": {
"Bones": {}
},
"Mouth_Frown_R": {
"Bones": {}
},
"Mouth_Stretch_L": {
"Bones": {}
},
"Mouth_Stretch_R": {
"Bones": {}
},
"Mouth_Dimple_L": {
"Bones": {}
},
"Mouth_Dimple_R": {
"Bones": {}
},
"Mouth_Press_L": {
"Bones": {}
},
"Mouth_Press_R": {
"Bones": {}
},
"Mouth_Pucker": {
"Bones": {}
},
"Mouth_Funnel": {
"Bones": {}
},
"Mouth_Roll_In_Upper": {
"Bones": {}
},
"Mouth_Roll_In_Lower": {
"Bones": {}
},
"Mouth_L": {
"Bones": {}
},
"Mouth_R": {
"Bones": {}
},
"Mouth_Shrug_Upper": {
"Bones": {}
},
"Mouth_Shrug_Lower": {
"Bones": {}
},
"Mouth_Up_Upper_L": {
"Bones": {}
},
"Mouth_Up_Upper_R": {
"Bones": {}
},
"Mouth_Down_Lower_L": {
"Bones": {}
},
"Mouth_Down_Lower_R": {
"Bones": {}
},
"Mouth_Close": {
"Bones": {}
}
},
"Constraint": {},
"Meshes": {
"meshes_0_": {
"SubD Level": 0,
"Materials": {
"tripo_material_a8fc2a79_1dd1_4434_92b9_731655894339": {
"Material Type": "Pbr",
"MultiUV Index": 0,
"Two Side": true,
"Diffuse Color": [
204.0,
204.0,
204.0
],
"Ambient Color": [
0.0,
0.0,
0.0
],
"Specular Color": [
204.0,
204.0,
204.0
],
"Opacity": 1.0,
"Self Illumination": 0.0,
"Textures": {},
"Resource Textures": {}
}
}
}
}
}
}
}
}