Project0S23
Project 0: Trapped By a Big Wall
The goal of Project 0 is to get you started with Unity VR development, and it will not be graded. The grading rubric below is solely for reference to help you understand the format of the future programming assignments. The workload of this project is scaled down compared to the future projects to be fit in one week.
For this project you can obtain 100 points, plus up to 10 points of extra credit.
In the description below we assume you will be using Unity 3D for the implementation. But you don't need to, you can alternatively use UE4, Lumberyard, CryEngine, or C++ with OpenGL and optionally OpenSceneGraph and the Bullet Physics Libarary
Note that if you use Unity you aren't allowed to use any Unity assets other than 3D models, textures and audio-related ones without explicit permission.
In this project, you will create a VR application that is only used with the Oculus HMD (no controllers), and in which the user tries to break out of a cylindrical brick wall.
This is a team project for teams of two.
The Project (100 Points)
Create an interactive, immersive application for the Oculus Quest head mounted display (HMD). In the application, you are trapped inside of a seemingly impenetrable, tall, beautiful cylindrical brick wall - except that the budget wasn't big enough to include mortar, so the bricks just sit loosely on top of each other. Gazing at the wall only change the color of the corresponding brick. If you have telekinesis, it will be pretty easy to break the wall. Luckily, you will have telekinesis superpowers that you can use just by using your gaze if you do the extra credit. When you focus on a brick (by staring at it), you will be able to push or pull the brick out of the wall, and it will fall down on the ground. Once you remove enough bricks from the wall with telekinesis, you could get to the outside.
In this application you are only allowed to use the HMD as an input device. Mouse, keyboard, Touch controllers, or other input devices are not allowed. You are not allowed to move the user, except the user's head with their natural head motion. The brick wall should be about 3-6 feet from the user.
You will get points for the following things:
- A ground plane for the wall to rest on (5 points) and give it a texture, such as grass, dirt, concrete, etc. (5 points)
- A cylindrical wall of bricks, generated procedurally from code (20 points). It should consist of simple rectangular boxes. The bricks need to be textured with a texture of your choice (5 points). In Unity, you should create a brick prefab and instantiate the wall using instances of that prefab. The bricks must have realistic physics properties applied to them (5 points). Assume that 1 cubic foot of brick weighs about 200 lbs.
- Add a visual indication of which brick is being selected except when the user is not looking at the wall (e.g., a cursor, highlight, sparks, etc). (10 points)
- Change the color of the brick gradually when the user stares at the brick longer than a minimum threshold time. (20 points) Change the color (or a different visual property) of the visual indicator (e.g., a cursor, highlight, sparks, etc) when the brick starts changing color. (10 points)
- Gradually reset the color of the brick back to the original color when the user looks away from it (10 points)
- You should be able to reset the wall colors by looking straight up to the sky, within a small threshold around the zenith. (10 points)
Let these images inspire you:
Left: brick wall from the outside, brick size is about right. Right: brick wall from user's perspective (but your bricks should be bigger).
Extra Credit (10 Points)
There are options for extra credit. You can get a maximum of 10 points for the extra credit.
1. Telekinesis and trigger indicator:
When the user stares at a brick for a minimum threshold amount of time (e.g., 2 seconds), telekinesis kicks in. The brick the user stares at is now linked to the user's head, and will move towards the outside or inside of the wall, when the user moves their head towards or away from the brick. Note that the brick should only move along its radial axis (the axis parallel to the radius of the brick cylinder). The physics simulation should realistically make the bricks above the removed one tumble down. (5 points)
All gaze interactions would benefit from a visual indicator of how long the user has stared at a point and how much longer they need to do it to trigger the action. Any visual progress indicator located by the object that is looked at will be accepted (such as progress bars, pie charts, shapes that fill up with water), but not textual ones (such as a count down). (5 points)
Examples:
Radial widget:
Slider widget:
Hexagons: Hexagons
2. Teleport with gaze: This option requires that you already did option 1. Add a method to teleport around the scene by gazing at the ground plane. If there is an intersection of the gaze ray with the ground plane, without an obstruction in between, mark the intersection point, start the gaze progress indicator, and once the time is up move the user's feet to that location. (5 points)