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