117 lines
5.4 KiB
Markdown
117 lines
5.4 KiB
Markdown
# Large-format print strategy
|
||
|
||
For a wall-scale piece (you mentioned ~2.5 m × 4 m, assembled in layers with
|
||
other artwork), the key idea is: **don't bake one giant flat raster.** Work with
|
||
a vector geometry master plus separable raster texture, and let the seed be the
|
||
single source of truth.
|
||
|
||
## 1. The seed is the whole fingerprint
|
||
|
||
Every parameter is derived deterministically from the seed (`src/scene/params.js`).
|
||
So an inspiration thumbnail and its print master are the *same image* at different
|
||
sizes — you never track parameters, you just keep a seed.
|
||
|
||
```
|
||
tools/inspire.sh 40 600 # 40 random plates → output/inspiration/ + index.html
|
||
# browse output/inspiration/index.html, note the seeds you like
|
||
tools/render.sh STRANGENESS-7 # → output/masters/STRANGENESS-7.{svg,pdf,_9000.png}
|
||
tools/render.sh STRANGENESS-7 12000 # bigger raster if you want it
|
||
```
|
||
|
||
## 2. Two masters per chosen seed
|
||
|
||
| master | resolution | carries | use |
|
||
|---|---|---|---|
|
||
| **SVG** (`<SEED>.svg`) | infinite | geometry: tracks, curls, disk structure, fan lines, header | scale to the full 4 m with zero pixelation — the crisp "ink" |
|
||
| **PNG** (`<SEED>_<px>.png`) | up to ~14000 px | the analog layer: grain, bloom, tonal mottle, stains, vignette | the photographic texture/feel |
|
||
| **PDF** (`<SEED>.pdf`) | infinite (CMYK) | same geometry, print-shop colour | hand to a print shop as-is |
|
||
|
||
Why both: vector stays razor-sharp at any size but is "clean"; the raster holds
|
||
the worn-film texture but is resolution-limited. At 4 m you want the geometry
|
||
crisp *and* the grain present — so use both as layers.
|
||
|
||
## 2a. SVG layers (for post manipulation)
|
||
|
||
Every SVG is organised into named **layers** (Inkscape `inkscape:groupmode="layer"`
|
||
convention) — they open as toggleable layers in **Inkscape** and **Affinity
|
||
Designer**, and as named groups in **Illustrator**:
|
||
|
||
```
|
||
Background paper + gas-glow gradient
|
||
Chamber optics boundary + structural fan / wall lines
|
||
Shock disk the piston disk (body + bubbles/strokes + stains)
|
||
Tracks · primary primary interaction tracks
|
||
Tracks · cosmic & sweepers
|
||
Tracks · V-decays
|
||
Tracks · δ-rays (curls) the little spirals, isolated for separate treatment
|
||
Plate damage scratches, hairs, dust, water rings
|
||
Fiducials registration crosses
|
||
Vignette edge darkening
|
||
Archival header lab / seed / plate / exposure text
|
||
```
|
||
|
||
So you can, e.g., recolour just the δ-rays, delete the header, mask the disk, or
|
||
push the plate-damage layer to a different blend — without touching the rest.
|
||
(Empty layers for a given seed are omitted.)
|
||
|
||
**PDF layers too.** The PDF carries the same set as **Optional Content Groups
|
||
(OCG)** — toggleable layers in Acrobat, Illustrator and Preview.
|
||
|
||
**SVG effects.** SVG supports filters; the **Shock disk** layer carries an
|
||
optional `feGaussianBlur` ("Disk edge softness" slider / `diskSoften`) to soften
|
||
just that layer's edges. It's matched in the raster preview/PNG. (The PDF keeps
|
||
the disk crisp — apply blur in post there, or use the PNG/SVG for the soft look.)
|
||
|
||
## 3. Recommended assembly (in your compositor)
|
||
|
||
Think of each plate as a small stack you drop into your larger artwork:
|
||
|
||
1. **Geometry** — place the **SVG**, scale to final size. Stays sharp at 4 m.
|
||
2. **Texture/feel** — place the **PNG** over it; it already contains grain +
|
||
bloom + stains. Blend `Multiply` (positive plates) and dial opacity, or
|
||
isolate just its grain/mottle if you only want texture.
|
||
3. Your **other artistic layers** above/below, blended to taste.
|
||
|
||
Because the PNG and SVG come from the same seed they register exactly (same
|
||
composition, same coordinate frame, same margins).
|
||
|
||
> Film grain *should* enlarge — real emulsion grain gets bigger on big prints.
|
||
> So upscaling the PNG's texture to 4 m is not a defect, it's the look. Render the
|
||
> PNG at whatever size is comfortable (9000 px is plenty as a texture source) and
|
||
> let it scale up.
|
||
|
||
## 4. Resolution math
|
||
|
||
For viewing a wall piece from > 1–2 m, 100–150 DPI is ample (the eye can't
|
||
resolve more at that distance).
|
||
|
||
| print dimension | 100 DPI | 150 DPI |
|
||
|---|---|---|
|
||
| 2.5 m (98 in) | 9 800 px | 14 700 px |
|
||
| 4.0 m (157 in) | 15 700 px | 23 600 px |
|
||
|
||
- The **SVG/PDF** meet any of these exactly (vector).
|
||
- The **PNG** tops out around **14 000 px** in this headless pipeline (Chrome
|
||
canvas limit ≈ 16384²; 14000 renders reliably, ~78 s, ~260 MB). That covers the
|
||
2.5 m dimension at 140 DPI as a *baked* image; for the 4 m dimension rely on the
|
||
SVG for sharpness and let the PNG texture scale.
|
||
|
||
## 5. If you need a baked raster bigger than ~14000 px
|
||
|
||
Options, in order of preference:
|
||
1. **Use the SVG** as the geometry and only scale the PNG *texture* — almost
|
||
always the right answer.
|
||
2. **Tiled render** — render the scene in N×N tiles and stitch (a future
|
||
`tools/render-tiled.mjs`). Seamless grain/bloom across tiles needs care; ask
|
||
and I'll build it.
|
||
3. **node-canvas offline** — move the photographic renderer to Node with
|
||
`node-canvas` (no Chrome canvas-size limit). Adds a native dependency.
|
||
|
||
## 6. Tuning a seed before committing
|
||
|
||
Found a seed that's close? Open `bubble_chamber.html`, type the seed, and nudge
|
||
sliders — including **Shock-wave Disk → Staining / erosion** for the disk's
|
||
cleanliness. (Note: manual slider tweaks are *not* part of the seed fingerprint;
|
||
if you want a tweak to be permanent, tell me the values and I'll fold them into a
|
||
preset or the seed-derivation ranges.)
|