Anti-Aliasing and Upscaling

A high level overview of the Anti Aliasing options available in Unreal Engine.

Choose your operating system:

Windows

macOS

Linux

Anti-Aliasing is the process of removing jagged, or stair-stepped, lines on edges and objects that should otherwise be smooth. There are different methods of anti-aliasing used to reduce these types of visual artifacts. Some are developed for use with specific renderers and platforms, while others are ideal for improving performance and fidelity.

No anti-aliasing applied to the scene.

With anti-aliasing applied to the scene.

Anti-Aliasing Methods

Many different methods of anti-aliasing have been developed. Unreal Engine provides several methods to choose from depending on the needs and requirements of your project. You can choose between anti-aliasing methods for desktop / console and mobile platforms.

Unreal Engine provides the following methods of anti-aliasing for your projects.

Anti-Aliasing Method

Desktop / Console: Deferred Renderer

Desktop / Console: Forward Renderer

Mobile: Deferred Renderer

Mobile: Forward Renderer

Temporal Super Resolution (TSR)

Y

Y

N

N

Temporal Anti-Aliasing Upsampling (TAAU)

Y

Y

Y

N

Fast Approximate Anti-Aliasing (FXAA)

Y

Y

Y

N

Multi-Sample Anti-Aliasing (MSAA)

N

Y

N

Y

Use the image slider below to switch between no anti-aliasing and the available anti-aliasing methods to compare their result. These are single frame captures that show a static scene. To see the clearest results of anti-aliasing, you should test in a scene where you have different types of assets and materials and where you can freely move around.

IMAGE SEQUENCE NO AA, TSR, TAA, FAA, MSAA

Drag the slider to see the scene when using no anti-aliasing, TSR, TAA, FAA, or MSAA (Forward Renderer).

Anti-Aliasing Scalability Settings

Anti-aliasing settings have their own scalability group in the Engine Scalability Settings to scale GPU costs directly related to the anti-aliasing quality for each of the methods. The scalability group controls the console variables for each of the respective anti-aliasing methods.

You can access the Anti-Aliasing scalability settings from the Settings dropdown menu under Engine Scalability Settings.

Opening the Engine Scalability Settings

You can control the quality by choosing an option between Low**to Cinematic, or use Auto** if you want the editor to test your system and choose the best options. Alternatively, you can adjust the quality of specific features, such as anti-aliasing or shadows.

Engine Scalability Settings Quality Options

Each of the Engine Scalability Settings entries corresponds to a set of configurable console variables found in the DefaultScalability.ini file. You can edit these to better fit your project based on the quality settings you want.

Refer to Scalability Settings for more information on setting up and configuring console variables. This is an advanced workflow.

Choose an Anti-Aliasing Method

Open the Project Settings from the main menu under Window. In the Project Settings, anti-aliasing settings are found in the Engine > Rendering settings.

For Desktop / Console platforms, anti-aliasing settings are located under the Default Settings section.

Rendering Project Settings Anti-Aliasing settings

For Mobile platforms, anti-aliasing settings are located under the Mobile section.

Rendering Project Settings Mobile Anti-Aliasing Settings

Temporal Super Resolution

Temporal Super Resolution (or TSR) is a platform-agnostic temporal upscaler using an algorithm that focuses primarily on investing more GPU cycles of a frame into temporal upscaling quality to save total GPU frame cost. It does this by rendering a significantly lower internal resolution than what Temporal Anti-Aliasing Upsampling in Unreal Engine 4 could do.

TSR provides a native high-quality upsampling technique that meets the demand of next-generation games through the amount of detail and fidelity possible with Nanite micropolygon geometry.

The comparison below demonstrates the quality and performance difference of captured frames rendered at native 4K resolution with 1080p resolution upscale to 4K. TSR makes it possible to achieve image quality near 4K resolution while also reducing GPU frame time by half.

4k frames rendered at native 4K resolution | Frame time: 57.50ms

