meshmatcap_frag.glsl.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. export default /* glsl */`
  2. #define MATCAP
  3. uniform vec3 diffuse;
  4. uniform float opacity;
  5. uniform sampler2D matcap;
  6. varying vec3 vViewPosition;
  7. #ifndef FLAT_SHADED
  8. varying vec3 vNormal;
  9. #ifdef USE_TANGENT
  10. varying vec3 vTangent;
  11. varying vec3 vBitangent;
  12. #endif
  13. #endif
  14. #include <common>
  15. #include <dithering_pars_fragment>
  16. #include <color_pars_fragment>
  17. #include <uv_pars_fragment>
  18. #include <map_pars_fragment>
  19. #include <alphamap_pars_fragment>
  20. #include <fog_pars_fragment>
  21. #include <bumpmap_pars_fragment>
  22. #include <normalmap_pars_fragment>
  23. #include <logdepthbuf_pars_fragment>
  24. #include <clipping_planes_pars_fragment>
  25. void main() {
  26. #include <clipping_planes_fragment>
  27. vec4 diffuseColor = vec4( diffuse, opacity );
  28. #include <logdepthbuf_fragment>
  29. #include <map_fragment>
  30. #include <color_fragment>
  31. #include <alphamap_fragment>
  32. #include <alphatest_fragment>
  33. #include <normal_fragment_begin>
  34. #include <normal_fragment_maps>
  35. vec3 viewDir = normalize( vViewPosition );
  36. vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
  37. vec3 y = cross( viewDir, x );
  38. vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks
  39. #ifdef USE_MATCAP
  40. vec4 matcapColor = texture2D( matcap, uv );
  41. matcapColor = matcapTexelToLinear( matcapColor );
  42. #else
  43. vec4 matcapColor = vec4( 1.0 );
  44. #endif
  45. vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
  46. gl_FragColor = vec4( outgoingLight, diffuseColor.a );
  47. #include <tonemapping_fragment>
  48. #include <encodings_fragment>
  49. #include <fog_fragment>
  50. #include <premultiplied_alpha_fragment>
  51. #include <dithering_fragment>
  52. }
  53. `;