9

我正在寻找使 3D Perlin 噪声算法适应较低维度的方法,但我在使用梯度函数时遇到了问题,因为我不完全理解其中的原因。

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

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

0from的返回值11构成一种模式,因为每个组合都表示一次。然而,最后四个是重复的。为什么选择它们来拟合最后四个返回值?(x, y)二维和一(x)维的类似案例是什么?

4

1 回答 1

13

...迟到的答案总比没有好?;-)

“改进的噪声”实现中的grad函数计算向量 x、y、z 和伪随机梯度向量之间的点积。

在这个实现中,梯度向量是从 12 个选项中选择的。他们放弃了选择的统一性并将数字 12 添加到 15,因为这样做hash & 15hash % 12

对于 2D perlin 噪声,我只使用了 4 个梯度向量,没有任何明显的问题,例如:

return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y);
于 2013-06-27T18:59:01.243 回答