design: bundled female edits (stray clip, hair removed) and female-hair equipment preset (Tim t1015u-t1020u)
@@ -553,3 +553,11 @@ A `publish:aur` job after `release` (allow_failure, resource_group aur, Arch ima
553
553
## Decision 2026-11-07 (Tim t1016u/t1017u): glTF alphaMode BLEND is blended, not a winning surface
554
554
555
555
Per the glTF spec, a `BLEND` material is composited over what is behind it with its alpha (base colour factor alpha × texture alpha × vertex colour alpha). Until now BLEND was treated like an opaque surface with a 0.001 cutoff, so a nearly transparent layer in front (the "Crystal" cornea of Tim's default bodies, alpha 0.08/0.17; also eyebrow, eyelash and hair cards) won the pixel and the eye behind it vanished. Production and the live preview now draw in two groups: all `OPAQUE`/`MASK` surfaces first (depth test + write, cutoff as before), then the `BLEND` surfaces in file order with depth test on, depth write off and straight-alpha "over" blending (`src·a + dst·(1−a)` for colour, `a + dst·(1−a)` for coverage) into diffuse, normal and specular; a final depth-only pass of the BLEND surfaces (alpha > 0.001) writes their depth, so covered pixels still carry the nearest surface depth. The 2D depth compositor and resolve are unchanged. Blending is order-dependent within the BLEND group (no sorting, no OIT); that limitation is accepted.
556
557
## Decision 2026-11-07 (Tim t1015u/t1018u/t1019u/t1020u): bundled female edits and the female hair preset
558
559
Findings in Tim's `female.gltf` (the renderer follows the glTF spec, no renderer change): the file has a second animation `FemaleArmature|ponytail01MeshAction.001` (duration 0, one channel) that sets the `FemaleArmature` node rotation to identity, removing its −90° X rest rotation, so in that clip the whole body lies on its back (rest Y 0.007…1.621 m becomes Y −0.241…0.151, Z 0.007…1.621). It is the lying figure in the extra female atlas row and it inflates "Fit animations" (envelope 4.652 m vs 1.855 m with the walk clip only).
560
561
The bundled default female (asset only, models still load as-is) is edited: that stray animation is removed, and the hair mesh (`Object_75`, material `ponytail01`, 3902 vertices, BLEND) with its material, texture, image and buffer data is removed; the `.bin` is compacted. All other bytes' meaning is unchanged; the edit is listed in THIRD_PARTY_NOTICES/README.
562
563
The removed hair becomes a bundled equipment preset `female-hair` (`.ppe`, female only, its texture embedded). Equipment is rigid: the hair, skinned to several head/neck bones in the source, is baked once at the rest pose and expressed in the rest-pose space of the `head` joint, bound to that joint with zero offset, so at rest it sits exactly where it was and follows the head rigidly (acceptable for hair). Its texture alpha is used with the equipment alpha cutout (0.5), not blended. **Nieuw project** writes it to `presets/female-hair.ppe` and lists it in the project's equipment presets. A generator (`examples/bake_female_hair.rs`) reproduces the edit and the preset from Tim's original files.
@@ -553,3 +553,11 @@ A `publish:aur` job after `release` (allow_failure, resource_group aur, Arch ima553
## Decision 2026-11-07 (Tim t1016u/t1017u): glTF alphaMode BLEND is blended, not a winning surface553
## Decision 2026-11-07 (Tim t1016u/t1017u): glTF alphaMode BLEND is blended, not a winning surface554
554
555
Per the glTF spec, a `BLEND` material is composited over what is behind it with its alpha (base colour factor alpha × texture alpha × vertex colour alpha). Until now BLEND was treated like an opaque surface with a 0.001 cutoff, so a nearly transparent layer in front (the "Crystal" cornea of Tim's default bodies, alpha 0.08/0.17; also eyebrow, eyelash and hair cards) won the pixel and the eye behind it vanished. Production and the live preview now draw in two groups: all `OPAQUE`/`MASK` surfaces first (depth test + write, cutoff as before), then the `BLEND` surfaces in file order with depth test on, depth write off and straight-alpha "over" blending (`src·a + dst·(1−a)` for colour, `a + dst·(1−a)` for coverage) into diffuse, normal and specular; a final depth-only pass of the BLEND surfaces (alpha > 0.001) writes their depth, so covered pixels still carry the nearest surface depth. The 2D depth compositor and resolve are unchanged. Blending is order-dependent within the BLEND group (no sorting, no OIT); that limitation is accepted.555
Per the glTF spec, a `BLEND` material is composited over what is behind it with its alpha (base colour factor alpha × texture alpha × vertex colour alpha). Until now BLEND was treated like an opaque surface with a 0.001 cutoff, so a nearly transparent layer in front (the "Crystal" cornea of Tim's default bodies, alpha 0.08/0.17; also eyebrow, eyelash and hair cards) won the pixel and the eye behind it vanished. Production and the live preview now draw in two groups: all `OPAQUE`/`MASK` surfaces first (depth test + write, cutoff as before), then the `BLEND` surfaces in file order with depth test on, depth write off and straight-alpha "over" blending (`src·a + dst·(1−a)` for colour, `a + dst·(1−a)` for coverage) into diffuse, normal and specular; a final depth-only pass of the BLEND surfaces (alpha > 0.001) writes their depth, so covered pixels still carry the nearest surface depth. The 2D depth compositor and resolve are unchanged. Blending is order-dependent within the BLEND group (no sorting, no OIT); that limitation is accepted.556
557
## Decision 2026-11-07 (Tim t1015u/t1018u/t1019u/t1020u): bundled female edits and the female hair preset558
559
Findings in Tim's `female.gltf` (the renderer follows the glTF spec, no renderer change): the file has a second animation `FemaleArmature|ponytail01MeshAction.001` (duration 0, one channel) that sets the `FemaleArmature` node rotation to identity, removing its −90° X rest rotation, so in that clip the whole body lies on its back (rest Y 0.007…1.621 m becomes Y −0.241…0.151, Z 0.007…1.621). It is the lying figure in the extra female atlas row and it inflates "Fit animations" (envelope 4.652 m vs 1.855 m with the walk clip only).560
561
The bundled default female (asset only, models still load as-is) is edited: that stray animation is removed, and the hair mesh (`Object_75`, material `ponytail01`, 3902 vertices, BLEND) with its material, texture, image and buffer data is removed; the `.bin` is compacted. All other bytes' meaning is unchanged; the edit is listed in THIRD_PARTY_NOTICES/README.562
563
The removed hair becomes a bundled equipment preset `female-hair` (`.ppe`, female only, its texture embedded). Equipment is rigid: the hair, skinned to several head/neck bones in the source, is baked once at the rest pose and expressed in the rest-pose space of the `head` joint, bound to that joint with zero offset, so at rest it sits exactly where it was and follows the head rigidly (acceptable for hair). Its texture alpha is used with the equipment alpha cutout (0.5), not blended. **Nieuw project** writes it to `presets/female-hair.ppe` and lists it in the project's equipment presets. A generator (`examples/bake_female_hair.rs`) reproduces the edit and the preset from Tim's original files.