我想知道为什么在Simplex问世后,Perlin噪音仍然如此受欢迎.单一噪声是由Ken Perlin自己制作的,并且它假设接管他的旧算法,这种算法对于更高的尺寸和更好的质量(没有可见的伪像)来说是缓慢的.
单面噪声在2001年出现,在过去的10年里,我只看到人们谈论Perlin噪声,当涉及到为地形生成高度图,创建程序纹理等等.
任何人都可以帮助我,Simplex噪音有一些缺点吗?我听说有传言说Perlin噪音在1D和2D噪音方面更快,但我不知道它是否真实.
谢谢!
我想创建一个类似地形的3D噪声发生器,在做了一些研究之后,我得出的结论是,Simplex Noise是迄今为止最好的噪声类型.
我觉得这个名字很容易引起误解,因为我在找到关于这个主题的资源方面遇到了很多麻烦,而且我找到的资源往往写得不好.
我基本上寻找的是一个很好的资源/教程,逐步解释单一噪声的工作原理,并解释如何将其实现到程序中.
我不是在寻找解释如何使用库或其他东西的资源.
我正在尝试在JavaScript中创建一个perlin/simplex/value噪声函数,它将产生类似于以下内容的结果:
(注意:此图像已经应用了阈值.我希望它没有阈值.)
我已经在互联网上看了2天了.有很多链接可以解释噪声和很多代码,但JavaScript中没有,每当我尝试转换它时,我都会得到奇怪的结果.以下是我的一些尝试:
我认为问题的一部分可能源于在JavaScript中使用按位运算符,其中很难强制执行数字类型.
我正在寻找的是一个工作的例子,JavaScript噪音(无论什么类型).
我也愿意为有关参数的任何信息提供奖励,这些信息可能导致类似于我发布的图像(阈值之前)或任何优化提示的模式,因为我需要尽可能快地运行(尽管如此).
javascript algorithm procedural-generation perlin-noise simplex-noise
我阅读了Stefan Gustavson关于单纯噪声的优秀论文,其中我被承诺:
单纯形噪声没有明显的方向伪影
与"经典"佩林噪音形成鲜明对比.我兴奋地实施它,以发现相反的情况似乎是真的.我确实看到了经典噪音中的人工制品,但我看到至少与单轴噪声一样多的伪像,与主轴成45度对齐.将噪声映射到阶跃函数时,它们尤其明显.
为了确保它不是我的实现问题,我使用了别人的JavaScript实现.比较一些图像:
而且这里有一个画廊与他们.在最后一张图像中,查找与水平/垂直方向成45度对齐的边框.他们到处都是.如果需要,我可以突出其中一些,但它们对我来说似乎非常明显.(再次,我也在经典的噪声图像中看到它们.)
编辑:为了更加定量,我采样了100万个随机点,并且对于每个点,我数值计算经典和单纯噪声的梯度,并采用投影到xy平面上的梯度方向的直方图.如果没有方向性伪影,则图形将是平坦的.但你可以看到经典和单纯的噪音每45度就会出现一次峰值.
这是单纯噪声算法的问题吗?这是可以修复的吗?或者我是唯一一个将此视为问题的人?
algorithm procedural-generation noise perlin-noise simplex-noise
我想渲染一个像球体一样的行星.总体思路如下:
到目前为止,一切都正常运作.
现在我想添加光照,因此需要法线到表面.
在实现与照明相关的部分时,我快速添加了一种方法,使用片段着色器中的偏导数来估计地形的法线,如下所示:
vec3 X = dFdx(ins.position);
vec3 Y = dFdy(ins.position);
vec3 normal = normalize(cross(X,Y));
Run Code Online (Sandbox Code Playgroud)
ins.position
插值世界位置在哪里.
虽然这种方法有效,但它看起来并不是很好,因为它实际上导致了每个面的法线.
现在来看实际问题:
如果秒问题是"是",我有两个问题:
任何帮助是极大的赞赏!
我在渐变实现中的镜头(替换了最后几行的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) 好的,在网上找到了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
我有几个关于 Simplex Noise 的问题。我正在使用 Simplex Noise 在 directx 中生成地形,但我目前正在使用类等进行操作。我可能也会将它用于纹理,那么是否有必要将其更改为着色器实现?如果是这样,这很容易做到吗?
另外,对于纹理,使用 3D 或 2D 噪声更好吗?
当我学习创建循环生成艺术 GIF 的方法时,我遇到了两种不同的制作噪声循环的方法。
Etienne Jacob 在其教程中的示例代码使用 4D OpenSimplex Noise,如下所示。
(float)noise.eval(scl * x, scl * y, R * cos(TWO_PI * t), R * sin(TWO_PI * t));
Daniel Shiffman 在其教程中的示例代码使用 2D Perlin 噪声,如下所示。
噪声(cos(a)+ 1,sin(a)+ 1);
我的理解是,两者都是通过在噪声空间中“绕圈行走”来实现循环的,如上面的 gif 所示。但我不清楚两者之间的区别。选择 4D OpenSimplex 而不是 2D Perlin Noise 来创建循环噪声的目的是什么?
perlin-noise ×7
algorithm ×3
noise ×2
3d ×1
directx ×1
glsl ×1
javascript ×1
normals ×1
opengl ×1
p5.js ×1
processing ×1
shader ×1
textures ×1