Advertisement
Guest User

Untitled

a guest
Jul 5th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //
  2. // Simple passthrough fragment shader
  3. //
  4. uniform vec2  size;
  5. uniform float amount;
  6. uniform vec3  fadeColor;
  7. uniform float offset;
  8.  
  9. varying vec2 v_vTexcoord;
  10. varying vec4 v_vColour;
  11.  
  12. #define fadeColorDistance 0.5
  13.  
  14. // BEGIN PASTE //
  15.  
  16. // Function from:
  17. // https://stackoverflow.com/questions/4200224/random-noise-functions-for-glsl
  18. float rand(vec2 co){
  19.     return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
  20. }
  21.  
  22. // These 3 functions from:
  23. // https://gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83
  24. float rand(float n){return fract(sin(n) * 43758.5453123);}
  25.  
  26. float noise(float p){
  27.     float fl = floor(p);
  28.   float fc = fract(p);
  29.     return mix(rand(fl), rand(fl + 1.0), fc);
  30. }
  31.    
  32. float noise(vec2 n) {
  33.     const vec2 d = vec2(0.0, 1.0);
  34.   vec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n));
  35.     return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);
  36. }
  37.  
  38. // END PASTE //
  39.  
  40. void main()
  41. {
  42.     vec4 col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
  43.    
  44.     vec2 pos = vec2(
  45.         floor( v_vTexcoord.x / size.x ) * size.x + offset,
  46.         floor( v_vTexcoord.y / size.y ) * size.y + offset
  47.     );
  48.    
  49.     float n = noise( pos * 12.0 );
  50.     float f = max( amount - fadeColorDistance, 0.0 );
  51.    
  52.     if ( n < amount ) {
  53.         col.a *= 1.0;
  54.         if ( n > f ) {
  55.             float fa = min( ( n - f ) / f, 1.0 );
  56.            
  57.             col = vec4(
  58.                 mix( col.r, fadeColor.r, fa ),
  59.                 mix( col.g, fadeColor.g, fa ),
  60.                 mix( col.b, fadeColor.b, fa ),
  61.                 col.a
  62.             );
  63.         }
  64.     }
  65.     else {
  66.         float ff = min( amount + fadeColorDistance, 1.0 );
  67.        
  68.         if ( n < ff ) {
  69.             col = vec4(
  70.                 fadeColor.rgb,
  71.                 col.a * ( ff - n ) / ff
  72.             );
  73.         } else {
  74.             col.a *= 0.0;
  75.         }
  76.     }
  77.     gl_FragColor = col;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement