FilmShader.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**
  2. * @module FilmShader
  3. * @three_import import { FilmShader } from 'three/addons/shaders/FilmShader.js';
  4. */
  5. /**
  6. * TODO
  7. *
  8. * Used by {@link FilmPass}.
  9. *
  10. * @constant
  11. * @type {ShaderMaterial~Shader}
  12. */
  13. const FilmShader = {
  14. name: 'FilmShader',
  15. uniforms: {
  16. 'tDiffuse': { value: null },
  17. 'time': { value: 0.0 },
  18. 'intensity': { value: 0.5 },
  19. 'grayscale': { value: false }
  20. },
  21. vertexShader: /* glsl */`
  22. varying vec2 vUv;
  23. void main() {
  24. vUv = uv;
  25. gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
  26. }`,
  27. fragmentShader: /* glsl */`
  28. #include <common>
  29. uniform float intensity;
  30. uniform bool grayscale;
  31. uniform float time;
  32. uniform sampler2D tDiffuse;
  33. varying vec2 vUv;
  34. void main() {
  35. vec4 base = texture2D( tDiffuse, vUv );
  36. float noise = rand( fract( vUv + time ) );
  37. vec3 color = base.rgb + base.rgb * clamp( 0.1 + noise, 0.0, 1.0 );
  38. color = mix( base.rgb, color, intensity );
  39. if ( grayscale ) {
  40. color = vec3( luminance( color ) ); // assuming linear-srgb
  41. }
  42. gl_FragColor = vec4( color, base.a );
  43. }`,
  44. };
  45. export { FilmShader };