ExtendedMaterialNode.js 930 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import MaterialNode from './MaterialNode.js';
  2. import NormalMapNode from '../display/NormalMapNode.js';
  3. import {
  4. normalView, materialReference
  5. } from '../shadernode/ShaderNodeElements.js';
  6. class ExtendedMaterialNode extends MaterialNode {
  7. constructor( scope ) {
  8. super( scope );
  9. }
  10. getNodeType( builder ) {
  11. const scope = this.scope;
  12. let type = null;
  13. if ( scope === ExtendedMaterialNode.NORMAL ) {
  14. type = 'vec3';
  15. }
  16. return type || super.getNodeType( builder );
  17. }
  18. construct( builder ) {
  19. const material = builder.material;
  20. const scope = this.scope;
  21. let node = null;
  22. if ( scope === ExtendedMaterialNode.NORMAL ) {
  23. node = material.normalMap ? new NormalMapNode( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) ) : normalView;
  24. }
  25. return node || super.construct( builder );
  26. }
  27. }
  28. ExtendedMaterialNode.NORMAL = 'normal';
  29. export default ExtendedMaterialNode;