Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #version 430
  2.  
  3. in vec4 vPosition;
  4. in vec2 vCoords;
  5. uniform float time;
  6.  
  7. const float INVERSE_MAX_UINT = 1.0 / 4294967295.0;
  8.  
  9. float rand(uint seed, float range)
  10. {
  11.     uint i = (seed ^ 12345391u) * 2654435769u;
  12.     i ^= (i << 6u) ^ (i >> 26u);
  13.     i *= 2654435769u;
  14.     i += (i << 5u) ^ (i >> 12u);
  15.     return float(range * i) * INVERSE_MAX_UINT;
  16. }
  17.  
  18. float ra(uint seed)
  19. {
  20.     return rand(seed++, 2) - 1;
  21. }
  22. void main()
  23. {
  24.     float t = time * 100;
  25.    
  26.     if(int(t) % 100 == 2)
  27.         t = pow(t,2);
  28.    
  29.     t = t / 100;
  30.    
  31.     int tess = 100;
  32.     uint   seed = uint(tess*cos(vCoords.x) + tess*tan(vCoords.y));
  33.     seed = seed * uint(tess*sin(vCoords.x) + tess*tan(vCoords.y));
  34.     seed = seed + uint(sin(t));
  35.    
  36.     // Initialise
  37.     vec3 outRGB = vec3(1);
  38.    
  39.     // Target
  40.     vec3 target = vec3(sin(t*vCoords.x*10), 0, cos(t*vCoords.y*10));
  41.    
  42.     // Watchdogs like background
  43.     target = target + (ra(seed++) / length(vCoords));
  44.    
  45.     float dist = length(target - vPosition.xyz);
  46.    
  47.     // Almost a smoke-like effect
  48.     dist = dist - sin(seed - t);
  49.  
  50.     // Colouring
  51.     outRGB = outRGB * vec3(0.1, 1.0, 1.0) * 1-dist;
  52.        
  53.     gl_FragColor = vec4(outRGB,0.5);
  54. }