Next-generation consoles bring with them a myriad of improvements, an assortment of raw spec upgrades (such as more GPU grunt, additional RAM and such things), but new hardware features and optimization is just as important. The Xbox Series X and Xbox Series S both support several new features on their GPUs thanks to using a custom version of AMD’s RDNA 2 graphics architecture, and one of those features is VRS (Variable Rate Shading).
To keep things simple for a moment, before we delve into the nitty-gritty, think of “shading” as the act of drawing in the scene, so characters, level geometry and so on are all drawn by the graphics processor of the system, and naturally, this process happens many times per second. The higher the frame rate, the less time the Xbox Series X (or PC, PS5 or anything else for that matter) to draw each frame. This is measured in milliseconds, with the 33.33ms being for 30FPS, and half this (about 16.6ms) for the target of 60FPS.
Variable Rate Shading (VRS), provides developers with the ability to “shade” the scene at different rates, depending on what’s happening in a specific area. Allowing for finer or coarser detail, and as you would expect, this provides a speed up to rendering of each frame because the system has to do less work from one frame to the next.
The Xbox Series X and Xbox Series S use DirectX 12 Ultimate for its API (and API is what is the game uses to tell the GPU driver what to do), and essentially the DX12 Ultimate spec is fairly identical between PC and Xbox, allowing developers easy porting of code from one platform or the other. Mesh Shaders, VRS, Sampler Feedback and Ray Tracing were added to the spec.
To clear up confusion though, VRS isn’t specific to DX12 Ultimate, or indeed the RDNA 2 architecture. We saw Nvidia launch VRS with what they dubbed as NAS (Nvidia Adaptive Shader) with Wolfenstein, and they even pushed their own version of Mesh Shader too, both of these debuted with the Turing architecture launched in 2018. So for PC at least, Nvidia’s Turing (RTX 20) and Ampere (RTX 30) cards both support it, as does Intel’s Xe graphics architecture too.
The second point of confusion is (and you’ve probably guessed this given I just wrote that Nvidia did it without DX12 Ultimate), VRS isn’t an exclusive feature to DirectX 12, and is available to other APIs, including Vulkan. Vulkan is a really cool API and is multi-vendor and platform agnostic (so works on Windows, Linux, smartphones and even the Nintendo Switch has used it). If you want to know more about Vulkan, I’d suggest you check out one of my interviews with the Khronos Group who create the API.
So with this said, VRS is definitely an incredibly important feature on consoles, and Microsoft’s work with DX12 Ultimate’s implementation really cannot be underestimated here. Recently they detailed their work of enhancing the game engine with VRS and it’s pretty interesting.
With the Hive Busters update, additional graphics modes were made available for the PC version of the game, including Contact Shadows and Screen Space Global Illumination, (along with VRS Tier 2). SSGI and Contact Shows were actually part of the Xbox Series upgrades, but have now been ported to the PC. Screen-Space Global Illumination is essentially software-based Ray Tracing, ie, on either PC or the Xbox, it isn’t using the dedicated RT hardware to run the calculations. By default setting on PC, this uses 8 rays per pixel, though it can also use 4, 16 and 32 too. It’s rather demanding too as you can see here in this benchmark on an RTX 3080 and native 4k.
Tier 1 and tier 2 VRS are fairly similar to one another in their basic concept, the real difference comes down to optimization and granularity. Basically, Tier 1 VRS works by allowing you to specify a shading rate per draw, Tier 2 changes this to a Screen Space Texture. The idea here is to use coarser details where it makes sense. Or, to put it another way, in areas of the image which are undergoing depth of field, motion blur, or otherwise contribute less to the overall quality of the image, they get ‘shaded’ at lower rates, and vice-versa for important areas of detail, such as say characters face, or your car in a racing game (which you’ll be fixated on).
There are a few limitations of VRS though, the lower the resolution, the less impact VRS will have on a scene. So, a 4K resolution target has a greater impact than 1440P, which in turn has a bigger impact than 1080P. According to Microsoft, anything less than 1080P is probably not worth it. In theory, this could mean the Xbox Series X actually does benefit less than the Xbox Series X because of the lower resolution targets of the lower-spec hardware (with the Xbox Series S usually targeting either 1080P or 1440P).
The second limitation of VRS is that it’s entirely solving GPU related issues and not the CPU, so if your console or PC is struggling in terms of CPU workload, then VRS isn’t going to make any difference, indeed it’ll just highlight the CPU limitation more, as the GPU has even less work to do while the CPU is chugging along trying to feed it data.
A compute shader is used to generate a VRS Texture which is then used on the next frame of animation, with the color of edges being used to determine how VRS is applied. It’s here that the quality setting of VRS can be adjusted, with the PC version of Gears 5, you can disable it, or prefer balanced, performance or quality.
All of this comes together to fix a common complaint with Gears Tactics and its own implementation of Variable Rate Shading (again, the team used this as a learning experience) – VRS would affect the image quality quite substantially. This is because the VRS used was fairly coarse, which was more noticeable in some rendering passes. So here, a second VRS pass is used (known as a conservative pass) for things which don’t do so well with coarse (so for example, Screen Space Reflections).
What’s really impressive about this is that the VRS texture generation is done ULTRA quickly, remember how earlier we established that 16.6ms is how long a frame takes to render? This VRS texture generation is accomplished in just under 0.1ms according to the Coalition, on both next-generation Xbox consoles, as well as PC GPUs which are capable of VRS (AMD’s Radeon RX 6000, RTX 30 and RTX 20 and Intel Gen 11 graphics).
For the Xbox Series S and Xbox Series X, there’s dynamic resolution to take into consideration too. This is also a ‘thing’ if you set a minimum FPS target on the PC version of the game too. For example, if we set the minimum FPS to be 90FPS on our test setup (equipped with an RX 6800 XT, though we’ll get to benchmarks soon), the game cannot maintain 90FPS at native 4k with everything set to max, with Contact Shaders and Screen Space Global Illumination being particularly taxing. So, with the FPS target set, the games engine realizes it’s taking more than the 11.1ms per frame it would need to hit to maintain 90fps and adjust the resolution accordingly.
I can also add though that to accomplish this, the resolution does drop frequently below native 4K, and it’s not uncommon to see 1800P, or even lower when scenes are heavier. Fortunately, the fact post-processing is run at native helps a lot here, and really and truly, it’s a significant step up from what the last generation Xbox One could be capable of.
Here are results using the PC version of Gears 5 with different internal resolution targets, of 4K, 1800P and 1600P to give you some insight into how the lower resolution affects performance. Again, we’re using the Nvidia GeForce RTX 3080 for these performance numbers.
The Xbox Series X and Xbox Series S use this same technique, with the in-game resolution often being less than 4K, but then is upsampled. Gears 5 also uses Unreal Engine 4, and so post-processing runs at full resolution thanks to UE’s Temporal Upscaling, even if the native resolution has dropped in a specific frame. This does lead to another complexity when running Variable Rate Shading though, with a compute shader basically resizing the VRS Texture according to the ‘new’ resolution of the frame. According to the folks over at the Coalition, this is done in about 0.02ms on both Xbox Series X and S.
VRS does a pass with coarse shading, and then dynamic resolution decides if scaling is needed to maintain the frame time based on the drawing of the previous frame. According to Microsoft, this means that thanks to the work of VRS, an average of a 10 percent higher dynamic resolution is achieved, or in some cases.
So, how about testing, then? Well, I decided to run the results on two systems – an AMD Radeon RX 6800 XT (thanks AMD for providing the card) and a Ryzen 9 5950X processor, plonked on a B550 MEG motherboard (thanks to MSI) and finally a PCI-E 4 NVMe SSD (thanks to XPG for the SSD and RAM).
The second system is an Intel I9-10900K (provided by Intel) and an ASUS ROG Maximus Extreme XII motherboard, the GPU here being a Founders Edition Nvidia GeForce RTX 3080 (thanks to Nvidia for the graphics card).
We’ll start out with the synthetic tests of 3DMark’s Variable Rate Shading test, and this benchmark is specifically designed to test VRS. The results here are what could be described as a ‘best case’ scenario, to the point where it is an unrealistic portrayal of how VRS will affect titles in the real world. But the performance numbers here are super interesting. Both Nvidia’s Ampere architecture and AMD’s RDNA 2 architecture sport rather large improvements thanks to VRS.
Next, Gears 5. Again, Gears 5 is a very demanding title on the GPU, particularly with Contact Shadows and the like enabled. The Xbox version (which we’ll look at in a moment) also benefits from dynamic resolution. This allows the GPU of the Xbox to do less work, but the PC version we’re testing I’ve disabled this in most of our tests. Though in this current bit of gameplay, you can see how setting a Variable Frame Rate of 90FPS allows our Radeon RX 6800 XT here to maintain much higher frame rates, albeit reducing the resolution to do so.
Gears 5 on PC does look amazing, and it’s hard to deny that the game doesn’t benefit heavily from the usage of Variable Rate Shading on both Nvidia and AMD’s architectures. Variable Rate Shading at lower resolutions barely makes any difference at all here in terms of a percent gain, and this trend is something we’ll see continue across RDNA 2 and Ampere, and across different games.
Gears Tactics has three settings for VRS, disabled, on and performance. The Radeon RX 6800 XT lacked the “performance” option here due to support, so we’re testing it with just on and off, with the RTX 3080 having all three. A rather nice speed up again for Gears Tactics.
As we discussed earlier, the Coalition’s original work on implementing Variable Rate Shading in Gears Tactics had served as a springboard for their later VRS Tier 2 work.
Finally, on to the Xbox Series X tests, and Gears 5 is a nice showcase for what Microsoft can squeeze out of the Xbox Series X this early on. Of course, the team essentially took the base PC game running at highest settings, made a few tweaks and then added features such as Contact Shadows (which they were later updated in the PC builds too). The few comparisons on-screen show the Xbox Series X version stacks up pretty damn well to the PC builds, and in our frame-rate tests, the game ‘mostly’ sticks to a 60 FPS lock during single player. There are a few times during loading that this isn’t the case though. Long story short, this is just the legacy of being built on older hardware and doesn’t seem to be GPU or CPU related.
So then, we’re left with an intriguing situation moving forward. The Xbox Series of consoles is still pretty new, and of course, it’ll take developers time to fully leverage the hardware – just like with every console generation.
I often see a lot of criticism regarding the ‘native’ resolution a title is running at, and the reality is that I think that native resolution isn’t the important yardstick anymore. Quality of the pixels and smart usage of them is. As I detailed more in my Native Resolution is Dead video, upsampling thanks to Machine Learning is so accurate with bringing a lower native resolution image to the same quality as say, 4K – that you end up with much better visuals by having that additional grunt be used to improve other graphical assets.
In other words, it’s better to generate a really impressive visual image at a lower resolution, then upsample to 4K, than generate a native 4K image but in the process have to turn down visual quality.