It's widely known that NVIDIA GeForce256, GeForce2, GeForce3, GeForce4, ATI RADEON, RADEON 7500, RADEON 8500, STM KYRO, KYRO II chipsets support popular anisotropic filtering.
We've been writing about this feature for a year already. And that's no surprise as it significantly improves the quality of 3D scenes. I'll remind for short that MIP-mapping is used for removing artefacts like "sand" as the distance between textured objects and the viewer grows; it creates a number of copies (so-called MIP levels) with different detail levels for each texture that are chosen while scene is being drawn, depending on the scale of a drawn texture that is projected to the screen. The farther is a triangle, the less detail it will have and so the more dithered MIP-level will be used. This corresponds to our eyesight (we see close objects in more detail than far. Trilinear filtering smoothes borders between MIP-levels, by linear interpolation of two adjacent levels. So, bilinear filtering is used for removing sharp edges between texture pixels (for us to see the walls and floor textured not by squares, but by some smooth real-life materials), and trilinear filtering additionally dithers the scene once more interpolating edges of two bilinear-filtered MIP levels. As a result only the closest objects remain detailed. At that walls, positioned at sharp angles, are dithered too much. Anisotropic filtering is called to deal with these objects, "inconvenient" for bilinear and trilinear filtering. It allows to keep the clear picture of angled textures and doesn't allow texture "sand" at very far distances.
Let's this feature in action on the example of 3DMark2001 3DMark2001SE (Direct3D), Serious Sam: The Second Encounter and Return to Castle Wolfenstein (OpenGL). All cards mentioned above support anisotropy, depending on games, and only some can force it independently. Almost all cards can do this without any tweaker utilities, i.e. the feature of anisotropy forcing is included into drivers. And for anisotropy forcing on NVIDIA-based cards I recommend the RivaTuner utility.
Different anisotropy of ATI and NVIDIA
We know that different videoprocessors manufacturers realize this function differently. And speed characteristics of anisotropies of, for example, ATI and NVIDIA differ very much. It's the resulting quality that is similar.
Is it true? Our readers know that NVIDIA anisotropy (speaking about GeForce3) has high quality and excessive appetite. The perfomance falloff may be up to 50 %! ATI anisotropy (speaking about RADEON 8500) is much "cheaper" and, as we thought until recently, has similar quality.
As usually, anisotropy quality is estimated by examples of walls, floors, squares, etc. Readers see sharp lines and enjoy it. But vigilant readers could notice that not everything is all right with Canadian card. On some differently angled surfaces, with angles not equal to 90 degrees, RADEON 8500 simply does not render anisotropy. Look at screenshots, taken in Serious Sam while viewer was turning relative to a wall:
I have made animated GIFs for your convenience:
There's obviously no picture clearness with RADEON 8500 at a number of viewing angles. Is it the reason of ATI's anisotropy calculation cheapness? And NVIDIA GeForce3 and GeForce4 have everything "fair", if, certainly, it is possible to count realization of this function as fair and dishonest. It is bad, that manufacturers do not give users a conscious choice: to use the fair anisotropy with big resource losses or the cheaper "approximation". Now such choice may be made only indirectly - by choosing a card.
And still it is impossible to directly operate with the concept of anisotropy "honesty". If we may strictly estimate trilinear filtering, as its algorithm is unequivocal and well described, the anisotropic filtering technology is not disclosed by manufacturers, and there are about five basic approaches for it. That is so if you don't consider the nuances! Let's pause on how two companies perform this function in detail.
If bilinear and trilinear filterings are precisely enough defined mathematically (however, in due time this didn't stop NVIDIA from calling trilinear filtering a certain method of approximation in some documents - the dithering of different MIP levels values), the term "anisotropic filtering" does not mean any exact algorithms of realization. NVIDIA and ATI approaches are essentially different. Let's get schematically acquainted with them:
NVIDIA is rather straightforward. The figure shows how bilinear samples are selected in texture space during anisotropic filtering. Depending on filtering quality settings and surface viewing angle relative to screen plane, the standard bi- (or tri-) linear filtering is performed 1-4 times for points located on a straight line, drawn along dividing pixel, projected from the screen to texture surface along its long side (represented by an arrow on the figure). The values received this way (blue circles) are averaged and become the result of filtering. Each value is based on four nearest discrete texture values (rectangles) and may have its own independent coordinates. Such approach suits arbitrary positioned textures, but demands high perfomance - the number of chosen texture samples, and, accordingly, fill time grows by several times for an appreciable part of triangles unparallel to the screen.
ATI's approach is more limited, but also more performing:
As we see, values are being chosen as a chain, that may be positioned strictly horizontally or vertically in the texture plane. I.e. filtering quality will be high for values of projecting vector that are close to orts (an arrow on the figure), but as it turns, the effect will be still smaller down to the full loss of sense in using such method. It will be shown as follows in real applications - filtering will fully work for walls or ceilings, but for surfaces, that are not right-angled; the result will be smaller and smaller, while approaching the critical angle of 45 degrees (that we can observe above). But, on the other hand, such approach is much more favourable from the computing point of view. First, we choose organized chains of at least 2xN texture points in size (small squares on the figure) that can be effectively chosen for N/2 clocks with the help of standard texture blocks designed for bilinear filtering. Then, we filter values (circles on the figure), each time using the same offset of discrete points relative to the initial texture. Such operation may be performed for one clock by a special scheme of ten multipliers, built into the texture block, as the value of interpolation parameters is calculated once and remains the same for all 1..5 calculated points. Besides we may essentially speed up this already productive algorithm, having calculated texture variants, specially compressed on axes, beforehand (the so-called RIP mapping).
Summarizing the aforesaid, we shall note that NVIDIA approach demands greater time for result calculation, but it is also more "fair", dealing good with both objects located at any angles to the viewer, not just horizontally or vertically. ATI method has sense as well - the majority of modern games is generally full of horizontal and vertical surfaces.
We've examined the performance of a number of videocards at enabled anisotropy, inclidung not only NVIDIA and ATI products, but also STM/PowerVR KYRO II and Matrox Parhelia. Here's it:
3DMark2001 SE, Performance
It's clear without comments. Still I'll mark the most important. KYRO II is the perfomance drop leader. Then there goes GeForce4 Ti, and GeForce3 Ti 500. And then RADEON 8500 è RADEON 7500. It's understandable according to the different anisotropy methods mentioned.
3DMark2001 SE, Quality
I want to attract your attention to that LOD BIAS value is biased to higher texture quality on RADEON 8500 in Direct3D, so at disabled anisotropy the clearness seems to be better than that of GeForce3. But that's only for screenshots, as such a push of LOD BIAS results in "texture noise", showing up as flashing dots - so-called "sand". So we decided to bias GeForce4 LOD BIAS as well and got almost the same quality. In general, there are almost no quality differences at the middle and high anisotropy levels, they show up on some very distant parts only.
Pity, but RADEON 7500 doesn't have anisotropy with 6.071 drivers (WHQL, official ATI release) in DIrect3D.
I recommend you to read our reviews about anisotropic filtering for more details about quality you can have with the different cards after enabling this feature.
And now let's proceed to OpenGL.
I must say that latest NVIDIA drivers (from 28.90) allow to control the so-called fast OpenGL anisotropy. But there are some limitations:
This kind of anisotropy uses a complex algorithm to pass texture processing for very distant objects (at least, it's very hard to determine) for getting good performance boosts.
You can see that performance is considerably better with the latest drivers, and the anisotropy quality is ALMOST THE SAME (to the left - 28.32, to the right - 29.42):
It's interesting that GeForce4 Ti is much better in this situation, RADEON 8500 showed a higher performance drop despite quality artefacts, read further.
Serious Sam: The Second Encounter, Quality
Note that RADEON 8500 anisotropy artefacts might be concealed at close distances:
As the observer moves farther RADEON 8500 anisotropy becomes "scrappy". Hills look especially unpleasant.
The latest drivers improved GeForce4 Ti anisotropy performance, so these cards look very good now featuring excellent quality.
Return to Castle Wolfenstein, quality
You can see that LOD BIAS shift produces a noticeable result (at almost no performance drop), so we recommend GeForce4 Ti owners to use Anisotropy Level 4 with shifted LOD BIAS. Reasonable shift produces no "texture noise".
Andrey Vorobiev (Anvakams@ixbt.com)
Alexander Kondakov (firstname.lastname@example.org)
Evgeniy Zaycev (email@example.com)