docs(governance): address PR #169 review — reconcile sprite-era decisions + doc fixes
Tyre: D-244 now references its precedent (D-148 3D camera / D-149 live 3D characters — D-244 completes that pivot for objects + assets) and reconciles the 5 sprite-era decisions it touched, all amended 2026-06-17: - D-043: 'not 3D' / Light2D scoped to overlay layers; in-world is 3D. - D-044: sprite footprint retired (sim occupancy + visual hierarchy survive). - D-049: z-stack logical model survives; sprite/CanvasLayer implementation language retired. - D-066: dual-scale coordinate model + 2x2 geometry minimum survive; sprite-footprint language legacy. Hoshe (doc QA): - D-244 broken cross-file anchors fixed ([D-159]->scope.md, [D-241]->process.md). - renderer/README: bare [D-244] linked; D-019->D-148 camera note; legacy banner over the object-sprite workflow sections; resolution-chain output path qualified. - docs/assets/_templates/sprite.md + README: marked the template legacy object-sprite schema (model/texture/artwork template TBD). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,7 +24,7 @@ docs/assets/
|
||||
README.md # This file — master index
|
||||
_templates/
|
||||
audio.md # Row template + detailed entry template for audio
|
||||
sprite.md # Row template for 2D artwork rows (paintings/flags/billboards — see /sprite-gen)
|
||||
sprite.md # LEGACY object-sprite row template (D-244 retired sprites; model/texture/artwork template TBD)
|
||||
video.md # Row template + detailed entry template for video
|
||||
audio/
|
||||
README.md # Audio pipeline index — categories, status summary
|
||||
|
||||
@@ -7,6 +7,8 @@ status: active
|
||||
|
||||
# Sprite Asset Template
|
||||
|
||||
> **Legacy (D-244).** This is the retired **object-sprite** row schema (4-direction, resolution variants). Per [D-244](../../../governance/decisions/architecture.md#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork), game objects are 3D (not sprites) and the only flat 2D content is textures + artwork — so a model / texture / artwork row template is TBD (tracked with the visual-catalog re-scope, T-961/T-1049/T-1050). This schema is kept for reference and for the 2D-artwork (paintings/flags/billboards) use of `/sprite-gen`.
|
||||
|
||||
## Table Row Format
|
||||
|
||||
```
|
||||
|
||||
@@ -176,6 +176,7 @@ Technical foundation decisions that constrain implementation: engine, client-ser
|
||||
- **Cursor/interaction:** No change — cursor already resolves to sim tile from pixel position. Interaction range of ~2 sim tiles = 1m (arm's length).
|
||||
- **Map authoring:** Author at 1m visual scale. Subdivision tool expands each visual tile to 4 sim tiles (2x2). Validation enforces 2x2 minimum on all world geometry layers.
|
||||
- **Amends:** OQ-01 resolution (ticket T-444). Sim tile size remains 0.5m; visual presentation changes from 1:1 to 2:1 retina factor.
|
||||
- **Amendment (2026-06-17):** The dual-scale coordinate model (0.5 m Subtile / 1 m Tile) and the 2×2-sim-tile **geometry minimum** are unchanged and load-bearing for the 3D architecture — cover/LOS/collision still map 1:1 to what the player sees. The "**Sprites: 2×2 sim tile footprint**" bullet and the "sprites look right" rationale are pre-Sprint-28 sprite-era: in-world entities/objects are now rendered as 3D ([D-149](#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites) / [D-244](#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork)), so there is no pixel sprite footprint — the 2×2 figure persists only as the visual-tile proportionality the 3D entity occupies. The spatial math survives; only the rendering technology changed.
|
||||
- **Cross-reference:** Tile-based movement ([D-054](#d-054-tile-based-movement-with-same-tile-occupancy)), shadowcasting ([D-238](perception.md#d-238-symmetric-shadowcasting-albert-ford-selected-for-los-computation)), fog ([D-059](perception.md#d-059-fog--shader-based-five-layers-knowledge-graph-driven)), art direction ([D-043](perception.md#d-043-art-direction--visual-style-functional-warmth)), z-stack ([D-049](perception.md#d-049-z-level-rendering-stack-8-layers)), stance system ([D-053](scope.md#d-053-movement-as-stance-toggle-system))
|
||||
- **Rationale:** 0.5m sim tiles give stealth-grade granularity for movement stances, cover peeking, and interaction range. 1m visual tiles make spaces feel proportional, sprites look right, and world geometry readable. The 2x2 minimum on geometry eliminates visual/sim mismatch for cover and LOS — the only sub-visual-tile positioning is entity movement, which is communicated through fog feedback, not tile counting. Analogous to macOS Retina: logical resolution (visual) differs from physical resolution (sim), but the system is coherent because both agree on where solid objects are.
|
||||
- **Raised by:** Team Leader (Jeroen) — proposed retina scaling analogy and 2x2 geometry constraint. Tyre (feasibility: trivial, half-day integration). Gestalt (approved with 2x2 constraint resolving LOS readability concern). Ozzie (approved: solves sprite scale without uncanny mismatch).
|
||||
@@ -1844,13 +1845,13 @@ Technical foundation decisions that constrain implementation: engine, client-ser
|
||||
|
||||
### D-244: Asset rendering — 3D objects in-world; 2D limited to textures + flat artwork
|
||||
- **Date:** 2026-06-16
|
||||
- **Decision:** The in-world view renders **3D objects directly**. Environment and props come from the Trellis image→3D `.glb` pipeline (`/glb-gen`, promoted per [D-241](#d-241)); characters come from the Quaternius 3D-mesh pipeline composited at runtime via `CharacterVisualDescriptor` ([D-159](#d-159)–[D-164](#d-164): 11 body types, segmented regions, separate head mesh, slot system, shape keys, region tints). The **only flattened 2D content** is **(a) textures** (PBR maps on 3D surfaces) and **(b) flat 2D artwork** — paintings, flags, billboards, signage, screen content — images that live as textures/decals on flat surfaces *within* the 3D world. There is **no per-object sprite layer**: game objects are not pre-rendered to 2D sprites for display.
|
||||
- **Decision:** The in-world view renders **3D objects directly**. Environment and props come from the Trellis image→3D `.glb` pipeline (`/glb-gen`, promoted per [D-241](process.md#d-241-spike-binary-artifacts-are-local-only--gitignored-never-tracked)); characters come from the Quaternius 3D-mesh pipeline composited at runtime via `CharacterVisualDescriptor` ([D-159](scope.md#d-159-character-body-type-enum-5-types--2-genders--1-child-skeleton-11-total)–[D-164](#d-164): 11 body types, segmented regions, separate head mesh, slot system, shape keys, region tints). The **only flattened 2D content** is **(a) textures** (PBR maps on 3D surfaces) and **(b) flat 2D artwork** — paintings, flags, billboards, signage, screen content — images that live as textures/decals on flat surfaces *within* the 3D world. There is **no per-object sprite layer**: game objects are not pre-rendered to 2D sprites for display. This **completes** the 3D pivot already ratified for the camera ([D-148](#d-148-30-low-angle-camera-with-45-map-rotation--supersedes-d-019), supersedes D-019) and live 3D characters ([D-149](#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites)), extending it to all objects and the asset pipeline.
|
||||
- **Rationale:** The character system is irreducibly 3D — runtime slot compositing across body × head × hair × clothing × skin-tone × colour-overrides × shape-keys × directions × animation-frames cannot be expressed as pre-rendered sprites without combinatorial explosion. The 3D direction was already implicit in the character architecture (the 2026-03-19 character-asset doc states "no mesh work from the spikes carries over") and the Trellis environment pipeline, but was never ratified — so the retired 2D-sprite assumption drifted on in tooling and docs.
|
||||
- **What this retires / repurposes:** the early-spike **3D→2D-sprite render pipeline** (`renderer/`, the `/sprite-gen` skill, added in #541) is **not** the in-world format. It is **repurposed as the 2D-artwork generator** — producing the flat paintings/flags/billboards/signage assets in (b). The sprite-centric asset catalog (`docs/assets/visual/` sprites/tilesets framing, `_templates/sprite.md`) is re-scoped to a **3D-model + texture + artwork** catalog.
|
||||
- **Root-cause note:** T-1049/T-1050 (the 2026-06-12 `fable-ous.md` audit) re-injected the dead sprite model because the retired spike scaffolding sat in the repo as live ground truth with no decision marking it dead. This record is that marker; T-961/T-1049/T-1050 are held in backlog pending re-scope.
|
||||
- **Cross-reference:** [D-159](#d-159)–[D-164](#d-164) (character 3D pipeline), [D-241](#d-241) (asset promotion), [D-227](#d-227) (derive/synthesise, don't store). Phase 5 (in-world rendering) builds on this.
|
||||
- **Cross-reference:** **Builds on** [D-148](#d-148-30-low-angle-camera-with-45-map-rotation--supersedes-d-019) (3D camera, supersedes D-019) and [D-149](#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites) (live 3D characters, not sprites) — D-244 extends both to all objects + the asset pipeline. [D-159](scope.md#d-159-character-body-type-enum-5-types--2-genders--1-child-skeleton-11-total)–[D-164](#d-164) (character 3D pipeline), [D-241](process.md#d-241-spike-binary-artifacts-are-local-only--gitignored-never-tracked) (asset promotion), [D-227](#d-227) (derive/synthesise, don't store). **Reconciles the sprite-era decisions** (all amended 2026-06-17): [D-043](perception.md#d-043-art-direction--visual-style-functional-warmth) ("not 3D"/Light2D scoped to overlay layers), [D-044](perception.md#d-044-art-direction--visual-hierarchy-entity--object--structure) (sprite footprint retired; sim occupancy + hierarchy survive), [D-049](perception.md#d-049-z-level-rendering-stack-8-layers) (z-stack logical model survives; sprite implementation language retired), [D-066](#d-066-dual-scale-grid--05m-simulation-1m-visual-2x-retina-factor) (coordinate model + 2×2 geometry minimum survive; sprite-footprint language legacy); [D-019] is already superseded by D-148. Phase 5 (in-world rendering) builds on this.
|
||||
- **Dissent:** None
|
||||
|
||||
---
|
||||
|
||||
*101 decisions (D-001 through D-244, excluding gaps). Last updated: 2026-06-16 (D-244 — asset rendering direction: 3D objects in-world (Trellis environment + Quaternius characters via CharacterVisualDescriptor); 2D limited to textures + flat artwork (paintings/flags/billboards/signage); the early-spike sprite-render pipeline is repurposed as the 2D-artwork generator, not the in-world format; re-scopes T-961/T-1049/T-1050).*
|
||||
*101 decisions (D-001 through D-244, excluding gaps). Last updated: 2026-06-17 (D-244 — asset rendering direction: 3D objects in-world (Trellis environment + Quaternius characters via CharacterVisualDescriptor); 2D limited to textures + flat artwork; repurposes the early-spike sprite pipeline as the 2D-artwork generator; builds on D-148/D-149 and reconciles the sprite-era decisions D-043/D-044/D-049/D-066 (all amended); re-scopes T-961/T-1049/T-1050).*
|
||||
|
||||
@@ -146,6 +146,7 @@ How the player observes and interacts with the world: camera, fog, line-of-sight
|
||||
- **Canonical reference:** `docs/workshops/art-direction-mood-board/workshop-outcomes.md` §1.1, §9.1-9.3
|
||||
- **Raised by:** Araminta (lead), unanimously endorsed. Art Direction & Mood Board Workshop (3 rounds + closing).
|
||||
- **Dissent:** None. All four agents independently converged on the same style.
|
||||
- **Amendment (2026-06-17):** The "not 3D" and Light2D-pipeline clauses describe the **overlay** layers (insert, fog, UI). The **in-world** view renders in 3D: camera per [D-148](architecture.md#d-148-30-low-angle-camera-with-45-map-rotation--supersedes-d-019), live 3D characters per [D-149](architecture.md#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites), all objects + the asset pipeline per [D-244](architecture.md#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork). The "functional warmth" aesthetic, bold silhouettes, outline language, and the resolution chain survive — the chain now serves 2D textures + flat artwork (paintings/flags/billboards/signage), not per-object sprites.
|
||||
|
||||
### D-044: Art direction — visual hierarchy (entity > object > structure)
|
||||
- **Date:** 2026-02-12
|
||||
@@ -155,6 +156,7 @@ How the player observes and interacts with the world: camera, fog, line-of-sight
|
||||
- **Raised by:** Araminta (outline spec), Ozzie (readability priority). Unanimously endorsed.
|
||||
- **Dissent:** None
|
||||
- **Amendment (2026-04-05):** The "D-033 relationship color" outline spec for entities applies only in perception mode overlay. [D-154](scope.md#d-154-character-outline-is-not-a-relationship-indicator--uniform-dark) (2026-03-17) establishes uniform dark outlines (#1a1a1a) for all characters in normal gameplay. The visual hierarchy layers remain valid; the entity outline color rule changes from always-on to perception-mode-only.
|
||||
- **Amendment (2026-06-17):** The three-layer visual *hierarchy* (entity > object > structure; entity-wins-ties readability rule) and the 1×1 simulation occupancy survive. The **2×2 subtile sprite footprint** and the **24×32px pixel footprint** are sprite-era specs, retired for in-world objects/entities per [D-149](architecture.md#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites) / [D-244](architecture.md#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork) — live 3D characters/objects have no pixel sprite footprint. The silhouette-as-identity principle carries to the 3D character silhouette.
|
||||
|
||||
### D-045: Art direction — environmental neutrality (strict zero shift)
|
||||
- **Date:** 2026-02-12
|
||||
@@ -196,6 +198,7 @@ How the player observes and interacts with the world: camera, fog, line-of-sight
|
||||
- **Canonical reference:** `docs/workshops/art-direction-mood-board/workshop-outcomes.md` §1.14
|
||||
- **Raised by:** Araminta (8-layer spec), Gore (overhead as thematic tool). Unanimously endorsed.
|
||||
- **Dissent:** None
|
||||
- **Amendment (2026-06-17):** The z-stack as a **logical** layering model — what occludes what; overhead/fog/insert/UI ordering — survives. Its implementation language ("entity sprites", CanvasLayer y-sort) is sprite-era: in-world layers 2–3 are now 3D scene nodes per [D-149](architecture.md#d-149-3d-characters-rendered-live-in-scene--not-pre-rendered-sprites) / [D-244](architecture.md#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork), z-ordered by the 3D renderer (camera per [D-148](architecture.md#d-148-30-low-angle-camera-with-45-map-rotation--supersedes-d-019)). Layers 5–7 (fog, insert, UI) remain 2D overlays.
|
||||
|
||||
### D-052: Character favorite colors — object-layer identification
|
||||
- **Date:** 2026-02-12
|
||||
|
||||
+9
-3
@@ -1,7 +1,7 @@
|
||||
# Settled Reach — 2D Artwork Render Pipeline
|
||||
|
||||
> **Repurposed (D-244).** This offline Godot renderer is **not** the in-world object
|
||||
> format. Per [D-244] the in-world view renders 3D objects directly (props via Trellis
|
||||
> format. Per [D-244](../governance/decisions/architecture.md#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork) the in-world view renders 3D objects directly (props via Trellis
|
||||
> `.glb` / `/glb-gen`; characters via the Quaternius pipeline + `CharacterVisualDescriptor`);
|
||||
> the only flattened 2D content is **textures** and **flat 2D artwork** (paintings, flags,
|
||||
> billboards, signage). This pipeline began as the #541 3D-to-2D *sprite* spike and now
|
||||
@@ -18,7 +18,9 @@ Offline Godot 4 renderer. Produces flat 2D artwork (and, in its legacy mode, 3D-
|
||||
- **Position**: `(0, 3, 1)` — above and slightly in front of the model origin
|
||||
- **Godot Transform3D**: `Transform3D(1, 0, 0, 0, 0.30071, 0.95372, 0, -0.95372, 0.30071, 0, 3, 1)`
|
||||
|
||||
This is "the angle" per D-019 amendment (2026-02-12). All entity, object, and wall sprites for v0.1 are rendered at this angle. The Godot gameplay camera is purely orthographic — this tilt is an art convention expressed through the 3D render.
|
||||
**Note (D-244):** D-019 is superseded by D-148 (30° low-angle Camera3D) for the **gameplay** camera. The −72.5° angle here is the **offline render** camera used for 2D-artwork generation (and the retired object-sprite mode) — not the in-world gameplay camera.
|
||||
|
||||
This is "the angle" per the D-019 amendment (2026-02-12); v0.1 object-sprite rendering used it, now retired. The offline renderer keeps this fixed camera for flat-artwork output.
|
||||
|
||||
## Lighting Rig
|
||||
|
||||
@@ -39,11 +41,15 @@ Three-point studio rig. All lights have `shadow_enabled = false` — sprites are
|
||||
↓ bilinear resize
|
||||
256×256 — working PNG, outline applied at 4-8px, color #333340
|
||||
↓ bilinear resize
|
||||
64×64 — runtime PNG, deployed to client/assets/sprites/
|
||||
64×64 — runtime PNG (legacy object-sprite output → client/assets/sprites/; for flat artwork, promote to client/assets/textures or .../artwork)
|
||||
```
|
||||
|
||||
Outline implementation: alpha-mask dilation + flat color fill. Outline width in `render_export.gd`: `outline_width_px = 4` (at 256px = 1px effective at 64px).
|
||||
|
||||
## ⚠️ Legacy: object-sprite workflow (retired per D-244)
|
||||
|
||||
Everything from here down describes the **retired** object-sprite pipeline (#541 spike) — entity/object/wall sprites are no longer the in-world format (objects are 3D `.glb`; characters are 3D meshes). It is kept for reference, and because the camera / lighting / resolution mechanics above are reused for **2D-artwork** rendering. When generating flat artwork, promote outputs to `client/assets/textures` or `client/assets/artwork` (**not** `client/assets/sprites/`) and ignore the entity-sprite footprint / material / deployment specifics below.
|
||||
|
||||
## Entity Footprint Spec (D-044, D-066)
|
||||
|
||||
- Entity sprites occupy a **24×32px footprint** within the 64×64 visual tile
|
||||
|
||||
Reference in New Issue
Block a user