MeshMatcapNodeMaterial.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import NodeMaterial, { addNodeMaterial } from './NodeMaterial.js';
  2. import { materialReference } from '../accessors/MaterialReferenceNode.js';
  3. import { diffuseColor } from '../core/PropertyNode.js';
  4. import { vec3 } from '../shadernode/ShaderNode.js';
  5. import { MeshMatcapMaterial } from 'three';
  6. import { mix } from '../math/MathNode.js';
  7. import { matcapUV } from '../utils/MatcapUVNode.js';
  8. const defaultValues = new MeshMatcapMaterial();
  9. class MeshMatcapNodeMaterial extends NodeMaterial {
  10. constructor( parameters ) {
  11. super();
  12. this.lights = false;
  13. this.isMeshMatcapNodeMaterial = true;
  14. this.setDefaultValues( defaultValues );
  15. this.setValues( parameters );
  16. }
  17. setupVariants( builder ) {
  18. const uv = matcapUV;
  19. let matcapColor;
  20. if ( builder.material.matcap ) {
  21. matcapColor = materialReference( 'matcap', 'texture' ).context( { getUV: () => uv } );
  22. } else {
  23. matcapColor = vec3( mix( 0.2, 0.8, uv.y ) ); // default if matcap is missing
  24. }
  25. diffuseColor.rgb.mulAssign( matcapColor.rgb );
  26. }
  27. }
  28. export default MeshMatcapNodeMaterial;
  29. addNodeMaterial( 'MeshMatcapNodeMaterial', MeshMatcapNodeMaterial );