↝ Year
2026
↝ Description
I decided to participate in the oldest running game jam in existence - Ludum Dare - together with a few friends. Joined with a 2D illustrator, another programmer and a musical producer, my skills as a technical artist (and additional programming) went into game development on a tight 72-hour deadline. After a lot of prototyping, discussions, too little sleep and quite some fun playtesting we managed to finish a surprisingly fun nifty little game!
↝ Tools used

Every game jam starts out the same: The theme is announced (in this case "Signal"), and all of us start thinking about categories we think fit the theme. A few hours of bouncing off each other's ideas go by, and in the end we land on a game idea that could be fun: routing ships into different harbours, while ramping up the speed they appear so it becomes a little messy managing game. With that in mind I started up Unity to work right away on arguably the most important graphical aspect in this regard: The water.
Since I am flanked by one of my friends being a 2D illustrator, we decided it would be best to settle on a top-down more-or-less flat perspective. While that definitely made some things easier (not needing to think about different camera angles for instance), it also made other things a little different from your average Unity 3D water shader. I'll be covering three parts: the water itself, the whitewater around the shoreline and lastly the wake and trails left by the ships.

The classic way to go for variation in procedural shaders is of course to use noises. To get the effect I am going for with the tropical water, I layered two 3D Simplex noises of different scales, while using time to move the noises' Z-values to animate them smoothly. I clamped them in a specific area to get these cool, flowy web-like structures.
I wanted to have some color variation for the water depth which is - fairly - easy to do for 3D water by using the scene depth you can extrapolate from your camera projection; which doesn't really work if the whole game is flat as a slice of cheese. And this is the part where we need to think differently: it's for a game jam, we don't have a ton of time and solutions can be more fit to the situation than needing to be versatile: we can take the map we'll have over to Affinity and use a gradient to expand the borders, which results in kind of a signed distance field (basically a representation of how far away we are from the shore).
Using that, we can distort that same image more the deeper the water gets (of course with a little animated noise as well), and use that distorted water depth to color our water now. Layering the noises and the water depth makes for some crispy, toony tropical water!












To smoothly transition the island to the water, I used the same approach as for the water depth for some little white waves on the shore. Distorting the same distance field while remapping it, then using a modulo* with an offset driven by time gives us these cool approaching waves that fit right into the smooth-2D-illustrated-with-gradients style of the game.
*Modulo is a math operation that gives you the remainder of a division. In this case, it helps us create patterns of waves by making a "repeating" gradient from the single gradient distance field. By offsetting it with time, we can make the waves move towards the shore in a smooth, continuous, looping manner.
Lastly, but not leastly, the ships shouldn't just float above the water, but somehow interact with it. In the end, I landed on creating a little gradient trail and wake for the boats using both the Unity VFX graph as well as the older particle system using particle strips. Their length and speed is defined by the boat's speed and trajectory, which makes them feel dynamic and alive.
Keep in mind that all this wasn't just one-shotted, but went through a few revisions and "feel"-testing before landing on the final result (while sleep-deprived, of course).

On the last day of the jam, I also took over making a simple UI (with some absolute bangers of ship-related puns) and programming a warning system if two ships might collide soonish, which was a fun challenge to take on after my graphical adventures. We finished just in time, submitted 3 minutes before the deadline and had a blast doing it - I hope you have fun playing the game as well!
Oh and if you yourself ever participate in a game jam, tell me about it, I'm keen to see what you'll be cooking up! (And don't forget to take one or two breaks ;)