Digital Spaces Architecture

From Digital Spaces

Jump to: navigation, search

Digital Spaces Architecture

Digital Spaces consists of a Core that contains as little functionality as possible, and a range of Components that are loaded as specified by the Space file. Components frequently wrap external libraries, and are a thin layer over their own API. The Core is responsible for boot-strapping a simulation, using the Space file to load and interconnect the required Components. By design, the Space file specifies required capabilities. In practice, as only one component has ever implemented any capability (except in one case), these specifications map directly to Components. Available components are:

  • 3DAudio_FMOD (successor to 3DAudio_OpenAL, which is still functional)

Provides 2D audio (despite the name including 3D).

  • 3DVisuals_OGRE

Provides 3D rendering, including model, texture and particle system loading (and others).

  • AgentManager

Implements the control logic for a range of predefined Agent types (semi autonomous conceptual entities).

  • AgentManager_Waypoint

Implements a system for guiding Agents (from the Agent Manager) along defined paths.

  • CameraPresets

A rarely used Component that allowed specification of a number of in-world locations and provided functionality for moving the common camera between them.

  • DataTransfer_SILC

An experimental Component designed to communicate Agent state between instances of Digital Spaces.

  • GUI_CEGUI

Provides a 2D overlay UI over 3DVisuals_OGRE.

  • HumanAvatar

Provides a connection between user input and an Agent, to provide an in-world human controlled representation of the user.

  • Physics_ODE

Provides rigid body physics simulation.

  • Script_Python

Embeds a Python interpreter in Digital Spaces to provide a Rapid Application Development layer.

  • SGManager

Provides a higher level coordination between other Components that involve a 3D scene graph. Responsible for parsing Scene files, and for connecting physics to graphics.

  • SimulationControl_FPSCamera

Provides a simple connection between user input and camera positioning.

  • SimulationControl_PuppetInterface

A rudimentary implementation of providing a recording/playback feature.

  • SimulationControl_StateDisplay

A simple component that would display the state of a single Agent in a UI window.

  • SpaceVehicleController

Connects user input to control of a specific type of Agent.

  • UserInput_DirectInput

Provides user input to the system.

  • VehicleAgent_Control

Connects user input to control of a specific type of Agent. As functionality is specified by the Space file, at most times, most of these Components will not be used. The most commonly used includes 3DVisuals_OGRE, GUI_CEGUI, SGManager, Physics_ODE, UserInput_DirectInput and Script_Python. Each Component will contain one or more Factories. These Factories are responsible for either implementing functionality directly, or creating/providing access to objects that do.

A graphical overview of an average Space architecture: Image:DSS Architecture.png

Example Python: Basic motion in Python


Example Space:

<environment>
	<required id="{4BC0FC3A-6ADA-4302-A770-1706CE7BBBF4}" >
		<configuration id="{3F139EEC-0EEE-4062-9914-BB7DC58F7B2E}">
			<extern src="mining_tunnels01.scene" />
		</configuration>
	</required>
 
	<required id="{9DCE6830-EBA8-44a0-88C1-B7FE386B5E07}" >
		<configuration id="{1661521C-9E30-42e9-86EF-7129669B5F89}">	<!-- I3DVisualsOgreConfig1 -->
			<searchpath src="." />
			<searchpath src="./meshes" />
			<searchpath src="./textures" />
		</configuration>
	</required>
	<required id="{0FAAF303-F452-4eee-A352-8FC6BB2788B9}">	<!-- CEGUI -->
		<configuration id="{8A24B303-2FE1-4f2c-9B3E-23534A3EC3C7}" >
		</configuration>
		<required id="{8B125698-7D02-4015-934A-83EA89D36E55}" />	<!-- IUserInput1 -->
	</required>
	<required id="{AC0E93B0-719F-475c-BDEA-C6B3E3C98A22}" >	 <!-- FPS Camera -->
		<required id="{8B125698-7D02-4015-934A-83EA89D36E55}" /> 	<!-- IUserInput1 -->
 	</required>
	<required id="{8B125698-7D02-4015-934A-83EA89D36E55}" >	<!-- IUserInput1 -->
		<configuration id="{B11EFB3C-E3C6-4df8-9BBD-61F56B82F70B}" >	<!-- IUserInputConfiguration1 -->
			<map signal="FORWARD" >
				<event code="KC_UP" type="switch" multiplier="10" />
			</map>
			<map signal="BACKWARD" >
				<event code="KC_DOWN" type="switch" multiplier="10" />
			</map>
			<map signal="TURN_LEFT" >
				<event code="KC_LEFT" type="switch" multiplier="1.0" />
			</map>
			<map signal="TURN_RIGHT" >
				<event code="KC_RIGHT" type="switch" multiplier="1.0" />
			</map>
			<map signal="LOOK_UP" >
				<event code="KC_PGUP" type="switch" multiplier="0.5" />
			</map>
			<map signal="LOOK_DOWN" >
				<event code="KC_PGDOWN" type="switch" multiplier="0.5" />
			</map>
		</configuration>
	</required>
 
	<required id="{71CCEAD1-37AD-4572-A267-895207B1082C}" > <!-- Physics simulation plugin -->
		<configuration id="{E0899640-98BA-4d51-A3B5-15C324800CC5}"> <!-- Physics configuration -->
		</configuration>
	</required>
	<required id="{00519F89-B1DF-43d8-9B01-0EE069ADC16C}" > <!-- Vehicle Agent Control Configuration -->
		<configuration id="{00519F89-B1DF-43d8-9B01-0EE069ADC16C}">
			<agent src="undgrdmngdrl.agent"/>
		</configuration>
		<required id="{96E29E53-95F9-4bd5-81D6-DB5FFC90675E}" > <!-- Agent Manager -->
		</required>
	</required>
	<required id="{A07E78D6-1F91-414a-9ED8-4A0AC7CF055C}" > <!-- Python Interpreter -->
		<configuration id="{1BF2273B-7C88-4eab-9325-44DBF8AD5EC8}">
			<heartbeatscript src="ambient.py" />
			<heartbeatscript src="joint_control.py" />
			<heartbeatscript src="shadow_mode.py" />
		</configuration>
	</required>
</environment>
 

Reference for IDs used: Space File IDs and Configuration Formats

Personal tools