fix(design): address PR #97 review — all items

Review fixes:
- Eyebrows moved from Head tab to Hair tab (with brow tint + beard tint)
- Head tab now has skin tone dock only
- Eyebrow names match asset keys (regular, female, teen, thick)
- Added earring L/R and necklace slots to Accessories tab
- Added wrist L/R slot labels already present, shifted grid for 3rd row
- Removed "Other" row label for Child (no gendered framing)
- D-155 cross-reference anchor fixed (was stale "full-360-rotation")
- D-160 segment count corrected 17→18 (added torso_upper)
- D-164 rationale corrected: Superhero mesh retained as muscular type
- Added compositor segment visibility note to implementation section
- D-165 cross-ref clarified (clothing colors only, not skin tones)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-22 16:42:50 +01:00
co-authored by Claude Opus 4.6
parent 93260ed696
commit 143185741e
9 changed files with 180 additions and 99 deletions
+8 -8
View File
@@ -540,26 +540,26 @@ Technical foundation decisions that constrain implementation: engine, client-ser
- **Dissent:** None
- **Cross-reference:** [D-149](#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites), [D-150](#d-150-character-outline--inverted-hull-method)
### D-160: Body meshes must be segmented into 17 bone-group regions
- **Date:** 2026-03-19
- **Decision:** Character body meshes are segmented into 17 bone-group regions (head, neck, torso, arm_upper_l/r, arm_lower_l/r, hand_l/r, leg_upper_l/r, leg_lower_l/r, foot_l/r, eyes, eyebrows). Each segment is a separate skinned GLB on the shared 65-bone skeleton. Segments have a 1-ring vertex overlap at boundaries to eliminate visible seams during animation. Segments can be individually hidden when clothing covers them.
### D-160: Body meshes must be segmented into 18 bone-group regions
- **Date:** 2026-03-19 (updated 2026-03-19: 17→18, added torso_upper)
- **Decision:** Character body meshes are segmented into 18 bone-group regions (head, neck, torso, torso_upper, arm_upper_l/r, arm_lower_l/r, hand_l/r, leg_upper_l/r, leg_lower_l/r, foot_l/r, eyes, eyebrows). Each segment is a separate skinned GLB on the shared 65-bone skeleton. Segments have a 1-ring vertex overlap at boundaries to eliminate visible seams during animation. Segments can be individually hidden when clothing covers them. The `torso_upper` variant covers chest-only (for jackets/vests that leave the waist exposed).
- **Rationale:** Validated in the Quaternius aesthetic spike. Monolithic body meshes block the compositor: hiding the body to show clothing also removes the head and limbs. Segmentation enables per-slot visibility, head separation for Trellis-generated faces, and limb loss mechanics. The 1-ring vertex overlap was validated as seamless at gameplay zoom.
- **Raised by:** Jeroen + Tyre, during spike validation.
- **Cross-reference:** [D-159](scope.md#d-159-character-body-type-enum-4-adult-types--2-genders--1-child-skeleton) (body type enum), [D-149](#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites)
- **Cross-reference:** [D-159](scope.md#d-159-character-body-type-enum-5-types--2-genders--1-child-skeleton-11-total) (body type enum), [D-149](#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites)
### D-161: Head is always a separate mesh on the Head bone
- **Date:** 2026-03-19
- **Decision:** Character heads are never baked into body or clothing meshes. The head is always a separate mesh attached to the Head bone via BoneAttachment3D. Trellis generates unique head shapes per character. Hair attaches to the same bone as a separate swappable mesh (enables hairdresser mechanic). The neck stays with the body mesh as a separate segment.
- **Rationale:** Validated in the Quaternius spike. The Quaternius pack bakes the head into the body mesh — this blocks clothing display (hiding body = losing head) and prevents per-character face variation. Separating the head unlocks: Trellis-generated faces, idle look-around animation, helmet/hood equipment, hair as a swappable accessory.
- **Raised by:** Jeroen, during spike validation.
- **Cross-reference:** [D-160](#d-160-body-meshes-must-be-segmented-into-17-bone-group-regions), [D-163](#d-163-trellis-generates-unique-heads-per-character-via-boneattachment3d)
- **Cross-reference:** [D-160](#d-160-body-meshes-must-be-segmented-into-18-bone-group-regions), [D-163](#d-163-trellis-generates-unique-heads-per-character-via-boneattachment3d)
### D-162: Clothing is pre-baked per body type via Blender Surface Deform
- **Date:** 2026-03-19
- **Decision:** Clothing meshes are authored on a reference body type, then batch-fitted to each of the 9 body types via Blender's Surface Deform modifier in an offline pipeline. The fitted variants are exported as separate GLBs. At runtime, the compositor loads the variant matching the character's body type. Runtime clothing scaling does not exist — it was tested (bone pose scaling in Godot) and failed catastrophically.
- **Rationale:** Three approaches were tested during the spike: (1) runtime bone scaling — failed with mesh collapse at joints, (2) Blender bone scaling — same failure, (3) Blender Surface Deform — produced output (visual quality at extremes is Q-060). The Surface Deform pipeline is the only viable path. Pre-baking is required; runtime fitting is impossible.
- **Raised by:** Tyre + Araminta, during spike research and validation.
- **Cross-reference:** [D-159](scope.md#d-159-character-body-type-enum-4-adult-types--2-genders--1-child-skeleton), Q-060
- **Cross-reference:** [D-159](scope.md#d-159-character-body-type-enum-5-types--2-genders--1-child-skeleton-11-total), Q-060
### D-163: Trellis generates unique heads per character via BoneAttachment3D
- **Date:** 2026-03-19
@@ -571,9 +571,9 @@ Technical foundation decisions that constrain implementation: engine, client-ser
### D-164: Fork Quaternius skeleton, replace all body meshes
- **Date:** 2026-03-19
- **Decision:** The Quaternius 65-bone skeleton and Universal Animation Library are adopted as the character rig foundation. All body meshes are replaced with hand-authored meshes on the same skeleton. The CC0 license permits unrestricted forking. Quaternius Source tier ($5/mo Patreon, one month) is recommended for .blend source files to support the Blender batch scripting pipeline.
- **Rationale:** The spike validated the skeleton and animation library as clean, compatible, and well-structured. The body meshes are rejected: Superhero proportions contradict the life-sim aesthetic (D-153), only 2 body types exist in the standard tier (Superhero Male/Female), and procedural body type generation via bone scaling failed. The skeleton is the expensive part to create from scratch — keeping it and replacing the meshes is the correct split.
- **Rationale:** The spike validated the skeleton and animation library as clean, compatible, and well-structured. The Quaternius Superhero body mesh is retained as the **muscular** body type (D-159); the Regular mesh becomes **average**; the Teen mesh becomes **teen**. The remaining body types (thin, heavy, child) are new meshes authored on the same skeleton. Procedural body type generation via bone scaling failed — separate meshes are required. The skeleton is the expensive part to create from scratch; keeping it and replacing/extending the meshes is the correct split.
- **Raised by:** Tyre + Araminta, confirmed by Jeroen.
- **Cross-reference:** [D-159](scope.md#d-159-character-body-type-enum-4-adult-types--2-genders--1-child-skeleton), [D-160](#d-160-body-meshes-must-be-segmented-into-17-bone-group-regions)
- **Cross-reference:** [D-159](scope.md#d-159-character-body-type-enum-5-types--2-genders--1-child-skeleton-11-total), [D-160](#d-160-body-meshes-must-be-segmented-into-18-bone-group-regions)
---
+2 -2
View File
@@ -346,7 +346,7 @@ What we're building: game concept, design pillars, prototype definition, map spe
- **Decision:** The character editor and mugshot UI use a frontal camera angle (-5° tilt, near eye-level) by default. Three confirmed camera presets: frontal (-5°, editor default), dramatic/low-angle (-30°, gameplay default), top-down (0°, overhead). ~~Isometric (-45°) superseded — not part of the confirmed set.~~
- **Rationale:** Frontal view is the natural angle for inspecting a character's face and outfit in an editor context. Identified during the Quaternius aesthetic spike — the frontal preset immediately felt right for close inspection while the tilted angles serve gameplay readability.
- **Raised by:** Jeroen, during spike validation.
- **Cross-reference:** [D-146](#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom) (character creation as separate context), [D-155](#d-155-character-editor-supports-full-360-rotation) (editor rotation)
- **Cross-reference:** [D-146](#d-146-character-creation-preview--tile-scale-sprite-with-heavy-zoom) (character creation as separate context), [D-155](#d-155-character-editor-rotation--cardinal-directions-only-no-free-spin) (editor rotation)
### D-159: Character body type enum: 5 types × 2 genders + 1 child skeleton (11 total)
- **Date:** 2026-03-18 (updated 2026-03-19)
@@ -366,7 +366,7 @@ What we're building: game concept, design pillars, prototype definition, map spe
6. **Neutral grays** R=G=B even steps: `#000000` `#1f1f1f` `#3f3f3f` `#5f5f5f` `#7f7f7f` `#9f9f9f` `#bfbfbf` `#dfdfdf` `#ffffff`
- **Rationale:** Art direction reference is Invisible Inc — muted, desaturated, adult. No primary colors. Palette covers practical clothing colors (workwear, jumpsuits, military surplus) without flashy tones. Players who want exact colors use the hex field; recent custom colors persist across character creation sessions at the game (save) level. HSL computation ensures each row stays in its hue family from dark to light with no drift.
- **Raised by:** Jeroen, during character creation wireframe design.
- **Cross-reference:** [D-155](#d-155-character-editor-supports-full-360-rotation) (editor rotation), [D-134](architecture.md#d-134-full-character-customisation) (character customisation)
- **Cross-reference:** [D-155](#d-155-character-editor-rotation--cardinal-directions-only-no-free-spin) (editor rotation), [D-134](architecture.md#d-134-full-character-customisation) (character customisation)
---