| Project Fundamentals: Starting
Your Own Project |
DEVELOP
A CONCEPT |
| It
is fundamental you thoroughly develop a concept
before you begin working. A clear map of what
you want to show and how you want your users to
interact with your data are fundamental to any
electronic visualization project. Your concept
will evolve and possibly change as your project
begins to take shape, but it is a good idea to
start with a basic problem such as a transit oriented
redevelopment, decide how you want to represent
the physical environment, such as in a density
study, and how the environment will change over
time (models increase in bulk from oriniginal
to proposed as the user enters within 10 feet
of the building). Layering on top of the basic
probelm, you should also consider how enhanced
visual presence or immersive interaction will
aid the project. I encourage you to consider pushing
your concepts beyond aesthetic observations by
utilizing interactivity.
Your concept should fit the visualization
medium you are going to use. A CAVE or any immersive
system is not an enhanced desktop. Some projects
might be well suited for a desktop application
and fail in the CAVE. I quickly discovered this
difference while creating a TOD project for both
environments. The drawback to using the CAVE is
difficulty with navigation and layered interaction.
If you want buttons or a control panel, you might
consider a heads-up display for the CAVE. Navigation
is also an issue when dealing with geography.
You might want to project a "you are here"
map on one wall of the CAVE, while another wall
displays a streetscape view.
If you are interested in advanced
navigation systems for your immersive environment,
see the City
Cluster project by Franz Fishnaller
and Alex Hill at EVL. In this project, they created
a view panel that the user carries with him in
the cities of Florence and Chicago. The user can
use the view panel or "window" to see
above him or another user.
AD508 is a helpful class to take
that will introduce you to ways of thinginking
about your project. It is a forum for EVL students
to explore concepts in electronic visualization.
|
GIS/ AUTOCAD DATA
|
Already
having your data in AutoCAD and GIS saves you
a lot of time. If you are working on a project
for the North Shore area just outside Chicago,
check the GIS Consortium. If you do not have access
to electronic data, you are going to have to build
it yourself. Many municipalities do not have or
maintain data in a GIS because they can not afford
the initial costs of digitizing the information.
If you have to start from scratch, my advice is
to digitize the maps using AutoCAD, export as
a DXF into your 3D modeling package, or import
into a GIS. You can also export out of GIS into
AutoCAD using the Arc to CAD extension. Consider
doing a thourough job in AutoCAD and sell or give
your maps and layers to the municipality.
I do not suggest extruding lines
in AutoCAD and importing an entire model into
a 3D Modeling package. You will ultimately want
to keep all objects within the scene as seperate
objects if you are using 3D Studio or Maya. If
you use MultiGen, an entire flight file can contain
everything and have interactivity added to it.
AutoCAD adds extra polygons; use AutoCAD to get
a precise base map of the location and export
it. Use it as a guide in your modeling package,
but do not use the objects created in AutoCAD
in the CAVE. You will find that your models are
polygon heavy and will end up sacrificing frame
rate. |
BUILD 3D WORLD
|
Create
your world in your 3D modeling package. There
are multiple ways to do this, but you are most
likely going to create entire scenes and export
each model.
There are several 3D modeling
packages designed for real time. While you may
be more familiar with 3D Studio Max than MultiGen's
Creator, you will be better off in the long run
using modeling packages that are polygon conscious.
I began modeling a corridor in
Hazel Crest using 3D Studio VIZ for my final project.
After exporting my buildings and assembling my
scene graph for the CAVE, I realized that my models
were inefficient. I had too many polygons in a
basic 6 sided building. 3D Sudio uses more than
2 triangles per side to create a face. This is
an inefficient use of polygons. I ended up decimating
my models and sacrificing quality for efficieny.
I was never able to reconcile the heavy polygon
count and ended up using Level of Detail for every
model without ever achieving a high frame rate
with a well modeled building. My advice is to
stay away from AutoCAD & 3D Studio Viz and
Max. |
| It
is highly recommended you take the Maya class
first (AD 406, look for Modeling in Maya for interactive
applications). If you do not want to commit to
a modeling class, purchase a how to book for Maya.
Other industry accepted real-time modeling programs
include Alias Wavefront, any MultiGen product,
Rhinoceros (www.rhino3d.com), SoftImage, and my
favorite, Sense8's WorldToolKit. All of the above
mentioned software packages are available for
use in the EVL lab. |
EXPORT: VRML, CAVE |
| Export
ech model as one the following formats:
pfb - IRIS Performer fast binary format
.flt - MultiGen OpenFlight format
.iv - SGI Open Inventor format
.wrl - VRML version 2.0 format
.obj - Wavefront Technologies data format
.3ds - AutoDesk 3DStudio binary data
.dxf - AutoDesk AutoCAD ASCII format
.lsa - Lightscape Technologies ASCII radiosity
data
.lsb - Lightscape Technologies binary radiosity
data
Create a directory and load all
models into this directory. You might experience
difficulty with .3ds and .wrl models; they might
not show up. The most efficient way to load your
models into the CAVE is to convert them to pfb.
Perfly each model after converting them.
If you open an .iv file in notepad, you will
see something like the foll.owing:
#Inventor V2.1 ascii
Separator {
PointLight {
location 672.329 277.128 -1484.71
}
Separator {
DEF Planenew Separator {
Transform {
translation 1067.6 -1 -933.759
rotation 1.5598
scaleFactor 0.827581 0.9387 0.9387
scaleOrientation 0 0 1 0
}
Separator {
Material {
ambientColor 0.0904761 0.0904761 0.0999999
diffuseColor 0.38 0.38 0.42
specularColor 0.53 0.53 0.53
emissiveColor 0 0 0
shininess 0.93
transparency 0
}
Texture2 {
image 1024 1024 3
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
0xffffff 0xffffff 0xffffff 0xffffff
 |
AD 408
& AD408 Advanced should be a requirement
if you intend on creating CAVE applications.
AD408 will introduce you to computer graphics
for CAVE applications, AD408 advanced will
teach you how to script interactivity and
load your models into the CAVE. |
BUILD SCENE GRAPH:
INTERACTIVITY
|
Construct
a scene graph that loads models and script interactivity.
Your scene graph might resemble the following:
//set up wand trigger to toggle icons on and
off
#ifndef _HAZEL_INTERFACE_
node(User0.teleport(1523 610 0)+1)
#endif
#include "hazelInterface.scene"
//set up wand trigger to toggle icons on and
off
wandTrigger(when(buttonUp1,opp17mySlider.drop),
when(button2,opp17iconSwitchA.toggle,opp17iconSwitchB.toggle))
//create a value node to increment the object
orientation
value opp17objectRotate(integer,delta(90),
when(changed,opp17movedObjectB.orientation(0 0
$value)))
transform(position(1523 626 3))
{
//create a primary model
switch opp17objectSwitchA(on)
{
object (file(32and31.pfb))
switch opp17iconSwitchA(off)
{
pointAtTrigger(when(start,opp17icon1OnSwitchA.off,opp17icon1OffSwitchA.on),
when(stop,opp17icon1OffSwitchA.off,opp17icon1OnSwitchA.on),
when(button1,opp17objectSwitchA.off+0.1,opp17objectSwitchB.on+0.1))
{
transform (position(20 -30 2))
{
group opp17icon1GroupA()
{
switch opp17icon1OffSwitchA(on)
{
object (file(initmodelsselected.pfb))
}
switch opp17icon1OnSwitchA(off)
{
object (file(initmodels.pfb))
}
}
}
transform (position(45 30 35),size(10 10 1))
{
reference(node(opp17icon1GroupA))
}
}
}
}
} |
In the
above example, I am teleporting (repositioning)
the User,
loading the interface scene graph,
creating icons and activating
icons with the PointAt Trigger (I created a set
of 3 icons for each parcel: rotation, switch bewteen
models, and a slider that allowed me to move the
building.) The icons are similar to "rollovers"
on web pages. When the icon is activated via the
PointAt Trigger, the icon would light up. When
you press button1 on the CAVE Wand (the Cave's
mouse) the building could be swapped, moved, or
rotated depending on which icon you activated,
Here,
switch opp17objectSwitchA(on)
{
object (file(32and31.pfb))
I am loading the building named 32and31.pfb under
the SwitchA, when switch A is on, the model 32and31.pfb
will be visible. |
|
 |
|