PRNG - Permuted Congruential Generator (pcg)
https://www.pcg-random.org/index.html
Based on https://www.jcgt.org/published/0009/03/02/ , PCG kind of Random Functions and by extension PCG3d, have a good balance between quality of the randomness and speed of execution, which makes a good choice Random Functions for shaders.
/0b5vr/pcg3d
code:pcg3d.glsl
// http://www.jcgt.org/published/0009/03/02/
uvec3 pcg3d(uvec3 v) {
v = v * 1664525u + 1013904223u;
v.x += v.y * v.z;
v.y += v.z * v.x;
v.z += v.x * v.y;
v ^= v >> 16u;
v.x += v.y * v.z;
v.y += v.z * v.x;
v.z += v.x * v.y;
return v;
}
vec3 pcg3df(vec3 v) {
uvec3 r = pcg3d(floatBitsToUint(v));
return vec3(r) / float(UINT_MAX); // UINT_MAX = 0xFFFFFFFFu or -1u
}
code:other.glsl
vec3 hash3d(vec3 p){
uvec3 q= floatBitsToUint(p);
q = ((q>>16u)^q.yzx)*1111111111u;
q = ((q>>16u)^q.yzx)*1111111111u;
q = ((q>>16u)^q.yzx)*1111111111u;
return vec3(q)/float(-1U);
}