Project_2026-01-29_12-26-23

GLSL shader by scry · created 2026-01-29 · updated 2026-01-30 · 10s loop · 4 passes

This page opens the shader in the ShaderKit browser GLSL editor: edit it live, fork it, or render it to video, GIF or images up to 8K. Also available as a full-screen view and an embeddable player.

Shader source (GLSL)

Common

#define pi acos(-1.)
#define deg pi/180.  //1 degree
#define time iTime*2.*pi/10. //sin(time) loops 10 seconds
#define R iResolution.xy //shorthand
#define ar R.x/R.y //aspect ratio
#define M iMouse //shorthand
#define xm (M.xy/R) //normalized mouse
#define nm ((xm.xy-0.5)*vec2(ar,1.)+0.5) //aspect ratio correction
vec3 cs = vec3(1.,2.,3.);
mat2 r2d(float a) {
    return mat2(cos(a),sin(a),-sin(a),cos(a));
}
vec3 rgb2hsv(vec3 c){vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));vec4
 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); float d
=  q.x - min(q.w, q.y);float e = 1.0e-10;return vec3(abs(q.z + (q.w -
 q.y) / (6.0 * d + e)), d / (q.x + e), q.x);}vec3 hsv2rgb( vec3 c ) {
 vec4 K = vec4( 1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs( fract(
 c.xxx + K.xyz ) * 6.0 - K.www);  return c.z * mix( K.xxx, clamp( p -
K.xxx, 0.0, 1.0), c.y);}float bitm(vec2 uv,int c) {float h = 5.;float
 w = 3.;int p = int(pow(2.,w)); float line1 = 9591.; uv = floor(vec2(
 uv.x*w,uv.y*h))/vec2(w,w);float c1 = 0.;float cc = uv.x + uv.y*w; c1
=  mod( floor( float(c) / exp2(ceil(cc*w-0.6))) ,2.); c1 *= step( 0.,
uv.x)*step(0.,uv.y);c1 *= step(0.,(-uv.x+0.99))*step(0.,(-uv.y+1.6));
return (c1);}vec3 slogo(vec2 uv, float ar_, float size) {size = 240./
size;uv.x = 1.-uv.x;vec2 px = vec2(1./3.,1./5.); float ls = 4.1;uv *=
 240./5.25/size;ls += 2.;float ul = length(uv);ul = length(vec2(uv.x*
 0.5,uv.y)-0.5);uv -= 0.4;uv.x *= ar*1.75;uv.y *= 1.04;int s = 29671;
 int c = 29263;int r = 31469; int y = 23186; uv.x= 5.-uv.x; float b =
bitm(uv,s); uv.x -= 1./3.*4.; b += bitm( uv,c); uv.x -= 1./3.*4.;b +=
 bitm(uv,r);uv.x -= 1./3.*4.;b += bitm(uv,y);float rr = step(0.,uv.x+
 px.x*13.)*step(0.,uv.y+px.y)*step(0.,(-uv.x+px.x*4.))*step(0.,(-uv.y
 +px.y*6.));b = clamp(b,0.,1.);vec3 l = hsv2rgb(vec3(b+iTime/40.,0.1,
 rr-b*1.9))*rr; l -= 0.1-clamp(ul*0.1, rr*1.-b,0.1); return vec3(l.x,
 clamp(l.x,0.,1.)-l.x,clamp(-l.x,0.,1.));}
float hash(vec2 p) {
    return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
}
float hash3(vec3 p) {
    return fract(sin(dot(p, vec3(127.1, 311.7, 74.7))) * 43758.5453);
}
float noise(vec2 p) {
    vec2 i = floor(p); vec2 f = fract(p); f = f * f * (3.0 - 2.0 * f);
    return mix(mix(hash(i), hash(i + vec2(1, 0)), f.x), mix(hash(i + vec2(0, 1)), hash(i + vec2(1, 1)), f.x), f.y);
}
float noise3(vec3 p) { vec3 i = floor(p); vec3 f = fract(p); f = f * f * (3.0 - 2.0 * f); return mix(mix(mix(hash3(i), hash3(i + vec3(1,0,0)), f.x), mix(hash3(i + vec3(0,1,0)), hash3(i + vec3(1,1,0)), f.x), f.y), mix(mix(hash3(i + vec3(0,0,1)), hash3(i + vec3(1,0,1)), f.x), mix(hash3(i + vec3(0,1,1)), hash3(i + vec3(1,1,1)), f.x), f.y), f.z); }
float fbm(vec2 p) { float v = 0.0, a = 0.5; for(int i = 0; i < 5; i++) { v += a * noise(p); p *= 2.0; a *= 0.5; } return v; }
float fbm(vec2 p, float t) { float v = 0.0, a = 0.5; vec3 p3 = vec3(p, t); for(int i = 0; i < 5; i++) { v += a * noise3(p3); p3.xy *= 2.0; p3.z *= 2.0; a *= 0.5; } return v; }

Buffer A (iChannel0)

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = fragCoord.xy / iResolution.xy;
    vec2 tv = uv;
    vec2 ov = tv;
    uv -= 0.5;
    uv.x *= ar;
    vec3 col = vec3(0.);
    //col += fbm(uv*20.);
    //tv -= 0.5;
    //tv *= 0.99;
    //tv += 0.5;
    vec3 b = texture(iChannel0,tv).rgb;
    vec3 b1 = texture(iChannel1,tv).rgb;
    vec3 b3 = texture(iChannel2,tv).rgb;
    //b += b3*80.;
    tv += vec2(sin(b1.z*pi*4.),cos(b1.z*pi*4.))*0.001;
    float b2 = fbm(tv*2.*vec2(ar,1.),time*0.1);
    b2 += b3.z*8.5;
    tv = mix(tv,ov,0.9);
    tv += vec2(sin(b2*pi*14.),cos(b2*pi*14.))*0.001;
    b.x = texture(iChannel0,tv).z;
    b.y = fbm(tv*4.);
    
    tv += vec2(sin(-b.y*pi*4.-time),cos(-b.y*pi*4.-time))*0.001;
    //b.x = fbm(uv*1.,time*1.);
    b.y = texture(iChannel0,tv).y;
    tv += vec2(cos(b.y*pi*4.),cos(b.y*pi*4.))*0.001;
    b.z = texture(iChannel0,tv).x;
    //b.y = texture(iChannel0,tv+vec2(sin(b.x*pi*2.),cos(b.x*pi*2.))).x;
    //b.y = fbm(b.xy,b.y*2.);
    col = b.xyz;
    col.y += sin(fbm(b.yx*1.))*0.05;
    col.y -= 0.02+col.x*0.1;
    col = mix(col,b,0.8);
    //col.x += sin(fbm(tv*0.3*vec2(ar,1.)))*0.1;
    //col.y -= 0.04;
    //col.y += sin(col.y*12.+pi)*0.01;
    //col = rgb2hsv(col);
    //col.x *= 1.04;
    //col.y = hsv2rgb(col).y;
    //col.y = col.y;
    //col.x = fract(col.z+0.0001);
    //col.y = sin(col.y*1.2)*0.5+0.5;
    //col.x = sin(col.x*4.)*0.4+0.5;
    //col = cos(col*pi/-1.1)*0.5+0.5;
    if (iFrame < 8) {
        col = vec3(1.)*fbm(uv*20.)*vec3(sin(fbm(uv*10.)*20.+cs)*0.5+0.5);
    }
    //col.xy = uv;
    //col *= hsv2rgb(vec3(col.x-time*1.+fbm(uv*24.)*2.+dist*1.2,1.,1.));
    //col *= sin(angle+cs+time*14.)*0.5+0.5;
    //col = sin(col*pi*1.8+3.5+cs);
    fragColor = vec4(col, 1.0);
}

