Fast approximate anti-aliasing
Fast approximate anti-aliasing(FXAA) is ascreen-spaceanti-aliasingalgorithm created byTimothy LottesatNvidia.[1]
FXAA 3 is released under apublic domainlicense. A later version, FXAA 3.11, is released under a 3-clause BSD license.[2]
Algorithm description
[edit]- The input data is the rendered image and optionally the luminance data.[3]
- Acquire the luminance data.[3]This data could be passed into the FXAA algorithm from the rendering step as an alpha channel embedded into the image to be antialiased, calculated from the rendered image, or approximated by using the green channel as the luminance data.[3]
- Find high contrast pixels by using a high pass filter that uses the luminance data.[3]Low contrast pixels that are found are excluded from being further altered by FXAA.[3]The high pass filter that excludes low contrast pixels can be tuned to balance speed and sensitivity.[3]
- Use contrast between adjacent pixels to heuristically find edges, and determine whether the edges are in the horizontal or vertical directions.[3]The blend direction of a pixel will be perpendicular to the detected edge direction on that pixel.[3]
- Calculate one blend factor for a high-contrast pixel by analyzing the luminance data in the 3x3 grid of pixels with the pixel in question being the center pixel.[3]
- Search along the detected edge to determine how long that edge goes for and what direction the actual edge goes when the detected horizontal or vertical edge ends in order to take into account the actual edge's direction in order to calculate a second blend factor.[3]This step can be tuned for more quality by increasing the search resolution and how far the search goes before the search for the edge's end gives up, or for more speed by reducing both.[3]
- Blend the pixel using the chosen blend direction and the maximum of both of the blend factors that were calculated.[3]
Comparison
[edit]The main advantage of this technique over conventional spatial anti-aliasing is that it does not require large amounts ofcomputing power.It achieves this by smoothing undesirable jagged edges ( "jaggies")[4]aspixels,according to how they appear on-screen, rather than analyzing the3D modelitself, as in conventional spatial anti-aliasing.[1]Since it is not based on the actualgeometry,it will smooth not onlyedgesbetween triangles, but also edges insidealpha-blended textures,or those resulting frompixel shadereffects, which are immune to the effects ofmultisample anti-aliasing(MSAA).[5]
The downsides are that high contrasttexture mapsare blurred, that FXAA must be appliedbeforerendering theHUDelements of a game lest it affect them too, and that polygonal details smaller than one pixel that would have been captured and rendered by MSAA and SSAA cannot be captured and rendered by FXAA alone.
See also
[edit]- Morphological antialiasing
- Multisample anti-aliasing
- Anisotropic filtering
- Temporal anti-aliasing
- Deep learning anti-aliasing
- Spatial anti-aliasing
References
[edit]- ^abLottes, Timothy (February 2009)."FXAA"(PDF).NVIDIA.Retrieved29 September2012.
- ^"opengl - Using NVidia FxAA in my code: Whats the licensing model?".Stack Overflow.
- ^abcdefghijklFlick, Jasper."FXAA: Smoothing Pixels".RetrievedJuly 21,2020.
- ^Wang, James (March 19, 2012)."FXAA: Anti-Aliasing at Warp Speed".NVIDIA. Archived fromthe originalon February 21, 2019.RetrievedJanuary 3,2013.
- ^Atwood, Jeff (December 7, 2011)."Fast Approximate Anti-Aliasing (FXAA)".Coding Horror. Archived fromthe originalon January 31, 2014.RetrievedSeptember 30,2012.