Функции случайного / шума для GLSL

Поскольку поставщики драйверов 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.

б) Непрерывный шум как шум Перлина - опять же, N-мерный, + - равномерное распределение, с ограниченным набором значений и, ну, хорошо выглядящим (некоторые опции для настройки внешнего вида, такие как уровни Perlin, тоже могут быть полезны). Я бы ожидал подписи вроде:

float noise  (T coord, TT seed);
vec2  noise2 (T coord, TT seed);
// ...

Я не очень разбираюсь в теории генерации случайных чисел, поэтому я бы с нетерпением ждал готового решения , но я также был бы признателен за ответы вроде «вот очень хороший, эффективный 1D rand (), и позвольте мне объяснить вам, как сделать хороший N-мерный rand () поверх него ...» .

164
задан Kos 16 November 2010 в 23:50
поделиться