[READ-ONLY] Mirror of https://github.com/flo-bit/flo-bit.github.io. my personal website, w/ astro, svelte, tailwind, typescript, threlte flo-bit.dev/
portfolio portfolio-website svelte sveltekit tailwind threejs threlte typescript
0

Configure Feed

Select the types of activity you want to include in your feed.

3.8 kB 121 lines
1export const noise = /* GLSL */ ` 2// Description : Array and textureless GLSL 2D/3D/4D simplex 3// noise functions. 4// Author : Ian McEwan, Ashima Arts. 5// Maintainer : stegu 6// Lastmod : 20110822 (ijm) 7// License : Copyright (C) 2011 Ashima Arts. All rights reserved. 8// Distributed under the MIT License. See LICENSE file. 9// https://github.com/ashima/webgl-noise 10// https://github.com/stegu/webgl-noise 11// 12 13vec4 mod289(vec4 x) { 14 return x - floor(x * (1.0 / 289.0)) * 289.0; 15} 16 17float mod289(float x) { 18 return x - floor(x * (1.0 / 289.0)) * 289.0; 19} 20 21vec4 permute(vec4 x) { 22 return mod289(((x * 34.0) + 10.0) * x); 23} 24 25float permute(float x) { 26 return mod289(((x * 34.0) + 10.0) * x); 27} 28 29vec4 taylorInvSqrt(vec4 r) { 30 return 1.79284291400159 - 0.85373472095314 * r; 31} 32 33float taylorInvSqrt(float r) { 34 return 1.79284291400159 - 0.85373472095314 * r; 35} 36 37vec4 grad4(float j, vec4 ip) { 38 const vec4 ones = vec4(1.0, 1.0, 1.0, -1.0); 39 vec4 p, s; 40 41 p.xyz = floor(fract(vec3(j) * ip.xyz) * 7.0) * ip.z - 1.0; 42 p.w = 1.5 - dot(abs(p.xyz), ones.xyz); 43 s = vec4(lessThan(p, vec4(0.0))); 44 p.xyz = p.xyz + (s.xyz * 2.0 - 1.0) * s.www; 45 46 return p; 47} 48 49 // (sqrt(5) - 1)/4 = F4, used once below 50 #define F4 0.309016994374947451 51 52float snoise(vec4 v) { 53 const vec4 C = vec4(0.138196601125011, // (5 - sqrt(5))/20 G4 54 0.276393202250021, // 2 * G4 55 0.414589803375032, // 3 * G4 56 -0.447213595499958); // -1 + 4 * G4 57 58 // First corner 59 vec4 i = floor(v + dot(v, vec4(F4))); 60 vec4 x0 = v - i + dot(i, C.xxxx); 61 62 // Other corners 63 64 // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) 65 vec4 i0; 66 vec3 isX = step(x0.yzw, x0.xxx); 67 vec3 isYZ = step(x0.zww, x0.yyz); 68 // i0.x = dot( isX, vec3( 1.0 ) ); 69 i0.x = isX.x + isX.y + isX.z; 70 i0.yzw = 1.0 - isX; 71 // i0.y += dot( isYZ.xy, vec2( 1.0 ) ); 72 i0.y += isYZ.x + isYZ.y; 73 i0.zw += 1.0 - isYZ.xy; 74 i0.z += isYZ.z; 75 i0.w += 1.0 - isYZ.z; 76 77 // i0 now contains the unique values 0,1,2,3 in each channel 78 vec4 i3 = clamp(i0, 0.0, 1.0); 79 vec4 i2 = clamp(i0 - 1.0, 0.0, 1.0); 80 vec4 i1 = clamp(i0 - 2.0, 0.0, 1.0); 81 82 // x0 = x0 - 0.0 + 0.0 * C.xxxx 83 // x1 = x0 - i1 + 1.0 * C.xxxx 84 // x2 = x0 - i2 + 2.0 * C.xxxx 85 // x3 = x0 - i3 + 3.0 * C.xxxx 86 // x4 = x0 - 1.0 + 4.0 * C.xxxx 87 vec4 x1 = x0 - i1 + C.xxxx; 88 vec4 x2 = x0 - i2 + C.yyyy; 89 vec4 x3 = x0 - i3 + C.zzzz; 90 vec4 x4 = x0 + C.wwww; 91 92 // Permutations 93 i = mod289(i); 94 float j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x); 95 vec4 j1 = permute(permute(permute(permute(i.w + vec4(i1.w, i2.w, i3.w, 1.0)) + i.z + vec4(i1.z, i2.z, i3.z, 1.0)) + i.y + vec4(i1.y, i2.y, i3.y, 1.0)) + i.x + vec4(i1.x, i2.x, i3.x, 1.0)); 96 97 // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope 98 // 7*7*6 = 294, which is close to the ring size 17*17 = 289. 99 vec4 ip = vec4(1.0 / 294.0, 1.0 / 49.0, 1.0 / 7.0, 0.0); 100 101 vec4 p0 = grad4(j0, ip); 102 vec4 p1 = grad4(j1.x, ip); 103 vec4 p2 = grad4(j1.y, ip); 104 vec4 p3 = grad4(j1.z, ip); 105 vec4 p4 = grad4(j1.w, ip); 106 107 // Normalise gradients 108 vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); 109 p0 *= norm.x; 110 p1 *= norm.y; 111 p2 *= norm.z; 112 p3 *= norm.w; 113 p4 *= taylorInvSqrt(dot(p4, p4)); 114 115 // Mix contributions from the five corners 116 vec3 m0 = max(0.6 - vec3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), 0.0); 117 vec2 m1 = max(0.6 - vec2(dot(x3, x3), dot(x4, x4)), 0.0); 118 m0 = m0 * m0; 119 m1 = m1 * m1; 120 return 49.0 * (dot(m0 * m0, vec3(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + dot(m1 * m1, vec2(dot(p3, x3), dot(p4, x4)))); 121}`;