Anisotropic filtering

An illustration of texture filtering methods showing a texture with trilinear mipmapping (left) and anisotropic texture filtering

In 3D computer graphics, anisotropic filtering (abbreviated AF)[1][2] is a method of enhancing the image quality of textures. It only applies on surfaces at oblique viewing angles to the camera and where the projection of the texture (not the polygon or other primitive on which it is rendered) appears to be non-orthogonal. As per its etymology, anisotropic filtering does not filter the same in every direction.

Like bilinear and trilinear filtering, anisotropic filtering eliminates aliasing effects,[3][4] but improves on these other techniques by reducing blur and preserving detail at extreme viewing angles.

Primarily due to memory bandwidth constraints[citation needed], anisotropic filtering is a relatively intensive process and only became a standard feature of consumer-level graphics cards in the late 1990s.[5] Anisotropic filtering is now common in modern graphics hardware (and video driver software) and is enabled either by users through driver settings or by graphics applications and video games through programming interfaces.

Comparison to isotropic algorithms

An example of anisotropic mipmap image storage: the principal image on the top left is accompanied by filtered, linearly transformed copies of reduced size.
Isotropic mipmap of the same image

Anisotropic filtering retains the "sharpness" of a texture normally lost by a mipmap texture's attempts to avoid aliasing. Anisotropic filtering can therefore be said to maintain crisp texture detail at all viewing orientations while providing fast anti-aliased texture filtering.

In traditional isotropic mipmapping, downsizing at each level halves the resolution on each axis simultaneously. As a result, when rendering a horizontal plane at an oblique angle to the camera, the minification would provide an insufficient horizontal resolution due to the reduction of image frequency in the vertical axis. That is, when sampling to avoid aliasing on a high-frequency axis, the other texture axes will be similarly downsampled and therefore potentially blurred.

With mipmap anisotropic filtering, a texture of resolution 256px × 256px would not only be downsampled to 128px × 128px, but also to other non-square resolutions, such as 256px × 128px and 32px × 128px. These anisotropically downsampled images can be probed when the texture-mapped image frequency is different for each texture axis. Then, one axis is not blurred due to the screen frequency of another axis, and aliasing is still avoided.

Mipmapping and its associated axis-alignment constraints mean it is suboptimal for true anisotropic filtering and is used here for illustrative purposes only. More general anisotropic filtering methods support anisotropic probes that are not necessarily axis-aligned in texture space, allowing for diagonal anisotropy.

Degree of anisotropy

Different degrees or ratios of anisotropic filtering can be applied during rendering. This degree refers to the maximum ratio of anisotropy supported by the filtering process. For example, 4:1 (pronounced “4-to-1”) anisotropic filtering will continue to sharpen more oblique textures beyond the range sharpened by 2:1.[6]

In practice, this means that in highly oblique texturing situations, a 4:1 filter will be twice as sharp as a 2:1 filter (it will display frequencies double that of the 2:1 filter). However, most of the scene will not require the 4:1 filter; only the more oblique and usually more distant pixels will require the sharper filtering. This means that as the degree of anisotropic filtering continues to double there are diminishing returns in terms of visible quality with fewer and fewer rendered pixels affected, and the results become less obvious to the viewer; only a relatively few highly oblique pixels, mostly on more distant geometry, will display visibly sharper textures in the scene with the higher degree of anisotropic filtering. The performance penalty also diminishes because fewer pixels require the data fetches of greater anisotropy.

Current hardware rendering implementations set an upper bound on this ratio due to the additional hardware complexity and the aforementioned diminishing returns.[7] Applications and users are able to adjust the ratio through driver and software settings up to the threshold.

Implementation

True anisotropic filtering probes the texture anisotropically on the fly on a per-pixel basis for any orientation of anisotropy.

In graphics hardware, typically when the texture is sampled anisotropically, several probes (texel samples) of the texture around the center point are taken on a sample pattern mapped according to the projected shape of the texture at that pixel.[8] Earlier software methods have used summed-area tables.[9]

Each anisotropic filtering probe is often in itself a filtered mipmap sample, which adds more sampling to the process. Sixteen trilinear anisotropic samples might require 128 samples from the stored texture, as trilinear mipmap filtering needs to take four samples for each of the two mipmaps and then anisotropic sampling (at 16-tap) needs to take sixteen of these trilinear filtered probes.

