4
$\begingroup$

I would like some advice on how I can achieve this waterfall animation in Blender.

Someone suggested to do a gif and apply it on the model, is that possible? Is there any other way to achieve it ?

Waterfall animation video

enter image description here

$\endgroup$
2
  • $\begingroup$ Hi Please use a title that reflects the content of the question. It should be descriptive but succinct, unique and identifying, summarizing the issue so that users can at a glance understand what your post is about. Use the edit link below your post and avoid anything not strictly essential to the post. Remember, your title is the first thing potential visitors will see, and makes your question findable for future users. See "What is the problem with posting an image or link and asking “How do I do this?"" $\endgroup$ Commented Feb 21, 2023 at 6:07
  • $\begingroup$ While files, images, and external videos or links may be helpful additions they should not be the only way to obtain information about your issue. Don't make understanding your question rely on downloading a file, watching a video or visiting an external site. Use the builtin tools to upload images or gifs, along with thoroughly explaining the problem in written form so it can be indexed and searched for thus helping future visitors with similar issues. $\endgroup$ Commented Feb 21, 2023 at 6:07

2 Answers 2

6
$\begingroup$

Okay... now this has become much longer than I wanted it to be. Anyway, at the end you'll find a blend file as well. You can do this with an animated Noise Texture for example (by the way, I just did it for the falling water itself because it seems as if the water before is not animated):

waterfall

This is just a simple version, tweaking and refining it depends on how similar to the reference you want it to look like. For example, in the reference there are horizontal bands in the animation which grow wider going down. I will later show how to get the bands in there, but I haven't really figured out a good way to make them wider while going down.

But first to the basic version. For the object, nothing fancy here - a cuboid with some beveled edges, open back (because I figured it won't be visible) and a default UV unwrap for the "UV coordinates" material.

basic model

Then I created materials, one using the Object texture coordinates, the other using UV coordinates, with a Noise Texture node plugged into a Color Ramp and adjusted the values until I liked the result.

For the object coordinates I had to scale them down on Z to stretch them vertically, while for the 2-dimensional UV coordinates I had to increase the scale on X. But these values are of course dependent on your model and UV map.

base material

Then I played with animating the Location values in the Mapping node to find a flow velocity which I liked. For the object coordinates I had to increase the Z value to make the texture appear going down, while for the UV coordinates I had to increase the Y value.

Now I wanted to make this a looping animation. To do this, you have to mix two textures together in a way that at the end of the animation the second texture is in the same state as the first texture at the start. Therefore you need two Mapping nodes and two Noise Texture nodes with the same noise settings. I'll show this for the object coordinates, but it's the same for UV coordinates, the only difference being to animate the Y value instead of the Z value.

I want the Z value to increase from 0 m to 2 m in about 50 frames to get the right flow velocity, so I set Start = 1 and End = 50.

On frame #1 I set a keyframe on the first Mapping node for Location Z = 0 m and a keyframe Z = -2 m on the second Mapping node. Do this by hovering your mouse over the Location values, then press I to insert the keyframe.

On frame #51 I set another keyframe for each Mapping node, this time Z = 2 m on the first and Z = 0 m on the second. It is important that you are on frame #51, not #50 to get a seamless looping animation.

So if $x$ is the value you want for Z, the first Mapping node animates $0\to x$ and the second node $-x\to 0$.

With these vectors plugged into the first and second Noise Texture node, you now have to mix theses textures together. To do that, take a Mix node and animate the Factor value from 0 on frame #1 to 1 on frame #51. This way you have a gradual change between the noises, and at the end the second looks the same as the first at the start so the loop looks seamless.

Also make sure the interpolation between the keyframes is linear so that the animation has a constant speed and is not speeding up or slowing down inbetween. To do that, select all nodes that have keyframes, go to the Timeline and press T > Set Keyframe Interpolation > Linear.

This was much text, here is the node setup so far on frame #1 and frame #51:

frame 1

frame 51

The next thing I want to show is how you can make the animation easier to tweak with just a little more complex node setup. With this variation you can change the flow velocity by adjusting a single value or switch between Object and UV coordinates by just changing two connections.

First of all, the animation does basically three things to make the water flow:

  • Location 1:

    $0\to x$

  • Location 2:

    $-x\to 0$

  • Mix Factor:

    $0\to 1$

Now if you re-arrange this a little bit you get the following:

  • Location 1:

    $x(0\to 1)=x\cdot\text{Mix Factor}$

  • Location 2:

    $x(0\to 1)-x=x\cdot\text{Mix Factor}-x=x(\text{Mix Factor}-1)$

  • Mix Factor:

    $0\to 1$

Which means we only need to animate one value from 0 to 1 (the Mix Factor) and have another value $x$ to change the speed. Now I can build a node setup like the following:

I add two Value nodes, the first one is for the Mix Factor and I set keyframes on frame #1 value = 0 and frame #51 value = 1, the second node is set to value = 2, which serves as the flow velocity $x$. This value I plug into the Z input of a Combine XYZ node.

To multiply the Mix Factor with the flow velocity I use a Vector Math node set to Scale for the first Mapping > Location input.

For the second location, I subtract 1 from the Mix Factor with a Math node, then multiply this with the flow velocity by another Vector Math > Scale node and plug it into the second Mapping > Location input.

Last but not least I use the Mix Factor value of course for the Factor input of the Mix node to combine the two Noise Textures. Also notice that I use a Reroute node after the Texture Coordinate node, this makes switching between Object and UV coordinates even quicker.

refined node setup

This looks a bit complicated, but now you can simply change the speed by changing the single value marked as $x$ flow velocity in the image above. Also changing the length of the animation is easier, let's say you want the animation to repeat after frame #100 instead of #50. To do that you just move the single Mix Factor keyframe from #51 to #101.

And if you want to change from using Object coordinates to UV coordinates, this is really easy as well. For the UV version you don't need the Z location to change, but the Y location. Simply switch the $x$ flow velocity value from the Z input to the Y input of the Combine XYZ node. And to change the Texture Coordinate output you just plug the UV output into the Reroute node instead of the Object output. (Unfortunately I forgot that the scaling of the texture needs to be changed as well, but there are certainly ways to do it by using the Combine XYZ node.)

switching Object and UV coordinates

In the beginning I said I would show how to introduce horizontal bands as well in the waterfall texture, but since this has grown to a full tutorial so far I will not go much into detail here.

I used the Wave Texture node set to Bands on Z, brought in some detail and roughness etc. and duplicated it because I need the animated double mapping on these as well to make the bands flow down. Then I mix the Wave Texture nodes with the Noise Texture nodes via a Mix node, I plug in a Value node for the Factor so I can change them simultaneously. The mix factor determines how strong the bands will be visible.

horizontal bands

And this is the result from the above node setup:

waterfall with bands

$\endgroup$
3
  • 3
    $\begingroup$ you and moonboots are sooo patient and detailed with us! $\endgroup$
    – james_t
    Commented Feb 21, 2023 at 21:44
  • $\begingroup$ @james_t I may be detailed, but not patient 🤣 $\endgroup$ Commented Feb 21, 2023 at 22:27
  • $\begingroup$ Wow!! very near to the original animation. $\endgroup$
    – SpaceX
    Commented Feb 22, 2023 at 9:42
6
$\begingroup$

You could unwrap this kind of object with the Follow Active Quads option to have an orthogonal UV:

enter image description here

Give it a material with 2 Wave Texture, one for the 3D waves, another one for the blue and light blue waves:

enter image description here

Keyframe the Mapping node in order to move the waves:

enter image description here

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .