This system is split into two major components: the input system and the display system. They are two separate programs and may even run on seperate computers connected by a network; in this way the dispay may run on a dedicated fast machine, while puppeteers connect to it from remote input consoles.
The input system is responsible for intercepting input from the user. This input may come from a variety of input devices. While only two- and three-axis joysticks, and MIDI consoles are supported now, the user interface has been designed that more devices can be easily added without having to make major changes to the system.
One or more input sources may be active at any given time, giving the performer a great deal of flexibility. Several computers can also connect to the same display unit to allow for multiple puppeteers working on the same scene. The user interface permits the performer to map the various input devices and actions to different virtual actions in the scene, so that turning a puppet's head might, for example, be assigned to the joystick's horizontal axis, while its limbs are controlled with MIDI sliders. This allows the performer to customize the control scheme to his or her preference, or the needs of the particular performance.
More information on the PuppetMaster is available here.
The display system, built on top of the LithTech engine, is responsible for rendering the three-dimensional scene. It receives updates from the input system and animates the character models accordingly. It is also responsible for displaying any environmental elements of the scene -- the "set".
More information on The Stage is available here.
Because the process of puppeteering requires the control software to have some insight into the structure of the puppet itself on the stage end, a variety of files exist for them to share this information. Foremost among them is the VPM file, which details the various control axes of the puppet so that the user interface can map input controls to them.
Most of the data files involved in the project are XML based, and hand-editable. The modeller creating puppets should generate VPMs for the puppeteers.
More information on file formats is available here.
These two components communicate with one another over a standard UDP/IP network connection. We developed our own protocol (the Virpet Packet Format - VPF) to facilitate this communication. At present it permits the Stage to listen on any number of ports, and to have any number of control consoles connected per port, although in practice this is without utility.
More information on the network system is available here.