Finally have FXAA working correctly in a linear color space: sRGB typed textures work amazingly well. Here is FXAA 3 Quality using linear color space processing one of my favorite hard-to-anti-alias sources: the beautiful pixel art from the Metal Slug series.

No FXAA

FXAA
Console Perf
Console perf with FXAA III is still an unknown, waiting on some more feedback and then another round of tuning before FXAA III is released. FXAA II performance has been reported by a few developers, with PS3 taking about 1.3x more time than Xbox360, which is to be expected. While PS3 has more texture performance, PS3's lack of unified shaders hurts when doing GPU post processing (pixel pipe only): FXAA II Console is likely ALU bound on PS3.
FXAA III has an early exit path which FXAA II didn't have, this should improve performance, but FXAA III, as it is in the prototype stage, requires more ALU for pixels which don't early exit. Very curious about performance.
4/3 Super-sample FXAA
Really like the results I'm getting with 4/3 Super-sample FXAA. The technique is simple, mocked up below on a crop from Mirror's Edge. Render 1.7x the number of total pixels as normal and without any anti-aliasing,

Then apply FXAA Quality, and down-sample by 3/4 in each direction to return to the target resolution,

Image quality clearly increases with increased amount of super-sampling. With FXAA, the super-sampling can be fractional. Compared to deferred shading with super-sample lighting, I believe this fractional super-sampling + FXAA method will provide better quality results at a lower cost.
This is ideal for me, since my preferred PC outputs are a small 720p HDTV and another 1080p 3D HDTV: want higher quality/pixel rather than crazy high resolutions.
Metal Slug has to be one of the most problematic cases you can find, almost impossible to make it look like it hasn't had a non intelligent global blur applied due to the frequency of aliasing artefacts.
ReplyDeleteThere will be a limit to just how good you can make any screen space aliasing artefact removal algorithm after which the only thing you can do is inject more information. I really do like your idea of rendering higher than 720p, say 25%. It's a shame that 1600x900 doesn't quite fit in 10MB of embedded frame buffer. 1440 * 810 does though which is 1/8 larger.
I think I'd rather have a nicely anti aliased 720p output than a raw 1080p
Thanks for blogging, very interesting