git:20260926.4de6d4f to git:20260926.a93cf72

62 added, 24 removed. Audit A to A.

---
name: style-engraving
- description: Engraving style (in testing): 3D scenes printed as a 19th-century copperplate engraving, like the plates of the «Description de l'Égypte» — tone made only of burin lines, a ruled sky, laid paper with foxing, one or two second inks (live blue, a gold wash). Instanced WebGL, so thousands of pieces are cheap. Use it for architecture, machines, archaeology, exploded views, scientific plates, or when working with styles/engraving/.
+ description: Engraving style (in testing): 3D scenes drawn as a plate of the «Description de l'Égypte» — charcoal tone on toothed paper, masonry drawn stone by stone, temple walls in low relief (registers of offering scenes, Hathor capitals, starred ceilings), an aged print measured on the originals, one live blue and a gold wash as second inks. Instanced WebGL, so thousands of pieces are cheap. Use it for architecture, archaeology, temples, machines, exploded views, scientific plates, or when working with styles/engraving/.
---
# Style · Engraving
- Reference in testing: `sandbox/2026-09-26-pyramid-engraving/` (the pyramid that makes skies,
- 5–17 s: the waking joint and the exploded view). References the user chose: the plates of
- Vol. V of the «Description de l'Égypte» (Pl. 9, 11, 13, 14 — Wikimedia Commons, NYPL).
+ Reference in testing: `sandbox/2026-09-26-pyramid-engraving/` («The pyramid that makes skies»,
+ 63.6 s, ten shots from the desert to a sky inside a seed). References the user chose: the
+ plates of the «Description de l'Égypte»: Vol. V (Giza, Pl. 9, 11, 13, 14) for the outside,
+ Vol. IV (Dendera, Pl. 17, 25, 30) for walls, friezes and interiors (Wikimedia Commons, NYPL).
## Code
`styles/engraving/engrave.js` → global `Engrave`.
- `Engrave.renderer(env, { scale })` → `R.mesh(name, geom)`, `R.render(g, key, frame)`.
Built-in meshes: `box`, `pyramid`, `cylinder`, `sphere`; `Engrave.torus(r)` for rings.
- Instances: `Engrave.inst(arr, centre, material, half, seed, quat, glow, bias)` (16 floats).
Materials: 0 limestone, 1 worn limestone, 2 obsidian, 3 gold, 4 live blue (emissive),
5 sand (a flat `box` instance with `N.y` up is the desert: dunes bend its lines), 6 bronze.
- A draw: `{ mesh, inst: Float32Array, box: true }` (box = cut edges, pores, chips) or
`tan: 'y'` for a round mesh hatched along its axis (cylinders; rings default to round it).
`cast: false` for things that must not shadow (glow lines, dust).
- Frame: `cam, target, fov, sun, sunK, fill, lights: [[x,y,z,0,strength]]` (second-ink
lights), `shadow: { center, radius }` (make the radius follow the subject: small in a
close-up, or the shadows go blocky), `sky: { zenith, horizon }`, `fog`, `spacing` (px at
1920), `frame` (the plate's image area; outside it, bare paper).
- The plate (margins, neat line, running heads, caption) is 2D on top, in IM Fell DW Pica SC
(`fonts/IMFellDWPicaSC-Regular.ttf`, OFL). See the scene's `film.js`.
## The approved look (charcoal + aged print)
The user approved («¡Lo has clavado!») the **charcoal** mode with the **aged print** filter,
not the ruled burin lines: `charcoal: true` in the frame and `Engrave.ager(env).apply(g,
R.layer(key, f), { ink, paper, charcoal: true })` to paint. What makes it:
- stone faces drawn as a **mosaic of small hand-cut stones** in courses (`course`, world
size of a course): joints as broken pencil marks on the lit side, dark stones with lighter
joints in shade; the mosaic stays on up close (a big stone is still a drawn wall);
- tone laid as **graphite in short diagonal strokes** that catch on the paper's tooth only in
the half-tones (lights stay clean, darks fill in); drawn marks stay crisp;
- the **aged print**: tone curve and gradient map measured on the plates (a greyish warm
paper, a warm black), second inks carried over, softer lines, grain, toning patches, a
darker rim; the sheet does not boil;
- light as in plate 11: sun from the front left (`sun: [-0.35, 0.5, 0.8]`, `sunK: 0.8`,
`fill: 0.2`), a light rubbed sky (`zenith 0.22, horizon 0.15`).
Calibrate against the plate with `sandbox/2026-09-26-pyramid-engraving/plate-test.js`
(one smooth pyramid from afar) before touching a scene.
+ ## Interiors (the temple)
+
+ Draw flag and frame field for a room inside: `interior: true` in the frame. Then:
+
+ - **Walls are one dressed surface, not stones.** A tall box (`vH.y > 0.6`) or a column
+ (`cylinder` with `tan: 'y'`) inside is decorated by `templeWall()` in the shader, after
+ Dendera: a plain dado; three registers of offering scenes in low relief (a standing
+ figure offering to a seated one, two standing face to face, a kneeling one with a bowl,
+ a seated one with an attendant, or an inscription panel), panels of varying width,
+ mirrored at random, sign columns between them and short sign columns above the figures;
+ a frieze of uprights, a torus bound with a spiral band, a fluted cavetto cornice. The
+ raised field is dressed lighter, its edge a clear line; worn in patches.
+ - **Signs are invented** (`glyphSign`, 16 of them: ring, notched triangle, staff, water, eye,
+ comb, stepped mound, serpent, lotus, bird, rayed disc, crescent, seated figure, zigzag,
+ shrine, beetle), combined in pairs per cell so they do not repeat. Never real hieroglyphs.
+ The little creature (`sdCritter`) appears rarely, and once in a worn cartouche.
+ - **Hathor capitals:** a box draw with `hathor: true` carries her face on four sides (wig
+ lappets, cow's ears, the shrine above). Columns: shaft, plinth, flared `capital`, the
+ Hathor block, abacus, beams.
+ - **Ceilings** carry five-pointed stars in relief between beams.
+ - **Floors**: flagstones with dust drifted against walls, stains, grit, chips; loose stones
+ (`rock`) and furniture from the scene's `props.js` (offering tables with loaves and a jar,
+ jars on stands, seated statues on bases, rubble).
+ - The paper's tooth is finer indoors (`grain: 0.45` in the ager), or the carving drowns.
+ - Light comes in as the story needs (slits with dust motes in the beams: bias −1 prints a
+ mote as bare paper; a shaft lit from above); `fill ≈ 0.4` so shade stays drawn.
+
+ A night sky (inside the seed): `sky` above 1 (a dark rubbed ground), stars as `sphere`
+ instances with bias −1 (bare paper), sizes small and many (thousands), an engraved star as
+ four long and four short thin rays.
+
## Style rules
- - **Tone is line width, never grey.** Lit stone keeps a few hairlines; shade thickens one
- set of parallel lines; a second, thinner crossing set only in the half-dark; deep shadow
- is heavy parallel lines with thin continuous light between (a dense mesh of crossings
- reads as perforated metal at video size).
- - **Lines are fixed to the surface** and follow it (courses horizontal on walls, along a
- cylinder, round a ring), at a constant spacing on screen: they never swim over the
- object when the camera moves. Only the sky and the paper are fixed to the frame.
- - **Cut lines are full ink.** Every stone's edge is a line; far stones lose it by thinning,
- never by turning grey. Joints seen edge-on are cut solid.
- - **Colour is a second ink:** live blue prints solid (outlined) and tints the stone lines
- near it; gold is a wash under the dark lines, as on a hand-coloured plate. Three
- quarters of the frame stay ink on paper.
- - The sky is ruled (straight horizontal lines, darker to the zenith); a band of bare paper
- at the horizon; the desert is thin lines everywhere bending with the dunes, lighter with
- distance.
- - Dust and pores are stipple (solid dots), never tiny shaded cubes.
+ - **Tone is graphite on toothed paper,** never a flat grey: laid in short diagonal strokes,
+ catching on the tooth only in the half-tones. Drawn marks (joints, relief edges, signs)
+ stay crisp lines.
+ - **Outside, stone is a mosaic of small hand-cut stones** in courses; up close each block
+ is still drawn (grain, pits). Inside, walls are dressed and decorated (above).
+ - **Textures belong to the piece** (`vQ`, the piece's own space): they never swim when the
+ piece or the camera moves. Round pieces measure arc length, not a dot product.
+ - **Colour is a second ink:** live blue on what is alive (channels, marks, the seed), gold as
+ a wash on metal; three quarters of the frame stay ink on paper.
+ - **The ground is drawn:** dunes everywhere with lee slopes in shade, patchy wind ripples
+ (dark lee strokes), mottling, pebbles; no flat patch next to a busy one.
+ - Dust, pores, pebbles and stars are stipple; motes in light are bare paper.
+ - Nothing crosses stone: rings are sized to the room they turn in, slabs keep their gaps.
## Style checklist
- - [ ] No flat grey anywhere at full size (crop edges, shadows, rings, glow).
- - [ ] No band where the line density jumps (level changes fade their odd lines out).
- - [ ] Close-ups: pores, chipped edges, joints; shadows sharp (shadow radius follows).
- - [ ] Round things carry lines in their direction and an outline.
+ - [ ] Side by side with the plate at the same size: tones measured, not guessed.
+ - [ ] No flat grey at full size (walls in light, shaded faces, metal, sand).
+ - [ ] Walls inside: registers readable but not shouting; no two neighbouring panels alike.
+ - [ ] Every room furnished and dirty (tables, jars, statues, rubble, dust at the walls).
+ - [ ] Nothing in the foreground covering half the frame by accident (rings, mounds, blocks).
- [ ] Blue only on what is alive; gold only on metal.
## Lessons
- 2026-09-26 · pyramid-engraving · A line thinner than a pixel must print lighter (scale its
coverage by width/AA), or every faded line becomes a half-tone smear and level changes
show as diagonal bands of moiré.
- 2026-09-26 · pyramid-engraving · An exploded building reads when each face moves out along
its own normal (the corners open into V gaps that show the inside); scaling the shells
about the axis only makes a lattice that hides the heart.
- 2026-09-26 · pyramid-engraving · «It still doesn't look like it» three times: parallel burin
hatching read as 3D with a filter. What the plates actually do was only seen by cropping
the plate next to our render at the same size and measuring tones: faces are mosaics of
tiny drawn stones and soft, grainy tone. Put the reference beside the render first.
- 2026-09-26 · pyramid-engraving · A ruling measured as dot(position, direction) races on a
curved piece when the direction turns (rings, cylinders): measure arc length instead, and
never add a per-piece offset to the position (it multiplies the error).
- 2026-09-26 · pyramid-engraving · The colour of «old» is measured, not guessed: a gradient
map from the plates' own pixels (their paper is greyish, not cream) did more than any
sepia tint.
+ - 2026-09-26 · pyramid-engraving · «The walls don't look Egyptian»: the fix came from the
+ plates themselves (Dendera): smooth dressed walls filled edge to edge with registers, not
+ stones with a few signs. Download the references first and copy their structure.
+ - 2026-09-26 · pyramid-engraving · «The glyphs repeat»: one sign per cell from a fixed grid
+ repeats visibly; vary the panel widths, the composition per panel, pair signs per cell and
+ offset each wall.
+ - 2026-09-26 · pyramid-engraving · A low camera on a lit foreground mound flattens the whole
+ frame; look over the dunes so their lit and shaded sides read.