【问题标题】:2d Perlin noise. Why do i have to take the dotproduct of displacement and gradientvector?2d 柏林噪声。为什么我必须取位移和梯度向量的点积?
【发布时间】:2014-02-23 15:08:12
【问题描述】:

考虑到this,我不明白为什么我必须考虑梯度向量的点积和我的点的位移。谁能解释我为什么必须这样做?我实际上了解this 教程,他们只是在其中进行了简单的模糊来计算网格点的值(称为平滑噪声)。在这两种情况下,线性插值对我来说都很清楚。那么谁能解释我为什么他们在第一个教程中采用位移的点积和所谓的“梯度向量”?有什么作用?

【问题讨论】:

  • 第一个链接似乎是关于对字段进行二次采样的不同方式——这略微忽略了 Perlin 噪声的要点(这是多个噪声尺度的总和)。因此,点积不是必需的,但如果您从子采样的几何视图中获取,则可以使用它。
  • 当你将许多不同八度的噪声加在一起时,那不就是分形噪声吗?
  • 它不是真正的分形,因为它在不同的尺度上没有自相似性。它只是多个噪声频率的总和。
  • 所以如果我用 for lope 产生噪音来计算我的八度音阶,我可以跳过这一步,我把点积放在哪里? code.google.com/p/fractalterraingeneration/wiki/Perlin_Noise 在这里他们说我必须两者都做。分形和柏林噪声与上面的过程 O.o
  • 如何获得结果取决于您自己(除非您正在学习课程 ;-) 我见过的最清晰的描述来自旧的弹性页面:freespace.virgin.net/hugo.elias/models/m_perlin.htm

标签: c# math perlin-noise


【解决方案1】:

好的,我现在自己想通了。第一个教程噪声是所谓的梯度噪声,而第二个教程是值噪声。 ken 的经典 perlin 噪声是梯度噪声(更好的质量和性能),而值噪声更容易理解。但是在这两种情况下,八度音阶都被加在一起 ​​n 次(梯度噪声不会取代这个过程)。 见:

http://en.m.wikipedia.org/wiki/Value_noise

http://en.m.wikipedia.org/wiki/Gradient_noise

梯度噪声用长度为 1 的随机向量为网格播种。这些向量彼此之间的距离为 1。从 4 个最近的网格点到我想要的点的位移向量的点积和这 4 个点的种子梯度向量将导致这 4 个点中的每一个的值都在 -1 和 1 之间。然后可以对这些值进行插值以获得实际的点值。

值噪声为每个网格点实时生成随机值,它们之间的距离为 1。这些值是用种子生成的,这让我可以一遍又一遍地获得相同的值。当我选择围绕我想要获得的点的正方形时,我会根据我传递的坐标生成随机值(这种生成器的算法可以在第二个 tut 中看到),然后用周围的网格点将其模糊以获得平稳的噪音。

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2016-05-30
    • 2021-04-29
    • 2019-01-13
    • 1970-01-01
    • 2013-09-16
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多