docs(design): add character visuals spec and compositor API from workshop
Round 22 workshop output: character-visuals-spec.md (color mesh regions, LOD tiers, layered composition) and compositor-api-spec.md (Node3D architecture, CharacterColors data structure, set_color API). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -33,3 +33,4 @@ Historical discussion rounds from the Settled Reach game design process.
|
||||
| 18 | v0.1 Gap Analysis Workshop | D-030, D-031, D-032, D-033, D-034, D-035, D-036, D-037, D-038, D-039, D-040 | [round-18](round-18-v01-gap-analysis-workshop.md) |
|
||||
| 19 | Knowledge Graph & Information Boundaries Workshop | D-041, Q-016 resolved, Q-019 partially resolved, Q-024, Q-025, Q-026 | [workshop brief](../workshops/knowledge-graph-information-boundaries/workshop-brief.md), [synthesis](../workshops/knowledge-graph-information-boundaries/round2-synthesis.md) |
|
||||
| 20 | Station District Layout Design (Workshop #153) | D-093, D-094, D-095; Q-040–Q-044 resolved/partially resolved | [round-20](round-20-station-district-layout.md) |
|
||||
| 22 | Sprint 28 Character Visuals Workshop | D-148–D-157; D-019 superseded; D-033 amended | [round-22](round-22-sprint28-character-visuals.md) |
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
title: "Round 22: Sprint 28 Character Visuals Workshop"
|
||||
description: "Three-round structured workshop producing character visual architecture specs; D-148–D-157; supersedes D-019"
|
||||
type: discussion
|
||||
status: complete
|
||||
round: 22
|
||||
created: 2026-03-17
|
||||
---
|
||||
|
||||
# ROUND 22: Sprint 28 Character Visuals Workshop
|
||||
|
||||
**Date:** 2026-03-17
|
||||
**Type:** Two active rounds + spec writing
|
||||
**Participants:** Araminta (art direction), Gestalt (systems), Tyre (technical), Ozzie (player experience), Qatux (documenter), SI (project manager)
|
||||
**Facilitator:** Team Leader (Jeroen)
|
||||
**Documenter:** Qatux
|
||||
|
||||
---
|
||||
|
||||
## 1. Workshop Purpose
|
||||
|
||||
Move beyond placeholder art to a final-candidate character visual architecture. Starting point: a live Godot 4 spike prototype with 20 CSG placeholder characters on a 14×14 checkerboard grid in diamond orientation.
|
||||
|
||||
Spike configuration at workshop start:
|
||||
- 20 CSG characters (cylinder body/legs, sphere head/hair)
|
||||
- 14×14 flat quad grid, rotated 45° (diamond layout)
|
||||
- Four wall boxes along north edge
|
||||
- Orthographic camera with T-key cycle: top-down → 45° → 30°
|
||||
- Characters visible as standing figures at isometric scale
|
||||
|
||||
Workshop deliverables per briefing:
|
||||
1. `docs/design/character-visuals-spec.md`
|
||||
2. `docs/design/compositor-api-spec.md`
|
||||
3. `docs/workshops/character-visuals/workshop-outcomes.md`
|
||||
4. D-records to `decisions/` for all architectural decisions
|
||||
|
||||
---
|
||||
|
||||
## 2. Round 1 — Agent Proposals (Inventory and Constraints)
|
||||
|
||||
Round 1 agents assessed their domain areas independently. Full proposals were collected, then reviewed by Jeroen.
|
||||
|
||||
### JEROEN'S ROUND 1 CORRECTIONS
|
||||
|
||||
**Overruled proposals:**
|
||||
1. **Relationship-colored outlines.** Uniform dark gray/black for all characters, always. Relationship info → minimap, name bubbles, and insert/perception mode. Outline is not a semantic channel.
|
||||
2. **Player character visually distinct from NPCs.** No protagonist glow, no saturation boost, no special outline. Same models, same variety. Distinction comes from gear only.
|
||||
3. **Free-spin rotation in character editor.** Cardinal direction buttons only (N/E/S/W). Free-spin exposes angles that don't exist in gameplay.
|
||||
4. **Game start as camera pull-back from editor.** Fade from black + alarm clock + waking in bed. Editor is its own separate context.
|
||||
5. **Faction colors as visual system.** Faction affiliation is not in the compositor. Clothing color choices emerge from character narrative, not faction assignment.
|
||||
|
||||
**Confirmed from Round 1:**
|
||||
- 2–3 body types for Sprint 28 (combination-switching validation as primary QA goal)
|
||||
- Mugshot navigator = character editor (no knowledge-tier complexity)
|
||||
- Wear level as continuous shader parameter — liked for flavor, not primary Sprint 28 deliverable
|
||||
- Art direction: **Invisible Inc** as primary reference — clean, sleek, adult, uniform dark outlines
|
||||
- Per-item clothing color variety — not uniform recolor across an item
|
||||
|
||||
**New major decision introduced at end of Round 1:**
|
||||
The spike prototype showed camera tilt options. The 45° isometric angle (Diablo-style) was initially discussed, then Jeroen announced the 30° low-angle (Hades-style) may be better. This was locked at start of Round 2.
|
||||
|
||||
---
|
||||
|
||||
## 3. Round 2 — Specification Proposals
|
||||
|
||||
### JEROEN — Round 2 Opening
|
||||
|
||||
Camera decision locked: **30° tilt with 45° map rotation** is the confirmed default gameplay camera. Not 45° isometric. More character front visibility. More wall depth. Closer to Hades than Diablo. This supersedes D-019 ("Top-down confirmed as primary camera") and its 2026-02-12 amendment.
|
||||
|
||||
Two open questions posed to the team:
|
||||
|
||||
**Q1: 4 or 8 directions?**
|
||||
With 45° map rotation, characters face along diamond axes. What are the trade-offs?
|
||||
|
||||
**Q2: Large crowd performance.**
|
||||
What happens at 400+ characters simultaneously? Current budget assumes 80 NPCs.
|
||||
|
||||
---
|
||||
|
||||
### QATUX (Documenter)
|
||||
|
||||
Flagged pending D-records from Round 1 overrules: 5 confirmed decisions requiring formal D-record IDs before Round 3.
|
||||
|
||||
Flagged inconsistency: the Sprint 28 briefing specified "8-direction rotation" throughout. Q1 was still open. Nothing in the spec structure should be written until Q1 closed.
|
||||
|
||||
Q1 framing: At 30° tilt + 45° map rotation, the four diagonal movements (NE/NW/SE/SW) are the most common player-facing directions. 4-direction mirroring at those angles risks asymmetry in the most common case — this is a significant risk factor for 4-direction-only approaches.
|
||||
|
||||
Q2 framing: 80-NPC budget stated in sprint context; 400+ as named scenario. No existing open question on crowd rendering at scale — flagged for Q-NNN registration if needed.
|
||||
|
||||
---
|
||||
|
||||
### TYRE — Q1 Resolution Proposal
|
||||
|
||||
Hybrid approach: **8 server-side facings + 4 client visual groups**.
|
||||
- Server tracks 8 directions — future-proof, no protocol migration needed
|
||||
- Client renders 4 visual groups for Sprint 28 — keeps asset authoring cost manageable
|
||||
- 3D model rotates to true 8-direction angle (subtle lean within a group)
|
||||
- East and West share mirrored meshes — net unique mesh count per clothing item: 2 (N + E)
|
||||
|
||||
### JEROEN — Q2 Resolution
|
||||
|
||||
Performance-driven LOD (not distance threshold, not fixed count):
|
||||
- Normal gameplay: full detail, all characters
|
||||
- Under GPU pressure: progressive degradation from player outward (Tier 0 → 1 → 2)
|
||||
- Tier 2 = billboard impostor with baked-in outline
|
||||
- Paused: render budget freed, all characters restore to full detail
|
||||
- Chaos effect: peripheral degradation is cognitively appropriate — matches real crowd experience
|
||||
|
||||
Outline method confirmed as part of Q2 resolution: **inverted hull** for normal rendering. LOD handles outline naturally (baked into impostor at Tier 2).
|
||||
|
||||
---
|
||||
|
||||
### JEROEN — Round 2 Final Lock
|
||||
|
||||
**Q1: 8 server / 4 client visual groups (Sprint 28). Tyre's hybrid. Closed.**
|
||||
**Q2: Performance-driven LOD. Three tiers. Pause = full detail. Closed.**
|
||||
**All open questions closed. Moving to spec writing.**
|
||||
|
||||
---
|
||||
|
||||
## 4. Round 3 — Spec Writing (Qatux)
|
||||
|
||||
D-record IDs claimed before writing:
|
||||
- D-148: architecture — 30° camera with 45° map rotation (supersedes D-019)
|
||||
- D-149: architecture — 3D characters rendered live
|
||||
- D-150: architecture — inverted hull outline
|
||||
- D-151: architecture — 8 server / 4 client direction count
|
||||
- D-152: architecture — performance-driven LOD
|
||||
- D-153: scope — player not visually distinct from NPCs
|
||||
- D-154: scope — outline not a relationship indicator
|
||||
- D-155: scope — cardinal rotation only in editor
|
||||
- D-156: scope — faction colors are narrative
|
||||
- D-157: scope — game start = alarm clock fade from black
|
||||
|
||||
Specs written: `character-visuals-spec.md`, `compositor-api-spec.md`, `workshop-outcomes.md`.
|
||||
Decisions filed: D-148–D-152 to `decisions/architecture.md`, D-153–D-157 to `decisions/scope.md`.
|
||||
D-019 marked `[SUPERSEDED by D-148]`. D-033 amended with insert/perception-mode clarification.
|
||||
|
||||
---
|
||||
|
||||
## 5. Key Decisions Produced
|
||||
|
||||
| D-ID | Domain | Decision |
|
||||
|---|---|---|
|
||||
| D-148 | architecture | 30° low-angle camera + 45° map rotation (supersedes D-019) |
|
||||
| D-149 | architecture | 3D characters rendered live (replaces sprite approach) |
|
||||
| D-150 | architecture | Inverted hull outline, uniform dark, baked into billboard LOD |
|
||||
| D-151 | architecture | 8 server facings, 4 visual groups client Sprint 28 |
|
||||
| D-152 | architecture | Performance-driven LOD (3 tiers, pause = full detail) |
|
||||
| D-153 | scope | Player character not visually distinct from NPCs |
|
||||
| D-154 | scope | Outline not a relationship indicator (amends D-033) |
|
||||
| D-155 | scope | Character editor cardinal rotation only |
|
||||
| D-156 | scope | Faction colors = narrative emergence, not visual compositor |
|
||||
| D-157 | scope | Game start = alarm clock fade from black, not pull-back |
|
||||
|
||||
---
|
||||
|
||||
## 6. Downstream Impact Summary
|
||||
|
||||
- **D-019 superseded** — all references to "top-down camera" in briefings/specs should be updated
|
||||
- **D-033 amended** — entity relationship color is insert/perception-mode only, not on normal outlines
|
||||
- **Old placeholder-art-spec** (`docs/design/placeholder-art-spec-v01.md`) is superseded for character rendering
|
||||
- **Briefings to update:** `docs/briefings/araminta.md`, `docs/briefings/tyre.md` (camera angle, rendering approach)
|
||||
- **Tickets unblocked:** #685 (wireframe), #698 (3D character editor), #699 (body type meshes), #700 (compositor). Tickets #686–#692 (sprite-based) cancelled.
|
||||
|
||||
---
|
||||
|
||||
*Archived by Qatux — 2026-03-17*
|
||||
Reference in New Issue
Block a user