Alive on the Grid is based on the Ygdrasil authoring system. Ygdrasil is a framework for creating networked virtual environments, particularly by artists, educators, and other VR users who are not necessarily professional programmers. It is focused on building the behaviors of virtual objects from re-usable components, and on sharing the state of an environment through a distributed scene graph mechanism.
Ygdrasil is built in C++, around SGI's OpenGL Performer visual simulation toolkit [7] and the CAVERNsoft G2 networking library [8]. Performer provides a hierarchical scene graph representation of the virtual world database; our framework extends this to be a shared scene graph. Necessary data, such as lists of nodes' children, transformation matrices, and model information, are automatically distributed among participants in the application via CAVERNsoft. CAVERNsoft is a networking toolkit for VR that emphasizes integrating VR with high-performance and data-intensive computing over high-speed networks. It provides a distributed database mechanism, which we use to share the scene graph data.
In Ygdrasil, in addition to the basic graphical data used in Performer, any scene graph node can have behaviors added to it. Each particular node is considered to be owned by the host that creates it. This host executes any behavior associated with the node. All other hosts will create proxy versions of the node, and only receive data for it; they do not directly modify the node, except by sending messages to the master copy to request changes. Because the basic scene graph data - that which is sufficient to render the scene - is shared automatically, new behavioral components generally do not have to include any networking themselves.
The data that are shared for any node in the scene graph are stored in the CAVERNsoft database keyed by the node name and the data members' names (see figure 7). When a client is first informed about a new node (by the node's name), it looks up the node and its type in the database. It can then retrieve all the other data as needed.
Figure 7. Ygdrasil scene graph database
Most behaviors in Ygdrasil applications are built as simple components in C++. They are new node classes that extend other, existing classes. The individual node classes are compiled into dynamically loaded objects (DSOs), so that they can be rapidly added to a world or modified. The system also includes a number of pre-made classes (also DSOs) that implement common virtual world interactions; these include such things as users' avatars, navigation controls, and triggers that detect when a user enters an area. These built-in tools simplify the quick construction of many basic applications.
The actual composition of a virtual world in Ygdrasil is done using a higher level, scripting-like layer. Other toolkits have used traditional procedural or object-oriented scripting languages, such as Scheme in Avango[9] or VisualBasic in WorldUp[10]. The scripting layer in Ygdrasil is a simple textual representation of the scene graph layout (or a fragment of a scene graph), similar to an OpenInventor object file. It tells the system what kinds of nodes to create, and includes commands with each node to control its behavior. An important aspect of the scripting system is event-driven communications -- nodes such as triggers and timers generate events, and in the scene graph script these events are used to send messages to other nodes, activating or modifying their behaviors. This scripting layer makes it possible for experienced programmers and non-programming designers to work together in creating a world -- experienced programmers create new behavior components when necessary, while others can create a world by simply plugging together the components.