标签: simplex-noise

单声道噪声与Perlin噪声

我想知道为什么在Simplex问世后,Perlin噪音仍然如此受欢迎.单一噪声是由Ken Perlin自己制作的,并且它假设接管他的旧算法,这种算法对于更高的尺寸和更好的质量(没有可见的伪像)来说是缓慢的.

单面噪声在2001年出现,在过去的10年里,我只看到人们谈论Perlin噪声,当涉及到为地形生成高度图,创建程序纹理等等.

任何人都可以帮助我,Simplex噪音有一些缺点吗?我听说有传言说Perlin噪音在1D和2D噪音方面更快,但我不知道它是否真实.

谢谢!

textures image-processing perlin-noise simplex-noise

38
推荐指数
4
解决办法
2万
查看次数

任何Simplex噪音教程或资源?

我想创建一个类似地形的3D噪声发生器,在做了一些研究之后,我得出的结论是,Simplex Noise是迄今为止最好的噪声类型.

我觉得这个名字很容易引起误解,因为我在找到关于这个主题的资源方面遇到了很多麻烦,而且我找到的资源往往写得不好.

我基本上寻找的是一个很好的资源/教程,逐步解释单一噪声的工作原理,并解释如何将其实现到程序中.

我不是在寻找解释如何使用库或其他东西的资源.

noise perlin-noise noise-generator simplex-noise

20
推荐指数
1
解决办法
3万
查看次数

JavaScript simplex/perlin噪音

我正在尝试在JavaScript中创建一个perlin/simplex/value噪声函数,它将产生类似于以下内容的结果:

在此输入图像描述 (注意:此图像已经应用了阈值.我希望它没有阈值.)

我已经在互联网上看了2天了.有很多链接可以解释噪声和很多代码,但JavaScript中没有,每当我尝试转换它时,我都会得到奇怪的结果.以下是我的一些尝试:

我认为问题的一部分可能源于在JavaScript中使用按位运算符,其中很难强制执行数字类型.

我正在寻找的是一个工作的例子,JavaScript噪音(无论什么类型).

我也愿意为有关参数的任何信息提供奖励,这些信息可能导致类似于我发布的图像(阈值之前)或任何优化提示的模式,因为我需要尽可能快地运行(尽管如此).

javascript algorithm procedural-generation perlin-noise simplex-noise

17
推荐指数
4
解决办法
2万
查看次数

为什么单纯形噪声似乎比经典的Perlin噪声具有*更多*伪影?

我阅读了Stefan Gustavson关于单纯噪声的优秀论文,其中我被承诺:

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

与"经典"佩林噪音形成鲜明对比.我兴奋地实施它,以发现相反的情况似乎是真的.我确实看到了经典噪音中的人工制品,但我看到至少与单轴噪声一样多的伪像,与主轴成45度对齐.将噪声映射到阶跃函数时,它们尤其明显.

为了确保它不是我的实现问题,我使用了别人的JavaScript实现.比较一些图像:

而且这里有一个画廊与他们.在最后一张图像中,查找与水平/垂直方向成45度对齐的边框.他们到处都是.如果需要,我可以突出其中一些,但它们对我来说似乎非常明显.(再次,我也在经典的噪声图像中看到它们.)

编辑:为了更加定量,我采样了100万个随机点,并且对于每个点,我数值计算经典和单纯噪声的梯度,并采用投影到xy平面上的梯度方向的直方图.如果没有方向性伪影,则图形将是平坦的.但你可以看到经典和单纯的噪音每45度就会出现一次峰值.

这是单纯噪声算法的问题吗?这是可以修复的吗?或者我是唯一一个将此视为问题的人?

algorithm procedural-generation noise perlin-noise simplex-noise

12
推荐指数
2
解决办法
5054
查看次数

使用单纯形噪声替换的球体的解析法线

我想渲染一个像球体一样的行星.总体思路如下:

  • 生成一组构成球体的单位长度顶点.
  • 渲染球体时,着色器会评估单位球面上的3D单面噪声.
  • 结果用作"高度"以沿其方向移动当前顶点.

到目前为止,一切都正常运作.

现在我想添加光照,因此需要法线到表面.

