LuminosityHighPassShader.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import {
  2. Color
  3. } from 'three';
  4. /**
  5. * Luminosity
  6. * http://en.wikipedia.org/wiki/Luminosity
  7. */
  8. const LuminosityHighPassShader = {
  9. name: 'LuminosityHighPassShader',
  10. shaderID: 'luminosityHighPass',
  11. uniforms: {
  12. 'tDiffuse': { value: null },
  13. 'luminosityThreshold': { value: 1.0 },
  14. 'smoothWidth': { value: 1.0 },
  15. 'defaultColor': { value: new Color( 0x000000 ) },
  16. 'defaultOpacity': { value: 0.0 }
  17. },
  18. vertexShader: /* glsl */`
  19. varying vec2 vUv;
  20. void main() {
  21. vUv = uv;
  22. gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
  23. }`,
  24. fragmentShader: /* glsl */`
  25. uniform sampler2D tDiffuse;
  26. uniform vec3 defaultColor;
  27. uniform float defaultOpacity;
  28. uniform float luminosityThreshold;
  29. uniform float smoothWidth;
  30. varying vec2 vUv;
  31. void main() {
  32. vec4 texel = texture2D( tDiffuse, vUv );
  33. vec3 luma = vec3( 0.299, 0.587, 0.114 );
  34. float v = dot( texel.xyz, luma );
  35. vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );
  36. float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );
  37. gl_FragColor = mix( outputColor, texel, alpha );
  38. }`
  39. };
  40. export { LuminosityHighPassShader };