【发布时间】:2012-05-24 01:03:30
【问题描述】:
我希望将 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
从0 到11 的返回值构成了一种模式,因为每个组合都表示一次。然而,最后四个是重复的。为什么选择它们来拟合最后四个返回值?具有两个 (x, y) 和一个 (x) 维度的类似案例是什么?
【问题讨论】:
-
我仍然不明白这个渐变函数的用途,即使是 2D。我只是在 4 个近向量上使用点积的东西,我看不出这个渐变是干什么用的。
-
@jokoon 七年前我在玩地形生成,这个功能就在手边。不确定您所说的“点产品”是什么意思。
-
我迟到了,但它们是一回事,你计算伪随机梯度向量和你的点积。 The paper Perlin wrote explains it。实际链接并没有失效,但我直接链接到存档以防万一。优化的梯度函数掩盖了这一事实,因为您将乘以 -1/+1/0,这是没有意义的,您只需在需要的地方否定原始向量的部分,并省略将乘以 0 的部分。以这种方式编写它也消除了存储这 12 个向量的需要。
-
谢谢亚米瑞!这似乎是它的真正心脏。请随时发布此评论作为答案。
标签: perlin-noise