TA Toolbox Home / TA Glossary

Variable Rate Shading (VRS)

2026-08-27

What is Variable Rate Shading

Variable Rate Shading (VRS) is a graphics rendering optimization technique that allows developers to control the pixel shading frequency in different areas of the screen. In traditional rendering, each pixel executes the pixel shader once (shading rate 1x1); VRS can combine multiple pixels into one shading unit, i.e., lower shading rate (e.g., 2x2 means a 2x2 pixel block is shaded once), thus reducing computation and improving frame rate.

Principles and Types

Shading Rate Definition

Shading rate refers to the number of pixels covered by one fragment shader invocation. Examples:

  • 1x1: each pixel shaded once (default).
  • 1x2 or 2x1: two pixels share one shading invocation.
  • 2x2: four pixels share one shading invocation.
  • 4x4, etc.: even lower rates.

VRS Implementation Levels

Shading rates can be set via:

  • **Per-Draw**: Set a uniform shading rate for an entire draw call.
  • **Per-Primitive**: Set in geometry or mesh shaders based on primitive attributes (e.g., distance).
  • **Screen-Space Image**: Use a texture to specify shading rates for screen regions (most flexible).
  • **Combiner**: Combine the above sources, taking the coarsest granularity.

Hardware Support

VRS is a feature of DirectX 12 Ultimate and Vulkan 1.2, requiring newer GPUs (NVIDIA Turing, AMD RDNA 2, Intel Xe, etc.).

Application Scenarios

Reduce Shading Rate in Peripheral Areas

Human eyes are sensitive to detail in the center of vision but less so at the edges. Screen-space images can reduce shading rate at screen edges without noticeable quality loss.

Reduce Shading Rate for Moving Objects

Fast-moving objects are less likely to be scrutinized for detail; lower shading rates can be applied.

Dark or Low-Contrast Areas

In shadows or flat color regions, lower shading rates are less noticeable.

Foveated Rendering in VR

In VR, with eye tracking, use high shading rate at the user's gaze point and greatly reduce it in the periphery, significantly improving performance.

Advantages and Challenges

**Advantages**:

  • Directly reduces pixel shader invocations, lowering GPU load.
  • Flexible and controllable for region-specific optimization.
  • Complements other optimization techniques (LOD, culling).

**Challenges**:

  • Lower shading rates may cause aliasing, blur, or detail loss.
  • Requires careful design of shading rate distribution to avoid noticeable quality degradation.
  • Limited support on some hardware.

Practical Tips

  • Start with per-draw VRS, reducing shading rate for distant or small objects.
  • Use screen-space images for foveated rendering in VR, maximum benefit.
  • Avoid reducing shading rate on UI, text, or important edges.
  • Combine with temporal anti-aliasing (TAA) to mitigate quality loss.

Future Trends

VRS is an important direction in graphics API evolution, forming a foundation for modern rendering optimization alongside mesh shaders and sampler feedback. Future developments may include finer-grained control, such as content-adaptive VRS using machine learning to predict optimal shading rate distribution.

FAQ

How much performance improvement can VRS provide?

Performance gains depend on the degree of shading rate reduction and scene content. In VR foveated rendering, over 30% improvement; in traditional games, typically 10-20% with minimal quality loss.

What is the difference between VRS and DLSS/FSR?

VRS reduces actual shading work without changing resolution; DLSS/FSR render at lower resolution and upscale. Both improve performance but via different mechanisms, and can be combined.

Which GPUs support VRS?

NVIDIA Turing (RTX 20 series and GTX 16 series) and later, AMD RDNA 2 (RX 6000 series) and later, Intel Xe series, etc.

Does VRS cause image quality degradation?

If used properly, reducing shading in less sensitive areas has minimal subjective impact. Improper use can cause noticeable aliasing or detail loss.

How to enable VRS in game engines?

Unity and Unreal engines provide VRS support through rendering settings or plugins. Refer to engine documentation and ensure hardware and API support.