OSVR / OSVR-Core

The core libraries, applications, and plugins of the OSVR software platform.
Apache License 2.0
330 stars 124 forks source link

Client-side prediction implementation #581

Closed maciejcybinski closed 6 years ago

maciejcybinski commented 6 years ago

I have been recently implementing a custom tracking plugin to run with Vive and Meta 2 headsets. Currently I’ve got the tracking data receive and update the HMD pose. I was hoping to use prediction feature to enhance the experience, but I am not sure whether it’s actually working. I have it enabled in Render Manager, but is that it? Should I not somehow pass velocity or acceleration of the tracker? So far I’ve been just using osvrDeviceTrackerSendPoseTimestamped function, so I only pass position and rotation.

This is my configuration of the Render Manager: "prediction": { "enabled": true, "staticDelayMS": 32, "leftEyeDelayMS": 7.5, "rightEyeDelayMS": 0, "localTimeOverride": true }, Unfortunately I couldn’t find any information on that. Anybody used the prediction on HMDs other than HDK?

russell-taylor commented 6 years ago

You can verify that this prediction is having an effect by changing the static delay to 500ms, which will predict ahead half a second and it will be obvious that it is happening due to overshoot.

It is true that velocity (linear and/or angular) must be present in the pose reports and marked as valid for prediction to use other than zero velocity. You can see the code in https://github.com/sensics/OSVR-RenderManager/blob/master/osvr/RenderKit/RenderManagerBase.cpp#L134 for how this is checked.