CAVE plugin

What it says on the tin: a place to discuss proposed new features.
Post Reply
User avatar
Florin
Kobold
Posts: 33
Joined: Thu Mar 19, 2009 3:15 am

CAVE plugin

Post by Florin »

Hi,

As the price of hardware is continuously dropping more and more people can afford to buy complex systems as a CAVE system(at least this was a fact before the global financial crisis). Anyways, there are many virtual reasearch institutes which want to have a CAVE in their labs. I'm a PhD in such a virtual reality research lab. But in our lab there is already a big cubic CAVE for a few years now. It uses the BSContact control from BitManagement for rendering. It has 3 walls and for each one of it there are 2 viewports superimposed one upon the other with a certain offset for stereoscopic effect. In total the system has 6 projectors and each viewport is handled by a separate PC. All the PC's are connected to a central server. They all run though as a single application, being synchronized by the server.

Because I'm not very enchanted of using any ActiveX control as BSContact or some other things like InstantReality, but something more flexible like Ogre, I need a pluging for CAVE systems.

Here are only some discussions about this:

http://www.ogre3d.org/forums/viewtopic.php?f=1&t=14521
http://www.ogre3d.org/forums/viewtopic.php?f=3&t=32881

What we (scientists) need in order to use Ogre in our research is a working plugin for CAVE (distributed) systems so that we don't have to stay and think whether we should go straight into the business with something like InstantReality which has buil-in CAVE modules, or spend weeks or even months in addition to build a stable and efficient network architecture for the CAVE. I'm exact in this situation where I have to take this decision and believe me that I really want to stick with Ogre. It's just something that definittly should be wrapper into a plugin. In my experience I built a TCP client-server application for sending frames over the socket from server to clients and I guess it would not be very complicated to implement something like this for a variable number of clients in the network. I ask for this feature and I am willing to participate in developping this plugin within networking section, since I'm not quite experienced with Ogre.

Please take a moment to think about this than if this sound's well to you we could start doing the job.


What do you say ?
User avatar
Florin
Kobold
Posts: 33
Joined: Thu Mar 19, 2009 3:15 am

Re: CAVE plugin

Post by Florin »

I've read good critics regarding Ice http://www.ogre3d.org/forums/viewtopic. ... 33&start=0. This would be a first start: using Ice for networking.


What do you think the next step could be ?
User avatar
Game_Ender
Ogre Magi
Posts: 1269
Joined: Wed May 25, 2005 2:31 am
Location: Rockville, MD, USA

Re: CAVE plugin

Post by Game_Ender »

Florin wrote:What do you think the next step could be ?
Coming up with a decent architecture to distribute changes to the scene graph across the network. The only idea I have right now is created a "distributed" scene manager. The distributed scene manager is really just a wrapper, on the server it would pass all state updating calls to the remote scene manager(s) as well as the real underlying scene manager. The client scene managers would the receive those calls and hand them off to local real underlying scene manager. So in essence calls that load up a mesh or move a scene node, would be sent to all the remote scene managers. Of course it requires some extra work on the client and server but that basic bit of it.

For the network side you could create ICE interfaces to match the ogre ones you wish to work with remotely. You would have to carefully design and use to keep it from blocking or slowing down your application but it should be possible.

The other method would be a little more high level and less general. You would work at the application level and figure out a way to propagate your object state across the network in a similar manner.
User avatar
madmarx
OGRE Expert User
OGRE Expert User
Posts: 1671
Joined: Mon Jan 21, 2008 10:26 pm
x 51

Re: CAVE plugin

Post by madmarx »

I have done it for my work with ogre (without perspective correction though).
Ogre is just one rendering engin, there is no direct link with the application logic.
I used network just to send messages about changes in the scene (but not tcp, neither ice). So the scenemanagement is recalculated for each computer.
Works perfect.
Tutorials + Ogre searchable API + more for Ogre1.7 : http://sourceforge.net/projects/so3dtools/
Corresponding thread : http://www.ogre3d.org/forums/viewtopic. ... 93&start=0
User avatar
Florin
Kobold
Posts: 33
Joined: Thu Mar 19, 2009 3:15 am

Re: CAVE plugin

Post by Florin »

Hi madmarx,

Thanks for reply.
Works perfect.
I'm happy for you :)
Ogre is just one rendering engin, there is no direct link with the application logic.
I understand this.
I used network just to send messages about changes in the scene (but not tcp, neither ice).
Than maybe you use UDP (recommended for games) ... or is there any alternative left ?

