ShaderNodeElements.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // accessors
  2. import CubeTextureNode from '../accessors/CubeTextureNode.js';
  3. import InstanceNode from '../accessors/InstanceNode.js';
  4. import ReflectVectorNode from '../accessors/ReflectVectorNode.js';
  5. import SkinningNode from '../accessors/SkinningNode.js';
  6. import ExtendedMaterialNode from '../accessors/ExtendedMaterialNode.js';
  7. // display
  8. import BlendModeNode from '../display/BlendModeNode.js';
  9. import ColorAdjustmentNode from '../display/ColorAdjustmentNode.js';
  10. import ColorSpaceNode from '../display/ColorSpaceNode.js';
  11. import NormalMapNode from '../display/NormalMapNode.js';
  12. import PosterizeNode from '../display/PosterizeNode.js';
  13. import ToneMappingNode from '../display/ToneMappingNode.js';
  14. import ViewportNode from '../display/ViewportNode.js';
  15. // lighting
  16. import LightsNode from '../lighting/LightsNode.js';
  17. //import LightingNode from '../lighting/LightingNode.js';
  18. import LightingContextNode from '../lighting/LightingContextNode.js';
  19. // utils
  20. import EquirectUVNode from '../utils/EquirectUVNode.js';
  21. import MatcapUVNode from '../utils/MatcapUVNode.js';
  22. import OscNode from '../utils/OscNode.js';
  23. import RemapNode from '../utils/RemapNode.js';
  24. import RotateUVNode from '../utils/RotateUVNode.js';
  25. import SpecularMIPLevelNode from '../utils/SpecularMIPLevelNode.js';
  26. import SpriteSheetUVNode from '../utils/SpriteSheetUVNode.js';
  27. import TimerNode from '../utils/TimerNode.js';
  28. import TriplanarTexturesNode from '../utils/TriplanarTexturesNode.js';
  29. // geometry
  30. import RangeNode from '../geometry/RangeNode.js';
  31. // procedural
  32. import CheckerNode from '../procedural/CheckerNode.js';
  33. // fog
  34. import FogNode from '../fog/FogNode.js';
  35. import FogRangeNode from '../fog/FogRangeNode.js';
  36. import FogExp2Node from '../fog/FogExp2Node.js';
  37. // shader node utils
  38. import { nodeObject, nodeProxy, nodeImmutable } from './ShaderNode.js';
  39. //
  40. // Node Material Shader Syntax
  41. //
  42. // shader node base
  43. export * from './ShaderNodeBaseElements.js';
  44. // functions
  45. export { default as BRDF_BlinnPhong } from '../functions/BSDF/BRDF_BlinnPhong.js';
  46. export { default as BRDF_GGX } from '../functions/BSDF/BRDF_GGX.js';
  47. export { default as BRDF_Lambert } from '../functions/BSDF/BRDF_Lambert.js';
  48. export { default as D_GGX } from '../functions/BSDF/D_GGX.js';
  49. export { default as DFGApprox } from '../functions/BSDF/DFGApprox.js';
  50. export { default as F_Schlick } from '../functions/BSDF/F_Schlick.js';
  51. export { default as V_GGX_SmithCorrelated } from '../functions/BSDF/V_GGX_SmithCorrelated.js';
  52. export { default as getDistanceAttenuation } from '../functions/light/getDistanceAttenuation.js';
  53. export { default as getGeometryRoughness } from '../functions/material/getGeometryRoughness.js';
  54. export { default as getRoughness } from '../functions/material/getRoughness.js';
  55. export { default as phongLightingModel } from '../functions/PhongLightingModel.js';
  56. export { default as physicalLightingModel } from '../functions/PhysicalLightingModel.js';
  57. // accessors
  58. export const cubeTexture = nodeProxy( CubeTextureNode );
  59. export const instance = nodeProxy( InstanceNode );
  60. export const reflectVector = nodeImmutable( ReflectVectorNode );
  61. export const skinning = nodeProxy( SkinningNode );
  62. // material
  63. export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
  64. // display
  65. export const burn = nodeProxy( BlendModeNode, BlendModeNode.BURN );
  66. export const dodge = nodeProxy( BlendModeNode, BlendModeNode.DODGE );
  67. export const overlay = nodeProxy( BlendModeNode, BlendModeNode.OVERLAY );
  68. export const screen = nodeProxy( BlendModeNode, BlendModeNode.SCREEN );
  69. export const saturation = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.SATURATION );
  70. export const vibrance = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.VIBRANCE );
  71. export const hue = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.HUE );
  72. export const colorSpace = ( node, encoding ) => nodeObject( new ColorSpaceNode( null, nodeObject( node ) ).fromEncoding( encoding ) );
  73. export const normalMap = nodeProxy( NormalMapNode );
  74. export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
  75. export const posterize = nodeProxy( PosterizeNode );
  76. export const viewportCoordinate = nodeImmutable( ViewportNode, ViewportNode.COORDINATE );
  77. export const viewportResolution = nodeImmutable( ViewportNode, ViewportNode.RESOLUTION );
  78. export const viewportTopLeft = nodeImmutable( ViewportNode, ViewportNode.TOP_LEFT );
  79. export const viewportBottomLeft = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_LEFT );
  80. export const viewportTopRight = nodeImmutable( ViewportNode, ViewportNode.TOP_RIGHT );
  81. export const viewportBottomRight = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_RIGHT );
  82. // lighting
  83. //export const lighting = nodeProxy( LightingNode ); // abstract
  84. //export const light; // still needs to be added
  85. export const lights = ( lights ) => nodeObject( new LightsNode().fromLights( lights ) );
  86. export const lightingContext = nodeProxy( LightingContextNode );
  87. // utils
  88. export const matcapUV = nodeImmutable( MatcapUVNode );
  89. export const equirectUV = nodeProxy( EquirectUVNode );
  90. export const specularMIPLevel = nodeProxy( SpecularMIPLevelNode );
  91. export const oscSine = nodeProxy( OscNode, OscNode.SINE );
  92. export const oscSquare = nodeProxy( OscNode, OscNode.SQUARE );
  93. export const oscTriangle = nodeProxy( OscNode, OscNode.TRIANGLE );
  94. export const oscSawtooth = nodeProxy( OscNode, OscNode.SAWTOOTH );
  95. export const remap = nodeProxy( RemapNode, null, null, { doClamp: false } );
  96. export const remapClamp = nodeProxy( RemapNode );
  97. export const rotateUV = nodeProxy( RotateUVNode );
  98. export const spritesheetUV = nodeProxy( SpriteSheetUVNode );
  99. // @TODO: add supports to use node in timeScale
  100. export const timerLocal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.LOCAL, timeScale, value ) );
  101. export const timerGlobal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.GLOBAL, timeScale, value ) );
  102. export const timerDelta = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.DELTA, timeScale, value ) );
  103. export const frameId = nodeImmutable( TimerNode, TimerNode.FRAME );
  104. export const triplanarTextures = nodeProxy( TriplanarTexturesNode );
  105. export const triplanarTexture = ( texture, ...params ) => triplanarTextures( texture, texture, texture, ...params );
  106. // geometry
  107. export const range = ( min, max ) => nodeObject( new RangeNode( min, max ) );
  108. // procedural
  109. export const checker = nodeProxy( CheckerNode );
  110. // fog
  111. export const fog = nodeProxy( FogNode );
  112. export const rangeFog = nodeProxy( FogRangeNode );
  113. export const densityFog = nodeProxy( FogExp2Node );