--- title: "Sprint 28 Character Visuals Workshop — Outcomes" description: "Decisions, resolved questions, and deliverables from the Sprint 28 character visuals planning workshop (ticket #684)" type: workshop-outcomes status: complete sprint: 28 ticket: 684 created: 2026-03-17 --- # Sprint 28 Character Visuals Workshop — Outcomes **Ticket:** #684 **Date:** 2026-03-17 **Participants:** Araminta (art direction), Gestalt (systems), Tyre (technical), Ozzie (player experience), Nigel (replayability), Qatux (documenter), SI (project manager) **Facilitator:** Jeroen (project lead) **Rounds:** 2 (Round 3 was spec sign-off; specs written by Qatux) --- ## Summary This workshop resolved the foundational visual architecture for The Settled Reach characters. The major outcome is a shift from the previous approach (2D pre-rendered sprites at a shallow art-convention tilt) to **live 3D compositing** at a **30° real camera tilt** with **45° diamond-grid map rotation**. This change was driven by a functioning prototype spike that demonstrated 3D placeholder characters (CSG shapes) reading legibly as people at isometric scale. The workshop produced 10 new D-records (D-148–D-157), two spec documents, and this outcomes file. --- ## Decisions Made ### Architecture decisions (`decisions/architecture.md`) | ID | Title | Summary | |---|---|---| | D-148 | 30° low-angle camera with 45° map rotation | Supersedes D-019. Default gameplay camera. Real Camera3D, not faked in art. | | D-149 | 3D characters rendered live in scene | Not pre-rendered sprites. CharacterCompositor replaces Sprite2D in EntityRenderer. | | D-150 | Character outline — inverted hull method | Uniform dark gray (#1a1a1a). GPU vertex extrusion. Baked into billboard at LOD Tier 2. | | D-151 | Direction count — 8 server / 4 client visual groups | Server tracks 8 facings. Client renders 4 visual groups (Sprint 28). West mirrors East. | | D-152 | Character LOD — performance-driven budget | Frame budget threshold, not distance or count. Three tiers. Pause = full detail everywhere. | ### Scope decisions (`decisions/scope.md`) | ID | Title | Summary | |---|---|---| | D-153 | Player not visually distinct from NPCs | Same models, same outlines. Distinction comes from gear only. | | D-154 | Outline not a relationship indicator | Uniform dark always. D-033 color palette valid in insert/perception mode only. | | D-155 | Character editor: cardinal rotation only | N/E/S/W buttons. No free-spin. Matches the 4 visual groups. | | D-156 | Faction colors = narrative, not visual | No faction color slot in compositor. Clothing choices emerge from character, not faction. | | D-157 | Game start = alarm clock / fade from black | Not a camera pull-back from editor. Editor is a separate context. | ### Amended decisions | ID | Change | |---|---| | D-019 | Marked [SUPERSEDED by D-148] | | D-033 | Amended: entity relationship color valid in insert/perception mode only; not on character outline in normal gameplay | --- ## Round 1 Proposals — Overruled The following Round 1 proposals were overruled by Jeroen and are recorded here for the archive. They should not be revisited without explicit project lead direction: | Proposal | Overruled by | |---|---| | Relationship color on outlines | D-154 — outlines are uniform dark always | | Player character visually distinct (protagonist glow/tint) | D-153 — player = NPC visually | | Free-spin in character editor | D-155 — cardinal buttons only | | Camera pull-back from editor into game world | D-157 — alarm clock / fade from black | | Faction colors as visual system | D-156 — narrative emergence only | --- ## Open Questions Resolved | Q | Question | Resolution | |---|---|---| | Q1 | 4 or 8 directions? | D-151: 8 server, 4 visual groups (Sprint 28). Hybrid approach. | | Q2 | Large crowd performance? | D-152: Performance-driven LOD. Progressive degradation outward from player. Pause = full detail. | --- ## Remaining Open Questions / Flags These were identified during the workshop but not resolved. They are implementation concerns for the client and visual teams: | Item | Owner | Notes | |---|---|---| | Exact server-facing → visual group snap mapping | Tyre | Depends on camera/grid orientation. Confirm in compositor implementation. | | Expression overlay: mesh swap vs. morph target | Tyre | Cost/quality tradeoff. Decide in #693. | | Clothing mesh per body type vs. compositor scale | Tyre | Separate `.glb` per body type is simpler; scaling risks clipping. Decide in #693. | | Stocky body type in Sprint 28 | Araminta | Stretch goal — drop if time pressure. | | D-146 + D-149 interaction | Qatux flag | D-146 says "tile-scale sprite" for editor preview; D-149 says live 3D rendering. Compatible if editor uses SubViewport with the live compositor. Do not reopen D-146. | --- ## Deliverables Produced | File | Description | |---|---| | `docs/design/character-visuals-spec.md` | Complete spec: layer stack, color regions, body/face/hair types, direction system, outline, LOD | | `docs/design/compositor-api-spec.md` | Godot compositor data model, node architecture, public API, EntityRenderer integration | | `docs/workshops/character-visuals/workshop-outcomes.md` | This file | | `docs/discussions/round-22-sprint28-character-visuals.md` | Workshop discussion archive | | `decisions/architecture.md` | D-148–D-152 added | | `decisions/scope.md` | D-153–D-157 added | | `decisions/perception.md` | D-019 superseded, D-033 amended | --- ## Downstream Impact ### Tickets unblocked by this workshop - #699 (visual team): 3D body type meshes — now have full spec - #698 (client team): 3D character editor — now has confirmed editor spec - #700 (client team): CharacterCompositor implementation — now has full API spec - #685 (wireframe): character creation screen — can now proceed with confirmed direction system and editor spec Note: tickets #686–#692 (sprite-based character assets) were cancelled by SI following the shift to live 3D rendering (D-149). ### Tickets that may need re-scoping (flag for SI) - Any tickets referencing "sprite" for character rendering should be reviewed against D-149 - The old `placeholder-art-spec-v01.md` is superseded by `character-visuals-spec.md` for character rendering decisions - D-019 was referenced in several briefings — Qatux to update affected briefings (Araminta, Tyre) ### Camera angle change (D-019 → D-148) impact - All in-progress art assets should be validated at 30° tilt (not top-down, not 45°) - Vision cone and LOS math: unaffected (server-side, 2D, unrotated space) - Tile grid and world coordinates: unaffected (45° rotation is visual only) - Briefing files: `docs/briefings/araminta.md`, `docs/briefings/tyre.md` need camera angle update