A small team here at FRL have spent these last few months experimenting with Oculus Quest and the Web* family of APIs, building tools to bootstrap immersive content creation for education (specifically, computer graphics education). For those unfamiliar with the APIs, here’s a quick introduction:
First off, meet the Immersive Web, a working group with close ties to Mozilla who’s mission is
…to bring high-performance Virtual Reality (VR) and Augmented Reality (AR) (collectively known as XR) to the open Web via APIs to interact with XR devices and sensors in browsers.– https://w3.org/immersive-web
WebVR is the first API produced by Immersive Web, and it targets a narrow class of VR devices (Oculus, Vive, Daydream, Galaxy, etc). The spec has been around since at least 2017 and has seen widespread community adoption (current releases of A-Frame and three.js use or integrate well with WebVR). WebVR is also slated for deprecation, in favor of…
WebXR, the latest spec to come out of the Immersive Web. As the name suggests, WebXR expands on the concepts of WebVR to include support for Augmented Reality devices. The API follows patterns of initialization closer to WebGL, and will eventually include interfaces to access real-world data (think imagery, geometry, etc) to allow for real-time, real-world interactions.
While WebXR is maturing at a rapid pace, here at the lab we’ve run into some snags.
When our lab first got a hold of the Oculus Quest hardware, we dove head-first into the WebXR sample code and cobbled together some working examples. We made quick progress until… an update of the Oculus Browser broke WebXR support! This wasn’t a huge surprise (the Immersive Web does say, in highlighted text, that their sample code is liable to break at any time), but it definitely threw a wrench in our plans. We had to backpedal and switch our experiments over to WebVR which, while ear-marked for deprecation, is the more stable API.
Long story short – WebXR promises to be a grand-slam standard for all things AR, VR, and web. It’s just half-baked and inconsistently supported across browsers. We’ll revisit it again in a few months.