单纯噪声 - 求和

时间:2013-08-20 16:29:48

标签: noise perlin-noise procedural-generation simplex simplex-noise

我一直在Programmers.StackExchange上阅读this article as requested by Nathan Reed。经过一番阅读后,我偶然发现了一段我真的不知道的段落。任何人都可以用更简单的语言向我解释这一段吗? (英语不是我的母语)如果你想阅读原文,你可以在“Moving from interpolation to summation”下找到它。

  

单纯形噪声使用来自的贡献的直接求和   每个角落,贡献是一个乘法   梯度斜坡的外推和径向对称   衰减功能。在信号处理术语中,这是一个信号   重建内核。径向衰减是经过精心挑选的   每个角落的影响在越过之前达到零   下一个单纯形的边界。这意味着单点内部的点   只会受到角落贡献的影响   特别是单纯的。

1 个答案:

答案 0 :(得分: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 grad(x_1,x)+ w_2 grad(x_2,x)+ w_3 grad(x_3,x)

左上角的

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

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