spikeyxxx

4 replies · posted

Want to loop a Noise Texture? Here's a way to do that.

One of the great advantages of procedural textures is, that they do not repeat themselves. There is no ugly tiling.

But what if you want to make a procedural fire like theluthier and you are driving the flame with a Noise Texture and want to make a looping animation of it?

What you can do is this:

Technically it is not a loop in the sense that it goes around, but more like a wave, going up and down, but it will be repeating anyway, so who cares.

From left to right: Make an Input Value Node and type #frame in the field. This makes a driver so that it will output your frame number. We divide this by the number of frames in your loop, resulting in a number between 0 and 1. Multiply this by 2 Pi (because Sine and its brothers take Radians as an input). We could also use a Converter > Map Range for this. (And in 2.82 we could use a To Radians conversion in the Math Node...)

I then combine a Sine and a Cosine. Here I multiplied them, you could also add them. This is just because Sine and Cosine have an almost flat part, resulting in a few consecutive frames, that might be the same...

Then multiplying it by a 'speed' factor. It is basically how far two textures in neighbouring frames are apart.

Works on any noise texture that has a fourth dimension (here used as time).

Maybe this is helpful to someone.


  • Here's an improved version:

    By multiplying the Sine with a Noise Texture, we make sure that at the 'loop turning point', when the sine is 0, there is no noise added.

    A further benefit is, while we 'noisify' the sine wave, we destroy the up-down symmetry.

    And we reduced the number of nodes.

  • crew

    spikeyxxx Thanks for posting this! My brain tends to hit the ceiling when it comes to making procedural things loop. This helps a lot.

    Also I found some helpful tips from Ducky3D's recent tutorial. Namely that rotating 360 in a particular axis of the mapping node is good for looping as well.

    • Sure you can do that as well, a lot simpler than my method!

      Only thing is, that that way you can only change the speed of the noise change by changing the length of the loop. (Please correct me if I'm wrong!)

      With my set-up, which isn't perfect, you can simply add another Multiply Node just before the W (Time) of your main Noise (the 4D one, not the one that distorts the Sine wave) to speed up (>1) or slow down the noise.


    • crew

      spikeyxxx Ahh that's a great point about changing the length of the loop. Your method is better; more flexible 👌