This was a VR project I developed in conjunction with some classmates for 14:332:452 Software Engineering. For the class, we had to propose, spec out and build a "software project" in its entirety using a version of Agile methodology in the span of a 3 months. We learned about different project management techniques in the class, Do's and Dont's (is it Don't's?), and some common design patterns we could incorporate into our architecture like pub-sub, command pattern, etc. Although we weren't able to demo a working product, and we wrote enough documentation to make our fingers bleed (~127 pages, yikes), this still ended up being one of my favorite university projects.
Now, onto the nitty gritty. During the ideation phase, we figured out we wanted unconstrained PC productivity and we wanted it cheap. None of use had done any substatntial VR work, but we were interested in it and I just so happened to have 3 or so Google cardboards lying around from a campus event (thanks, Google!). We decided on building a system that took our desktop windows and laid them out in a virtual reality workspace, so we weren't confined to screen real estate.
Expanse was meant to be a system that continuously captured image data from your desktop window frame buffers, streamed them through a node server and rendered them on a Three.js web client running on a phone in a Google Cardboard/mobile VR headset.
And in fact, it was - sort of. We were able to get window shape rendering, window capture, streaming and basic gesture recognition set up in about a month and a half - right for the first demo. We were able to show how each separate piece was working and meeting benchmarks, and how we were working in parallel and all agile-y.
Then, we just started getting sidetracked and more complex issues started popping up that we hadn't accounted for, like allowing users to set their own gestures and ensuring chunk order over websockets. Tricky stuff. Tricky enough that by the time the second demo rolled around, maybe a month later, we weren't able to glue things together.
And so, the class ended with a project in slight disarray, on the brink of completion. However, we all passed, and were given points for novelty and the work we were able to accomplish. Still, this is a project that I do intend to go back to see if I can get working, so I've uploaded it here for people to see and I'll upload logs if I do get to work on it.
Links
- Expanse documentation: https://github.com/joshpaulchan/expanse-report
- Expanse client: https://github.com/joshpaulchan/expanse
- Expanse server: https://github.com/joshpaulchan/expanse-server