point maps (wip)
[carveJwlIkooP6JGAAIwe30JlM.git] / shaders / cloud.vs
1 layout (location=0) in vec4 a_co;
2 layout (location=1) in vec4 a_norm;
3 layout (location=2) in vec4 a_colour;
4
5 #include "motion_vectors_vs.glsl"
6
7 uniform mat4x3 uMdl;
8 uniform mat3 uNormMtx;
9 uniform mat4 uPv;
10 uniform mat4 uPvmPrev;
11 uniform vec2 uTime;
12 uniform vec4 uTransform;
13
14 out vec4 aColour;
15 out vec3 aNorm;
16 out vec3 aWorldCo;
17 out vec3 aCo;
18
19 vec2 rand_hash22( vec2 p )
20 {
21 vec3 p3 = fract(vec3(p.xyx) * 213.8976123);
22 p3 += dot(p3, p3.yzx+19.19);
23 return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));
24 }
25
26 vec3 mapP( vec3 p )
27 {
28 return p;
29 float t = max(0.0,uTime.y);
30
31 vec3 lco = p * 20.0;
32 vec3 grid = vec3(floor(lco.x),lco.y,floor(lco.z));//fract(p);
33
34 return mix(p,grid * (1.0/20.0), t)*vec3(1.0+t,1.0-t,1.0+t);
35 }
36
37 void main()
38 {
39 vec3 mco = a_co.xyz * uTransform.w + uTransform.xyz;
40
41
42 vec3 center = vec3(0.5);
43 vec3 lco = mapP(mco-center);
44 mco = lco + center;
45
46 vec3 world_pos0 = uMdl * vec4( mco, 1.0 );
47 vec4 vproj0 = uPv * vec4( world_pos0, 1.0 );
48 vec4 vproj1 = uPvmPrev * vec4( mco, 1.0 );
49
50 float t = max(0.0,uTime.y);
51 float scaler = smoothstep(0.6,0.58,length(lco.xz*vec2(0.7,1.0)));
52
53 vs_motion_out( vproj0, vproj1 );
54
55 gl_Position = vproj0;
56 gl_PointSize = (8.0*uTransform.w*scaler) / (gl_Position.z + 0.01);
57 aWorldCo = world_pos0;
58 aColour = a_colour*scaler*(0.3+a_co.y)+pow(1.0-a_co.y,16.0);
59 aCo = mco;
60 aNorm = uNormMtx * a_norm.xyz;
61 }