Over the last week, I’ve made several deep dives into the subject of noise – Perlin noise, Simplex noise Curl noise, 2d and 3d noise. Worth reading through them in order, if you’re interested in this stuff.
In yesterday’s post, I ran across this statement about Simplex noise:
noise generated for different dimensions are visually distinct (e.g. 2D noise has a different look than 2D slices of 3D noise, and it looks increasingly worse for higher dimensions).https://en.wikipedia.org/wiki/Simplex_noise
As promised, here’s an analysis of what that actually means visually for rendering Simplex noise.
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.
In my recent post on mapping Perlin noise to angles, I was put on to the subject of Curl noise, which I thought I understood, but did not. I figured out what Curl noise really was in a subsequent post and then posted my earlier incorrect (but still interesting and perhaps useful) concept of Curl noise in yet another post. Although I kind of understood what Curl noise was at that point, I wanted to give myself a more complete understanding, which I usually do by digging into the code, making sure I understand every line 100% and seeing what else I can do with it, trying to make multiple visualizations with it to test my understanding, etc.
Sometimes I like to take two random concepts and smash them together.
I previously had an incorrect concept of what curl noise was. This experiment demonstrates it. Although it isn’t what I thought it was, it’s still a pretty cool concept.
My last post on Perlin noise wound up on hitting Hacker News, which generated an enormous amount of views, and a fair number of comments – here, on Twitter, and on HN itself. Of course, there was the usual eye-rolling, condescending, “why doesn’t he just do ….? that would be the obvious approach” kind of comments there, but a fair amount of actual helpful ideas, explanations, and links. One thing that came up over and over was the idea of using curl noise. So, when I got a chance, I went ahead and used curl noise.
A common use case for Perlin Noise is to create some kind of flow field, and a common way to do that is to map the noise value at a particular location to an angle from 0 to PI * 2 radians (0-360 degrees). Above you can see an example of this. But there’s a problem with this logic. Can you see it in the above image?