However, this level of filtering complexity is not required all the time. There are commonly available methods to reduce the amount of work the video rendering hardware must do.[citation needed]

The anisotropic filtering method most commonly implemented on graphics hardware is the composition of the filtered pixel values from only one line of mipmap samples. In general, the method of building a texture filter result from multiple probes filling a projected pixel sampling into texture space is referred to as "footprint assembly", even where implementation details vary.[10][11][12]

Performance and optimization

The sample count required can make anisotropic filtering extremely bandwidth-intensive. Multiple textures are common; each texture sample could be four bytes or more, so each anisotropic pixel could require 512 bytes from texture memory, although texture compression is commonly used to reduce this.

A video display device can easily contain over two million pixels, and desired application framerates are often upwards of 60 frames per second. As a result, the required texture memory bandwidth may grow to large values. Ranges of hundreds of gigabytes per second of pipeline bandwidth for texture rendering operations is not unusual where anisotropic filtering operations are involved.[13]

Fortunately, several factors mitigate in favor of better performance:

  • The probes themselves share cached texture samples, both inter-pixel and intra-pixel.[14]
  • Even with 16-tap anisotropic filtering, not all 16 taps are always needed because only distant highly oblique pixel fills tend to be highly anisotropic.[6]
  • Highly anisotropic pixel fill tends to cover small regions of the screen (i.e. generally under 10%)[6]
  • Texture magnification filters (as a general rule) require no anisotropic filtering.

See also

References

  1. ^ "What is Anisotropic Filtering? - Technipages". 8 July 2020.
  2. ^ Ewins, Jon P; Waller, Marcus D; White, Martin; Lister, Paul F (April 2000). "Implementing an anisotropic texture filter". Computers & Graphics. 24 (2): 253–267. doi:10.1016/S0097-8493(99)00159-4.
  3. ^ Blinn, James F.; Newell, Martin E. (October 1976). "Texture and reflection in computer generated images". Communications of the ACM. 19 (10): 542–547. doi:10.1145/360349.360353.
  4. ^ Heckbert, Paul S. (November 1986). "Survey of Texture Mapping". IEEE Computer Graphics and Applications. 6 (11): 56–67. doi:10.1109/MCG.1986.276672.
  5. ^ "Radeon Whitepaper" (PDF). ATI Technologies Inc. 2000. p. 23. Retrieved 2017-10-20.
  6. ^ a b c "Texture antialiasing". ATI's Radeon 9700 Pro graphics card. The Tech Report. 16 September 2002. Retrieved 2017-10-20.
  7. ^ "Anisotropic Filtering". Nvidia Corporation. Retrieved 2017-10-20.
  8. ^ Olano, Marc; Mukherjee, Shrijeet; Dorbie, Angus (2001). "Vertex-based anisotropic texturing". Proceedings of the ACM SIGGRAPH/EUROGRAPHICS workshop on Graphics hardware. pp. 95–98. doi:10.1145/383507.383532. ISBN 1-58113-407-X.
  9. ^ Crow, Franklin C. (1984). "Summed-area tables for texture mapping". Proceedings of the 11th annual conference on Computer graphics and interactive techniques. pp. 207–212. doi:10.1145/800031.808600. ISBN 0-89791-138-5.
  10. ^ Schilling, A.; Knittel, G.; Strasser, W. (May 1996). "Texram: a smart memory for texturing". IEEE Computer Graphics and Applications. 16 (3): 32–41. doi:10.1109/38.491183.
  11. ^ Dachille, F.; Kaufman, A.E. (March 2004). "Footprint area sampled texturing". IEEE Transactions on Visualization and Computer Graphics. 10 (2): 230–240. doi:10.1109/TVCG.2004.1260775. PMID 15384648.
  12. ^ Lensch, Hendrik (2007). "Computer Graphics: Texture Filtering & Sampling Theory" (PDF). Max Planck Institute for Informatics. Retrieved 2017-10-20.
  13. ^ Mei, Xinxin; Chu, Xiaowen (2015-09-08). "Dissecting GPU Memory Hierarchy through Microbenchmarking". arXiv:1509.02308 [cs.AR]. Accessed 2017-10-20.
  14. ^ Igehy, Homan; Eldridge, Matthew; Proudfoot, Kekoa (1998). "Prefetching in a Texture Cache Architecture". Eurographics/SIGGRAPH Workshop on Graphics Hardware. Stanford University. Retrieved 2017-10-20.