Clustering allows you to use multiple computers to drive a graphics system than cannot be used with only one computer. The main issue then becomes how to synchronize all those computers?
There are multiple levels of synchronization: framelock, swaplock and genlock.
Why use a cluster ?#
A cluster is usually used in two situations:
One computer does not have enough graphic outputs. For example if your system has 20 projectors, it is nearly impossible to plug them in only one computer: there are not enough graphics output on your graphics card.
One computer does not have enough graphics power to run the intended applications. Theoretically, one computer and one graphics card could power a 4 sided Cave with 4 displays. But that means that one graphics card will have to compute 4 stereoscopic images, which means 8 images. Depending on the application and on the resolution of the displays, there is quickly a problem of performances.
A cluster is a collection of computers that are used together to drive one graphics system. Typically, one computer drives one or more projector/screen.
Each computer is called a "Cluster Node".
There is a primary computer that is called the "Cluster Server" and acts as the master for the other computers, which are called "Cluster Clients".
The server will gather all the information needed to synchronize all the cluster nodes and send it to them.
In a cluster, the main issue is to correctly synchronize all the nodes, otherwise there will be discrepancies at the junction of displays.
There are several layers of synchronization.
Framelock makes sure that the simulated world is the same on all cluster nodes. It makes sure that everything is at the same place and the same state on all computers, so the distributed app is coherent. Perfect framelock is hard to achieve unless you are writing the 3D engine yourself, and even then, it's not always possible to synchronize everything perfectly.
For more important information, refer to section Synchronization.
Note: Framelock is also sometimes another name for Genlock.
Swaplock makes sure that all computers swap their double buffers at the same time, meaning that each new picture is displayed at the same time on every computer.
Otherwise you can have one computer displaying a previous frame while another computer displays the current frame.
This swaplock can be done by software (SoftSwapLock), but is more precise when doubled by a hardware swaplock. This hardware swaplock is generally handled by the graphics cards through an external synchronization card, such as a NVidia Quadro Sync cards with NVidia Quadros. The same option is also possible with AMD cards.
This option is called NVidiaSwapLock in MiddleVR's cluster options.
Without a sync card, MiddleVR can ensure a maximum of one frame delay.
Genlock is a hardware option that also requires a Quadro Sync card (previously GSync card) with NVidia Quadros and AMD cards. When using stereoscopy, Genlock makes sure that all the computers display the same eye (left or right) at the same time. If you're not using it, a computer might be displaying the right eye while another one displays the left eye. Headache guaranteed!
This diagram details a typical architecture.
Note: This diagram shows that the server's GPU is not synchronized with the client's GPUs because the ServerUnityWindow option is enabled