The other day, I asked myself quite a few questions about the whether or not it is possibility to create 22-bit color output, when you only have 16-bit dithered input. The cause for this question was a column written by 3dfx's Gary Tarolli. At first, it sounds like a hoax, or at least like a lame excuse for their lack of support for true 24-bit color. But, as I will show in this article, it is indeed possible to approach 22-bit color output using just 16-bit dithered input. However, this technique has a couple of nasty side effects. Whether they are acceptable or not, is up to you. I will first try to explain a basic way to increasing the color depth, starting from a dithered input. Note that this is not necessarily the way 3dfx is doing it, but I assume that their technique is similar. After the more general part, I will refer to a possible implementation used by 3dfx.

So first of all how does it work, well letâ€™s explain it by using a pipelined diagram.

Internally, the 3dfx processor is working with 24 or even 32 bits of color information. This data cannot be stored in the 16-bit frame buffer, so the color information has to be reduced to 16 bits. This is achieved by down sampling while dithering. Dithering is a process whereby colors are approximated by intermixing pixels of two or more colors on the screen. "Intermixing", in this context, is the placing of pixels, of different colors, next to each other. When looking from a distance, your eye will perceive a different color, a blend. For example, if you use a checkerboard of red and white pixels, your eye will "see" a shade of pink. This is how dithering is able to simulate millions of colors. However, the images produced by this process reveals a grainy or patterned texture, which is usually undesirable. To reduce the impact of the patterns, you can perform a form of up sampling back to 24-bit color. One way to do this is to use a filter. This filter will determine a new 24-bit color by using the color information from several 16-bit pixels surrounding the actual screen pixel. So instead of just using the color at position (x, y), you also use the color information from the pixels at the surrounding positions, like (x+1, y), etc. The result of this filter is passed to the RAMDAC, which translates the digital color information into an analog signal for the monitor.