Valve Software updated SteamVR on Wednesday to include three general changes and fixes, improvements and additions to Compositor, and around 10 HTC Vive-specific updates, feature additions, and so on. However, the big news with the update could be the added support for asynchronous reprojection for the entire SteamVR community after first appearing in a beta in late October.
If you are not familiar with this tech, consider that rendering a frame for each eye at an undetected rate multiple times a second to suspend reality takes a lot of computing power. If the base hardware cannot handle the output, then the framerate drops and the illusion breaks. The whole point of virtual reality is to suspend disbelief and jump into a realm or scenario that is currently impossible or unobtainable, and a broken framerate can ruin that.
However, virtual reality requires the imagery to be rendered at 90 frames per second for each eye to prevent visual discomfort (aka motion sickness). Keep in mind that not only is the connected PC working to render the specific environment, but also keeping track of the user’s head to alter that environment to match the user’s line of sight. In other words, there is a lot of computational work going on behind the scenes.
But some hardware configurations struggle to keep that pace, dropping frames each second like a child running with an overflowing basket on Halloween. To fill the framerate holes created by underpowered hardware and retain the 90 FPS rate, asynchronous reprojection grabs an older, already-used frame and alters it to match the current head-tracking data before rendering it on the screen if the rate dips below 90 frames per second.
Previously, Valve Software implemented interleaved reprojection into SteamVR as a temporary fix, which limited the base rendering to 45 frames per second and re-rendered every other frame to meet the 90 frames per second requirement. This worked great in regard to keeping up with the user’s head tracking but had a negative impact in performance regarding animations and positional movement.
Thus, the difference between the two is that interleaved is locked and automatically re-renders every other frame whereas asynchronous alters an old frame to match the current head data on-the-fly when the framerate dips. The result of the latter is a smooth and comfortable experience overall given that frame rates will quickly fluctuate whether the PC meets the minimum requirements or not.
The new support for asynchronous reprojection currently only works on graphics chips provided by Nvidia using driver version 372.54 or newer; AMD graphics chips are not compatible with this version. The feature can also be manually disabled if needed in the Performance section of the SteamVR settings by unchecking “Allow asynchronous reproduction.”
Here are additional notes regarding the asynchronous reprojection feature provided by Valve:
- Current status is listed in the lower left section of SteamVR Settings (Async Reprojection On/Off). If you have “Allow asynchronous reprojection” checked, but are still seeing “Async Reprojection Off” on the left, this means it is not supported on your current setup — see above for requirements.
- The frame timing graph has been updated to show the number of times each frame has been presented (white line in the stacked CPU graph) and the number of times each frame has been reprojected to a different Vsync than originally rendered for (red line on the stacked GPU graph).
- “Allow interleaved reprojection” checkbox still applies in Async mode. It controls whether the application is dropped to 45Hz when not making framerate, or if it is allowed to get further and further behind until a frame winds up getting presented twice. This leads to less positional judder, but that judder is more random (which tends to be more annoying).