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>
169 lines
8.2 KiB
Markdown
169 lines
8.2 KiB
Markdown
---
|
||
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*
|