Yesterday I finally got a chance to work on World Project again.

If you haven’t heard of it, it’s a game I’m working on for Mac/PC aimed towards VR. It’s set in a procedurally generated world physically larger than planet Earth. What you’ll actually be able to do in this world is still unclear. However I’ve recently decided that’s not actually all that important!

I’ve been doing a dev blog style series of videos, the first of which was basically ‘here is this cool thing I started working on and then forgot about’. But the response to that first video got me excited about the game again, and actually got me excited about game development in general.

I did quite a lot of work on it earlier this year, and then attended Oculus Connect 2 in September. That actually had a surprising effect. It got me very motivated to dive into World Project, but I realized that I couldn’t properly do that until I finally finished and released a Blockheads update. So instead of getting home and getting stuck in with the Oculus Rift and World Project, for the past couple of months I focused on The Blockheads.

Now the update is due out any day now, and I can work fully on World Project with a clear conscience. So that’s great!

The other surprising thing that I took away from Oculus Connect is that I needn’t focus on gameplay. VR is so new and novel that simply being in a unique and interesting place is a big enough experience. My standard development cycle of creating a bare-bones engine, then focusing heavily on interactivity and gameplay elements isn’t the best approach here. It would get me a good PC game, but not the best VR experience.

So now my focus will be on creating content and improving how the world feels, making it more alive and immersive. I started on animated water yesterday, and once I’m happy with that I want to use climate models to designate realistic biomes across the world, then populate them with life. I’m not leaving gameplay out entirely, this will still be a game. It just needn’t be the primary focus at this point in development.

So, with all that said, check out the new water ripples!

I am using the depth of the water as input into a sine function to offset the normals in the fragment shader. Basically:

waveAngle = sin(waterDepth + animationTimer) * amplitude
normal = normal.rotate(shoreLineRightVector, waveAngle)

I’m sure someone else has tried this before, but I’m not sure I’ve actually seen it done. It seems to give good results, with waves heading up onto the shore. There are some artifacts, mostly they are too ordered, so I’ve also added in a few other sets of waves at different periods and slightly different directions. With a bit of noise based offsetting and fiddling about I think it’s going to look pretty nice.

World Project Water