我看到过很多像perlin
和simplex noise
这样的噪声实现来实现procedural terrain generation
,它们似乎都使用256个排列值。为什么会这样?使用超过256会有什么影响呢?
您可以使用任意数量的排列值。选择2的幂的原因是,计算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];
两种方法的结果相同,但第二种方法更快。
当然,2的任意次幂都可以用于此。我认为选择256的原因是它是各种伪随机数和低内存消耗之间的一个很好的平衡。