4k frames rendered at 1080p resolution (r.ScreenPercentage=50) | Frame Time 33.37ms

4k frames rendered at native 4K resolution -- frame time: 57.50ms / 4k frames rendered at 1080p resolution (r.ScreenPercentage=50) -- Frame Time 33.37ms

Each of the images in the comparison above are 4K images that are limited to the width of this page. To see their fully uncompressed resolution, right-click on either and save them to your computer, or open them in a new browser window.

Temporal Super Resolution has the following properties:

  • Rendered frames approach the quality of native 4K with input resolutions as low as 1080p.

  • Less "ghosting" artifacts against high-frequency backgrounds than were visible with Unreal Engine 4's default Temporal Anti-Aliasing method.

  • Reduced flickering on geometry with high complexity.

  • Supports Dynamic Resolution scaling on console platforms.

  • Runs on any hardware that supports D3D11, D3D12, Vulkan, Metal, PlayStation 5, and Xbox Series S | X.

  • Shaders are optimized specifically for PlayStation 5 and Xbox Series S | X GPU architectures.

In the rendering chain, TSR happens after depth of field and everything that follows is upscaled.

TSR Upsampling with Primary Screen Percentage less than 100

GPU Cost Scalability

You can use Temporal Super Resolution across supported platforms, but you will want to customize the upscaling settings of each platform based on the needs of your project.

Explore the sections below to learn some of the ways you can go about checking TSR in your project and then scaling it appropriately.

Console Variables

The Engine Scalability Settings scale the quality of TSR across all platforms. They use predefined scalability groups from Low to Cinematic. Each group is defined by a set of console variables that affect anti-aliasing.

You can edit the DefaultScalability.ini to configure scalability settings specifically for your project. You can edit, add, and remove console variables from the different scalability quality groups. You can explore the configurable TSR console variables in the editor by opening the console and searching r.TSR.

An example of an adjustment you may want to make for your project is that TSR includes a spatial anti-aliasing algorithm used whenever the history needs to be rejected to avoid stale data that could introduce error to the current frame. Game projects that still want to render at higher resolution, or frame rate, may not need this option since the aliasing seen may not be subject to rejection.

History rejection for TSR is controlled using the console command r.TSR.RejectionAntiAliasingQuality.

Stat GPU

The primary goal of TSR is upscaling. The majority of its GPU work scales based on the resolution it is given.

Open the GPU statistical display from the console using stat GPU. With this open, you can adjust the primary Screen Percentage to see the difference in performance when rendering at 100 percent versus 50% screen percentage, like the examples taken below from the Valley of the Ancients sample project.

~0.79ms at r.ScreenPercentage=100

~0.43ms at r.ScreenPercentage=50

Click image for full size.

Click image for full size.

Cinematic TSR

Temporal Super Resolution includes Cinematic scalability options that sets its resolution to approximately two times larger than the output resolution of when TSR history screen percentage is set to 200.

Automatic View Texture Mip Bias

Screen percentage causes geometry to render at a lower pixel density, which means when temporal upsample requires more texture information from the Surface and Deferred Decal Material Domains to maintain the same output sharpness.

With a Texture Sample node selected in the Material Graph, you can use its Details panel to enable using Automatic View Mip Bias to set whether the texture should be sampled with per-view Mip biasing for sharper output with Temporal Anti-Aliasing methods like TSR and TAAU.

Material Editor Texture Sample Node Details Automatic View Mip Bias checkbox

Automatic View Mip Bias can become problematic for textures with lots of small or high-frequency detail when combined with lower primary screen percentages, as sharper detail can be lost. You can compensate by setting MipValueMode to MipBias to apply some value to the Bias input on the Texture Sample or to the Const Mip Value in the Details panel, or you can opt out of Automatic View Mip Bias completely.

Example of Mip Value on Fence Mesh

Automatic View Mip Bias only happens when either TAAU or TSR is enabled. Other anti-aliasing methods, such as MSAA and FXAA, do not use this setting.

Post Process Materials After TSR

