Characterizing the Behavior of Asynchronous Spacewarp
Naturally, it’s going to become a lot easier for us to include VR data in our graphics card reviews. We’ll also be able to publish performance break-downs of new VR games. But we’re going to use our first spin with FCAT VR to run a handful of experiments and hopefully make some comparisons that haven’t been made before.
First up: what does asynchronous spacewarp’s contribution look like, charted out?
When Oculus added ASW support to its runtime, the company enabled four different rendering modes. They include:
- ASW disabled (use the standard rendering mode)
- Forced 45 Hz rendering with ASW disabled, most likely resulting in judder
- Forced 45 Hz rendering with ASW enabled, highlighting the effect of ASW compared to the previous mode
- ASW enabled (ASW automatically turns on and off, depending on whether it’s needed)
For the sake of consistency, we’re sticking with the same 80-second sequence from Chronos at Epic detail settings. The previous page showed Nvidia’s GeForce GTX 970 getting hammered pretty hard by this test, so we’ll drop a GTX 980 into our test system for a bit more performance.
This is what you would have seen prior to the implementation of asynchronous spacewarp. A GeForce GTX 980 is fast enough to deliver 5695 new frames (represented by the green line’s time spent at 11ms), but it drops another 1686 frames when the workload becomes too demanding. Our hardware capture illustrates this with a jump up to 22ms and a dip back to 11ms. Do that over and over in a tight enough interval, and you get the solid-looking blocks of green seen in our frame time chart.
Forcing the application to render at 45 Hz and leaving ASW off yields predicable results: exactly every other frame is dropped. This mode’s utility is tied to what you see on-screen toggling between ASW on and off at 45 Hz.
Switching ASW on and leaving the renderer at 45 Hz gives us a fairly similar frame time over time graph. However, Nvidia’s VR Analyzer tool recognizes that, instead of dropping every other frame, the runtime is filling those gaps with synthesized frames. The difference in perceived smoothness is significant.
Now, depending on the application, ASW can cause its own artifacts (outlined in this Oculus blog post), so you shouldn't look at a chart filled with synthesized frames and assume the experience is indistinguishable from 90 real frames per second. Because there’s a lot of side-scrolling in Chronos, disocclusion becomes an issue as the protagonist runs across a scene. The screenshot on the left is a real frame from our video capture. The one on the right is extrapolated via ASW. The warped shield, discontinuous sword, and partially missing hair are easy enough to see in a still. Less obvious is the warping and bending that goes on behind the character as ASW tries to guess what he’s exposing in the background. These artifacts are certainly preferable to dropped frames, but they’re readily apparent during game play.
A GeForce GTX 980 is clearly faster than the 970, but at no point during our run does it render at 90 FPS. The VR Analyzer tool reports just under 64 unconstrained frames per second, which the hardware capture shows on-screen as 45 FPS. In this example, ASW enabled in its default state looks a lot like ASW enabled with the renderer forced to 45 Hz. A more hand-picked example might have come from a faster card or less taxing quality settings. In either case, we’d see ASW switch off when the runtime determines it’s not needed. Don’t worry, though—we have a lot more data to illustrate this.