Dato che i venditori di driver GPU di solito non si preoccupano di implementare noiseX
in GLSL, sto cercando un set di funzioni di utilità di "random random graphics coltellino svizzero" , preferibilmente ottimizzato per l'uso all'interno di shader GPU. Preferisco GLSL, ma codificare qualsiasi lingua farà per me, sono d'accordo nel tradurlo da solo in GLSL.
In particolare, mi aspetterei:
a) Funzioni pseudo-casuali : distribuzione N-dimensionale uniforme su [-1,1] o sopra [0,1], calcolata dal seme M-dimensionale (idealmente essendo qualsiasi valore, ma sono d'accordo con il contenimento del seme a, diciamo, 0..1 per una distribuzione uniforme dei risultati). Qualcosa di simile a:
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) il rumore continuo come Perlin Noise - ancora una volta, N-dimensionale, + - distribuzione uniforme, con set vincolata di valori e, beh, guardando bene (alcune opzioni per configurare l'aspetto come i livelli Perlin potrebbe essere utile troppo). Mi aspetterei firme come:
float noise (T coord, TT seed);
vec2 noise2 (T coord, TT seed);
// ...
Non sono molto interessato alla teoria della generazione di numeri casuali, quindi preferirei ardentemente una soluzione prefabbricata , ma apprezzerei anche risposte come "ecco un ottimo 1D rand (), e lasciami spiegare come creare un buon rand N-dimensionale () sopra di esso ... " .
vec2 co
? è la gamma? seme?