Buffer B (iChannel1)

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = fragCoord.xy / iResolution.xy;
    vec3 col = vec3(uv, 0.5 + 0.5*sin(iTime));
    col.rg = sin(texture(iChannel0, uv).rg*pi*2.)*0.5+0.5;
    fragColor = vec4(col, 1.0);
}

Buffer C (iChannel2)


float sdBox(vec3 p, vec3 b) {
    vec3 q = abs(p) - b;
    return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);
}

vec4 map(vec3 p) {
    // Rotate the space
    p.xz *= r2d(time * 0.04);
    p.xy *= r2d(time * 0.05);
    vec3 op = p;
    float s = 0.5;
    vec3 boxSize = vec3(s);
    float d = sdBox(p, boxSize);
    for (int i=0;i<4;i++) {
        p = abs(p)-s;
        s *= 0.5;
        d = min(d,sdBox(p,vec3(s)));
    }
    // Cube SDF
    
    
    return vec4(op, d);
}

vec2 RM(vec3 ro, vec3 rd) {
    float dO = 0.0;
    float ii = 0.0;
    for (int i=0; i<10; i++) {
        vec3 p = ro + rd*dO;
        float dS = map(p).w;
        dO += dS*0.5;
        ii += 1.0; // Can be used for effects based on steps
        if (dO > 20.0 || dS < 0.001) break;
    }
    return vec2(dO, ii);
}

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = fragCoord.xy / iResolution.xy;
    vec2 tv= uv;
    uv -= 0.5;
    uv.x *= ar;
    vec3 col = vec3(0.);
    
    vec3 ro = vec3(0.0, 0.0, 2.0); // Ray Origin
    vec3 rd = normalize(vec3(uv, -1.0)); // Ray Direction

    vec2 res = RM(ro, rd);
    float t = res.x; // Distance to hit
    
    if (t < 20.0) {
        vec3 p = ro + rd * t;
        vec3 mp = map(p).xyz;
        mp.yz *= r2d(deg*45.);
        mp.yz = abs(mp.yz);
        mp.yz *= r2d(deg*-45.);
        vec2 texUV = abs(fract(mp.xy * 1.+0.)-0.5);
        vec3 texCol = texture(iChannel0, texUV).rgb;
        float ao = 1.0 - res.y / 100.0;
        //col = texCol;
        //col = sin(col.yyy*2.+vec3(1.,2.,2.)*0.2+time*1.)*0.5+0.5;
        //col.xy *= 0.5 + 0.5 * cos(time + p.xy * 2.0);
    
    col = vec3(1.)*1.-t/1.2;
    }
    //col += texture(iChannel0, uv).rgb;
    fragColor = vec4(col, 1.0);
}

Image

Not used

More shaders by scry

Browse all public shaders · All shaders by scry · ShaderKit home

Vibe Mode BETA
💰 ~0 credits
Uniforms
FPS: 0
Time: 0
Resolution: 0 x 0

Account

FPS: -- Time: -- --×-- 1x