Forum Discussion
musicaljoe
10 years agoHonored Guest
Tool to correct eye offset
Hi all,
A decent, working VR has been a dream of mine since I saw the 80s VR helmets. The rift DK2 I have works perfectly for my friends... but... not for me.
My problem is that I see double when using the rift. Not everything - objects close to the 'camera' are fine - but most things just don't work. My mates LOVE the space demos, but I just see 2 of everything.
The reason for this is that my right eye points something like 5 degrees to the right and 2 degrees upwards compared to my left eye. I wear glasses with prisms to correct this is normal life, but - weirdly - they don't do 'enough' convergence in the rift.
The thing is, to me, it sounds like it should be REALLY easy to fix this in the rift. The right eye could simply shift the display down and left a bit. That would literally solve the entire problem.
So the question is... is this possible? Of course, I can do this using the sdk for anything I program myself... but to experience any other program or demo, I need a utility that can 'interrupt' the rendering process.
Has anyone got any ideas? Or... could anyone code this? I know there's a demo for the Rift (is it Diplopia?) that demos this, but it can't 'fix' other games.
Anyone's thoughts would be most appreciated.
Thanks,
Joe
A decent, working VR has been a dream of mine since I saw the 80s VR helmets. The rift DK2 I have works perfectly for my friends... but... not for me.
My problem is that I see double when using the rift. Not everything - objects close to the 'camera' are fine - but most things just don't work. My mates LOVE the space demos, but I just see 2 of everything.
The reason for this is that my right eye points something like 5 degrees to the right and 2 degrees upwards compared to my left eye. I wear glasses with prisms to correct this is normal life, but - weirdly - they don't do 'enough' convergence in the rift.
The thing is, to me, it sounds like it should be REALLY easy to fix this in the rift. The right eye could simply shift the display down and left a bit. That would literally solve the entire problem.
So the question is... is this possible? Of course, I can do this using the sdk for anything I program myself... but to experience any other program or demo, I need a utility that can 'interrupt' the rendering process.
Has anyone got any ideas? Or... could anyone code this? I know there's a demo for the Rift (is it Diplopia?) that demos this, but it can't 'fix' other games.
Anyone's thoughts would be most appreciated.
Thanks,
Joe
5 Replies
- blackpandachanHonored Guest
- brantlewAdventurerIt doesn't sound to me like image shift would fix this. In order to mimic your eye-sight it sounds like you need the virtual cameras rotated at the same angles that your eyes are. That's going to be a lot trickier because it's more tied to the game engine and I suspect that the popular game engines lack support for non-parallel stereo view frustums. It's not too difficult to customize an app to do this, but I'm not sure that a sweeping tool could be used for generic content.
- joanProtegeYou would need a low level settings in the configuration utility to apply a systematic correction to the pose of each eye at the runtime level, before the pose is evaluated by the applications…
- thewhiteambitAdventurerAs with TimeWarp, to some extend a 2D offset shift is the same as a rotation of camera. For starters I would try to have my own Profile in the Oculus Configuration Utility. A problem could be the vertical offset, but maybe your own profile can solve it up to a level were it is ok for you in most cases.
- skaveeExplorerWell from my own apps (and the oculus tiny example) the following lines are basically the ones that calculate view and projection matrices, aka. the direction you see and what you will see based on your eye field of view.
// Calculate the model-view and projection matrices
static Vector3f originPos = Vector3f(0.0f, 0.0f, 0.0f);
static Matrix4f originRot = originRot.Identity();
Vector3f pos = originPos + originRot.Transform(layer.RenderPose[eye].Position);
Matrix4f rot = originRot * Matrix4f(layer.RenderPose[eye].Orientation);
Vector3f finalUp = rot.Transform(Vector3f(0, 1, 0));
Vector3f finalForward = rot.Transform(Vector3f(0, 0, -1));
Matrix4f view = Matrix4f::LookAtRH(pos, pos + finalForward, finalUp);
Matrix4f proj = ovrMatrix4f_Projection(layer.Fov[eye], 0.1f, 800.0f,
ovrProjection_RightHanded | ovrProjection_ClipRangeOpenGL);
What would have to be done is provide originRot as an adjustable value that an user can set via the apps menu. Alternatively these fields could be added it into the oculus runtime and passed when the app gets the 'layer.RenderPose[eye].Orientation/Position' variables.
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device