Open Source Platform
for interconnected virtual worlds

NG Design Document/System Overview

From Rex community wiki

Contents

Paradigm

We present a paradigm to inform the design of our Virtual World platform.

Web as an Application Platform

Web 2.0 is a platform for transaction-based document-oriented 2D applications.

  1. Web server hosts a set of documents
  2. Web browser requests a document from a Web server
  3. Web server processes the request, and returns the appropriate document (HTML)
  4. Web browser parses the document into an internal data model (DOM)
  5. Web browser executes any included scripting (ECMAScript) with the model as input
  6. Web browser displays the result the user
  7. User generates input events, which are handled either by local scripts, or by the browser itself
  8. Web browser either transforms the model, or sends a new request to the server

The embedded scripting may be of such complexity, that it is an application entirely unto itself; executing within a web browser.

This example demonstrates several key elements of its design:

  • network access protocol: HTTP, TLS
  • serialization: HTML, JSON, XML
  • data model: DOM
  • API: JavaScript DOM
  • runtime: Gecko/TraceMonkey, WebKit/V8

Real-time Streaming 3D Application Platform

We envision realXtend as a platform for real-time streaming 3D applications.

  1. Virtual World Server hosts a 3D scene
  2. 3D Virtual World Viewer will subscribe to a subset of that scene
  3. Server streams update events generated the scene to the Viewer
  4. Viewer interprets the stream to build an internal data model of the scene
  5. Viewer display the result to the user
  6. User generates input events, which are handled either by local scripts, or by the viewer itself
  7. Viewer transforms the model, which generates a stream of modification updates to the server
  8. Server, since this scene is shared with other users, should arbitrate any potential conflicts due to modification of shared scene state

Whether physics or scripting run on client or server side, or both, is principally of no concern at this level.

If we compare to the Web 2.0 model above:

  • network access protocol: UDP, TCP, HTTP, etc.
  • serialization: meshes, materials, etc. formats
  • data model: scene graph
  • API: "custom"
  • runtime: viewer

Modularity

Clearly the strength of Web 2.0 as a platform is that it provides a simple but consistent and expressive framework, where one can insert custom code and arbitrary data. Our platform should be made of decomposable, interchangeable pieces; organized around a central framework, where complex behavior can be changed by simply swapping out components.

Standards

The Web is built on many foundational standards, developed and refined years before put to such heavy use. While the 3D world lacks such established standards, we can look to integrating existing projects in order to leverage the collective wisdom that went into their creation.

Server Independence

A web browser is never dependent on a specific Web server implementation.

However it is able to rely entirely on a standard protocol (HTTP) to insulate it from this dependency. Since we have no such set standard, our job is much harder, as we must develop specific code paths dedicated to each potential backend server protocol.

Yet if we remain true to the above paradigm, platform dependent features can be factored into modules, and the viewer will be truly multi-protocol/server.

Components

Based on the above considerations in designing an application platform, we have chosen to integrate the following projects as core components. In some cases they are modules within our system, and others they are the scaffolding.

Qt

Qt is an extremely powerful, visually rich, cross-platform, C++ graphical user interface application programming framework. It supports all major desktop OS, as well as many embedded platforms.

Ogre3D

Ogre3D is a mature and full-featured 3-D rendering engine. It has a simple easy to use API, excellent performance characteristics, and implements its own high-level mesh material formats.

OpenSimulator

OpenSim began life at first as a reverse engineering of Linden Lab Second Life. However, since then it has grown to be a multiprotocol 3D application server.

OpenSim is responsible for streaming world state, calculating dynamic physics, and running server-side scripts.

While OpenSim offers a number of choices in real-time protocol, realXtend began life using SLUDP, and will continue for the foreseeable future to use it. However since SLUDP does not natively support meshes or materials as Ogre3D requires, we must use our own modification to OpenSim called ModreX.

Cable Beach

The Cable Beach project began life at Intel research as an incremental improvement on some peripheral capabilities of OpenSim, but has since grown into a complete OpenSim federation solution in its own right.

Cable Beach federate its individual regions into a trust domain, handles authentication and authorized nation within and between domains, and implement scalable content distribution to handle assets service.

Configurations

realXtend can be used in many various deployment configurations.

Stand-alone Server Deployments

  • Server: OpenSim (running ModreX) in its stand-alone configuration.
  • Viewer: Any

Grid Deployments

  • Server: OpenSim (running ModreX) in conjunction with Cable Beach.
  • Viewer: Any

Generic VW Deployments

  • Server: Any
  • Viewer: will come with built-in modules for:
    • Moving and Exploring a world
    • Construction and Content Creation
    • Communication via text, voice and video

Special-purpose Application Deployments

  • Server: Any
  • Viewer: will allow:
    • GUI Skinning and Re-branding
    • Disabling of Modules
    • Disabling of GUI elements