Toner
A photocopier's copy of a copy, for Resolume

What it does
An FFGL effect for Resolume Arena and Avenue. A photocopier is a xerographic engine, and each stage leaves its mark: optics that blur, an auto-exposure that sets the background to paper white, a photoconductor whose discharge curve is steep, development that follows the electric field above the latent image rather than the image itself, a toner supply that depletes with the coverage it has laid down, and a drum whose defects come round once a circumference. Copy the copy and the same machine runs again on its own output. The look of zine and punk-flyer art is the fixed point of that loop.
Toner runs up to eight generations a frame. Each generation is the whole machine applied to the previous generation's page, with its own small seeded skew and offset, so the picture is stable from frame to frame. Nothing is drawn: one generation is an S-curve with stable fixed points at paper and at toner, so composed it drives every grey to one or the other; the field above a wide charged area is zero at its centre and strongest near its edges, so big solids develop as rims round pale centres while a thin line prints full, and Solid Fill blends in the developer electrode that better machines added to flatten it.
The developer's concentration falls with the coverage laid down along the process direction and recovers at a stated rate, so density fades down a heavy page; through the copy loop the gradient becomes a cut, and the page runs out part-way. Drum marks repeat every circumference. In Photo Mode a diamond-dot halftone screen is re-screened every copy and beats against the last one. Paper comes in seven stocks, and Direction sets which way the page goes through the machine.
The field is a separable product of strip closed forms, exact for infinite strips and at the centre of any rectangle; its scale is half a pixel and its kernels 33 taps. Every coefficient is computed in double on the CPU once a frame, and every read on the GPU is a texel fetch at an integer coordinate, which is what lets the harness hold each stage to its stated law.
- One to eight generations a frame, each the whole engine run on the last copy's page
- Contrast, background suppression, optics, zoom and skew per generation
- Development that follows the field: hollow solids, full lines, and a developer electrode (Solid Fill)
- Toner starvation along the process direction, with a recovery rate
- Photo Mode: a diamond-dot halftone at a set pitch and angle, re-screened every copy
- Seven paper stocks, drum marks at a set circumference, four process directions
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.0, and honestly early. The copier is measured, not asserted, by an offline harness that drives the real plugin class headlessly at two rasters: a grey ramp copied n times matches the stated tone curve composed n times column for column, with two plateaus and a transition that narrows every copy; a solid square's density profile follows the strip-field closed form and its centre-to-edge ratio falls with its width while a one-pixel line prints full; the drum's defects repeat exactly one circumference apart, at a whole-pixel and at a fractional circumference; density down a page of constant coverage follows the depletion-recovery closed form; a line turns by the sum of the seeded skews after 2, 5 and 8 generations; and grey paper comes out white with a grey patch landing where the tone curve says. Six negative controls and a one-character mutation of the shipped shader are caught. All 17 swept controls change the picture. Render cost on macOS is 10.3 ms/frame at 1080p with eight generations and 33.6 ms at 4K, so the cap of eight keeps 1080p real-time and about three generations are real-time at 4K. It has not yet been loaded into Resolume on macOS. On Windows it has: a build of this source loads, registers and renders in Resolume Arena 7.27.1 on software rendering (win-lab, no GPU), with every parameter as declared and all 18 controls moving the picture. The macOS build is Developer ID-signed and notarised. There is a user guide and a browser demo; no presets and no OpenFX port. Check it in your own rig before trusting it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead