Container Water 00: Experiments in pseudo-fluid bottle simulations for Unity

As is the case for a number of Generalist Tech Artists out there, we tend to need to know – or learn – a lot of different things. Often we become proficient specifically at the tasks each different game sets us, and the current game I’m working on is quite exciting for this reason.

I am Fish is a sequel to I am Bread – a game I enjoyed working on, and still remember fondly – which now sees you as a fish, navigating a dangerous human world in search of the sea and your freedom.

From the original prototypes, it was apparent we’d need an abundance of water solutions throughout the game as you spend the most of the game (ideally) swimming through it.

The foremost of these watery examples is going to be the goldfish bowl. In the prototype we used a system called Obi Fluid as this very quickly set us up with a convincing water simulation.

We quickly found however that this solution was relatively expensive and quite unstable alongside the rest of the physics in the game. So early on it’s been one of my tasks in the project to find a solution, and there’s already been a high-profile example of an alternative this year…

May 2020, enter the Half-Life: Alyx bottle shader and the tweet which started it, by Matthew Wilde.

I’m note sure whether this shader was a result of lockdown, or a planned feature which didn’t make it in time for original release, but regardless, it’s a very convincing effect, and cheap enough to run in VR.

For a week after seeing this, my twitter feed was ‘full’ of admiration and awe for this approach, and in the following month on my twitter feed was seeing other Tech Artists trying their own versions.

In the past, my feed would be full of Tech Artists making things like grass shaders, 2020 seemed to be the year of water water, and more recently this bottle implementation.

This example is from Gil Damoiseaux is one of the more complete and polished examples, complete with beer foam and bubbles. 

Soon after posting this, there was a a breakdown and interview with him on 80.lv, which whilst being very helpful, was not descriptive enough just to follow step-by-step.

So with plenty of great reference available online, this problem was beginning to look fairly well solved which gave me the confidence that it could be done. So now to chose a direction, and start…