PRNG - Permuted Congruential Generator (pcg)
code:pcg3d.glsl
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);
}