Game Development Reference
converted to the YC o C g color space and, depending on the coordinates of the
destination pixel, the YC o or YC g channels are emitted to the framebuffer.
This approach can also provide some small additional benefits during the
fragment shading, where the fragments can be converted to the two-channel in-
terleaved format early in the shader code and then any further processing can be
performed only on two channels, instead of three, in the YC o C g color space. The
actual benefits depend on the exact shading algorithms used in the shader and
the underlying GPU architecture (the mix of SIMD and scalar units).
The subsampling of chrominance in our method is performed with point sam-
pling, without using any sophisticated down-sampling filters. In theory this can
lead to aliasing of the chrominance components, since we have halved their sam-
pling rate, but in practice we did not observe any severe aliasing issues.
When reading values of the compressed framebuffer, any missing chrominance in-
formation should be reconstructed from the neighboring pixels. The simplest way
to do that is to copy the missing chrominance value with one from a neighboring
pixel. This nearest filter can create some visible mosaic artifacts at the edges of
polygons, where strong chrominance transitions occur, as shown in Figure 4.3.
Using bilinear interpolation of the missing data from the four neighboring pixels
mitigates these artifacts but does not completely remove them. Please note that
these artifacts are not easily detectable by the human visual system in still im-
Figure 4.3. Quality comparison between the image space reconstruction filters. (a) Orig-
inal uncompressed framebuffer, (b) nearest reconstruction (43.2 dB), (c) bilinear recon-
struction (47.5 dB), (d) edge-directed reconstruction (48.2 dB). Please note that only
the edge-directed filter avoids the mosaic artifacts at the edges.