perlin-noise - 佩林噪声梯度函数

标签 perlin-noise

我正在尝试使3D Perlin噪声算法适应较低的尺寸,但是由于我不完全了解其原因,我在使用梯度函数时遇到了麻烦。

原始的Perlin梯度函数采用四个参数:hash和三维坐标(x, y, z)。该函数的结果根据hash mod 16的值返回,如下所示。

  • 0:x + y
  • 1:-x + y
  • 2:x - y
  • 3:-x - y
  • 4:x + z
  • 5:-x + z
  • 6:x - z
  • 7:-x - z
  • 8:y + z
  • 9:-y + z
  • 10:y - z
  • 11:-y - z
  • 12:y + x
  • 13:-y + z
  • 14:y - x
  • 15:-y - z

  • 011的返回值构成一种模式,因为每个组合都表示一次。但是,最后四个是重复项。为什么选择它们以适应最后四个返回值?那么具有两个(x, y)和一个(x)维度的类似情况又是什么呢?

    最佳答案

    ...迟来的回答总比没有好吗? ;-)
    “改进的噪声”实现中的grad函数计算向量x,y,z与伪随机梯度向量之间的点积。
    在该实现方式中,梯度向量是从12个选项中选择的。
    他们放弃选择的统一性,并添加数字12到15,因为执行hash & 15hash % 12更快
    对于二维Perlin噪声,我仅使用了4个梯度矢量,而没有这样的可见问题:

    return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y);
    

    关于perlin-noise - 佩林噪声梯度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729891/

    相关文章:

    javascript - 为什么我的柏林噪声实现看起来如此 block 状?

    terrain - 地形的 Perlin 噪声生成

    c# - 类似 Minecraft 的游戏中的悬崖地形生成

    random - 为什么 Perlin 噪声算法使用随机数查找表

    opengl - 从 3D 噪声计算每顶点法线

    algorithm - 如何跟踪/颜色分离使用 perlin 噪声生成的形状?

    python - 使用柏林噪声按程序生成海拔明显较高的区域

    javascript - 修复等距柏林噪声中的高度问题

    c++ - 柏林噪声 2D : turning static into clouds

    java - 如何用 Perlin 噪声填充二维数组?