Files
settled-reach/docs/discussions/round-22-sprint28-character-visuals.md
jpmschweitzerandClaude Opus 4.6 6dee6b73f0 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>
2026-03-17 23:34:16 +01:00

8.2 KiB
Raw Permalink Blame History

title, description, type, status, round, created
title description type status round created
Round 22: Sprint 28 Character Visuals Workshop Three-round structured workshop producing character visual architecture specs; D-148D-157; supersedes D-019 discussion complete 22 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:

  • 23 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-148D-152 to decisions/architecture.md, D-153D-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