Поскольку разработчики драйверов GPU обычно не хотят реализовывать noiseX
в GLSL, я ищу набор функций утилиты "рандомизированный швейцарский армейский нож", предпочтительно оптимизированный для использования в графических шейдерах. Я предпочитаю GLSL, но код, который мне нужен, будет для меня, я согласен с его переводом на GLSL.
В частности, я бы ожидал:
a) Псевдослучайные функции - N-мерное, равномерное распределение по сравнению с [-1,1] или над [0,1], вычисленное из M-мерного семени (в идеале имеющее любое значение, но я в порядке с тем, что семя ограничено, скажем, 0..1 для равномерного распределения результатов). Что-то вроде:
float random (T seed);
vec2 random2 (T seed);
vec3 random3 (T seed);
vec4 random4 (T seed);
// T being either float, vec2, vec3, vec4 - ideally.
b) Постоянный шум, например, Perlin Noise - снова, N-мерное, + - равномерное распределение, с ограниченным набором значений и, ну, хорошо выглядят (некоторые параметры для настройки внешнего вида, такого как уровни Perlin также может быть полезным). Я бы ожидал таких подписей, как:
float noise (T coord, TT seed);
vec2 noise2 (T coord, TT seed);
// ...
Я не очень люблю теорию генерации случайных чисел, поэтому я бы с нетерпением ждал готового решения , но я также хотел бы получить такие ответы, как "здесь очень хороший, эффективный 1D rand(), и позвольте мне объяснить вам, как сделать хороший N-мерный rand() поверх него...".