Spec: material render — HD-2D to default quality
Status: IMPLEMENTEDStatus note: implemented 2026-07-08 — the material render reached default-quality physical-view treatment and became Bevy's REAL dialect. It was the opening default until views.md criterion 1 landed on 2026-07-11; fresh frontends now open DIGITAL and F3 flips to REAL. Debts paid: fog-gated south-face cutaway (chosen over a steeper pitch by screenshot comparison), dedicated darkened top caps on all extruded boxes, palette sweep of the b1 set (door/UPS/HVAC/switch hue-remapped off the stale purple/teal lair palette), fog contract asserted by a dev-harness audit (unknown=absent, model=unlit, seen=lit), zoom bounds tightened to hold the framing floor, and (tile, fog, part) material pooling with handle swaps (37 pooled handles for ~4600 tile entities in the audit run). People remain procedural silhouette billboards pending the cast sprite pass (debt 6, out of scope here). Prototype findings inventory: wiki/log/2026-07-07-hd2d-prototype.md; session log: wiki/log/2026-07-08-material-render-default.md. 2026-07-08 flat-materials restyle (flat-materials.md): the texture language here (tile textures on sides, concrete caps) is superseded by solid palette color; the structural criteria (cutaway, caps, framing, fog contract, pooling, physical-view quality) were re-verified after the restyle — fog_audit_3d green, zoom-bound screenshots retaken. 2026-07-09 dark-frame amendment (material-dark-frame.md): in the material render, blueprint/remembered mass is absent (not unlit) and the default framing is the attention close-up, not fit-to-known-content; that spec owns both clauses now. The flat sensorium keeps unlit blueprint; everything else here carries over. 2026-07-10 perf pass: wall-clock timer lives off Game so restyle/UI do not rebuild every display frame; owned-tile caches. The old Heard-noise walk was removed by the 2026-07-12 channel-evidence amendment; audio now costs only bounded device-local event pulses.Stage: B1 — The BasementDesign: - wiki/interface/presence.md#two-views-of-one-world-same-frame-digital-and-real-representations - wiki/art/visual-identity.md#visual-identity-clinical-gore - wiki/vision/simulation-laws.md#justification-and-legibilityDepends on: - wiki/interface/views.md#spec-views-same-frame-digital-and-real-representations - wiki/mechanics/cursor.md#spec-the-cursor-and-the-senses - wiki/interface/bevy-visual-floor.md#spec-bevy-visual-floorDependency notes
Section titled “Dependency notes”The structured references above identify the contracts to re-verify. Relationship context:
views.md (same-frame contract), cursor.md (fog states), bevy-visual-floor.md (framing floor), the landed F3 toggle
Behavior
Section titled “Behavior”The material render (Camera3d, extruded walls, billboarded sprites, lit) is Bevy’s default-quality REAL physical-view treatment; the flat sensorium remains the DIGITAL home/default and the terminal remains first-class. The prototype’s fog contract is law: unknown space is absent geometry, blueprint/remembered surfaces render unlit, only camera-seen surfaces participate in lighting. (Amended 2026-07-09: in the material render blueprint/remembered mass no longer draws at all — material-dark-frame.md owns that clause; unlit blueprint remains the flat sensorium’s treatment.)
The debts (from the prototype findings)
Section titled “The debts (from the prototype findings)”- South-wall occlusion: walls between the camera and room interiors hide them at the 40 degree pitch. Fix by cutaway (short or faded south faces) or steeper pitch; pick by screenshot comparison.
- Slab tops: extruded boxes reuse wall textures on top faces and read as gray slabs. Top faces get a dedicated treatment (darkened variant or a top-face texture set).
- Stale palettes: the door PNG reads purple under 3D light; sweep tiles for palette debts against the clinical-amber palette.
- Framing: the visual-floor rules (fit-to-known-content, no postage stamp, no void-dominant frame) hold in material mode at all zoom levels.
- Perf: materials pooled by (tile, fog, part) and handle-swapped; no per-tile unique material mutation (prototype finding 5). Wall- clock pacing must not dirty the Game resource every display frame — restyle_3d, map recolor, and the sidebar rebuild only on sim steps (or explicit dirty), not at 60 Hz from the tick timer alone.
- People: the procedural silhouette billboards are placeholders; they read as presence, not identity, until the cast sprite pass — identity stays a panel/menu fact (legibility, not portraiture).
Acceptance criteria
Section titled “Acceptance criteria”- Room interiors are readable at default pitch: the chosen occlusion fix (cutaway or pitch) lands with before/after screenshots in the session log.
- Top faces no longer read as untextured slabs (dedicated treatment).
- No stale-palette tiles remain in the b1 set under 3D light (door fixed; sweep recorded).
- The fog contract holds and is asserted: unknown = no geometry, blueprint/remembered = unlit, seen = lit (screenshot or debug-dump verification recorded in the log).
- Framing floor holds in material mode (fit, zoom bounds, no void dominance) — checked at min/default/max zoom.
- Material pooling implemented; tile-count-scaled material churn is gone (no per-tile unique materials in the frame loop). Full map restyle is not driven by the wall-clock timer alone — only by sim steps or an explicit dirty flag (2026-07-10).
- Material render reaches default-quality physical-view treatment as the REAL dialect; F3 selects it from DIGITAL home; README and bevy.md stay current; terminal unaffected.