Forum Discussion

🚨 This forum is archived and read-only. To submit a forum post, please visit our new Developer Forum. 🚨
maxk's avatar
maxk
Honored Guest
10 years ago

Judder/Jitter caused by HMD refresh, possibly Time Warp

Hello everyone!

I recently switched from SKD 0.4.0 (where everything worked fine) to SDK 0.6.0, and now the image displayed in the HMD seems to "jitter", especially during head-rotation.

It looks as if the HMD would display the previous and current frame in alternation, quickly jumping one frame back and forward.

I assumed it could be the rotation of the EyeTexture index, but my logs tell me everything works fine:

...
00004160: calling ovrHmd_GetTrackingState
00004160: binding framebuffer for LEFT eye, TextureSet->CurrentIndex = 0
00004160: binding framebuffer for RIGHT eye, TextureSet->CurrentIndex = 0
00004160: calling ovrHmd_SubmitFrame
00004250: calling ovrHmd_GetTrackingState
00004160: binding framebuffer for LEFT eye, TextureSet->CurrentIndex = 1
00004160: binding framebuffer for RIGHT eye, TextureSet->CurrentIndex = 1
00004250: calling ovrHmd_SubmitFrame
...


The problem only appears related to head motion. If I change the viewport by software (ie. move the virtual camera in my scene) it looks okay.

I was looking at the tracker data, but every single sample that I receive from ovrHmd_GetTrackingState seems smooth. No jittering here.

The problem also doesn't appear in the OculusRoomTiny or other samples as far as I can tell.

I was suspecting timewarp to be the cause of it, but in the 0.6.0 SDK there is no control over timewarp (and other features) any more.

I'm using OpenGL and having an admittedly low framerate (usually around 25fps).
It used to not be a problem until now.

Thank you for any ideas!

3 Replies

  • Judder just means the app is not maintaining 75fps+. if your app is even one frame less (i.e. 74fps) then, due to V-Sync, it will drop to 37.5fps and look juddery. The solution is to optimize your app so you can reach 75fps minimum performance.
  • maxk's avatar
    maxk
    Honored Guest
    Thank you very much for the quick reply!

    Two questions through:

    Then why doesn't it appear when the head motion is virtual?
    We've been rendering at 25fps with previous SDKs and never had a judder.

    We will not always be able to guarantee such a fast rendering time.
    Is there a way to just re-post the previous frame from a different thread?
    Much like in WorldDemo when you press "C" to stop rendering new frames and just re-post the last rendered frame for time-warp, but from a different thread than the rendering thread (because the rendering thread is rendering right now).
    Whenever I try that, Oculus crashes on SubmitFrame.

    [EDIT]:
    [EDIT AGAIN]:
    My bad: was too stupid to see the obvious.
  • I'm experiencing exactly this. Thanks for clearing out what may be the cause. My problem is that we are using our own implementation on openGL and the engine itself has some performance limitations so fps dropping is quite common. The drop is not that high and you would not notice without the jitter/judder.

    Are there any simple procedures I could use to minimize this judder/jitter?