Почему алгоритмы шума используют 256 значений перестановки?
Я видел много реализаций шума для таких вещей, как perlin
а также simplex noise
достигать procedural terrain generation
и все они, кажется, используют 256 значений перестановки. Почему это? и каков будет эффект использования более 256?
1 ответ
Вы можете использовать любое количество значений перестановок. Причина того, что степени двойки являются предпочтительными, заключается в том, что вычислять модуль 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 заключается в том, что это хороший баланс между множеством псевдослучайных чисел и низким потреблением памяти.