Last active
February 9, 2019 01:16
-
-
Save lhog/cfc256a0486d35e7dd90bc4970e1ebc0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//https://www.shadertoy.com/view/4djSRW | |
// Hash without Sine | |
// Creative Commons Attribution-ShareAlike 4.0 International Public License | |
// Created by David Hoskins. | |
// *** Change these to suit your range of random numbers.. | |
#if 1 | |
// *** Use this for integer stepped ranges, ie Value-Noise/Perlin noise functions. | |
#define HASHSCALE1 .1031 | |
#define HASHSCALE3 vec3(.1031, .1030, .0973) | |
#define HASHSCALE4 vec4(.1031, .1030, .0973, .1099) | |
#else | |
// For smaller input rangers like audio tick or 0-1 UVs use these... | |
#define HASHSCALE1 443.8975 | |
#define HASHSCALE3 vec3(443.897, 441.423, 437.195) | |
#define HASHSCALE4 vec3(443.897, 441.423, 437.195, 444.129) | |
#endif | |
//---------------------------------------------------------------------------------------- | |
// 1 out, 1 in... | |
float hash11(float p) { | |
vec3 p3 = fract(vec3(p) * HASHSCALE1); | |
p3 += dot(p3, p3.yzx + 19.19); | |
return fract((p3.x + p3.y) * p3.z); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 1 out, 2 in... | |
float hash12(vec2 p) { | |
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); | |
p3 += dot(p3, p3.yzx + 19.19); | |
return fract((p3.x + p3.y) * p3.z); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 1 out, 3 in... | |
float hash13(vec3 p3) { | |
p3 = fract(p3 * HASHSCALE1); | |
p3 += dot(p3, p3.yzx + 19.19); | |
return fract((p3.x + p3.y) * p3.z); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 2 out, 1 in... | |
vec2 hash21(float p) { | |
vec3 p3 = fract(vec3(p) * HASHSCALE3); | |
p3 += dot(p3, p3.yzx + 19.19); | |
return fract((p3.xx+p3.yz)*p3.zy); | |
} | |
//---------------------------------------------------------------------------------------- | |
/// 2 out, 2 in... | |
vec2 hash22(vec2 p) { | |
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE3); | |
p3 += dot(p3, p3.yzx+19.19); | |
return fract((p3.xx+p3.yz)*p3.zy); | |
} | |
//---------------------------------------------------------------------------------------- | |
/// 2 out, 3 in... | |
vec2 hash23(vec3 p3) { | |
p3 = fract(p3 * HASHSCALE3); | |
p3 += dot(p3, p3.yzx+19.19); | |
return fract((p3.xx+p3.yz)*p3.zy); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 3 out, 1 in... | |
vec3 hash31(float p) { | |
vec3 p3 = fract(vec3(p) * HASHSCALE3); | |
p3 += dot(p3, p3.yzx+19.19); | |
return fract((p3.xxy+p3.yzz)*p3.zyx); | |
} | |
//---------------------------------------------------------------------------------------- | |
/// 3 out, 2 in... | |
vec3 hash32(vec2 p) { | |
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE3); | |
p3 += dot(p3, p3.yxz+19.19); | |
return fract((p3.xxy+p3.yzz)*p3.zyx); | |
} | |
//---------------------------------------------------------------------------------------- | |
/// 3 out, 3 in... | |
vec3 hash33(vec3 p3) { | |
p3 = fract(p3 * HASHSCALE3); | |
p3 += dot(p3, p3.yxz+19.19); | |
return fract((p3.xxy + p3.yxx)*p3.zyx); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 4 out, 1 in... | |
vec4 hash41(float p) { | |
vec4 p4 = fract(vec4(p) * HASHSCALE4); | |
p4 += dot(p4, p4.wzxy+19.19); | |
return fract((p4.xxyz+p4.yzzw)*p4.zywx); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 4 out, 2 in... | |
vec4 hash42(vec2 p) { | |
vec4 p4 = fract(vec4(p.xyxy) * HASHSCALE4); | |
p4 += dot(p4, p4.wzxy+19.19); | |
return fract((p4.xxyz+p4.yzzw)*p4.zywx); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 4 out, 3 in... | |
vec4 hash43(vec3 p) { | |
vec4 p4 = fract(vec4(p.xyzx) * HASHSCALE4); | |
p4 += dot(p4, p4.wzxy+19.19); | |
return fract((p4.xxyz+p4.yzzw)*p4.zywx); | |
} | |
//---------------------------------------------------------------------------------------- | |
// 4 out, 4 in... | |
vec4 hash44(vec4 p4) { | |
p4 = fract(p4 * HASHSCALE4); | |
p4 += dot(p4, p4.wzxy+19.19); | |
return fract((p4.xxyz+p4.yzzw)*p4.zywx); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment