I recently ended up with a Google Cardboard clone - namely, a Samsung GearVR headset. I’m not sure whether the electronics inside are broken or just too snobby to interact with my trusty Moto G3, but either way, it functions like a plain Google Cardboard clone to me. So anyway, as Minetest wouldn’t run happily in side-by-side 3D mode on my phone, I set my sights on heavier VR stuff - namely Elite: Dangerous, the most solid VR game I’ve seen.
Of course, my phone doesn’t run Elite: Dangerous. It hardly runs Minetest, it’s not built for 3D, nor does it have an x86 processor, so we’re going to need to stream it from my desktop.
This part is easy enough. Recently, Valve published the Steam Link app, which is what I ended up using, though Moonlight is another, free-as-in-freedom option. Also, for the sake of image clarity, I’m borrowing a Moto G4, because it has a 1080p display over my G3’s 720p display.
Before I get to my desktop, here’s some background: I’ve never bought a computer display. I’ve managed to get some half-decent ones for free - two 48cm 1440x900 monitors and a 56cm 1680x1050 monitor. They’re nothing fancy, but when you do most of your work in a 9px monospaced font that’s a lot of text, and with my setup it’s quite nice. Also, 16:10 is better than 16:9. That said, I don’t own a 1080p display, which can cause issues.
One instance of it causing issues is with Elite: Dangerous.
It refuses to run at any resolution above your monitor’s native resolution. I ended up compromising for 1680x945, but you can probably do better if you’re not as cheap as me.
After fixing the resolution I set it to use side-by-side rendering and fired it up. It worked nicely streamed to the phone, but perhaps predictably, no motion tracking, because there’s no magic going on here. So…
There’s a couple of routes you can take for this: infra-red tracking with IR LEDs on the headset, marker tracking like ArUco, or motion tracking using the sensors on the phone.
I didn’t have any LEDs to play with so I initially tried marker tracking. I grabbed a copy of opentrack, taped the example marker (below) to the front of my phone bracket, and got to using my $5 webcam to provide input for looking around in E:D.
While it worked well enough, the tracking was … imperfect. Due to the curve of the front of my headset, it ended up working diagonally, and it was losing track of the marker somewhat regularly.
It’s worth noting that I previously used said webcam to do face tracking with FaceTrackNoIR before I got the headset, and that worked passably, though it’s not as comfortable as actual VR. Probably needs more tweaking.
I ended up having a good bit of success with a head tracker, using the sensors in the phone. I forwarded that to OpenTrack on my desktop and that talked to Elite: Dangerous and it ended up working pretty well.
This setup isn’t perfect.
It’s a pretty good setup as it turns out. Not as good as it could be, but it’s a pretty good setup for free.