单纯形噪声与 Perlin 噪声
我想知道为什么在 Simplex 出现后,Perlin 噪声至今仍然如此流行。单纯形噪声是由 Ken Perlin 自己制作的,它应该取代他的旧算法,该算法对于更高的维度来说速度较慢,但质量更好(没有可见的伪影)。
Simplex 噪声于 2001 年出现,在这 10 年里,我只看到人们在生成地形高度图、创建程序纹理等时谈论 Perlin 噪声。
有人能帮我吗,单工噪音有什么缺点吗?我听说有传言说 Perlin 噪声在处理 1D 和 2D 噪声时速度更快,但我不知道这是真的还是假的。
谢谢!
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!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
恕我直言,单纯形噪声看起来更糟,很多人认为它在更高维度中看起来“越来越糟糕”。对于大多数应用程序,我仍然推荐它而不是 perlin,因为大多数应用程序不会仅使用原始单纯形,而是使用它的八度音程,它看起来与 perlin 的八度音程大致相同,并且八度音程的速度要快得多。
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.
“如果它没有坏,就不要修理它。”
看看是否有人能告诉您为什么 Simplex 更好。我发现“它更快并且扩展到多个维度”和“单纯形噪声试图降低高维噪声函数的复杂性”。我们大多数人都在 2 或 3 维中工作,如果我们足够幸运,能够花时间做一些事情的话,也许是 4 维。
我认为公平地说,Perlin 的实时使用很少,处理速度太慢,对于大多数用途来说,标准 Perlin 噪声就足够了。在预渲染(例如电影行业中使用的)中,时间并不重要,因为无论如何渲染都很慢;在实时模拟中,我们有足够的方法来减少正在进行的处理的范围,因此您不太可能每隔几纳/毫秒生成大量噪声图 - 这只是基本的实时优化。
"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.
如果仅仅是因为名字,我一点也不会感到惊讶。您必须在 Perlin 噪声和 Simplex 噪声之间进行选择。后者较新并且具有一些优点。但是,你知道,这听起来像是两者的“简单”版本。我会选择更复杂的一个;噪声应该很复杂,不是吗?
人们往往是相当非理性的。
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.
Ken Perlin 为他的单纯形噪声算法申请了专利。据我所知,他的经典算法并未申请专利。
Ken Perlin patented his simplex noise algorithm. His classic algorithm is not patented to my knowledge.
对经典 Perlin 噪声的一些偏好可能来自于能够使用已知的值来产生已知的视觉特性,而不是花费时间来查找使用单纯形噪声获得等效输出所需的输入参数。
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.
只是一些轶事经验,我使用经典 Perlin 噪声的原因是因为 Ken Perlin 有一个 C 实现 经典的 Perlin 噪声,同时提供改进的 Perlin 噪声的 Java 实现。尽管听起来很愚蠢,但经典的柏林噪音更容易复制并粘贴到我的程序中,所以这就是我使用它的原因。我一直想抽出时间来移植 Java 实现,但经典的 Perlin 似乎工作得足够好,所以我从来没有费心去添加它。
Stefan Gustavson 有一些非常好的 Simplex Noise C 实现,在这里
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
我会坦率地回答这个问题,我会说这是因为柏林噪音非常容易让你头脑清醒。另一方面,单纯噪声是一种更加复杂、更加毛茸茸的野兽。启动并运行 Perlin 实现比 simplex 容易得多,因此得到了更多的使用。这对单纯形的情况没有帮助,因为两者在视觉效果上非常相似(特别是在您稍微操纵噪声之后)。
Kenneth Perlin 本人为基于硬件的实现设计了simplex算法,并因此做出了设计决策更轻松。从该专利的引言中可以看到一个例子。
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.
我还没有处理过单纯形噪声,但我可以考虑几个原因:
1.柏林噪声的输出是容易平铺的方块。纹理通常是平铺的正方形。
I haven't worked with simplex noise yet, but I can think about a few reasons:
1.The output of perlin noise are easily tileable squares. And textures are often tiled squares.