digitalrain.fragment.fx.ts 1.7 KB

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