Flexible image quality with Variable Rate Shading

A constant tug-of-war for both game developers and computer users is the one between the best possible image quality, via resolution and graphic settings, and the best possible performance. There are a myriad of tricks and solutions to achieve a good balance, with everything from dynamic resolution scaling to anti-aliasing techniques. A vendor-independent technology that finds its way into everything from computers to game consoles is something called Variable Rate Shading (VRS).

Image quality with the user in focus

A basic principle of how graphics are displayed is that the shader units of the graphics part are responsible for calculating the color of the pixels to be displayed on a connected screen. An image to be colored at a resolution of 1,920 × 1,080 pixels requires the graphics card’s shader devices to calculate the color for just under 2.1 million pixels. However, a developer who colors these pixels creates something called shading rate, which are quality settings for blocks of pixels.

3dmark with the VRS function switched off.

3dmark-vrs-feature-test-screenshot-vrs-on.jpg

3dmark with the VRS function activated.

3dmark-vrs-feature-test-screenshot-vrs-visualizer.jpg

Here, the blue part of the scene with low quality, the green part with medium quality and the red part with high image quality are rendered.

3dmark-vrs-feature-tier2-vrs-on.jpg

The scene contains shaded parts that do not need the same level of detail as the rest of the image.

3dmark-vrs-feature-tier2-visualizer.jpg

Here, dark color tones illustrate the parts that are rendered with lower image quality.

Higher shading rate leads to better image quality, but also greater strain on the hardware and thus performance. Traditionally, this degree of quality is applied to all pixels on the screen, even those that are similar to each other or located on the edge of the player’s field of view. The fact that not all pixels are equal is the basis for Variable Rate Shading (VRS), a technology for flexible image quality control that is part of Microsoft’s developer interface DirectX 12.

Read This Now:   Intel graphics cards for games are manufactured at TSMC

With VRS, developers get the opportunity to control the balance between image quality and performance by, for example, lowering shading rate for pixels that are in shadow or dark areas on the periphery of the image, but also to raise shading rate for the parts of the image that are visible to the player. DirectX 12 gives developers access to different levels of VRS, where the level depends on the support in the hardware.

Different VRS levels

With Tier 1, the developer can define quality levels for a draw, which for example can be about the background image in a scene where the background image quality is not as important as the foreground. Tier 1 is supported by all modern graphics cards. With Tier 2, the developer can instead define different quality levels per graphics call, which in the same example makes it possible to increase the quality level in the parts of the background that are more important than others. Tier 2 requires specific hardware support.


The hardware that supports Tier 2 levels can utilize two different variants of the technology – screenspace image and Per-primitive. In short, go screenspace image in that the developer specifies a reference image that is used to determine which parts of a scene are important and less important. In an FPS game, the technology can be used to increase the quality level around the mouse pointer, and lower the level in the periphery.

The technique Per-primitive refers to the fact that the developer can control the image quality at a fine mesh level, more specifically per triangle to be drawn. For example, it can be used to control the quality level according to the depth of the image. In a scene that uses depth-of-field Per-primitive be used to lower shader rate for a certain part of the triangles that are “further back” in the image.

The arrangements for shader rate structures

There are several different structures for shader ratelevels developers can choose to implement. The basic one is the 1 × 1 level and here the different pixels are rendered unchanged, which gives the best image quality but also the highest load on the hardware. With 2 × 2, the block consists of two pixels vertically and horizontally, which loads the hardware less while not deviating too much in terms of image quality.

According to the same layout, 4 × 4 means that shader processors calculate pixel blocks that are four pixels large in height and width. It provides additional performance gains, with further deterioration in image quality. Developers can also choose a combination of these layouts, where 2 × 1 or 4 × 2 and vice versa strike a balance between the properties of the different levels they combine. The different quality levels can also be mixed in different parts of the image.

Nvidia_VRS_grids_car_002.jpg

Nvidia illustrates how different combinations of quality levels can be used with VRS.

Applications in games

Early games with VRS support include Civilization VI and Wolfenstein II: The New Colossus. Microsoft is demonstrating the benefits of VRS support in the form of Civilization VI, where developers Firaxis have experimented with both Tier 1 and Tier 2 levels. The developer started with Tier 1, where large graphic objects such as the sea were rendered with a lower quality level (2 × 2) and small objects such as vehicles, buildings and the interface were rendered with a normal quality level (1 × 1).

MS_DX12_VRS_Tier1.jpg

Tier 1 level of VRS is used in Civilization VI, VRS is enabled for the left half of the image.

With VRS Tier 1, Firaxis states that a 20 percent higher image update is achieved without clearly deteriorating image quality. In an illustration, the company also shows an image where one half of a scene in Civilization VI has been rendered with the Tier 2 level and screenspace imagetechnique. Here, the quality level for the important parts of the image was raised, at the same time as a performance improvement of 14 percent was noted against a pure 1 × 1 mode.

MS_DX12_VRS-Tier-2-ssimage.jpg

An illustration of how parts of the image are rendered with lower (blue color) and higher (red color) shader rate.

Firaxis also illustrates how the technology is used to select which parts of the image are allowed to present height and lower quality levels in the form of a visualization image. In this, parts that have a reduced quality level (2 × 2) are marked in blue, while parts with a high quality level (1 × 1) are marked in red.

Read This Now:   MSI borrows roasting design with Geforce RTX 3090 Aero

Status of VRS in 2020

In the spring of 2020, hardware support for VRS Tier 2 will be available on the market in the form of Nvidia’s Turing architecture and Intel’s integrated graphics architectures from the Gen11 graphics in the Ice Lake processors.

The technology is also expected to take place in Intel’s upcoming Xe architecture. For AMD, support for VRS Tier 2 will be added with the architecture Radeon DNA 2 (RDNA 2), which will take place in standalone graphics cards and in the game consoles Playstation 5 and Xbox Series X at the end of 2020.

Variable Rate Shading is currently supported in the DirectX 11, DirectX 12, Vulkan and OpenGL interfaces, which means that the technology is supported on a broad front as soon as companies have added support for Tier 2 at the hardware level. With the help of VRS, both computers and game consoles will thus be able to make better use of available computing power to provide good image quality where it is important from the viewer’s point of view.

Are there any other techniques related to game development you want to read more about? Feel free to leave suggestions in the comments!


Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /home/gamefeve/bitcoinminershashrate.com/wp-includes/functions.php on line 5420

Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /home/gamefeve/bitcoinminershashrate.com/wp-includes/functions.php on line 5420