Articles: Graphics
 

Bookmark and Share

(0) 

Table of Contents

Pages: [ 1 ]

As you remember, we have already done a bit of anisotropic filtering research wiht the help of the method described in the articlecalled "Second Look at Kyro II: Squeezing All Juices...". However, at that timewe were puzzled to see that the results never were the same. For example, when we enabled 32-sample anisotropic filtering, weobtained 50, 100 and even 300fps.

Just as a quick reminder, the idea of this method was to get the fps rate in the "face to the wall" position byusing the ability of Unreal Tournament to depict the momentary fps. With Kyro II the results changed discernibly whenwe enabled tri-linear or anisotropic filtering and light maps. When we flew over the level before the game actuallystarted, the CPU didn't waste much time calculating the dynamics and game logic, so the results were very similar allthe time and spoke for themselves, so to speak.

There was no result consistency with GeForce3, but we traced a certain tendency: the momentary fps with enabledanisotropic filtering proved to depend on the angle to the surface the viewer looked at.

So, what is anisotropic filtering and what do we need it for?

Here is an elementary example. Imagine a railway running far to the skyline. More distant cross-ties get smaller and smaller and finally become simply a blur. As for the rails, they are clearly seen at a distance, because they coincide with the eyesight direction, unlike the cross-ties, being perpendicular to it. If the images were built in the same manner as the graphics cards do it, not according to the optics laws, at a certain distance the rails and cross-ties would've become indefinable for the eyesight.

For a 3D image of higher quality, we have to observe the optics laws. A method of texture filtering where the optics is taken into consideration is known as anisotropic filtering.

Anisotropic filtering considers the optic angle (the angle at which you look at an object surface), so the textures right in front of you get "smeared" along the object surface much more than in any other direction. To calculate a pixel color in bilinear filtering mode, for instance, the colors of four texels are used (or four "texture pixels" closest to the spot on the object surface, to which the pixel center is projected). In case of anisotropic filtering, ideally, the colors of all the texture samples falling into the pixel projection to the object should be taken into consideration. The number of these samples can be infinitely great if the angle between the object surface and the direction of your eyesight is very small. Today's accelerators are unable to do all these calculations fast enough, so the developers resort to simplifications, approximations and optimizations of all kinds. However, even these methods provide graphics of notably higher quality.

Well, let's pass over to some real examples. But before we proceed, take a look at our testing system configuration.

Testbed and Methods

For our investigation we assembled the following testbed:

  • AMD Athlon 1.2GHz (133MHz FSB) CPU;
  • EPoX 8KTA3 (VIA KT133A based) mainboard;
  • 256MB NCP PC133 SDRAM;
  • Leadtek GeForce3 TD graphics card (see the review here);
  • Fujitsu MPE3084AE 8.4GB HDD.

Software:

  • Windows 98 SE build 4.10.2222 A;
  • DirectX8.0a;
  • Quake 3 Arena v1.27g.

As a driver, we took Detonator 12.60.

Nowadays the drivers support only 32-sample anisotropic filtering in OpenGL and 8-sample filtering in Direct3D, that's why we launched Unreal Tournament in OpenGL with enabled 32-sample anisotropic filtering in 1600x1200x16 mode and with the lowest texture quality settings.

Anisotropic Filtering by GeForce3

So, let's get started and see how the whole thing works on NVIDIA GeForce3 based graphics cards.

We will start with Unreal Tournament. Here we selected a level with a long corridor, namely DM-Pressure, and disabled the light maps, so that the card didn't make use of multi-texturing. In order the floor surface were the only object within the eyeshot, we set the optic angle equal to 1 degree ("fov 1" in the console):

  

Moving the eyes slowly watching the floor from the farthest point directly to the feet, we checked the momentary fps rate. As we noticed, the performance grew abruptly when the optic angle increased. All the stable figures obtained between those rush performance changes are summed up in this chart:

  Optic Angle #1 Optic Angle #2 Optic Angle #3 Optic Angle #4 Optic Angle #5
Momentary fps rate at 200MHz/460MHz, 16bit, basic texturing 51.58 68.62 102.46 201.91 391.76
Calculated fillrate = fps x 1600 x 1200 (Mpixels/sec) 99033600 131750400 196723200 387667200 752179200
Theoretical fillrate (Mpixels/sec) 800000000 800000000 800000000 800000000 800000000
Clocks per pixel (theoretical fillrate / calculated fillrate) during basic texturing 8.078066434 6.072087827 4.066627627 2.063625708 1.063576339

It appears that GeForce3 makes use of the so-called ''adaptive'' anisotropic filtering, i.e., to get the color, the chip uses different number of samples at different optic angles. Besides, it seems to need one clock cycle to sample out each set of four texture samples by anisotropic filtering.

For you to get a better idea, we composed another chart depicting analogous figures obtained by using the same method, but in slightly different conditions: in 32bit color mode and with 100MHz core frequency. The chart demonstrates that in this case the performance is restricted by the core frequency, but not by the memory bus bandwidth:

  Optic Angle #1 Optic Angle #2 Optic Angle #3 Optic Angle #4 Optic Angle #5
