Udacity: VR High Immersion Developer

 

Udacity Capstone: MyRoom

I created MyRoom as the capstone project to the Udacity High Immersion Developer course. I was tasked to come up with my own unique idea, guided by ‘achievements’ provided to give me direction. Each achievement awarded a certain number of points, and a minimum number of points was required to pass the project. Among these achievements was photogrammetry. This became the focus of the entire project. My goal became to create a mixed reality proof of concept by capturing my room with a camera, stitch the pictures together in a program, and reconstruct a final digital replica of my space for use in virtual reality. My biggest challenge with this project was my own lack of experience in designing my own ideas. When I first approached this project, my ideas and ambitions for what I could get done in a single year were as big as the metaverse itself. As such, what I thought I could get done for my first independent VR project was far beyond the scope of my capabilities. This created a lot of friction throughout development, and I had to constantly scope back on my plans as I learned what I was actually capable of.

Main Focus

For this project, I was provided only with general achievements to accomplish, such as providing a sense of scale, using animation, 3D modelling, etc. The achievement that became the main focus was photogrammetry. Starting out with no knowledge of this as a technology, I researched what photogrammetry is, techniques for capturing photos, and tested many different programs to find what would work best for my needs.

MYRoom

MyRoom places users in digital reconstruction of my room, and demos some of my thoughts and ideas on the future. With some interaction examples with the room itself, and a very simple demonstration of an XR website.

The Process

Statement of Purpose: Rube Goldberg is a desktop vr game that challenges players to design a path to guide a ball from start to finish.

User Test:

First User test

I learned that the text was not clear that you could interact with it and click on it, so I added a highlight color to make it responsive. On top of this, the cursor and raycast only appeared when it was on something that was interactable, to make this easier to use I made the cursor persistent and have the raycast fill out when on a responsive object instead.

The user suggested that in order to feel more immersed in the environment, the controllers could vibrate when touching something that is supposed to represent a physical object, I thought this was a very good idea and added it.

The user suggested that the narration of the Mirrorworlds article was too long and needed to be broken up, as well as allow the user to interact with it more. I added a break point with a "Continue Listening?" prompt and added a button at the end to display the video rather than having it automatically appear. I also sped up the audio slightly.

I had the extra topics at the end be a scavenger hunt where the user would have to click on them for the text to be displayed. This did not work out well in testing and the user had a hard time finding any of them, so I decided to just display them.

Second User Test

From the second user test, the user was very satisfied with all of the changes I had made, but desired more interactivity with objects in the room. In response to this I added that the light could be turned on and off, and gave the user control over the bowling alley appearing and disappearing. The user indicated that the changes I made to the cursor always being visible and the speed to which the beam extended was very good.

Completed Project

When jumping into the MyRoom experience, the player is put into my own room at the time of the photogrammic capture and reconstruction. The player is able to interact with some elements of the room, such as turning on and off the light. Beside the light are the assets from my Rube Goldberg project, which demo the ability to transition between different player controller mechanics as you interact with things in a more open XR context.

RubeGoldberg items on borough

In front of the player is some text which reads “Matter of Time.” The player may reach out and touch the text, or point with the raycast mechanics I designed for this experience based on one of Oculus’s demos in the Oculus Integration unity asset. The text responds by standards of clicking a link on the internet. It changes color when the user hovers over it by pointing, and turns purple and loads the content when it is clicked on.

Clicking on the text triggers a demonstration of an XR audio article, in which I talk about some of my thoughts on future technology. After which multiple text options appear, allowing the player to select the topics they are interested in.

One of the main features I made sure to showcase in this experience was modular room transitions. This is experienced as the wall in front of the user dismantling itself and extending into a bowling alley with the sun setting in the background. This bowling alley is fully functional, and from this point forward in the experience, the user is able to turn it off and reconstruct the wall, and activate it again by clicking on the miniature bowling model now placed on the borough next to the wall.

Bowling Transition

The experience is wrapped up by a video player that appears like a virtual TV in 3D space, on which I finish conclude my experience with a recorded video of myself.

Conclusion

Through this project I have gained a lot of experience in the process of design and scoping in my projects. Without a solid and clear vision of what I will accomplish upfront, it becomes far more difficult to achieve even that which is within my power. Let alone the features that deserve far more time and experience. With the Rube Goldberg project, I had no issues with productivity and going above and beyond what was asked of me. Going forward, I will take this very important lesson and apply it to all of my independent projects. I will also have a lot more experience in how deep my knowledge of the technology goes when planning the projects out. This is a pattern that will continue, until it is less of an exploration, and more of a habit.


 Rube Goldberg

