Funções aleatórias / de ruído para GLSL

Como os fornecedores de drivers de GPU geralmente não se preocupam em implementarnoiseX no GLSL, estou procurando um"gráficos aleatório canivete suíço" conjunto de funções utilitárias, 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 - Distribuição N-dimensional, 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 a, 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 gosto muito da teoria da geração de números aleatórios, então eu gostaria muito desolução pré-fabricada, mas também aprecio respostas como"aqui está uma rand 1D muito boa e eficiente () e deixe-me explicar como fazer uma boa rand N-dimensional () em cima dela ..." .

questionAnswers(10)

yourAnswerToTheQuestion