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?
Similar to one I did recently, but implemented with isometric cubes.
I could not be happier about the way this turned out. I could play with this for hours. Which is to say, I’ve been playing with this for hours.
This algorithm is painfully slow, but if kept to small areas it’s pretty neat.