My Contributions: Gameplay Programming, Game Design, Technical Art, Sound Design
Growing up, one of my first jobs was as a dishwasher at a restaurant. I thought it would be fun to recreate this experience in VR!
Dish Pit Simulator combines the excitement of washing dishes with an industrial sprayer hose and sanitizer, with the convenience of virtual reality. This project is highly optimized and runs great on the Meta Quest and Meta Quest 2. Here's some technical highlights!
Physics
This project started as a small prototype, just to gauge whether or not the mechanics I had envisioned would actually be fun. I started by implementing the Hurricane Physics Interaction kit. I knew realistic VR physics (as seen in Half Life: Alyx) would be important to selling the feel of washing dishes, and this toolkit gave me a great head start there.
Asset Creation
To my surprise, there were not a lot of relevant assets available to help me out here. Nearly every model, including the sprayer hose, the peg board (the rack that holds dishes), the non-slip mats, and the dish washer itself were custom-created by myself in Blender. As this project progresses, I would like to incorporate an artists work to improve these assets, but these will do for now.
The Hose
One of the most important mechanics I wanted to get right was the industrial sprayer hose. They have a very specific feel that I felt I needed to get just right, and I believe I did.
Using a combination of Unity's built in physics joints, some modeling and rigging in blender, and some with work with inverse kinematics I was able to recreate a sprayer hose which feels great. The hose bounces back into place, and the hose, seemingly suspended by a spring, follows along with it.
Splashback
As a dishwasher, one of the most common annoyances is what I call "splashback." This occurs when you spray a dish at such an angle where the water sprays back in your face. I felt this was an important thing I felt I needed to simulate in this project.
The sprayer system already works using a raycast to determine if and where the dish is being sprayed. Using Vector3.Reflect(), I was able to calculate the trajectory of where the water would go after it hits the dish. If it hits the player in the face, a "wet screen" effect is triggered.
Wet Screen Shader
To let the user know that a splashback has occurred, I needed to make it look like the screen was wet. To accomplish this, I developed a shader that generates a seamlessly-tiled screen of water drops, distorts them, and applies the result to the normal. The end result is realistic looking water droplets on the screen that lets the player know they were just splashed in the face. The color of the water droplets are also tinted if the splashback came from a dirty dish.
Sound
Sound is an often overlooked necessity to creating an immersive virtual reality experience. I wanted the dishes to clank just like in real life. More importantly, I wanted the dish spraying sound effect to sound great. I recorded the spray sounds myself with a shotgun mic in my bathtub. I went as far as to pitch-bend the spraying sound depending on how close to the center of the dish you spray.
Dish Pit Simulator hasn't been released yet, as it is a work-in-progress. But I plan on bringing it to the Oculus App Lab very soon.