X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fcloud.vs;h=66a2bdf2a65d41089f6c7c9a01b0acee3f1e3057;hb=137d40d96fe923600d8378b8e138e3c276f27ff4;hp=9bac3463dbcfe65f2288d684f5b7e0d98ea94170;hpb=0310bab3c018e23f5516c3e3c3653b844a8106ed;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/cloud.vs b/shaders/cloud.vs index 9bac346..66a2bdf 100644 --- a/shaders/cloud.vs +++ b/shaders/cloud.vs @@ -1,6 +1,5 @@ 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" @@ -8,11 +7,9 @@ uniform mat4x3 uMdl; 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; @@ -23,39 +20,34 @@ vec2 rand_hash22( vec2 p ) 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) / (gl_Position.z + 0.01); 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; }