UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
FAQ
Программирование
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
CIGI Client Plugin
Rendering-Related Classes

Temporal Anti-Aliasing

Temporal anti-aliasing (also known as TAA) is a anti-aliasing technique to reduce temporal aliasing (flickering or shimmering effects).

ISS without TAA.
ISS with TAA.

TAA Features#

Unlike Multisample anti-aliasing (MSAA) that performs anti-aliasing only on edges of polygons (and makes this edges smoother), Temporal anti-aliasing applies smoothing to the whole scene. In case of full deferred rendering (when the final image is composed of different texture buffers: depth, normal, etc.), MSAA will increase performance costs, because Multisample anti-aliasing should be applied to each texture buffer.

How TAA works#

The main concept of temporal anti-aliasing is to use a sub pixel jitter of scene camera every frame and then combine all this frames into the final image. So, it will take time to get a smoothed picture (for example, 5-7 frames), but with the frequency of 60 frames per second it will look seamlessly.

Simplified demonstration of the TAA camera jitter.

During rasterization process, there is a test whether the object will get into pixel or not. And the object will not be rendered if it doesn't occupy a major part of a pixel.

Vector image before rasterization.

And here we can get an error, when we have a sphere object before rasterization and get a square object after, because some parts of the sphere doesn't occupy enough pixel space.

Bitmap image after rasterization without TAA.

Not a very good rendering, right? And temporal anti-aliasing solves this problem, because camera will have a sub pixel jitter, and each part of this sphere at least once will be rendered in a frame. And after combining these frames, we will get a true sphere, not a square! Voila!

Bitmap image after rasterization with TAA.

Ghosting#

This anti-aliasing technique works perfectly for static scenes (without any moving objects). But when objects are moving, frames will significantly differ one from another and we will see a trail of "ghosts" of the moving object. This effect is called ghosting.

To get rid of ghosting, there is a velocity buffer. Velocity buffer stores information about transformations of objects. Due to this buffer, the engine knows about the object transformation and don't render the "ghosts" of the moving object. Also, the engine checks the color intensity of the pixel, because of camera jitter.

Summary#

TAA has a wide scope of usage, because it improves whole image (not only the edges of the geometry, like MSAA) including geometry, shadows, etc. But the main factor of good TAA working is optimized content on the scene: the higher FPS is, the faster temporal anti-aliasing smooths the scene. In addition to this, UNIGINE 2.0 allows you to choose the type of anti-aliasing: TAA or FXAA.

Last update: 27.12.2018