LuminosityHighPassShader.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {
  2. Color
  3. } from '../../../build/three.module.js';
  4. /**
  5. * Luminosity
  6. * http://en.wikipedia.org/wiki/Luminosity
  7. */
  8. var 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: [
  18. 'varying vec2 vUv;',
  19. 'void main() {',
  20. ' vUv = uv;',
  21. ' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
  22. '}'
  23. ].join( '\n' ),
  24. fragmentShader: [
  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. ].join( '\n' )
  40. };
  41. export { LuminosityHighPassShader };