I worked on Rube Goldberg as the second project in Udacity’s High Immersion VR course. I learned how to develop for desktop VR. This includes using both SteamVR and Oculus SDKs and learning to build projects for both systems. Rube Goldberg is a VR game where the player must use provided structures to create a path to get a ball from a starting platform to a goal without touching the ground. This project took me about nine days to complete. This was my first experience developing for desktop VR and it was very enjoyable to build the mechanics of the game from scratch using the SteamVR SDK. My greatest challenge was whenever I ran into issues with using the SteamVR SDK, I had to figure them out myself. There is very little documentation and support online for different issues I was having because it is such a new development platform.

Main Focus

For this project I was provided only with the models of the objects and environment and was tasked to implement all of the mechanics and functionality myself. I had to add a teleportation system for moving around, an object menu for creating the structures to build the paths, an anti-cheat system, and so on. I also added audio to the project with free sounds I was able to find online.

Rube Goldberg tests players’ creativity and problem solving skills. They must use the resources provided to them to collect stars and get a ball to the end goal.

The Process

Statement of Purpose: Rube Goldberg is a desktop vr game that challenges players to design a path to guide a ball from start to finish.

Persona

For this project I reused the persona of Charlie from my Puzzler Project. Having had some experience with mobile VR, this is Charlie’s first experience with desktop High Immersion VR. Charlie is 23, he’s an accountant who’s new to VR. He’s just getting started in the business world. He wants to work hard and get ahead, but also likes time to relax and have fun. He likes games that keep him sharp and focused. He likes to say, “Even in play, we can still get ahead.”

Sketches

Early design sketches as I planned out this project.

For this project I held all of my user testing off until the end. After the fact this seems like it was a mistake as I was overwhelmed with all the questions I felt I should ask to fine tune everything I had done. In future work I will make a point to have each test as I work on each feature before moving onto another part of development.

User Test:

I asked the user about the size and clarity of the UI Tutorial panels placed around the first level. He said that the size seemed appropriate and the objectives of the game seemed clear. He quickly got used to the object menu as well. While playing around with the teleportation movement he did get lost in the scene, so for beginners to VR I might want to take into account either restricting the zone to only the important area in the level or have a clear way to guide the player back in the future. I did not make any changes to this project regarding that however. The user also said the sound levels and sounds themselves all seemed to be good. The one feature the user suggested changing was when I asked about how the scene transition felt, he said that the transition itself should start about a second later. I took this into account and delayed the start of the transition.

Completed Project

When playing Rube Goldberg, the player is first placed in an example scene that I have already created to show how the ball can be guided to the end goal. The ball must pass through collectable stars to be eligible to beat the level. Surrounding the level are instruction panels on how to play made specifically for the first level. Once the player places the ball on the first wood plank and the level is completed, the scene transitions to a new empty version of the same level.

The player must navigate through the object menu with their right hand to create and place structures to collect the stars and make it to the goal. The object menu indicates how much of each structure they have to work with.

The player uses the teleportation mechanic to prepare a path for the ball, then release the ball from the starting platform. Releasing the ball outside of this platform or moving around structure objects causes the ball to become ineligible to complete the level, and the ball must be reset before the level can be completed.

There are four unique levels for the player to complete, each in different locations with different obstacles to overcome in building a path. In each level, the amount of each structure they have to work with is altered. Levels two through four each showcase a different specialty structure they player has to work with: the fan, trampoline, and teleporter.

Conclusion

I have learned a lot about developing for desktop High Immersion VR and have many ideas for upcoming projects. I have learned the benefits and shortcomings of using the mechanics provided by the SteamVR SDK to develop my games. My experience with it will allow me to look for questions others ask online regarding similar issues I faced and help them in order to help grow the ecosystem of SteamVR. Virtual Reality development is still in its infancy and by using these tools and engaging in the community, it is clear that I will be able to help it grow.

Download the project on GitHub

Puzzler Project

I worked on Puzzler as part of my course with Udacity. I learned to go in early and often, to have iterations to the work, to user test, and to document it all. Puzzler is a mobile VR game where the player must solve a puzzle similar to Simon Says. This project took me about a week from start to finish once I had the time to really get into it. I really enjoyed learning how to document it well as well as creating the sketches for planning. I only really had trouble once when I hooked up the wrong gameobject to a script and had to use the error messages and read back through the script to figure out what was wrong. I haven’t used a ton of mobile VR so it was cool designing for it more seriously with Puzzler and considering how I might want to use mobile VR more in the future.

Main Focus

My main focus was the design of the game, not the mechanics. I created the room with the assets provided in the course, added lighting and music to create a dark and gloomy mood, created UI panels, added a system of movement and adjusted it so it was comfortable.

Puzzler

Puzzler brings an old game to a new medium: Virtual Reality. The player must complete a Simon says puzzle in order to make their way through a dungeon.

