We’re starting internal and private testing of VR preview 4 – if it goes well, we’ll release it early next week. A few notes on usability:
Have Your Mouse Cake and Eat It
We got a metric ton of “bug reports” that users couldn’t click “Disable VR” when using the 3-d mouse. I put bug reports in air quotes because disabling click zones on the main monitor when using the 3-d mouse was totally intentional! (In other words, I broke that button on purpose.) My thinking was that you might click on “Disable VR” by accident while in the headset because you don’t know what the 2-d mouse is hovering over while clicking.
In VR4, we have a solution to the problem of whether the 2-d or 3-d mouse is the “intended” cursor when a click happens: we read the headset’s “on the user’s head” sensor and disable the 3-d mouse (temporarily) when you take the headset off. So you can be clicking in 3-d, take off the headset and immediately click “Disable VR” and we figure it out. This feature is great for developers who need quick access to 2-d debug tools like the texture browser or DataRef editor.
WMR Users: sorry, but I think this feature does not work with WMR headsets due to a bug in the WMR SteamVR drivers. When the drivers are fixed I think it will just work. The feature just works on the Vive.
Looking Around in VR
The first VR preview allowed you to move around you view with the thumb-stick in some views. This wasn’t the greatest decision on our part because the thumb-stick was also double-booked to teleport, causing some pretty weird and unexpected results.
For VR preview 2 and beyond, we changed the rules:
- Thumb sticks are axes that are assigned to do stuff.
- If you assign a thumb stick to “VR use” it can only be used for teleport and scrolling over laser-pointed UI.
- Each thumb stick can be assigned separately if you use two VR controllers.
A bunch of users asked for move-around to come back to the thumb stick. As it turns out, it’s already possible, and the new way is better than the old way. Here’s the trick:
In VR2 and onward, there is a new axis type: custom commands. This option lets you assign two or four custom commands to be held down while the axis is moved to different ranges. With this feature, you can assign the view-move commands to the thumb stick of one of your controllers. And if you use the 4-way command split (four commands per axis, eight total) you can even get low and high speed moving based on how far you push.
Non-VR users: you’re still reading this far down? Really? Well, this feature is actually good for everybody – you can split any axis into commands on any joystick, not just VR controllers. So if you have a fancy-pants $25,000 USB joystick with a bunch of extra thumb sticks or knobs, you now have flexibility to use them for new purposes.
What Can Plugins Do?
We are working on plugin API support for creating UI windows in VR – basically the kinds of things you can do with ground services will be possible with plugins too. Tyler will post more details, but the main idea is to not have to take the headset off to use plugin UI, etc.
This VR UI support for plugins will be limited and is absolutely not meant to make 3-d interact-able “things” like our iPad. We may add more powerful APIs later, but those will come after 11.20 ships, when we have a clear idea of what the interface should be. The same goes for direct data about the controllers, receiving 3-d events, etc. This stuff is still just a preview for us, so it’s too soon to make a stable API. We can do plugin windows because we’re basically taking your 2-d window and mapping it to 3-d.
The next preview also supports limited drawing that works in 3-d. If you draw using OpenGL in the phase-aircraft drawing callbacks, you’ll be called twice, once for each eye, with the appropriate DataRefs and matrices updated. If you are drawing OBJs, please prefer the new XPLMInstance API (you can use our sample code to emulate the new API on old versions of X-Plane if you need to support X-Plane 10). Unlike drawing from a drawing phase, the XPLMInstance API uses the true stereo-hardware-accelerated drawing path and is thus better performance. (In the long term we expect instancing to out-perform calling XPLMDrawObject.)
For 3-d interaction with aircraft, our advice for maximum compatibility is simple: use our manipulators, don’t create your own out of 2-d panel callbacks, hidden mouse windows, or any of the other techniques we’ve seen. Our manipulators provide maximum future compatibility for standard 2-d and 3-d gestures that users can expect to have work across aircraft.