Anti-aliasing quick review

Quick recap on Anti-aliasing.

FXAA
Take the image without any AA applied and blur the high contrast parts. Really that’s it. Can catch large aliased shapes pretty well, but will either completely mash small details or miss them. Basically, if there’s something that can’t be seen in the original un-anti-aliased image, FXAA isn’t going to know about it either. It’ll also generally messes with text pretty badly. On the plus side it’s super inexpensive.


MSAA
Hardware level geometric edge anti-aliasing. This only applies to geometry edges, so any aliasing produced from shading (like specular highlights on smooth surfaces or detailed normal maps) won’t get any benefit. It also has some issues with over interpolation which can produce more aliasing on some geometry edges than not having any AA. Produces close to ground truth results in many cases where lighting / shading isn’t a factor, but can still be expensive, especially at higher sample counts. Also only works when using Forward rendering. Some console games managed to use MSAA on deferred, but it requires a bit more low level control than desktops had prior to DX12 / Vulkan, and isn’t considered worthwhile now.


Temporal AA
Reprojects a history buffer (ie: the previous image before post processing like bloom and color correction) using a velocity buffer and depth buffer. For static scenes this can produce images very close to “ground truth” super sampling ala what you might get from an offline renderer. On anything in motion, if it’s opaque, you’ll get different amounts of ghosting, aliasing, blurring, and occasionally something that looks similar to super sampling depending on the scene and the different heuristics used to determine how much (if any) of the previous frame should be used. TAA works best if you’re using also using motion blur to hide the worst cases, but still has pathological issues with transparent effects, moving lights, reflections, panning textures … basically anything that isn’t represented in the velocity and depth buffer. Generally less expensive than MSAA, but usually has to be paired with actual super sampling to get clarity to the same level as MSAA which usually removes any of the performance benefit.

If the game is intended for non-VR, I’d say stick with TAA and work around the issues. Use dithered transparency in cases where there’s obvious smearing, scale up your particle effects if they’re being smoothed away, or use the the Responsive AA setting on the material to mostly disable TAA for the pixels that effect covers.

If you’re aiming for VR, use MSAA, and modify your content so you don’t have super smooth surfaces on sharp edges or in areas of high normal variance.

Note
DLSS and other future machine learning AA techniques may make TAA and MSAA obsolete in the near future, but so far it’s feeling a bit more like FXAA+, failing on some of the cases that MSAA and TAA handle well. I expect the future will be some hybrid of all 3.

Popular posts from this blog

Quick start guide to using Gaea

Volumetric Fog and Lighting in Unreal Engine 4

Substance Painter 2019.3