Virtual Worlds on the Internet
Another look at the VU Campus
by
F.E. Dozzi
Vrije Universiteit Amsterdam
August 2000
Contents
Introduction
This document was written for a Master Thesis project at the Vrije Universiteit
(VU) in Amsterdam. The goal of this project was to examine 3-dimensional
virtual worlds on the Internet (particulary worlds that are created in
the Virtual Reality Modeling Language (VRML)). I did this by doing an inventarisation
on several virtual worlds on the Internet. Other 3D technologies like Shout3D
[22], Pulse3D [23]
and Blendo
[24] are not discussed in this thesis.
In order to find out what it takes to build a virtual world and what
problems might arise in the process, I created a 3d virtual world that
is supposed to resemble a part of the real world, the Campus of the Vrije
Universiteit. A report about my findings concerning this virtual world
creation is also included in the thesis.
This thesis is part of the RIF-project
[1], which is a research project on Retrieval of
Information in Virtual Worlds Using Feature Detectors. This project
is a co-operation between the VU and the CWI (Centre for Mathematics and
Computer Science). Members of the RIF-team are Anton Eliëns (projectleader,
VU/CWI), Alex van Ballegooij (researcher,CWI) and Roland Blom (student,VU/CWI).
Some of the tools I have used for the creation of the virtual world of
the VU Campus were made by Alex and Roland.
My thanks go out to my parents and brother for supporting me in every
possible way to help me finish this project. I would also like to thank
my supervisors Anton Eliëns, Zhisheng Huang (VU) and Alex van Ballegooij
for their advice and support during the time I worked on my thesis. I also
thank all other people who have commented on my work in progress and gave
me new ideas and tips about the virtual world.
Structure of the document
After an introduction to VRML I will give a description of the most interesting
virtual worlds on the Internet. In the second part of the document the
design and creation of the VU Campus virtual community will be looked in
to. The various tools I have used will also be discussed. Finally I will
give an evaluation of both parts of this thesis.
Virtual Reality Modeling Language (VRML)
The Virtual Reality Modeling Language is a 3D interchange format. It can
be used to create 3D content in the same way as HTML (HyperText Markup
Language) can be used to create 2D content. VRML is a interpreted language
and thus can be used on every platform where a VRML viewer is available.
This makes it very much suited for the Internet. VRML files are ASCII text
files in which 3D semantics like hierarchical transformations, light sources,
viewpoints, geometry, animation, material properties and texture mapping
can be defined.
VRML versions
The first version of the VRML specification, VRML 1.0, was published in
1994. VRML 1.0 could describe static 3D scenes and objects but lacked several
of the key features like animation, interaction and behavior, that its
successor VRML 2.0 did include in its specification. Another difference
is the use of a hierarchical scenegraph structure in VRML 2.0 instead of
the linear structure that was used in VRML 1.0. VRML 2.0 was released in
1996. Six months later, in april 1997, a revised VRML 2.0 specification
that contained numerous fixes and some technical changes was published.
This revised version is known as VRML97 (ISO/IEC 14772-1:1997) [4]
and is backwards compatible with VRML 2.0 (besides some changes to the
Javascript and Java interfaces).
VRML 1.0 and VRML 2.0 will not be further discussed in this document.
Whenever VRML is mentioned in this document, VRML97 is meant.
VRML offers the following major features [2][3][6]:
Scene Graph Structure
VRML files are build up from entities that are called nodes. There are
54 different node types defined in VRML. These nodes range from geometry
primitives, appearance attributes, sound and several types of grouping
nodes. Data of the nodes are stored in fields of which 20 different types
are defined in VRML. Grouping nodes can contain besides fields also other
(children) nodes.
The VRML file structure is a directed acyclic graph. This is a tree
where all leaf entities are children nodes and all intermediate entities
are group nodes. This scene graph structure makes it simple to create complex
scenes out of more simple subparts.
VRML uses a coordinate system with three axes (x, y and z axis). These
axes are related in the way as shown in the following figure.
Linear distances are measured in metres and angles in radians. Colors are
specified in RGB (red-green-blue) values in the interval [0..1]. Time units
are specified in seconds. Every VRML 97 or VRML 2.0 file must begin with
this line: #VRML V2.0 utf8
coordinate system in VRML
The 54 different VRML nodes can be divided in three groups, Grouping
nodes, Children nodes, Field nodes. The Grouping nodes are a subset of
the Children nodes. Field nodes are nodes that can only be used to describe
the contents of a field. The standard VRML nodes can be extended
from within a VRML file by using the Prototype mechanism [see Prototyping].
The following tables will show the nodes that are available in VRML.
Grouping Nodes
Anchor
|
Billboard
|
Collision
|
Group
|
Transform
|
Children Nodes
Background
|
OrientationInterpolator
|
SpotLight
|
ColorInterpolator
|
PlaneSensor
|
SphereSensor
|
CoordinateInterpolator
|
PointLight
|
Switch
|
CylinderSensor
|
PositionInterpolator
|
TimeSensor
|
DirectionalLight
|
ProximitySensor
|
TouchSensor
|
Fog
|
ScalarInterpolator
|
Viewpoint
|
Inline
|
Script
|
VisibilitySensor
|
LOD
|
Shape
|
WorldInfo
|
NavigationInfo
|
Sound
|
PROTO'd child nodes
|
NormalInterpolator
|
|
|
Field Nodes
Appearance
|
ElevationGrid
|
MovieTexture
|
AudioClip
|
Extrusion
|
Normal
|
Box
|
FontStyle
|
PixelTexture
|
Color
|
ImageTexture
|
PointSet
|
Cone
|
IndexedFaceSet
|
Text
|
Coordinate
|
IndexedLineSet
|
TextureCoordinate
|
Cylinder
|
Material
|
TextureTransform
|
Every node can (and usually does) contain fields. These fields are the
parameters of a node that distinguish it from other nodes of the same type.
These parameters might be, for example, the size of a box defined by a
Box node or the intensity of a DirectionalLight node. Every parameter has
a default value that is used if no value for the parameter is specified
in the VRML file.
Two kinds of fields are present in VRML:
-
field
A field is a private parameter that will define (part of)
the initial state of a node and cannot be changed.
-
exposedField
An exposedField is a public parameter that also defines the
initial state of a node and can be modified by other nodes (through events
(see next paragraph)).
Data entered at a field needs to comply to the appropriate field type.
The following field types exist in VRML:
Field Types
SFBool
|
SFColor & MFColor
|
SFFloat & MFFloat
|
SFImage
|
SFInt32 & MFInt32
|
SFNode & MFNode
|
SFRotation & MFRotation
|
SFString & MFString
|
SFTime & MFTime
|
SFVec2f & MFVec2f
|
SFVec3f & MFVec3f
|
The field types can be divided in two general classes, the single-valued
fields (SF) and the multivalued fields (MF). The only difference is that
single-valued fields contain a single value and multivalued fields can
contain multiple values. All fields have strong type-checking, also between
SF and MF fields.
When creating VRML scenes, it becomes usually necessary to be able to
reference a previously used node (in the same file). Node referencing can
be achieved
by using DEF and USE keywords. The DEF keyword defines a name to a
node. The USE keyword can be used in every place where an instance of a
previously DEF'ed node is wanted. There are several reasons for this reference
mechanism. It can be used to make connections between nodes [see Event
Architecture] and to lower the number of resources (texture files, sound
files etc.) that need to be loaded, which results in a better performance.
It also happens often that nodes are repeated in a VRML scene (for example,
a scene of a forest of trees). Using DEF and USE prevents the author of
a scene to retype the exact same code for every single object. Prototyping
can also be used to prevent this.
Event Architecture
Nodes can communicate with each other by means of an event or message-passing
mechanism. Events can be generated and received by instances of node types
in which the names and types of these events are defined. A node with an
eventIn definition can receive an eventOut of another node. This eventOut
contains data which can be used to change something within the receiving
node. In order to make a connection from an eventOut to an eventIn a ROUTE
statement must be used. A ROUTE statement can only make a connection between
an eventIn and eventOut of exactly the same type. For example, routes from
an SFFloat to an MFFloat or from an SFString to an MFString are not allowed.
Sensors
Sensors are special nodes that are able to generate events. The TimeSensor
node generates events as time passes. The geometric events (ProximitySensor,
TouchSensor, VisibilitySensor, CylinderSensor, PlaneSensor, SphereSensor
and Collision) are triggered by user actions such as a mouse click or moving
close to an object. Dependencies may exist between sensors. For example,
a TouchSensor may result in a ProximitySensor being turned on. As an example
of sensors in VRML, the ProximitySensor and TimeSensor are both used below:
#VRML V2.0 utf8
Viewpoint {
position 0 0 15
}
DEF PROXSENSOR ProximitySensor {
size 10 10 10
}
DEF TIMER TimeSensor {
cycleInterval 5
}
Shape {
appearance Appearance {
material DEF BOX_COLOR Material {
diffuseColor 1 1 1
transparency 0
}
}
geometry Box {
}
}
Shape {
appearance Appearance {
material Material {
diffuseColor 1 0 0
}
}
geometry Sphere {
radius 0.25
}
}
ROUTE PROXSENSOR.enterTime TO TIMER.startTime
ROUTE TIMER.fraction_changed TO BOX_COLOR.transparency
ROUTE PROXSENSOR.exitTime TO TIMER.stopTime
This code will show a VRML scene of a blue box with
a red sphere inside it. When the user approaches the box (to be precise,
enters the ProximitySensor that is located around the box), it will become
totally
transparent in 5 seconds. The sphere will become more and more visible
during this time. When the user leaves the ProximitySensor the TimeSensor
is halted so the box will stop becoming more transparent. If the user approaches
the box again, the box will restart to shift from solid to transparent
form.
screenshot of sensor example
Scripts & Interpolators
The use of events is limited because of the strong type checking that is
performed on the data going from eventOut to eventIn. This is the reason
that scripting is supported by VRML. With scripting events can be processed
after being send by an eventOut and before being received by an eventIn.
To do this an eventOut is routed to a Script node which performs one or
more operations on the data before routing it to an eventIn. The scripting
language that must be used to alter the data is either Java or Javascript.
Most VRML browsers don't support Java. Javascript is usually supported,
but some browsers only support a subset of Javascript named VRMLScript.
This might give problems like script nodes that work in one browser but
fail to work in another.
An Interpolator node is a node that is needed for stepwise keyframe
animation. It contains a list of keys and a corresponding list of keyValues.
An interpolator is often used together with a Timesensor node of which
time values will be routed to the interpolator. The interpolator will use
a time value as a key and the matching keyValue will be send to an eventOut.
Key and keyValue pairs that are not listed in the interpolator are automatically
generated by the interpolator. When combining an Interpolator with a Timesensor
the keys have to be in the interval [0, 1], because the Timesensor uses
values within this interval. When an Interpolator is getting its eventIns
from a Script Node there is no value restriction. Six different types of
interpolator nodes exist, each with a different type of value to be interpolated:
ColorInterpolator, CoordinateInterpolator, NormalInterpolator, OrientationInterpolator,
PositionInterpolator and ScalarInterpolator.
The following code is an example of a ColorInterpolator node and a Scipt
node. The resulting VRML scene shows a sphere
that changes colors continuously. It cycles through the colors that are
listed in the ColorInterpolator. Each time the sphere is clicked with the
mouse the Script node will receive an eventIn after which it will construct
a string which is routed to the Text node:
#VRML V2.0 utf8
DEF COUNTER Script {
eventIn SFTime touchTime
field SFInt32 touchCount 0
eventOut MFString outputString
url "javascript:
function initialize() {
outputString = new MFString('Click sphere','to
increase count');
}
function touchTime(value, time) {
touchCount++;
outputString = 'Count: ' + touchCount.toString();
}
"
}
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0 1
}
}
geometry DEF TEXT Text {
fontStyle FontStyle {
justify "MIDDLE"
size 0.5
}
}
}
DEF TIMER TimeSensor {
cycleInterval 10
loop TRUE
}
Transform {
translation 0 -1 0
children [
DEF SENSOR TouchSensor {
}
Shape {
appearance Appearance {
material DEF SPHERECOL
Material {
diffuseColor
0 1 0
}
}
geometry Sphere {
radius 0.2
}
}
DEF CI ColorInterpolator {
key [0, 0.33, 0.66, 1]
keyValue [ 0 1 0,
0 0 1,
1 0 0,
0 1 0 ]
}
]
}
ROUTE SENSOR.touchTime TO COUNTER.touchTime
ROUTE COUNTER.outputString TO TEXT.string
ROUTE TIMER.fraction_changed TO CI.set_fraction
ROUTE CI.value_changed TO SPHERECOL.set_diffuseColor
screenshot of script and interpolator example
Prototyping
The concept of prototyping is allowed in VRML as a method to extend the
standard set of node types. With prototyping geometry, properties, behaviors
or a combination of these can be encapsulated and parameterized. For example,
if you want to create a couple of boxes that have the same geometry but
different colors, you can use a prototype for a box with a variable color.
PROTO ColorBox [
field SFColor boxColor 1 1 1
]
{
Shape {
appearance Appearance {
material Material {
diffuseColor IS boxColor
}
}
geometry Box {
}
}
}
The instantiation ColorBox {} will produce a white box (white
being the default color in this PROTO), while ColorBox { boxColor 0
0 1 } will result in a blue box.
A prototype consists of a prototype declaration and a prototype definition.
The prototype declaration contains: - a list of public eventIns and eventOuts
that can send and receive events. - a list of public exposedFields and
fields and their default values.
The prototype definition contains one or more nodes and optionally
routes and other prototypes that are used inside the the prototype being
defined.
To create a prototype in a VRML file PROTO can be used. Another option
is to define prototypes in external files. These prototypes can be referenced
by EXTERNPROTO which contains a url that points to the location of the
external prototype.
Distributed Scenes
Two mechanisms are provided by VRML that allow a VRML scene to be scattered
all over the Internet. With the Inline node a VRML file from anywhere on
the World Wide Web can be included in a VRML file. The EXTERNPROTO node
allows the inclusion of node definitions from an arbitrary place on the
WWW. Of course 'anywhere' can also be on your own computer, so this gives
the opportunity to divide a VRML scene in different files, if you might
prefer.
The use of an Inline node is straightforward as can be seen in the following
example.
Inline {
url "http://www.cs.vu.nl/justaname.wrl"
bboxCenter 0 0 0
bboxSize 25 25 25
}
The above code will read and display every node in justaname.wrl.
bboxCenter and bboxSize can be set to define a bounding box around all
nodes in that file. This can be done for optimization. Without a bboxSize
(default is -1 -1 -1) the VRML browser needs to calculate it on its own,
if needed.
The EXTERNPROTO is not very different from the Inline node. Suppose
a file with url http://www.cs.vu.nl/justaname2.wrl lists the ColorBox PROTO
discussed earlier and some other prototypes. When the following piece of
code is processed, it will load the ColorBox PROTO.
EXTERNPROTO ColorBox [ field SFColor boxColor ]
url "http://www.cs.vu.nl/justaname2.wrl#ColorBox"
}
Navigation in a VRML scene
In order to have a useful VRML scene it is often necessary for the user
to be able to move through the scene. VRML distinguishes 4 different standard
modes of navigation (Walk, Fly, Examine and None). These modes are usually
supported by all VRML browsers. The Blaxxun Contact browser (which needs
to be used for the VU Campus world) offers three other modes (Slide, Pan
and Rotate) as well:
-
Walk
The Walk mode is one of the most natural ways to navigate through a
VRML scene. In this mode the user will experience a sense of gravity which
means that the user can't move into the sky, but is able to walk up and
down on elevations. A staircase can be ascended or descended because height
differences of no more than 0.5 metres will be crossed. The avatar will
bump into any other objects.
-
Fly
Navigation by flying is a movement mode that is unaffected by gravitation.
Movement can be done in any direction, until an object blocks the way.
-
Examine
Examine mode is an extended Rotate mode. Examine will not only rotate
objects around the y-axis, but is also capable of rotating them around
the other axes. It offers a good way to examine objects from all sides
because it is a lot easier than having to walk around an object and keeping
it in your line of sight. Be aware however that this navigation type could
easily disorientate the user, because it is also possible to pass through
objects and thus wind up inside one.
-
None
This navigation mode is actually no navigation mode at all. It tells
the browser to make the other navigation modes unavailable. This is very
useful if the author of a scene wants complete control over where the user
is and can go to. For this purpose a viewpoint tour or an own system of
movement controls inside the scene (in the form of buttons in VRML, for
example) can be created.
-
Slide
Sliding is a type of navigation where the user will always face the
same direction. Left and right will, instead of turning the user
left or right as in Walk mode, make the user move to the left or right.
Forward and back will operate as expected.
-
Pan
Forward and back will make the user look up and down instead of moving
forwards and backwards. This is a good mode for looking up and down a large
object just in front of the user.
-
Rotate
Rotate mode will rotate around the point where the mouse pointer is
at, around the y-axis using the left and right controls. Forward and back
will operate normally.
VRML viewers do have two other options that are related to navigation:
-
Gravity
The Gravity option controls the existence of gravity in the scene.
When on, a user that walks off a ledge will fall down on a lower object
(if any). When gravity is off, that same user will be floating in air and
thus be capable of just stepping on the ledge again.
-
Collision
The Collision options control whether the viewer will check for collision.
With this options on, a user will be blocked by objects and will have to
go around them to pass them. Collision turned off will result in the user
being able to move through objects.
Virtual worlds on the Internet
Introduction
Virtual worlds are 3-dimensional representations of real or imaginary places
and objects, which the user can examine from all sides and angles. The
user is depicted inside a virtual world by an 3D representation, an avatar.
The virtual world can be viewed through the eyes of the avatar or from
a third person point of view, where the user can see it's own avatar while
navigating in the virtual world.
Virtual worlds can roughly be divided in two categories, the multi-user
worlds or communities and the single-user worlds. Single-user worlds are
worlds where the contents of these worlds are transferred to the user's
own computer and only the user can wander around in this world. These kind
of worlds are mostly being used for the visualization of objects, ranging
from a car to a complete city. At this moment, especially the visualization
of 3D objects for product demonstrations is quite popular.
A multi-user world differs from a single-user world in a very important
way. A multi-user world can be accessed by multiple users at the same time.
The actions that the users make need to be visible to the other users.
For example when one user enters a room the people in that room must see
him come in. This is done by shared events. The events that occur in a
multi-user world are distributed to the computers of all other users. This
distribution is done by a server which sends all shared events to all users'
local copy of the virtual world.
In this chapter a description will be given of several of these multi-user
virtual worlds. The focus will be on virtual worlds that show their 3D
content in VRML.
Requirements
Software
To be able to view a VRML world, a VRML browser is needed. Most available
browsers today are plugins for Internet browsers like Netscape Navigator.
Regrettably those plugins are (almost) only available for Windows 95/98/NT/2000.
For a multi-user world a special multi-user browser is needed that is capable
to handle shared events and the (Java-based) chatboxes.
Virtual multi-user worlds need a server that distributes the changes
in the virtual worlds to all users. One of the major servers at this moment
is Blaxxun Community Server [8].
Other Servers are Helios
[9], DeepMatrix
[10], VNET
[11] and Active
Worlds Server [12].
For a list of existing VRML browsers and servers see [Appendix
B].
Hardware
The large virtual worlds need a fast computer to run smoothly. Even more
important is a good graphics card with enough memory to be able to display
big textures without difficulties. An average personal computer with a
3D-accelerator graphics card is a good system to walk around in virtual
worlds without problems.
Characteristics of a multi user virtual world
Good multi user virtual worlds need to comply to at least some (and preferably
all) of the following characteristics:
Interaction
Inside a virtual world interaction should be possible because it makes
a world more lively. For example, users could be able to open doors or
operate vehicles by walking into objects, clicking objects or making specific
mouse movements.
Animated objects may also enhance a virtual world very much. For example,
a working fountain at the center of a square and some driving cars
on an otherwise empty street may greatly improve the outlook of a virtual
scene. Another nice addition to a scene might be the use of sound effects.
When the user approaches the fountain he could hear running water and the
cars can make engine sounds when the user is in their vicinity. Sound can
however get annoying real quick, so the maintainer of a virtual community
should try to avoid overkill.
Support for multiple users
More than one user at the same time must be able to enter the world. Users
should be aware of those other users by being able to 'see' them in some
way. A simple listbox with the names of the users would do that trick,
but since we are talking about 3D virtual worlds, this is not enough. Avatars
should not only be visible but also be animated so users can see where
other users are and where they are going. This adds significantly to the
multi user experience.
Another multi user feature is the ability for users to communicate
with each other. Although it is technically possible to let users actually
talk to each other, the communication methods are limited to text and avatar
gesturing. The text communication might be done by typing in a chat-window
or by sending and receiving mail in their virtual mailbox. Avatar gesturing
is another, very interesting, form of communication. Some virtual communities
offer about a dozen different gestures which can be used to show emotions
to others. A user can make his avatar wave, smile, look happy or angry
and so on.
Immersion
The ultimate form of virtual reality is completely immersive VR. This type
of VR is supposed to give the user an experience where he is completely
inside a 3D
virtual world and doesn't have to take any reality into account. In
the case of virtual worlds generated in VRML it is obvious that this is
difficult to achieve, because a VRML world is usually viewed on a 2D computerscreen
and manipulated by mouse and keyboard (although the specification of VRML
doesn't say anything about display types and could very well be viewed
on more immersive display systems). However, virtual worlds (and virtual
communities in particular) will give a more immersive feeling to the user
when additional features are embedded inside the virtual world. The typical
additional features of a virtual community
are text, site navigation buttons, hyperlinks (to other VRML scenes),
chat-windows and advertisement banners. Because large parts of text don't
read very well in VRML, it is often displayed in HTML format in a different
frame of the browser (assuming an Internet browser with VRML plugin is
used to access the community).
Some of the other features might be integrated inside the virtual world.
The site navigation buttons and links to other VRML scenes might be represented
as Anchor'ed objects and the advertisements could become Billboards scattered
around the VRML world. Even the chat-window (usually a Java-applet in another
browser frame) can be embedded in VRML in the form of a HUD (heads up display).
The more parts of the world are taken out of the HTML-frames surrounding
the VRML-frame and are included inside the virtual world, the more immersive
this world becomes. The main advantage of a world with a high immersion
level is that the user will experience the feeling of being immersed inside
that world.
Virtual Worlds
In this chapter a description will be given of several virtual communities
and their servers. A table of properties for these virtual communities
is listed in [Appendix A]. For a list of available
servers and browsers see [Appendix B].
Blaxxun Community Server
The Blaxxun Community Server [8]
offers a lot of features for virtual communities. The most interesting
features that communities based on the Blaxxun Community Server have are
listed here:
-
3D Places and Avatars
Large parts of these communities consist of 3D places, created in VRML,
which can be visited by users. Each 3D place has a Java-based chatbox where
people can interact with each other. Each user is represented by an 3D
avatar, which can be chosen from an avatar library or created by the user
himself. A basic set of avatar gestures (wave, smile, laugh etc.) is available
to animate the avatars.
-
Membership
Users may enter a community for the first time as guests. This gives
them the opportunity to find out what goes on in the community. If a user
wants to join a community he can become a member of this community. Virtual
communities offer additional features to their members, for example members
may own a (3D) virtual home, which also serves as a private chatbox.
-
Economy and Social Status
Members who participate actively in the community earn virtual money
and experience points. The money can be spend in virtual shops where furniture
for houses can be purchased. Experience points may give a member additional
rights and privileges, such as access to elite member areas and the opportunity
to apply for virtual jobs in the community. These jobs vary from security
guard to groundskeeper and from shopkeeper to major.
-
Objects
Objects in communities are virtual items that can be created, traded,
dropped, picked up and deleted. If a member wants to decorate his home
with furniture he can buy items in a virtual shop. These items are then
placed in the member's 'backpack'. In certain parts of the community like
the member's home these items can be dropped and moved around. Because
these objects are 'shared' other users can immediately see the manipulations
performed on the objects.
The following worlds are based on the Blaxxun Community Server:
Cybertown
Cybertown [13]
is one of the largest (VRML) communities on the Internet at this moment,
both in size and in number of members. Cybertown consists of a vast amount
of 3D places, among which are a casino, pool, city hall and stadium. In
the casino several (mostly Java) games can be played as well as a VRML-based
bowling game. Cybertown offers also multi user games where users have to
interact with each other to play it. In the stadium a multi user VRML 'soccer'
game between two teams can be played. Members can also join in a multi
user adventure game where two teams of players compete in missions and
battles. Cybertown has more than 3000 interest clubs where members may
discuss special topics of interest.
Cybertown community
Soccercity
Soccercity [14]
is a virtual community specifically meant for soccerfans. The language
used here is german. It consists of some rather small VRML environments
and has the normal features of the Blaxxun worlds, like the membership,
homes and shops where some soccer-related objects can be bought. A little
VRML soccer game can be played here and there is a small amount of information
about soccer available on html-pages.
Soccercity community
Learnetix
Learnetix [15]
is a community adressing German schoolchildren who can, besides moving
in not very large virtual places and chat with each other, ask other users
for help with their homework. This community also supports membership,
housing and shared objects. Learnetix offers more than 1000 clubs which
can be joined by members. A large part of this world consists of 2D information
in the form of puzzles, quizes and information about classes like math,
german and english.
Learnetix community
Canal Plus Second world
The Canal Plus Second World
community [16] is a place for artists and art fans.
The main language used here is french. Several real world places that are
located in Paris can be explored in this community. For example the Louvre
Museum is completely build in VRML, where people can see lots of art and
often can get additional information about pieces of art on an html-page.
There are several commercial areas, where people can examine products in
3D. A nice example is the Peugeot showroom where several cars can be viewed.
Canal + Second World community
Since all of the above communities are running on the same type of server,
the immersion of these communities is fairly similar. A rather small part
of the
browser window is reserved for a VRML scene, because the communities
have a lot of surrounding frames in which site navigation hyperlinks, advertisements
and
the chat-window are displayed. In the VRML scenes links to (some of
the) other scenes are available. This adds a little immersion, but in total
the amount of
immersion in these communities powered by Blaxxun is rather low.
DeepMatrix
DeepMatrix [10]
by Geometrek is an open source system for multi-user VRML worlds. It consists
of a server where the VRML files are hosted and an Java-applet in which
a normal VRML browser is running. With DeepMatrix it is possible to distribute
shared events to several users. The available virtual worlds are rather
small and don't offer much interaction besides the chatbox. It does supply
a small amount of avatars to choose from.
Deepmatrix communities have two frames in the browser window, the actual
VRML scene frame and the frame for the chat-window. Empty space is surrounding
these frames, so the VRML frame could become a lot larger than it is now.
Links to other worlds are offered inside some scenes.
A Deepmatrix world
VNET
VNET [11]
is an open source multi-user system which claims to just need a normal
browser with VRML plugin for access. However it doesn't seem to work with
Viscape Universal. VNET is a multi-user system which offers only basic
functionality like a chatbox and a small avatar library. VNET has no immersion
whatsoever, which is not surprising since there is nothing (besides the
Java chat-window) to embed in the scenes. Just as with Deepmatrix the VRML
frame could
get a larger size than it has now.
VNET's Town Square world
Helios
Helios is a multi-user server, made by ParallelGraphics
[9], which hosts about 20 virtual worlds. A special
browser client, Islands, is needed to be able to connect to this server.
The browser has a HTML-page with avatars and objects on it, which can be
dragged and dropped inside the 3D world. The objects that are placed into
the world this way, can be resized and moved throughout the world. A disadvantage
of the scenes that are available on this server, is that they seem to consist
of a couple of big textures displayed on few objects, which decreases the
reality level of the scenes. Immersion is non-existent, even links to other
scenes are missing. The frames containing the scenes list, the chatbox
and the objects can be hidden to obtain a larger VRML frame.
Red Square world on Helios server
Active Worlds
To view Active Worlds, you need the special
Active
Worlds [12] browser. These worlds are not created
in VRML, but in a different format called RenderWare (*.rwx files). Every
object in a world has its own file, which results in a lot of files in
case of a big world. It is not possible to make your own Active Worlds
unless you buy the development software. Membership of Active Worlds costs
$19.95 a year, contrary to the other discussed communities which are totally
free of charge. Active Worlds has some avatar gestures built in, so with
one click of the mouse it is possible to let your avatar for example smile,
jump or wave. Another feature is to build your own house or city from lots
of ready-made objects, textures and sounds online. Active Worlds uses a
limited Level of Detail (LOD), which means that only objects that are within
a defined distance to your avatar are being drawn in the world. With this
LOD it could happen that when walking towards a distant horizon suddenly
all kinds of objects pop up in front of you.
The ActiveWorlds browser is divided in a couple of frames. The most
important frame is the one where the actual virtual world is shown. The
other frames are the chat-window, a frame with help information about the
way ActiveWorlds works and a frame that supplies information about other
virtual worlds, other users inside the world and friends that are also
in the community at that moment. All these other frames lead to very little
space being available for the 3D world itself. It is possible to turn these
other frames off, but since they carry interesting features this might
result in constantly turning the frames on and off. The immersion of
Activeworlds could be high if the worlds would integrate (some of)
the information of these frames inside them, but this is usually not the
case.
Active Worlds
Designing a virtual community
Creating a virtual community is next to impossible without some good tools
that may assist the author in creating the VRML scenes. Often 3D designing
programs like 3D Studio Max are used for this purpose. With these kind
of programs it is possible to create rather complex 3D models which in
turn can be converted to VRML. The VRML files that are made this way are
usually very large so they should be optimized to get an acceptable renderspeed.
Creating VRML using this method implies that the author needs to have good
knowledge of these design programs, in other words, he should be some sort
of graphics expert.
I have used a different approach. The programs I have mainly used to
create VRML scenes are made by members of the RIF-team. The idea behind
this was to find out whether people who are no graphics experts, could
use these tools to create reasonably complex VRML scenes in a more simple
way than possible with other tools. In order to make this whole process
a little more interesting, we decided that I would create a virtual community
of part of the Campus of the Vrije Universiteit, a place where I have spend
a lot of time during the past years.
Because a virtual community needs a server to make its features available
to users (clients) that want to access the community, I have used the Blaxxun
Community Server. This server is at the moment the only available server
with many features. A user that wants to visit a community based on this
server needs to have the Blaxxun Contact VRML browser installed as a plugin
in the webbrowser he uses. In the next paragraph there will be an explanation
of the things that have to be done to install the server on a computer
and to publish VRML scenes on it.
Installing the Blaxxun Community Server
Before installing the Blaxxun Community Server, a webserver has to be installed
in order to make it possible for people to access the community through
the Internet. I have chosen to use the Apache
webserver [17] because it is one of the most used
webservers on the Internet. Furthermore it can be used free of charge.
For the examples in this chapter I have used the default directories of
both the Apache webserver and the Blaxxun Community Server, which are
C:/Program Files/Apache Group/Apache/ and C:/blaxxun/CommServ/
respectively.
The hostname in the examples is bruin011.cs.vu.nl.
Apache Webserver
Installing the Apache HTTP-server is quite simple. After selecting typical
install and supplying the installation directory the program installs.
The next thing to do is configuring the webserver, which is a little more
difficult. In the file httpd.conf several options have to be set.
ServerAdmin you@your.address
DocumentRoot "C:/Program Files/Apache Group/Apache/htdocs"
<Directory "C:/Program Files/Apache Group/Apache/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
The above text should be replaced by a text that looks similar to the
text below (with the correct emailadress, hostname and directories). Note
that these texts do not appear entirely the same in httpd.conf, because
all options are explained in that file.
ServerAdmin fedozzi@cs.vu.nl
ServerName bruin011.cs.vu.nl
DocumentRoot "C:/blaxxun/CommServ/commserv/community"
<Directory "C:/blaxxun/CommServ/commserv/community">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /csadmin c:/blaxxun/CommServ/csadmin
ScriptAlias /csadmbin c:/blaxxun/CommServ/csadmbin
Alias /commserv c:/blaxxun/CommServ/commserv
ScriptAlias /csbin c:/blaxxun/CommServ/csbin
<Directory "C:/blaxxun/CommServ/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "C:/blaxxun/CommServ/csadmin">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from bruin011.cs.vu.nl
</Directory>
The last step in installing Apache is to start it. This can be done
in the Services menu that can be found on the Control Panel of Windows.
Apache can be started manually each time, but it is best to select automatic
install which will start Apache whenever the computer is booting.
Blaxxun Community Server
Blaxxun Instant Community 1.0 is the version of the Community Server I
have used. While installing some information has to be provided. This information
is the installation directory, the (full) hostname of the computer, the
port used by the HTTP-server (default: 80), the base port to be used by
the Community Server (default: 2000), the SMTP mail server and the emailadresses
of the maintainers of the community (for problem reports). Usually the
default ports can be used.
After installing the Community Server services have to be started.
This is also done in the Services menu of the Control Panel. The Blaxxun
Community Server has 7 different services. The first three need to be started
for the Community Server to run; the other four are optional:
-
idserver
The ID server handles logins and logoffs by users.
-
mnserver
The Motion server handles the locations and location changes of users
in the scenes.
-
txserver
The Text server handles all text interaction between users.
-
auserver
The Authentication server handles user registration and authentication.
-
cpserver
The Proxy server handles TCP connections by clients (to work through
firewalls). Normally clients use UDP connections.
-
haserver
The HTML Access server handles client connections of Blaxxun's HTML
chat client.
-
mdserver
The Moderation server takes care of moderation of the users that are
chatting.
More information about the services can be found at Blaxxun
Interactive's server helppages [18].
After all necessary services are started the community can be accessed
by entering the hostname as an URL (Uniform Resource Locator) in a webbrowser.
The administrative tools of the community can be accessed at http://bruin011.cs.vu.nl/csadmin.
Publishing a virtual world
Publishing a virtual world on the community can be done only partly with
the administative tools. After clicking 'Design', 'Place Design' and the
'Create Place', some information has to be supplied about the world to
be published. This includes a unique identifier, the name of the world,
a short description and screenshots of the world that will be shown in
2D-mode. The files of the scene (VRML files and texture files) to be published
have to be copied manually into the c:/blaxxun/Commserv/commserv/community/places/<worldname>/vrml
directory and the screenshots in c:/blaxxun/Commserv/commserv/community/places/<worldname>/images.
In order to be able to access scenes by clicking on them in the chat-windows,
the file idserver.cfg in directory c:/blaxxun/Commserv/commserv/etc/ needs
some editing. For example, to add the VU Campus world, the following line
is added to that file:
SHOWSCENE http://bruin011.cs.vu.nl/commserv/communityplace?plc=VUCampus&ID=000000000000000b&ac=3D&IE=x.bxx
Vu Campus
After doing all of the above, the virtual world should now be accessable
for everyone on the Internet.
VRML Tools
Preprocessor
Alex van Ballegooij (CWI) has written a VRML preprocessor in Perl. It works
almost the same as the C preprocessor. When programming in VRML it is not
possible to use the C preprocessor because it can't cope with VRML-comments
(which start with an '#'). The VRML preprocessor can handle the VRML-comments,
because the identifiers of the preprocessor begin with '#@', so the difference
between an identifier and a comment can be noted. With the preprocessor
it is possible to include (#@include) files in another file (a prototype
of a tree could for example be included in a VRML-file describing a forest).
Some other options are '#@search' to search for include-files in other
directories and the '#@define' command to define identifiers that can be
used together with '#@ifdef' and '#@endif' to prevent including the same
file more than once. More information about the VRML preprocessor can be
found at Alex'
VRML preprocessor webpage [19].
bmp2map
The bmp2map program was also written by Alex van Ballegooij. Bmp2map is
a program that creates map-files of Windows Bitmaps (.bmp). The program
accepts 24-bit bitmaps as input and optionally a colormap which describes
what colors will be mapped on what characters. Without a colormap the program
will assign the '.' character to black and the next available character
to the next color in the bitmap, but it might sometimes be useful to assign
them yourselves. The output of bmp2map will be a generated map-file which
can be used for the configuration files of vrmlgen. The next pictures show
what map-file bmp2map will generate for the bmp-file (size 20x15 pixels).
input bmp-file
|
output of bmp2map
|
The following colormap file will generate a map-file where all 'a' characters
are substituted by 'r' characters. Note that the colormap is in BGR (blue-green-red)
format instead of RGB.
. 0.000000 0.000000 0.000000
r 0.000000 0.972549 0.972549
Vrmlgen
Vrmlgen [20]
is a program created by Roland Blom. Vrmlgen offers a quick and relatively
simple way to create simple objects in VRML. The original idea behind the
program was to build objects like Lego
[25]. Lego consists of building blocks that can be placed
next to and on top of each other. Vrmlgen uses the same concept. Every
3D object that is created with it, is constructed using (a lot of) basic
blocks. If possible the program will combine basic blocks into an IndexedFaceSet.
This way the number of IndexedFaceSets will be kept to a minimum. The program
needs a configuration file with options and maps of an object (or objects)
as input.
The most important options of vrmlgen are described in the following
text.
In a map-file every character represents a building block. The attributes
of the building blocks will depend on the various options that can be specified
in the configuration file. In principal every printable ASCII-character
can be used, but some characters have a special purpose. For every '.'
in the map vrmlgen will not generate anything, because the '.' means there
is an empty place on the map. An option can be turned on that will instruct
vrmlgen to generate viewpoints where a '<', '>', '^' or a 'v' is on
the map. The '<' will become a viewpoint with orientation to the left
and so on.
The first thing that has to be determined is the unitsize you want to
use for a basic building block. A block must be of the form x * y * z (where
x = z and y = 1.5x). So a unitsize of 0.5 will result in a block that measures
0.5 by 0.75 by 0.5.
After the tag [colors] every character in the map file can
be assigned a color. The default color is yellow. The color should be given
in RGB format, just like in VRML. The following example will let vrmlgen
generate a gray block for every 'a' in the map, a blue block for every
'b' and a green(ish) block for every 'c':
[colors] {
a 0.72 0.72 0.72 0
b 0.00 0.00 1.00 0
c 0.06 0.55 0.06 0
}
Vrmlgen offers the ability to map textures on objects. At most 6 different
textures can be added to an object. On the top, bottom, left, right, front
and back faces of an object textures can be mapped by specifying the filename
(and pathname) of the image file and on how much horizontal and vertical
building blocks one instance of the texture image should be mapped. For
example, suppose the top face of an object is build up out of 20 (horizontal)
by 15 (vertical) blocks and in the vrmlgen configuration is specified:
[toptextures] {
c 5 5 0 "grass.png"
}
This will result in a top face where the texture image is mapped to
12 times (four rows of three images). For the other faces the according
tags ([fronttextures], [bottomtextures], [righttextures], [fronttextures]
and [backtextures]) can be used. In case the four sidetextures
all should be the same, the tag [sidetextures] can be applied.
The largest part of the configuration file consists of the maps of the
object(s) that vrmlgen will generate. The size and amount of the maps that
follow must be specified first. A map can be used repeatedly by using the
repeat
statement.
repeat 2 means that the previous map will is repeated
twice.
[maps]
dx 20
dz 15
nrmaps 10
/* maps 1 to 3 listed here */
repeat 6
/* map 10 listed here */
An extra feature of vrmlgen is that objects, that already were created
as prototypes, can be inserted in the world by adding a character in the
map-file for each instance of that object you want in a world and add some
lines to the corresponding vrmlgen configuration file. Vrmlgen will place
these objects in the appropriate locations in the world. For example, you
may want to include a tree on several places in the map. By including the
following lines to the configuration file and adding the 't' character
to the right places of the map file this can be done. Anything in between
the [literal] and [/literal] tags behind the [litincludes]
tag will exactly be added to the generated VRML file. The first number
(1 or 0) after the t in the [specialnodes] tag indicates
whether the t does or does not also represent a block on the map.
The second number (1 or 0) indicates whether an offset is or is not specified
after the map the t occurs in. If so, this offset will replace the variables
in the translation field. The third number specifies the number
of extra parameters that are specified after the map. In the (simple) example
of the shed the tree will have an extra translation to position the bottom
of the tree on the grass.
[litincludes]
[literal]
# VRML code for the Tree PROTO is added here
[/literal]
[specialnodes] {
t 0 1 0
[literal]
Tree {
translation %.2f %.2f
%.2f
woodtexture ImageTexture
{url "treewood.jpg"}
leavetexture ImageTexture
{url "treeleaves.jpg"}
}
[/literal]
}
The bmp-files and configuration file that are needed for the example
of a shed can be seen in [appendix C]. The resulting
VRML
scene is shown in the following picture.
VRML scene of a shed, generated by vrmlgen
Vrmlpad
For creating VRML scenes by hand, which is not recommendable for anything
but the simplest scenes, Vrmlpad is an excellent program. This VRML editor
is created by ParallelGraphics
[9]. Vrmlpad offers besides syntax highlighting (which
is also possible with standard editors like vim and Emacs) also syntax
checking and auto completion of partly typed keywords. A VRML file is in
Vrmlpad also displayed as a tree which makes it easy to distinguish between
grouping and children nodes.
Spazz3D
Spazz3D [21] is
a program that is very useful for creating simple 3D objects. With simple
3D objects I mean objects that are a combination of basic VRML shapes (box,
cylinder, cone and sphere). For example a tree (cone & sphere) and
a chair (several boxes) can be quickly created with Spazz3D. It is also
possible to create some simple extrusion shapes, however this is a lot
harder to do. Spazz3D saves the created object in its own file format but
has an option to import & export VRML files.
Designing worlds
Creating maps of the world
When building a world with vrmlgen it is necessary to create maps of the
objects that should appear in that world. It is very important to keep
the scale of all the maps equal when you're using different maps for different
objects, because otherwise you have to rescale the objects afterwards in
the VRML file which can be a very tedious thing to do. Something else to
keep in mind is to limit the number of different characters in your map-files.
The more characters you use the more difficult it gets to keep track of
what character relates to what color or texture.
Texture mapping objects
To make a scene look more like reality, textures should be mapped on the
objects in the scenes. In VRML each face (side) of an object can be assigned
a different texture. Doing this by hand is a very tedious job to do, because
every texture will need a TextureCoordinate node (with sometimes large
amounts of values) to map it to a face in the correct way. Vrmlgen calculates
these values automatically.
The filesize of a VRML file is usually the smallest part of a large
VRML scene. The texture files on the other hand are often quite large.
The larger the files are, the longer of course the loading time of a VRML
scene will become. Another disadvantage is the fact that the world will
render a lot slower while the user is moving around the scene. So it is
recommended to try to keep the filesizes of the textures as small as possible.
However, (smaller) images that are used as textures on larger faces will
blow up the pixels. The choice has to be made here between a fast(er) or
a nice(r) scene. There are two techniques that will help in combining these
two choices:
-
Repeating textures
Some objects with large faces need textures that have some kind of
repetitive structure. For example, a brick wall or a side of an office
building covered with the same windows can very well be mapped with a relatively
small texture. For the brick wall a texture of about five rows of five
bricks could be used. The texture should not be taken to small, because
it will look monotonic and unreal if ,for example, just one brick is repeated
over and over again. It should be avoided that it is easily visible for
the user that the same texture is repeated. By using these smaller texture
images the quality of the scene remains as good as unaffected, but loading
time and render time will improve.
-
Using grayscale images
In VRML grayscale images can be used for colored textures by assigning
a color and a grayscale texture to the object that is to be mapped. VRML
will display both the texture and the color so it will look as if a colored
texture is used. The restriction that applies here is that only one color
can be assigned to an object, so this can only be done by texture with
one color. The use of grayscale images is, for example, very useful for
the brick wall textures or the texture of a grassland.
Limiting a virtual world
Every virtual world has a certain size. If a user goes beyond the size
of a world there is a big void. In VRML only the Background Node continues
endlessly. A creator of a virtual world probably wants the users to stay
within the boundaries of the world. Therefore it might be a good idea to
limit the virtual world by placing 'walls' at the edges of the world. To
keep the world looking like reality it will be necessary to add textures
to these walls. These textures could for instance be pictures of trees
or buildings, at least objects that are large enough to block the vision
of a person in real life. In order to prevent users of the virtual world
to bump into the surrounding walls and thus see clearly it's just a wall
with a texture (and probably a very blocky one) on it, you could put up
other walls a couple of metres in front of the textured walls. These other
walls can be made transparent so users will be blocked by these walls before
they even reach the outer walls. It is also possible to put the world inside
a big box in such a way that the sides of the box are in the right position.
A user inside a box will always be able to look through the sides, because
they will be transparently rendered.
Limiting a virtual world as described above is not foolproof. As long
as a user stays in Walk mode he will indeed stay caught inside the world.
However if a user turns on the Examine mode, collision detection is no
longer applied which will result in the user's avatar being able to move
through objects which in turn can lead to the avatar ending up outside
the world limits or even worse inside an object. The Rotate navigation
mode creates the same problem although collision detection is still applied
for most objects except the object that the user is rotating around, so
if the user for example rotates around the 'floor' of the world he might
get stuck beneath the world. If the virtual world is not only limited by
'walls' but also by a 'ceiling' the Fly mode poses no problem at all. The
nature of the virtual world that is being build is important in determining
whether it is necessary to limit the world. When you are building part
of the real world as a virtual one, boundaries are a good addition to your
world. If the world however is a imaginary place there are no arguments
against positioning it floating in a large empty sky.
CASE: Virtual VU Campus
This paragraph will give a description of the way I created the virtual
world of the VU Campus, the decisions I had to make and the problems I
had to overcome.
General
In order to automate several of the standard actions that are needed to
produce a VRML scene, I have used a Makefile which makes it quite simple
to make small adjustments to an inputfile needed for vrmlgen and quickly
generate the resulting updated VRML file. The structure of the directories
and files that I have created in the process is as follows:
The main directory stores the files Makefile, vu.prewrl and vrmlgenoptions.lego
and the following subdirectories:
-
bmp: All bitmaps that will be converted into maps are contained in this
directory.
-
colormaps: I have chosen to supply every bitmap its own colormap that will
be used to generate the correct map files with bmp2map. Another option
would have been to use a single colormap for all bitmaps, but this results
in a large number of characters in the map files.
-
include: The include directory contains all VRML prototypes and other VRML
code that are not generated by vrmlgen, but is needed to build the world.
-
intermediate: The use of the Makefile, bmp2map and vrmlgen result in the
generation of several intermediate and temporary files. These files are
stored in this directory.
-
prelego: The prelego directory is used for the configuration files of vrmlgen.
-
release: In this directory the final VRML file is stored. All VRML code,
including the prototypes, is written in this single file.
-
textures: All textures that will be mapped on one or more objects are stored
in this directory in the Portable Network Graphics (PNG) format.
The Makefile checks dependencies between files, so if a certain bitmap
file is edited, only the files that depend on it will be regenerated. In
the vrmlgenoptions.lego file a couple of standard options for the configuration
files are listed. This file is included by these configuration files.
The vu.prewrl is the base file. All objects that will appear in the
world are listed here in VRML pseudo code that will have to be processed
by the preprocessor before it becomes a valid VRML file. The location,
rotation and scale of all parts of the VRML world are also determined in
this file.
Science building
The science building (Betagebouw) was the first part of the VU Campus I
began to model in VRML. The Gebouwendienst (Building Service) of the VU
was kind enough to give me access to 2D maps of all floors of every building
on the VU Campus. I made copies of the ones I needed and scanned in all
first floor maps. These maps (now in Windows Bitmap format) served as the
starting point for the modelling of the buildings.
I figured out that the height of one floor is (roughly) about 3.25
meters, including concrete. I decided to make the basic building block
size for vrmlgen 0.55 x 1.65 x 0.55 so one floor of the building needs
two maps, where the second may be a repetition of the first. I adjusted
the size of the bitmap images to every pixel stand for a size of 0.55 by
0.55 meters.
Starting out with the image of the first floor of the science building
I began to edit it to create the second floor image, and used that image
to create the third floor image and so on. During this process I didn't
care about any coloring or texturing of the objects, only about the size
and structure of them. I did regularly run the images through the Makefile
and underlying tools to see how they turned out in VRML. Finally the result
of all this was a plain VRML representation of the science building.
When several bitmap images with a lot of different colors are used in
one configuration file it might become difficult to keep using colors that
can be easily distinguished from each other by the human eye. This can
be solved by using the same color more than once in different images and
mapping different characters to it with the colormaps of bmp2map. Doing
this will keep the editing of the images relatively simple and keep it
possible to map lots of colors and textures to the 3D objects.
The next step was to 'paint' the building with the appropriate colors
and textures. It is always useful to even color the parts that have textures,
so it will have that color when for some reason the texture image doesn't
load. It's quite simple with vrmlgen to assign colors and textures to the
objects and scale the textures in the right way.
When texture mapping 3D objects it is of course necessary to have the
texture images that are needed available. A lot of more or less standard
textures like bricks, grass and water can quite easily be found on the
Internet. The more specific textures like the windows of the top floor
of the science building I had to photograph myself. I could borrow a digital
photo camera through one of my supervisors, Zhizheng Huang, that I used
to take many photos of the VU Campus. The problem with taking photos to
be used as textures is that you have to try to stand directly straight
in front of the object in order to get good quality photographs. Otherwise
the photos might get a distorted effect in them. For example, the top floors
on some of the texture mapped buildings seem to topple forwards, because
the textures were photographed under a sometimes rather large angle from
the ground. Editing with Paint Shop Pro can help a little to decrease the
effects of these distortions, but it will remain visible for the trained
eye.
Science building of VU Campus
Main building
The modeling of the main building of the VU campus was similar to the science
building. I have used the same building block size for it, so the resolution
of the bitmap images is the same as those of the science building. The
building is generated out of six different maps.
Texture mapping the main building gave some problems. First the height
of the building (15 floors) obstructed me from taking good photos of it.
I have edited these with Paint Shop Pro to improve the quality of the textures
for the higher floors a bit. The second problem was an even bigger one;
the front of the main building was and still is being renovated with the
use of several large cranes that blocked the view almost entirely. I solved
this by using textures of other parts of the buildings at the Vu Campus
that looked most similar and used these. The front of this building in
VRML now looks fairly accurately like what it looked like before the renovation
started.
Main building of VU Campus
Provisorium
The Provisorium is a small building that is located next to the main building.
Using the same building block size again made it quite easy to add this
building to the world at a later stage. Generating the Provisorium was
simple because it is small, only two stories high and looks very rectangular.
Only two textures (window and roof) needed to be mapped to the model to
finish it.
Provisorium at VU Campus
VU Square
The VU square was quite straightforward to model. It consists of two map
layers, one is a large rectangle with only three different textures (water,
grass and bricks) mapped onto it, the other is used to pinpoint the locations
of the objects that are included on top of the square.
Part of the square at VU Campus
Trees & Lampposts
The tree, lamp and small lamp prototypes were created with use of Spazz3D.
I made the objects (without textures) with it and exported to VRML. The
resulting code is not prototyped, so I edited it by hand, added textures
and prototyped the code. The last step was to include the 3D objects in
the world by editing the map-file and configuration file of vrmlgen (plein.map
& plein.prelego).
Flying Disk Animations
The virtual world has two animated tours that can be started by pressing
the buttons right next to the starting points. Users are able to take a
Flying
Disc tour around the square or another Flying Disc tour which
takes the user up into the air to a more birdseye view of the Campus. I
have created the code of these tour by hand. In order to easily find out
what the coordinates were of the locations the tours visit, I used a piece
of code that I found at Bob Crispen's VRML Site [xx]. This code displays
a Heads Up Display (HUD) just in front of the avatar and shows what the
coordinates of the present position of the avatar are. The only thing I
had to do was to move around the world and write down the coordinates of
appropriate locations for the tours to pass. In the case of the tour that
stays on the ground, it was also necessary to make the disc (and avatar)
change orientation at every direction change in order to make the avatar
always face the direction in which the flying disc is going. This is done
by using besides a PositionInterpolator also a RotationInterpolator. The
orientation of the avatar should be changed quickly, which can be done
by adding behind each RotationInterpolator key and keyValue pair another
key/keyValue pair with only one fraction of a second difference. This makes
the flying disc (and bound avatar, if any) rotate in that fraction of a
second, while it would otherwise take the entire time until the next position
for it to rotate. Because I wanted to be able at all times to let the avatar
step off the disc and end the tour, I used a ProximitySensor that binds
the viewpoint of an avatar that is (partly) inside it. This will make the
avatar follow the disc while keeping the option open for the user to step
of the disc. The tour through the sky was a little simpler because I bind
the viewpoint of the avatar directly to the flying disc when the button
is pressed. This makes the avatar change orientation (although not always
the preferred orientation) and prevents the avatar from being able to fall
off the disc and thus end up on top of a building, which I see as unwanted
behavior. The drawback to binding the avatar like this is that the tour
has to be followed from begin to end.
Flying Disc starting point
Limiting the virtual world
The boundaries of the virtual world are four large walls that are made
up out of two parts each. The lower parts of the walls are texture mapped
with an image of trees. The upper parts are texture mapped with a gradient
skycolored image. Invisible walls are placed a couple of meters in front
of these walls to prevent the user from walking into them. Another invisible
wall is located in the sky. All walls together with the 'floor' of the
VU Campus limit the virtual world. Users are supposed to remain inside,
although it would be possible to turn of collision detection and move through
one of the walls.
Bird's eye view on the VU Campus world
Evaluation
On the Internet several multi-user 3D virtual worlds that are created with
VRML can be found. Most of these communities try to attract people by offers
a variety of features. However, there is not very much attention being
paid to enhance the 3D feeling that users have while they visit a virtual
community. By taking immersion into account, this feeling can certainly
be improved. At this moment the level of immersion found in the virtual
communities in not very high.
Creating a virtual world with vrmlgen is a task that doesn't require
a lot of 3D design knowledge, because the program works only with 2D maps.
On the other hand, it is necessary to have some knowledge about computers,
because vrmlgen has to be operated from the command prompt and works with
configurationfiles that have to be edited. A nice graphical user interface
would help to lower the level of computer knowledge that is needed to work
with vrmlgen.
Vrmlgen is very much suited for modeling rectangular 3D objects. Other
(non-rectangular) objects will have to be created with other programs,
but can be integrated quite simply within the generating process of vrmlgen.
The ability to map textures on the 3D objects is another useful feature
of the program.
In the future the VU Campus virtual world will serve as a basic 3D environment
that can be improved and extended by students that take part in a VRML
course on the Vrije Universiteit. Particularly in the areas of interactivity
and immersion the current world might be enhanced.
References
[1] RIF-Project - http://www.cs.vu.nl/~eliens/projects/rif
[2] Carey R., Bell G., The annotated VRML 2.0 reference manual
(1997) ISBN: 0-201-41974-2
(website: http://www.best.com/~rikk/Book/)
[3] Hartman J., Wernecke J., The VRML 2.0 Handbook - Building
Moving Worlds on the Web (1996) ISBN: 0-201-47944-3
[4] VRML97 Specification (ISO/IEC 14772-1:1997) - http://www.web3d.org/Specifications/VRML97/
[5] Vu Campus World (will be closed somewhere in september 2000) -
http://bruin011.cs.vu.nl
[6] Floppy's VRML Guide - http://www.vapourtech.com/vrml
[7] Bob Crispen's VRML Site - http://home.hiwaay.net/~crispen/vrmlworks/
[8] Blaxxun (Contact, Community Server) - http://www.blaxxun.com
[9] Parallel Graphics (Helios, Islands, Cortona VRML Browser, Vrmlpad)
- http://www.parallelgraphics.com
[10] Geometrek (Deepmatrix) - http://www.geometrek.com
[11] VNET - http://ariadne.iz.net/~jeffs/vnet/
[12] Active Worlds - http://www.activeworlds.com
[13] Cybertown - http://www.cybertown.com
[14] Soccercity - http://www.soccercity.de
[15] Learnetix - http://www.learnetix.de
[16] Canal + 2nd World - http://virtuel.cplus.fr
[17] Apache Software Foundation - http://www.apache.org
[18] Blaxxun Instant Community Help - http://www.blaxxun.com/products/server/docs/41/ntv4.1/overview.html
[19] VRML preprocessor webpage - http://www.cwi.nl/blaxxun/software/preprocessor/preprocessor.html
[20] Vrmlgen webpage - http://www.cwi.nl/reblom/vrmlgen.html
[21] Spazz3D - http://www.spazz3d.com
[22] Shout3D - http://www.shout3d.com
[23] Pulse3D - http://www.pulse3d.com
[24] Blendo - http://www.web3d.org/TaskGroups/x3d/sony/Blendo.html
[25] Lego - http://www.lego.com
Appendices
Appendix A
Virtual Worlds - Table of Properties
World |
Language |
Server |
Membership |
Intended public |
Extras |
Canal + Second World |
French |
Blaxxun |
yes |
Artists / Art fans |
Several 'real world' places, like the Louvre Museum |
Cybertown |
English |
Blaxxun |
yes |
Everyone |
Virtual jobs, (multi-user) games, special interest clubs |
Learnetix |
German |
Blaxxun |
yes |
Schoolchildren |
puzzles and quizzes |
Soccercity |
German |
Blaxxun |
yes |
Soccer fans |
Some info about soccer |
DeepMatrix |
English |
Deepmatrix |
no |
Everyone |
none |
VNET |
English |
VNET |
no |
Everyone |
none |
Helios |
English/Russian |
Helios |
yes |
Everyone |
Drag & drop objects into worlds |
Active Worlds |
English |
Active Worlds |
yes, costs $19,95 / year |
Everyone |
In-world help in several languages |
Appendix B
Virtual Worlds browsers
Virtual Worlds servers
Appendix C: vrmlgen example of a shed
bmp-files:
map 1
|
map 2
|
map 3 - 9
|
map 10
|
configuration file:
legocfgversion 1
[options]
unitsize
0.25
usedefaultlights 1
usedefaultviewpoints 1
showgroundplane 0
uselegoshape 0
showknobs
0
combinefaces 1
legofaceincfile ""
legoshapeincfile ""
legoknobsincfile ""
[litincludes]
[literal]
PROTO Tree [
exposedField SFVec3f translation
0 0 0
exposedField SFInt32 size
1
exposedField SFNode woodtexture
NULL
exposedField SFNode leavetexture
NULL
]
{
Transform {
translation IS translation
children [
Transform {
translation 0 1.8 0
children [
Shape {
appearance Appearance {
material Material {diffuseColor 0 .6 0}
texture IS leavetexture
}
geometry Sphere {
radius 1
}
}
]
}
Shape {
appearance Appearance
{
material
Material {diffuseColor .6 .3 0}
texture
IS woodtexture
}
geometry Cylinder {
radius .2
height 2
top
FALSE
bottom FALSE
}
}
]
}
}
[/literal]
[colors] {
/* a 1.00 0.33 0.06 0 */
a 0.72 0.72 0.72 0
b 0.00 0.00 1.00 0
c 0.06 0.55 0.06 0
}
[toptextures] {
b 10 6 0 "roof.png"
c 5 5 0 "grass.png"
}
[sidetextures] {
a 4 4 0 "brick.png"
}
[specialnodes] {
t 0 1 0
[literal]
Tree {
translation %.2f %.2f %.2f
woodtexture ImageTexture {url "treewood.jpg"}
leavetexture ImageTexture {url "treeleaves.jpg"}
}
[/literal]
}
[maps]
dx 20
dz 15
nrmaps 10
/* 1st map */
/*
dx 20
dz 15
*/
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
cccccccccccccccccccc
/*
. 0.000000 0.000000 0.000000
a 0.000000 0.000000 0.972549
t 0.000000 0.972549 0.000000
b 0.000000 0.972549 0.972549
c 0.972549 0.000000 0.000000
*/
/* 2nd map*/
/*
dx 20
dz 15
*/
....................
.aaaaaaaaaaaaa......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a....t.
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.aaaaa....aaaa......
....................
/*
. 0.000000 0.000000 0.000000
a 0.000000 0.000000 0.972549
t 0.000000 0.972549 0.000000
b 0.000000 0.972549 0.972549
c 0.972549 0.000000 0.000000
*/
/* offset for tree */
0 1.4 0
/* 3th map */
/*
dx 20
dz 15
*/
....................
.aaaaaaaaaaaaa......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.a...........a......
.aaaaa....aaaa......
....................
/*
. 0.000000 0.000000 0.000000
a 0.000000 0.000000 0.972549
t 0.000000 0.972549 0.000000
b 0.000000 0.972549 0.972549
c 0.972549 0.000000 0.000000
*/
/* 4th map to 9th map */
repeat 6
/* 10th map */
/*
dx 20
dz 15
*/
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
bbbbbbbbbbbbbbb.....
/*
. 0.000000 0.000000 0.000000
a 0.000000 0.000000 0.972549
t 0.000000 0.972549 0.000000
b 0.000000 0.972549 0.972549
c 0.972549 0.000000 0.000000
*/