ExtendedMaterialNode.js 1.9 KB

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