DICE: Our Passion for Ray Tracing Burns Hot, Many Optimizations Coming to BFV from NVIDIA and Us
DICE's Battlefield V officially launched yesterday, though it was available earlier this month through various subscriptions and early access editions. It's the first game to support real-time ray tracing (for reflections, in this case) via NVIDIA RTX.
Keith tested the GeForce RTX 2080 and RTX 2080Ti graphics cards with ray tracing enabled in Battlefield V and as expected, the performance took a significant hit. However, the developers have promised things will improve over time.
In an interview with Eurogamer's Digital Foundry, Yasin Uludağ (Software Engineer, Rendering at EA DICE) stated that the developers are very passionate about ray tracing and several optimizations are coming from both DICE and NVIDIA.
People can expect us to keep improving our ray tracing as time goes, as both we at DICE and Nvidia have a bunch of optimisations coming in from the engine side and driver side and we are far from done. We have specialists from Nvidia and DICE working on our issues as we speak. From now on, it's only going to get better, and we have more data now too since the game released. By the time people read this, many of the improvements mentioned will already have been completed. As you mention Quake and Crysis - Working on ray tracing and being the first out with it in this way is a privilege. We feel super-lucky to be part of this transition in the industry and we will do everything we can to deliver the best experience possible. Rest assured, our passion for ray tracing is burning hot!
Uludağ then delved into a technical explanation of some of the optimizations planned for Battlefield V.
One of the optimisations that is built into the BVHs are our use of “overlapped” compute - multiple compute shaders running in parallel. This is not the same thing as async compute or simultaneous compute. It just means you can run multiple compute shaders in parallel. However, there is an implicit barrier injected by the driver that prevents these shaders running in parallel when we record our command lists in parallel for BVH building. This will be fixed in the future and we can expect quite a bit of performance here since it removes sync points and wait-for-idles on the GPU.
We also plan on running BVH building using simultaneous compute during the G-Buffer generation phase, allowing ray tracing to start much earlier in the frame, and the G-Buffer pass. Nsight traces shows that this can be a big benefit. This will be done in the future.
Another optimisation we have in the pipe and that almost made launch was a hybrid ray trace/ray march system. This hybrid ray marcher creates a mip map on the entire depth buffer using a MIN filter. This means that every level takes the closest depth in 2x2 regions and keeps going all the way to the lowest mip map. Because this uses a so-called min filter, you know you can skip an entire region on the screen while traversing.
With this, ray binning then accelerates the hybrid ray traverser tremendously because rays are fetched from the same pixels down the same mip map thereby having super efficient cache utilisation. If your ray gets stuck behind objects as you find in classic screen-space reflections, this system then promotes the ray to become a ray trace/world space ray and continue from the failure point. We also get quality wins here as decals and grass strands will now be in reflections.
We have optimised the denoiser as well so it runs faster and we are also working on optimisations for our compute passes and filters that run throughout the ray tracing implementation.