During my deep dive into Perlin and Curl noise, I kept bumping into the subject of Simplex noise. I figured it was worth going down that rabbit hole for a day or so. Here’s what I’ve found.
I guess it’s no surprise that Perlin noise was created by Ken Perlin. He came up with it in 1983. Later, in 2001, he went on to release Simplex noise. Although it was developed as an improvement over Perlin noise, and it has many advantages, it seems like Simplex has never really taken on to the same degree, and Perlin noise appears to maintain its place as the de facto standard.
Here are some of the advantages that were designed into Simplex noise:
– from: https://en.wikipedia.org/wiki/Simplex_noise
To explore these two, I created a little app that lets you compare and contrast the two in one and two dimensions. Actually, it uses 3d noise for each, but only displays one 2d slice at a time. I was not initially aware of the third bullet point above. Perhaps I’ll explore that difference in a future post.
Here’s the app:
Initially the app is in 1d mode. Let’s take a screenshot so we know we’re looking at the same thing.
Here we have two plots of 1d noise. The black wavy line is Simplex noise. The red one is Perlin noise. There are a few important differences here.
Now lets switch over to 2d noise. As I said above, this is really showing slices of 3d noise for each algorithm. Later I might do a test of 2d vs 3d for both. Again, let’s capture a screenshot and discuss.
Perlin on the left, Simplex on the right.
Don’t mind the blockiness in some of the images. I kept the resolution low because I was animating it. It seems like the Simplex is more pixelated but that’s just because it has more contrast – more change happening in a smaller area – see below.
Immediately you can see all of the same issues we covered in 1d noise.
Here you can see several horizontal lines in the left hand Perlin sample. In both images, there are no blatant artifacts like this in the Simplex noise.
Finally, let’s revisit the image that you saw at the top of the post, it’s using color instead of grayscale.
Same things going on here. We seemed to avoid any serious artifacts this time, but you can see the different color ranges and complexity going on between the two.
Overall, I have to agree that Simplex has some great advantages. I’ve definitely been plagued by those artifacts in Perlin noise, and I like the increased range. The higher frequency or whatever isn’t really an advantage or disadvantage in my mind. You just need to scale your input a bit differently to get similar outputs. So you have to keep in mind that if you try to swap out Perlin for Simplex in an existing work, you might have to tweak it a bit to get the same look in terms of scale and dynamic range.
I’m also very curious about the “lower computational complexity”. Does this mean it’s more performant? I haven’t done any benchmarks, but that would be a big plus for sure.
I think you’ll be seeing a lot more Simplex noise round these here parts.
Controls: MiniComps
Graphics: BLJS
Comments? Best way to shout at me is on Mastodon