More Complications – Matching Experienced Performance
It’s not quite that simple though, there are more complications involving the experience of using a VR headset compared to the performance data we showed you on the previous page. The most interesting example we can show revolves around the ability for OpenVR to warp displayed frames when an 11.1ms frame time is missed. The idea behind frame warp is amazing: if you don’t have a NEW frame to show when you come to a 90Hz refresh cycle on the HMD, use the previous frame and shift it slightly (based on speed and location data) in the direction of head movement to simulate where the next frame should be.
This has a couple of interesting side effects.
- If you look at the right place at the right time, you can see an effect called “pull in” where the side of the display shows encroaching blackness as the warp moves the frame on the display without new game data to show.
- The user can effectively experience two frame rates – the refresh rate of the screen with warping to smooth out rotation and the frame rate of the rendered objects in the game scene itself.
Let’s focus on the second item above.
When we use The Gallery on a GTX 970 with the High image quality preset, we can force the game to run at a 45 FPS render rate. If you do something simple like take your avatar hands and move them back and forth in front of your face while looking at the fire, you will see a 45 FPS animation. For those of us that are used to looking for these kinds of image issues, it’s pretty obvious what we were seeing. If you make the same hand motions in front of your face, but look up at the sky instead, where the game is reporting a 90 FPS performance rate, the animation is significantly smoother.
However, if you are in the 45 FPS scenario, and waving your hands in front of your view, if you also rotate your head on a static axis to the left or right, THAT movement will appear to be running at a higher frame rate. That is due to the warp capability of the OpenVR (and Oculus VR) system to slightly move the entire image on the headset with a 90Hz interval frame is missed. The result is you’ll see what appears to be 90 FPS motion to the left or right (or up or down) while the hands on the screen will be running at 45 FPS effectively.
We created video to show you this phenomenon. Using 960 FPS capture on a Sony camera, we have slowed down the animation to demonstrate the effect we are seeing. What you should look for is that with the GTX 970, the hand rotation animation will update a slower rate than the rest of the environment you can see will update, on order of 1:2.
We have zoomed in and slowed things down here to help show you the effect, and removed 9 frames of black between each frame of animation (these screens have AMAZINGLY low pixel persistence). I think the result speaks for itself. Obviously the idea of artificially creating this scenario with hands waving erratically in the air is artificial, but you would experience this same effect in any situation where the frame rate of the game is running at 45 FPS and you are interacting with the world rather than just looking around.
As a real world example, imagine a huge, 100-in monitor running on your desk, playing a game at 45 FPS. If you move your avatar's hands in the game, you'll see a 45 FPS animation. But if you move your physical, real-world head from side to side while looking at your monitor, THAT movement will be much smoother. That's the effect we are describing.
How is it possible to get the effect of a 90 FPS rotation while the game is running at 45 FPS? Warp. Timewarp is the ability for the SteamVR system to move the frame on the HMD slightly without input from the game if a new frame has not reached the display at the specified 90Hz / 11.1ms time.
And we can show it in action. Again, using a fast frame rate capture, this time a 240 FPS GoPro, we were able to see timewarp working as we spin the HTC Vive to the right on the GTX 970 test system in a 45 FPS environment (that trusty campfire). (Note this video looks more flickery because of the GoPro frame rate.)
If you watch closely you can see black “pull in” effect of timewarp – because there are no new pixels from the game engine to show in that location as the frame is moved with the direction of head movement. As the game catches up that pull in effect is corrected. As we are in static 45 FPS location for testing, that pattern repeats.
This is just the beginning…
The technologies that goes into building and providing a world class VR experience with the HTC Vive and SteamVR are astounding. The more we dive into the hardware and the software, the more impressed I become. But that doesn’t mean we aren’t going to be pushing all parties involved to improve things through performance evaluation and experiential testing.
I’d like to thank Cloudhead games for working with me on this project with The Gallery. But it is important for readers and other media out there to recognize that not all games will be able to be profiled in this manner. The configuration of the companion viewport seems to vary from game to game and from platform to platform. And though we have the SteamVR performance heuristic tool set to play around with, Oculus has not provided anything like it (that I am aware of).
We still have a lot of work to do as a community. Hardware vendors, software engineers, analysts, consumers – all of us. I’m looking forward to the on-going discussion and to putting in many more weeks of work to find the best way to analyze and measure VR performance.
Seems like a proper test rig
Seems like a proper test rig for VR will have to include a head on a stick with fast cameras for eyes and microphones in the ears. Then the “stick” will need six axis motion control, three for neck and at least three for torso, to provide repeatable movements to test tracking and that timewarp you described. And then you’ll need a pair of robot hands for games that track the controllers as well. Otherwise you risk arguments over whether Reviewer L moves faster then Reviewer P, or can’t bend over enough to demonstrate the glitch that others have reported.
Maybe NASA has a spare Robonaut to loan you.
Ryan – will any of the
Ryan – will any of the headsets ‘fall back’ to 75 hz (like the Oculus DK2) before switching to a Vsync of 1/2 (and i’m assuming applying something like Async Timewarp) as your first couple of graphs show?
This is a great beginning.. looking forward to hearing about how USB controllers and hubs affect latency as well in the future..
Okay, when does the
Okay, when does the GSYNC/FreeSync Vive come out?
The Vive will do the
The Vive will do the half-framerate drop. The Rift instead keeps timewarp running ALL the time, without changing the framerate. This means that EVERY frame gets warped before display, so every frame has the lowest possible orientation latency (effectively the hardware latency). If a frame does not complete rendering in time, the previous frame is warped in its place. By not messing with the rendered framerate, you avoid some odd bugs some developers are experiencing with SteamVR (certain rendertime values will suddenly change when they should otherwise be static, for example).
Keep up the good work pcper,
Keep up the good work pcper, we need you guys to keep them honest! Very interesting stuff this.
Agree keep on this as I
Agree keep on this as I havent come across any other techsite that is doing this deep analysis!
Awesome work Ryan & Allen.
Awesome work Ryan & Allen. Thanks for the great info. Keep the VR benchmarks coming.
I remember during the
I remember during the kickstarter, that Oculus had a “latency” module that you can place within the socket of one of the lenses. Unsure if it is available for the newer version. And I think games would have to implement that feature, where as the unit is more for developers….
And unsure how useful would the latency results would be…
Glad it was you guys that
Glad it was you guys that released a methodology to “benchmarking” VR. When you try this out later could you include dual gpu configurations would that be measurable in the current methodology?
Are you planning to discuss with the developers to have a dev/reviewer mode for the SDK to allow you to benchmark ideally and easily as possible?
Very interested to see how
Very interested to see how sli/crossfire play in, hope to see some benchmarks of some older cards especially ones just outside of the minimum requirements (r9 280x/gtx 960, etc)
Keep up the great work!