Post Process Materials must select a Blendable Location from where they will be used. The options for After Tonemapping and Replacing the Tonemapper happens after TSR in the rendering chain. This means that they are running at full resolution and are different from the view size. Material Editor Main Material Node Details Blendable Location Selection dropdown

The View Property Expression includes options for View Size and Render Target Size that returns the resolution of the view before TSR happens in the pipeline, even though it's actually happening after TSR. To know what the view size and the texel UV size are after TSR, use the Scene Texture Expression with PostProcessInput0 with the outputs for Size and InvSize.

Material Editor View Property Expression View Size

If you want to recompute the viewport UV from the pixel position, multiply SceneTexture:PostProcessInput0 by ScreenPosition, like the example below.

Material Graph example setup for recomputing the viewport UV from the pixel position.

Hidden Additional GPU Costs of Temporal Upscaling

Temporal Super Resolution and any other temporal upscaler happens in the middle of the post-processing chain of the renderer. This means that passes, such as Motion Blur or Tonemapper, running after TSR are no longer scaling with the primary Screen Percentage. In the absence of a secondary screen percentage with a spatial upscaler, the primary screen percentage runs exactly at the display resolution rather than rendering resolution.

With TSR enabled by default, a lot of effort is focused on reducing the hidden temporal upscaling costs of passes that happen after TSR.

Motion Blur

Motion Blur optimizations combine for 3x motion blur GPU performance cost improvements on PlayStation 5 and Xbox Series X, platforms that always display 2160p backbuffer, even on lower resolution televisions.

  • Increased TSR costs when using stat gpu:

    • TSR cost may increase slightly when using stat gpu when comparing Motion Blur enabled and disabled.

    • When Motion Blur is enabled, TSR takes over its Velocity Flatten pass that normally runs at input resolution. This is controlled using the console command r.MotionBlur.AllowExternalVelocityFlatten and is enabled by default.

    • TSR outputs half-resolution Scene Color to reduce bottlenecks in memory bandwidth that can occur in large directional blur kernels. This is controlled using the console command r.MotionBlur.HalfResInput and is enabled by default.

  • Half-resolution on directional blur:

    • Directional blur happening at display resolution is optimized to automatically run at half-resolution on very large movements. Enabling this feature will reduce VALU cost of motion blur.

    • Enable this optimization using the console command r.MotionBlur.HalfResGather 1.

  • Motion Blur Half and Quarter Resolution:

    • Motion Blur is able to output half or quarter resolution, This is of importance for Guassian and Convolution Bloom, Lens Flare, Eye Adaptation (Auto Exposure), and Local Exposure that all run after Motion Blur.

Supported Platforms

Temporal Super Resolution is available on desktop renderers across all desktop hardware that supports Shader Model 5. Temporal Super Resolution is supported on on the following platforms:

  • Windows D3D11 SM5, D3D12 SM5, D3D12 SM6, and Vulkan SM5

  • Linux Vulkan SM5

  • Mac Metal SM5

  • PlayStation 5 and Xbox Series S | X

TSR's upscaling quality and behavior is strictly identical across all supported platforms. However, TSR has been specifically optimized for AMD RDNA GPUs used in PlayStation 5 and Xbox Series S | X consoles, taking advantage of 16-bit types and packed instructions.

Temporal Anti-Aliasing Upsampling

Temporal Anti-Aliasing Upsampling (or TAAU) samples different locations within each frame and uses past frames to blend samples together to remove and smooth jagged edges.

Without any anti-aliasing.

With Temporal Anti-Aliasing Upsampling

The quality of TAAU is controlled using the console variable r.TemporalAA.Quality. You can choose from the following values:

  • 0: Disables input filtering.

  • 1: Enables input filtering.

  • 2: Enables input filtering with mobility-based anti-ghosting (default)

You can use the Engine Scalability Settings to change the quality of anti-aliasing.

In the rendering chain, TAAU uses the Temporal Upscaler configuration with Screen Percentage by default.

