float2 GradientNoiseDir(float2 x) { const float2 k = float2(0.3183099, 0.3678794); x = x * k + k.yx; return -1.0 + 2.0 * frac(16.0 * k * frac(x.x * x.y * (x.x + x.y))); } float GradientNoise(float2 uv) { float2 p = uv; float2 i = floor(p); float2 f = frac(p); float2 u = f * f * (3.0 - 2.0 * f); return lerp(lerp(dot(GradientNoiseDir(i + float2(0.0, 0.0)), f - float2(0.0, 0.0)), dot(GradientNoiseDir(i + float2(1.0, 0.0)), f - float2(1.0, 0.0)), u.x), lerp(dot(GradientNoiseDir(i + float2(0.0, 1.0)), f - float2(0.0, 1.0)), dot(GradientNoiseDir(i + float2(1.0, 1.0)), f - float2(1.0, 1.0)), u.x), u.y); } inline float Unity_SimpleNoise_RandomValue_float (float2 uv) { return frac(sin(dot(uv, float2(12.9898, 78.233)))*43758.5453); } inline float Unity_SimpleNnoise_Interpolate_float (float a, float b, float t) { return (1.0-t)*a + (t*b); } inline float Unity_SimpleNoise_ValueNoise_float (float2 uv) { float2 i = floor(uv); float2 f = frac(uv); f = f * f * (3.0 - 2.0 * f); uv = abs(frac(uv) - 0.5); float2 c0 = i + float2(0.0, 0.0); float2 c1 = i + float2(1.0, 0.0); float2 c2 = i + float2(0.0, 1.0); float2 c3 = i + float2(1.0, 1.0); float r0 = Unity_SimpleNoise_RandomValue_float(c0); float r1 = Unity_SimpleNoise_RandomValue_float(c1); float r2 = Unity_SimpleNoise_RandomValue_float(c2); float r3 = Unity_SimpleNoise_RandomValue_float(c3); float bottomOfGrid = Unity_SimpleNnoise_Interpolate_float(r0, r1, f.x); float topOfGrid = Unity_SimpleNnoise_Interpolate_float(r2, r3, f.x); float t = Unity_SimpleNnoise_Interpolate_float(bottomOfGrid, topOfGrid, f.y); return t; } float SimplexNoise(float2 uv) { float t = 0.0; uv *= 2; float freq = pow(2.0, float(0)); float amp = pow(0.5, float(3-0)); t += Unity_SimpleNoise_ValueNoise_float(float2(uv.x/freq, uv.y/freq))*amp; freq = pow(2.0, float(1)); amp = pow(0.5, float(3-1)); t += Unity_SimpleNoise_ValueNoise_float(float2(uv.x/freq, uv.y/freq))*amp; freq = pow(2.0, float(2)); amp = pow(0.5, float(3-2)); t += Unity_SimpleNoise_ValueNoise_float(float2(uv.x/freq, uv.y/freq))*amp; return t; }