Computer graphics demands have progressed considerably in the past several years. In just a few years we have moved from running games at 320x200 with 8-bits of color to the present day where we run them at resolutions as high as 1600x1200 with 32-bits of color.
While computers themselves have advanced to be able to display such detail, monitors haven't been so fast to improve. We've come to the point where we are pushing monitors to their maximum resolutions and refresh rates. Most can display resolutions up to 1600x1200, and high-end models can go even higher.
This means that we are typically stuck at a maximum resolution of 1600x1200, and this leads to a problem. The human eye can see aliasing artifacts at resolution up to and even beyond 4000x4000, so obviously 1600x1200 is not sufficient. The obvious move we make is to implement anti-aliasing.
Over the last year we've heard a great deal about anti-aliasing, mostly from 3dfx. Some may recall 3dfx's anti-aliasing whitepaper
, which I co-wrote. This paper looked into different implementations of super-sampling: Rotated Grid Super-Sampling and Ordered Grid Super-Sampling.
We found that 3dfx's implementation used a rotated grid by combining multiple samples of each frame, while others such as ATI, NVIDIA, and PowerVR used an ordered grid through over-sampling (rendering a scene *n in both the x and y). While the quality of the results were somewhat different, with a rotated grid delivering a considerably higher quality, the total number of sub-samples being dealt with were identical.
Here are two flow charts explaining the process of both multi-sample combining and over-sampling.
Rotated Grid Super-Sampling
Ordered Grid Super-Sampling
Anyone who has any experience with super-sampling is well aware that it presents a performance issue. In 2x2 (4x) mode, a 75% fill-rate hit is incurred. This, of course, is because we are rendering at what is effectively four times our base resolution (the base resolution is the resolution that we begin with, and also the resolution that we display on screen). In applications where fill-rate is our limitation, this can be a serious problem as it cuts our frame-rate by a theoretical 75%.