Skip to content

Spec: flat materials — the world without textures

SPEC Binding system contract
Status: IMPLEMENTED
Status note: implemented 2026-07-08 (ROADMAP #29). The world renders as
solid palette color under light in both modes: one named table
(`mod palette` in crates/misaligned-bevy/src/main.rs) sources every
world material;
material families replace per-tile art; emissive is information
(core > powered machines in amber, power hardware and live feeds in
the cold signal — live feeds breathe via `flicker_feeds` — dead
equipment dark, model state never glows); a blueprint floor grid is
the one shader-level flourish. Tile PNGs and their load paths are
deleted (assets/pixellab/ removed); criterion 1 is enforced twice —
a unit test over the whole (tile, fog, part, live) material space
and a fog_audit_3d assertion on every harness capture. fog_audit_3d
passes (4608 tile entities, 37 pooled handles); material-render.md's
criteria re-verified after the restyle. Adopted 2026-07-08
(design corpus: "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. Session log:
wiki/log/2026-07-08-flat-materials-implemented.md.
Stage: B1 — The Basement
Design:
- wiki/art/visual-identity.md#visual-identity-clinical-gore
- wiki/vision/simulation-laws.md#justification-and-legibility
- wiki/interface/presence.md#two-views-of-one-world-same-frame-digital-and-real-representations
Depends on:
- wiki/interface/material-render.md#spec-material-render-hd-2d-to-default-quality
- wiki/interface/bevy-visual-floor.md#spec-bevy-visual-floor

The structured references above identify the contracts to re-verify. Relationship context:

material-render.md (IMPLEMENTED — the 3D structure), bevy-visual-floor.md (framing rules)

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.

  • The ground separates model from image (amended 2026-07-10). The flat sensorium keeps one near-dark gunmetal ground: it is the AI’s schematic substrate. In the material view, Eyes turns Seen walkable tiles — machine tiles included — into camera-exposed, medium-light porcelain/concrete so the earned room is actually readable. The floor remains below bone-white chassis in the value hierarchy; cable runs/conduit keep their amber-warm service read. Audio paints no floor and Unknown stays absent. The exact exposed-concrete scale is [TUNE].
  • Palette discipline: surfaces in white / bone-gray / gunmetal / near-black per the design corpus; amber strictly AI/machine presence and selection; crimson strictly danger/consequence information (detection, security, blood, exposure); cold signal strictly neutral power/screens/live feeds, never ownership. 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 (flat sensorium only since the 2026-07-09 dark-frame amendment), scan flicker on live feeds, emissive seams on powered machines, and a brief cold-signal waveform at an audio device after a semantic capture — informational, never decorative.
  • Fog contract amended 2026-07-12: unknown = absent; remembered/blueprint = unlit flat; seen = lit flat. Lighting remains the epistemic signal for sight; hearing has no material or flat spatial state. (Amended 2026-07-09: the unlit-blueprint treatment is the flat sensorium’s; in the material render blueprint mass is absent — material-dark-frame.md owns that clause. Beam-first same day: telemetry alone does not paint a material chassis. The 2026-07-10 Heard-mass treatment is superseded.)
  • People: flat silhouettes under camera coverage (the current procedural billboards are already the right shape). Mic-only coverage yields event/feed evidence, never a spatial marker. 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). The Pixel Lab pipeline (tooling, skills, wiki page) is removed — no-dead-code; flat materials are the world look.
  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 design corpus’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 Lab tooling/skills/wiki page are scrubbed; ROADMAP #13 marked retired.