scene.org File Archive

File download

<root>­/­parties­/­2021­/­tokyodemofest21­/­glsl/-.zip

File size:
1 831 bytes (1.79K)
File date:
2021-12-12 11:40:27
Download count:
all-time: 17

Screenshot (by Demozoo)

Screenshot

Preview

  • ローポリ.txt 4.45K

file_id.diz

#extension GL_OES_standard_derivatives : enable

precision highp float;

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;
#define iTime mod(time,360.)
//東京
mat2 rot(float a){float c=cos(a),s=sin(a);return mat2(c,-s,s,c);}
float box(vec2 p,vec2 b){
    vec2 q = abs(p)-b;
    return length(max(vec2(0.),q))+min(0.,max(q.x,q.y));
}
float box3(vec3 p,vec3 b){
    vec3 q =abs(p)-b;
    return length(max(vec3(0.),q))+min(0.,max(q.x,max(q.y,q.z)));
}
float tokyo(vec3 p){
	p*=2.;
	vec3 op = p;
	p.x -=6.;
	float d = box3(p-vec3(0.,4.,0.),vec3(5.,1.,1.));
	float q = min(d,box3(p-vec3(0.,0.,0.),vec3(4.,3.,1.)));
	q = max(q,-min(d,box3(p-vec3(0.,0.,0.),vec3(3.,2.,2.))));
	d = min(d,q);
	d =min(d,box3(p,vec3(4.,1.,1.)));
	d = min(d,box3(p,vec3(1.,7.,1.)));
	p.y-=-5.;
	p.x = abs(p.x)-2.;
	p.xy*=rot(-.885);
	d = min(d,box3(p,vec3(1.,2.5,1.)));
	
	p =op;
	p.x+=6.;
	float d2 = box3(p-vec3(0.,4.,0.),vec3(5.,1.,1.));
	float q2 = min(d2,box3(p-vec3(0.,0.,0.),vec3(4.,3.,1.)));
	q2 = max(q2,-min(d2,box3(p-vec3(0.,0.,0.),vec3(3.,2.,2.))));
	d2 = min(d2,q2);
	
	d2 = min(d2,box3(p-vec3(0.,5.,0.),vec3(1.,2.,1.)));
	d2 = min(d2,box3(p-vec3(0.,-5.,0.),vec3(1.,2.,1.)));
	d2 = min(d2,box3(p-vec3(1,-6.5,0.),vec3(2.,.5,1.)));
	p.y-=-4.;
	p.x = abs(p.x)-2.;
	p.xy*=rot(-.885);
	d2 = min(d2,box3(p,vec3(.5,2.5,1.)));	
	
	d= min(d2,d);
	return d/2.;
}
float diam(vec3 p,float s){
	 p = abs(p);
	 return (p.x+p.y+p.z-s)*inversesqrt(3.);
}

vec3 op;
float di(vec3 p){
    float q = 0.;
    vec4 pp = vec4(p,1.1);
    const float cc = 2.;
    for(float i=1.; i<=cc ;i++){
      q += (asin(sin(pp.x))+acos(cos(pp.z)))/pp.a;
      pp*=1.1;
      pp.xyz +=vec3(1.1,2.,3.);
      pp.xyz = abs(pp.xyz);
      pp.xz *=rot(-.785*i+i);
      
    }
    return q/(cc+pp.a);

}
vec2 sdf(vec3 p){
vec3 tp = p;
	
   op = p;

    vec2 h;
    p.xy *=rot(p.z*.1);
    p.y= -abs(p.y)+(3.+asin(sin(iTime+p.z*.1))*.5);
    
    h.x = length(p+1.)-.1;
    p.y +=2.+di(p);
    h.x = min(h.x, box(p.xy,vec2(6.1,.5) ) );
	h.x *=.65;
    h.y = 1.;
	
    vec2 t;

    tp.xz*=rot(pow(fract(iTime*.3),.125)*3.14);
    tp.xy*=rot(pow(fract(iTime*.3+.5),.125)*3.14);
    t.x = mix(diam(tp,2.5),box3(tp,vec3(1.1)),asin(sin(floor(iTime)+pow(fract(iTime),.5)))*.3+.2);
	t.x =mix(t.x , tokyo(-tp),clamp(sin(time),-.5,.5)+.5);
	 tp = op;
    vec4 ttp = vec4(tp,1.);
	ttp.yz*=rot(iTime*.01);
    for(float i=0.;i<=6.;i++){
        ttp*=1.3;
        ttp.xyz = abs(ttp.xzy)-11.;
        ttp.xz*=rot(-.785+i);
	    ttp.xy*=rot(i);
        t.x = min(t.x,box3(ttp.xyz,vec3(.5))/ttp.a);
    }
	
    t.y = 2.;
    h = t.x < h.x ? t:h;
    return h;
    
}
#define q(s) s*sdf(p+s).x
#define ao(rp,n,k) clamp(sdf(rp+n*k).x/k,.0,1.)
#define gao(rp,n) (ao(rp,n,.1)+ao(rp,n,.5)+ao(rp,n,.7))
vec3 norm(vec3 p,float e){vec2 nv=vec2(-e,e);return normalize(q(nv.xyy)+q(nv.yxy)+q(nv.yyx)+q(nv.xxx));}
vec3 pal(float t){return .5+vec3(.5,.2,.1)*cos(6.28*(vec3(1.,.5,.6)*t+vec3(.0,.1,.2)));}
void main( void ) {

	vec2 position = ( gl_FragCoord.xy / resolution.xy ) + mouse / 4.0;

	vec2 uv = (2.*gl_FragCoord.xy-resolution.xy)/resolution.y;
    vec3 ro = vec3(12.,0.+mouse.y,-6.+mouse.x);
    vec3 rt = vec3(0.);
    vec3 z = normalize(rt-ro);
    vec3 x = (cross(z,vec3(0.,-1.,.0)));
    vec3 y = (cross(z,x));
    
    vec3 rp = ro;
    vec3 rd = normalize(mat3(x,y,z)*vec3(uv,.9));
    vec3 light = mat3(x,y,z)*vec3(-2.,-1.,-4.);
    vec3 col = vec3(.1);
    for(float i=0.;i<=128.;i++){
        vec2 d = sdf(rp);
        if(length(rp) > 50.) break;
        if(d.x <.001){
        
            vec3 n = norm(rp,.019);
            vec3 nn = norm(rp,.02+abs(sin(iTime+rp.z*.2))*.01);
                           float dif = dot(normalize(light-rp),n);
                           float spc = max(0.,dot(normalize(rp-ro),reflect(normalize(-light),n)));
                           spc = pow(spc,32.);
		float fr = pow(1.-dot(-rd,n),4.);
                col = vec3(.1)+vec3(.15,.5,.7)*dif+spc*.75;
                float l = length(n-nn);
                float s = step(.01,l);
                col = max(vec3(0.),mix(col-s,col*s, floor(rp.z*.1-.3+di(rp.zzz*.1)*.2)*(gao(rp,n)/3.)*.75+.5));
                col = pow(col,vec3(.8));
		if(d.y ==1.) {col *=smoothstep(10.5,.0,op.z);col += -fr+s*pal(op.z*.1+iTime)*smoothstep(-.1,.1,op.z);}
                break;
           
            
        }
        rp +=rd*d.x;
    
    }

	gl_FragColor = vec4(col,1.0 );

}