C# 二维柏林噪声。为什么要取位移和梯度向量的点积?

C# 二维柏林噪声。为什么要取位移和梯度向量的点积?,c#,math,perlin-noise,C#,Math,Perlin Noise,考虑到这一点,我不明白为什么我必须把梯度向量的点积和点的位移都考虑进去。有人能解释我为什么要这么做吗?我真的理解这个教程,他们只是用一个简单的模糊来计算网格点的值(称为平滑噪波)。线性插值在这两种情况下我都很清楚。有人能解释一下为什么他们在第一个教程中使用位移的点积和所谓的“梯度向量”吗?这有什么影响?好的,我现在自己想出来了。第一个教程噪波是所谓的渐变噪波,而第二个教程噪波是值噪波。ken的经典perlin噪波是梯度噪波(质量和性能更好),而值噪波更容易理解。但在这两种情况下,倍频程加在一起n

考虑到这一点,我不明白为什么我必须把梯度向量的点积和点的位移都考虑进去。有人能解释我为什么要这么做吗?我真的理解这个教程,他们只是用一个简单的模糊来计算网格点的值(称为平滑噪波)。线性插值在这两种情况下我都很清楚。有人能解释一下为什么他们在第一个教程中使用位移的点积和所谓的“梯度向量”吗?这有什么影响?

好的,我现在自己想出来了。第一个教程噪波是所谓的渐变噪波,而第二个教程噪波是值噪波。ken的经典perlin噪波是梯度噪波(质量和性能更好),而值噪波更容易理解。但在这两种情况下,倍频程加在一起n次(梯度噪声不能代替这个过程)。 见:

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


值噪波为每个网格点实时生成随机值,网格点之间的距离为1。这些值是用一个种子生成的,它允许我一次又一次地获得相同的值。当我选取我想要得到的点周围的正方形时,我会生成与传递的坐标相关的随机值(这种生成器的算法可以在第二次tut中看到),然后用周围的网格点模糊它,以获得平滑的噪声

第一个环节似乎是关于对一个字段进行次采样的不同方式——这稍微忽略了柏林噪声(是多个噪声尺度相加的结果)的意义。所以不需要点积,但是如果你从几何角度观察子采样,你可以使用它。当你把许多不同八度的噪声加在一起时,这不是分形噪声吗?它不是真正的分形,因为它在不同的尺度下没有自相似性。它只是噪声的多个频率的总和。所以如果我用一个forlope来产生噪声,我可以跳过这一步,在那里我得到点积?在这里,他们说我必须两者兼得。分形和柏林噪声与上面的过程O.oIt取决于你如何获得结果(除非你在课程中;-)我见过的最清晰的描述来自于旧的弹性页面: