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);
}