Does the networking communication slowing down your application ?

I have tried the Ogre-RackNet binding http://www.ogre3d.org/forums/viewtopic.php?p=273201 and also an updated version available here http://www.jenkinssoftware.com/raknet/f ... pic=2342.0. That looked to me quite saccadic, though other users say it's very fast. The update was about 4 times per second. Definitely I need better performance for my project.

Do you also use interpolation ?
Don't mind for so many questions, please :mrgreen: ... I'm a curious guy
User avatar
madmarx
OGRE Expert User
OGRE Expert User
Posts: 1671
Joined: Mon Jan 21, 2008 10:26 pm
x 51

Re: CAVE plugin

Post by madmarx »

I use UDP. There is a bunch of thread about Enet in ogre forums if you want to know more :wink: .
Network is really the burden on this app, but in my case, the scene was less than 3000 moving objects, and so was above 30fps (I don't want to go over 30fps in order to keep the network smooth, but it could have gone much quickier). For that reason I don't need interpolation on networking data, but it can be useful for special effects like realistic motion blur (but I don't use it today).

I could have improved the network system (by using int instead of string to transmit etc....). But it was already very powerful.

Do you have some informations to make the calculation of the deformation (matrix projection) due to head tracking? I would really appreciate. :D
Tutorials + Ogre searchable API + more for Ogre1.7 : http://sourceforge.net/projects/so3dtools/
Corresponding thread : http://www.ogre3d.org/forums/viewtopic. ... 93&start=0
User avatar
Florin
Kobold
Posts: 33
Joined: Thu Mar 19, 2009 3:15 am

Re: CAVE plugin

Post by Florin »

Hi madmarx,

So you are using Enet... hmm. Maybe I will use it too. I'll think about it...

Our CAVE looks basically like this seen from the top:

http://www.postimage.org/image.php?v=gxvIEPS

Let's take the case in the picture: when you move the head tracker from the black point to the red one it means that you have been moving inside the CAVE room and of course in the virtual environment. In the new position you have new frustrums for each screen. This means that projection matrixes will have to adjust to the new frustrums, just as if you would use some input device to navigate in the virtual environment from the black point to the red one.
Secondly, the blue virtual object will lie a part in the frustrum of the right side screen and the other part in the frustrum of the front screen. There shouldn't be any discontinuity if the cameras are rotated at 90 degrees one from another. Correct me if I am wrong. You could post a picture of the problem you are experiencing though, maybe there is something that I am missing.

Regards.
User avatar
Florin
Kobold
Posts: 33
Joined: Thu Mar 19, 2009 3:15 am

Re: CAVE plugin

Post by Florin »

The new frustum should change just as if you would be looking on a window instead of a screen. Something like this http://www.postimage.org/image.php?v=aV1qkFh9 or http://www.youtube.com/watch?v=Jd3-eiid-Uw

Code: Select all

void Frustum::calcProjectionParameters(Real& left, Real& right, Real& bottom, Real& top) const

This function takes the coordinates of the top left/ bottom right corners of the screen. I haven't worked with it before but I will in the next few days cause I also need to implement the head tracking. I'll let you know about my progress.

Regarding the network issue, I don't know why I couldn't get ENet server and client to connect. After 2 days of playing with it I give it up. Now I am playing with ZoidCom. I had more succes with this one. It has some low level networking options (Layer 2) but also very handy high level ones (bit streaming, object replication, events etc.). I like it. The only thing I don't know is which one would be the best choice. I liked Ice at the begining but soon it became kinda complex, Enet didn't worked for me :( while ZoidCom seems pretty neat and straight forward. I only wonder how fast would it turn out to be.
User avatar
madmarx
OGRE Expert User
OGRE Expert User
Posts: 1671
Joined: Mon Jan 21, 2008 10:26 pm
x 51

Re: CAVE plugin

Post by madmarx »

Hi, thanks a lot for the informations about the frustum.
I think I will try to update my code later in the year or in 2010 (<=>when I got time) with stereo too.

Concerning the network issue, sorry that Enet did not work for you ( :( I feel bad that my advice did not help you more). I hope you will find a solution that fits your needs. I don't know ZoidCom, but from the front page it looks like it has lots of nice high level features.

Good luck :D !
Tutorials + Ogre searchable API + more for Ogre1.7 : http://sourceforge.net/projects/so3dtools/
Corresponding thread : http://www.ogre3d.org/forums/viewtopic. ... 93&start=0
Post Reply