The goal of this project was to level up my shader skills and understand important shader concepts and nodes. This project was part of my Tech Art Mentorship with Aaron Aikman (Senior Technical Artist II @ Blizzard).
- Depth Blending
- Foam
- Normals
- Waves
- Refraction
- Specular
I gathered references from different places to decide what style I want to replicate, what features I wanna include and the overall look of the water.
The main idea behind the foam is to use distance fields and invert it to mask the area around the objects. After that adding time and Frac node to start creating waves of foam (frac function goes from 0 to 1 and then repeat). Also I added some noise to create more interesting looking foam.

I used a water normal map from the Unreal Engine content and sampled to maps to run in different directions to create variety in the pattern.

I added a noise to the vertex normals and plugged that into the World Position Offset to create some sort of waves.

Depth Blending
I used a Depth Fade node to mask the shallow and the deep water areas and used that as a mask to lerp between two colors.
I wanted to add waves in my shader but one of the problems I encountered was the tessellation. Since it was deprecated from Unreal Engine 5 and I was using the default plane mesh for the water, I had to create my own plane mesh in Houdini so I can have more triangles to work with while making the waves. So I created a plane, did a quick remesh to increase the number of triangles and exported it back to Unreal.
THings that can be added
One of the things that I found really interesting in the water shader is the waves. So a more advanced topic to dive into would be Gresner Waves. A lot of games have used it like Sea of Thieves to create this beautiful, realistic-looking waves with foam.
Also Caustics can be a cool feature to add and a relatively easy one.
Back to Top