The Process

Statement of Purpose: Puzzler is a mobile VR application for new VR users which challenges them to solve a familiar type of puzzle in a new way.

Persona

For this project I created a persona named Charlie. Charlie is 23, he’s an accountant who’s new to VR. He’s just getting started in the business world. He wants to work hard and get ahead, but also likes time to relax and have fun. He likes games that keep him sharp and focused. He likes to say, “Even in play, we can still get ahead.”

Sketches

I drew up some simple sketches for early design iterations for the project.

User Testing

User Test 1: Atmosphere and Feeling

The first user test tested the feeling of the dungeon. Points in question were the scale of the room to the player, did the player feel too big or small? Did the dark dungeon tone come across well in the lighting? Was everything placed well so the player didn’t feel like things were awkwardly obstructed from view? The tone, object placement, and scale all came across very well, however the user indicated that he felt too tall, and that the camera was a bit too far off the ground. In response to this I went back into the project and lowered the camera slightly to make it more comfortable.

User Test 2: UI

This test was for the UI panels at the start and end of the game. Although due to my own error in explaining the test, the user was confused that the game did not start when he clicked the start button. Instead the end panel popped up. The panel size and clarity came across very well, and I did not see the need to make any adjustments.

User Test 3: Movement

This test was for the movement of the player into the dungeon room. I explained that he might feel simulator sickness during this test, and to take the headset off immediately if he feel discomfort. The test went well and the user indicated that everything felt good, but commented that if I had not put the idea of simulator sickness into his head, he probably wouldn’t have noticed anything at all. Since he was thinking about it he did notice it slightly as he moved. However he indicated that it was comfortable other than that.

Completed Project

When playing Puzzler, the player is first greeted by the UI start panel which provides feedforward by explaining what will happen when they hit start, and by the button highlighting green when the player looks at it. This transitions into Movement as the player clicks the button, and the camera follows an On Rails path into the dungeon room.

In the dungeon room, the mood is set with dim lighting and creepy music ambiance. The orbs which are the main focus of the game, are directly in front of the player a comfortable distance and are emphasized by a spotlight to draw the players attention.

After the orbs play their sequence for the player to repeat back, the orb lights up and plays a “ding” sound if they click on it correctly, or plays a fail sound if they click on it incorrectly for Feedback.

After the player correctly repeats the sequence, they move out of the room the same way they moved into it and are shown the end panel, which allows them to reset the puzzle and play again

Conclusion

After multiple user tests and iterations in designing this project, I have a more polished game than my initial vision of it. By documenting the journey, I know how and why I made the decisions I did along the way and have something to show for it. Others can learn from my documentation, and I can always come back and review it if I want to create something similar. There is always room for more iterations and improvement to any project, but I am very happy with how Puzzler turned out.

Maze

I worked on Maze as the final project in Udacity’s VR Foundations course. I learned how to take provided assets and develop an enjoyable experience for Google Cardboard VR. Maze is a VR game where the player must navigate a maze and make it to the treasure room. This project took me a couple of days to complete. This was the largest project I had tackled in Unity, and brought together all the fundamentals I had learned into one development experience. The challenge was to design a unique maze myself, to make the layout interesting with good lighting, and to be performant for play on a phone.

Main Focus

For this project I was provided with all of the assets for the walls, models, and VR teleportation markers and was tasked to design an interesting maze. I had to implement the functionality of a locked door, that in order to unlock the player had to find coins in the maze. Finally I had to program the doors and the treasure chest inside the room to open smoothly, swinging on their hinges.

Maze tests players’ sense of direction and memory. They must navigate the maze without getting lost, and find the coins to unlock the treasure room.

View of the Maze

The Process

Statement of Purpose: Maze is a Google Cardboard VR game that challenges players to navigate a maze to find the treasure room

Completed Project

Starting Area and Waypoints

When playing Maze, the player is first placed on a patch of grass, with a fountain and four pillars around them. From this area, they can choose their path. The pillars rise above the walls, and can be seen from a short distance, giving the players a sense of reference as they get started. Soon these pillars get lost and its up to the player to navigate by themselves.

The player will most likely come across the treasure room first, as its path from the starting area is fairly direct, and non-complex. However, they will discover that it is locked, and they must find three coins hidden in the maze in order to open it.

Coin and a misleading pot under spotlights

Conclusion

Finishing this game earned my certificate for VR Foundations. The most important part of this project was that it was very enjoyable to design and work on. I was given creative freedom within a very limited scope, which allowed me to put all of my energy into the design and layout of the maze itself. In the end, I was able to make it unique, and even signed my name and “Udacity” in it, when viewed from overhead. This project was simple, but reinforced that this was the work I wanted to be doing.

Signed overview of the maze