CHAPTER 5
MY COLLABORATIVE WORLD
All of the 3D collaborative, internet based worlds that I visited and
spent time in (OZ Interactive Inc. worlds, Active Worlds from Circle of Fire
Inc., Worlds Inc. worlds, OnLive! Technologies Inc. worlds, Moondo worlds from
Intel Corporation, People Space worlds from IBM®, Circus World from
Sony Corporation, Pointworld and other blaxxun interactive worlds), use a
reasonable architecture of landscapes and buildings for the 3D world. All
presented me with a world where I could quickly orient myself, put the
territory to memory, and walk about to visit different locations within the
world. Through my cyber-journeys, I came to the conclusion that many people are
working on creating attractive, functional 3D architectures. I was able to talk
to enough trained architects who were studying the architecture of cyberspace
to believe they will continue to build better buildings in cyberspace as time
goes by.
Instead, during my cyber-visits, the lack of interesting things to do
in the worlds disappointed me most often. I could walk around in a functional
and attractive world and communicate with others, but that was all I could do. The
VRML 2 standard specifies how to include interesting smaller worlds within the
confines of a larger world. I wanted to work on the smaller worlds that could
then be contained within the architecture of any larger VRML 2 world. I would
leave the larger architecture for others to design. Objectives for My World
After a lot of thought and learning (I designed a Chinese checkers
world, billiard
world, and kaleidoscope world, all of which
could be placed on any flat surface in a larger VRML 2 world), I found my own
creative concept which I was interested in implementing. I decided to build a virtual world that
would require and emphasize collaborative and competitive behavior and provide
both as alternating goals for a participant. The world would be available for
placement on any flat object such as a table or floor. I defined the following
critical success factors for the world:
·
Demonstrate
collaborative behavior and contrast it with competitive behavior
·
Demonstrate
an appropriate use of mixing VRML and Java technologies over the internet
·
Provide
an enjoyable experience to attract prolonged attendance in the world
·
Provide
component parts that could be put together by participants in unexpected ways
·
Demonstrate
the attributes of a complex system
This chapter provides an overview of my motives behind each critical
success factor and then presents the design high points of the world.
1. Demonstrate collaborative
behavior and contrast it with competitive behavior.
I understand why people have such a difficult time defining collaboration. Everyone has a different
image in their mind when they think of the word collaborate. I wanted to
create a world that provided alternating reward structures: first for
competitive goal reaching, second for team work, and third for collaborative
goal reaching. I hoped that the different objectives would make participants
behave differently. Those different behaviors would be called competitive,
teaming and collaborative. By participating, a participant would be able to
experience the three behaviors and, hopefully, as a result have more insight
into all three.
I experimented with ways to create such a reward structure. I decided
to model the goal structure after an organization attempting to gain market
share. In an emerging market, there are at least three ways to gain absolute
market share (the number of customers) for a producer. The first way to gain
market share is by taking customers away from other organizations
(competitive). A second is by working with another producer to jointly grow
their market share (team). A third way to gain market share is by promoting the
whole industry to grow the absolute size of the market yet maintain the same
relative share (collaborative).
Much has been said and written about the merits of competition in
securing market share for a producer. Less has been documented about the merits
of collaboration. Innovation in the hamburger industry and car industry can
appear to be somewhat collaborative when each key producer adds new features to
the basic product that drives up the demand for the product as a whole (versus
other foods or forms of transportation). Collaboration can also be more direct.
For example, in a collaborative manner, the organizational members of an
industry can work together to increase the demand for their product or service.
For example, the national dairy council promotes milk for all producers of milk
through their “Got Milk?” campaign.
Of all the industries I considered, the oil industry maps more directly
to the structure of my world than others I explored. In the late 1800s, four
large oil conglomerates (called trusts at the time), dominated oil production
in the world (Standard Oil in the US, the Rothchilds in Europe, the Nobels in
Europe, and a group of Russian producers). Another participant, Royal Dutch,
joined the battle shortly thereafter as the Russian producers began losing
market share. There was much direct competition and joint ventures between two
producers were formed from time to time, yet the whole oil industry worked
together to promote oil over other forms of energy [22].
For a high-tech product or service, the marketplace may not be aware of
a new product or service. Once they become aware, they still may not understand
why they would be interested. In fact, even the venture capitalists who are
raising money to support the product or service may not be convinced of its
viability. In those cases, collaboratively building awareness of the product or
service by the producers provides a great return down the road. Taken a step
further, such collaborative gain can include standardizing the technology in
order that it works with other technologies already available to and owned by
the market. VRML is a technology following that path through the efforts of the
VRML Consortium [23]. The venture capitalists have provided funds for VRML
development with strings attached. If the market is not grown to a certain
level by a certain date, no additional funds will be forthcoming. So, there is
much interest in standardizing VRML by the technology providers.
My world gets people to think about how to collaborate in the extreme:
with people they neither know nor have ever seen. I figure such ability to
collaborate would be extremely useful if the Web is to be used effectively for
its new, unique ability of connecting any computer in the world with any other
computer at any time.
So, in my world, a participant competes to reach certain physical
locations in the world before others get there. These goals are represented by
charcoal gray filled circles which lie flat at random locations on a board.
During a competitive round, a participant attempts to win market share by
reaching the goals first. Yet, in the next round of participation in the world,
participants succeed by working together collaboratively and by attempting to
get at least one participant to each location in the shortest period of time.
If there are enough participants, a third situation can be added where
participants work as teams to confront other teams. If there are not enough
participants, computer simulated participants could be added to provide
competition or collaborative partners. Team competition is a behavior required
by many board or card games such as bridge. My world appears similar to a game,
but abstractly represents all virtual worlds that attempt to build a community
through each individual’s actions.
2. Demonstrate an
appropriate use of mixing VRML and Java technologies over the internet
In order for my world to meet the basic environmental constraints of
the technology I wish to use, I needed to create a communication system that
could overcome the latency of the internet where reliable service is not
guaranteed. I would also need to implement a solution that kept up a reasonable
frame rate. By keeping my world to a standard implementation of VRML and the
Java External Authoring Interface (EAI), I was assured certain inefficiencies
in local processing within the Web browser. Yet, I believed it was important
for me to use standard VRML in order that my world could participate as a part
of a larger virtual universe at any time. In fact, I believed that my world
could easily be put into a room of a larger environment such as the virtual 3D
chat environments I comment on in Chapter 3.
I believe that the documented constraints of client/server applications
that use VRML on the internet are not limiting in many cases. So, to prove
that, I wanted my world to be completely realized as a VRML world with Java
scripting and internet message passing using the hypertext transport protocol
(http). In my world, the latency of the internet would actually be incorporated
into the design. I believe there are many useful multi-user applications where
the response to a participant’s actions need not immediately take effect. For
example, in simulating market dynamics, a delay is quite realistic. When an
organization puts a market strategy into effect, it may take weeks or months
until the market begins to react. Many games of thought also do not require
immediacy in terms of relaying moves from a mover to all other participants. To
learn the technologies of VRML, Java scripting, and client/server
communications, I created both a Chinese checkers world and virtual billiards
table which in no way required a rapid response mechanism. Both Chinese
checkers and billiard table worlds implement a turn-taking protocol which is
consistent with their real world protocol.
Instead, the server that connects participants in my world need only be
able to conservatively estimate a latency that is a worst possible scenario and
then add a certain amount of time to it to find the least acceptable latency
for the world. The server then need only assure participants that they have not
chosen a latency that is shorter than the least acceptable latency. I intended
to build that logic into my world server. Should the minimal set latency ever
be violated, the server would simply stop the simulation until any latent
messages could be delivered.
Of course, each event that needs to be coordinated between participants
must be assured to take place at the exact same frame of the simulation. My
world has an event queue built into its design to make sure each event is
enacted at the same point of the simulation (though not at the same absolute
time). Since all other actions are encoded within the physics of the world
itself, and since each participant has that code loaded locally within their
Web browser, only the events that are queued could possibly cause the different
worlds to get out of synch.
All messages that get passed between participants in the world during
an active simulation contain a future framestamp (a term I use to refer to the
specific frame number in a simulation in which a certain state change becomes
active). By not enacting a message until every participant had received it
locally (before the agreed upon worst-case-plus latency), I would assure that
the world state would always be the same for each participant.
3. Provide an enjoyable
experience to attract prolonged attendance in the world
By prolonged attendance, I mean keeping each participant’s interest
during each session as well as an interest in returning to the world time after
time. For me, keeping a participant active in a current session until the
session was over was very important. I expect participants would be
disappointed if they lost the other participants in the simulation during the
experience. Although I envision someday having an automatic process replace the
expiring participant, I had no doubt that that would be a less desired state if
a sense of community surrounded my world. Unless, of course, the participant
was detrimentally and purposely disrupting the natural tranquillity of the
world. In any case, the basic experience in the world had to be an attractive
one.
To keep participants coming back, I figured I would need to provide a
potentially changing experience in order that a participant was never
experiencing the exact same experience each time. I also believed that I could
create a sense of community where participants would come to reunite with
participants they had enjoyed participating with in the past.
During my readings on complex systems, I realized that I would only
need to provide a few different components in the experience that changed
between visits to make the experience seem significantly different. I thought
about how different two separate games of chess become, just by altering the
first couple of moves. Participants would be making moves in my world. Yet, I
wanted to go a step further and allow the rules to change between visits. With
changing rules that could be defined and agreed upon by the participants, I
wanted my world to be flexible enough to provide a wide range of experiences.
As I document in Chapter 6, I intended to test a hypothesis about
prolonging interest in my world. My world would have enough flexibility that
participants could build the world themselves and change the rules often during
their participation. My hypothesis is that participants will be more interested
in a world where they create the design and choose the rules.
Whether or not my hypothesis is true, I wanted to build a world which
had the flexibility to change often should participants desire variability. In
the extreme, I envisioned participants emailing me with new design objects,
physics, and rules which I could make available in the world with a quick
turnaround. For those who preferred to participate in a certain fixed
configuration, I envisioned creating a library of successful variables which
any group could agree to use in a particular simulation. In other words, my
world would cater to both types of participants. Given my world architecture,
it would be easy to store and access successful combinations of design, rules,
and events.
4. Provide component parts
that could be put together by participants in unexpected ways
I wanted my world to follow a serendipitous evolution of its own. I
would provide objects and actions for the world and the participants would work
to use them in ways I could not have anticipated. By providing much power in
the hands of each participant, each participant’s thought process would be
reflected in the experience in the world. Even the component rules would be
able to be added, eliminated, or altered upon participating in the world.
Since my component parts worked so well with an object oriented
programming style and, since I would be using Java (an object-oriented
programming language) to tie together the actions of the objects in the world,
I figured I could provide individual encapsulated objects (visual, behavioral,
and rules-based) that could interact well with each other. The physics of each
visual object would be embedded within that object. There would be little that
was pre-determined about how the world played out. My world would enact the
same kind of collaboration among its code objects that it would be asking from
its participants.
Since each participant would make independent decisions about what to
do in the world and each participant would not be able to see what others were
doing until they did it, I expected to find a strong independent behavior set
coming from each participant.
5. Demonstrate the
attributes of a complex system
With all the interesting thinking I had done as a result of reading
about complexity and chaos, I wanted participants to get the same sense of
amazement about complexity as well, but not as a frustration. Hopefully, my
world would contain what looked like a manageable number of variables and a
minimal number of participants in order that a participant would feel quite
powerful in his or her ability to influence the world and others. Yet, by participating, a participant would
soon realize how complex the environment was because others were independently
trying to effect the outcome of the world at the same time as the participant.
The lessons from my world would be lessons about life. In many cases,
we are not in control of how things turn out. We are only in control of our
attempt. It can be fun to try even if the results are not what is expected. A
virtual world should be able to be a place to learn and have fun without the
goals needing to dominate the experience. I want the world learning to be about
complex systems and an individual’s ability to control his or her environment. Even in a complete and best collaborative
effort (if there is such a thing), a group is not assured of reaching a goal.
Yet the experience of being part of a group can be quite fulfilling.
Computer simulated worlds have a great benefit over physical worlds in
that they can easily be made self-documenting. As part of the experience of
building this world, I hoped to be able to save certain worlds and their events
that best demonstrated emerging behaviors that were being experienced in the
world. I hoped I could categorize certain people’s behavior and find a way to
illustrate collaborative behavior to people who were struggling to define it
for themselves. A shared world could be experienced by another group of
participants even if it were designed by a different group. A new group could
try to outperform a previous group with the same world conditions.
Design
Overview
With these goals in mind, I began coding my world. Much has been
discussed about the architecture of virtual worlds in technical papers and at
virtual reality conferences. My world would not need to address many of the
issues of world architecture as I decided that my world would be a flexible
world which could exist within the confines of a larger virtual world. My world
could exist in a room of a virtual castle, office building, or shopping mall.
Given the structure of VMRL, my world could easily be put into any other
virtual environment.
All the popular 3D multi-user worlds I reviewed in Chapter 3 provide a
large, organized world for multiple participants to explore. Yet, those worlds
lack things to do while in the world. My world is a world which could be placed
in any one of those larger worlds to provide a flexible context in which
participants can share an experience. Although I provide specific objects and
objectives for my world, it is the desire to produce a flexible and interactive
design environment that has driven my work.
Figure 5.1 A Screen Shot of Marbles World
My world does have a context which is outlined in detail in Appendix A.
A screen shot of my world in action is presented in Figure 5.1. I provide a
quick summary of how my world behaves here. A participant in my world first
clicks on check boxes to negotiate the rules for the world session with the
other participants. The rules cover how certain objects on the screen behave,
determine values for the overall physics such as a gravity coefficient and the
mass of the marbles, and decide what constitutes success (including the
competitive v. team v. collaborative decision). Once the server delivers the visual
goals for the next round, participants together design the board on which their
marbles will roll. Participants design the board by taking turns in dragging
and dropping available design objects. After they design the board, they choose
from a palette of available effects to add to their arsenal for the active
simulation round. Then, the marbles begin to roll and the world comes to life.
Participants click on the board to effect the slant of the board which dictates
the direction the marbles move. Participants also click on the effects in their
arsenal to control their marbles within the embedded physics of the world. The
active simulation continues until the agreed upon condition for ending is
triggered (for example, all goals have been reached by at least one
participant). Then, the rules setting starts again. The session continues for a
fixed number of rounds.
To code for such a world, I had a lot of architectural decisions to
make. Client/Server architecture provides great flexibility in placing
functionality at either end of a socket connection. I experimented with placing
different functions at both ends. Over time I settled on an architecture that
worked well enough to keep the frame rate acceptable on each client yet also
kept the participating clients in synch. My client/server architecture appears
as seen in Figure 5.2.
Figure 5.2 - My Client/Server Architecture
Basically, with the architecture in Figure 5.2, the client is burdened
with most of the processing. The client manages the geometry of each visual
object in the world, drives the behavior of each object from its embedded
physics, provides event handling routines for each event triggered by the
participant, calculates and presents the animation of all objects that move and
collide with other objects, and maintains a constant speed for each animation
frame loop.
In comparison, the server’s processing load is light. The server
receives messages from clients and passes them through to the other clients
involved in the simulation. The server also randomizes the placement of any
goals for the simulation and forwards their location to each client. The server
keeps its own timer to make sure participants are responding within any
established time limits. The server enforces any rules established by the
actions of the clients, effectively dropping certain client messages that go
against the established rules. The server also receives timing reports from
each client and changes the animation frame loop time for clients that are
running faster or slower than the average. The server is responsible for
keeping each client simulation in synch.
Client
My world is basically a coordinated effort between various extendible
classes which connect to a standard VRML 2 file through a standard Java External
Authoring Interface. I present an overview of the key Java client classes and
their responsibilities in Table 5.1.
Table 5.1 Alphabetical List of Project Major Classes
Class Name |
Functionality |
Animator |
The Animator class runs
the frame loop which drives the simulation. The Animator class handles
messaging between all other objects in the world by performing update and
collision management given the current state of the Rules class. |
Effects |
The Effects class defines
special abilities of marbles which participants can use to direct their
marbles during the active phase of the simulation. For example, the effects
class defines an anti-gravity effect a participant can use to move her marble
against the pull of gravity. The Effects class can add new effects to itself
easily at any time. The current state of an Effects object determines which
effects are made available to the participants in the world. |
MainWindow |
The MainWindow class
contains a question text box, answer text box, and 10 checkbox/label pairs
that can be used to ask questions to and accept answers from participants.
The answers from these questions change the state of the Rules object. The
MainWindow class can easily add new questions to itself at any time. The
current state of a MainWindow object determines which question, if any, is
currently being asked. |
Marbles |
The Marbles class,
inherited from the Applet class, sets up and maintains the connection between
the VRML 2 viewer and the Java virtual machine. The Marbles class also starts
the Timer, PortToServer, and Animator threads. |
Physics |
The Physics class defines
the behavior of the pieces that can are used during the active phase
(post-design) of the simulation. For example, the physics class contains the
behavioral logic for a pendulum. The Physics class can add new physics to
itself for pieces easily at any time. The current state of a Physics object
determines when and how objects can move during an active session of the
world. |
Pieces |
The Pieces class defines
the 3D geometry of the pieces that can be used during the design phase of the
simulation. For example, the pieces class contains the geometry for a
vertical barrier. Participants can add one or more vertical barriers to the
world during design. The Pieces class can add new pieces to itself easily at
any time. The current state of a Pieces object determines which visual
objects are made available to the participants in the world. |
PortToServer |
The PortToServer class
connects a client to the world connection server and handles incoming
messages from the server. The PortToServer class can easily add new message
handlers at any time. The current state of a PortToServer object determines
the effect incoming messages have on the world. |
Rules |
The Rules class contains
key attributes which define how the world behaves. Rules can be changed by
participants in the world. For example, the Rules class defines how the slant
queue loads its slants (randomly, through participant turn taking, or through
participant first come, first serve). The rules class can quickly be extended
at any time to add new rules to the world. The current state of a Rules
object dictates how the Animation class behaves during a simulation. The
Rules object changes its state based on how participants answer questions
asked by the MainWindow object. |
Ticker |
The Ticker class controls
the speed of the Animation thread by setting a sleep variable based on
feedback from the server. The animation then sleeps for the appropriate
period once per animation loop. |
There are also smaller classes that perform very particular roles such
as the Ball, Obstacle, Goal, Player, Arsenal, EventQueue, and SlantQueue
classes. The Ball and Obstacle classes keep track of the objects that interact
during the active phase of the simulation. The Goal class keeps track of each
goal active in the simulation. The Player class manages the scoring for each
participant. The Arsenal class manages the effects a participant has chosen for
the next round. The EventQueue class manages upcoming effects and passes them
to the Animator when the time arrives for an effect to become active. The
SlantQueue class manages the upcoming slant orientations of the world’s board
and passes them to the Animator when the time arrives for a slant to become
active.
The
Server
With my client design falling into place, I figured my world server,
written in Java, would be as simple as possible. I decided to start with a
simple message passing server that would do nothing more than pass messages
from one participant to another. The server would have no understanding of the
messages it passed and all incoming and outgoing message logic would be
contained at each client. As I worked with my design though, I found it better
that the server be aware of the speed of each participants simulation, be
responsible for creating the physical goal locations for each simulation, and
keep track of which participant was which marble. Given all possible
configurations, my server was relatively simple. I started with base classes
that handled socket creation and maintenance and added code specific to my
world. Yet, the code I added would be appropriate for many other shared virtual
worlds. In all, the server Java file contains two classes which together
connect all the participants together in a shared 3D world simulation.
Appendix A contains a primer I created that new users can use to
acclimate themselves to how the world operates. Appendix B contains my client
code as it existed during my pilot test outlined in the next chapter (Chapter
6). Appendix C contains my server code as it existed during my pilot test.
Appendix D contains my VRML world.