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.
noise-series
Noise: 2d vs 3d, Perlin and Simplex
tutorialIn 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.
Perlin vs. Simplex
tutorialDuring 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.
Curl Noise, Demystified
tutorialIn 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.
Perlin Noise Quad Tree
experiments, minicompsSometimes I like to take two random concepts and smash them together.
Not Curl Noise
experiments, minicompsI 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.
Curl Noise
experimentsMy 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.
Mapping Perlin Noise to Angles
tutorialA 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?