Nov 2021

Oasis

Oasis was from the 4th round project of Building Virtual Worlds at ETC, CMU. The prompt was a narrative game, and the assigned platform was Oculus Quest 2. As a producer, I used Google Docs, a Gantt chart, and a to-do list to track the members' progress. As the VR device-end programmer, I focused on physical interaction simulations, such as screwing a tire and lifting a car. In the second week, I also helped revise the story script to clarify the characters' settings, goals, and relationships.

Platform & Tools

  • Unity

  • Oculus Quest 2

Team Size

2 programmers, 2 artists, 1 sound designer

Duration

2 weeks

My Responsibilities

  • Producer: project management with Google Docs, Gantt chart, to-do list

  • Designer: story script revision, interaction design

  • Programmer: VR-end and interactions programming

Game Overview

Oasis is a narratives-oriented VR game where the guest plays as a robot child escaping from a wasteland to the oasis with his beloved engineer father in the post-apocalyptic era. The guest gets to know the relationship between the father and kid by listening to the conversations and completing several tasks with VR controllers. The robot obeys the Three Laws of Robotics perfectly, and their relationship seems intimate and harmonious, but will they be able to overcome the challenges together?

Story Settings

The first ideas were a wasteland, a human with a robot, and a twist of taking away the power source. We imagined a world similar to that in The Electric State, a book by Simon Stålenhag. We came up with a woman and a robot server as characters, but we switched to a parent and a kid because that deals with the concepts of creation and possession better. Inspired by the plot of Alice in Detroit: Become Human, we want to satirize human hypocrisy and selfishness with a twist.

A human and a robot child traveling in a wasteland

Story Iterations

In the Interim, the story was far from clear to the audience. One major problem was that the relationship between the two characters was not clear enough to the player, and the other reason was the goal of the two characters wasn't clear.

To solve these problems, I revised the script, embedding those pieces of information into the lines. For example, the kid repeatedly uses words such as "understood," "warning," and "Dad," showing its robotic traits and obedience to the father. The father asking the kid to calculate the distance and time remaining reveals their goal in the desert and again emphasizes the kid is a robot. What's more, the father shows his affection by praising the kid's power source and adjusting the kid's reaction program of turning on and off. And these two behaviors also set a foreshadowing for the sarcastic twist of the ending.

Before

PROBLEM: In the Interim, the story was far from clear to the audience. One major problem was that the relationship between the two characters was not clear enough to the player, and the other reason was the goal of the two characters wasn't clear.

- “Stop saying machine words. Say ‘good morning’ when you turn on and ‘good night’ when you shut down.”

- “Understood, Dad. Good morning, Dad.”

......

- “The system will shut down in three seconds. 3, 2, 1. Good night, Dad.”

After

I revised the script. The kid repeatedly uses words showing its robotic traits and obedience. The father asking the kid to calculate the distance and time reveals their goal and emphasizes the kid is a robot. The father shows his affection by praising the kid's power source and adjusting the kid's reaction program of turning on and off. The "Good morning/night" sets a foreshadowing for the sarcastic twist of the ending.

Fixing Tire

To provide various and easy ways to trigger, I calculate the delta of the unit vector of the projection of the wrench direction on the screw cap plane between frames. And I use it as the measurement of the increment of the completion. This algorithm allows the guest to complete the task in many ways, making it more friendly to naive users.

Measurement of increments of completion over frames

Different Ways to Screw

Lifting Car

For lifting the car, I proposed and tested three different approaches. To make the interaction more realistic, I applied the physical calculations of gravity and collision. I fixed the front tires to the ground as a rotation axis and set two layers of planes under the rear tires - one slightly lower than the front tires and the other at the same height as the front tires. The rear tires collide with the lower plane at first, looking like being sunk in the sand, and they will collide with the upper plane once lifted higher than it, presenting an effect of being pulled out of the sand.

Before: Grab and Lift

A grabbable object attached to the car tail follows the movement of the guest's hands when it's held by the guest, rotating the whole char around the front tires. Problem: if the guest's hand moves along the radial direction of the rotation axis, either the joint between the front tires and the ground or the joint between the grabbable object and the car will break. A possible amendment is to use a spring joint between the grabbable item and the hand model to allow stretching in the radial direction. But I didn't try it out due to time limitations.

Before: Lift by Collision

The guest collides the colliders of the hand models with the car from below. Problem: there is no actual weight feedback to limit the speed of the guest's hands, so the vehicle might get accelerated to a speed so fast that it gets flipped all over around the rotation axis.

BEFORE: Lift by collision

FINAL: Lift by Pressing Buttons

The guest puts their hands close to the car's rear and then presses any buttons repeatedly to lift the car step by step and fill the progress bar. Although this doesn't make much use of VR, it guarantees the movement path of the car, and the guests can't finish the lifting instantly so that we can embed some dialogues during the process.

FINAL: Lift by pressing buttons
chiawei.liu.1201@gmail.comMade by React, Next.js, and TailwindCss © 2022 Jeffrey Chia-Wei Liu