Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Simple passthrough fragment shader
- //
- uniform vec2 size;
- uniform float amount;
- uniform vec3 fadeColor;
- uniform float offset;
- varying vec2 v_vTexcoord;
- varying vec4 v_vColour;
- #define fadeColorDistance 0.5
- // BEGIN PASTE //
- // Function from:
- // https://stackoverflow.com/questions/4200224/random-noise-functions-for-glsl
- float rand(vec2 co){
- return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
- }
- // These 3 functions from:
- // https://gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83
- float rand(float n){return fract(sin(n) * 43758.5453123);}
- float noise(float p){
- float fl = floor(p);
- float fc = fract(p);
- return mix(rand(fl), rand(fl + 1.0), fc);
- }
- float noise(vec2 n) {
- const vec2 d = vec2(0.0, 1.0);
- vec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n));
- return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);
- }
- // END PASTE //
- void main()
- {
- vec4 col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
- vec2 pos = vec2(
- floor( v_vTexcoord.x / size.x ) * size.x + offset,
- floor( v_vTexcoord.y / size.y ) * size.y + offset
- );
- float n = noise( pos * 12.0 );
- float f = max( amount - fadeColorDistance, 0.0 );
- if ( n < amount ) {
- col.a *= 1.0;
- if ( n > f ) {
- float fa = min( ( n - f ) / f, 1.0 );
- col = vec4(
- mix( col.r, fadeColor.r, fa ),
- mix( col.g, fadeColor.g, fa ),
- mix( col.b, fadeColor.b, fa ),
- col.a
- );
- }
- }
- else {
- float ff = min( amount + fadeColorDistance, 1.0 );
- if ( n < ff ) {
- col = vec4(
- fadeColor.rgb,
- col.a * ( ff - n ) / ff
- );
- } else {
- col.a *= 0.0;
- }
- }
- gl_FragColor = col;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement