This primer introduces some key concepts for adding stereoscopic 3D to your application. We define basic terms that are used throughout the SDK documentation. Even if you are familiar with 3D graphics, you should read this primer.
Traditional 3D images are rendered from only one perspective, so we call them monoscopic or one-eyed. If you have worked with 3D graphics before, for example in games, you may be familiar with monoscopic 3D. The rendered scene may have depth, but the image looks the same no matter where you move your eyes. Everything rendered in a monoscopic image comes from a pyramid-shaped volume called a frustum. The frustum is formed by tracing planes from the viewpoint through the four edges of the screen.
Figure 1 shows a monoscopic 3D frustum, with the viewpoint and clipping planes. The angle between the top and bottom walls of the frustum is called the vertical field of view or FOVY. Similarly, the horizontal field of view or FOVX is the angle between the left and right walls. The aspect ratio of an image is the relationship between its horizontal and vertical sizes. The aspect ratio determines the shape of the rendered image. For a symmetric frustum, the aspect ratio is equal to the fraction FOVX/FOVY.
During rendering, the contents of the frustum are effectively projected onto the near clipping plane, resulting in a flat image. Each point in the projected image corresponds to what you would see if you put your eye at the viewpoint and looked along a line through that point on the near clipping plane.
Stereoscopic rendering creates the illusion of depth by presenting two separate images to the viewer's left and right eyes. These two images are slightly offset, as though you were looking through binoculars and closing one eye at a time. The brain fuses the two images into a single 3D image. Note that the two separate images must closely correspond to the images the eyes would see when looking at the real object.
Your brain uses parallax information to locate an image in space. Parallax refers to an object appearing slightly different in perspective when viewed from different angles or positions. Binocular parallax refers to viewing the world around us with two eyes that are about 60mm apart. Another important form of parallax, motion parallax, results when you move your head around.
zSpace uses both forms of parallax to create a strong sense of depth. It presents a different high-definition image to each of your eyes in real time. Each image looks correct from your eye's current position. Figure 2 illustrates depth perception in zSpace. Notice the differences between the left and right views of the object.
Whether an image appears to be on the screen, behind the screen, or in front of the screen depends on the relationship of the left-eye and right-eye images to each other.
Figure 3 illustrates parallax in zSpace.
Stereoscopic rendering is similar to monoscopic rendering, but the same object is rendered from two separate viewpoints, one for each eye's view. There are some other important differences too.
Figure 4 shows the stereo frustum, with one off-axis frustum for each eye's viewpoint. Note the object disappears as it crosses the near and far clipping planes.
The frusta overlap exactly at the screen. As previously discussed, if we render anything at exactly the same location as the screen, it will appear the same in both eyes. For this reason, we say the screen is on the zero parallax plane. The screen lies somewhere between the parallel near and far clipping planes.
The viewer's distance from the screen directly affects the stereoscopic 3D frustum. The stereo frustum also depends on the angle of the display with respect to the viewer, the size of the display, and the distance between the eyes of the viewer. ZSCore correctly calculates the stereo frustum and associated rendering matrices based on these factors.
zSpace uses many perceptual signals to convey a strong sense of realism. To create a correct stereo 3D image, the key is to reproduce as closely as possible the actual views seen in each eye. Using incorrect image offsets will result in improper depth alignment in the stereoscopic 3D image. This can lead to eye strain and other undesirable effects.
Here are the main factors ZSCore takes into account when computing a stereo viewing frustum.
Inter-Pupillary Distance (IPD) refers to the distance between the viewer's two pupils. IPD is one of the key parameters that control comfortable viewing of stereoscopic images. Using an incorrect IPD will present images to the viewer's eyes that do not match the viewer's real world experience. The average adult IPD is approximately 63 mm. The majority of adults have IPDs in the range 50-75 mm while the wider range of 45-80 mm is likely to include almost all adults. The minimum IPD for children is around 40 mm.
There are two ways to calculate viewpoints for the viewer's eyes: static and dynamic.
zSpace supports both static and dynamic viewer locations.
The zSpace System tracks your head to enable motion parallax, an important cue for depth perception. The polarized glasses have two purposes:
The viewer can freely look around objects in zSpace and see behind them. If the viewer changes perspective, for example by tilting the head, the object is rendered just as one would see it in the real world.
When performing head tracking, we take rotation of the viewer's head, thus the orientation of his or her eyes, into account. Without this, the image would always appear as if the viewer looked directly at the zSpace with his or her eyes being parallel to the display. This would lead to an uncomfortable viewing experience.
Head tracking and off axis frustums are changed each frame to give correct perspective. By updating the frustums each frame, we create a natural and comfortable experience.