QuantumVR
Time Frame: 10.2019 - 02.2020
QuantumVR is a tool I created for my bachelor's thesis. It provides the technology and editors to easily compress virtual space. With this tool, you can create environments that contain potentially infinite amounts of space inside a finite space.
Responsibilities
Creating the concept for a tool that can be used to compress virtual space for VR applications
Implementing systems for rendering, interacting with and moving between overlapping parallel universes or spatial cells
Shaders for rendering spatial cells through stencil buffer based portals
Support for objects passing through portals
Spatial cell management to stop objects in different spatial cells from interacting
Creation of an intuitive editor for authoring spatially compressed scenes without the need to write code
Automated project and scene setup
Node editor for spatial layout authoring
Portal connection visualization
Custom inspectors for all files and components
Setting up two demo levels to perform usertests on different kinds of compressed spatial layouts
Writing a manual
Summary of my Work
I created this tool as part of my Bachelors’s thesis in the last semester of my studies. The idea behind this was to enable a new kind of room-scale VR experience, where players could explore vast environments solely by using real-world movement, no teleportation or other often un-intuitive or motion-sickness-inducing locomotion concepts required. Imagine a big, multi room virtual escape room for example. With QuantumVR, all rooms of the scenario fit inside the tracking space of the player, enabling them to move freely between all of them.
In addition to writing the thesis, there were three major parts to this project: First I had to implement the runtime side of having separate, overlapping parallel universes (called spatial cells) that would not interact with each other, with portals to move between them and make them appear seamless. Then I had to create an intuitive editor for authoring levels with these spatial cells as well as a manual for the tool, while also creating demo levels to conduct usertests on two different kinds of compressed spatial layouts.
For the first part I utilized Unity’s layer and collision matrix system, with portals utilizing the stencil buffer to render the spatial cell they are connected to, allowing for up to eight recursive portals being rendered. The biggest challenge here was to make the portals as seamless as possible when viewed and when objects or the camera pass through. Objects passing through portals also needed special treatment on the physics side since they exist in multiple spatial cells at the same time.
The the central part of the editor is a node editor for creating and editing spatial cells and the portal connections between them, which I created from scratch using Unity’s then-new UIElements framework, a framework utilizing concepts similar to HTML and CSS. Supporting this was a suite of automation scripts for setting up the project (creating layers and the collision matrix) and the scene (creating managers and helper objects, setting up the camera and applying nesseccary scripts and shaders to relevant objects), as well as custom inspectors for all scripts and files. Finally, instead of doing the actual portal rendering in the editor, I created a shader to visualize which spatial cells portals connect to by drawing them in the color of the target cell, and making them visible even when behind other geometry.
The demo levels I created were used in usertests for a research paper that was also part of my thesis. One made it very obvious that the virtual space was overlapping by utilizing the available physical space fully for each virtual room, the other one was set up to hide that fact by having more complex room shapes that only take up part of the the physical space. The question was which of these two scenarios would be easier to navigate for the users, who had to solve a simple puzzle in this environment by pressing a certain squence of color coded buttons in order to get a box that then has to be delivered back to the initial room.