Image Quality: Tri-Linear and Anisotropic Filtering
All contemporary VPUs can perform anisotropic filtering. Enabling this function can significantly improve texture quality in almost any game or application.
In a way DeltaChrome is a kind of S3 Savage4 and Savage2000 successor that is why we expected the new S3 chip to be able to perform tri-linear filtering within a single pass of the pixel pipeline, just like any other S3 graphics chip can do. And our expectations came true. Now you will hardly surprise anyone with a feature like that: the texturing units of contemporary graphics processors can also perform single-pass tri-linear filtering. However in the times of Savage4, this was a truly unique feature of the product. Firstly, because Savage4 were the only graphics processors in the consumer graphics market before GeForce 256, which could perform tri-linear filtering at all. And secondly, and the most pleasing fact, the best tri-linear filtering provided by this solution was almost free of charge!
Let’s dwell on this feature of Savage4 and DeltaChrome solutions for a while. The “basic” texture filtering method is bilinear filtering with MIP-mapping. To eliminate the noticeable effects remaining when we shift to the next MIP-level (as the camera moves on the texture level of detail changes dramatically from one MIP-level to another), we use tri-linear filtering.
In fact, tri-linear filtering is a kind of “addition” to bilinear filtering, which serves to eliminate the visual bugs when we shift between the MIP-levels. For this purpose two values for the texture color are calculated: bilinear filtering is performed on two neighboring MIP-levels at a time. Then both texture color values with the corresponding weight coefficients are summed up: we perform linear interpolation between them. This is where the name of this texture filtering algorithm actually comes from: tri-linear filtering is bilinear + linear filtering.
Contemporary graphics processors perform tri-linear filtering directly: they select 8 samples from the texture (2x2 block on each of the neighboring MIP-levels), perform two bilinear interpolations and then perform linear interpolation between the two obtained values. Both operations are implemented on the hardware level, “in silicon”, and are carried out within one pass of the pixel processor.
Savage4 and DeltaChrome use a different algorithm for tri-linear filtering. It is known that each ongoing MIP-level of the texture is a less detailed version of the previous one. Moreover, the color of each texel on any of the texture MIP-levels is an average value of four (2x2) texels of the previous MIP-level.
This way, the texel colors from the 2x2 block taken from any of the MIP-levels is an average color value of the 16 texels (4x4 block) from the pervious MIP-level. In other words, if you have the values for 16 colors of any MIP-level, you will be able to calculate the colors of 4 texels from the next MIP-level. As a result, with the data for only one MIP-level at hand we can perform bilinear filtering on two MIP-levels located next to the given one.