Animating Perlin noise

I realised the other day that several of the projects I am developing use Perlin noise in a completely continual fashion. This means that the outputs can be morphed into different forms without discontinuities. Not just that, but Perlin noise offers quite a simple way to do this - the third dimension.


The three above pictures are part of the same strangelet, only sampled at different points of 3D space. In fact, these three are 3 points of an infinitely long stack of different versions of this same strangelet. Though it might not be obvious, they are not ordered arbitrarily - the middle picture is halfway between the left and right pictures in this incomprehensible 3D space.

The thing is that though I could algorithmically make 3D, even 4D or 5D strangelets, a strangelet can only be viewed by us as a 2D projection. Even with a 3D printer, it would not be possible to view this stack of different versions of the strangelet, as blobs would obscure each-other. However, a close alternative is animation, where time has been turned into the third dimension.



These animations show that the 3D stack of strangelets is more than just an interpolation from the first to the last iteration. Rather, several ephemeral intermediary stages exist. This should follow from the idea of Perlin noise:

Interpolation

Perlin noise
This explains why there are so many strange emerging constellations that then disappear once more - it is simply the interaction between high- and low-frequency noises.

Of course, the fact that around half the layers of noise in the strangelets are invisible at any given point of the 3D column does not make this any more straigtforward.


But the strangelets are just one of several projects I can apply this 3D time animation to. For instance, how would the snowflakes from a couple of days ago look like animated?


The snowflakes are a lot closer to regular noise, which means we can now actually see some of the effects expected from the graph of Perlin noise shown above. At several points, we see features appear before disappearing again, as is expected of Perlin noise that dips and falls with valleys close to peaks and vice versa.

Here it also seems quite possible that every single snowflake showcased in the previous post could actually come at some point of the above animation, if only it had been allowed to go on indefinetely, showcasing the infinitely tall stack of potential snowflakes within the 3D snowflake noisespace.

These two first examples both showcase Perlin noise 2D renderings. However, the same method can be applied to such a startlingly different task, such as generating racetracks.



The racetracks are a 1-dimensional loop. It consists of a bunch of segments whose direction between each-other depends on 1D Perlin noise (which is then adjusted to make a loop). Anyway, it was quite simple to make add another dimension to the Perlin noise, and then to animate it as seen above or if you go to the OpenProcessing page for it.

A note to make here - because the procedural racetracks, opposite to the other projects, will not be able to loop through all possible versions continously. There is such a thing as the loopiness of the track. All the tracks above are basically different distortions of a figure eight, that is, the car must steer equally much left as right. This kind of track will never be able to morph into a track with just one loop. This would be distortions of a circle, where the car must steer 360° more left than right throughout the track. This means that only one subtype of track can be morphed continously within one animation. Anyway.

This, then, is a third example of a completely different algorithm that also gives out some nice results when animate. It seems this third dimension is an often forgotten benefit of using Perlin noise.

I should also mention you can do "evolving terrain" by applying the same method to a straightforward 2D Perlin noise terrain algorithm. But this is where it starts and ends for too many people. The sky's the limit.

Comments

  1. Cool!

    I bet it would look awesome if you could break it apart and render it in 3D, with each noise layer being a 2-D bounded plane at a slight angle :D

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete
    Replies
    1. This is spam, but I'm unsure as to how to report it.

      Delete

Post a Comment