The Godot Jam81 was a 9 day long jam. I had the opportunity to work with a talented team of 2 programmers and a sound designer. I was responsible for the 3D art, the shaders, the bouyancy calculations and the weather system. It was my first time writing a water shader, or simulation bouyancy, so I had to learn a lot.
We tried going for a cartoonish style visually. I ended up using Sea of Thieves as a reference for most assets. Most textures are object specific, and were made procedurally in Substance Painter.
One observation I made for the textures was the "chips technique". This is something Sea of Thieves loves to do, and it works suprisingly well. The point is, that there should be no flat surfaces, everything should have these small parts chipped out of them, almost as if they were made of stone. This technique really works to sell this grungy but cartoonish style. You can really see this on the shark and orange textures.
Another small thing that adds a lot is using gradients. It really makes the textures pop, and adds some color variety.
For the ship, I made some tiling materials in Substance Designer.
The vertex shader is controlled by two layered perlin noises. They are controlled by factors like scale, speed, time, boat position. These allowed me to create different kind of waves for different weathers.
Fragment shader:The fragment shader starts with assigning a base albedo value, as well as blending and using the normal maps created from the noise textures used by the vertex shader.
Then, it uses a depth calculation method to color the objects inside the water a blue-ish tint. It also uses the depth map for the white foam outlines around objects.
The foam mask is created by thresholding the sum of the noises.
For a last step, the alpha value is controlled by the distance from the camera, to help the water blend into the horizon.
Every step takes in parameters that can be controlled by the user, again, helping to create different kinds of oceans.
Bouyancy:The ship samples the water noise at 4 different positions, at the nose, at the back, and on either side. It than determines the position and rotation of the ship from the differences of the sampled values.
Weather:The water shader and sky shader are controlled by a weather system. It takes in weather presets, that contain values for all the variables, and uses them to blend between different kinds of weathers.
In the end, the weather system did not get implemented because of time constraints.
We unfortunately overscoped the project, and had to deliver it in a pretty rushed state. Im a bit dissapointed with the outcome, I think it had to potential to be way better.
On the Jam it preformed alright, out of 162 entries it ended up coming 40th overall, and 12th in graphics.
Thank you for reading!