Files
bubblechambersimart/fable/stack/SPEC.md
2026-07-05 20:00:13 -04:00

100 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# The Chamber as a Volume — acrylic stack spec & depth design
A backlit, six-plane physical piece for the eufyMake E1: three acrylic sheets,
printed front **and** back, spaced with air gaps over an LED panel. This is
roadmap Phase 3 made literal — the scene model's per-track `z` and `age` stop
being opacity tricks and become actual millimetres.
## Physical stack (proposed — buy list at bottom)
```
viewer
─ C-front the hand: grease pencil, réseau, fiducials, header, scratches
═ sheet C 3 mm clear cast acrylic
─ C-back near scatter: δ-ray curls, close cosmics
~6 mm air gap
─ B-front THE EVENT: sharp beaded track cores
═ sheet B 3 mm
─ B-back halation: the same tracks, blurred — real glow-behind-the-line
~6 mm air gap
─ A-front history: older background events, sinking
═ sheet A 3 mm
─ A-back the cause: pressure disk (CMYK-only → pure glow) + chamber optics
~12 mm gap
▤ diffuser frosted acrylic 23 mm (kills LED hotspots)
▦ LED panel A3 slim light pad
```
Plane depths (A-back = 0): 0 / 3 / 9 / 12 / 18 / 21 mm — two depth scales:
3 mm *within* a sheet (fine parallax: halation, moiré) and 9 mm *between*
sheets (coarse parallax: cause → event → hand).
**The depth story is causal, not just spatial**: deepest plane is the cause
(the pressure wave, pure transmitted light), then history, then the halation,
then the event itself, then the debris flying toward you, and finally — on the
front glass, where scanners actually wrote — the human hand measuring it all.
Parallax reads as *interpretation floating above evidence*.
## Sheet & print geometry
- Sheet: 330 × 420 mm (E1 full bed, A3+), portrait. 3 mm clear cast acrylic,
gloss both faces.
- Art square: 300 × 300 mm, centred horizontally (15 mm margins), top edge at
y = 20 mm. Zone below (y = 320420) carries film furniture / data box /
caption on C-front only; other sheets stay clear there (light spills through
— the plate floats in a lit void).
- Corner mounting holes 5 mm ∅ at 8 mm insets, all sheets + diffuser, for M4
nylon standoffs (3 mm + 6 mm + 6 mm spacer stacking, or threaded rod with
nuts as spacers).
- Registration: every plane file carries corner crosses at the same four
coordinates just outside the art square; back-face files are **mirrored** at
export so they read correctly through the sheet.
## White-ink logic (backlit grammar)
| zone | channels | lit result |
|---|---|---|
| clear acrylic | none | pure light |
| glow elements (disk, halation, deep tracks) | CMYK only | stained-glass — light pours through colour |
| focal ink (event cores, grease pencil, furniture) | CMYK + white underlay | holds density against the panel — reads as ink |
| blocking (none in v1) | white + black | opaque |
Rule of thumb: **depth = transparency**. The deeper the plane, the less white
ink; the front glass is the most "solid" ink. The disk gets *zero* white — lit,
it becomes a light source (the laser-interference reference lives here, later).
## Pipeline
```
plan (fable/stack/plans/*.mjs)
→ node tools/stack-render.mjs <plan> per-plane SVGs + manifest.json
→ fable/stack/simulator.html?c=<id> parallax + backlight art-direction
→ [next] tools/stack-export.mjs print masters: mirrored backs,
white-ink masks, A3 layout @ true scale
```
`src/render/stack.js` splits one generated scene into per-plane sub-scenes
(selectors: track kind / z band / age band; disk, optics, damage, media,
fiducials, header as flags) and renders each through the untouched `renderSVG`
with `transparentPaper`. Bloom/core pairs use the *same* track selector so
bubble positions are identical on both faces (same filtered list → same salted
draws) — keep `density`/`size` equal within a pair.
Per-plane renders set `depth`/`aging` low: the physical stack now *is* the
depth model; double-encoding it as opacity would fight the medium.
## Calibration coupon (print before the hero)
One A5 sheet, double-sided: white-ink step wedge (0/25/50/75/100%, single +
double pass) · the same δ-ray at three white levels · CMYK-only vs CMYK+white
swatch pair · front/back registration cross · 6 pt / 8 pt mono type both faces.
Judge **lit on the panel**, not in hand.
## Buy list (if starting from zero)
- 3× cast clear acrylic 330 × 420 × 3 mm (+1 spare), protective film both sides
- 1× frosted/opal acrylic 330 × 420 × 23 mm (diffuser)
- A3 slim LED light panel (dimmable if possible)
- M4 nylon standoff kit (assorted 3/6/12 mm) or 4× M4 threaded rod + nuts
- IPA + lint-free cloths; adhesion promoter if the E1 profile recommends it