Temporal Anti-Aliasing Upsampling with Primary Screen Percentage less than 100%.

Disabling Temporal Upsampling

To simplify the process of migrating projects from Unreal Engine 4 to Unreal Engine 5, Temporal Upsampling can be disabled to use the Spatial Upscaler for primary Screen Percentage.

To do so, in the UE5 Project Settings under Engine > Rendering > Default Settings, disable the Temporal Upsampling setting.

Rendering Project Settings Temporal Upsampling checkbox

When disabling the setting, the rendering chain for Temporal Anti-Aliasing will look like this:

Spatial and Temporal Upsample with primary screen percentage less than 100%

TAAU-Specific Shader Permutations for Screen Percentage

TAAU includes its own shader permutation for primary Screen Percentage ranges:

  • 50 - 70 renders faster because it uses a smaller LDS tile in memory.

  • 71 - 100 is useful for "normal" DPI rendering on desktop and base consoles.

You can set the primary Screen Percentage in the Level Editor Viewport Options dropdown menu.

Level viewport Options setting the Primary Screen Percentage

Fast Approximate Anti-Aliasing

Fast Approximate Anti-Aliasing (or FXAA) is a spatial-only anti-aliasing technique that is a post-processing effect that uses a high contrast filter to find edges and smooth them by blending (dithering) between the pixel edges. As the name suggests for this technique, it is fast to render and well-suited for low-end devices and desktops.

While this technique is fast to render, the final image can lose fidelity when compared to other anti-aliasing techniques.

Without Anti-Aliasing

With Fast Approximate Anti-Aliasing

The dithering quality of FXAA is controlled using the console variable r.FXAA.Quality. You can set how many samples are used for dithering to remove jagged edges. More samples equals higher fidelity but at increased GPU cost.

Choose from the following:

  • 0: Console

  • 1: PC Medium dithering using 3 samples

  • 2: PC Medium dithering using 5 samples

  • 3: PC Medium dithering using 8 samples

  • 4: PC Low dithering using 12 samples (Default)

  • 5: PC Extreme dithering using 12 samples.

You can also use the Engine Scalability Settings to change the quality of anti-aliasing.

In the spatial and temporal upsampling chain, the Spatial Upscaler happens at the end of the post processing chain for the primary Screen Percentage.

Spatial and Temporal Upsample with primary screen percentage less than 100% for FXAA

Multi-Sample Anti-Aliasing

This anti-aliasing technique is only available on Mobile and Desktop / Console when using the Forward Renderer.

Multi-Sample Anti-Aliasing (or MSAA) is a technique that only smooths parts of the frame. MSAA primarily looks at areas that are issue-prone, like the edges of geometry. Where aliasing problems can occur on edges, MSAA manipulates their color to be between the color of the two pixels that make up the edge. The dithering effect gives the illusion of smoother edges.

Without Anti-Aliasing | Forward Renderer

With Multi-Sampling Anti-Aliasing | Forward Renderer

The quality of MSAA is dependent on the number of samples it uses to blend colors along edges that it determines to have aliasing. More samples equal better visual quality, but at the cost of higher GPU processing.

You can set the number of samples MSAA uses in the Project Settings under the Engine > Rendering > Default Settings with the MSAA Sample Count setting. This setting controls the sample count for desktop / console and mobile. Alternatively, you can use the console variable r.MSAA.Quality to set the quality.

Rendering Project Setting Multi-Sample Anti-Aliasing options.

Choose between 2, 4, and 8 samples.

Drag the slider to increase the number of samples that Multi-Sample Anti-Aliasing uses.

Unlike other anti-aliasing techniques, MSAA is not controlled by the Engine Scalability Settings and must be set using the console variable or its project setting.

In the rendering chain, MSAA primarily resolves geometry aliasing along edges before the Spatial Upscaler. Aliasing from materials, textures, and transparent surfaces are not affected by MSAA.

MSAA plus Spatial Upscaler with primary screen percentage less than 100%.