NVIDIA FXAA Anti-Aliasing Performance

Written by Michael Larabel in Display Drivers on 18 September 2012 at 01:09 AM EDT. Page 1 of 5. 6 Comments.

A few months back the NVIDIA Linux driver introduced support for FXAA, a new anti-aliasing method. In this article are benchmarks of FXAA plus more information on this post-process shader-based anti-aliasing method.

FXAA isn't meant to replace MSAA (Multi-Sample Anti-Aliasing) or other AA methods but is rather something complementary. NVIDIA introduced this support to their 304.30 Linux graphics driver back in July while some games already provide support for using FXAA directly. NVIDIA has also brought FXAA to game consoles as this method of anti-aliasing is more lightweight compared to MSAA. NVIDIA offers the source-code to a reference FXAA implementation for those interested.

FXAA is short for Fast Approximate Anti-Aliasing. This was designed by Timothy Lottes of NVIDIA. Below is an email that Lottes sent to me that describes FXAA in much more detail.

(1.) FXAA was designed to be a fast post-process shader based anti-aliasing method which can improve image quality when an application or game cannot afford to use hardware anti-aliasing methods like MSAA or CSAA. FXAA is not designed to replace MSAA/CSAA or any other hardware AA method, but rather just offer another option.

FXAA is an interesting option for a game which is using deferred rendering and doesn't have MSAA support, or for a notebook which cannot run 4xMSAA fast enough in a specific game. But for games which have native MSAA support on higher-end machines, the 4xMSAA option will have higher quality.

(1.a.) As a post-process filter running without multiple samples per pixel, FXAA has some limitations as to what quality it can reach. FXAA can improve the quality along edges, but it does not do a good job on near horizontal or near vertical edges. Since FXAA runs without MSAA, it also attempts to find areas of the image which might cause jittering in motion and reduces the contrast to reduce the jittering in motion (compared to no-AA). This effect can look like a softening of the image.

(2.) FXAA does not mix with MSAA/CSAA. FXAA is designed to find edges on no-AA images, and the MSAA gradient steps confuse the FXAA filter. That being said some developers like DICE with Battlefield3 on Windows, decided to offer an FXAA option even with MSAA turned on, and this can increase quality on things like trees and bushes which use a technique called "alpha test" which doesn't mix as well with MSAA.

(3.) FXAA comes in two different forms: a driver-FXAA, and the following source forms,
(a.) FXAA v1 which was released as an SDK sample (slow, but high quality).
(b.) FXAA v2 release in source form as a prototype for PS3 and 360 (fast, but low quality).
(c.) FXAA v3.11 release in source form as a highly optimized version of v1 and v2 (has a PC and console mode).

The source versions of FXAA were designed as shaders a developer could download and just integrate directly into their game or application. FXAA in this way was portable to any Linux/Windows/Mac/PS3/360 machine, and the developer could change and customize FXAA towards their application.

Later NVIDIA decided that it might be a good idea to offer some form of FXAA as a driver option for games or apps which didn't already integrate FXAA. Games that integrate FXAA source directly run FXAA before rendering the HUD or text or UI elements, however the driver-FXAA only can be applied after the HUD/UI rendering right before the frame gets sent to the display or composited for windowed mode. So driver-FXAA has the disadvantage of being applied to text, and FXAA will soften the text a little. Also on top of this the driver-FXAA is a little more expensive because it has some extra logic to reduce the filtering on text compared to the source versions of FXAA.

One other thing with driver-FXAA, is that you might have a hard time getting screen shots. At least on Windows I can confirm that driver-FXAA is applied after utilities like fraps grab their captures. On Linux I'm not sure exactly where the driver team did the integration, but guessing you will have the same problem.

On the following pages are benchmarks showing the performance of Fast Approximate Anti-Aliasing on various NVIDIA GeForce GPUs.


Related Articles