The Distributed Interactive Virtual Environment (DIVE) is an experimental platform for the development of virtual environments, user interfaces and applications based on shared 3D synthetic environments. DIVE is especially tuned to multi-user applications, where several networked participants interact over a network. Dive is based on a peer-to-peer approach with no centralized server, where peers communicate by reliable and non-reliable multicast, based on IP multicast. Conceptually, the shared state can be seen as a memory shared over a network where a set of processes interacts by making concurrent accesses to the memory. Consistency and concurrency control of common data (objects) is achieved by active replication and reliable multicast protocols. That is, objects are replicated at several nodes where the replica is kept consistent by being continuously updated. Update messages are sent using multicast so that all nodes perform the same sequence of updates. The peer-to-peer approach without a centralized server means that as long as any peer is active within a world, the world along with its objects remains "alive". Since objects are fully replicated (not approximated) at other nodes, they are independent of any one process and can exist independently of the creator. Users navigate in 3D space and see, meet and collaborate with other users and applications in the environment. A participant in a DIVE world is called an actor, and is either a human user or an automated application process. An actor is represented by a "body-icon" (or avatar), to facilitate the recognition and awareness of ongoing activities. The body-icon may be used as a template on which the actor's input devices are graphically modeled in 3D space. A user `sees' a world through a rendering application called a visualizer (the default is currently called Vishnu). The visualizer renders a scene from the viewpoint of the actor's eye. Changing the position of the eye, or changing the "eye" to another object, will change the viewpoint A visualizer can be set up to accommodate a wide range of I/O devices such as an HMD, wands, data gloves, etc. Further, it reads the user's input devices and maps the physical actions taken by the user to logical actions in the Dive system. This includes navigation in 3D space, clicking on objects and grabbing objects etc. In a typical DIVE world, a number of actors leave and enter worlds dynamically. Such applications typically build their user interfaces by creating and introducing necessary graphical objects. Thereafter, they "listen" to events in the world, so that when an event occurs, the application reacts according to some control logic.
The characteristics of Distributed Interactive Virtual Environments (DIVE) are those applicable for Distributed Interactive Simulation applications. The DIS standards provide application protocol and communication service standards to support DIS inter-operability. The DIS characteristics that apply to DIVE are: " Interaction delay: any action issued by any participant in the Distributed Interactive Virtual Environment must reach the other participants within 100 ms. If the network delay is more than 100 ms, the received action (mainly encoded in an application data unit, or ADU) is considered as late and not used by the application. Large number of participants: the DIVE application can be played by several users connected via a network such as the Internet. The number of participants should be unlimited to allow everybody to enter the virtual world. Interactive data are short (few tens of bytes) and frequent. This characteristic differs from other multimedia application data like audio and video. Each simulation object can transmit its local state that, in the worst case, represents a small amount of information (less than hundred bytes). High level of dynamicity in group structure and topology Participants join and leave the session dynamically. In this context, the IP multicast model is particularly convenient. Information is continuous. In most of the cases, the behavior of an Avatar at a given time T+1 is an evolution of its behavior at time T (for example the displacement of an avatar).