我正在尝试使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)
维度的类似情况又是什么呢?
最佳答案
...迟来的回答总比没有好吗? ;-)
“改进的噪声”实现中的grad
函数计算向量x,y,z与伪随机梯度向量之间的点积。
在该实现方式中,梯度向量是从12个选项中选择的。
他们放弃选择的统一性,并添加数字12到15,因为执行hash & 15
比hash % 12
更快
对于二维Perlin噪声,我仅使用了4个梯度矢量,而没有这样的可见问题:
return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y);
关于perlin-noise - 佩林噪声梯度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729891/