Поскольку производители драйверов графических процессоров обычно не пытаются реализовать их 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.
б) Непрерывный шум, такой как шум Perlin - опять же, N-мерное, + - равномерное распределение, с ограниченным набором значений и, ну, хорошо выглядящий (некоторые параметры для настройки внешнего вида, такие как уровни Perlin, также могут быть полезны). Я ожидал бы подписи как:
float noise (T coord, TT seed);
vec2 noise2 (T coord, TT seed);
// ...
Я не очень разбираюсь в теории генерации случайных чисел, так что я бы с большим удовольствием принялся за готовое решение , но я также был бы признателен за ответы типа «вот очень хороший, эффективный 1D rand (), и позвольте мне объяснить Вы, как сделать хороший N-мерный rand () поверх него ... " .
vec2 co
? это диапазон? семена?