LuminosityHighPassShader.js 1.1 KB

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