The differences are subtle but exist across the entire image. Check the electric pole and the wiring. They lose the “teeth” along the edges when SMAA is turned on. The buntings and the vegetation also get the same treatment. However, unlike FXAA, SMAA isn’t too strong. It gets rid of the aliasing without blurring the texture detail.
FXAA uses luma or contrast-based edge detection (AA is applied wherever the luma difference is higher than a certain threshold) to implement the averages. This isn’t very accurate and tends to blur objects with complex multi-colored patterns. FXAA can also treat sub-pixel AA. This is done by taking a square (3×3) grid and comparing the luma of the outer pixels to that of the central pixel. The smaller the contrast difference between the two, the less aliased it will be.
Newer methods, such as SMAA, greatly reduce the blur intensity while also eating up most of the jaggies. However, it suffers from the same drawback as MSAA: It doesn’t work with transparent textures.
Morphological Anti-aliasing (MLAA) was one of the first shader-based AA techniques to gain widespread adoption. It is implemented in the last stage of the rendering pipeline (post-processing) and works by searching for discontinuities (see the perpendicular green line at a) and classifies them according to a series of pre-defined patterns/shapes. They are then virtually re-vectorized (blue line), allowing the calculation of the coverage areas (visible triangles/objects) for the involved pixels.
These areas are then used to blend with a neighbor, therefore smoothening them out. The shaded pixels (here a) get a color depending on the surrounding pixels. The edge detection is carried out using depth or luma information, pattern detection, and calculation of coverage areas (given by C). Pattern detection searches the two ends of an edge and analyzes the crossing edges.
One of the primary drawbacks of MLAA is that it doesn’t work well with complex geometry that contains a lot of thin lines. It was designed to anti-alias silhouettes of objects, and with sharp geometric features, it results in blurry results:
SMAA was introduced to rectify the shortcomings of both FXAA (too much blurring) and MLAA (limited coverage), and it works well in most scenarios. It works by leveraging edge detection based on color-specific luma.
SMAA uses multiple (1-pixel long for sharp geometry and multiple pixels long for diagonal patterns) crossing lines to enhance edge detection and not only reduce blurring but also improve coverage. With thin lines and objects prone to blurring with FXAA/MLAA, a rounding factor is used that scales the coverage areas obtained by the pixel-long crossing edges.
SMAA is often paired with temporal anti-aliasing (SMAA T1x/T2x), which uses temporal data from neighboring frames to improve the stability and quality of anti-aliasing. Furthermore, unlike MLAA, SMAA uses multiple samples per pixel, which allows for improved image quality. The usual value is two, but in some cases, four are also used. The following modes are usually considered viable for SMAA:
- SMAA 1x: includes accurate distance searches, local contrast adaptation, sharp geometric features, and diagonal pattern detection.
- SMAA S2x: includes all SMAA 1x features plus spatial multi-sampling.
- SMAA T2x: includes all SMAA 1x features plus temporal super-sampling.
- SMAA 4x: includes all SMAA 1x features plus spatial and temporal multi/super-sampling
The latest and most popular form of AA is temporal anti-aliasing. TAA focuses on removing temporal aliasing or shimmering. It’s most evident in motion. Temporal aliasing is caused when the frame rate is too low compared to the transition speed of the objects in the scene. This makes the boundaries of the objects appear in motion. TAA works by comparing neighboring frames (temporally) and blending them to create a cleaner image in motion.
The present frame is rendered along with the geometry and shading, after which it is reprojected on the previous image using the jitter offsets and motion vectors. After that, a rectify filter is used to compare the frame and check for any ghosting, and the post-processing effects are applied, thereby completing the frame. Similarly, this frame is used for reconstructing (by reprojection) the next consecutive frame, and the process continues.
TAA is essentially an approximation of sorts: It uses two images to extrapolate the final image. It also causes a good deal of blurring, losing some texture detail in the process. This is evident in the above image. The image is rendered across different frames at a particular resolution, and with each additional image, a jitter offset (camera shift of a few pixels) is applied. This produces multiple images from a single frame which are then used for supersampling and/or upscaling.
Temporal upscaling uses a similar method to upscale lower-resolution images. The core difference is that, unlike TAA, alternating pixels are rendered in consecutive frames and fill the gaps using interpolation and samples from the neighboring pixels.
- Read more here: NVIDIA DLSS 2.0 vs PS4’s Checkerboard Rendering: Comparing RTX Upscaling with Console Technology
Here’s a comparison of FXAA vs TAA used on the same image:
The main advantages of TAA over FXAA are more pronounced in motion. The “teeth” at the boundaries of the objects appear to be moving when you are in motion in-game. TAA works to smoothen these artifacts, while FXAA simply applies a “Vaseline filer,” which, although effective, produces curvy lines that jump around when there’s a transition in the scene.