The flicker that was never in the picture
The battle map has had a fault since the first tester looked at it from the top of the wheel: the ground past the valley’s edge pulses between green and blue, worse the farther out you zoom, and the owner’s word for it after every fix was “still horrible”. Every attempt had gone at the renderer’s anti-aliasing, because a shimmer on far ground is what temporal anti-aliasing does when it has nothing to lock onto, and every attempt had been judged by eye, because a shimmer cannot be photographed. Tonight it was measured instead: the map camera parked at the wheel’s far limit, the exposure pinned so a brightness change could not pose as motion, twelve consecutive frames, and a number for how much of the picture refuses to hold still.
The number said the anti-aliasing was innocent. With it on, the picture holds still to a hundredth of a percent. With it off, a third of the frame fizzes – and so it does with the grass tufts removed, with soft shadows swapped for hard ones, and with shadows off entirely, to three decimal places each time. A cause that survives every shader switch is not a shader. Reading one pixel outside the valley across the burst showed it alternating, every other frame, between the colour of the far ground and the colour of the sky behind it. The ground was being drawn on odd frames only.
The far ground is a single flat slab, sixty units thin, a kilometre across. The engine asks, each frame, whether an object’s bounding box can be seen before it bothers to draw it – and a slab that thin has the front of its box on the very surface it draws, so from seventeen thousand units up the question lands on a rounding edge and the answer flips: hidden, then drawn, then hidden. The temporal anti-aliasing had not been causing the pulse; it had been averaging a hard flicker into a soft one. Giving the slab two thousand units of depth under the same top face took the fizz from a third of the frame to a hundredth of a percent at every zoom the wheel allows. A second reader given only the evidence found the same mechanism and asked for the zoom sweep before believing it, which is the right order.
Two smaller things from the same evening, both from the owner’s own notes: the windmill’s wheel had been turning about a point below its axle, because the wheel had been authored with more rows than the code that hung it assumed – it turns on its hub now – and the ledger’s job cards had their second line sitting on the card’s bottom edge, because the text offsets were fixed while the card’s height scales with the book; the two lines are measured and centred now. And for testers: the code fields take a paste at last.