Momentary fps rate at 100MHz/460MHz, 16bit, basic texturing 25.83 34.41 51.44 101.87 199.62
Momentary fps rate at 200MHz/460MHz, 32bit, basic texturing 51.45 68.59 102.37 201.59 327.89
Momentary fps rate at 200MHz/460MHz, 16bit, basic texturing 51.58 68.62 102.46 201.91 391.76

As we set different levels of anisotropic filtering in the driver, the results altered as well. In case of 16-sample anisotropic filtering the performance skipped only twice: when we passed over from 16- to 8-sample filtering and from 8- to 4-sample filtering:

  Optic Angle #1 Optic Angle #2 Optic Angle #3 Optic Angle #4 Optic Angle #5
32-sample anisotropic filtering 51.58 68.62 102.46 201.91 391.76
16-sample anisotropic filtering ... ... 101.33 200.2 391.66
8-sample anisotropic filtering ... ... ... 199.84 391.71
Bi-linear filtering ... ... ... ... 391.66

We found out that different levels of anisotropic filtering determine the maximal number of texture samples to be used by GeForce3, and it's up to the chip to choose, how many samples it will finally use :)

Enabled light maps didn't tell on the results. Consequently, GeForce3 chip carries out multi-texturing and anisotropic filtering at once without affecting the performance.

Sadly, it's impossible to enable tri-linear filtering in OpenGL in Unreal Tournament, so we had to assess the performance in case of simultaneous tri-linear and anisotropic filtering by running Unreal Tournament in Direct3D. In Direct3D the driver lets us enable the maximum of 8-sample anisotropic filtering. The enabling of tri-linear filtering didn't lead to any performance losses either.

Therefore, we assume that the GeForce3 texturing units work independently, each processing a texture of its own, sampling out 8 texture samples per clock (4 samples from each of the two neighboring MIP levels) and carrying out tri-linear filtering. That is, when tri-linear filtering is disabled, the GeForce3 texturing units exploit only a half of their calculating capacities, no matter whether multi-texturing or anisotropic filtering of any level is enabled or not.

Nonetheless, the results showed that enabling anisotropic filtering makes the texturing units do extra clocks - one clock per each 4 samples. Say, the GeForce3 texturing units need 8 clocks to carry out 32-sample anisotropic filtering.

Dramatic fillrate drop like that is no good, of course, but please, don't forget that the typical gaming scenes, for example in Quake3 or Unreal Tournament, have very few surfaces situated at a small optic angle and demanding high-level anisotropic filtering. This way, the general performance drop caused by enabled anisotropic filtering is not that great.

We used the following logics trying to show, on which surfaces and at which optic angles different levels of anisotropic filtering are enabled. Since GeForce3 features adaptive anisotropic filtering, 32-sample filtering is more efficient than 16-sample filtering only in those areas of the scene, where GeForce3 has to work with a big number of texture samples exceeding 16, while all the rest of the scene doesn't change.

There's not much left to do then, actually: having put the character in the fixed position, we made two screenshots at different levels of anisotropic filtering. After that we go to Photoshop to invert the colors of one of these screenshots and to overlay it on the other one with 50% transparency. Similar pixels of both screenshots are supposed to turn the pixel color to gray, and the non-coinciding pixels will be of some other color. Now we should only increase the image contrast to make the differences between these two pictures more noticeable.

Below you can see what we got in Quake3 Arena and in Unreal Tournament with different levels of anisotropic filtering:

  

32- and 16-sample anisotropic filtering:

  

16- and 8-sample anisotropic filtering:

  

8-sample anisotropic and bilinear filtering:

  

There are clearly cut areas, which differ from the general background. The weapon in the gamer's hand constantly moves up and down, so the weapon is well-seen too, because it was hold at different positions when we made these screenshots.

In Unreal Tournament anisotropic filtering is obviously enabled at greater distances than in Quake3 Arena. It implies that the optic angles and the distances at which anisotropic filtering of different levels is enabled depend on the particular application running. As a result, the performance losses caused by anisotropic filtering won't be the same for different applications.

For instance, in Quake3 Arena with the highest image quality, enabled texture compression and tri-linear filtering, the performance drop generated by enabled anisotropic filtering is rather big:


Conclusion

Well, as we have just seen, incredible texture filtering quality provided by GeForce3 is not a free gift of fortune. However, you always have the opportunity to set the filtering mode that will suit your case most optimally, sacrificing as much speed for the sake of image quality as you can afford.

We believe that the today's cut throat competition will push the present graphics leader, NVIDIA, as well as its competitors to further impressive achievements. And hopefully we don't get too old by the time there appear new graphics accelerators, which will not offer cool image quality at the expense of performance, and the graphics will finally become truly realistic and not "realistic"… 

Pages: [ 1 ]

Discussion

Comments currently: 0

Add your Comment




Latest materials in Graphics section

Article Rating

Article Rating: 0.0000 out of 10
 
Rate this article:
Excellent
Average
Poor