text: export default /* glsl */`
  #define MATCAP
  
  uniform vec3 diffuse;
  uniform float opacity;
  uniform sampler2D matcap;
  
  varying vec3 vViewPosition;
  
  #include <common>
  #include <dithering_pars_fragment>
  #include <color_pars_fragment>
  #include <uv_pars_fragment>
  #include <map_pars_fragment>
  #include <alphamap_pars_fragment>
  
  #include <fog_pars_fragment>
  #include <normal_pars_fragment>
  #include <bumpmap_pars_fragment>
  #include <normalmap_pars_fragment>
  #include <logdepthbuf_pars_fragment>
  #include <clipping_planes_pars_fragment>
  
  void main() {
  
  	#include <clipping_planes_fragment>
  
  	vec4 diffuseColor = vec4( diffuse, opacity );
  
  	#include <logdepthbuf_fragment>
  	#include <map_fragment>
  	#include <color_fragment>
  	#include <alphamap_fragment>
  	#include <alphatest_fragment>
  	#include <normal_fragment_begin>
  	#include <normal_fragment_maps>
  
  	vec3 viewDir = normalize( vViewPosition );
  	vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
  	vec3 y = cross( viewDir, x );
  	vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks
  
  	#ifdef USE_MATCAP
  
  		vec4 matcapColor = texture2D( matcap, uv );
  		matcapColor = matcapTexelToLinear( matcapColor );
  
  	#else
  
  		vec4 matcapColor = vec4( 1.0 );
  
  	#endif
  
  	vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
  
  	gl_FragColor = vec4( outgoingLight, diffuseColor.a );
  
  	#include <tonemapping_fragment>
  	#include <encodings_fragment>
  	#include <fog_fragment>
  	#include <premultiplied_alpha_fragment>
  	#include <dithering_fragment>
  
  }
  `;
  