--- 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*