fix(assets): T-1090 — five fork bodies rebuilt; mesh+armature scale baked together

Root cause was double: (1) segment_body's apply_scale scaled fork MESH
vertices but not each segment's embedded armature — the shared-skeleton
compositor relocates segments by bone name, so internally-inconsistent
segments exploded (child worst at 0.72x: head bone 0.35m above its mesh —
detached heads, spider arms); (2) thin/heavy were stale high-poly artifacts
from an older segmentation, missing seg_hips. Fix: apply_fork_scale bakes
mesh AND embedded armature via transform_apply (edit-bone poking shears
chains — first attempt proved it); new blender_rebuild_forks.py rebuilds
exactly the five from the owned UBC Source exports. All five now 19 low-poly
segments matching the healthy six.

QA on the real compositor (idle+walk, front+side): 5/5 coherent; healthy
controls unchanged. Q-060 answered at the extremes: 15/15 peasant-garment
Surface Deform binds on the forks, zero shrinkwrap fallbacks, no
bust-through — the 6-of-11 placeholder debt is paid (fork garment variants
included). Follow-up filed: T-1094 (child/teen composite at adult height —
pre-existing shared-skeleton normalization, not a regression).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 22:06:10 +02:00
co-authored by Claude Fable 5
parent c82ea3ec92
commit b54b8189d9
176 changed files with 245 additions and 51 deletions
+13 -14
View File
@@ -1,20 +1,19 @@
# Fork body type — auto-generated from mesh scaling
# Fork body type — auto-generated from mesh + armature scaling (T-1090)
This directory contains **child** body segments, generated by applying
a proportional mesh scale to the source body (Teen_Male_FullBody.gltf):
This directory contains **child** body segments, generated by applying a
proportional scale to the source body (Teen_Male_FullBody.gltf) mesh AND its armature rest pose
together, then segmenting:
Scale: (0.75, 0.72, 0.75)
The Y scale (0.72) differs from XZ (0.75) intentionally: children have different
proportions from adults. They are not simply uniformly smaller — their limbs are
shorter relative to torso height (Y) compared to torso width/depth (XZ). The
non-uniform scale captures this: the child is 75% of teen width/depth but only
72% of teen height, reflecting the head-to-body ratio and limb length differences
typical of pre-teen proportions.
The scale is applied to the mesh vertices and the embedded armature rest pose
with the SAME affine (T-1090 fix). This keeps each segment internally consistent
with its own skeleton, which the shared-skeleton compositor
(character_visual.gd) requires — a mesh-only scale detaches the head and
explodes the limbs on relocation.
These segments are APPROXIMATE. They produce a visually distinct silhouette
but are not artist-authored from scratch. Review the proportions and refine
the base mesh manually if the auto-scale result is not satisfactory.
Cross-sectional differentiation (thin = narrow, heavy = wide) survives the
composite; global height normalises to the shared skeleton (see T-1090 report /
Q-060 for the shared-skeleton scale-normalisation note).
Status: auto-generated, needs artist review
Sprint 28 — visual team
Status: auto-generated (rebuilt T-1090), 18 segments incl. seg_hips
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,13 +1,19 @@
# Fork body type — auto-generated from mesh scaling
# Fork body type — auto-generated from mesh + armature scaling (T-1090)
This directory contains **heavy_f** body segments, generated by applying
a proportional mesh scale to the source body (Regular_Female_FullBody.gltf):
This directory contains **heavy_f** body segments, generated by applying a
proportional scale to the source body (Regular_Female_FullBody.gltf) mesh AND its armature rest pose
together, then segmenting:
Scale: (1.20, 1.08, 1.00)
These segments are APPROXIMATE. They produce a visually distinct silhouette
but are not artist-authored from scratch. Review the proportions and refine
the base mesh manually if the auto-scale result is not satisfactory.
The scale is applied to the mesh vertices and the embedded armature rest pose
with the SAME affine (T-1090 fix). This keeps each segment internally consistent
with its own skeleton, which the shared-skeleton compositor
(character_visual.gd) requires — a mesh-only scale detaches the head and
explodes the limbs on relocation.
Status: auto-generated, needs artist review
Sprint 28 — visual team
Cross-sectional differentiation (thin = narrow, heavy = wide) survives the
composite; global height normalises to the shared skeleton (see T-1090 report /
Q-060 for the shared-skeleton scale-normalisation note).
Status: auto-generated (rebuilt T-1090), 18 segments incl. seg_hips
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.
@@ -1,13 +1,19 @@
# Fork body type — auto-generated from mesh scaling
# Fork body type — auto-generated from mesh + armature scaling (T-1090)
This directory contains **heavy_m** body segments, generated by applying
a proportional mesh scale to the source body (Regular_Male_FullBody.gltf):
This directory contains **heavy_m** body segments, generated by applying a
proportional scale to the source body (Regular_Male_FullBody.gltf) mesh AND its armature rest pose
together, then segmenting:
Scale: (1.20, 1.08, 1.00)
These segments are APPROXIMATE. They produce a visually distinct silhouette
but are not artist-authored from scratch. Review the proportions and refine
the base mesh manually if the auto-scale result is not satisfactory.
The scale is applied to the mesh vertices and the embedded armature rest pose
with the SAME affine (T-1090 fix). This keeps each segment internally consistent
with its own skeleton, which the shared-skeleton compositor
(character_visual.gd) requires — a mesh-only scale detaches the head and
explodes the limbs on relocation.
Status: auto-generated, needs artist review
Sprint 28 — visual team
Cross-sectional differentiation (thin = narrow, heavy = wide) survives the
composite; global height normalises to the shared skeleton (see T-1090 report /
Q-060 for the shared-skeleton scale-normalisation note).
Status: auto-generated (rebuilt T-1090), 18 segments incl. seg_hips
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.
@@ -1,13 +1,19 @@
# Fork body type — auto-generated from mesh scaling
# Fork body type — auto-generated from mesh + armature scaling (T-1090)
This directory contains **thin_f** body segments, generated by applying
a proportional mesh scale to the source body (Regular_Female_FullBody.gltf):
This directory contains **thin_f** body segments, generated by applying a
proportional scale to the source body (Regular_Female_FullBody.gltf) mesh AND its armature rest pose
together, then segmenting:
Scale: (0.82, 1.00, 0.88)
These segments are APPROXIMATE. They produce a visually distinct silhouette
but are not artist-authored from scratch. Review the proportions and refine
the base mesh manually if the auto-scale result is not satisfactory.
The scale is applied to the mesh vertices and the embedded armature rest pose
with the SAME affine (T-1090 fix). This keeps each segment internally consistent
with its own skeleton, which the shared-skeleton compositor
(character_visual.gd) requires — a mesh-only scale detaches the head and
explodes the limbs on relocation.
Status: auto-generated, needs artist review
Sprint 28 — visual team
Cross-sectional differentiation (thin = narrow, heavy = wide) survives the
composite; global height normalises to the shared skeleton (see T-1090 report /
Q-060 for the shared-skeleton scale-normalisation note).
Status: auto-generated (rebuilt T-1090), 18 segments incl. seg_hips
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.
Binary file not shown.
@@ -1,13 +1,19 @@
# Fork body type — auto-generated from mesh scaling
# Fork body type — auto-generated from mesh + armature scaling (T-1090)
This directory contains **thin_m** body segments, generated by applying
a proportional mesh scale to the source body (Regular_Male_FullBody.gltf):
This directory contains **thin_m** body segments, generated by applying a
proportional scale to the source body (Regular_Male_FullBody.gltf) mesh AND its armature rest pose
together, then segmenting:
Scale: (0.82, 1.00, 0.88)
These segments are APPROXIMATE. They produce a visually distinct silhouette
but are not artist-authored from scratch. Review the proportions and refine
the base mesh manually if the auto-scale result is not satisfactory.
The scale is applied to the mesh vertices and the embedded armature rest pose
with the SAME affine (T-1090 fix). This keeps each segment internally consistent
with its own skeleton, which the shared-skeleton compositor
(character_visual.gd) requires — a mesh-only scale detaches the head and
explodes the limbs on relocation.
Status: auto-generated, needs artist review
Sprint 28 — visual team
Cross-sectional differentiation (thin = narrow, heavy = wide) survives the
composite; global height normalises to the shared skeleton (see T-1090 report /
Q-060 for the shared-skeleton scale-normalisation note).
Status: auto-generated (rebuilt T-1090), 18 segments incl. seg_hips
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More