我正在寻求将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)
维度的类似情况会是什么?
答案 0 :(得分:10)
......迟到的答案比没有好? ; - )
“改进噪声”实现中的grad
函数计算向量x,y,z和伪随机梯度向量之间的点积。
在此实现中,梯度向量从12个选项中选择。
它们会降低选择的一致性并添加数字12和14,因为hash & 15
比hash % 12
更快
对于2D perlin噪声,我只使用了4个梯度向量而没有任何明显的问题:
return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y);