TAA, SMAA, FXAA, MSAA, or SSAA? Which one is right for you? Anti-aliasing techniques come in all shapes and sizes, ranging from cheaper shader filters (FXAA) to complex temporal accumulation methods (TAA). Let’s take a closer look at the most popular anti-aliasing technologies used by modern games. Anti-aliasing can be broadly divided into three categories: spatial, post-process spatial, and temporal.
Note: You can open the images in another tab by clicking on them to get a better look.
Anti-Aliasing: MSAA vs SMAA vs TAA
By now, you should already know what anti-aliasing does. It cleans up the artifacts and jaggies that show up along the edges and intersection of thin objects. Back in the early days, multi Sampling and Super Sampling were the most popular methods of anti-aliasing. They produce the best image quality (broadly speaking) at the cost of performance.
Super Sampling renders the entire image at a higher resolution and then scales it down to fit the target resolution. You are essentially sampling the color and depth samples four times per pixel. The most commonly used variations of SSAA are 2x and 4x, although 8x and 16 are also technically possible. The final color of the pixel is determined by taking the average of the four samples. This significantly improves image quality and almost entirely removes the jaggies. On the downside, it’s extremely expensive as you’re essentially rendering the image at 2x or 4x the native resolution.
MSAA or multi-sampling is very similar to SSAA, except it does the sampling only along the triangle edge. Like SSAA, the amount of additional sampling varies from 2x to 8x. The rasterization stage of both SSAA and MSAA are identical. The depth (buffer) sample of each pixel is rendered at Nx, where N is the sampling rate. This includes coverage and occlusion tests (checking which triangles are visible to the viewer/player), which are done at 2x/4x/8x.
The key difference between MSAA and SSAA arises in the latter half of the pipeline. While SSAA applies the pixel shader to each pixel 2x or 4x, MSAA only executes the pixel shader once every pixel. Essentially, it “multi-samples” around the triangle edges using the coverage and depth tests, thereby smoothening out the edges in the process.
One drawback of MSAA is that it can’t be used with deferred lighting techniques which are quite popular in modern games. Deferred lighting or rendering basically delays the calculation of the lighting from the vertex shader to the fragment shader. This saves a lot of performance, as applying lighting on a vertex basis would mean calculating it for several millions of polygons. In the case of fragments, you’re usually calculating it on a fragment basis which generally corresponds to the target output resolution.
Post-processing AA techniques: are more efficient and don’t affect the performance much. They work by blending neighboring pixels to reduce the jaggedness in the scene, making the image smoother but at the same time reducing the sharpness:
Above’s an example of how FXAA (Fast Approximate Anti-Aliasing) improves image quality by reducing jaggies. Enlarge the images and see how the second one is notably smoother. Here’s a comparison of how AA impacts your game. Below you can see SMAA in action:
Continued on the next page…