Coding Horror‘s Jeff Atwood has previously talked at length on this site about the new anti-aliasing kid on the block, Fast Approximate Anti-Aliasing, a post-process shader developed by NVIDIA that trumps traditional forms of AA, but at a fraction of the required GPU power. What if I were to tell you there’s something faster and better still and you could be using it in all your DX9 games, right now?
It’s important to watch the video at full resolution, otherwise resizing will make it impossible to make out the differences. Better yet, grab the 222MB HD video and eliminate compression artefacts from the equation.
SMAA, or Subpixel Morphological Anti-Aliasing, uses the same technique as FXAA — that is, MLAA (Morphological Anti-Aliasing). Pioneered by Intel’s Alexander Reshetov and originally developed for CPUs, it has since moved to the GPU and been improved on, using the massive parallel processing available on modern hardware. Which is kind of a downer for Intel, but great for everyone else.
MLAA works on the final image, detecting hard edges and smoothing them as required. It suffers from the same major issue as traditional AA, texture blurring, but it’s nowhere near as bad. SMAA addresses this, and provides even better anti-aliasing and less blurring than FXAA. It’s the joint work of Crytek and the Universidad de Zaragoza in Spain. Crytek’s also famous for creating SSAO, or Screen Space Ambient Occlusion, which while a demanding effect, provides added realism that can’t be denied.
So, how can you get SMAA into your current games? That’s the beauty of MLAA shaders — because they work on the final image, you can use it in just about any game that uses D3D9 for rendering. Like the FXAA injector, it’s a simple matter of placing the right HLSL shader and modified d3d9.dll in the game’s directory. An SMAA injector can be found at the following website.
Note it’s not compatible with all games, but I can confirm it works with Skyrim without issue, and it looks like GTA IV likes it too. It can mess up games with the Steam overlay, but a variable in the config file that accompanies the injector enables a workaround for it.
SMAA: Enhanced Subpixel Morphological Antialiasing [Jorge Jimenez]