digitalrain.fragment.fx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Samplers.
  2. varying vec2 vUV;
  3. uniform sampler2D textureSampler;
  4. uniform sampler2D digitalRainFont;
  5. // Infos.
  6. uniform vec4 digitalRainFontInfos;
  7. uniform vec4 digitalRainOptions;
  8. uniform mat4 matrixSpeed;
  9. uniform float cosTimeZeroOne;
  10. // Transform color to luminance.
  11. float getLuminance(vec3 color)
  12. {
  13. return clamp(dot(color, vec3(0.2126, 0.7152, 0.0722)), 0., 1.);
  14. }
  15. // Main functions.
  16. void main(void)
  17. {
  18. float caracterSize = digitalRainFontInfos.x;
  19. float numChar = digitalRainFontInfos.y - 1.0;
  20. float fontx = digitalRainFontInfos.z;
  21. float fonty = digitalRainFontInfos.w;
  22. float screenx = digitalRainOptions.x;
  23. float screeny = digitalRainOptions.y;
  24. float ratio = screeny / fonty;
  25. float columnx = float(floor((gl_FragCoord.x) / caracterSize));
  26. float tileX = float(floor((gl_FragCoord.x) / caracterSize)) * caracterSize / screenx;
  27. float tileY = float(floor((gl_FragCoord.y) / caracterSize)) * caracterSize / screeny;
  28. vec2 tileUV = vec2(tileX, tileY);
  29. vec4 tileColor = texture2D(textureSampler, tileUV);
  30. vec4 baseColor = texture2D(textureSampler, vUV);
  31. float tileLuminance = getLuminance(tileColor.rgb);
  32. int st = int(mod(columnx, 4.0));
  33. float speed = cosTimeZeroOne * (sin(tileX * 314.5) * 0.5 + 0.6);
  34. float x = float(mod(gl_FragCoord.x, caracterSize)) / fontx;
  35. float y = float(mod(speed + gl_FragCoord.y / screeny, 1.0));
  36. y *= ratio;
  37. vec4 finalColor = texture2D(digitalRainFont, vec2(x, 1.0 - y));
  38. vec3 high = finalColor.rgb * (vec3(1.2,1.2,1.2) * pow(1.0 - y, 30.0));
  39. finalColor.rgb *= vec3(pow(tileLuminance, 5.0), pow(tileLuminance, 1.5), pow(tileLuminance, 3.0));
  40. finalColor.rgb += high;
  41. finalColor.rgb = clamp(finalColor.rgb, 0., 1.);
  42. finalColor.a = 1.0;
  43. finalColor = mix(finalColor, tileColor, digitalRainOptions.w);
  44. finalColor = mix(finalColor, baseColor, digitalRainOptions.z);
  45. gl_FragColor = finalColor;
  46. }