The goal was to create a immersive VR experience centered around the throwing motion (gesture) with a motivation to create a robust yet useful throwing detection algorithm with a fun gameplay to keep the player motivated. We also wanted to use minimal hardware and maximize immersion by omitting any kind of hand held controllers and keeping the amount of wires around the player minimal.
Robust and useful throwing experience with fun gameplay.
Use appropriate hardware and technologies.
Make use of advanced graphics for best game experience.
Photo from ForskarFredag where the first public demo was presented
Credit: Adrià Cruz
Microsoft Kinect
is used for body tracking.
Oculus Rift
is used as a head mounted display for best VR experience.
Unity 3D with C#
is used as a game engine to create the game logic and functionality.
In order to get feedback on the "important" stuff (important for this course), the game has to be easy to play. It is a hurdle that has to be overcome for a sufficient level of immersion. Then the players will be able to recognize valuable insights regarding graphics and interaction.
Since this project required 2 pivots (Pokemon VR, Breakout VR), the feedback we got from the public at ForskarFredag was a bit vague.
A simple threshold for the speed of the hand is stable and easy to implement but may be too simple. More advanced methods, e.g. recognizing preprogrammed throwing "archs" have to be adapted for different player sizes, handedness and styles.
If one wants to use extra hardware it is advisable to skip the Kinect and go for VR with controllers instead (e.g. VIVE, Oculus Touch)
There might be problems on the software side (SDK/Drivers not working/not available) or on the hardware side (IR pollution, connectivity, faulty devices). Solving them takes time, a very valuable asset of this course. A quick hack will work for a while but it might come back and bite you at a crucial moment.
Just like with sorting algorithms or numerical methods for differential equations, learning and programming basic graphics is easy but once you get to the advanced stuff, it is easier to use well-written libraries that are robust and optimized. Game engines often have extensive libraries with good documentation and an active community.
On the other hand, developing your own complex shader based on algorithms or pseudo-code from published papers is tricky if you don't have complete control of the rendering engine. For some game engines, you have to use their API, leading to unnecessary or even impossible workarounds.