If you are looking for a quick and easy antialiasing implementation, quincunx could be what you are looking for.
Quincunx is part of the family of anti aliasing called supersampling antialiasing (SSAA), which all work by taking multiple samples per pixel, each sample being offset by some amount, and then adding the samples back together with various weightings to get the final antialiased pixel color.
Quincunx antialiasing works by mixing five samples per pixel, in the pattern of the diagram below with the specified weights. The real interesting and useful thing about it though is that the 4 corner samples are each re-used by 4 other pixels, which makes it so that even though you take five samples per pixel, you are in effect really only rendering TWO samples per pixel to get results similar to 5x supersampling antialiasing!
Basically, the performance cost is about the same as 2x SSAA, but gives you results similar to 4x-5x SSAA.
Trivial Note: The word quincunx describes the position of those 5 dots, which is the same configuration you see for the number five on a six sided die.
Since the corners are a half pixel offset from the center pixel, the algorithm for doing quincunx sampling is as follows:
- Render your scene to a full size buffer (same size as your output render target), offsetting your camera in screen space by (0.5,0.5) pixels
- Next, render your scene to the usual render target as normal
- Run a full screen pixel shader post effect on your normal “output render target”. For each pixel:
- Multiply the pixel color channels by 0.5
- Add in these four offsets from the current pixel location, in the “offset” buffer (the first one rendered), multiplying the color channels by 0.125: (-1,-1), (-1,0), (0,-1), (0,0).
That’s all there is to it! Click the image below to be taken to an animated shadertoy I made which does quincunx antialiasing in a WebGL pixel shader. Shadertoy unfortunately doesn’t let you render to texture, so i have to do all 5 samples per pixel, but you can see see the effect compared to no anti aliasing at all, and the results are pretty nice!
The left half of the image is quincunx antialiased while the right side is not antialiased at all.
A few more creative supersampling AA algorithms coming next (: