diff --git a/DESIGN.md b/DESIGN.md --- a/DESIGN.md +++ b/DESIGN.md @@ -313,6 +313,19 @@ - Traps are industrial and matter-of-fact: laser grids, hydraulic press, bolt-gun turrets. Decapitation as workplace incident. +**Flat materials, not textures (adopted 2026-07-08).** The renderer +realizes this identity with **solid-color flat materials under light**, +not image textures: disciplined palette surfaces, emissive accents for +machine presence, shader-level detail (grids, scan flicker) where detail +is functional. The lighting is the mood carrier — the material render +proved the amber glow and lit-vs-unlit fog do the work while pixel +textures fought the look. This is also diegetic: the physical view is +the AI's sensorium model of the world, and a schematic-clinical render +is what a model looks like. Gore/crimson remains the accent and stays +shape-and-color, not texture. Pixel-art asset generation (the Pixel Lab +pipeline) is retired for world tiles; texture detail, if it ever +returns, is a deliberate future decision for hero objects only. + ## The terminal is a first-class frontend Adopted 2026-07-06. The game is played regularly by AI agents — every tick, @@ -1717,3 +1730,16 @@ code already knows the thing); printing person names in agent anchors (identity may be unearned; ids are opaque handles). Spec: wiki/interface/context-menu.md (addendum). +- **2026-07-08 — Flat materials: textures dropped.** Cameron's verdict + after the material-render landing: drop textures entirely. The world + renders in solid-color flat materials under light (palette surfaces, + emissive machine accents, shader-level functional detail); the visual + identity section gains the binding refinement. Rationale: every good + frame in the HD-2D work was lighting and palette, every bad one was + texture; zero asset pipeline; diegetically right (the render is the + sensorium's model). Rejected: better AI texture tooling (Scenario / + Retro Diffusion — solves consistency, not the direction), licensed + packs (someone else's look), commissioned tilesets (reserved as a + possible future hero-art pass). ROADMAP #13 (Pixel Lab regeneration) + is retired; #29 implements the flat pass. Spec: + wiki/interface/flat-materials.md. diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -61,6 +61,7 @@ - [Views: digital and physical](interface/views.md) - [Context menu](interface/context-menu.md) - [Material render](interface/material-render.md) + - [Flat materials](interface/flat-materials.md) - [Agent play](interface/agent-play.md) # Art diff --git a/wiki/art/pixel-pipeline.md b/wiki/art/pixel-pipeline.md --- a/wiki/art/pixel-pipeline.md +++ b/wiki/art/pixel-pipeline.md @@ -3,6 +3,13 @@ ``` Type: knowledge ``` + +**RETIRED for world tiles (2026-07-08).** The flat-materials decision +(constitution: "Visual identity"; wiki/interface/flat-materials.md) +drops image textures from the world render. This pipeline remains +documented for history and for any future hero-art pass, but no new +world-tile generation happens; ROADMAP #13 is retired. + Canonical doc for generating and integrating pixel art. The generator script is `tools/pixellab/generate.py` (stdlib-only Python; single-image or idempotent batch mode — it skips PNGs that already exist). diff --git a/wiki/interface/flat-materials.md b/wiki/interface/flat-materials.md new file mode 100644 --- /dev/null +++ b/wiki/interface/flat-materials.md @@ -0,0 +1,70 @@ +# Spec: flat materials — the world without textures + +``` +Type: spec +Status: READY +Status note: adopted 2026-07-08 (constitution: "Visual identity", + flat-materials refinement). Supersedes the texture-treatment parts of + material-render.md (which stays IMPLEMENTED — its camera, cutaway, + fog-lighting contract, framing, and pooling all carry over unchanged); + retires the Pixel Lab world-tile pipeline and ROADMAP #13. +Stage: B1 — The Basement +Constitution: "Visual identity: clinical gore" (flat materials + refinement, 2026-07-08), "Justification and legibility" (detail only + where it informs), interface/views.md (same-frame contract), + interface/material-render.md (the structural render this restyles) +Depends on: material-render.md (IMPLEMENTED — the 3D structure), + bevy-visual-floor.md (framing rules) +``` + +## Behavior + +Every world surface in both render modes draws as a **solid-color flat +material under light** from the clinical palette; no image textures in +the world render. The identity's detail budget moves entirely to +lighting, palette, silhouette, and shader-level functional detail. + +- **Palette discipline:** surfaces in white / bone-gray / gunmetal / + near-black per the constitution; amber strictly machine presence and + selection; crimson strictly gore/security information; one cold + signal color for power/screens. Palette constants live in one place + in the frontend, named, so the whole look retunes from one table. +- **Material families, not per-tile art:** floor, wall, rock, door + (by tier), machine chassis, device, person silhouette — each a flat + base color + roughness, with emissive variants for powered/known + states. Pooled exactly like the current material pool. +- **Functional shader detail only:** a subtle floor grid in blueprint + areas, scan flicker on live feeds, emissive seams on powered + machines. No decorative noise. +- **Fog contract unchanged and restated:** unknown = absent, heard = + dim presence, remembered/blueprint = unlit flat, seen = lit flat. + Lighting remains the epistemic signal. +- **People:** flat silhouettes (the current procedural billboards are + already the right shape); identity stays a panel/menu fact. +- **Sensorium (flat) mode** adopts the same palette table so F3 flips + treatment, never language. +- **Asset retirement:** the Bevy world render stops loading tile PNGs; + assets/ keeps only what the UI genuinely still uses (icons, font). + wiki/art/pixel-pipeline.md gets a retirement note pointing here. + +## Acceptance criteria + +1. No image textures load in the world render (both modes); a test or + startup assert proves the world material set references no tile + PNGs. +2. All world materials come from the named single-source palette table; + amber/crimson/signal usage matches the constitution's roles (visual + audit recorded in the session log with screenshots). +3. Emissive states are informational: powered vs dead machines, live + feeds, and the core read differently at a glance in the dark + (screenshot evidence). +4. The fog contract audit (fog_audit_3d) still passes; unknown space + stays absent, model state stays unlit. +5. Framing, cutaway, zoom bounds, and material pooling from + material-render.md hold unchanged (its criteria re-verified after + the restyle). +6. Both frontends and the agent frame remain legible per the visual + floor; the terminal is untouched except palette-name references. +7. Unused tile-art assets and their load paths are removed; + pixel-pipeline.md carries the retirement note; ROADMAP #13 marked + retired. diff --git a/wiki/log/2026-07-08-flat-materials-decision.md b/wiki/log/2026-07-08-flat-materials-decision.md new file mode 100644 --- /dev/null +++ b/wiki/log/2026-07-08-flat-materials-decision.md @@ -0,0 +1,18 @@ +# 2026-07-08 - Design decision: flat materials, textures dropped + +``` +Type: log +``` + +Cameron reviewed the landed material render and the art-tooling options +(better AI texture tooling, licensed packs, commissioned tilesets, or +dropping textures for flat materials + lighting) and decided: **drop +textures.** Every strong frame in the HD-2D work was lighting and +palette; every weak one was texture. The direction is also diegetic — +the physical view is the sensorium's model of the world. + +Captured: constitution visual-identity refinement + decisions-log entry +(with the rejected alternatives recorded), spec +wiki/interface/flat-materials.md (READY, seven criteria), ROADMAP #13 +retired / #29 added, pixel-pipeline.md retirement note. Implementation +dispatched as #29. Docs-only commit. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -5,6 +5,15 @@ ``` Reverse chronological implementation notes. Keep this factual: what changed, why, checks, and spec impact. +## 2026-07-08 - Design decision: flat materials + +- Textures dropped from the world render per Cameron's verdict: flat + solid-color materials under light, single palette table, emissive as + information. Constitution refinement + decisions entry; spec + interface/flat-materials.md (READY); ROADMAP #13 retired, #29 added; + pixel-pipeline retirement note. Docs only; implementation is #29. + Log: wiki/log/2026-07-08-flat-materials-decision.md. + ## 2026-07-08 - Material render to default (ROADMAP #27) - Intent: implement material-render.md — pay the HD-2D prototype debts, diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -423,13 +423,21 @@ camera/material dialect over the same map anchors, no sim/save changes, and an observed screenshot review. Run ./tools/check.sh and land." -### 13. Art regeneration 🟩 isolated (assets) — ⛔ blocked on quota -- **Why:** clinical-amber b1 tiles via Pixel Lab (see the pixellab skill). - Zero code conflict, but blocked until the API quota refreshes. -- **Dispatch (once quota is back):** "Work in a worktree named `art-b1`. - Regenerate the remaining b1 tiles per assets/pixellab/manifest.json and the - pixellab skill; wire new textures into src/bin/bevy.rs Art::load and clear - the matching placeholders in wiki/art/pixel-pipeline.md. Land." +### 13. Art regeneration — RETIRED 2026-07-08 +- Superseded by the flat-materials decision (constitution: "Visual + identity", flat-materials refinement): textures are dropped from the + world render entirely; the Pixel Lab world-tile pipeline is retired. + See #29 and wiki/interface/flat-materials.md. + +### 29. Flat materials: the world without textures 🟩 isolated (src/bin/bevy.rs + assets) +- **Spec:** [flat-materials.md](../interface/flat-materials.md) (READY) +- **Why:** Cameron's 2026-07-08 art verdict — solid-color flat materials + under light, palette from one named table, emissive as information, + no image textures in the world render; tile-art assets removed. +- **Size:** M. **Dispatch:** "Work in a worktree named `flat-materials`. + Implement wiki/interface/flat-materials.md, all seven criteria, with + before/after screenshots in the session log. Run ./tools/check.sh, + land on main, set the spec Status." --- diff --git a/wiki/process/specs.md b/wiki/process/specs.md --- a/wiki/process/specs.md +++ b/wiki/process/specs.md @@ -39,6 +39,7 @@ | [interface/views.md](../interface/views.md) | Same-frame digital and real representations of one world | READY | | [interface/context-menu.md](../interface/context-menu.md) | Context menu: anchor verbs at the focus; the rail is status only | IMPLEMENTED | | [interface/material-render.md](../interface/material-render.md) | Material render (HD-2D) from landed toggle to default quality | IMPLEMENTED | +| [interface/flat-materials.md](../interface/flat-materials.md) | Flat materials: the world without textures; palette table; emissive as information | READY | | [mechanics/building.md](../mechanics/building.md) | Building as intent + actuators: network links, favor/forged-order builds, air-gap bridging | IMPLEMENTED | | [mechanics/aggregate-observer.md](../mechanics/aggregate-observer.md) | Assurance Office becomes an aggregate Observer (scale-debt fix) | IMPLEMENTED | | [world/characters/marcus.md](../world/characters/marcus.md) | Marcus Webb — night janitor; the asset template | READY |