How does stereo display work?

Our project involves attempting to trick the very complex human visual system into seeing a 3 dimensional scene on a 2 dimensional display. To do this we learned about the visual system and the computer equipment that makes stereo viewing possible, including the Stereographics Crystal Eyes and the Silicon Graphics Onyx Infinite Reality System.


Introduction to the Human Depth Perception

To understand how 3-D stereo rendering works, one must first understand a bit about how humans can discern depth from a scene. Human beings use a variety of different methods to determine how far away an object is. Among them are object overlap, movement disparity, and binocular disparity. Object overlap simply means that if one object is obscuring another, then it must be in front of the other. To understand movement disparity, imagine that you are driving in a car on the highway. As you drive, the lines on the road appear to move by very quickly. However, a farmhouse far away may not seem to move at all. This is because the farmhouse is farther away than the stripes on the road. Binocular disparity is a bit less intuitive. When we focus on an object, the image falls on corresponding points on the retina of each eye as with the square, triangle, and circle in this figure. The image from the square falls on corresponding points B and B'. All objects that are the same distance from the eye as the object in focus fall on an imaginary arc called the horoptor. Objects that lie in front of or behind the horoptor fall on non-corresponding points on the retinas, as with the triangle and square in this figure. The images from the square fall past B in the left eye and between A' and B' on the right. The angle formed by lines drawn from the image to these points on the retina is more acute than the angle formed by the object in focus and on the horoptor, the circle. Because the angle is more acute, the object must lie beyond the horoptor. The reverse is true for the triangle. Its images also do not fall on corresponding points on the retina, but the angle formed is more obtuse than the circle's. A more obtuse angle indicated that the object is in front of the horoptor and closer to the viewer. By using these three methods and a few others, the human visual system can judge depth with great accuracy.
In Hank, the horoptor is the screen, that is, the user focuses on the physical display screen. Everything in the scene appears "behind" the screen which limits the reality of the display. Users do not move through the landscape, because objects do not pop out of the screen. This is one limitation of this type of stereo display. Also, because Hank uses only one kind of method to show stereo, the result is not as accurate as a person's normal visual experience in the world. To make this program as accurate as the physical world, one would have to adjust the shading on each object in the scene, insure that the movement disparity was true, and allow the user to be surrounded by the scene. Though we are approaching this quality of virtual reality, we are not there yet.

Return to the top

Stereoscopic Goggles

We used Stereographics CrystalEyes to view the images. These are polarized shutter glasses that receive information from the stereo emitter through an infrared sensor. While the left eye view of the screen is being displayed, the right eye on the goggles is darkened, and while the right eye view of the screen is being displayed, the left eye on the goggles is darkened. These two views alternate between one another so quickly, that the visual system is tricked into thinking it is seeing an image in stereo. The emitter has two settings, high and low. We found the low setting to be to slow, and the flickering was too noticeable. Without the goggles, the two slightly offset images appear to be on the screen at the same time, resulting in a blurred image.

Return to the top

Stereo Rendering

There are 2 flavors of stereo rendering on a computer: divided screen and quad-buffer. Both methods utilize this basic method. A left and a right buffer are then designated with slightly offset views of the display. The two different views are then alternately presented on the screen, one to each eye, and the images appears in stereo. However, divided screen stereo and quad-buffer stereo use completely different implementations.
Divided screen stereo (a.k.a. top/bottom stereo) is most appropriate for low-end systems that do not have enough memory for quad-buffer stereo. Divided screen stereo displays either the top or the bottom of the screen. The command /usr/gfx/setmon STR_TOP or STR_BOT is used to set the monitor. Two buffers are used in normal operation for animation. That is, while one scene is being displayed on the front buffer, the new, altered scene is drawn to a second, back buffer. The two buffers are then swapped to avoid the time it takes to redraw a new display on the screen. In divided screen stereo, the two buffers are used instead as left and right buffers. The buffers are drawn and displayed in this way:

	SetStereoBuffer(STEREO_BUFFER_LEFT);
	< draw left image >
        SetStereoBuffer(STEREO_BUFFER_RIGHT);    
 	< draw right image >
        SwapBuffers(...);

The pixels are elongated, creating pixels that are twice as high as they are wide, instead of the usual square, so the images must be adjusted accordingly. Because stereo mode requires the computer to render an image twice (once for each eye), divided screen stereo allows the computer to only render half of the screen twice. In this way, performance time is minimized and a lesser amount of memory is used. However, if you have the means, (i.e. an Infinite Reality or Reality Engine) quad-buffer stereo is a better method.

Quad-buffer stereo (a.k.a. stereo in a window) uses four buffers to render a scene. Using ircombine, the monitor is set to 1024x768_96s.vfo. This designates two channels, each with a refresh rate of half of 96 Hz, or 48 Hz. Instead of using only half of the screen like divided screen stereo, quad-buffer stereo simply doubles the number of buffers available. The four buffers are front-right, back-right, front-left, and back-left. This way, the full screen can be seen and refreshed as smoothly as possible. We used quad-buffer stereo to render Hank and Performer in stereo. The buffers are drawn and displayed like this:

	DrawBuffer(BACK_LEFT); 
	< draw left image > 
	DrawBuffer(BACK_RIGHT); 
        < draw right image > 
        SwapBuffers(...);


Return to the top

Return to the main page.