ExtendedMaterialNode.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import MaterialNode from './MaterialNode.js';
  2. import { materialReference } from './MaterialReferenceNode.js';
  3. import { normalView } from './NormalNode.js';
  4. import { normalMap } from '../display/NormalMapNode.js';
  5. import { bumpMap } from '../display/BumpMapNode.js';
  6. import { addNodeClass } from '../core/Node.js';
  7. import { nodeImmutable } from '../shadernode/ShaderNode.js';
  8. class ExtendedMaterialNode extends MaterialNode {
  9. constructor( scope ) {
  10. super( scope );
  11. }
  12. getNodeType( builder ) {
  13. const scope = this.scope;
  14. let type = null;
  15. if ( scope === ExtendedMaterialNode.NORMAL || scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
  16. type = 'vec3';
  17. }
  18. return type || super.getNodeType( builder );
  19. }
  20. construct( builder ) {
  21. const material = builder.material;
  22. const scope = this.scope;
  23. let node = null;
  24. if ( scope === ExtendedMaterialNode.NORMAL ) {
  25. if ( material.normalMap ) {
  26. node = normalMap( this.getTexture( builder, 'normalMap' ), materialReference( 'normalScale', 'vec2' ) );
  27. } else if ( material.bumpMap ) {
  28. node = bumpMap( material.bumpMap, materialReference( 'bumpScale', 'float' ) );
  29. } else {
  30. node = normalView;
  31. }
  32. } else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
  33. node = material.clearcoatNormalMap ? normalMap( this.getTexture( builder, 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
  34. }
  35. return node || super.construct( builder );
  36. }
  37. }
  38. ExtendedMaterialNode.NORMAL = 'normal';
  39. ExtendedMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
  40. export default ExtendedMaterialNode;
  41. export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
  42. export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
  43. addNodeClass( ExtendedMaterialNode );