layout (location=0) in vec4 a_co;
-layout (location=1) in vec4 a_norm;
-layout (location=2) in vec4 a_colour;
+layout (location=1) in vec4 a_colour;
#include "motion_vectors_vs.glsl"
uniform mat3 uNormMtx;
uniform mat4 uPv;
uniform mat4 uPvmPrev;
-uniform vec2 uTime;
-uniform vec4 uTransform;
+uniform vec4 uAnim;
out vec4 aColour;
-out vec3 aNorm;
out vec3 aWorldCo;
out vec3 aCo;
return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));
}
-vec3 mapP( vec3 p )
+vec3 gridify( vec3 p, float s, float t )
{
- return p;
- float t = max(0.0,uTime.y);
+ vec3 co = p*s;
+ vec2 r2 = rand_hash22(p.xz);
+ vec3 grid = (vec3(floor(co.x),co.y,floor(co.z))+vec3(0.5,0.0,0.5)) * (1.0/s);
- vec3 lco = p * 20.0;
- vec3 grid = vec3(floor(lco.x),lco.y,floor(lco.z));//fract(p);
+ float t1 = 1.0-t;
+ t1 = 1.0-t1*t1;
+ float t2 = t*t;
- return mix(p,grid * (1.0/20.0), t)*vec3(1.0+t,1.0-t,1.0+t);
+ return mix( p, grid, t1 ) + t2*vec3(0.0,r2.y*r2.y*0.2,0.0);
}
void main()
{
- vec3 mco = a_co.xyz * uTransform.w + uTransform.xyz;
+ vec3 co = gridify( a_co.xyz, uAnim.x, uAnim.y );
-
- vec3 center = vec3(0.5);
- vec3 lco = mapP(mco-center);
- mco = lco + center;
-
- vec3 world_pos0 = uMdl * vec4( mco, 1.0 );
+ vec3 world_pos0 = uMdl * vec4( co, 1.0 );
vec4 vproj0 = uPv * vec4( world_pos0, 1.0 );
- vec4 vproj1 = uPvmPrev * vec4( mco, 1.0 );
+ vec4 vproj1 = uPvmPrev * vec4( co, 1.0 );
- float t = max(0.0,uTime.y);
- float scaler = smoothstep(0.6,0.58,length(lco.xz*vec2(0.7,1.0)));
+ float scaler = smoothstep(0.6,0.58,length(co.xz));
vs_motion_out( vproj0, vproj1 );
gl_Position = vproj0;
- gl_PointSize = (8.0*uTransform.w*scaler) / (gl_Position.z + 0.01);
+ gl_PointSize = (9.0*scaler) / (max( gl_Position.z, 2.0 ));
aWorldCo = world_pos0;
- aColour = a_colour*scaler*(0.3+a_co.y)+pow(1.0-a_co.y,16.0);
- aCo = mco;
- aNorm = uNormMtx * a_norm.xyz;
+ aColour = a_colour*scaler*(1.0-uAnim.y*uAnim.y);
+ aCo = co;
}