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 ..." .