The quality of a rendered image is significantly improved with anti-aliasing. In computer graphics, aliasing is the process by which smooth curves and angled lines appear to be jagged because the resolution of the graphics device or file is not high enough to represent a smooth curve or angled lines. Many conventional anti-aliasing techniques exist to reduce aliasing effects (e.g., jagged lines following boundaries between pixels) in rendering a two-dimensional (2D) image of the three-dimensional (3D) object(s).
Super-sampling and multi-sampling are two common conventional anti-aliasing techniques. Super-sample anti-aliasing (SSAA) involves generating multiple samples within a pixel, where each sample is independently computed for coverage and shading. The shaded samples are stored within a frame buffer and blended for display. While super-sampling produces a very accurate and high-quality image, super-sampling is quite expensive because each pixel within a rendered image requires the computational processing of multiple fully shaded samples, and shading is typically the most expensive operation within the graphics rendering engine.
Multi-sample anti-aliasing (MSAA) techniques are a less expensive technique that uses one fully shaded color value and a coverage mask, rather than multiple fully shaded samples, to generate the multiple samples stored in the frame buffer that are ultimately blended to produce a pixel within a rendered image. This combination of a color and a sample mask is sometimes referred to as a fragment. Multi-sampling is commonly used because of the substantial cost-versus-performance benefit that is typically achieved without a significant loss in overall image quality. Although multi-sampling saves shader processing relative to super-sampling, multi-sampling still requires a frame buffer with multiple samples per pixel and the attendant bandwidth, which can limit application performance.
A common method to reduce the memory bandwidth required by multi-sample anti-aliasing is referred to as color fragment compression. Instead of replicating the fragment color to each sample marked in the fragment's sample mask, fragment compression stores the fragment colors and their sample masks. As a result, if a color covers N samples, it only needs to be accessed once (along with the coverage information) instead of N times. The coverage information is typically encoded as a fragment number per sample and is usually stored in a separate array called a control plane. If there are four samples per pixel, the control plane stores four 2-bit codes per pixel.
With the goal of improving on MSAA (esp. regarding anti-aliasing and bandwidth/storage performance), NVIDIA Corporation introduced CSAA (coverage sampling anti-aliasing), and AMD introduced EQAA (enhanced quality anti-aliasing). Each of these extends MSAA. CSAA and EQAA augment the normal samples with additional coverage samples, which do not store color, depth or stencil values, but rather a link to one of the normal samples. The number of fragment colors that can be represented is limited to the number of normal samples, but anti-aliased coverage is computed based on the total number of normal plus coverage samples. This results in quality similar to MSAA with the total number of samples, provided that not too many triangles or other primitives overlap the pixel.
The Detailed Description references the accompanying figures. In the figures, the left-most digit(s) of a reference number identifies the figure in which the reference number first appears. The same numbers are used throughout the drawings to reference like features and components.