Multi-head display system

What tools, APIs, libraries exist there that I could use to create a system capable of rendering hi-res 3D scenes in real time on a display from screens / projectors 4, 8, 9, 16, etc.? To install with 8 projectors, should I go for cluster solutions or stay with one node with four dual-core graphics cards? Does anyone have any experience?

+4
source share
5 answers

Equalizer is probably one of the best solutions you will find.

It is specifically designed to separate into separate parts and distribute them across displays.

Description:

Equalizer allows the user to scale the rendering performance, visual quality and display size. The equalizer-based application works without changes in any visualization system: from a simple workstation to large-scale graphic clusters, workstations with several GPUs and Virtual Reality installations.

Equalizer example:

Render Wall http://www.equalizergraphics.com/screenshots/wall2-small.jpg

I worked on projects that tried to do such things without Equalizer, and I can honestly say that it was pretty bad. We just worked. After finding the equalizer later, I can’t imagine how much easier it would be with such an instrument.

+5
source

You can use Xinerama or XRandR when working with X11 / Xorg. But to quote Wikipedia on Xinerama :

In most OpenGL (3D) implementations, direct rendering only works on one of the screens. Windows that should display 3D graphics on other screens tends to just appear black. This is most commonly observed using 3D screen savers that show on one of the screens and black on the other. (Solaris's SPARC OpenGL implementation allows direct rendering on all screens in Xinerama mode, just like nvidia when both monitors are on the same video card.)

I suggest you read the Wikipedia article first.

+2
source

I use one of these great TripleHead2Go at home on my game console to control 3 displays from one video card (even in Vista). Two displays with a frame in the middle are a kind of chip for games. TripleHead2Go http://www.maximumpc.com/files/u21826/header-3htgo.png

I found out about them because we were looking for several of them at work to control our system, which has about 9 displays. I think for this we finished work with a system with 5 PCI-X slots and a card with two heads in each. If you are having trouble getting this large number of PCI slots on your motherboard, you can expand the PCI-X expansion systems.

+2
source

You should take a look at the AMD Radeon HD 5870 Eyefinity 6-edition graphics card. This allows you to simultaneously display data on six displays and allows you to set several parameters in the driver relative to the output location (3 lines, 2x3 horizontal / vertical), etc.) .

As for the API: with such a card (but also with TripleHead2Go) you get one virtual canvas that supports full 3D acceleration without loss of performance (much better than with an extended desktop). At AMD they call this the Single Large Surface (probably equivalent to what NVidia calls the horizontal / vertical range). The caveat here is that all outputs should have the same resolution, frame rate, and color depth. Such a surface may have a resolution of 5760 x 3240 or higher, depending on the settings, so it’s good that 5870 is so fast.

Then, in your application, you transfer this large virtual canvas (using OpenGL, Direct3D, or in some other way), and you are done ... Besides what you did not say if you are going to display the angle to each other or in a flat configuration. In the latter case, you can simply use one perspective camera and visualize the entire buffer buffer. But if you have more settings for "surround sound", you need to have several cameras in your scene, they all look from one point.

The fastest loop for this rendering is probably the following:

for all all objects set textures and shader and renderstate for all viewports render object to viewport 

but not

 for all viewports for all objects set textures and shader and renderstate render object to viewport 

since switching objects cause the GPU to lose much more useful information from its state and caches than switching viewports.

You can contact AMD to check if you can add two of these cards (power permission) to one system to display up to 12 displays.

Please note that not all configurations are supported (for example, 5x1 is not, as I read from the FAQ).

A lot of my experience in this was collected during the creation of the Future Flight Experience project, which uses three beams (each with its own camera in a 3D scene), a dual Nvidia GTX 280 in SLI and Matrox TripleHead2Go in Windows XP.

+2
source

I know that the OpenGL pyglet shell ( http://www.pyglet.org ) for python supports multi-platform multi-monitor; you can look at the source code and find out how it is implemented.

+1
source

All Articles