为什么噪声算法使用 256 个排列值?
Why do noise algorithms use 256 permutation values?
我见过很多像perlin
和simplex noise
这样的噪声实现来实现procedural terrain generation
,它们似乎都使用了256个排列值。为什么是这样?使用超过 256 会有什么影响?
您可以使用任意数量的排列值。首选二的幂的原因是因为计算 N^2 的模数更便宜。
原因是:
value % (N^2)
相当于
value & (N^2 - 1)
而且计算按位 & 而不是 % 更便宜。
例如在你的代码中你可以这样写:
int v = perm[(x + perm[y % 256]) % 256];
或
int v = perm[(x + perm[y & 255]) & 255];
两者的结果相同,但第二种方法更快。
当然可以使用任何二的幂。我认为选择256的原因是它很好地平衡了伪随机数的多样性和低内存消耗。
我见过很多像perlin
和simplex noise
这样的噪声实现来实现procedural terrain generation
,它们似乎都使用了256个排列值。为什么是这样?使用超过 256 会有什么影响?
您可以使用任意数量的排列值。首选二的幂的原因是因为计算 N^2 的模数更便宜。
原因是:
value % (N^2)
相当于
value & (N^2 - 1)
而且计算按位 & 而不是 % 更便宜。
例如在你的代码中你可以这样写:
int v = perm[(x + perm[y % 256]) % 256];
或
int v = perm[(x + perm[y & 255]) & 255];
两者的结果相同,但第二种方法更快。
当然可以使用任何二的幂。我认为选择256的原因是它很好地平衡了伪随机数的多样性和低内存消耗。