Forum Discussion
bteitler
10 years agoHonored Guest
Timewarp broken / asymmetric in 0.4.4 and 0.5
Both 0.4.4 and 0.5 (and possibly 0.4.3, I haven't tested) have horrible asymmetric prediction artifacts between left and right eye when I have time-warp enabled. It appears as if the left eye is being predicted much further than the right eye, which causes discomfort during motion. If I disable time-warp, this artifact goes away. I use extended mode (direct mode seems to have other problems on multiple machines for me, mostly screen tearing / judder). This problem has been replicated on multiple machines (Windows 7 + Titan Black, Windows 7 + GTX 760, Windows 7 + GTX 860M). The problem seems to occur regardless of scene complexity / render time. I'm using Unity 4.6.4. Anyone have any suggestions on how to fix this?
I'd just disable time-warp, but since there is no prediction setting in the latest SDKs, I'm worried that this will also cause sickness due to latency. Is the runtime doing any prediction behind the scenes if time-warp is disabled? If not, can someone provide a code snippet / location to add it back in to either 0.4.4 or 0.5?
Thanks
I'd just disable time-warp, but since there is no prediction setting in the latest SDKs, I'm worried that this will also cause sickness due to latency. Is the runtime doing any prediction behind the scenes if time-warp is disabled? If not, can someone provide a code snippet / location to add it back in to either 0.4.4 or 0.5?
Thanks
9 Replies
Replies have been turned off for this discussion
- bteitlerHonored GuestProblem is also there is direct mode.
- drashHeroic ExplorerWhat you're describing sounds like the occasional problem I saw pre-0.4.4 where the SDK's vsync would be on, but its frame timing is off resulting in a vertical tear somewhere. What you see on the left side of the tear will be slightly out of sync with whatever is on the right side of the tear, and is quite uncomfortable to look at. If that tear happens to be in the middle between the two eyes, you might not notice the tearing but you'll feel pretty bad as you look around. Whenever this happened, I would simply toggle SDK vsync off and then back on, and the frame timing would be correct once again.
Having said all that, you're taking about 0.4.4 and beyond so I'm not sure what the issue is. - bteitlerHonored GuestThanks for your input, but It is not screen tearing - I know the difference. If I close each eye and jiggle the headset, I can tell that motion is being predicted further in one eye and not the other. I've encountered plenty of screen tearing before so I know what that looks like as well.
- cyberealityGrand ChampionCan you run the Oculus World demo and press space to bring up the stats?
If you take a screenshot of that, it may help indicate the issue.
Also, please include everything you can about your system specs, OS version, GPU driver version, etc. - vrdavebOculus StaffThis sounds like a camera ordering problem. Can you make sure the right eye camera's "depth" property is lower than the left eye camera's? The OVRCameraRig prefab should have been set up this way, but it appears to use depth = 0 for both eyes.
- bteitlerHonored GuestOK I think I found the problem. I created a completely blank project with none of my infrastructure code and it worked fine with time-warp. It is perhaps an amateur mistake on my part for assuming my infrastructure code would not interfere. After some more digging, I found the offender. I use my own positional tracker and do my own drift correction, so one of my scripts is continuously asking for head orientation. I was calling this function in 0.4.4 and 0.5:
OVRManager.display.GetEyePose(OVREye.Left);
However, this appears to have some sort of side effect that causes time-warp to break. There is nothing I could see in the OVR Unity code base to indicate this unfortunately, but I'm guessing the library assumes these to be called only once and sets an internal time marker for time warp. When I upgraded to the latest SDKs, I think I simply grabbed the first function that seemed to give orientation and forgot about it. I switched to calling this function:OVRManager.display.GetHeadPose (predictionTime);
and things seem to be working now. Can someone from Oculus comment on whether this side effect was intended? I admit I have not been reading the SDK manuals cover to cover on each SDK upgrade. - cyberealityGrand ChampionThanks for following up with the fix.
- vrdavebOculus StaffIt should be safe to call OVRManager.display.GetEyePose from the Update method in your scripts. If you call it in LateUpdate or one of the later rendering callbacks, you could get undefined behavior where one eye comes from a different frame from the other. I've added this to the documentation.
- bteitlerHonored GuestThanks for the clarification!
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 1 year ago
- 25 days ago
- 2 months ago
- 4 months ago
- 1 year ago