【问题标题】:Perlin noise decompositionPerlin 噪声分解
【发布时间】:2021-06-30 12:15:38
【问题描述】:

我试图从视觉的角度理解 2D Perlin 噪声,我想在这里问几个问题,以确保我走在正确的轨道上。我使用 WebGL 并编写自定义着色器进行渲染。

我首先计算单元格中心的位置向量和一个垂直向量之间的一个网格单元格的点积,然后得到下面的梯度(红色为正值,蓝色为负值)。如果我旋转矢量,它会旋转渐变:

Q1:关于“梯度噪声”的维基百科说“......随机梯度的格子,然后对其点积进行插值......”。这不正确,这里创建实际梯度的是点操作本身,“梯度”向量只是法线向量,对吧?

以下是 4 个随机向量和从每个单元格的每个角计算的 4 个位置向量之间的 4 个点积的 3 种不同插值,第一个是简单平均,第二个是双线性插值,第三个是双线性与平滑步长。

Q2:那么,Perlin 噪声具有有机的、流动的外观和感觉的原因是插值方法,而不是梯度,特别是双线性插值不是线性的而是二次的这一事实?

谢谢!

【问题讨论】:

    标签: interpolation noise perlin-noise


    【解决方案1】:

    A1:技术上正确。通常我使用术语“梯度向量”,我认为它可以更好地传达这个想法,尽管有时我确实将向量本身称为“梯度”。也许它比我意识到的更令人困惑,你说得很好。有时我将实际的渐变称为“斜坡”,但“渐变”也很好地描述了它。

    A2:这是渐变组合的方式,是的。每个网格顶点都需要以某种方式对其周围的噪声做出贡献,其贡献在范围之外平滑地下降到零。淡化曲线 lerp 完成了这一点。

    必须注意:如果您要在任何事情中实际使用噪声,我建议使用单纯形类型噪声(具有良好的梯度向量表,如果将其用于 3D+,则为“开放”噪声)或domain-rotated 3D+ Perlin。当教程推荐 Perlin 噪声时,不要加任何警告。 Perlin 是一种较旧的噪声算法,没有任何专门的纠正措施,会产生很多方形度,这对于大多数应用程序来说是完全不必要的妥协。我建议将FastNoiseLitethese stepsthese domain-rotated Perlin evaluators 一起使用。

    如果您想自己实现 2D 单纯形,我写了 this answer 不久前我描述了一个过程。

    【讨论】:

    • 我认为没有很多文章专门介绍它。它确实出现在这里:catlikecoding.com/unity/tutorials/simplex-noise 主要是在我认为在 Unity 中旋转平面并查看噪声在其上采样的情况下,但实际实现旋转是我必须自己编写的。
    • 如果有助于澄清,域旋转会旋转垂直、时间或未使用的输入坐标 Z,使其指向与矢量 相同的方向。也就是说,Z 朝这个方向移动:hi-static.z-dn.net/files/d85/… 和 X/Y 与之垂直。 Z 的一个特定值可能会导致 X/Y 跨越包含此三角形qph.fs.quoracdn.net/main-qimg-c9ff9bb3c1a347c9ffc5bd0790f05e19 的平面,并且 Z 的其他值会从该平面上下移动。也可能是 Y 被设置为时间/垂直/未使用,X/Z 是生成的“好”平面。
    猜你喜欢
    • 2012-07-14
    • 2014-02-15
    • 1970-01-01
    • 2020-06-06
    • 2011-09-20
    • 2013-07-23
    • 2020-06-22
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多