Back to Software

Virtual Reality Makerspace

The Virtual Reality Makerspace is a collaborative learning environment developed for the UBC’s Department of Language and Literacy Education and UBC Master of Educational Technology Program. Its purpose is to give remote students a space where they can build and solve problems together without needing access to a physical makerspace. For this work term, I was both a software developer and the project lead, which meant in addition to writing code I managed our team meetings, updated trello boards, organized project documentation and was a liaison between our team and the stakeholders. I will mainly be discussing my contributions on this page but if you want to learn more about the project overall, you can click the link here:

Our stakeholders wanted the following features in the VR Makerspace:

Virtual Reality Makerspace environment
Sliced materials in the Virtual Reality Makerspace

System Architecture

For the VR Makerspace, I used Unreal Engine 5.3.1, UE5 Blueprints, C++, Epic Online Services, and VR hardware. All of the initial interactions were done in first person before migrating everything into virtual reality. The application should work with all common VR headsets like the Oculus Quest, PlayStation VR, and VIVE. Here’s how the application components were arranged in the final product:

VR Makerspace system architecture

During team meetings, our stakeholders emphasized the importance of making the makerspace feel inclusive. My role in this was implementing BP_ColorPicker, which allowed parts of the avatar’s appearance to be customizable. The designers on the team made the space an open environment and put up inclusive posters around the area. Here are some images of what the makerspace looks like:

VR Makerspace environment 1 VR Makerspace environment 2 VR Makerspace environment 3 VR Makerspace environment 4

Object Spawning and Interactions

The first feature I had to figure out was making sure users can add new materials to the makerspace, pick them up and be able to reposition them to build and work with. Examples of materials:

VR Makerspace material 1 VR Makerspace material 2 VR Makerspace material 3 VR Makerspace material 4

I implemented this using the VR pawn and first person blueprints in UE5. For Oculus Touch devices (which is what we used for testing), being able to spawn new materials was mapped to the B button and movement was mapped to the right thumbstick. Any materials added to the makerspace had the BP_CutObject actor class and slicing system, so they can be cut into specific pieces for building if needed.

Spawning, grabbing and repositioning materials in the VR Makerspace

Procedural Object Slicing

One of the most technically challenging features was allowing users to cut objects dynamically while the application was running. A normal static mesh is meant to be rendered efficiently, but you can’t really change the geometry continuously at runtime. To make objects sliceable, I made BP_CutObject which copied the geometric properties of the original Static Mesh Component into a Procedural Mesh Component. This new procedural mesh can be broken into smaller pieces when a user decides to cut the piece. To make a slice, the user points in a certain direction and presses a button on their controller, which creates a line that extends in that direction. I used a cast to ProceduralMeshComponent to make sure the object they hit is actually sliceable so that they don't accidentally slice unrelated actors or geometry that is not procedural. Users can also grab and orient the object and make slices in different directions to shape their piece how they want.

Procedural object slicing example 1
Procedural object slicing example 2
Overall procedural slicing Blueprint
Procedural slicing Blueprint detail

Proximity Object Attachments

I also prototyped some logic for gluing pieces together in the makerspace. Basically the system would retrieve all available child actors of a procedural mesh and iterate through them using a for each loop. For every object, it compared its world position with the selected procedural mesh’s world position. Once this search is done, the closest object is passed into Attach Actor to Component, which would connect it to that selected procedural mesh as if they were glued together.

Proximity object attachment Blueprint

Multiplayer Sessions

Since the makerspace is meant to allow people to collaborate remotely, users need to be able to enter the same virtual environment and interact with each other. The multiplayer system used Epic Online Services and Unreal’s Online Subsystem EOS, and the multiplayer state was managed through BP_GameInstance. It also uses EOS lobbies to allow users to either create a session or join an existing session after logging in.

Conference Poster

This poster was presented at the annual Emerging Media Lab Showcase.

Virtual Reality Makerspace project poster
Back to Top