Check out the new USENIX Web site.

Bob Olson, Argonne National Laboratory

Abstract:
The NT based CAVE? Project.
Terry Disz and Bob Olson

The CAVE? (CAVE Automatic Virtual Environment) is a 10 x 10 x 9 foot room that uses rear-projected high-resolution projectors to produce an immersive 3D environment. The CAVE environment, originally developed by the Electronic Visualization Laboratory (EVL) at the University of Illinois at Chicago, produces a 3D stereo effect by displaying in alternating succession the left and right eye views of the scene as rendered from the viewer's perspective. These views are then seen by the user through a pair of LCD shutter glasses whose lenses open and close forty-eight times a second in synchronization with the left- and right-eye views. The correct viewer-centered projection is calculated based on the viewer's position and orientation as determined by a electromagnetic tracking system. The position and orientation of a 3D wand are also tracked; this wand allows for navigation of and input into the virtual world. Along with the visual feedback of the CAVE environment, a complete 3D audio environment is available to the user.

The Immersadesk.

The ImmersaDesk is based on the same rear-projection technology as the CAVE It is a fully interactive, 3D immersive environment that is about the size of a large drafting table. The ImmersaDesk allows for one tracked viewer, along with two to three passive viewers.

The InfinityWall

The InfinityWall is a large rear-projected system that is created from compositing four standard 1280 x 1024 screens together to create one large high-resolution screen. The InfinityWall can be used as a large ImmersaDesk, where the images are projected in stereo and the viewer is tracked, or can substitute for a large high-resolution workstation. The NII/Wall was developed by EVL, the National Center for Supercomputing Applications, and the University of Minnesota, with support from Silicon Graphics, Inc. These devices all use the CAVE library, developed at the University of Illinois at Chicago and are powered by SGI computers with high end graphics accelerators.

The NT CAVElib.

Some of us in the Futures Lab in the Math and Computer Science Division at Argonne National Laboratory have been investigating the use of lower cost Intel based machines to power the CAVE family of devices. We have ported version 2.5.5 of the CAVE library to run under Microsoft Windows NT 4.0. We used Microsoft Visual C++ version 4.2. All basic CAVElib functions are ported and operational. Although normal CAVE applications compile and run unchanged, there are several major internal differences between the Unix CAVElib and the NT Cavelib. The windowing and messaging mechanism was changed from the X windows model to the Windows NT windowing and messaging interface. Where processes were forked in the UNIX library, we use threads in the NT Cavelib, which caused us quite a bit of difficulty in the operation of shared memory. We currently only have a static library which runs under both Windows NT and Windows 95, with Opengl extensions. We have run applications on systems with Opengl accelerators and those without.

Performance seems to scale directly with the capabilities of the accelerator, although we don't yet know what affect faster/more processors have on the scale-up. We used a loaner TDZ-410 workstation from Intergraph to do the initial port and to perform some basic benchmarking. We found that we could run simple applicationsin stereo on our Immersadesk at a better resolution (The Integraph was something like 1300 x 1100 vs 1024 x 768 for the SGI) than we can with our SGI Deskside Onyx with RE2 and still achieve an acceptable frame rate. We did not do head-to-head Onyx vs Intergraph benchmarks.

Work to do.

The current implementation has a user process and one display process that contains threads for all display devices. For each display device multiple walls of a CAVE, for instance) there are two threads, a windows message thread which is usually blocked on windows message input and a display thread which spins in the CAVE display loop. This last thread is inelegant and we would like to find a good way to pace the display loop in such a way as to maintain a constant frame rate without overwhelming the processor when it isn't necessary to do so. A fix to this thread would also, we believe, speed up keyboard input that is sluggish today.

The NT CAVElib should be ported to CAVElib version 2.6 in such a way that the changes are integrated into the CAVElib and are carried forward henceforth in new versions of the library.

We have not used the Microsoft Foundation Class in this implementation, but we believe its use should be investigated for potential benefits.

Lastly, we would like to port the library to run across multiple NT machines in order to run a multiple walled CAVE. The current CAVElib has provision for running in a distributed memory system, but we don't know how well that system ports or if we will need special support from manufacturers to achieve low enough inter-machine latency to make the system operate at a fast enough frame rate.