BlueGit

golden-age paperdoll-renderer

design: bundled female edits (stray clip, hair removed) and female-hair equipment preset (Tim t1015u-t1020u)

timfa Grok Bot · pushed by timfa

Authored 2026-11-07 · 6 days ago

Hash
4e52d7b05c96e1fbf45977c71c34965ed2083485
Parent
78db0fce
Pipeline
Passed
1 file changed +8 −0
design.md +8 −0
@@ -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 ima
553## Decision 2026-11-07 (Tim t1016u/t1017u): glTF alphaMode BLEND is blended, not a winning surface
553## Decision 2026-11-07 (Tim t1016u/t1017u): glTF alphaMode BLEND is blended, not a winning surface
554
554
555Per 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.
555Per 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
559Findings 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
561The 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
563The 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.