Jump to content

Judder issues with Vive Focus(Render a still picture)


Recommended Posts

Hi everyone,

    I used vive focus to render a still picture (that is, a picture) before my eyes. It can be displayed. But when I swing my head from side to side or up and down, the Judder occurs.

    I tried to guess that it might be due to the head pose. So I used higher frequencies to update the HMD pose, and it worked(frequency is lower), but Judder still did.


Here is my rendering process:

In the render thread:...while(true){
if (app->handleInput())
if (

In the update pose thread:
WVR_DevicePosePair_t mVRDevicePairs[WVR_DEVICE_COUNT_LEVEL_1];
WVR_GetSyncPose(WVR_PoseOriginModel_OriginOnHead, mVRDevicePairs, WVR_DEVICE_COUNT_LEVEL_1);

bool MainApplication::renderFrame() {
if (!gMultiview) {
mIndexLeft = static_cast<uint32_t>(WVR_GetAvailableTextureIndex(mLeftEyeQ));
mIndexRight = static_cast<uint32_t>(WVR_GetAvailableTextureIndex(mRightEyeQ));
// for now as fast as possible
if (!gMultiview) {
// Left eye
WVR_TextureParams_t leftEyeTexture = WVR_GetTexture(mLeftEyeQ, mIndexLeft);
WVR_SubmitError e;
updateHMDMatrixPose(); // update hmd pose to reduce judder
e = WVR_SubmitFrame(WVR_Eye_Left, &leftEyeTexture, &(mVRDevicePairs[0].pose)));
if (e != WVR_SubmitError_None) return true;

// Right eye
WVR_TextureParams_t rightEyeTexture = WVR_GetTexture(mRightEyeQ, mIndexRight);
e = WVR_SubmitFrame(WVR_Eye_Right, &rightEyeTexture, &(mVRDevicePairs[0].pose)))
if (e != WVR_SubmitError_None) return true;
// Clear
// We want to make sure the glFinish waits for the entire present to complete, not just the submission
// of the command. So, we do a clear here right here so the glFinish will wait fully for the swap.
glClearColor(0, 0, 0, 1);
return false;

 In the rendering process, I did not pass in HMDPoseMatrix to shader, so my image should be unrelated to HMDPose.

So what else could lead to Judder?


Here are the specifications of the various software tools I'm using:


Developer Kit Vive Focus Updated to 1.93.1400.2

Wave SDK Version is 3.0.2

Android Native SDK

Link to comment
Share on other sites

Hi  ,


I checked fps, my app is about 75fps.  But the Judder also occurs.

Yes, I really want to show still image(or video) always in front of you head even pose change. I tried to look at the Overlay solution, but it might not be work for me. Because I need some differences between the left and right eye images. The Overlay method is always the same imgae in the center of the two screens.Can I use other methods to render this as an Overlay way?




Link to comment
Share on other sites

Hi  ,


It seems if you rotate the head more quickly, the judder may be more obvious.  If rotates slowly, you will not see judder. Am I right?

I am afraid there is no convenient way for your requirement so far.

Could you try to submit frame with pose argument which predicted 1.5X frame time (ex. Focus 1.5X13.33 ) via WVR GetPoseState function? It may reduce the judder you met.

We will plan to support using overlay with different eyes or other way to handle your case in the future.


Link to comment
Share on other sites

  • 2 weeks later...

Hi @Tony PH Lin , 

I am sorry to reply you now. I have tried your solution and have done a lot of testing. But it doesn't work. Judder seems to happen randomly


I want to try to add VIVE Focus option for ALVR ( https://github.com/polygraphene/ALVR ). So I need to display the captured video stream in VIVE FOCUS. ALVR works great in other helmets (Gear VR and Oculus Go). However, in VIVE Focus, if the video stream produces some frame loss, the picture in the helmet will produce some jitter, which will affect the experience. I don't know how to solve this problem.Or is this problem caused by dropped frames(Decode)?


Thank you for your generous assistance.


Link to comment
Share on other sites


This topic is now archived and is closed to further replies.

  • Create New...