Hacker News new | past | comments | ask | show | jobs | submit login
Noise in Creative Coding (varun.ca)
250 points by winkerVSbecks on April 22, 2021 | hide | past | favorite | 19 comments



Note the algorithm is patented(!) per Wikipedia: https://en.wikipedia.org/wiki/Simplex_noise#Legal_status

There are six patent claims that I have no interest in reading. Apparently there is also an OpenSimplex noise for circumventing the patent, but it only goes up to 4D [simplex usefully goes up to 5D].


I was caught off guard by this! It just always felt like simplex noise was just perlin v2 and I never thought twice about the legal status of it. The 2022-01-08 Anticipated expiration is definitely something to look forward to here, especially since the current owner (an investment firm) appears to have >100 ongoing patent litigation cases, with patents as vague as network load balancing.

Reading the patent itself, there's definitely some weirdness to it, like how specific it is about application to texturing. I believe heightmaps would be acceptable (IANAL).

In slightly unrelated news, a bunch of Microsoft patents on fonts expired last October.


As a matter of safety, I never read non-expired patents to avoid possible willful infringement.


There's OpenSimplex by Kurt Spencer. I made a port of his original java implementation to C a few years ago.

https://github.com/smcameron/open-simplex-noise-in-c

Edit:

Here's the original: https://github.com/KdotJPG/OpenSimplex2


It's worth noting that OpenSimplex has different characteristics to Simplex in higher dimensions. Specifically some have noticed a stark tendency to form orbs in 4D, so it's definitely worth comparing the output of all 3 (perlin, simplex, and OpenSimplex) to see if they give you what you're looking for.

Additionally, it may or may not be legally distinct (hasn't been tested).


This is a very important concept to understand in visual design too. Sometimes perfect alignment, symmetry, etc... can be the wrong way to do something. Hardly anything in nature is 100% symmetrical. These are sometimes things that go unnoticed by the conscious mind but your subconcious will pick up on it.


I have an old tribal rug (Turkish/Afghan?) that has a "evil eye" (but a good evil eye...) weaved into it in order to break the otherwise perfect symmetry of the design.


Agreed! Aesthetics is item g) in Knuth's list of example applications for 'Numbers that are "chosen at random"':

"A little bit of randomness makes computer-generated graphics and music seem more lively" (TAOCP, Vol 2 3rd Ed., Ch. 3, p 2)


Really nice article and demos, very informative.

Maybe unsurprisingly, noise is a really important aspect of audio and music as well. A lot of synthesizers have a parameter for adding white or pink noise to sounds. What's interesting is in a lot of music, my ears would never pick out the noise without actively listening very closely, but if you take the noise away the music sounds way more plain and empty in a very subtle way.


FWIW, colored (white/pink/brown) audio noise is conceptually quite different from the kind of noise in this article. Audio noise is intentionally broad-spectrum and usually includes very high frequencies. The interpolated noise such as Perlin noise used for textures is intentionally just a single frequency, and it’s designed specifically to avoid the kind of white noise you get when you call Math.random().


Great article, I love all the picture and interactive demos. The flow visualizations are very cool too. I do feel like the foundations could be tidied up a little though.

> What we need is a smoother, more organic randomness. That is what the noise function generates

Noise is really interpolated random numbers, and you can interpolate spatially and/or temporally. So noise definitely is smoother than a random number, but not exactly more organic.

> There are two flavours of noise—Perlin and Simplex.

There are lots more than two kinds of noise, just like there are a lot of different ways to interpolate data. This sentence should be corrected if possible.

> Vector fields are cool, but flow fields are an even more exciting visualization.

I don’t think this is standard terminology, flow field and vector field mean the same thing to me. If you google those two terms, you find images of what you’re calling vector fields for both, and also articles that say explicitly that they mean the same thing.

I usually think of the advected lines that are referred to as “flow” here called “streamlines”, or a “streamline visualization”.

BTW, the flow visualization rabbit hole is deep. The advection method in the article is a Newton integration, and there are many other ways push the particles around a vector field - and sometimes it really matters! It’s fun to figure out how to draw flow streamlines if the field is chaotic or divergent. Even more interesting & difficult is to compute and visualize the boundary (“separatrix”) between sections of the field that have different behavior.


As an aspiring plotter artist (is that a thing?) I find this to be a very good resource, thanks for putting it together.


Same - I picked up a working HP7475a last week and have found some sharpies that fit. This article just accelerated my learning by months


I think anyone should be able to put anything in their title if its following the word "aspiring".


This is really cool and super informative! I used Perlin noise in a side project of mine a couple months ago to make cool textured planets, which you might enjoy checking out https://vinaybhaip.com/blog/2021/01/26/perlin-planets


> There are two flavours of noise—Perlin and Simplex.

Value noise? Worley? There's a ton of algorithms, not just Perlin's. I like Pixar's Wavelet more than the patent-free Simplex implementations, which are all kinda disappointing knockoffs.

Value noise is comically easy to implement, and comes in handy in a pinch. Usually loads of artifacts. Perlin noise is also easy but a bit more intricate (my first attempt at a fixed-point implementation got a sign wrong).

Notably I think Minecraft had a buggy implementation of multidimensional noise for a long long time, visible along chunk boundaries in the form of very sharp edges/transitions.


Perlin noise is comically easy to import, and it's better than value noise in pretty much every way. It's also not super hard to implement. It's like value noise but with vectors on the plane instead of scalars. There's a tiny bit more math to do, but it's not complicated. If you have done game engine development or linear algebra, it's right up your alley, but also not hard for the general programmer to implement with copy and paste.


For some reason I thought this would randomly generate a test-drive suite that you'll to pass by creatively implementing whatever makes the random tests pass.


Great article, I loved the interactive examples




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: