I am working on a new VR game for PC. The concept is quite simple: you fly a stunt-kite that has to perform a choreography following the music.
I started thinking about what would be a good VR-PC standing experience and kite flying is perfect: you are usually facing the same direction, taking maximum 1-2 steps forward/backward while controlling the lines. No need to teleport around or use the controllers awkwardly, you just swing your arms, walk a little and look around!
This is a post and not a proper page because I just wanted to highlight some of the features I am developing for the game. In this project I am taking care of the code and shading while a colleague is doing the 3D, so most (all) of the pictures are a work in progress.
I am one of those VR developers completely against teleportation locomotion. It might have it pros, but usually presence gets too compromised. In this game there are a few items you can throw away, not to mention that the kite is 20m ahead… so how do you walk over there and flip it, or swap it? I decided to create some pets with a very simple AI that are commanded with voice and gestures. You just point at items and shout at the pets and they will do the rest.
At the moment of recording the video I just had floating cubes. Now at least there are some drones flying around and hopefully soon we will have proper dogs!
I would like users to be able to customise their own kites, drawing in a square and then letting the UVs do their magic, stretching and mirroring the texture, helps creating convincing kites. Using a blackboard and some chalk you can paint and erase until you are happy with the result and then see it on the kite. The same texture does not look the same on the blackboard and the kite, obviously on the blackboard you should get that chalk pattern, and also the black colour is represented in white! While in the kite we want more vivid colours. Some post-effects when blitting to the kite help solving this easily.
Even though I am trying to create a game with stylised graphics, I did not want to have the classic unlit/flat look and give the shaders some love. Ideally in the final game there will be different localisations, but I have started with the obvious beach. This already presented a few challenges down the GPU side.
The sand is rendered following the tips from That Game Company’s Journey . I really liked the approach of creating custom mipmaps in order to keep the histogram information to have distant sparkly grains. I also tried to go one step further and add some extra math to do some water history, so the sand gets wet when the water touches it and then slowly dries.
The water started with a simple plane that gets randomly moved in the vertex shader to create waves. Soon I realised this was too flat and decided to spice it up a bit using a depth-pass to change the colour when the ground is close, or even add foam and moving lines towards the coast. I have seen some games doing the last with custom geometries but I wanted a single shader solution, so some tricks with the step function got that sorted.
Last but not least the clouds. Being a game that is all about the wind and the sky having nice clouds was a must. I decided to go with an asset store solution and tweak the code a bit. Because rendering clouds is expensive in VR I am using a secondary camera for this that renders to a quad in the far distance. Also the given solution was not taking in count that the sun should tint the clouds as well.. a bit of shader reading and modifying and voilá.
As I said earlier you have to follow a choreography with your kite, you need to select some music, and dance to it. But how?
The first part of the equation is the radio. I created a radio that allows both playing cassettes and also connects to random e-radio stations. I added a few fancy audio effects for rewind and stop, and of course a tune system like in the old days that forces you to find the right orientation for the antenna and fiddle a bit with the knob, mixing random stations with white noise.
What about the choreographies? Each cassette will have a song, hopefully from some Math-rock bands from the UK! I am playing a bit with some Cleft songs as it is exactly the music I want for this game. Following the song some targets will appear in the sky and you have to try to go through them with the kite in the right beat. The tail will grow or shrink depending on how you perform, if it dissapears you have to start again!
I wanted to create targets that stay on theme with the game, that is why I went for a wind-trails approach. Different targets will imply different actions from the user, for example a vortex means that the user needs to do a roll, while a small tornado indicates that the target can only be crossed in one direction
But I still wanted to have a more rhythmic target and that’s why I created fireworks. The rocket will travel to the indicated destination and, when the kite touches it, it will blow up in the next beat. Depending on how good your timing was the explosion will change colour and size.
Here is a super early version:
Soon I realised that simple fireworks were a little bit too obvious and I wanted something that stands up a little bit more. Using a bit of image processing and Mathematica I managed to extract the direction and colour the firework particles should have to create recognisable shapes and logos.
Here is an example with the PlayStation logo:
or Twitter (without other lights so the shape is easier to see)
There is obviously way more in the making, and I cannot wait for the 3D to start coming my way. I will either update this post or create a new one if readers want me to explain something a bit more in deep or a new exciting feature comes to my mind. Thanks for reading!