85 lines
3.9 KiB
Markdown
85 lines
3.9 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.
|
|||
|
|
|
|||
|
|
## 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.)
|