Stand still and they won’t see you

So far I have written about aliasing in the context of rendering single images, but neglected to consider what happens when we string a series of images together, attempting to create the illusion of smooth motion.  Animation introduces the temporal (time) axis, which we sample by rendering frames usually 30 or 60 times per second.  And remember, whenever we sample from a theoretically continuous signal, aliasing can ensue.

Yet the biggest impact of animation is often not new aliasing at all, but how it makes any existing aliasing far more objectionable. If you have aliased triangle edges, textures, geometry, or shaders, some portion of your output pixels will be determined by aliasing noise as opposed to an accurate representation of the desired image.  A small amount of random noise may be unnoticeable in a still image, but when the camera moves even a fraction, the nature of aliasing means these random elements will be different for every frame.  Because the human eye is drawn to motion, even a few percent aliasing noise over an otherwise stable image becomes painfully obvious as the scene shimmers, strobes, flickers, and crawls.

When testing graphics code, always view with a camera that moves the same way as your final game.  That is the only way to judge whether you have aliasing under control.

Aliasing can sometimes be ‘fixed’ simply by getting rid of motion!  In MotoGP we mapped special cameras for use during replays, trying to emulate how a race would be filmed for TV.  Some of these cameras were low to the ground, looking down a straight section of track with an extremely narrow field of view (aka telephoto lens).  These unusual angles let to nasty aliasing that was not visible during normal gameplay.  We fixed it by locking the problematic cameras in place, setting a flag that forbade them from rotating or changing zoom level.  The aliasing was technically still as bad, but because it no longer moved, the game looked much better.

A similar technique is used in some shadow mapping implementations, which calculate light projections in such a way as to snap shadow map texels to a fixed worldspace grid. The shadow map no longer moves through texel space, so aliasing is less noticeable.

Comments (1)