Virtual Object System
Peter Amstutz, T. Reed Heges and Matt Barry
Virtual Object System: A new generation of Internet communications
VOS is intended to be general purpose, and extensible for a variety of purposes and applications, but our primary application is multi-user 3D graphics environments. [...]
Our original motivation was to start building The Metaverse: a shar- ed 3D virtual environment on the Internet, (inspired by things like Neal Stephenson's modern classic of science fiction, Snow Crash). Along the way we've created VOS, a new kind of networking system and protocol, with many unique features, including:
Our goal is to use this infrastructure to build multiuser collaborative environments. [...]
For a more extensive look at the VOS vision, and our thoughts about how we can create a new Internet reality, look at the opening chapter of the VOS Manual. [...]
[The VOS was also inspired by] Ted Nelson, dreamer of Xanadu[.]
An Introduction to the Virtual Object System
The Virtual Object System (VOS) is a hierarchical distributed object system, a desert topping, and a floor wax. It is an infrastructure for object-oriented network communication, and building flexible, distributed object networks. It also tastes good and will keep your floors shiny. In this article I discuss the core library and an example application under development that demonstrates some of the of power of using VOS. (A bit of shameless self-promotion for my free software project.)
VOS is a protocol and architecture design that you can use to build network application components (clients, servers, peer-to-peer nodes) for many purposes. It offers several convenient abstractions for the application programmer to support writing complex distributed applications.
VOS is explicitly object-oriented and supplies the infrastructure for passing messages between objects. Messaging is network-transparent, so the programmer is not concerned with the specifics of message delivery --- he or she simply passes the desired message to the target object. With this it is easy to implement remote procedure calls, where a message replying to a request can be matched up with that request. So far so good, but this describes about a dozen message passing systems already in use. What makes VOS different?
At the risk of stating the terribly obvious, in order to communicate with an object you must first know how to find it. Let me give an analogy with file systems: consider how difficult it would be if you could only refer to files by their inodes. In other words, directories don't exist, rather there is simply a large flat index of numbers, one for each file. To find out what other files exist you have to parse the files you already know about to find the inodes of the new files. Every file stores this information in a different place, of course. This would be a nightmare, wouldn't it? Well, this is essentially the state of the art of current distributed object systems. Typically in such systems objects are assigned unique identifiers by the object request broker (ORB, to use CORBA terminology.) Although an RPC call can return object identifiers allowing it to refer to other objects, every class will have a different way to do this. There is no uniform way to refer to an object by indirecting through another already known object. While it is the case that some systems such as CORBA offer a naming service on the side which does address some of these issues, there are many advantages to be had building such a feature into the core system that a separate naming service cannot provide.
A crucial feature of VOS is providing a standard protocol for expressing object interlinking, to the extent that it is part of the object model for a Virtual Object (hereafter termed "Vobject"). Vobjects consist of the following parts:
Nearly all other features of VOS derive from this object model. Although we call VOS a "hierarchical" distributed object system, object interlinking is actually a directed graph. However, it is at its most useful when used to group objects in "contains" or "describes" relationships. We use URLs to refer to vobjects, so the meaning of the following example should be fairly intuitive:
This refers to the vobject storing the position of a ball, which is contained in a virtual world at the site interreality.org. Note that this path is not the only way of referring to this object. Here are a couple more ways:
The former is the unique name of the vobject on its site. The latter directly addresses the "ball" vobject (instead of indirecting through the world vobject) to the position vobject.
Note that the fact that "vop://interreality.org/1264095060" happens to represents the position of something is entirely contextual, and determined by the parent-child linking. Another vobject could easily link to this with a different name and an entirely different meaning --- not so farfetched as it sounds, because a vobject can take on multiple types describing multiple interfaces.
This system provides the programmer a powerful and flexible way of organizing network-accessible objects. Because vobjects link in a uniform way, the same tools to access and inspect the vobject structure can be used for a variety of applications. For example, one tool is the command line shell mesh which allows one to browse vobject structures using familiar commands like "cd" and "ls" as well as send and receive messages interactively.
VOS is heavily event driven and allows one to register as an event listener to be notified when certain things happen, such as changes to a Vobject's list of children. This supports (and encourages) a style of programming similar to the model-view-controller (MVC) framework.
VOS has a number of other features which I will not enumerate here, for the sake of brevity.
As useful as it has turned out to be, VOS was not an end unto itself. Rather it is being developed to support a specific application which I briefly describe here.
The application is distributed, interactive multiuser 3D for the Internet. Few applications in computer science have received so much attention in the popular media, but have thus far failed to deliver in terms of an open, general purpose system. When deciding to embark upon this project three years ago, we decided to take a network-centric approach, rather than the more traditional approach focused on rendering. Three-dimensional graphics have advanced enormously in recent time, whereas much of the software infrastructure of the Internet --- application protocols like HTTP and RPC systems like CORBA --- have shown to be inappropriate for this task. Rather than work around the limitations of existing software, we decided build our own which has today evolved into the present VOS design and implementation. Although ultimately built with the purpose of describing 3D scenes, VOS is much more general purpose: one application for VOS is a network-accessible MP3 jukebox. I have also gotten email from someone intending to build a P2P network based using VOS.
We use the excellent Crystal Space 3D engine rather than writing our own, which allows us to focus on the networking and user interface aspects rather than the hairy details of 3D rendering. Presently the 3D client supports box and sphere primitives, loading 3D models from several standard file formats (such as .3DS), billboards (2d sprites that always face the camera), specifying world geometry directly using vobjects, and colored point lights. These objects can be added, removed, positioned, scaled, rotated, and otherwise modified on the fly through either direct manipulation in the 3D client, or using other tools such as the previously-mentioned mesh command line shell (which is able to do so despite having no intrinsic knowledge that the vobjects being manipulated describe a 3D scene.)
We have implemented a Virtual Webcam as an option to the 3D client that writes out an image file rather than rendering to the screen. If one visits our web page, one can see a live view of what is happening on our world server. If you were to join the world, your avatar would show up on the web cam (as well as the screens of anyone else present.) Furthermore, the webcam itself exists in the world with an avatar (a model resembling a movie camera.) The camera can be rotated and repositioned like any other 3D object, and the webcam's view will change accordingly.
The VOS reference implementation is in C++ (with additional lightweight implementation in Perl) and licensed under the GNU Lesser General Public License (LGPL). I believe that others might find the VOS platform useful for developing their own network applications.
About the Applications
See the pages below for more information and screenshots.
This application represents the original driving goal that eventually spawned VOS. Ter'Angreal is a general purpose VR application. Using Ter'Angreal you can explore dynamic online virtual worlds, interact with the world, and talk with other people as well.
Some shout-outs to cool projects
Object Type Definitions
OTDs define Metaobject types. An OTD is an XML document which describes what should be expected of a particular object type: messages it accepts, emits or replies with; child objects of certain names which should exist; general documentation on the type; and links to downloadable code on the web which implements the type (both "plugins" or just examples). [...]
We overworked and even extended this concept with our OntoScope component (see also the webpages of the Mekensleep Underware set and Roboverse), service discovery following the Peer-to-Peer, Grid computing and Castle in the Cloud Computing technologies, and also 3D cameras and the Ontoscope.
As an overall system, we have the
for the multimodal mixing, augmentation, immersion, mapping, (re)presentation (e.g. visualization), simulation, and synthesizing of the reality and the virtuality.
Also for us important to mention is the fact that the progressive features of the Virtual Object System include Lego® minifigures in an internet multiuser virtual reality environment, as shown above, so that this kind of software application is not copyrighted by the com- pany Lego®, but in fact by the GNU Lesser General Public License (LGPL), while the minifigure design patent already exhausted.