Janus VR
An "Internet Browser" supporting the Oculus Rift

(on Linux and Windows using Qt5 and OpenGL)


Release 25.1: Windows (zip) | Linux (tar.gz) (uses Qt 5.2.1 and Oculus SDK v0.2.5 (for Windows a MinGW-friendly version) - DK2 support planned!)


I'm James McCrae, the creator of Janus VR.

Janus VR was originally a project for learning programming for the Oculus Rift - a 3D VR internet browser which I originally called FireBox (webpages are represented as boxy rooms - get it?). I recently renamed the project to "Janus VR", after the god Janus from Roman myth. Here is a passage which describes Janus from the novel "The Light Between Oceans" by M. L. Stedman:

"You know Janus is where the word January comes from? It's named after the same god as this island. He's got two faces, back to back. Pretty ugly fellow."

"What's he god of?"

"Doorways. Always looking both ways, torn between two ways of seeing things. January looks forward to the new year and back to the old year. He sees past and future. And the island looks in the direction of two different oceans, down to the South Pole and up to the Equator."

Janus VR is a work in progress allowing a spatial walk through the internet, inspired by the novel Snow Crash by Neal Stephenson. The basic analogy is that webpages are rooms and links connect rooms as doorways. Pictures embedded in the webpages hang on the room's walls. The environment is dynamically generated, using a portal-based system. Pages with special HTML tags can show enhanced 3D content, and interactive editing of these "FireBoxRooms" is possible from within Janus VR directly. "Site translators" take the content and known structure of existing sites, generating FireBoxRooms from this data which spatially arrange the content in a more-meaningful manner. The experience is also "multi-player" or collaborative -- multiple people can navigate virtual spaces together, communicating via voice or text and sharing portals to new areas with each other.


(Windows) Issues with running or using Janus

(Windows) Playback Issues

FAQ - answers to some frequently asked questions about Janus VR.

Janus VR subreddit - great place to ask questions, and talk to other people in the Janus VR community!


vrsites.com - a great place to create your space! They do hosting and are doing great work on making it easy to get started with creating your first VR space. A portal for your room is added to its main areas, so that anyone can wander in, discover and experience it!

SketchUp2Room: Use Google Sketchup to create your room (complete with lights/shaders, collision geometry, portals/links) and export it as a Janus VR-compatible environment! (Created by Lisa Croxford)

Mumble: voice chat with others. Janus now supports the positional audio and context features of Mumble! (via Mumble's Link plugin).

Quick setup for Mumble:

FireBoxRoom HTML-like specification

instructions instructions2


July 28, 2014

July 27, 2014

July 26, 2014

July 25, 2014

July 20, 2014

July 19, 2014

July 18, 2014

July 15, 2014

July 14, 2014

July 12, 2014

July 10, 2014

July 8, 2014

July 6, 2014

July 3, 2014

July 2, 2014

July 1, 2014 (Happy Canada day!)

June 30, 2014

June 29, 2014

June 28, 2014

June 25, 2014

June 22, 2014

June 21, 2014

June 12, 2014

June 10, 2014

June 3, 2014

June 1, 2014

May 30, 2014

May 29, 2014

May 23, 2014

May 22, 2014

May 16, 2014

May 15, 2014

May 5, 2014

April 29, 2014

April 28, 2014

April 22, 2014

April 21, 2014

April 20, 2014

April 18, 2014

April 14, 2014

April 12, 2014

April 11, 2014

April 10, 2014

April 4, 2014

April 3, 2014

April 2, 2014

April 1, 2014

March 30, 2014

March 29, 2014

March 27, 2014

March 26, 2014

March 24, 2014

March 19, 2014

March 18, 2014

March 17, 2014

March 16, 2014

March 14, 2014

March 12, 2014

March 9, 2014

March 6, 2014

March 5, 2014

March 4, 2014

March 2, 2014

March 1, 2014

February 28, 2014

February 27, 2014

February 25, 2014

February 19, 2014

February 18, 2014

February 15, 2014

February 14, 2014

February 13, 2014

February 10, 2014

February 8, 2014

February 7, 2014

February 5, 2014

February 4, 2014

November 27, 2013

November 26, 2013

July 17, 2013

July 9, 2013

July 4, 2013

July 3, 2013

June 27, 2013:

Implementation Details:

FireBox was implemented in C++ and compiles on Linux machines. Libraries used include: OpenGL (graphics), Qt5 (windowing). Uses a C Linux port of the Oculus SDK 0.1.5 ("nsb"'s libovr_nsb) to read tracker data. The remainder I implemented - the OpenGL and GLSL shaders for inverting the Rift's optical distortion, the engine that computes the geometry for rooms, the interface, etc. If/when the Oculus Rift SDK supports Linux, the plan will be to change to that codebase instead - though implementing everything independently and having access to the complete source was fun and educational!

Old Images:

Release 5!

Changes for release 3: Some significant changes to the Rift rendering pipeline to bring it closer to the SDK implementation (now only using one framebuffer split in two, modifications to GLSL shaders to support shifted lens centres/asymmetric "barrel" distortions, fullscreen mode now uses the display resolution rather than hardcoded 1280x800 - this is for both pre-distortion and final rendering). More minor changes: Added skyboxes (textured cube surrounds the view and appears infinitely distant), instructions to the initial room, and just playing with how the space is created (you can now see "over" the walls into other rooms), text items now scroll/animate, webpage images are now larger (since they are the main attraction).

Changes for release 2: fading in/out and animation for URL entry widget, keyboard instructions at bottom of screen, application runs without Rift, slight performance speed-ups, and added readme.txt to binary release to help get started.

Looking "into" my academic webpage

Moving to Eugene Fiume's webpage

Moving to Gord Kurtenbach's webpage

Showing the URL entry widget (toggle visibility with tab). Here we show entering the URL www.oculusvr.com.

The entrance that emerges in the current room after entering www.oculusvr.com and pressing enter.

In "flight mode" (press F), you can see the structure of the rooms.

Blocks of text in pages are shown on the walls.

Overlaying a calibration grid and revealing distortion parameters (note the gridlines appear roughly straight and parallel when viewed through the Oculus Rift - the purpose of this "barrel distortion" is to invert the "pin-cushion distortion" of the optics where projected points are pulled closer to the centre of projection).

The optical distortion inversion function is a low-order polynomial which is identical (except for coefficients kappa) to a truncated Taylor series expansion of the trigonometric function sin:

f(r) = k_0 * r + k_1 * r^3 + k_2 * r^5 + k_3 * r^7,

where r is the pre-distorted distance from centre of projection, and f(r) is the centre of projection distance following the distortion. This is a simplification of Brown's distortion model (it ignores decentring distortion - tangential distortion which occurs when eye centre is not along the optical axis of the lens).

Valid HTML 4.01 Strict