@bitowl/three-instanced-mesh
Version:
Scene graph level abstraction for three.js InstancedBufferGeometry
48 lines (47 loc) • 1.79 kB
JavaScript
// copy of https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderLib/meshmatcap_frag.glsl.js
module.exports = [
"#define MATCAP",
"uniform vec3 diffuse;",
"uniform float opacity;",
"uniform sampler2D matcap;",
"varying vec3 vViewPosition;",
"#ifndef FLAT_SHADED",
" varying vec3 vNormal;",
"#endif",
"#include <common>",
"#include <color_pars_fragment>",
"#include <uv_pars_fragment>",
"#include <map_pars_fragment>",
"#include <alphamap_pars_fragment>",
"#include <fog_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 <premultiplied_alpha_fragment>",
" #include <tonemapping_fragment>",
" #include <encodings_fragment>",
" #include <fog_fragment>",
"}"].join("\n");