[In this in-depth technical article, Gruen & Story examine anti-aliasing in games, explaining how you can reduce 'jaggies' in your PC title, and save frame-rate, by using significantly less post-processing passes.]
Over the last few years it has become commonplace for PC games to make use of Multi-Sample Anti-Aliasing (MSAA) to achieve higher quality rendering.
MSAA is a very effective and efficient method for reducing the unsightly "jaggies" that result from the triangle rasterization process. At the same time most game engines also employ post-processing techniques such as depth-of-field, motion blur, color correction and refraction.
Post-processing has become increasingly popular, as it provides a way to carry out complex computations, but only pay the cost for visible pixels. It is not unheard of for an engine to contain up to 20 passes, and these techniques usually require a copy of the main render target as a texture input.
If the engine is making use of MSAA, then the render target will need to be resolved before it can be used in the next pass. This is accomplished through calls to IDirect3DDevice9::StretchRect or ID3D10Device::ResolveSubresource, depending on which version of D3D is being used.
As modern game engines tend to apply multiple post-processing techniques, it is easy to understand how the application could trigger a loop of resolves (Figure 1).
It is critically important to understand that a resolve is not a free operation, and that performing multiple resolves per frame can have a very serious impact on performance. This statement is true for all graphics hardware.
To take a real world example, the developers of a recently released PC title managed to reduce their resolve count from a staggering 22 to just 12. This generated a saving of around 12 ms per frame, at a resolution of 1280x1024@4xAA.
The goal of this article is to describe how to minimize the resolve count in the rendering pipeline without compromising the quality of post-processing effects or deferred shading techniques.
The resolves that should be removed fall into two categories, redundant resolves and harmful resolves, and these will be described in detail later in this article. But first let's consider the resolves that are necessary for good image quality.