Como os fornecedores de drivers de GPU geralmente não se preocupam em implementar noiseX
no GLSL, estou procurando um conjunto de funções de utilitário "faca de exército suíço de randomização gráfica" , de preferência otimizado para uso em shaders de GPU. Eu prefiro o GLSL, mas o código que qualquer idioma fará por mim, estou bem em traduzi-lo sozinho para o GLSL.
Especificamente, eu esperaria:
a) Funções pseudo-aleatórias - N-dimensional, distribuição uniforme acima de [-1,1] ou acima de [0,1], calculada a partir da semente dimensional M (idealmente qualquer valor, mas não tenho problema em restringir a semente digamos 0..1 para distribuição 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) Ruído contínuo como Perlin Noise - novamente, distribuição N-dimensional, + - uniforme, com conjunto restrito de valores e, bem, com boa aparência (algumas opções para configurar a aparência como níveis de Perlin também podem ser úteis). Eu esperaria assinaturas como:
float noise (T coord, TT seed);
vec2 noise2 (T coord, TT seed);
// ...
Eu não sou muito fã da teoria da geração de números aleatórios, então eu gostaria muito de encontrar uma solução pré-fabricada , mas também gostaria de respostas como "aqui está uma 1D rand () muito boa e eficiente () e deixe-me explicar você como fazer um bom rand N-dimensional () em cima dele ... " .
vec2 co
? é o alcance? semente?