为什么噪声算法使用 256 个排列值?

Why do noise algorithms use 256 permutation values?

我见过很多像perlinsimplex 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的原因是它很好地平衡了伪随机数的多样性和低内存消耗。