diff --git a/assets/p5/shader.frag b/assets/p5/shader.frag index 78f3b92..5eda680 100644 --- a/assets/p5/shader.frag +++ b/assets/p5/shader.frag @@ -1,172 +1,174 @@ -#define NUM_OCTAVES 5 +//#define NUM_OCTAVES 5 -uniform vec2 iResolution; -uniform float iTime; +//uniform vec2 iResolution; +//uniform float iTime; -vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);} -vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;} +//vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);} +//vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;} -float random (in vec2 _st) { - return fract(sin(dot(_st.xy, - vec2(12.9898,78.233)))* - 43758.5453123); -} +// float random (in vec2 _st) { + // return fract(sin(dot(_st.xy, + // vec2(12.9898,78.233)))* + // 43758.5453123); +// } // Based on Morgan McGuire @morgan3d // https://www.shadertoy.com/view/4dS3Wd -float noise (in vec2 _st) { - vec2 i = floor(_st); - vec2 f = fract(_st); +// float noise (in vec2 _st) { + // vec2 i = floor(_st); + // vec2 f = fract(_st); // Four corners in 2D of a tile - float a = random(i); - float b = random(i + vec2(1.0, 0.0)); - float c = random(i + vec2(0.0, 1.0)); - float d = random(i + vec2(1.0, 1.0)); + // float a = random(i); + // float b = random(i + vec2(1.0, 0.0)); + // float c = random(i + vec2(0.0, 1.0)); + // float d = random(i + vec2(1.0, 1.0)); - vec2 u = f * f * (3.0 - 2.0 * f); + // vec2 u = f * f * (3.0 - 2.0 * f); - return mix(a, b, u.x) + - (c - a)* u.y * (1.0 - u.x) + - (d - b) * u.x * u.y; -} + // return mix(a, b, u.x) + + // (c - a)* u.y * (1.0 - u.x) + + // (d - b) * u.x * u.y; +// } -float snoise(vec3 v){ - const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; - const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); +// float snoise(vec3 v){ + // const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; + // const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); // First corner - vec3 i = floor(v + dot(v, C.yyy) ); - vec3 x0 = v - i + dot(i, C.xxx) ; + // vec3 i = floor(v + dot(v, C.yyy) ); + // vec3 x0 = v - i + dot(i, C.xxx) ; // Other corners - vec3 g = step(x0.yzx, x0.xyz); - vec3 l = 1.0 - g; - vec3 i1 = min( g.xyz, l.zxy ); - vec3 i2 = max( g.xyz, l.zxy ); + // vec3 g = step(x0.yzx, x0.xyz); + // vec3 l = 1.0 - g; + // vec3 i1 = min( g.xyz, l.zxy ); + // vec3 i2 = max( g.xyz, l.zxy ); // x0 = x0 - 0. + 0.0 * C - vec3 x1 = x0 - i1 + 1.0 * C.xxx; - vec3 x2 = x0 - i2 + 2.0 * C.xxx; - vec3 x3 = x0 - 1. + 3.0 * C.xxx; + // vec3 x1 = x0 - i1 + 1.0 * C.xxx; + // vec3 x2 = x0 - i2 + 2.0 * C.xxx; + // vec3 x3 = x0 - 1. + 3.0 * C.xxx; // Permutations - i = mod(i, 289.0 ); - vec4 p = permute( permute( permute( - i.z + vec4(0.0, i1.z, i2.z, 1.0 )) - + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) - + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); + // i = mod(i, 289.0 ); + // vec4 p = permute( permute( permute( + // i.z + vec4(0.0, i1.z, i2.z, 1.0 )) + // + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) + // + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); // Gradients // ( N*N points uniformly over a square, mapped onto an octahedron.) - float n_ = 1.0/7.0; // N=7 - vec3 ns = n_ * D.wyz - D.xzx; + // float n_ = 1.0/7.0; // N=7 + // vec3 ns = n_ * D.wyz - D.xzx; - vec4 j = p - 49.0 * floor(p * ns.z *ns.z); // mod(p,N*N) + // vec4 j = p - 49.0 * floor(p * ns.z *ns.z); // mod(p,N*N) - vec4 x_ = floor(j * ns.z); - vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) + // vec4 x_ = floor(j * ns.z); + // vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) - vec4 x = x_ *ns.x + ns.yyyy; - vec4 y = y_ *ns.x + ns.yyyy; - vec4 h = 1.0 - abs(x) - abs(y); + // vec4 x = x_ *ns.x + ns.yyyy; + // vec4 y = y_ *ns.x + ns.yyyy; + // vec4 h = 1.0 - abs(x) - abs(y); - vec4 b0 = vec4( x.xy, y.xy ); - vec4 b1 = vec4( x.zw, y.zw ); + // vec4 b0 = vec4( x.xy, y.xy ); + // vec4 b1 = vec4( x.zw, y.zw ); - vec4 s0 = floor(b0)*2.0 + 1.0; - vec4 s1 = floor(b1)*2.0 + 1.0; - vec4 sh = -step(h, vec4(0.0)); + // vec4 s0 = floor(b0)*2.0 + 1.0; + // vec4 s1 = floor(b1)*2.0 + 1.0; + // vec4 sh = -step(h, vec4(0.0)); - vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; - vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; + // vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; + // vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; - vec3 p0 = vec3(a0.xy,h.x); - vec3 p1 = vec3(a0.zw,h.y); - vec3 p2 = vec3(a1.xy,h.z); - vec3 p3 = vec3(a1.zw,h.w); + // vec3 p0 = vec3(a0.xy,h.x); + // vec3 p1 = vec3(a0.zw,h.y); + // vec3 p2 = vec3(a1.xy,h.z); + // vec3 p3 = vec3(a1.zw,h.w); //Normalise gradients - vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; + // vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); + // p0 *= norm.x; + // p1 *= norm.y; + // p2 *= norm.z; + // p3 *= norm.w; // Mix final noise value - vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); - m = m * m; - return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), - dot(p2,x2), dot(p3,x3) ) ); -} - -float fractalBrownianMotion ( in vec3 _st) { - float v = 0.0; - float a = 0.5; - vec3 shift = vec3(100.0); + // vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); + // m = m * m; + // return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), + // dot(p2,x2), dot(p3,x3) ) ); +// } + +// float fractalBrownianMotion ( in vec3 _st) { + // float v = 0.0; + // float a = 0.5; + // vec3 shift = vec3(100.0); // Rotate to reduce axial bias - mat3 rot = mat3(cos(0.5), sin(0.5), 0.0, - -sin(0.5), cos(0.50), 0.0, - 0.0, 0.0, 0.0); - for (int i = 0; i < NUM_OCTAVES; ++i) { - v += a * snoise(_st); - _st = rot * _st * 2.0 + shift; - a *= 0.5; - } - return v; -} - -float pattern(vec3 p, out vec3 q, out vec3 r) { + // mat3 rot = mat3(cos(0.5), sin(0.5), 0.0, + // -sin(0.5), cos(0.50), 0.0, + // 0.0, 0.0, 0.0); + // for (int i = 0; i < NUM_OCTAVES; ++i) { + // v += a * snoise(_st); + // _st = rot * _st * 2.0 + shift; + // a *= 0.5; + // } + // return v; +// } + +// float pattern(vec3 p, out vec3 q, out vec3 r) { // wrap it once - vec3 offset1 = vec3(0.0); - vec3 offset2 = vec3(5.2, 1.3, 0.0); // arbitrary - float distortionLevel1 = 2.0; // chosen based on visual effect + // vec3 offset1 = vec3(0.0); + // vec3 offset2 = vec3(5.2, 1.3, 0.0); // arbitrary + // float distortionLevel1 = 2.0; // chosen based on visual effect // by exposing q, we can choose a color based on it - q = vec3(fractalBrownianMotion(p + offset1), fractalBrownianMotion(p + offset2), p.z); + // q = vec3(fractalBrownianMotion(p + offset1), fractalBrownianMotion(p + offset2), p.z); // wrap it again - vec3 offset3 = vec3(1.7, 9.2, 0.0); - vec3 offset4 = vec3(8.3, 2.8, 0.0); // arbitrary - float distortionLevel2 = 0.5; // chosen based on visual effect + // vec3 offset3 = vec3(1.7, 9.2, 0.0); + // vec3 offset4 = vec3(8.3, 2.8, 0.0); // arbitrary + // float distortionLevel2 = 0.5; // chosen based on visual effect // by exposing r, we can choose a color based on it - r = vec3( - fractalBrownianMotion(p + distortionLevel1*q + offset3), - fractalBrownianMotion(p + distortionLevel1*q + offset4), - p.z); + // r = vec3( + // fractalBrownianMotion(p + distortionLevel1*q + offset3), + // fractalBrownianMotion(p + distortionLevel1*q + offset4), + // p.z); //return fractalBrownianMotion( p ); //return fractalBrownianMotion( p + distortionLevel1*q ); - return fractalBrownianMotion( p + distortionLevel2*r ); -} + // return fractalBrownianMotion( p + distortionLevel2*r ); +// } void main() { // Normalized pixel coordinates (from 0 to 1) - vec2 st = gl_FragCoord.xy/iResolution.xy; - st.x *= iResolution.x / iResolution.y; + //vec2 st = gl_FragCoord.xy/iResolution.xy; + //st.x *= iResolution.x / iResolution.y; // colors - vec3 darkRust = vec3(0.654, 0.271, 0.0); - vec3 lightRust = vec3(1.0, 0.729, 0.345); - vec3 darkBlue = vec3(0.0, 0.458, 0.580); - vec3 lightBlue = vec3(0.0, 0.956, 1.0); + // vec3 darkRust = vec3(0.654, 0.271, 0.0); + // vec3 lightRust = vec3(1.0, 0.729, 0.345); + // vec3 darkBlue = vec3(0.0, 0.458, 0.580); + // vec3 lightBlue = vec3(0.0, 0.956, 1.0); // Time varying pixel color - vec3 color = vec3(0.25); - vec3 p = vec3(st*2.0, iTime*0.1); - vec3 q; - vec3 r; - //color = vec3(snoise(p)); - //color = vec3(pattern( p, q, r ) + 0.3); - float f = pattern( p, q, r ); - float percent = clamp(f*f*4.0, 0.0, 1.0); - color = mix(lightBlue, lightRust, percent); - percent = clamp(3.0*length(q.x), 0.0, 1.0); - color = mix(color, darkBlue, percent); - percent = clamp(1.2*length(r.y), 0.0, 1.0); - color = mix(color, darkRust, percent); + // vec3 color = vec3(0.25); + // vec3 p = vec3(st*2.0, iTime*0.1); + // vec3 q; + // vec3 r; + //color = vec3(snoise(p)); + //color = vec3(pattern( p, q, r ) + 0.3); + // float f = pattern( p, q, r ); + // float percent = clamp(f*f*4.0, 0.0, 1.0); + // color = mix(lightBlue, lightRust, percent); + // percent = clamp(3.0*length(q.x), 0.0, 1.0); + // color = mix(color, darkBlue, percent); + // percent = clamp(1.2*length(r.y), 0.0, 1.0); + // color = mix(color, darkRust, percent); // Output to screen - gl_FragColor = vec4(color,1.0); + //gl_FragColor = vec4(color,1.0); + vec2 uv = gl_FragCoord.xy / u_resolution.xy; + gl_FragColor = vec4(uv.x, 0.0, uv.y, 1.0); } \ No newline at end of file diff --git a/assets/p5/shader2.frag b/assets/p5/shader2.frag new file mode 100644 index 0000000..16bb43d --- /dev/null +++ b/assets/p5/shader2.frag @@ -0,0 +1,11 @@ +precision highp float; + +// variables that get set by my custom sketch +uniform vec2 u_resolution; +uniform vec3 custom_color; + + +void main() { + vec2 uv = gl_FragCoord.xy / u_resolution.xy; + gl_FragColor = vec4(uv.x, 0.0, uv.y, 1.0); +} \ No newline at end of file diff --git a/assets/p5/sketch.js b/assets/p5/sketch.js index d84c13f..aa5dc0d 100644 --- a/assets/p5/sketch.js +++ b/assets/p5/sketch.js @@ -1,7 +1,6 @@ // this code works if you're just showing the shader // look at metaballs if you are showing multiple shaders let basicShader; -let x; function preload() { basicShader = loadShader("https://raw.githubusercontent.com/Moses-Ian/portfolio/main/public/assets/p5/shader.vert", "https://raw.githubusercontent.com/Moses-Ian/portfolio/main/public/assets/p5/shader.frag"); @@ -12,7 +11,6 @@ function preload() { // .then(text => console.log(text)) // .catch(e => console.error(e)); - x = 0; } function setup() { @@ -27,12 +25,9 @@ function draw() { // put drawing code here background(51); - circle(x, 25, 50) - x+=1; - // define shader inputs like this - basicShader.setUniform('iResolution', [width, height]); - basicShader.setUniform('iTime', performance.now() / 1000); // colors are 0-1 + basicShader.setUniform('u_resolution', [width, height]); + basicShader.setUniform('u_time', performance.now() / 1000); // colors are 0-1 rectMode(CENTER);