在实现与照明相关的部分时,我快速添加了一种方法,使用片段着色器中的偏导数来估计地形的法线,如下所示:

vec3 X = dFdx(ins.position);
vec3 Y = dFdy(ins.position);
vec3 normal = normalize(cross(X,Y));
Run Code Online (Sandbox Code Playgroud)

ins.position插值世界位置在哪里.

虽然这种方法有效,但它看起来并不是很好,因为它实际上导致了每个面的法线.

不正常的近似值

现在来看实际问题:

  • 计算每顶点法线会导致平滑法线,与图片不同,是否正确?
  • 单因素噪声优于Perlin噪声的优点之一是具有"定义明确且连续的梯度,可以非常便宜地计算"(引用优秀的单纯形噪声揭秘),并且梯度应该能够计算正常,对吗?

如果秒问题是"是",我有两个问题:

  • 单纯噪声算法取自一个流行的来源,遗憾的是不包括梯度计算.我将在下面发布我的添加尝试,但我不知道它是否正确.
  • 即使我有渐变,我仍然坚持从那里获得法线.

任何帮助是极大的赞赏!

我在渐变实现中的镜头(替换了最后几行的snoise):

float snoise(vec3 v, out vec3 grad)
{
    ......

    // Mix final noise value
    vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
    vec4 m2 = m * m;
    vec4 m4 = m2 * m2;

    vec4 pdotx = vec4(dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3));

    vec4 temp …
Run Code Online (Sandbox Code Playgroud)

opengl glsl normals simplex-noise

5
推荐指数
1
解决办法
1028
查看次数

3D的速度更快?Perlin或Simplex噪音?

好的,在网上找到了Perlin和Simplex噪音之间的很多比较.但我真的找不到三个维度之间的简单处理时间比较,这是我最感兴趣的.我已经阅读了那个流行的PDF(甚至大部分都理解了 - 是的!)但是我无法回答这个简单的问题:假设最佳实现,哪一个更快3D?

这个stackoverflow问题答案表明,Simplex对我来说是一个非常明显的赢家.当然,还有其他资源声称完全相反.

然而,一般声明似乎是Perlin噪声具有O(2 ^ N)的复杂度,而Simplex具有O(N ^ 2).其中3D表示Perlin为8,Simplex为9.但是,在某些网站上,我发现Simplex实际上是O(N)的说法.那么这里的真实情况什么,这对3D的速度意味着什么呢?

我在这里不知所措,我真的主要对3D应用程序(包括洞穴的随机地形生成)的使用感兴趣,如果我希望它能像我一样快,我找不到一个问题的答案.可能.

所以也许有人可以帮助我:)

algorithm 3d procedural-generation perlin-noise simplex-noise

4
推荐指数
1
解决办法
4946
查看次数

单工噪声着色器?

我有几个关于 Simplex Noise 的问题。我正在使用 Simplex Noise 在 directx 中生成地形,但我目前正在使用类等进行操作。我可能也会将它用于纹理,那么是否有必要将其更改为着色器实现?如果是这样,这很容易做到吗?

另外,对于纹理,使用 3D 或 2D 噪声更好吗?

directx shader perlin-noise simplex-noise

3
推荐指数
1
解决办法
6824
查看次数

使用 4D OpenSimplex 噪声而不是 2D Perlin 噪声来创建循环噪声的目的是什么?

当我学习创建循环生成艺术 GIF 的方法时,我遇到了两种不同的制作噪声循环的方法。

  1. Etienne Jacob 在其教程中的示例代码使用 4D OpenSimplex Noise,如下所示。

    (float)noise.eval(scl * x, scl * y, R * cos(TWO_PI * t), R * sin(TWO_PI * t));

  2. Daniel Shiffman 在其教程中的示例代码使用 2D Perlin 噪声,如下所示。

    噪声(cos(a)+ 1,sin(a)+ 1);

戈兰·莱文的作品

我的理解是,两者都是通过在噪声空间中“绕圈行走”来实现循环的,如上面的 gif 所示。但我不清楚两者之间的区别。选择 4D OpenSimplex 而不是 2D Perlin Noise 来创建循环噪声的目的是什么?

processing generative-art perlin-noise simplex-noise p5.js

3
推荐指数
1
解决办法
1151
查看次数