TAA, SMAA, FXAA, MSAA, or SSAA, which one should you choose? Four options and this is just anti-aliasing we’re talking about here. Modern games include a slew of graphics settings to choose from, in order to get the best performance for your hardware. Other than Anti-Aliasing (AA), you’ve got Ambient Occlusion, Screen Space Reflections, Shadows, Texture Filtering, Post-Processing, and much more. What do all these graphics settings do, and more importantly how they impact the visual fidelity in your favorite games? Let’s find out!
Anti-Aliasing: MSAA vs FXAA vs SMAA vs TAA
Let’s start off with anti-aliasing. It’s one of the primary graphics settings you’ll find in games. You’ve got the traditional MSAA, SSAA, FXAA, and the newer shader-based SMAA and temporal techniques (TAA) that have become the norm. So, what does anti-aliasing do? In short, it gives the image a cleaner look by removing the rough or jagged edges around objects.
Here’s an example of how FXAA (fast approximate anti-aliasing) improves the image quality by reducing the jaggies. Enlarge the images and see how the second one is notably smoother. Here’s another comparison of how AA impacts your game. Here you can see SMAA in action:
The differences are subtle but exist across the entire image. Check the electric pole and the wiring. They lose the teeth on 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.
There are two main types of anti-aliasing techniques:
Traditional Upscaling: These mainly include MSAA (Multi-Sampling AA) and SSAA (Super Sampling AA) which were popular last-gen and for good reason. They produce the best image quality (broadly speaking) but the performance hit is severe. They work by rendering the image at a higher resolution and then scaling it down to fit the native resolution. This essentially makes the entire image sharper and more detailed, scaling down the rough edges in the process but not removing them entirely. Here’s an example:
Super Sampling renders the entire image at a higher resolution and then scales it down to fit the target resolution. The exact rendering resolution depends on the developer. The image can be downscaled along both the x and y-axis or one of them.
MSAA or multi-sampling uses edge-detection algorithms to detect aliasing (based on contrast differences) and then renders only those parts at a higher resolution. Once again, the amount of sampling varies from 2x to 8x. In most cases, SSAA and MSAA miss transparent textures as most edge detection filters fail to recognize them. Furthermore, they tend to reduce the intensity of aliasing, rather than completely eliminate it.
Shader based: Shader based AA techniques are more efficient and don’t impact the performance by much. They work by applying a slight blur to the edges, making the image smoother but at the same time reducing the sharpness. FXAA is a good example of how shader based AA gets rid of aliasing but reduces the level of detail by applying a blur filter.
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.
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. Here’s a comparison of TAA vs no AA:
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, after which 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.
As TAA is essentially an approximation of sorts: That is 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.
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 filling 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.
There are two kinds of shadows in games. “Shadows” and “Ambient Occlusion”. The latter refers to the ambient shadows that exist in crevices, edges, and on surfaces hidden from the sun. It’s a form of global illumination or indirect lighting. The casting object and the shadow often overlap here. The primarily ambient occlusion technique is Screen Space Ambient Occlusion and it’s improved variant Horizontal Based Ambient Occlusion.
There are also newer GI techniques such as SVOGI, VXAO, and ray-traced GI but those are still quite rare. If you do want to know about them, just remember that voxels (3D triangles) form the basis of VXAO/SVOGI while ray-tracing is used for the latter. Here’s how a voxel is formed from a triangle:
Global Illumination is a form of ambient occlusion which is usually more accurate than SSAO and its derivatives. RTVGI (Real-Time Voxel-Based Global Illumination) and Sparse Voxel Octree Global Illumination (SVOGI) are some notable examples of GI. You can read more about it here.
SSAO and HBAO are rough hacks that calculate (using an integral) where the light will penetrate and which areas will be shadowed. It’s an approximation rather than the actual thing.
Texture Detail, Level of Detail (LOD), Tessellation, and Lighting Explained on the next page…