# Noon Window · Study 07

An interactive transmission simulation after Iana Kochu’s [Garden Before Noon](../../assets/garden-before-noon.jpg). A suspended glass panel holds the painting’s amber sweeps, pink fold, green stem, blue oval and red seeds. Use the two sliders to move the light horizontally and down. The panel stays still while the coloured pattern travels over the plaster and onto the floor.

The ten contours come from the existing [painting trace](../hidden-colour/garden.mjs), in the photograph’s original coordinates. The trace uses the central 592 × 794 crop starting at (484, 106). The palette is interpreted from the painting by eye. The frame, grain and hanging hardware are drawn in the renderer. The studio photograph appears below the simulation.

## Where the light lands

The model uses parallel rays in a room with a wall at `z = 0` and a floor at `y = 520`. The plane of the panel is fixed at `z = 270`, with its top left corner at `(255, 62)` and a 252-unit clear width. The coordinates are in illustrative scene units.

Side angle `b` runs from 28° to 58° and downward angle `d` from 10° to 39°. Each angle is measured from the wall normal in its respective 2D plane. The ray from a panel point `p` is `p + t × (tan(b), tan(d), −1)`. Compare the wall intersection `t = 270` with the floor intersection `t = (520 − p.y) / tan(d)`. The first surface receives the pattern. An orthographic camera with fixed skew maps each hit to screen coordinates `(x − 0.50z, y + 0.29z)`.

Each plane’s hit equation and camera transform reduce to an SVG affine matrix. The renderer applies both matrices to the same panel shapes, frame and seam widths. The wall and floor clips select the valid portion of each matrix at their shared edge.

| Still | Side angle | Downward angle | Where the pattern falls |
| --- | ---: | ---: | --- |
| [High wall](high-wall.png) | 30° | 14° | All of the panel reaches the wall. |
| [Noon](cover.png) | 44° | 27° | The lower edge begins to reach the floor. |
| [Floor spill](floor-spill.png) | 56° | 39° | A larger part of the lower sweep crosses onto the floor. |

## What the colour means

Each pane has three authored transmission fractions in linear-light sRGB. The amber sweep passes `[0.95, 0.63, 0.045]`, the blue oval passes `[0.13, 0.47, 0.65]`, and the opaque seams and perimeter pass `[0, 0, 0]`. For each surface the renderer computes `ambient + direct × fraction × incidence` per channel, then applies the sRGB transfer function for display. The incidence term is the cosine of the angle of incidence on the receiving surface. The ambient and direct terms are fixed, hand-tuned RGB values for each surface. [IUPAC transmittance definition](https://goldbook.iupac.org/terms/view/T06484) · [W3C CSS Color 4, color conversion and linear-light sRGB](https://www.w3.org/TR/css-color-4/#color-conversion-code)

The RGB fractions are illustrative. A measured glass sample would need spectral data and a specified illuminant. The simulation models directional transmission and the cast shadow of the opaque frame and seams. The appearance of the plaster, glass glints, ambient shading and the 2.1-unit blur are rendering choices. Refraction, scattering, multiple reflections, finite-source penumbrae and shadows from the hanging wires are outside the model. The stills document rendered angles of the digital study.

## Checks and capture

From this directory, run `node verify.mjs`. It checks both ray hits and their SVG transforms across five directions, agreement at the wall–floor boundary, per-channel attenuation and sRGB encoding.

With the Kochu Studio directory served at `http://127.0.0.1:4387/` and Google Chrome and Playwright available, run `node verify-browser.cjs`. Set `STUDIO_URL` to change the server root and `PLAYWRIGHT_PATH` to select a bundled Playwright installation. Append `--capture` to update the three 1050 × 650 PNGs directly from the scene in isolated headless Chrome. The check uses both range inputs by keyboard, all three presets, the fixed-panel markup, three distinct stills, the source photo, 320px and 390px touch layouts and the static fallback.
