RiftCat 2.7 Beta - Reprojection for Everyone
This was originally planned to be a part 2 of the VRidge 2.6 Streaming Enhanced update but we had to postpone it due to various reasons. Now it's here as its own update!
This update will improve head turning motions on most mobile phones (even those not designed with VR in mind) by utilizing reprojection (also known as TimeWarp in Oculus products).
To test the Beta features, learn how to join Beta channels by reading THIS guide.
Reprojection and reasons behind it.
As some of you might have read, Google killed another project of theirs which is Daydream. This means than there is a constantly rising chance the next mobile devices generation will not be able to launch Daydream apps on which VRidge is based a lot.
We could not allow our users to lose the ability to play PC VR games with their Android devices so we created our own reprojection within VRidge so capable devices can use it even without being Daydream-certified.
What this means is that if your mobile phone supports some specific GPU capabilities it will be able to utilize reprojection - it will provide a completely smooth experience when moving your head in your Cardboard device!
VRidge will now ask for the camera and file read/write privileges on your device (to be able to read and store your VR viewer QR code) as previously Daydream SDK handled that.
Will it work on my device?
As of this Beta release, this feature will work only for Android devices (iOS is in progress). We will deploy support for next devices to the Beta channel as soon as they'll be ready.
Our reprojection implementation has 3 modes, best mode will be selected automatically, depending on GPU capabilities, OS version and so on. Those levels are:
- Synchronous reprojection - Most simple implementation. All rendering work is done on one GPU thread. After app finishes frame, that frame is being warped to screen with offset to cover difference between pc render orientation and current mobile orientation. In this mode frames should be placed correctly, however motion might not feel silky smooth.
- Asynchronous reprojection - This mode separates app rendering loop from VR rendering loop. Because of that we can achieve stable framerate and smooth motion, even if some frames are dropped in transport from PC.
- Asynchronous reprojection with direct rendering - Just like in previous mode, this one preserves constant framerate and smooth motion. However because of rendering directly to screen, latency can be significantly lowered. Typically when frame is rendered, it goes to Android Surface Flinger, which is responsible for composing final image that is displayed on the screen. Because of that composing step and double buffering, in default rendering mode frame is displayed 1-2 vertical syncs after it is rendered. That means about 17-33 milliseconds of latency on standard 60Hz display. With direct mode we are able to render directly to front buffer of display. That allows to skip all composing steps for VR layer, significantly lowering latency. Our current implementation works at 8ms latency on 60Hz display. This mode however requires a lot of modern GPU extensions and is mainly designed for newer phones (we mainly tested it on Samsung Galaxy S20, Samsung Note 10 and Razer Phone).
To check out with which mode your reprojection is working (or not working at all), launch VRidge (Diagnostics). It will display the appropriate information.
How to help us with testing?
When you'll test this Beta release and encounter any issues then please send us detailed logcat to support@riftcat.com with a description of your phone model. You can read about logcat here.
If your issue is directly visible on the screen, then simply send us the screenshots. Any additional info is highly valuable.
Your personal opinion also interests us! What do you think about the update? Give us all your thoughts.