SPOILER ALERT: The conclusions I reached here are wrong. Big time wrong. According to the internet there is no convergence distance (infinite) or there is a 1.3m value. That said, carry on if you want to read me babble on math …

The following text is rather dull and technical. I’m basically dissecting the projection matrix I get from the Oculus SDK in order to guess which convergence distance is being used. Making long short I found that for my setup, with the eye separation (interocular distance) of 6.5cm, the convergence distance is 4m.

This is twice as much as the classic “rule of thumb” of having a convergence distance 30x than the interocular distance.

 Proceed with caution. The calculation below is based on the frustum parameters of left, right, top and bottom.

We are going to use as reference the DirectX matrix I get from the SDK. You can read about how the matrix is formed here. The following matrices were created using near = 1.0, and far = 20000.0.

Left Projection Matrix: 0.929789, 0.000000, 0.000000, 0.000000, 0.000000, 0.750974, 0.000000, 0.000000, -0.015672, -0.000000, 1.000050, 1.000000, 0.000000, 0.000000, -1.000050, 0.000000

Right Projection Matrix: 0.929789, 0.000000, 0.000000, 0.000000, 0.000000, 0.750974, 0.000000, 0.000000, 0.015672, -0.000000, 1.000050, 1.000000, 0.000000, 0.000000, -1.000050, 0.000000

What do we know?

I. 2.0 * near / (right - left) = 0.929789
II. 2.0 * near / (top - bottom) = 0.750974
III. (left + right) / (right / left) = -0.015672 (Left Eye)
IV. (left + right) / (right / left) = 0.015672 (Right Eye)

From the first line (I) we get that width (right – left) is roughly 2.15 (2.0 / 0.929789).

From the second line (II) we get that height (top – bottom) is roughly 2.66 (2.0 / 0.750974).

We know the buffer size for each eye, and they are both: 1182 x 1464. The buffer aspect ratio is 0.8, which pretty much matches what we got from the projection frustum. Moving on.

From the third line (III) or the fourth line (IV) we need to consider the following. In a perspective projection matrix the left and right parameters of the frustum are:

left = -width / 2.0
right = width / 2.0

For the off-center (a.k.a. off-axis) projection matrix the left and right parameters are:

left = (-width / 2.0) + offset
right =(width / 2.0) + offset

Beware that the offset is positive for the left eye, and negative for the right eye. Also note that the left and right referred before refer to the frustum parameters, not the eyes.

That said, III and IV give us offset = 0.008.

Now the final twist. This part I may be doing wrong, but it’s as far as I got based on my understanding of trigonometry and frustum calculation. Basically the offset in the convergence plane of a zero-parallax is the same as half the interocular distance.

convergence_distance / (interocular_distance / 2) = near / offset

That would indicate that the convergence distance is … 4.

But since the convergence is not 4, what did go wrong? I think I can’t really actually assume that the near plane is the zero parallax plane.

So let’s just ignore this post, and wait for a more inspired one later. Internet, the place where your mistakes learning process lives forever to eventually haunt you back … So why am I posting this again?

One Thought on “What is the convergence distance of Oculus?

  1. dfelinto Its fun to read the way your mind works, so “babble” some more, please. Especially on getting VR into the workflow early.
    [Wanting to get a visor into the modeling phase– as anaglyph is tiring and hard to see verts– I’m only looking this up after a year.]
    Thanks for your work!

Leave a Reply

Your email address will not be published. Required fields are marked *

Post Navigation