World Building Principles
Scale is Literal
The design principle behind the CAVE is that the scale of virtual objects is literal - if you create a cube measuring 6 feet on a side, it should actually appear to be a literal six feet in the CAVE. This is another point about VR which seems perfectly obvious but in fact requires something of a shift in thinking from the way we usually understand images. Pictorial space is rarely the same literal scale as the physical space it represents. Consider landscape postcards and cinematic close-ups as two simple examples - the shift in representational scale happens almost transparently. Nobody believes that the small figures moving about on the TV screen are really midgets (except perhaps very young children, lesser mammals, and the insane). Again, this is something that we take for granted to such a degree that the literal representation of space in VR is actually pretty unusual. The image itself is now bound by laws of scale that previously only applied to sculpture and architecture. When combined with the fixed first-person point-of-view of VR, what you have is a kind of image which is integrally tied to the human body in a unique way. The odd paradox is that this technological 'advancement' puts a new set of limits and constraints on the image, which should put to rest anyone who thinks that virtual reality is going to make all other forms of visual representation obsolete.
In practice, what this means is that it is very important to look at your work in a CAVE, C-Wall, etc, as you go. Most development takes place in 'simulator' mode, on a regular desktop computer screen - meaning that everything is not just smaller (obviously, since your monitor is a lot smaller than the projection screen) but that in this mode you look at and understand the virtual environment primarily as images rather than as things. The way we see 3D virtual spaces on the computer screen (VR environments, VRML webpages, videogames, Quake, Halo, etc) relies on exactly the same fluid transformation of scale as other pictorial forms, with the same kind of arbitrary, external, disembodied point of view. The bottom line is that your environment will often look radically, surprisingly different in the CAVE than the way it looks on a normal computer. Understanding this difference really only comes from practice.
At the beginning, it helps to model objects and spaces based on actual physical measurements.
When modeling in Maya, for example, there is no real scale reference; scale is completely
arbitrary, since in 3D animation for film the only thing that matters is relative scale between
objects. The numbers don't matter, it just has to look good. But when modeling for VR,
take measurements of things - how wide is this room? How wide is the doorway?
How high off the ground is the desk?
Remember that the CAVE measures everything in Feet.
Different modeling programs will default to different units for measurement. Maya defaults to
measuring everything in Centimeters; but, this is really sort of an arbitrary unit. When you
export models out to use in the CAVE, it just puts out the numbers, not the units; so the numbers
get interpreted as Feet anyway. There are a few model exporters that DO pay attention to units
(the OpenFlight exporter is one), but most do not.
Modeling Tips
Here are a few quick, basic tips for 3D modeling. Some of these are specific to Maya, but the ideas are the same for other modeling packages.- Only Polygons
Ygdrasil, like most realtime 3D engines, only understands polygons, not NURBS, Subdivison Surfaces, Metaballs, Patches, or other exotic types of 3D objects. You can model using NURBS, Sub-D's, etc, but you must convert them to polygons before exporting. - Clean Polygons.
Shapes that are broken up into triangles or quadrilaterals work the best. Polygons with very complex outlines, lots of holes in them, or points that are not all in the same plane will often cause problems. Keep your polygons simple. - Clean History
A lot of modeling actions create lengthy history, and can create a lot of empty grouping nodes in Maya. Delete your history and clean up the scene before exporting. - Keep the Hierarchy Simple
If you plan to export your objects with Full Hierarchy (for doing animation), make the hierarchy simple. Use as few grouping and parenting levels as you can, particularly for static objects that won't be animated. - Simplify
Use the fewest number of polygons you can. Every polygon takes time for the computer to draw, and it has to draw all of them every frame. For smooth motion, you want the highest frame rate you can get. Objects with too many polygons are said to be "heavy" - they slow the computer down, and make motion jerky. This is particularly important in VR, because it creates lag in head-tracking. In the CAVE, the scene is always shown from the point of view of your actual eyes in real space; so, if you move your head, the scene needs to update immediately to the new point of view. If it lags, even for a fraction of a second, you get a simulation of having had Too Much Tequila.
When modeling, start with low-poly primitives. Get as much of the form as you can before smoothing, subdividing, or adding more detail. For rounded forms, smooth the normals rather than smoothing the polygons. Use materials and textures to suggest detail rather than modeling it in polys.
Many objects vs. Single Object
There are two basic approaches to exporting models from your modeling software to Ygdrasil: lots of little objects, or one massive object. In practice, you'll often want to use as combination of the two.To export everything as a single object, use the Export All command, or select everything, or a lot of things, and use Export Selection. This will create one single model file (a .B3D, a .X3D, a .OBJ, etc), which then gets loaded into one single object node in YG. This single model file can, in fact, contain many different objects - for instance, you might export a whole house, its furniture, decorations, and furnishings, as a single object. All of these things are individual polygon objects in Maya, but they would get loaded in a single object node in YG.
There are some objects that you might not want to include in a single model file. Why? In the example above, you would not be able to access the individual objects from YG. For static objects this is fine, but if you want to reposition or animate an object from YG, it would have to be its own node. So, if you're going to have the inhabitants of the house animated or controlled by scripts, you would need to export them as individual objects. Just use the Export Selection command.
When you export an object, it includes its current location. So, after doing Export Selection, the object node in YG would load the object at the same place it was in Maya. If you are planning to animate or script the behavior of the object, though, you should first move it to the Origin and then export it. Then, enter position and orientation messages for the object node in YG to position it in the scene (just use the numbers from Maya).
(c) Ben Chang