microsoft / RoomAliveToolkit

Other
715 stars 191 forks source link

Rendering ProjectionMappingSample on Multiple Machines #11

Closed TheNome closed 9 years ago

TheNome commented 9 years ago

We've gotten the system to run on two machines (will be three once a PCI USB3 hub comes in) and it currently runs the Projection Mapping Sample on the host correctly. Going back through the ReadMe, it states that it does not support rendering across multiple machines unless done so in a distributed framework. Any ideas on how one would go about doing this so that we can get all three machines to render their own images or all three at once?

thundercarrot commented 9 years ago

Hi Nick,

The projection mapping sample that is part of the RoomAlive Toolkit easily supports 3 projectors on one machine, 4 if you can live without a separate console display or have another video card for the console. This can be done with just one machine that has a relatively modern graphics card with 4 outputs (e.g., Nvidia GTX).

Are you trying to support more than 3 or 4 projectors, or do you have some other reason to get the rendering going on multiple machines?

The original RoomAlive system supported 6 projectors using a completely different rendering scheme under Unity. I can’t recommend the approach we used then for a number of reasons.

The example I show in the video uses 4 machines:

• 3 desktop PCs each with a connection to a Kinect v2. These are only used to host the Kinect cameras, and do not participate in rendering. In the most recent setup, I use 3 tiny headless Intel NUC PCs and they work great for this application. These PCs are really only used to get the Kinects on the network. These machines need minimally an Intel integrated HD4000 GPU (see Kinect v2 requirements); many laptops can do this.

• 1 desktop PC with a 4-output Nvidia GTX 660Ti. This PC drives 3 projectors for rendering and 1 LCD for the console. A fourth Kinect v2 is connected to this machine; this Kinect is only used for head tracking and does not participate in the projector/camera ensemble.

All four machines are plugged into the same network switch.

Does that help?

Andy

TheNome commented 9 years ago

We're using two server boxes with i7s and Quadro cards with a small microatx case with an i7 and integrated intel graphics. We can run multiple displays on each of them but I do not believe any of them will regularly handle running more than 3 displays at one time. Using a monitor to display the screen and 3 projects from one system, unfortunately, is not possible with the way they are setup. We have the 3 systems plugged into a router and can properly communicate with one another. Unfortunately, only one machine (the host) renders everything so it reduces our trifecta of projectors into a single projector image and kind of makes the whole thing go from this spectacle that is going to work well into an underwhelming display of reality. Anything you can recommend we use to try and set up a framework for this?

thundercarrot commented 9 years ago

I think I would look into upgrading one of the Quadro cards to something that can drive 4 outputs, or add such a card to the machine with integrated graphics. You can delve into the world of distributed rendering, but I think you'll find it much easier to simply upgrade the video card.

TheNome commented 9 years ago

I would love to do that but, alas, that is impossible. Since we're on a federal budget and these decommissioned servers are not technically ours to dig apart, we can't make large scale hardware changes to them. Hence the need to run a rendering framework to try and get things to run correctly.

**Edit: added "large scale" to improve clarity

thundercarrot commented 9 years ago

Try this: run a copy of the projection mapping sample on each projection machine. For each, edit the calibration.xml file to include just the projector connected to that machine. Disable head tracking in the Settings.settings file for now.

TheNome commented 9 years ago

By "including just the projector" do you mean to remove the Kinect from the calibration.xml file as well? Our current setup gives the appropriate IP address to the designated machine running a Projector and its Kinect. I will disable head tracking and run the Projection Mapping Sample once we get the rest of the setup moved to its final location over the next couple of days. Thank you for the response and assistance, I will reply back with any further update on the matter.

thundercarrot commented 9 years ago

No, leave the entries for all the cameras in the .xml file. Each projection machine may potentially require all depth images.

TheNome commented 9 years ago

Thank you for the assistance, Mr. Wilson. We have run out of time to get this up and running properly and can no longer pursue it any further. We managed to get it across two systems and calibrate. If we can, somehow, pursue this again in the future I will reopen the ticket. Thank you for your patience and input.