"uniform mat4 uPv;" "uniform mat4x3 uMdl;" "uniform float uTime;" "uniform float uSwayAmt;" "" "out vec4 aColour;" "out vec2 aUv;" "out vec3 aNorm;" "out vec3 aCo;" "" "vec3 compute_sway( vec3 pos )" "{" "vec4 sines = vec4( sin(uTime + pos.x)*1.0," "sin(uTime*1.2 + pos.z*2.0)*1.1," "sin(uTime*2.33)*0.5," "sin(uTime*0.6 + pos.x*0.3)*1.3 );" "vec3 offset = vec3( sines.x+sines.y*sines.w, 0.0, sines.x+sines.z );" "return pos + offset*a_colour.r*uSwayAmt;" "}" "" "void main()" "{" "vec3 swaypos = compute_sway( a_co );" "gl_Position = uPv * vec4(uMdl * vec4(swaypos,1.0), 1.0 );" "aColour = a_colour;" "aUv = a_uv;" "aNorm = normalize(mat3(uMdl) * a_norm);" "aCo = a_co;" "}", /* Fragment */ "out vec4 FragColor;" "" "uniform int uMode;" "uniform sampler2D uTexMain;" "uniform sampler2D uTexGradients;" "" /*Include*/ SHADER_VALUE_NOISE_3D "" "in vec4 aColour;" "in vec2 aUv;" "in vec3 aNorm;" "in vec3 aCo;" "" "void main()" "{" "vec4 colour = vec4(1.0,0.0,0.5,1.0);" "vec4 diffuse = texture( uTexMain, aUv );" "if( uMode == 1 )" "{" "colour = vec4(aNorm * 0.5 + 0.5, 1.0);" "}" "if( uMode == 2 )" "{" "colour = aColour;" "}" "if( uMode == 3 )" "{" "float light = dot(aNorm, vec3(0.2,0.8,0.1));" "vec3 grid3 = fract(aCo);" "colour = vec4(vec3(light)*(1.0-grid3*0.3),1.0);" "}" "if( uMode == 4 )" "{" "colour = vec4( aUv, 0.0, 1.0 );" "}" "if( uMode == 5 )" "{" "if( diffuse.a < 0.45 ) discard;" "colour = diffuse;" "}" "if( uMode == 6 )" "{" "float r1 = fractalNoise(aCo);" "colour = vec4( vec3(r1), 1.0 );" "}" "if( uMode == 7 )" "{" "if( diffuse.a < 0.2 ) discard;" "float lighting = 1.0 - aColour.g*0.8;" "float light1 = max(0.0,dot(-vec3(0.5,-0.8,0.25), aNorm));" "float light2 = max(0.0,dot(-vec3(-0.8,0.5,-0.25), aNorm));" "vec3 lt = vec3(0.2,0.2,0.2 ) + " "vec3(1.0,1.0,0.9)*light1 + " "vec3(0.1,0.3,0.4 )*light2;" "colour = vec4(vec3(pow(lighting,1.6)*(diffuse.r*0.7+0.5)),1.0);" "colour = vec4(colour.rgb*lt,1.0);" "vec2 gradUV = vec2(lighting*1.9,aColour.b*0.8);" "vec4 gradient_sample = texture( uTexGradients, gradUV );" "colour = colour*gradient_sample;" "}" "if( uMode == 8 )" "{" "if( diffuse.a < 0.45 ) discard;" "float light = 1.0 - aColour.g;" "light = pow(light,1.6)*(diffuse.r*0.7+0.5);" "float r1 = fractalNoise(aCo*0.01);" "vec2 gradUV = vec2(light*1.9,r1+aColour.b);" "vec4 gradient_sample = texture( uTexGradients, gradUV );" "colour = gradient_sample*light;" "}" "FragColor = colour;" "}"