
So ... how do you build these worlds ...
For myself I have used several methods, all sitting on top of the CAVE library:
In general I have progressing towards higher level tools as time goes on.
Higher level tools let you do 'bigger' things quicker and easier but lower level tools give you more precise control - the 'better' tool depends on the job you need to do.
How to go about it:
These days its pretty trivial to lead in a bunch of models and walk around them. Its helps if the models are really pretty, but just walking around in a virtual space gets boring pretty fast. The main focus needs to be on the user's interaction with the virtual world.
Draw
storyboards - the first thing you MUST generate are storyboards.
Draw
pictures of the user standing at the C-Wall. Make it
like a comic book. Each panel has some action initiated by the user or
the computer, and the next panel has the response. Draw a serries of
these storyboards for the common usage patterns. They should show the
flow of the experience. The storyboards do not need to be pretty, or
realistic looking. They are there to help you organize your thoughts on
the experience. You want to mentally visualize the person interacting
with your application - where will the user have problems?
Learn by doing - the flip side of drawing storyboards, which show what you want to do, is knowing what you CAN do in Electro. Write small programs. Try out simple versions of your ideas quickly to see if you are on the right track. A spiral development model works much better than a waterfall model in developing VR applications.
Focus on the user - see the application from the user's point of view, not the programmer's point of view. The user doesn't see the code. The user doesn't care how clever you did something. All the user sees is the end product.
Don't forget audio - ambient sounds and/or music are a good way to create mood and increase the sense of presence. Incidental sounds are a very good way of giving the user feedback (but its usually good to give visual feedback as well)
Play to your strengths - remember that you have a user who is head and hand tracked who holds a three button mouse with a joystick, but has no access to a keyboard. Create worlds where the user has natural interactions with his/her body. Also remember that the user has stereo visuals. Create worlds that surrounded the user; create worlds where the user shares the C-Wall with virtual objects.
Decide on the Physical laws - decide early whether there is gravity in your world, whether the user can fly, whether the user can walk through objects, what size the user is, how fast the user can move, etc.
Choose your preferred display platform - decide if you are writing a piece for a CAVE or a C-Wall or an HMD.
Test on the C-Wall - the desktop simulators are nice for testing your application but there is no substitute for regularly trying things out in a tracked full-scale 3D environment like the C-Wall. Interaction with a tracked hand is very difficult to simulate on the desktop. Movement speeds are hard to judge in the simulator - the speed may be very different when you are interacting on the C-Wall.
Get lots of feedback - Once you have something working, ask others for feedback and LISTEN to them. Its very easy to come up with an interface which makes complete sense to you but makes no sense to anyone else. In most cases you are not writing the interface for yourself so listen to your audience.
Make sure it works - your application must not crash. No matter what the user does at the C-Wall, your application must not crash. Its better to have less functionality that you are sure will function correctly.
Get permissions - be sure to get permissions to use anything (images, models, sounds) that you don't create yourself. Don't steal.
Create reusable modules - if you are going to continue building VR worlds /interfaces then think about making things reusable - there are many things that you will be doing over and over again so its better to write them once and reuse them.
Focus on collaboration early - if the application is going to be collaborative or may be collaborative then focus on collaboration from the start. Its difficult to make an application once it has already been created.
Some more specific thoughts:
Keep the frame rate high - be sure to keep the frame rate at least above 15 frames per second in stereo and preferably 20 frames per second. This may mean you need to simplify some models, or have fewer models in the scene, or do more culling. Use only the number of lights that you need and use the simplest lighting possible (avoid spot lights and use directional lights if you need more speed.) Avoid transparency if necessary and especially avoid sorted transparency - sorted transparency can quickly ruin frame rates.
Chose the right model formats - with Electro you don't have a choice of model formats but with most other VR libraries you do. Speed and portability are important. Most current modelling packages can write out a variety of formats. Make sure your format of choice supports all the things you need. Usually you will end up keeping copies of your models in multiple formats.
Use
textures smartly - textures can be very valuable in adding
detail and
reducing the number of polygons in the scene by replacing polygons with
texture maps. Texture maps are a necessity if you want to have
realistic looking scenes. The CAVE had only 64 megabytes of total
texture
memory to work with. Modern graphcis cards will give you 128 or 256 or
512 MG of texture memory to work with. To make OpenGL happy across
multiple platforms you will probably want to make your textures a power
of two in each dimension. This also avoids wasted texture memory.
Some other ways to write VR applications:
- a set of storyboards for your application showing all of the common interactons that a user will have with the system. The actual number will depend on your specific applicaiton but I would say 20 is an absolute minimum
- Eelctro code showing your current progress on the application. ... you are 1/2 of the way through the development time so you should be able to show me some basic functionality in your chosen project.
Here are some sample storyboards that Jason Leigh wrote/draw while creating a game for his CS 426 Videogame Programming class. While the goals of a game and a VR app are not exactly the same, I think this gives an idea of what I'm looking for.






If you want a really good book on storyboards, among other film directing skills, check out 'film directing shot by shot - visualizing from concept to screen' by steven d. katz. I bought mine from Amazon.
Collaboration