y'know what's cooler than Perlin Noise? Simplex Noise [1]! This is what is hinted at at the end of this article. Also invented by the same person to address issues in the original Perlin Noise function. It's not as popularly known because it was restricted by patent issues for so long but as of 2022 the patent has expired!
It's also rather more difficult to implement in 3+d because the mapping to the simplex space is not exactly intuitive.
Simplex noise is nice because it's more efficient to calculate, especially for larger dimensions but it has a noticeably different look to it so it's not a drop-in replacement.
My intro to Perlin noise was a Stripe page where their customer wall of logos was floating bubbles. Not a video but actual DOM elements translating around. Stripe always going that extra mile.
i had the privilege of taking perlin's computer graphics course at nyu- amazing person. fun fact, his conference submissions are easily spottable because he's the only person in the world who doesn't refer to it as "Perlin Noise"
You can also interpret each value in Perlin noise as a vector in a flow field to make some interesting and smooth animations reminiscent of older MacOS desktop wallpapers: https://rmarcus.info/blog/2018/03/04/perlin-noise.html
I use Perlin noise in all games I make, and in my research. It's marvellous!
+1 to Perlin.
I did not know that there were two versions of the algorithm:
> ...the algorithm we discussed here is the original algorithm given by Ken Perlin. But after a few years of giving this algorithm, he improved this in some ways, like he changed the smoothing curve, the way gradients are calculated, etc. And that will be the topic of our next article.
...and that next article doesn't exist. But:
* The 2002 paper improving it (this was likely after I first encountered Perlin noise, so I would have implemented v1!) https://mrl.cs.nyu.edu/~perlin/paper445.pdf
* A really good article explaining the v2 algorithm: https://adrianb.io/2014/08/09/perlinnoise.html
(2023)
I've implemented 3D perlin noise recently and was surprised that the lighting was always off on the created model around the grid lattice (the model itself was continuous there, just the light was not correct). After a delightful couple of days debugging it, I finally learned that Perlin noise's derivative is not continuous around grid lattice, which makes normals not continous there (as normals are orthogonal to a tangent, and tangent is based on derivative). It's possible to improve it by cleverly changing Perlin's wavelet function, which makes the noise C(1) (derivative is continuous, second derivative is not) - this makes the visual artifacts smaller, but they don't go away.
This is addressed in Perlin's improved noise function that uses a 5th degree polynomial ("smootherstep", t³·(10t·(6t-15)) in Horner's form) for interpolation which has everywhere continuous first and second derivatives.
Yes, that's what I did and what I reffered to in my post (I forgot that it gave you C(2) and not just C(1), it's been a couple of months since I worked on this). There are still visual artifacts, they're just smaller. Even Perlin's paper on this showed a picture of the artifacts that the 5th degree polynomial still generates.
where it gets really fun is when you add a temporal dimension to the noise :) https://yogthos.net/posts/2026-06-17-perlin-flow.html