PropertyNode.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import Node, { addNodeClass } from './Node.js';
  2. import { nodeImmutable, nodeObject } from '../shadernode/ShaderNode.js';
  3. class PropertyNode extends Node {
  4. constructor( nodeType, name = null, varying = false ) {
  5. super( nodeType );
  6. this.name = name;
  7. this.varying = varying;
  8. this.isPropertyNode = true;
  9. }
  10. getHash( builder ) {
  11. return this.name || super.getHash( builder );
  12. }
  13. isGlobal( /*builder*/ ) {
  14. return true;
  15. }
  16. generate( builder ) {
  17. let nodeVar;
  18. if ( this.varying === true ) {
  19. nodeVar = builder.getVaryingFromNode( this, this.name );
  20. nodeVar.needsInterpolation = true;
  21. } else {
  22. nodeVar = builder.getVarFromNode( this, this.name );
  23. }
  24. return builder.getPropertyName( nodeVar );
  25. }
  26. }
  27. export default PropertyNode;
  28. export const property = ( type, name ) => nodeObject( new PropertyNode( type, name ) );
  29. export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( type, name, true ) );
  30. export const diffuseColor = nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
  31. export const roughness = nodeImmutable( PropertyNode, 'float', 'Roughness' );
  32. export const metalness = nodeImmutable( PropertyNode, 'float', 'Metalness' );
  33. export const clearcoat = nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
  34. export const clearcoatRoughness = nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );
  35. export const sheen = nodeImmutable( PropertyNode, 'vec3', 'Sheen' );
  36. export const sheenRoughness = nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );
  37. export const iridescence = nodeImmutable( PropertyNode, 'float', 'Iridescence' );
  38. export const iridescenceIOR = nodeImmutable( PropertyNode, 'float', 'IridescenceIOR' );
  39. export const iridescenceThickness = nodeImmutable( PropertyNode, 'float', 'IridescenceThickness' );
  40. export const alphaT = nodeImmutable( PropertyNode, 'float', 'AlphaT' );
  41. export const anisotropy = nodeImmutable( PropertyNode, 'float', 'Anisotropy' );
  42. export const anisotropyT = nodeImmutable( PropertyNode, 'vec3', 'AnisotropyT' );
  43. export const anisotropyB = nodeImmutable( PropertyNode, 'vec3', 'AnisotropyB' );
  44. export const specularColor = nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
  45. export const specularF90 = nodeImmutable( PropertyNode, 'float', 'SpecularF90' );
  46. export const shininess = nodeImmutable( PropertyNode, 'float', 'Shininess' );
  47. export const output = nodeImmutable( PropertyNode, 'vec4', 'Output' );
  48. export const dashSize = nodeImmutable( PropertyNode, 'float', 'dashSize' );
  49. export const gapSize = nodeImmutable( PropertyNode, 'float', 'gapSize' );
  50. export const pointWidth = nodeImmutable( PropertyNode, 'float', 'pointWidth' );
  51. export const ior = nodeImmutable( PropertyNode, 'float', 'IOR' );
  52. export const transmission = nodeImmutable( PropertyNode, 'float', 'Transmission' );
  53. export const thickness = nodeImmutable( PropertyNode, 'float', 'Thickness' );
  54. export const attenuationDistance = nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );
  55. export const attenuationColor = nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );
  56. export const dispersion = nodeImmutable( PropertyNode, 'float', 'Dispersion' );
  57. addNodeClass( 'PropertyNode', PropertyNode );