WIP Procedural river/water shader in UE5

Hello, I am currently, as the title suggests, working on a river/water shader for my university game art specialism module.

I am using distance fields to dynamically distort the UVs of textures thus creating a flow map of sorts. I am adding a bunch of other stuff on top such as fake reflections/highlights, foam around objects as well as ripples. I also added and slightly edited the Gerstner Wave function and it works surprisingly well with all the other effects. The material also uses the Single Layer Water material function.
I have tied the flow speed to various other parameters such as the water murkiness, foam density/opacity, Gerstner wave amplitude and a few other minor ones.

I am currently adding two videos to demonstrate what I’ve got so far. I will be adding more later on when I get more time to record some of the other stuff.

One of the videos showcases the material in my testing level where all the settings are exaggerated, such as the foam intensity. (This results in some blockiness in the Distance Field texture, but nothing to really worry about for now, as I shouldn’t need to go that high with the contrast/brightness)

The second video, I have replaced the original water material from the “Fantastic - Village Pack” by Tidal Flask Studios, with my one. I tweaked some settings and got it working.

Video 1

Video 2

UE Material graph screenshot


I know, it’s messy.

My next goals are to fix a couple of issues and address some of the feedback I received and then start working on adding Niagara splash and foam particles. One of the comments I received was that the water looks a bit too much like Jelly in some places. This is most notable where the Gerstner wave is and is most likely due to the strength of the normals and roughness, but this can be adjusted with a parameter, so nothing to worry too much about for now.

Any feedback, comments, or suggestions are greatly appreciated!

3 Likes