Serenity

A Plainsight Systems project

Serenity

A study in light
and computation.

I’m exploring GPU performance from the rendering side: how to process data in small pieces, carry less state, and reuse work. The same questions turn up in transformer inference, and the moving lights give me a way to see what the kernel work makes possible.

By Andrew HunterMilestone 1
Screenprint illustration of glass and brass spheres at night. Scattered fireflies settle into a calm scene and the outline of a small ship.
Noise in, serenity out.See the renderer

01 / The scene

C++20 · Metal 4 · Apple silicon

When the fireflies wake.

Thirty-six marbles on a walnut table at night. The light comes from 616 fireflies, waking one by one and moving among the glass, porcelain, and metal.

Milestone 1 · Offline render · 1920 × 1080 · 30 fps playbackPlayback rate is not rendering speed.

The naive path tracer gives me an image to judge and a frame whose cost I can measure. I’ll use that baseline to find out whether better sampling reduces the error enough to justify the work it adds.

Read what it took

02 / Where we started

The first brass sphere.

The first scene was a brass sphere on a checkerboard. Before the marbles and the swarms, there was light falling on one curved surface, a reflection, and a shadow.

I kept the geometry simple as the scene grew. The interesting part is what the light does, and what it costs to work that out.

Open the original image
The first brass sphere on a checkerboard, illuminated by two yellow fireflies.
The first scene · 8 October 2026 · Preview renderer

03 / The question underneath

What does rendering
teach us about inference?

A renderer has more possible light paths than it can afford to trace. An inference engine has more intermediate data than it wants to move through memory. Both make you think carefully about what to keep, what to combine, and when to reuse earlier work.

Those are the connections I’m here to explore. ReSTIR’s reservoirs carry a small amount of running state; attention kernels also combine partial results without keeping every intermediate. The operations differ, but the questions about memory, scheduling, and GPU occupancy are familiar.

Serenity gives me a way to investigate them with something visible at the end. For now, the path tracer is built. ReSTIR is the next piece, in progress on a branch.

04 / From the workbench

Notes from building Serenity.

All writing

Building the baseline.

The scene, the reference image, and the measurements behind the first milestone. Along the way: plausible images hiding real bugs, production designs that made this scene slower, and why a frame time needs its method beside it.

Read the milestone