At a certain point, I felt stuck working on VRAPL. I felt like I didn't know what to implement next because I wasn't sure why someone would use such a programming language. So, I knew I needed to return to basics and find that out.
I created a series of "strange environments" in VR, focusing on musical interactions that would be impossible in physical reality, and trying to make the virtual environments really "come alive" with a sense that the world would respond to you, but also had its own impetus for existing and acting.
(I also worked on creating "strange instruments" at the same time.)
On this page:
This experience was my first strange environment in VR! It explored a few things:
Wheebox is a scene where you launch projectiles into a box. The projectiles say "whee" when they are launched. When enough projectiles land in the box, it empties. A granular synthesis algorithm sonifies the emotions of the projectiles while they are in the box.
This project had three goals:
I determined the project would be successful if:
The box's bottom halves are connected to the walls of the box with hinge joints, which are very stable. The two halves of the bottom are connected to each other via a spring joint. The joint is normally very taught, but when it is time to empty the box, I make the joint very loose, then slowly ratchet it back toward tightness. I was hoping that I would be able to make the two halves be more or less horizontal by making the spring very tight, but no matter what I did, I wasn't able to prevent there being a dip in the middle of the box. Because of this, I had to simplify my ideas around the sound for the box as I wouldn't get very far using the physics data of the projectiles milling around the box (they mostly sit and vibrate a little in the crack).
The box has a minimum and maximum number of projectiles it can hold; after it holds the minimum number, then the likelihood it will open increases until the maximum number, when it opens with 100% probability.
I followed a tutorial for how to show an estimate of the launched path but it ended up being mostly a waste of time as the tutorial was very bad; I reimplemented everything from the tutorial from scratch afterward. The path of the projectile is predicted with ~~math~~.
The sound of the slingshot and the projectile "whee!" sound are both just audio files being played back. The slingshot audio file is a short click, pitched up the further back you pull the slingshot. I recorded my own voice saying "whee!" (and used the first take! :) ).
The sound of the projectiles inside the box is done using granular synthesis, specifically with LiSa. I ended up combining two canonical scripts for LiSa written by Dan Trueman in order to get tight control over all the parameters I wanted to control through ChucK global variables. I simply linearly interpolate over several parameters, depending on how many projectiles are in the box. Since the box usually empties before its maximum capacity, when I quickly switch the parameters to the maximum upon the box opening, it sounds like the projectiles are crying out in shock.
I really like using this. It is very satisfying, and I found myself laughing a lot and saying “whee!” to myself even when I was not using it.
Here I explored a very basic emergent / herd phenomenon with a creature that has its own "animus" (I think of this term as meaning, way of behaving in the world that isn't just doing what you tell it to).
These little "oh no!" bots have only one rule -- if a controller, or a projectile, or another bot hits them, they need to jump back and yell "oops" or "oh no!". (Additionally, they flash pink, and an invisible wall prevents them from falling off the edge of the platform).
It's pretty satisfying to cause chain reactions in the bots. I look forward to making more satisfying environments in the future that have more than one kind of creature, more complicated creatures, etc.