1D的Perlin噪音?

时间:2012-01-10 05:04:20

标签: c# algorithm perlin-noise

尽我所能,我找不到任何有关1D Perlin \ Samplex Noise的真实教程。

我在互联网上搜索过但却找不到任何东西。我发现任何提到1D perlin噪音的网站通常都很不清楚,或只是显示代码

3 个答案:

答案 0 :(得分:4)

我知道这是一个老问题,但这是关于构成1d Perlin噪声的固定点之间插值的最清晰解释之一http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf

在所有编程中有用的最重要的事情之一是插值函数......

http://paulbourke.net/miscellaneous/interpolation/

一旦你有平滑插值的随机点,你就有了一种平滑的1d噪声函数。

在维基上看到smoothstep。通过谷歌的话题很多。 https://en.wikipedia.org/wiki/Smoothstep

显然超链接是不稳定的,这里又是:

单纯形噪音揭秘

Ken Perlin提出了“单纯噪音”,取代了他的经典噪音算法。 经典的“Perlin噪音”为他赢得了学院奖,并成为无处不在的程序 多年来计算机图形学的原始,但事后看来它有很多局限性。 Ken Perlin本人专门为克服这些限制而设计了单一噪声,而他 花了很多好心思。因此,它比他原来的算法更好。

一些 更突出的优点是:

•单纯形噪声具有较低的计算复杂度,并且需要较少的乘法。

•单面噪声可以扩展到更高的维度(4D,5D及更高),计算成本更低,复杂度适用于尺寸而非经典噪声。

•单纯形噪声没有明显的方向性伪影。

•单面噪声在任何可以计算的地方都有明确定义的连续梯度 非常便宜。

•单面噪声很容易在硬件中实现。

遗憾的是,即使是在2005年初,也很少有人能够理解单纯的噪音 没有人使用它,这就是我写这个的原因。我将尝试更彻底地解释算法 比肯·佩林在Siggraph 2001和2002的课程笔记中有时间做的那样 希望能够清楚地表明它并不像最初看起来那么难掌握。 从我所学到的,最令人困惑的是Ken Perlin的难以理解的本质 Java中的参考实现。他提出了非常紧凑和未注释的代码 演示原理,但该代码显然不应被视为教程。经过几次 试图放弃代码并阅读他的论文,这更加清晰。

不是水晶 但是很明显,因为他主要用单词和代码片段来呈现算法。我会 赞赏一些图形和图形以及一些有用的方程式,这就是我试图提供的 在这里,让其他人更容易理解单一噪音的伟大和美丽。我会 还首先用一维和二维解释事物,以便用图形更容易解释 和图像,然后转到三维和四维。 经典的噪音 为了解释单纯形噪声,有助于对经典Perlin有一个很好的理解 噪声。我在这方面已经看到了很多不好的和错误的解释,所以要确定 你已经完成了必要的基础工作,我将首先展示经典的Perlin噪音。

Perlin噪声是一种所谓的梯度噪声,这意味着您可以设置伪随机梯度 在空间中的规则间隔点处,并在这些点之间插入平滑函数。至 在一维中生成Perlin噪声,您将伪随机梯度(或斜率)关联起来 每个整数坐标的噪声函数,并在每个整数坐标处设置函数值 为零。

对于两个整数点之间的给定点,该值在两者之间进行插值 两个值,即如果最近的线性斜率来自的结果值 左边和右边的外推到了有问题的地方。这种插值是一种平滑的算法。

答案 1 :(得分:2)

该聚会迟到了,但事实证明,像下面这样的功能绝不是周期性的。

sin (2 * x) + sin(pi * x)

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-output?tabs=java

您通常可以采用此功能,例如将2更改为3,在y方向上挤压图形,缩放单个正弦的x频率/周期,您也可以移动 x。很多事情,我在下面的链接中创建了一个操场,它在geogebra处,因此您可以尝试配置,查看最佳外观,等等。绿色是结果,紫色是您想要整个功能增长到理论上的无穷大,橙色的点状图是函数的不变结构,我们在上方看到红色,黄色的线状图表示不带比例的所有内容。享受吧!

提示:对于非定期函数,您不需要两个无理数。例如,您还可以使用两个的平方根。

Curve demonstrating sin (2 * x) + sin(pi * x)

https://www.geogebra.org/graphing/yzgxvd8q

答案 2 :(得分:-2)

我知道这个问题已经过时了,并且已经得到了回答,但是你不能仅仅从2D Perlin噪音中取出线条,例如:总是使用0表示x或y?