Making a Waterfall Shader from Noise in Godot.
by Vicente C.
Published |
11
Share
BluePhoenix1 made a 2D waterfall shader with moving noise, color and foam. They share the code and a video tutorial showing each step.
BluePhoenix1 looked at all kinds of waterfalls while working on this effect. Since they’re making a pixel game, they paid particular attention to ones with a limited palette. The waterfalls in Genshin Impact became a favorite reference.

Before writing the shader, BluePhoenix1 laid out the idea in simple steps. The plan was to turn a noise texture into flowing water, then decide where the color, foam and gaps should appear.
It starts with grayscale noise. Stretching the texture makes its cloudy shapes look like long streaks. Moving those streaks downward gives them the beginnings of a waterfall, though one scrolling layer still looks a bit rigid.

BluePhoenix1 samples the same texture three times, moving the copies at slightly different angles and blending them. As the patterns overlap, the flow becomes less uniform.
The moving pattern is still grayscale at this point. The shader uses its brightness to add lighter shades of water, then colors the brighter areas as foam. A gradient sets the water’s base color from top to bottom.

To get more foam along the sides, BluePhoenix1 adds brightness near the edges. They can also use a painted mask to place extra foam where the waterfall meets the surrounding terrain.

The uneven outline uses a separate copy of the noise. Its values get brighter toward the edges, and pixels that pass an opacity threshold become transparent. Keeping this separate from the foam lets BluePhoenix1 adjust the gaps without changing how much foam appears.

You can try the shader or follow the full process here:

Want to make VFX in Godot?
Jettelly wishes you success in your professional career! Did you find an error? No worries! Write to us at [email protected], and we'll fix it!

Subscribe to our newsletter to stay up to date with our latest offers

© 2026 Jettelly Inc. All rights reserved. Made with ❤️ in Toronto, Canada