ATI's Optimized Texture Filtering Called Into Question


The texture filtering we are talking about here has to do with filtering of various mipmap levels. Mipmaps are variations of one and the same texture available in various sizes. Imagine you are standing in a long hallway and looking at a tiled floor all the way to the horizon. To ensure a realistic appearance the tiles close to the viewer must look very detailed. Closer to the horizon, however, the texture gets smaller and smaller - there are fewer pixels available to represent the texture. Details such as the grouting between the tiles are lost due to scaling because the driver for the graphics card does not know which are the important details in the texture.

Mipmapping improves the quality of graphics representation by juxtaposing versions of the texture that have been minimized by a factor of two as the depth increases. This gradation or the transition from one mipmap level to the next is determined by the so-called Texture LOD (Level Of Detail).

Different sizes of the same texture.

Both parts of the screen show a bilinear filtered image. On the left side, we made the different mipmap levels visible. You can see the bilinear banding on the right were one mipmap level merges into the next.

But it takes more than just mipmapping to get a decent result, because the perspective of the texture is distorted the closer it gets to the horizon, and must therefore be minimized the farther one gets from the viewer. Without any particular filtering of the texture (point sampling), you get a very pixilated image. Imagine once again the example with the hallway. As the distance from the viewer increases, the fewer pixels are available in the horizontals for representation, because the hallway runs from the bottom part of the screen to the center.

Here's an in-game scene similar to our hallway floor example. You can see that different scaling is needed because of the perspective.

The next section of the article demonstrates how mipmapping counteracts the pixelation caused by scaling. We use the texture filtering test of 3DMark 2003 (Pro version) to demonstrate it:

The left part is done without mipmapping. You might think that it looks sharper in the screenshot here. It is, but without mipmaps all textures flicker with a large amount of noise - this looks awful when the scene is set in motion. You can try it on your own with all games based on the Q3 engine. Set r_textureMode to: "GL_LINEAR" to disable mipmapping with linear filtering, GL_NEAREST for mipmapping with point sampling.

Also to be noted with regard to mipmaps is that they do not have to be present as finished textures. Modern graphics cards can generate the reduced mipmap levels on their own from the basic texture.