Como los proveedores de controladores de GPU generalmente no se molestan en implementar noiseX
en GLSL, estoy buscando un conjunto de funciones de utilidad de "aleatorización de gráficos de navaja suiza" , preferiblemente optimizado para usar dentro de sombreadores de GPU. Prefiero GLSL, pero codifique cualquier lenguaje que me sirva, estoy de acuerdo en traducirlo por mi cuenta a GLSL.
Específicamente, esperaría:
a) Funciones pseudoaleatorias - 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 restringir la semilla a, digamos, 0..1 para una 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.
b) Ruido continuo como el ruido de Perlin - nuevamente, distribución N-dimensional, + - 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 preferiría una solució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 ... " .
vec2 co
? es el rango? ¿semilla?