Funciones aleatorias / de ruido para GLSL

Como los proveedores de controladores de GPU no suelen molestarse en implementarnoiseX en GLSL, estoy buscando un"navaja suiza de aleatorización de gráficos" conjunto de funciones de utilidad, preferiblemente optimizado para usar dentro de sombreadores GPU. Prefiero GLSL, pero codifique cualquier lenguaje que me sirva, estoy de acuerdo en traducirlo por mi cuenta a GLSL.

Específicamente, esperaría:

una)Funciones seudoaleatorias - N-dimensional, distribución uniforme sobre [-1,1] o sobre [0,1], calculada a partir de semilla M-dimensional (idealmente es cualquier valor, pero estoy de acuerdo con que la semilla esté restringida a, digamos, 0. .1 para la distribución uniforme de resultados). Algo como:

float random  (T seed);
vec2  random2 (T seed);
vec3  random3 (T seed);
vec4  random4 (T seed);
// T being either float, vec2, vec3, vec4 - ideally.

si)Ruido continuo como Perlin Noise - nuevamente, N-dimensional, + - distribución uniforme, con un conjunto restringido de valores y, bueno, luciendo bien (algunas opciones para configurar la apariencia como los niveles de Perlin también podrían ser útiles). Esperaría firmas como:

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

No estoy muy interesado en la teoría de la generación de números aleatorios, por lo que me encantaríasolución prefabricada, pero también agradecería respuestas como"aquí hay un rand 1D muy bueno y eficiente (), y déjame explicarte cómo hacer un buen rand N-dimensional () encima de él ..." .

Respuestas a la pregunta(10)

Su respuesta a la pregunta