Oversampling in Fyre

Despite Fyre 1.0 being “completely done” for a while now, I have to nitpick it occasionally. I recently composed an image which brought out a particularly bad oversampling bug in Fyre.

Fyre implements antialiasing using an oversampling technique, much like FSAA on modern video cards. In Fyre 1.0.0, we just chop each pixel into an even 2×2, 3×3 or 4×4 grid of subpixels. Making an analog signal processing analogy, it increases the sampling frequency and adds a low-pass filtering stage after the samples are taken. There is still the potential for very high-frequency features in the original signal to alias, and produce undesirable patterns in the resulting output.

In the current development version of Fyre 1.0, I’ve added ±1 subpixel of spatial noise prior to sampling, which gives us the missing low-pass filter that should keep us below the Nyquist limit. Intial results look good:


Before: Fyre 1.0.0 release, 3x gamma-corrected oversampling on a regular grid


After: Fyre 1.0 SVN, 3x gamma-corrected filtered oversampling