Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- https://www.shadertoy.com/user/BigWIngs
- // The Universe Within - by Martijn Steinrucken aka BigWings 2018
- // Email:countfrolic@gmail.com Twitter:@The_ArtOfCode
- // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
- // After listening to an interview with Michael Pollan on the Joe Rogan
- // podcast I got interested in mystic experiences that people seem to
- // have when using certain psycoactive substances.
- //
- // For best results, watch fullscreen, with music, in a dark room.
- //
- // I had an unused 'blockchain effect' lying around and used it as
- // a base for this effect. Uncomment the SIMPLE define to see where
- // this came from.
- //
- // Use the mouse to get some 3d parallax.
- // Music - Terrence McKenna Mashup - Jason Burruss Remixes
- // https://soundcloud.com/jason-burruss-remixes/terrence-mckenna-mashup
- //
- // YouTube video of this effect:
- // https://youtu.be/GAhu4ngQa48
- //
- // YouTube Tutorial for this effect:
- // https://youtu.be/3CycKKJiwis
- #define S(a, b, t) smoothstep(a, b, t)
- #define NUM_LAYERS 4.
- //#define SIMPLE
- float N21(vec2 p) {
- vec3 a = fract(vec3(p.xyx) * vec3(213.897, 653.453, 253.098));
- a += dot(a, a.yzx + 79.76);
- return fract((a.x + a.y) * a.z);
- }
- vec2 GetPos(vec2 id, vec2 offs, float t) {
- float n = N21(id+offs);
- float n1 = fract(n*10.);
- float n2 = fract(n*100.);
- float a = t+n;
- return offs + vec2(sin(a*n1), cos(a*n2))*.4;
- }
- float GetT(vec2 ro, vec2 rd, vec2 p) {
- return dot(p-ro, rd);
- }
- float LineDist(vec3 a, vec3 b, vec3 p) {
- return length(cross(b-a, p-a))/length(p-a);
- }
- float df_line( in vec2 a, in vec2 b, in vec2 p)
- {
- vec2 pa = p - a, ba = b - a;
- float h = clamp(dot(pa,ba) / dot(ba,ba), 0., 1.);
- return length(pa - ba * h);
- }
- float line(vec2 a, vec2 b, vec2 uv) {
- float r1 = .04;
- float r2 = .01;
- float d = df_line(a, b, uv);
- float d2 = length(a-b);
- float fade = S(1.5, .5, d2);
- fade += S(.05, .02, abs(d2-.75));
- return S(r1, r2, d)*fade;
- }
- float NetLayer(vec2 st, float n, float t) {
- vec2 id = floor(st)+n;
- st = fract(st)-.5;
- vec2 p[9];
- int i=0;
- for(float y=-1.; y<=1.; y++) {
- for(float x=-1.; x<=1.; x++) {
- p[i++] = GetPos(id, vec2(x,y), t);
- }
- }
- float m = 0.;
- float sparkle = 0.;
- for(int i=0; i<9; i++) {
- m += line(p[4], p[i], st);
- float d = length(st-p[i]);
- float s = (.005/(d*d));
- s *= S(1., .7, d);
- float pulse = sin((fract(p[i].x)+fract(p[i].y)+t)*5.)*.4+.6;
- pulse = pow(pulse, 20.);
- s *= pulse;
- sparkle += s;
- }
- m += line(p[1], p[3], st);
- m += line(p[1], p[5], st);
- m += line(p[7], p[5], st);
- m += line(p[7], p[3], st);
- float sPhase = (sin(t+n)+sin(t*.1))*.25+.5;
- sPhase += pow(sin(t*.1)*.5+.5, 50.)*5.;
- m += sparkle*sPhase;//(*.5+.5);
- return m;
- }
- void mainImage( out vec4 fragColor, in vec2 fragCoord )
- {
- vec2 uv = (fragCoord-iResolution.xy*.5)/iResolution.y;
- vec2 M = iMouse.xy/iResolution.xy-.5;
- float fft = texelFetch( iChannel0, ivec2(.6,0), 0 ).x;
- float glow = -uv.y*fft*2.;
- // float t = iTime * 0.2;
- // salvo il valore precedente del tempo.
- float previousT = 0.0;
- // Smoothen the speed change based on fft
- float speedFactor = pow(fft, 0.1);
- // Nel corpo della funzione mainImage
- // Crea una versione smussata della variabile fft
- float smoothFft = mix(previousT, abs(speedFactor) , 2.);
- // Calcola `t` usando il valore smussato
- float t = iTime * 0.3 + ( smoothFft / 2.);
- // Aggiorna il valore precedente del tempo
- previousT = smoothFft;
- float s = sin(t);
- float c = cos(t);
- mat2 rot = mat2(c, -s, s, c);
- vec2 st = uv*rot;
- M *= rot*2.;
- float m = 0.;
- for(float i=0.; i<1.; i+=1./NUM_LAYERS) {
- float z = fract(t+i);
- float size = mix(45., 1., z);
- float fade = S(0., .6, z)*S(1., .8, z);
- m += fade * NetLayer(st*(size/smoothFft )-M*z, i, iTime);
- }
- vec3 baseCol = vec3(s, cos(t*.4), -sin(t*.24))*.4+.6;
- vec3 col = baseCol*m;
- col += baseCol*glow;
- #ifdef SIMPLE
- uv *= 10.;
- col = vec3(1)*NetLayer(uv, 0., iTime);
- uv = fract(uv);
- //if(uv.x>.98 || uv.y>.98) col += 1.;
- #else
- col *= 1.-dot(uv,uv);
- t = mod(iTime, 230.);
- col *= S(0., 20., t)*S(224., 200., t);
- #endif
- fragColor = vec4(col,1);
- }
Advertisement
Comments
-
- // The Universe Within - by Martijn Steinrucken aka BigWings 2018
- // Email:countfrolic@gmail.com Twitter:@The_ArtOfCode
- // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
- // After listening to an interview with Michael Pollan on the Joe Rogan
- // podcast I got interested in mystic experiences that people seem to
- // have when using certain psycoactive substances.
- //
- // For best results, watch fullscreen, with music, in a dark room.
- //
- // I had an unused 'blockchain effect' lying around and used it as
- // a base for this effect. Uncomment the SIMPLE define to see where
- // this came from.
- //
- // Use the mouse to get some 3d parallax.
- // Music - Terrence McKenna Mashup - Jason Burruss Remixes
- // https://soundcloud.com/jason-burruss-remixes/terrence-mckenna-mashup
- //
- // YouTube video of this effect:
- // https://youtu.be/GAhu4ngQa48
- //
- // YouTube Tutorial for this effect:
- // https://youtu.be/3CycKKJiwis
- #define S(a, b, t) smoothstep(a, b, t)
- #define NUM_LAYERS 4.
- //#define SIMPLE
- float N21(vec2 p) {
- vec3 a = fract(vec3(p.xyx) * vec3(213.897, 653.453, 253.098));
- a += dot(a, a.yzx + 79.76);
- return fract((a.x + a.y) * a.z);
- }
- vec2 GetPos(vec2 id, vec2 offs, float t) {
- float n = N21(id+offs);
- float n1 = fract(n*10.);
- float n2 = fract(n*100.);
- float a = t+n;
- return offs + vec2(sin(a*n1), cos(a*n2))*.4;
- }
- float GetT(vec2 ro, vec2 rd, vec2 p) {
- return dot(p-ro, rd);
- }
- float LineDist(vec3 a, vec3 b, vec3 p) {
- return length(cross(b-a, p-a))/length(p-a);
- }
- float df_line( in vec2 a, in vec2 b, in vec2 p)
- {
- vec2 pa = p - a, ba = b - a;
- float h = clamp(dot(pa,ba) / dot(ba,ba), 0., 1.);
- return length(pa - ba * h);
- }
- float line(vec2 a, vec2 b, vec2 uv) {
- float r1 = .04;
- float r2 = .01;
- float d = df_line(a, b, uv);
- float d2 = length(a-b);
- float fade = S(1.5, .5, d2);
- fade += S(.05, .02, abs(d2-.75));
- return S(r1, r2, d)*fade;
- }
- float NetLayer(vec2 st, float n, float t) {
- vec2 id = floor(st)+n;
- st = fract(st)-.5;
- vec2 p[9];
- int i=0;
- for(float y=-1.; y<=1.; y++) {
- for(float x=-1.; x<=1.; x++) {
- p[i++] = GetPos(id, vec2(x,y), t);
- }
- }
- float m = 0.;
- float sparkle = 0.;
- for(int i=0; i<9; i++) {
- m += line(p[4], p[i], st);
- float d = length(st-p[i]);
- float s = (.005/(d*d));
- s *= S(1., .7, d);
- float pulse = sin((fract(p[i].x)+fract(p[i].y)+t)*5.)*.4+.6;
- pulse = pow(pulse, 20.);
- s *= pulse;
- sparkle += s;
- }
- m += line(p[1], p[3], st);
- m += line(p[1], p[5], st);
- m += line(p[7], p[5], st);
- m += line(p[7], p[3], st);
- float sPhase = (sin(t+n)+sin(t*.1))*.25+.5;
- sPhase += pow(sin(t*.1)*.5+.5, 50.)*5.;
- m += sparkle*sPhase;//(*.5+.5);
- return m;
- }
- void mainImage( out vec4 fragColor, in vec2 fragCoord )
- {
- vec2 uv = (fragCoord-iResolution.xy*.5)/iResolution.y;
- vec2 M = iMouse.xy/iResolution.xy-.5;
- float t = iTime*.1;
- float s = sin(t);
- float c = cos(t);
- mat2 rot = mat2(c, -s, s, c);
- vec2 st = uv*rot;
- M *= rot*2.;
- float m = 0.;
- for(float i=0.; i<1.; i+=1./NUM_LAYERS) {
- float z = fract(t+i);
- float size = mix(15., 1., z);
- float fade = S(0., .6, z)*S(1., .8, z);
- m += fade * NetLayer(st*size-M*z, i, iTime);
- }
- float fft = texelFetch( iChannel0, ivec2(.7,0), 0 ).x;
- float glow = -uv.y*fft*2.;
- vec3 baseCol = vec3(s, cos(t*.4), -sin(t*.24))*.4+.6;
- vec3 col = baseCol*m;
- col += baseCol*glow;
- #ifdef SIMPLE
- uv *= 10.;
- col = vec3(1)*NetLayer(uv, 0., iTime);
- uv = fract(uv);
- //if(uv.x>.98 || uv.y>.98) col += 1.;
- #else
- col *= 1.-dot(uv,uv);
- t = mod(iTime, 230.);
- col *= S(0., 20., t)*S(224., 200., t);
- #endif
- fragColor = vec4(col,1);
- }
Add Comment
Please, Sign In to add comment
Advertisement