Open Source Platform
for interconnected virtual worlds

NG Design Document/Viewer Architecture

From Rex community wiki

The realXtend viewer is a client-side platform designed to complement the realXtend server-side platform.

As a platform for enabling a large number of 3D Internet applications, the same way a web browser enables a large number of web-based applications, it must offer a core functionality, and then open extensibility of that core through scripting and modules.

As a platform for networked applications, the viewer cannot rely on any one protocol, or allow one protocol's assumptions to penetrate the design too deeply.

The core functionality of the realXtend viewer is streaming and rendering interactive 3D scenes. To extend the core functionality for a number of uses such as telecommunications, virtual meetings, or gaming, we rely on the framework to provide a deeply integrated module system.

Modules must not assume anything about other modules, and rely only on the services provided by the framework. While a 3D scene may be assumed to be fundamental to a viewer, we wish to avoid depending on one specific rendering library, so our internal data model should not be tied to the renderer.

To minimize such dependencies, we define a module very loosely: it is any object which understands the local messaging and event system, and can generate replies in coordination with other modules. One may consider such modules as agents interacting in self-interest, over a shared space with a shared channel.

To minimize the overhead of messaging or events, and maintain the real-time nature of the simulation, we seek to limit the number and size of messages or events. Modules keep their own data, expose a limited subset of their state to other modules, and send only terse updates to explicitly subscribed modules. We also note that the viewer possess a distinct data flow: from network or user inputs, to logical layer for decision making, to rendering for display; that will in practice limit the combinatorial nature of such messaging.

Explicit support for modules in C++ and Python will be available, but other languages can easily be added.