Forum Discussion
bANGERnomics
6 years agoHonored Guest
OVRCameraRig use per eye cameras changes scale
I'm working on a 3D image/video solution so I'm using the 'per eye camera' option in the OVR Camera Rig in Unity. I noticed that if I toggle this setting on and off, the scale of the world is radically affected. With the per eye camera setting off, the eye separation appears correct, but when I switch it on, it seems to jump. I don't seem to have any control over this and so it is completely breaking my project. I'm using Unity 2019.3.2.f1 on OVR 1.42.0. This issue occurs when using Oculus Link on the quest from the editor and also in the Quest build.
7 Replies
Replies have been turned off for this discussion
- bANGERnomicsHonored GuestI've done some more digging and it looks like the eye separation is in line with the user setting on the headset. I'm now suspecting the FOV as a possible source. I tried a completely separate project and found the same issue (toggling the per eye camera setting in the OVR Camera Rig changes the perception of scale). I noticed that the hand tracking is correctly aligned with my real-world hand when using the single camera, but when per eye cameras are enabled, my real-world hand moved much further than my virtual hand.
- philedayMemberThis still appears to be a problem with the latest Unity 2020.2.1f1 and the latest Oculus SDK.
It's pretty easy to recreate as well. use a prefab Oculus camera rig, add a cube to one of the controllers, run, looks fine. Tick on Camera per eye and it's wrong (smaller).
I'm also looking into solutions :) - philedayMemberUpdate:
So I've found a fix, in OVRCameraRig.cs I changedif (!hmdPresent || monoscopic){leftEyeAnchor.localPosition = centerEyeAnchor.localPosition;rightEyeAnchor.localPosition = centerEyeAnchor.localPosition;leftEyeAnchor.localRotation = centerEyeAnchor.localRotation;rightEyeAnchor.localRotation = centerEyeAnchor.localRotation;}else{leftEyeAnchor.localPosition = centerEyeAnchor.localPosition;rightEyeAnchor.localPosition = centerEyeAnchor.localPosition;leftEyeAnchor.localRotation = centerEyeAnchor.localRotation;rightEyeAnchor.localRotation = centerEyeAnchor.localRotation;Vector3 leftEyePosition = Vector3.zero;Vector3 rightEyePosition = Vector3.zero;Quaternion leftEyeRotation = Quaternion.identity;Quaternion rightEyeRotation = Quaternion.identity;if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftEye, NodeStatePropertyType.Position, OVRPlugin.Node.EyeLeft, OVRPlugin.Step.Render, out leftEyePosition))leftEyeAnchor.localPosition = leftEyePosition;if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightEye, NodeStatePropertyType.Position, OVRPlugin.Node.EyeRight, OVRPlugin.Step.Render, out rightEyePosition))rightEyeAnchor.localPosition = rightEyePosition;if (OVRNodeStateProperties.GetNodeStatePropertyQuaternion(Node.LeftEye, NodeStatePropertyType.Orientation, OVRPlugin.Node.EyeLeft, OVRPlugin.Step.Render, out leftEyeRotation))leftEyeAnchor.localRotation = leftEyeRotation;if (OVRNodeStateProperties.GetNodeStatePropertyQuaternion(Node.RightEye, NodeStatePropertyType.Orientation, OVRPlugin.Node.EyeRight, OVRPlugin.Step.Render, out rightEyeRotation))rightEyeAnchor.localRotation = rightEyeRotation;}}
to this:if (!hmdPresent || monoscopic){leftEyeAnchor.localPosition = centerEyeAnchor.localPosition;rightEyeAnchor.localPosition = centerEyeAnchor.localPosition;leftEyeAnchor.localRotation = centerEyeAnchor.localRotation;rightEyeAnchor.localRotation = centerEyeAnchor.localRotation;}else{leftEyeAnchor.localPosition = centerEyeAnchor.localPosition;rightEyeAnchor.localPosition = centerEyeAnchor.localPosition;leftEyeAnchor.localRotation = centerEyeAnchor.localRotation;rightEyeAnchor.localRotation = centerEyeAnchor.localRotation;/*Vector3 leftEyePosition = Vector3.zero;Vector3 rightEyePosition = Vector3.zero;Quaternion leftEyeRotation = Quaternion.identity;Quaternion rightEyeRotation = Quaternion.identity;if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftEye, NodeStatePropertyType.Position, OVRPlugin.Node.EyeLeft, OVRPlugin.Step.Render, out leftEyePosition))leftEyeAnchor.localPosition = leftEyePosition;if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightEye, NodeStatePropertyType.Position, OVRPlugin.Node.EyeRight, OVRPlugin.Step.Render, out rightEyePosition))rightEyeAnchor.localPosition = rightEyePosition;if (OVRNodeStateProperties.GetNodeStatePropertyQuaternion(Node.LeftEye, NodeStatePropertyType.Orientation, OVRPlugin.Node.EyeLeft, OVRPlugin.Step.Render, out leftEyeRotation))leftEyeAnchor.localRotation = leftEyeRotation;if (OVRNodeStateProperties.GetNodeStatePropertyQuaternion(Node.RightEye, NodeStatePropertyType.Orientation, OVRPlugin.Node.EyeRight, OVRPlugin.Step.Render, out rightEyeRotation))rightEyeAnchor.localRotation = rightEyeRotation;*/}}
basically making the left and right camera do thisleftEyeAnchor.localPosition = centerEyeAnchor.localPosition;rightEyeAnchor.localPosition = centerEyeAnchor.localPosition;leftEyeAnchor.localRotation = centerEyeAnchor.localRotation;rightEyeAnchor.localRotation = centerEyeAnchor.localRotation;
seems to work :)- WMVR_02Honored Guest
Thanks for this workaround! It's a strange issue, still occurring in2020.3.30f1.
- ruud3DVProtege
Thanks a lot for sharing this!!
Ran into the same issue with XR on Oculus Quest (Unity 2020.3.26f1) and setting the TrackedPoseDriver for the LeftEyeAnchor and RightEyeAnchor to use Input Actions 'centerEyePosition' and 'centerEyeRotation' solved this.
- alexish007Honored Guest
This was a bothering issue, thanks for the workaround! Works 🙂
- TakayoshiHonored Guest
I am using Meta Quest Pro, I have been had the same small scale problem under the setting UsePerEye Cameras Enabled in OVRCameraRig, and also EyeTracking Requested in OVRManager so that the IPD setting of the the both eye lenz of Qeuest Pro is reflected to the local position values of LeftEyeAnchor, RightEyeAnchor in Unity.
I do not think the way posted above that setting CenterEyeAnchor's position to LeftEyeAnchor, RightEyeAnchor is the correct solution because it caused IPD=0.
If someone knows the way to see correct scale viewing with the setting of UsePerEye Cameras Enabled, please let me know.
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
- 5 years ago
- 6 months ago
- 7 months ago
- 2 years ago