Simplex noise vs Perlin noise
Asked Answered
M

8

59

I would like to know why Perlin noise is still so popular today after Simplex came out. Simplex noise was made by Ken Perlin himself and it was suppose to take over his old algorithm which was slow for higher dimensions and with better quality (no visible artifacts).

Simplex noise came out in 2001 and over those 10 years I've only seen people talk of Perlin noise when it comes to generating heightmaps for terrains, creating procedural textures, et cetera.

Could anyone help me out, is there some downside of Simplex noise? I heard rumors that Perlin noise is faster when it comes to 1D and 2D noise, but I don't know if it's true or not.

Thanks!

Memoried answered 22/6, 2011 at 11:52 Comment(0)
B
33

"If it ain't broke, don't fix it."

See if you can find anyone telling you why Simplex is better. "It's faster and extends to multiple dimensions" and "simplex noise attempts to reduce the complexity of higher dimensional noise functions" were what I found. Most of us work in 2 or 3 dimensions, maybe 4 if we're lucky enough to be doing something with time.

I think its fair to say there is little enough real-time usage of Perlin that is too slow to handle, that for most purposes standard Perlin noise is sufficient. In pre-renderings (such as used in the movie industry) time isn't really important since renderings are slow anyway; and in real-time simulations, we have enough ways to reduce the scope of ongoing processing that it's unlikely you're going to be generating massive noise maps every few nano/milliseconds -- that's just basic real-time optimisation.

Baronetage answered 4/8, 2011 at 16:17 Comment(3)
I guess that's an adequate answer. But it's not only about speed and faster higher dimensions, it also has to do with artifacts in the Perlin noise which are not visible in Simplex noise. But like you said, Perlin noise is good enough so why use anything else? :-)Antho
"It's faster and extends to multiple dimensions" -- "with much less computational cost, the complexity is O(N) for N dimensions instead of the O(2^N) of classic noise"Feingold
4D noise is common for noise in wrapping textures: {X_u, X_v, Y_u, Y_v} where u and v are sine/cosine pairs of the "angles" X and YQuestion
S
29

I wouldn't be at all surprised if it was simply because of the name. You have to choose between Perlin noise and Simplex noise. The latter is newer and has some advantages. But, you know, it sounds like the 'simple' version of the two. I'll go with the complexer one; noise is supposed to be complex, isn't it?

People tend to be rather irrational.

Soinski answered 23/6, 2011 at 19:0 Comment(1)
This is a common misconception. Simplex does not mean simpler method; it refers to the generalization of a triangle to arbitrary dimensions. To put it simply, Simplex noise uses a grid of triangles instead of squares.Herzog
F
12

Ken Perlin patented his simplex noise algorithm. His classic algorithm is not patented to my knowledge.

Ferdinand answered 19/7, 2015 at 22:22 Comment(1)
For the record, the patent on Simplex noise expired in January 2022: patents.google.com/patent/US6867776Mere
T
8

Some preference for the classic Perlin noise may come from being able to use known values resulting in known visual characteristics, as opposed to investing the time required to find the input parameters needed to get an equivalent output using simplex noise.

[simplex noise] has a slightly different visual character to it, so it’s not always a direct plug-in replacement for classic noise. Applications that depend on the detailed characteristics of classic noise, like the precise feature size, the exact range of values or higher order statistics, might need some modification to look good when using simplex noise instead.
Stefan Gustavson's Simplex noise demystified

Trammell answered 11/11, 2012 at 20:56 Comment(0)
F
4

Just some anecdotal experience, the reason I used classic Perlin noise was because Ken Perlin had a C implementation of classic Perlin noise, while providing a Java implementation of improved Perlin noise. Silly as it may sound, classic Perlin noise was easier to copy and paste into my program, so that is why I used it. I always intended to get around to porting that Java implementation, but classic Perlin appeared to work well enough, so I never bothered to add it.

Stefan Gustavson has some very good C implementations of Simplex Noise, here

Feingold answered 21/12, 2012 at 1:54 Comment(2)
Thanks for the url. The page does not list the license terms of the code though. Any idea what kind of licensing comes with it?Symptom
Far as I know, everybody uses Perlin noise without needing any kind of license. Also note Stefan Gustavson's C implementations which are very good.Feingold
M
3

