How to improve stylized water?

Hi, all I’ve been trying to work out how to make nice stylized water for several days now but have not been able to work out how to get it looking just right.

These are some of the references images I have been using and I’m definitely going for a flatter more sort of tropical look I guess. The closest game I could find that had this type of water was rime and I found [this][2] video about how it was made, unfortunately, I’m not super experienced in materials so I couldn’t understand most of what he was saying and the download link in his article didn’t seem to work for me.

This was about how far I got on my own with just trying various nodes out and using some of the bits I could sort of understand from the Rime video. So yeah I’m a bit stuck at the moment because I’m not sure what I should be looking for to improve it, I think adding some small waves might help a little but not enough to make it look anywhere near the original reference. Is there something I’m missing that’s really obvious for these types of materials to make them look good if any ideas they would be greatly appreciated. Also if the performance could be improved aswell that would be great because currently, it’s quite resource-intensive and the player won’t typically be very close to it anyway so it doesn’t need to be super detailed.

There is simply no real answer for this, because the size of your shader doesn’t even come close to what is generally needed for a comprehensive stylized water shader. Those reference pictures you showed, especially that of Ryme, well, the water shaders in those pictures are anything but simple. They are massive complicated shader networks. For instance: here is a particular shader you can find on the marketplace. I made sure to fade out all comments and relevant nodes since the shader graph is not mine to share, but this should give you an indication of just how complicated a stylized water shader can get.

Stylized effects are never all that easy to create; they require a rather deep understanding of shader math (or math in general) if you want to do something more than just a handpainted texture. It’s interestingly easier to create a halfcompetent realistic shader than it is to create anything stylized. Those shaders in Ryme are a prime example of that; they require you to know the many ways in which you can manipulate UV coordinates, manipulating vertex normals and positions (for animation) and whatnot. The Ryme presenter may make it look easy, but if you don’t already have experience, that stuff is not easy to make.

In the second screenshot you showed, it shows you are unfortunately still lacking in said knowledge.

For instance; that fresnel function is not going to help you. Fresnel is not an “outline” function, a misunderstanding that is easily caused by the fact that the default preview mesh in the material editor happens to be a sphere. Fresnel is basically something that depends on the angle you view something at. I always have a bit of trouble explaining the workings of the dotproduct, but the way I understand it is that the steeper the difference between the direction of the (player) camera and the surface of the object you are looking at, the brighter the value. Basically, a sphere has a very smooth transition between normals directly pointed at your camera, and normals pointing away from it. The result is something that resembles an outline. Change the preview to a cube and BOOM, bye bye clean outline. Your waterplane is a flat plane, and therefore has relatively the same difference in angle between your surface normals and the camera. In other words; the fresnel is basically useless in your current material. It’s going to be some dark grey (or black) with some very minor unnoticeable variation over the entire thing.

Secondly; what were you planning on doing with that texture? Because plugging the depthfade into the UV is not going to do a whole lot for you. Basically, depth fade will output a value between 0 and 1, depending on how far to the edge the material is (0 is closeby, 1 is far off, when it switches between 0 and 1 depends on whatever you put into the fadedistance). An UV is a 2D vector, having both an X and Y. Default coordinates go from 0 to 1 on both axes, so that you can sample a texture in its entirety. With UV manipulation you alter the X and Y values, so you can get interesting animated effects. In your case however, most of your texture just samples the utmost (1,1) coordinate of your texture (1 plain color and not using 99.99% of your texture) or the minimum (0,0) for anything close to an edge. Basically, your texture is next to useless in this instance; you would be better off simply using a linear interpolate between two colors (and plugging the depth fade into the alpha) or using a standard texture coordinate node.

What I advise you is to immerse yourself in the basics of shader development before you take on something as gargantuan as a stylized water shader. There is nothing wrong with trying to create something above your level to learn, but trying to make a stylized water shader as a beginner is akin to trying to swim in the ocean with the sinking Titanic tied to your ankles.