1

我一直在按照 Nathan Reed在 Programmers.StackExchange 上的要求阅读这篇文章。 经过一番阅读,我偶然发现了一个我真的不明白的段落。谁能用更简单的语言向我解释这一段?(英语不是我的母语)如果你想阅读原文,你可以在“ ”下找到它。Moving from interpolation to summation

单纯形噪声使用来自每个角的贡献的直接总和,其中贡献是梯度斜坡的外推和径向对称衰减函数的乘积。在信号处理方面,这是一个信号重建内核。仔细选择径向衰减,以便每个角的影响在穿过边界到下一个单纯形之前达到零。这意味着单纯形内的点只会受到该特定单纯形角的贡献的影响。

4

1 回答 1

3

我需要退后一步并定义一些符号,所以很抱歉没有直接进入那段。

对于经典 Perlin 噪声和单纯形噪声,要获取点 x 处的值,步骤如下:

  • 找到包含 x 的单元格的顶点 x_1、...、x_k,其中单元格对于 Perlin 噪声是正方形或立方体(等),对于单纯形噪声是三角形或四面体(等)。
  • 对于每个顶点x_i,生成一个随机单位向量n_i,计算grad(x_i,x) = (x-x_i) dot n_i,这就是段落中提到的“梯度斜坡”。
  • 将这些与一些权重组合在一起,因此输出为

    w_1 * grad(x_1,x) + ... + w_k * grad(x_k,x)

该段落描述了如何生成权重 w_i。对于 Perlin 噪声,权重线性插值(忽略平滑),因此它们总是加到 1。对于单纯形噪声,我们可以在链接后面的代码中看到 w_i 是如何计算的;它是

w_i = max(0.6 - d_i^2, 0)^4,

其中 d_i = |x-x_i| 是从 x 到 x_i 的距离。这就是“径向对称衰减函数”。它是径向对称的,因为它只取决于距离,而不是 x-x_i 的方向。衰减只是意味着它随着 d_i 的增加而减少。

该段的后半部分说,当我们跨越两个单纯形之间的边界,并用不同的顶点 x_1' 替换其中一个邻居,比如 x_1 时,系数 w_1 应该变为 0,以便值在边界处匹配. 这个ascii图可能会也可能不会澄清:

1--2
| /|
|/ |
3--1’

噪声值为

w_1 毕业(x_1,x) + w_2 毕业(x_2,x) + w_3 毕业(x_3,x)

在左上角的三角形和

w_1'毕业(x_1',x)+ w_2毕业(x_2,x)+ w_3毕业(x_3,x)

在右下三角。为了使这些匹配,w_1 和 w_1' 在边界上应该为零。

于 2013-08-29T00:44:59.607 回答