I haven't worked with simplex noise yet, but I can think about a few reasons:

  • Perhaps because we're used to squares and 90 deg angles? Squares, Cubes,... are much more natural to us than triangles, tetraeders or hyper-tetraeders.
  • Each layer in perlin noise is just a simple bitmap.
  • The output of perlin noise are easily tileable squares. And textures are often tiled squares.
  • You usually use low dimensional noise. In my experience 2D and 3D are most common.
  • Simplex noise is simply harder to understand and implement
  • Probably the samplers in a graphic card can do the interpolation for orthogonal bitmaps as used in perlin noise, but not the interpolation on 60 deg angles bitmaps used in simplex noise. (this point might be wrong, I haven't worked with graphics cards for a few years)
Margay answered 22/6, 2011 at 13:55 Comment(7)
Hmm, okay, I'll try to sort this out with my current knowledge of Perlin noise, Simplex noise and fractional Brownian motion. My opinion here below maybe wrong so please do correct me if something I say is not correct. Statement 1: Could be true but one could always modify the output of the noise to make it look boxy with 90 degree angles. Statement 2: Afaik, fbm is using noise, whether it be perlin, simplex or any other noise and it creates layers of octaves. Simplex and perlin is just a noise and has little to do with layers. Statement 3: Same as my answer to statement 1Antho
I mainly know perlin noise in procedural texture generation. And there you conceptually create it by creating bitmaps consisting of random grayscale pixels, and then blend several layers using different scaling factors. freespace.virgin.net/hugo.elias/models/m_perlin.htm Shows how to create perlin noise by simply blending a few layers of random pixel bitmaps.Margay
Statement 4: Ok sure, you can also use 1D and 2D in Simplex and it offers no artifacts like perlin noise generates. Statement 5: I beg to differ, it was designed specifically to make it easier to implement in hardware, but CPU wise I don't know, it was really easy for me to convert to it. Statement 6: I don't know, but like my answer to statement 5, Simplex should be easier to implement in the GPU according to Ken Perlin.Antho
I found an interesting paper on Simplex noise called "Simplex noise demystified" at webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf The main reason it seems why people think Simplex noise is complicated is because, I would like to quote from the paper above:Antho
"From what I’ve learned, what confuses people the most is the impenetrable nature of Ken Perlin’s reference implementation in Java. He presents very compact and uncommented code to demonstrate the principle, but that code is clearly not meant to be read as a tutorial. After a few attempts I gave up on the code and read his paper instead, which was a lot more clear."Antho
Regarding your comment on blending several layers together, that is not part of perlin noise, that is fBm. fBm generates few layers of noise and blends them together. Same concept is done for Simplex noise. No change there :)Antho
Hmm looks like most articles I read misuse the word perlin noise.Margay
D
2

I would answer the question bluntly I would say it is because Perlin noise is super simple to get your head around. Simplex noise on the other hand is very much a more complex and hairer beast. Getting a Perlin implementation up and running is much easier than simplex and thus gets more usage. It does not help simplex's case that both are very similiar in the visuals (especially after you manipulate the noise a bit).

Kenneth Perlin himself designed the simplex algorithm for an hardware based implementation and thus made design decisions that make this easier. One example of this can be seen in this quoute, from the patent.

Need for table memory: The original Noise algorithm relied on a number of table lookups, which are quite reasonable in a software implementation, but which in a hardware implementation are expensive and constitute a cost bottleneck, particularly when multiple instances of the Noise function are required in parallel. Ideally, a Noise implementation should not rely on the presence of tables of significant size.

Detector answered 26/4, 2017 at 7:39 Comment(0)
S
2

simplex noise looks worse imho, and lots of people think it looks "increasingly bad" in higher dimensions. I'd still recommend it over perlin for most applications, as most won't be using just raw simplex but octaves of it which looks roughly the same as octaves of perlin and is significantly faster for octaves.

Shaer answered 25/5, 2019 at 14:8 Comment(1)
Not too far from how I would explain it. I do have a few points to add: Single octaves of Simplex are more "dotty" but still have fewer directional artifacts in a good impl. When adding many octaves, the dottiness disappears but the direction bias remains, making Simplex the higher quality choice. If you need one octave, then to avoid both squareness and dottiness, I either use simplex which has been modified to produce less-dotty results (e.g. my OpenSimplex2S algo shown at the bottom i.imgur.com/gvhRwmX.png), or a slice of domain-rotated 3D+ Perlin i.imgur.com/k06UVx5.pngBlindage

© 2022 - 2024 — McMap. All rights reserved.