meshmatcap.glsl.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. export const vertex = /* glsl */`
  2. #define MATCAP
  3. varying vec3 vViewPosition;
  4. #include <common>
  5. #include <batching_pars_vertex>
  6. #include <uv_pars_vertex>
  7. #include <color_pars_vertex>
  8. #include <displacementmap_pars_vertex>
  9. #include <fog_pars_vertex>
  10. #include <normal_pars_vertex>
  11. #include <morphtarget_pars_vertex>
  12. #include <skinning_pars_vertex>
  13. #include <logdepthbuf_pars_vertex>
  14. #include <clipping_planes_pars_vertex>
  15. void main() {
  16. #include <uv_vertex>
  17. #include <color_vertex>
  18. #include <morphcolor_vertex>
  19. #include <beginnormal_vertex>
  20. #include <morphnormal_vertex>
  21. #include <skinbase_vertex>
  22. #include <skinnormal_vertex>
  23. #include <defaultnormal_vertex>
  24. #include <normal_vertex>
  25. #include <begin_vertex>
  26. #include <morphtarget_vertex>
  27. #include <skinning_vertex>
  28. #include <displacementmap_vertex>
  29. #include <project_vertex>
  30. #include <logdepthbuf_vertex>
  31. #include <clipping_planes_vertex>
  32. #include <fog_vertex>
  33. vViewPosition = - mvPosition.xyz;
  34. }
  35. `;
  36. export const fragment = /* glsl */`
  37. #define MATCAP
  38. uniform vec3 diffuse;
  39. uniform float opacity;
  40. uniform sampler2D matcap;
  41. varying vec3 vViewPosition;
  42. #include <common>
  43. #include <dithering_pars_fragment>
  44. #include <color_pars_fragment>
  45. #include <uv_pars_fragment>
  46. #include <map_pars_fragment>
  47. #include <alphamap_pars_fragment>
  48. #include <alphatest_pars_fragment>
  49. #include <alphahash_pars_fragment>
  50. #include <fog_pars_fragment>
  51. #include <normal_pars_fragment>
  52. #include <bumpmap_pars_fragment>
  53. #include <normalmap_pars_fragment>
  54. #include <logdepthbuf_pars_fragment>
  55. #include <clipping_planes_pars_fragment>
  56. void main() {
  57. #include <clipping_planes_fragment>
  58. vec4 diffuseColor = vec4( diffuse, opacity );
  59. #include <logdepthbuf_fragment>
  60. #include <map_fragment>
  61. #include <color_fragment>
  62. #include <alphamap_fragment>
  63. #include <alphatest_fragment>
  64. #include <alphahash_fragment>
  65. #include <normal_fragment_begin>
  66. #include <normal_fragment_maps>
  67. vec3 viewDir = normalize( vViewPosition );
  68. vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
  69. vec3 y = cross( viewDir, x );
  70. vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks
  71. #ifdef USE_MATCAP
  72. vec4 matcapColor = texture2D( matcap, uv );
  73. #else
  74. vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); // default if matcap is missing
  75. #endif
  76. vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
  77. #include <opaque_fragment>
  78. #include <tonemapping_fragment>
  79. #include <colorspace_fragment>
  80. #include <fog_fragment>
  81. #include <premultiplied_alpha_fragment>
  82. #include <dithering_fragment>
  83. }
  84. `;