Spatial Resolution:


Good input with high-resolution textures is one thing, but good output is another. 3D acceleration involves a lot of mathematics. All of this math is done with fixed points meaning that they are not 100% mathematically accurate. If your internal math isn't accurate enough, then you end up with errors. Blending, filtering, fog, this is all math and small errors can creep in at all those levels. Algorithms govern all of these calculations, and there is no rule that says the math has to be done in a certain way, so different companies often use different algorithms to fit their needs. Gamma correction is a nice example. While the basics of gamma correction are pretty standard, there are lots of variations and each implementation is slightly different. The same is true for blending. So why do I call it spatial resolution? Well the phrase might not be perfect, but most of these inaccuracies cause blurring effects and this gives a washed-out blurred look and this can be related to spatial (detail) resolution. Other factors that influence spatial resolution (sharpness) are the RAMDAC and the PCB layout, not to mention the cable and the monitor itself. A fast, high quality RAMDAC will give you crisp, sharp graphics, while a slow, low quality one gives blurring and fuzziness. Naturally, these last two effects are not shown in screenshots, but calculation inaccuracies and algorithm errors are.

Multi Layer Effects:

Most of the feedback I received concerning the 22-bit articles mentioned the risks associated with involving multilayer transparency effects. I didn't mention this in the 22-bit articles since it was focused on how 22-bit is being handled and not the possible risk resulting from the combination of 16-bit dithered frame buffers and multilayer effects. So what is the problem here? Well when you have a 16-bit buffer, all your calculation results are stored in dithered format in the 16-bit wide buffer. Now multilayer effects add layers of textures on top of existing data, which comes from the frame buffer and has been clipped and dithered to 16bits. This introduces a huge quantization error. Now if you re-read and re-write a lot, something that happens when you have multilayer effects, you end up with a pixel that has been dithered many times. This means that all the errors introduced by the framebuffer (the dithered clipping to 16bit) are compounded, and you end huge with a huge accumulated error in the final frame.

There are 2 ways to avoid this error summation. One is to have a high quality frame buffer such as 32 bits that can reduce the errors. A slightly different approach is the Tile Caching technique used by PowerVR, where all math is handled in full 32-bit accuracy and only at the very end the is the result dithered to 16bits.