September 1st, 1999 - August 31st, 2006

Categories: Software, User Groups, VR, VR Art


Ygdrasil is a framework developed as a tool for creating networked virtual environments. 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. It is presently being used in the construction of several artistic and educational applications.

Ygdrasil is built in C++, around SGI’s IRIS Performer visual simulation toolkit and the CAVERNsoft G2 library. Performer provides a hierarchical representation of the virtual world database, called a scene graph. The scene graph is a tree that encodes the grouping of objects and nesting of 3D transformations, and provides tools for operations such as switching elements on or off.

Ygdrasil focuses on constructing dynamic, interactive virtual worlds, so in addition to the basic graphical data as used in Performer, its scene graph nodes can have behaviors (i.e. functions to update the nodes’ state) attached to them. Tying the behaviors to the nodes has made it easy to assemble large worlds from simple components. A behavior is added by taking one of the core classes, such as a transformation node, and deriving a subclass with the new features. Individual node classes are compiled into dynamically loaded objects (DSOs), so that they can be rapidly added to a world or modified. The system includes a number of pre-made classes (also DSOs) that implement common virtual world tools - sounds, users’ avatars, navigation controls, triggers that detect when a user enters an area, etc. These built-in tools simplify the quick construction of many basic applications.

The Ygdrasil framework further extends the scene graph to be shared across the network. The concept of a shared scene graph has also been explored by other recent VR development systems, such as Avango (formerly known as Avocado). In a shared system, each participant has his own local copy of the common scene graph. Node data, such as lists of nodes’ children, transformation matrices, and model information, are automatically distributed among these participants as the data changes or when participants first join the shared world.

In Ygdrasil, the scene graph is shared using CAVERNsoft’s distributed database model. The data that are to be shared for any node in the scene graph are stored in the database keyed by the node name and the data members’ names. The scene can be dynamic, so whenever a client first learns about a new node (by a reference to the node’s name), it looks up the node and its type in the database. The client can then create an appropriate local copy of the node, and retrieve all the other data as needed.

Each particular node is considered to be owned by the host that creates it. The owning host maintainsthe master version of the node, and executes any behavior associated with it. All other hosts will create proxy versions of the node, and only receive data for it through CAVERNsoft; they do not directly modify the node (they can however send messages to the master copy to request changes). The proxy version of a node is typically of the simpler parent class type, without the added behavior code. Thus, if all of the main behaviors for a virtual world are executed by a single master version of the scene, remote sites can join in this world without needing anything beyond the standard, core node types.

The latest developments on Ygdrasil (Oct 2003)
The Ydgrasil library has recently been upgraded to version 0.1.11 and supports several new features. The documentation has been enhanced to include a download section, recent code revisions, and information about models, textures, and sounds. The Bergen Sound server has been separated from the download an is now a separate application. Users will need to re-compile their own modules for use with the new version of YG.

The Ygdrasil library has recently been upgraded to have 4-channel and 2-channel spatialized sound. Using the recently upgraded Bergen Sound server, applications can have 4-channel sound using SGI sound servers without making any modifications to existing scripts. Linux based YG applications are currently limited to 2-channel spatialization. In addition, the Bergen Sound server now records multiple concurrent sample files from the microphone through the soundRecorder node and provides a facility for reading the input microphone amplitude. A YG node, called amplitude, has been developed to generate events in response to amplitude level changes so that other scene attributes can be changed accordingly. This facility might be used, for example, to adjust the jaw position of a user avatar.

In addition to the other improvements, Bergen 0.5 also provides a facility for adjusting the gain and pan of RAT audio sources. When all participants in a scene have provided their unique RAT source identifier, the ratSource node will adjust each participant gain and pan depending on their relative distance and orientation. This facility is currently limited to only gain adjustments on SGI systems due to a problem with RAT. There is a version, pre-compiled for IRIX 6.5, of RAT available from the download section of the YG site.

Moreover, in the latest version of Ygdrasil two new nodes have been added that incorporate video. These nodes are the following: movieSurface and liveVideo. The movieSurface node provides the capability to playback video files of various formats on a rectangular surface, using the xine library. The formats of the video files can be one MPEG1 (*.mpg), MPEG2 (*.mpg), MPEG4 (*.mpg), WINDOWS MEDIA VIDEO(*.wmv), REAL MEDIA (*.rm) or QUICKTIME movie (*.mov). The liveVideo Ygdrasil node made streaming live Video to a rectangular surface, using JPEG decompression, a reality.

The latest version of YG has been augmented to allow clients to connect without adding scene graph elements. This allows a user to join a world and select the view of an existing user. Not only is this facility useful for voyeurs but also it can be used to run YG on distributed systems like the 15-panel display at EVL and the ARS Box CAVE at the Ars Electronia Center.

Ygdrasil 0.4.3 and New Website - The latest developments (August 2006)
The Ygdrasil website at has been completely reworked. There is now a complete user guide that covers everything from installation to scripting and networking. The site includes a reworked scripting tutorial and a graphical interface tutorial with over 60 screen shots.

And, there is now a forum to support the Ygdrasil user community.

This will be an ideal place for questions and feedback about all subjects including installation, configuration, and scripting. Also, the forum will serve as a collection point for impressions and feedback about the new graphical interface.

Ygdrasil 0.4.3
The latest release of Ygdrasil allows multiple cluster nodes running CAVElib distribution to form a single client. The Bergen client now uses the OSC protocol for seamless communication with either the Bergen server or MaxMSP / Supercollider servers.

This release also includes a number of improvements such as:

  • A 2-sided lighting model
  • A 2-pass rendering mechanism
  • Sounds that pause and restart when under switches
  • A revised grabNavigator that allows users to temporarily override navigation