Gallery

Magical Cloud

Live parameters

Look
1.00
Motion
1.00
Color
GLSL source
vec3 h33(vec3 p){
vec4 a = fract(p.xyzx*vec4(1.33,34.4532,96.324,149.53));
a+= dot(a,a+45.54);
return fract(vec3(a.x*a.y-49.3,a.y*a.z+4.5,a.z*a.w-0.43));


}


float vor(vec3 p){
    vec3 gv = fract(p-.5);
    vec3 id = floor(p);

    float md = 10000.;

    for(float z = -1.;z<=1.;z++){
        for(float y = -1.;y<=1.;y++){
            for(float x = -1.;x<=1.;x++){
                vec3 offs = vec3(x,y,z);
                vec3 n = h33(offs+id);
                vec3 pos = offs+n+id;
                float d = length(p-pos);
                if (d<md){
                md = d;
                }


            }

        }

    }

    return md;

    }

float fbm(vec3 p){
p*=2.;

float G = exp2(-1.);
float f = 1.0;
float a = 1.0;
float t = 0.0;

for(int i = 0; i<5;i++){
    t+= a*vor(p*f);
    f*=2.;
    a*=G;
}

return t;


}

float map(vec3 pos){
pos.z+=iTime*DRIFT_SPEED;

float vor = smoothstep(1.0 - DENSITY*0.1, 1., fbm(pos));

return vor;


}


vec2 trace(vec3 ro, vec3 rd){


    float di = 0.5;

    float ace= 0.;
    float acd = 0.;

    for (int i =0; i<128; i++){

        vec3 pe = ro+rd*(di+float(i)*0.01);

        float d = map(pe);
        ace+=d*0.01;

            if (d<0.001){
                 float acs = 0.;
                 vec3 ld = rd;
                 for( int j = 0; j<4;j++){
                    float sl = map(pe+float(j)*ld*1.);
                    acs+= sl;


                 }

            acd += exp(-acs);
        }

    }

    return vec2(ace,acd);

}

vec3 rdr(vec2 uv){
    vec3 ro = vec3(0.,0.,-3.);
    vec3 rd = normalize(vec3(uv.x,uv.y,1.));


    vec2 vol = trace(ro,rd);

    vec3 trans = exp(-vol.x)*TRANS_TINT;

    vec3 diff = vol.y*0.02*DIFF_TINT;
    
    return trans+diff;


}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = (fragCoord-.5*iResolution.xy)/iResolution.xx;

    vec3 col = rdr(uv);

    fragColor = vec4(col,1.0);
}