Graphics Reference
In-Depth Information
or is at least amenable to filtering strategies such as MIP mapping so that it can be
band-limited. This means that all of the samples within a pixel that are shaded by a
single fragment are likely to have similar values. When this is the case, computing
shading at each sample independently is inefficient.
The A-buffer [Car84] separates the coverage computation from the shading
computation to address the overshading problem of SSAA. An A-buffer renderer
computes coverage at each sample for a fragment. If at least one sample is covered,
it appends the fragment to a list of fragments within that pixel. If that fragment
completely occludes some fragment that was previously in the list, the occluded
fragment is removed. When all primitives have been rasterized, shading proceeds
on the fragments that remain within each pixel. The renderer computes a single
shade per fragment and applies it to the covered and unoccluded samples within
the pixel. This allows more accurate measurement of coverage due to geometric
variation than shading. Because coverage is a simple and fixed computation, it
can be computed far more efficiently than shading in general, and MSAA (cov-
ered shortly) enjoys the advantage that there is minimal overhead in increasing
the number of samples per pixel. Thus, N samples may cost nearly the same as
1 sample.
The A-buffer can also be used to composite translucent fragments in back-to-
front order. In this case, a fragment is not considered occluded if the occluding
fragment is translucent. Fragments are sorted before shading and composit-
ing. The drawback of the A-buffer is that the implementation requires variable
space and significant logic within the coverage and rasterization process for
updating the state. As a result, it is commonly used for offline software ren-
dering. However, variations on the A-buffer that bound the storage space have
recently been demonstrated to yield sufficiently good results for production
use [MB07, SML11, You10]. These simply replace existing values when the maxi-
mum per-pixel sample list length is exceeded. A more sophisticated approach is to
store some higher-order curve within a pixel that approximates all coverage and
depth samples that have been observed. This approach has predominantly been
applied to volumes of relatively homogeneous, translucent material, like smoke
and hair [LV00, JB10].
Multisample antialiasing (MSAA) is similar to the A-buffer, but it applies a
depth test and shades immediately after per-sample coverage computation to avoid
managing per-pixel lists. This limits its application to spatial antialiasing, although
stochastic approaches can extend temporal (motion blur), translucent, and lens
(depth-of-field) sampling into the spatial domain [MESL10, ESSL10].
For each fragment, MSAA computes a coverage mask representing the binary
visibility at each sample. In the most common application this is done by ras-
terizing and applying a depth buffer test with more samples than color pixels. If
any sample was visible, an MSAA renderer then computes a single shading value
for the entire pixel. The location of this shading sample varies between imple-
mentations; some choose the sample closest to the center of the pixel (regardless
of whether it was visible!), and others choose the first visible sample. This single
shading value is then used to approximate the shading at every sample in the pixel.
MSAA has several drawbacks. The first is that the shading computation must
estimate the average value of the shade across the pixel rather than at a single
point. In other words, MSAA leaves the problem of aliasing due to variation in
 
Search WWH ::




Custom Search