【问题标题】:Simplex Noise - Summation单纯形噪声 - 求和
【发布时间】:2013-08-22 19:35:11
【问题描述】:

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

单纯形噪声改为使用来自 每个角落,其中贡献是 梯度斜坡的外推和径向对称 衰减功能。在信号处理方面,这是一个信号 重建内核。径向衰减经过精心选择,因此 来自每个角落的影响在穿过之前达到零 下一个单纯形的边界。这意味着单纯形内的点 只会受到来自那个角落的贡献的影响 特别单纯形。

【问题讨论】:

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


    【解决方案1】:

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

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

    • 找到包含 x 的单元格的顶点 x_1、...、x_k,其中单元格对于 Perlin 噪声是正方形或立方体(等),对于单纯形噪声是三角形或四面体(等)。
    • 对于每个顶点 x_i,生成一个随机单位向量 n_i,并计算 毕业(x_i,x)=(x-x_i)点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' grad(x_1',x) + w_2 grad(x_2,x) + w_3 grad(x_3,x)

    在右下三角。为了使它们匹配,w_1 和 w_1' 的边界应为零。

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      相关资源
      最近更新 更多