[osg-users] Loading problem, OpenVR integration

Lorenzo Valente oneiros.valente at gmail.com
Wed Nov 2 10:00:18 PDT 2016


I'm working on a Virtual Reality project that involves the rendering of a OSG scene in an Oculus Rift CV1 device using the OpenVR library. All these technologies are pretty new to me so everything is as exciting as frustrating :)
My code is based on the Chris Denham "osgopenvrviewer" project (you can find it on Github)

So, my starting point is a osgViewer::View that contains my immersive scene. I managed to render it in the headset display by doing this:

osg::ref_ptr<OpenVRViewer> vrViewer = new OpenVRViewer(myView, myDevice, myRealizeOperation);
osg::ref_ptr<osg::Node> sceneData = myView->getSceneData();

So far so good, the render quality and the stereo effect are perfect.
The problems start when I move my head to look around in the scene: it looks like the objects outside my first view frustum are not ready when the application starts, so I get serious frame drops when I see these objects for the first time. These frame drops are particulary annoying in the headset, where a frame drop freezes the view for a fraction of second multiple times, causing a very ugly effect.

This happens only the first time I look around: after a first "scan" of the scene, everything works smoothly and nice.

The system I'm working on started as a simple desktop application with a single view/camera and I couldn't reproduce these problems in the no-VR version. I can look around very fast using a gamepad without losing any frame.
So, I guess the problem is in the OpenVR integration.

Is there anyone who already had this kind of issues? Do you have an idea on how to manage pre-loading of the entire scene before the realtime simulation starts?

Thank you!


P.S. I see that many people solved this problem using osgViewer::Renderer->setCompileOnNextDraw(true) but I think it is not enough in my case. I have two RTT slave cameras for VR rendering (left eye and right eye) and I saw that the "setSceneData" method internally calls "setCompileOnNextDraw" on every slave camera in the viewer.

Read this topic online here:

More information about the osg-users mailing list