super-three 0.135.0 → 0.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/build/three.js +527 -332
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +752 -370
  4. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  5. package/examples/js/animation/CCDIKSolver.js +0 -1
  6. package/examples/js/animation/MMDPhysics.js +1 -3
  7. package/examples/js/controls/ArcballControls.js +38 -52
  8. package/examples/js/controls/TransformControls.js +24 -1
  9. package/examples/js/curves/CurveExtras.js +0 -2
  10. package/examples/js/effects/AsciiEffect.js +2 -9
  11. package/examples/js/exporters/GLTFExporter.js +1 -1
  12. package/examples/js/geometries/TeapotGeometry.js +0 -1
  13. package/examples/js/interactive/SelectionBox.js +2 -0
  14. package/examples/js/interactive/SelectionHelper.js +22 -7
  15. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  16. package/examples/js/loaders/AMFLoader.js +0 -2
  17. package/examples/js/loaders/ColladaLoader.js +1 -2
  18. package/examples/js/loaders/EXRLoader.js +185 -262
  19. package/examples/js/loaders/FBXLoader.js +3 -4
  20. package/examples/js/loaders/GLTFLoader.js +2 -2
  21. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
  22. package/examples/js/loaders/KTX2Loader.js +11 -2
  23. package/examples/js/loaders/KTXLoader.js +1 -1
  24. package/examples/js/loaders/LDrawLoader.js +26 -30
  25. package/examples/js/loaders/LUT3dlLoader.js +2 -0
  26. package/examples/js/loaders/LUTCubeLoader.js +2 -0
  27. package/examples/js/loaders/MMDLoader.js +0 -1
  28. package/examples/js/loaders/NRRDLoader.js +9 -2
  29. package/examples/js/loaders/OBJLoader.js +0 -2
  30. package/examples/js/loaders/PLYLoader.js +1 -1
  31. package/examples/js/loaders/RGBELoader.js +0 -15
  32. package/examples/js/loaders/RGBMLoader.js +55 -5
  33. package/examples/js/loaders/SVGLoader.js +2 -2
  34. package/examples/js/loaders/VOXLoader.js +1 -0
  35. package/examples/js/loaders/VRMLLoader.js +2 -1
  36. package/examples/js/math/ImprovedNoise.js +1 -1
  37. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  38. package/examples/js/objects/Lensflare.js +2 -10
  39. package/examples/js/objects/Reflector.js +7 -0
  40. package/examples/js/objects/Refractor.js +7 -0
  41. package/examples/js/objects/Sky.js +1 -1
  42. package/examples/js/objects/Water.js +2 -2
  43. package/examples/js/objects/Water2.js +4 -7
  44. package/examples/js/postprocessing/GlitchPass.js +3 -1
  45. package/examples/js/postprocessing/SSAOPass.js +1 -0
  46. package/examples/js/shaders/ConvolutionShader.js +0 -1
  47. package/examples/js/shaders/FXAAShader.js +1 -1
  48. package/examples/js/shaders/FilmShader.js +1 -1
  49. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  50. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  51. package/examples/js/shaders/SSRShader.js +1 -1
  52. package/examples/js/shaders/SSRrShader.js +1 -1
  53. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  54. package/examples/js/utils/GeometryUtils.js +1 -1
  55. package/examples/js/utils/RoughnessMipmapper.js +18 -29
  56. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  57. package/examples/jsm/animation/MMDPhysics.js +0 -2
  58. package/examples/jsm/controls/ArcballControls.js +27 -56
  59. package/examples/jsm/controls/TransformControls.js +24 -1
  60. package/examples/jsm/curves/CurveExtras.js +0 -2
  61. package/examples/jsm/effects/AsciiEffect.js +2 -9
  62. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  63. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  64. package/examples/jsm/interactive/SelectionBox.js +1 -0
  65. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  66. package/examples/jsm/libs/flow.module.js +256 -136
  67. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  68. package/examples/jsm/loaders/AMFLoader.js +0 -2
  69. package/examples/jsm/loaders/ColladaLoader.js +1 -2
  70. package/examples/jsm/loaders/EXRLoader.js +184 -293
  71. package/examples/jsm/loaders/FBXLoader.js +3 -4
  72. package/examples/jsm/loaders/GLTFLoader.js +2 -2
  73. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
  74. package/examples/jsm/loaders/KTX2Loader.js +13 -4
  75. package/examples/jsm/loaders/KTXLoader.js +1 -1
  76. package/examples/jsm/loaders/LDrawLoader.js +23 -24
  77. package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
  78. package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
  79. package/examples/jsm/loaders/MMDLoader.js +0 -1
  80. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  81. package/examples/jsm/loaders/OBJLoader.js +0 -2
  82. package/examples/jsm/loaders/PLYLoader.js +1 -1
  83. package/examples/jsm/loaders/RGBELoader.js +0 -20
  84. package/examples/jsm/loaders/RGBMLoader.js +61 -7
  85. package/examples/jsm/loaders/SVGLoader.js +2 -2
  86. package/examples/jsm/loaders/TDSLoader.js +30 -9
  87. package/examples/jsm/loaders/VOXLoader.js +1 -0
  88. package/examples/jsm/loaders/VRMLLoader.js +2 -1
  89. package/examples/jsm/math/ImprovedNoise.js +1 -1
  90. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  91. package/examples/jsm/node-editor/NodeEditor.js +23 -22
  92. package/examples/jsm/node-editor/examples/rim.json +1 -1
  93. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +48 -9
  94. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  95. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  96. package/examples/jsm/nodes/materials/nodes/StandardNode.js +1 -0
  97. package/examples/jsm/nodes/math/MathNode.js +12 -0
  98. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  99. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  100. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -116
  101. package/examples/jsm/objects/Lensflare.js +3 -14
  102. package/examples/jsm/objects/Reflector.js +7 -0
  103. package/examples/jsm/objects/Refractor.js +7 -0
  104. package/examples/jsm/objects/Sky.js +1 -1
  105. package/examples/jsm/objects/Water.js +2 -2
  106. package/examples/jsm/objects/Water2.js +4 -8
  107. package/examples/jsm/postprocessing/GlitchPass.js +3 -1
  108. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  109. package/examples/jsm/postprocessing/SSAOPass.js +1 -0
  110. package/examples/jsm/renderers/nodes/Nodes.js +1 -0
  111. package/examples/jsm/renderers/nodes/ShaderNode.js +7 -6
  112. package/examples/jsm/renderers/nodes/core/InputNode.js +1 -1
  113. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +1 -1
  114. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +26 -31
  115. package/examples/jsm/renderers/nodes/functions/BSDFs.js +2 -2
  116. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  117. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +1 -1
  118. package/examples/jsm/renderers/nodes/math/MathNode.js +5 -3
  119. package/examples/jsm/renderers/nodes/math/OperatorNode.js +2 -2
  120. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  121. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +14 -14
  122. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +7 -6
  123. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +1 -1
  124. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +42 -61
  125. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +2 -2
  126. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +0 -1
  127. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +30 -4
  128. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  129. package/examples/jsm/shaders/FXAAShader.js +1 -1
  130. package/examples/jsm/shaders/FilmShader.js +1 -1
  131. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  132. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  133. package/examples/jsm/shaders/SSRShader.js +1 -1
  134. package/examples/jsm/shaders/SSRrShader.js +1 -1
  135. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  136. package/examples/jsm/utils/GeometryUtils.js +1 -1
  137. package/examples/jsm/utils/RoughnessMipmapper.js +19 -32
  138. package/examples/jsm/utils/WorkerPool.js +11 -11
  139. package/package.json +15 -9
  140. package/src/Three.Legacy.js +12 -0
  141. package/src/Three.js +1 -2
  142. package/src/constants.js +1 -7
  143. package/src/core/Object3D.js +1 -1
  144. package/src/extras/PMREMGenerator.js +19 -110
  145. package/src/extras/core/Interpolations.js +1 -1
  146. package/src/geometries/LatheGeometry.js +70 -47
  147. package/src/helpers/CameraHelper.js +1 -1
  148. package/src/loaders/FileLoader.js +23 -6
  149. package/src/math/Color.js +0 -38
  150. package/src/math/Ray.js +2 -2
  151. package/src/math/Sphere.js +10 -1
  152. package/src/objects/Skeleton.js +1 -0
  153. package/src/renderers/WebGLRenderer.js +23 -16
  154. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  155. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  156. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -47
  157. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  158. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +27 -1
  159. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  160. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
  161. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  162. package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
  163. package/src/renderers/webgl/WebGLProgram.js +2 -19
  164. package/src/renderers/webgl/WebGLPrograms.js +191 -35
  165. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  166. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  167. package/src/renderers/webgl/WebGLState.js +45 -0
  168. package/src/renderers/webgl/WebGLTextures.js +195 -26
  169. package/src/renderers/webxr/WebXRManager.js +10 -3
  170. package/src/scenes/Scene.js +1 -1
  171. package/src/textures/DataTexture.js +0 -2
  172. package/src/textures/DataTexture2DArray.js +0 -2
  173. package/src/textures/DataTexture3D.js +0 -2
  174. package/src/textures/FramebufferTexture.js +25 -0
  175. package/src/utils.js +1 -37
@@ -1 +1 @@
1
- {"objects":{"52":{"x":1873,"y":248,"width":"300px","elements":[53,55,56,57,58],"id":52,"type":"StandardMaterialEditor"},"53":{"style":"blue","title":"Standard Material","id":53,"type":"TitleElement"},"55":{"inputLength":3,"links":[103],"label":"Color","id":55,"type":"LabelElement"},"56":{"inputLength":1,"label":"Opacity","id":56,"type":"LabelElement"},"57":{"inputLength":1,"label":"Metalness","id":57,"type":"LabelElement"},"58":{"inputLength":1,"links":[177],"label":"Roughness","id":58,"type":"LabelElement"},"64":{"x":506,"y":328,"width":"200px","elements":[65,67,68],"id":64,"type":"DotEditor"},"65":{"outputLength":1,"title":"Dot Product","id":65,"type":"TitleElement"},"67":{"inputLength":3,"links":[85],"label":"A","id":67,"type":"LabelElement"},"68":{"inputLength":3,"links":[73],"label":"B","id":68,"type":"LabelElement"},"72":{"x":33,"y":453,"width":"300px","elements":[73,78],"id":72,"type":"Vector3Editor"},"73":{"outputLength":3,"title":"Vector 3","icon":"ti ti-box-multiple-3","id":73,"type":"TitleElement"},"75":{"value":0,"id":75,"type":"NumberInput"},"76":{"value":0,"id":76,"type":"NumberInput"},"77":{"value":1.54,"id":77,"type":"NumberInput"},"78":{"inputs":[75,76,77],"label":"Values","id":78,"type":"LabelElement"},"84":{"x":75,"y":278,"width":"250px","elements":[85,88],"id":84,"type":"NormalEditor"},"85":{"outputLength":3,"style":"red","title":"Normal","id":85,"type":"TitleElement"},"87":{"options":[{"name":"Local","value":"local"},{"name":"World","value":"world"},{"name":"View","value":"view"}],"value":"view","id":87,"type":"SelectInput"},"88":{"inputs":[87],"label":"Scope","id":88,"type":"LabelElement"},"92":{"x":846,"y":353,"width":"300px","elements":[93,97,96],"id":92,"type":"InvertEditor"},"93":{"outputLength":1,"title":"Invert / Negate","id":93,"type":"TitleElement"},"95":{"options":[{"name":"Invert ( 1 - Source )","value":"invert"},{"name":"Negate ( - Source )","value":"negate"}],"value":"invert","id":95,"type":"SelectInput"},"96":{"inputLength":1,"links":[65],"label":"Source","id":96,"type":"LabelElement"},"97":{"inputs":[95],"label":"Method","id":97,"type":"LabelElement"},"102":{"x":1459,"y":146,"width":"300px","elements":[103,105,106,107],"id":102,"type":"BlendEditor"},"103":{"outputLength":3,"title":"Blend","id":103,"type":"TitleElement"},"105":{"inputLength":3,"links":[113],"label":"Base","id":105,"type":"LabelElement"},"106":{"inputLength":3,"links":[133],"label":"Blend","id":106,"type":"LabelElement"},"107":{"inputLength":1,"links":[161],"label":"Opacity","id":107,"type":"LabelElement"},"112":{"x":846,"y":17,"width":"300px","elements":[113,120,121,122],"id":112,"type":"ColorEditor"},"113":{"outputLength":1,"title":"Color","icon":"ti ti-palette","id":113,"type":"TitleElement"},"115":{"value":5058,"id":115,"type":"ColorInput"},"116":{"value":"#13C200","id":116,"type":"StringInput"},"117":{"min":0,"max":1,"step":0.01,"value":0,"id":117,"type":"NumberInput"},"118":{"min":0,"max":1,"step":0.01,"value":0.075,"id":118,"type":"NumberInput"},"119":{"min":0,"max":1,"step":0.01,"value":0.761,"id":119,"type":"NumberInput"},"120":{"inputs":[115],"label":"Value","id":120,"type":"LabelElement"},"121":{"inputs":[116],"label":"Hex","id":121,"type":"LabelElement"},"122":{"inputs":[117,118,119],"label":"RGB","id":122,"type":"LabelElement"},"132":{"x":844,"y":189,"width":"300px","elements":[133,140,141,142],"id":132,"type":"ColorEditor"},"133":{"outputLength":1,"title":"Color","icon":"ti ti-palette","id":133,"type":"TitleElement"},"135":{"value":16711680,"id":135,"type":"ColorInput"},"136":{"value":"#FF0000","id":136,"type":"StringInput"},"137":{"min":0,"max":1,"step":0.01,"value":1,"id":137,"type":"NumberInput"},"138":{"min":0,"max":1,"step":0.01,"value":0,"id":138,"type":"NumberInput"},"139":{"min":0,"max":1,"step":0.01,"value":0,"id":139,"type":"NumberInput"},"140":{"inputs":[135],"label":"Value","id":140,"type":"LabelElement"},"141":{"inputs":[136],"label":"Hex","id":141,"type":"LabelElement"},"142":{"inputs":[137,138,139],"label":"RGB","id":142,"type":"LabelElement"},"160":{"x":1241,"y":361,"width":"200px","elements":[161,163,164],"id":160,"type":"PowerEditor"},"161":{"outputLength":1,"title":"Power","id":161,"type":"TitleElement"},"163":{"inputLength":1,"links":[93],"label":"A","id":163,"type":"LabelElement"},"164":{"inputLength":1,"links":[169],"label":"B","id":164,"type":"LabelElement"},"168":{"x":852,"y":503,"width":"250px","elements":[169,172],"id":168,"type":"FloatEditor"},"169":{"outputLength":1,"title":"Float","icon":"ti ti-box-multiple-1","id":169,"type":"TitleElement"},"171":{"value":1.32,"id":171,"type":"NumberInput"},"172":{"inputs":[171],"label":"Value","id":172,"type":"LabelElement"},"176":{"x":1482,"y":449,"width":"300px","elements":[177,187,183,184,185],"id":176,"type":"SliderEditor"},"177":{"outputLength":1,"title":"Slider","icon":"ti ti-adjustments-horizontal","id":177,"type":"TitleElement"},"179":{"min":0,"max":1,"value":1,"id":179,"type":"SliderInput"},"181":{"value":0,"id":181,"type":"NumberInput"},"182":{"value":1,"id":182,"type":"NumberInput"},"183":{"inputs":[181],"label":"Min.","id":183,"type":"LabelElement"},"184":{"inputs":[182],"label":"Max.","id":184,"type":"LabelElement"},"185":{"inputs":[186],"id":185,"type":"Element"},"186":{"value":"More","id":186,"type":"ButtonInput"},"187":{"inputs":[179],"label":"Value","id":187,"type":"LabelElement"}},"nodes":[52,64,72,84,92,102,112,132,160,168,176],"id":0,"type":"Canvas"}
1
+ {"objects":{"52":{"x":1873,"y":248,"width":"300px","elements":[53,55,56,57,58],"id":52,"type":"StandardMaterialEditor"},"53":{"style":"blue","title":"Standard Material","id":53,"type":"TitleElement"},"55":{"inputLength":3,"links":[103],"label":"Color","id":55,"type":"LabelElement"},"56":{"inputLength":1,"label":"Opacity","id":56,"type":"LabelElement"},"57":{"inputLength":1,"label":"Metalness","id":57,"type":"LabelElement"},"58":{"inputLength":1,"links":[177],"label":"Roughness","id":58,"type":"LabelElement"},"64":{"x":506,"y":328,"width":"200px","elements":[65,67,68],"id":64,"type":"DotEditor"},"65":{"outputLength":1,"title":"Dot Product","id":65,"type":"TitleElement"},"67":{"inputLength":3,"links":[85],"label":"A","id":67,"type":"LabelElement"},"68":{"inputLength":3,"links":[73],"label":"B","id":68,"type":"LabelElement"},"72":{"x":33,"y":453,"width":"300px","elements":[73,78],"id":72,"type":"Vector3Editor"},"73":{"outputLength":3,"title":"Vector 3","icon":"ti ti-box-multiple-3","id":73,"type":"TitleElement"},"75":{"value":0,"id":75,"type":"NumberInput"},"76":{"value":0,"id":76,"type":"NumberInput"},"77":{"value":1.0,"id":77,"type":"NumberInput"},"78":{"inputs":[75,76,77],"label":"Values","id":78,"type":"LabelElement"},"84":{"x":75,"y":278,"width":"250px","elements":[85,88],"id":84,"type":"NormalEditor"},"85":{"outputLength":3,"style":"red","title":"Normal","id":85,"type":"TitleElement"},"87":{"options":[{"name":"Local","value":"local"},{"name":"World","value":"world"},{"name":"View","value":"view"}],"value":"view","id":87,"type":"SelectInput"},"88":{"inputs":[87],"label":"Scope","id":88,"type":"LabelElement"},"92":{"x":846,"y":353,"width":"300px","elements":[93,97,96],"id":92,"type":"InvertEditor"},"93":{"outputLength":1,"title":"Invert / Negate","id":93,"type":"TitleElement"},"95":{"options":[{"name":"Invert ( 1 - Source )","value":"invert"},{"name":"Negate ( - Source )","value":"negate"}],"value":"invert","id":95,"type":"SelectInput"},"96":{"inputLength":1,"links":[65],"label":"Source","id":96,"type":"LabelElement"},"97":{"inputs":[95],"label":"Method","id":97,"type":"LabelElement"},"102":{"x":1459,"y":146,"width":"300px","elements":[103,105,106,107],"id":102,"type":"BlendEditor"},"103":{"outputLength":3,"title":"Blend","id":103,"type":"TitleElement"},"105":{"inputLength":3,"links":[113],"label":"Base","id":105,"type":"LabelElement"},"106":{"inputLength":3,"links":[133],"label":"Blend","id":106,"type":"LabelElement"},"107":{"inputLength":1,"links":[161],"label":"Opacity","id":107,"type":"LabelElement"},"112":{"x":846,"y":17,"width":"300px","elements":[113,120,121,122],"id":112,"type":"ColorEditor"},"113":{"outputLength":1,"title":"Color","icon":"ti ti-palette","id":113,"type":"TitleElement"},"115":{"value":5058,"id":115,"type":"ColorInput"},"116":{"value":"#13C200","id":116,"type":"StringInput"},"117":{"min":0,"max":1,"step":0.01,"value":0,"id":117,"type":"NumberInput"},"118":{"min":0,"max":1,"step":0.01,"value":0.075,"id":118,"type":"NumberInput"},"119":{"min":0,"max":1,"step":0.01,"value":0.761,"id":119,"type":"NumberInput"},"120":{"inputs":[115],"label":"Value","id":120,"type":"LabelElement"},"121":{"inputs":[116],"label":"Hex","id":121,"type":"LabelElement"},"122":{"inputs":[117,118,119],"label":"RGB","id":122,"type":"LabelElement"},"132":{"x":844,"y":189,"width":"300px","elements":[133,140,141,142],"id":132,"type":"ColorEditor"},"133":{"outputLength":1,"title":"Color","icon":"ti ti-palette","id":133,"type":"TitleElement"},"135":{"value":16711680,"id":135,"type":"ColorInput"},"136":{"value":"#FF0000","id":136,"type":"StringInput"},"137":{"min":0,"max":1,"step":0.01,"value":1,"id":137,"type":"NumberInput"},"138":{"min":0,"max":1,"step":0.01,"value":0,"id":138,"type":"NumberInput"},"139":{"min":0,"max":1,"step":0.01,"value":0,"id":139,"type":"NumberInput"},"140":{"inputs":[135],"label":"Value","id":140,"type":"LabelElement"},"141":{"inputs":[136],"label":"Hex","id":141,"type":"LabelElement"},"142":{"inputs":[137,138,139],"label":"RGB","id":142,"type":"LabelElement"},"160":{"x":1241,"y":361,"width":"200px","elements":[161,163,164],"id":160,"type":"PowerEditor"},"161":{"outputLength":1,"title":"Power","id":161,"type":"TitleElement"},"163":{"inputLength":1,"links":[93],"label":"A","id":163,"type":"LabelElement"},"164":{"inputLength":1,"links":[169],"label":"B","id":164,"type":"LabelElement"},"168":{"x":852,"y":503,"width":"250px","elements":[169,172],"id":168,"type":"FloatEditor"},"169":{"outputLength":1,"title":"Float","icon":"ti ti-box-multiple-1","id":169,"type":"TitleElement"},"171":{"value":1.32,"id":171,"type":"NumberInput"},"172":{"inputs":[171],"label":"Value","id":172,"type":"LabelElement"},"176":{"x":1482,"y":449,"width":"300px","elements":[177,187,183,184,185],"id":176,"type":"SliderEditor"},"177":{"outputLength":1,"title":"Slider","icon":"ti ti-adjustments-horizontal","id":177,"type":"TitleElement"},"179":{"min":0,"max":1,"value":1,"id":179,"type":"SliderInput"},"181":{"value":0,"id":181,"type":"NumberInput"},"182":{"value":1,"id":182,"type":"NumberInput"},"183":{"inputs":[181],"label":"Min.","id":183,"type":"LabelElement"},"184":{"inputs":[182],"label":"Max.","id":184,"type":"LabelElement"},"185":{"inputs":[186],"id":185,"type":"Element"},"186":{"value":"More","id":186,"type":"ButtonInput"},"187":{"inputs":[179],"label":"Value","id":187,"type":"LabelElement"}},"nodes":[52,64,72,84,92,102,112,132,160,168,176],"id":0,"type":"Canvas"}
@@ -1,10 +1,7 @@
1
- import { ObjectNode, LabelElement } from '../../libs/flow.module.js';
2
- import { MeshStandardNodeMaterial, ColorNode, FloatNode } from '../../renderers/nodes/Nodes.js';
1
+ import { ObjectNode, ColorInput, SliderInput, LabelElement } from '../../libs/flow.module.js';
2
+ import { MeshStandardNodeMaterial } from '../../renderers/nodes/Nodes.js';
3
3
  import * as THREE from 'three';
4
4
 
5
- const NULL_COLOR = new ColorNode();
6
- const NULL_FLOAT = new FloatNode();
7
-
8
5
  export class StandardMaterialEditor extends ObjectNode {
9
6
 
10
7
  constructor() {
@@ -22,6 +19,32 @@ export class StandardMaterialEditor extends ObjectNode {
22
19
  const metalness = new LabelElement( 'metalness' ).setInput( 1 );
23
20
  const roughness = new LabelElement( 'roughness' ).setInput( 1 );
24
21
 
22
+ color.add( new ColorInput( material.color.getHex() ).onChange( ( input ) => {
23
+
24
+ material.color.setHex( input.getValue() );
25
+
26
+ } ) );
27
+
28
+ opacity.add( new SliderInput( material.opacity, 0, 1 ).onChange( ( input ) => {
29
+
30
+ material.opacity = input.getValue();
31
+
32
+ this.updateTransparent();
33
+
34
+ } ) );
35
+
36
+ metalness.add( new SliderInput( material.metalness, 0, 1 ).onChange( ( input ) => {
37
+
38
+ material.metalness = input.getValue();
39
+
40
+ } ) );
41
+
42
+ roughness.add( new SliderInput( material.roughness, 0, 1 ).onChange( ( input ) => {
43
+
44
+ material.roughness = input.getValue();
45
+
46
+ } ) );
47
+
25
48
  color.onConnect( () => this.update(), true );
26
49
  opacity.onConnect( () => this.update(), true );
27
50
  metalness.onConnect( () => this.update(), true );
@@ -47,16 +70,22 @@ export class StandardMaterialEditor extends ObjectNode {
47
70
 
48
71
  const { material, color, opacity, roughness, metalness } = this;
49
72
 
50
- material.colorNode = color.linkedExtra || NULL_COLOR;
73
+ color.setEnabledInputs( ! color.linkedExtra );
74
+ opacity.setEnabledInputs( ! opacity.linkedExtra );
75
+ roughness.setEnabledInputs( ! roughness.linkedExtra );
76
+ metalness.setEnabledInputs( ! metalness.linkedExtra );
77
+
78
+ material.colorNode = color.linkedExtra;
51
79
 
52
80
  material.opacityNode = opacity.linkedExtra || null;
53
- material.transparent = opacity.linkedExtra ? true : false;
54
81
 
55
- material.metalnessNode = metalness.linkedExtra || NULL_FLOAT;
56
- material.roughnessNode = roughness.linkedExtra || NULL_FLOAT;
82
+ material.metalnessNode = metalness.linkedExtra;
83
+ material.roughnessNode = roughness.linkedExtra;
57
84
 
58
85
  material.dispose();
59
86
 
87
+ this.updateTransparent();
88
+
60
89
  // TODO: Fix on NodeMaterial System
61
90
  material.customProgramCacheKey = () => {
62
91
 
@@ -66,4 +95,14 @@ export class StandardMaterialEditor extends ObjectNode {
66
95
 
67
96
  }
68
97
 
98
+ updateTransparent() {
99
+
100
+ const { material, opacity } = this;
101
+
102
+ material.transparent = opacity.linkedExtra || material.opacity < 1 ? true : false;
103
+
104
+ opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
105
+
106
+ }
107
+
69
108
  }
@@ -33,7 +33,7 @@ export class OscillatorEditor extends ObjectNode {
33
33
  node.timeNode = timeElement.linkedExtra || NULL_VALUE;
34
34
 
35
35
  } );
36
-
36
+
37
37
  this.add( new LabelElement( 'Method' ).add( methodInput ) )
38
38
  .add( timeElement );
39
39
 
@@ -4,7 +4,7 @@ import {
4
4
  CubeUVReflectionMapping,
5
5
  CubeUVRefractionMapping,
6
6
  LinearEncoding,
7
- GammaEncoding
7
+ sRGBEncoding
8
8
  } from 'three';
9
9
 
10
10
  import { NodeUniform } from './NodeUniform.js';
@@ -951,7 +951,7 @@ class NodeBuilder {
951
951
 
952
952
  if ( encoding === LinearEncoding && this.context.gamma ) {
953
953
 
954
- encoding = GammaEncoding;
954
+ encoding = sRGBEncoding;
955
955
 
956
956
  }
957
957
 
@@ -32,6 +32,7 @@ class StandardNode extends Node {
32
32
  if ( useClearcoat ) {
33
33
 
34
34
  builder.define( 'CLEARCOAT' );
35
+ builder.define( 'USE_CLEARCOAT' );
35
36
 
36
37
  }
37
38
 
@@ -18,6 +18,14 @@ class MathNode extends TempNode {
18
18
 
19
19
  switch ( this.method ) {
20
20
 
21
+ // variable
22
+
23
+ case MathNode.ARCTAN:
24
+
25
+ return this.b ? 2 : 1;
26
+
27
+ // 3
28
+
21
29
  case MathNode.MIX:
22
30
  case MathNode.CLAMP:
23
31
  case MathNode.REFRACT:
@@ -26,6 +34,8 @@ class MathNode extends TempNode {
26
34
 
27
35
  return 3;
28
36
 
37
+ // 2
38
+
29
39
  case MathNode.MIN:
30
40
  case MathNode.MAX:
31
41
  case MathNode.MOD:
@@ -38,6 +48,8 @@ class MathNode extends TempNode {
38
48
 
39
49
  return 2;
40
50
 
51
+ // 1
52
+
41
53
  default:
42
54
 
43
55
  return 1;
@@ -90,7 +90,7 @@ class BumpMapNode extends TempNode {
90
90
  BumpMapNode.Nodes = ( function () {
91
91
 
92
92
  // Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
93
- // http://api.unrealengine.com/attachments/Engine/Rendering/LightingAndShadows/BumpMappingWithoutTangentSpace/mm_sfgrad_bump.pdf
93
+ // https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
94
94
 
95
95
  // Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
96
96
 
@@ -26,19 +26,15 @@ class TextureCubeUVNode extends TempNode {
26
26
  const bilinearCubeUV = new FunctionCallNode( TextureCubeUVNode.Nodes.bilinearCubeUV, [ texture, uv, mipInt ] );
27
27
 
28
28
  this.colorSpaceTL = this.colorSpaceTL || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
29
- this.colorSpaceTL.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
30
29
  this.colorSpaceTL.input.parse( bilinearCubeUV.build( builder ) + '.tl' );
31
30
 
32
31
  this.colorSpaceTR = this.colorSpaceTR || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
33
- this.colorSpaceTR.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
34
32
  this.colorSpaceTR.input.parse( bilinearCubeUV.build( builder ) + '.tr' );
35
33
 
36
34
  this.colorSpaceBL = this.colorSpaceBL || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
37
- this.colorSpaceBL.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
38
35
  this.colorSpaceBL.input.parse( bilinearCubeUV.build( builder ) + '.bl' );
39
36
 
40
37
  this.colorSpaceBR = this.colorSpaceBR || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
41
- this.colorSpaceBR.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
42
38
  this.colorSpaceBR.input.parse( bilinearCubeUV.build( builder ) + '.br' );
43
39
 
44
40
  // add a custom context for fix incompatibility with the core
@@ -230,6 +226,7 @@ TextureCubeUVNode.Nodes = ( function () {
230
226
 
231
227
  return TextureCubeUVData( tl, tr, br, bl, f );
232
228
  }`, [ TextureCubeUVData, getFace, getUV, cubeUV_maxMipLevel, cubeUV_minMipLevel, cubeUV_maxTileSize, cubeUV_minTileSize ] );
229
+
233
230
  bilinearCubeUV.useKeywords = false;
234
231
 
235
232
  // These defines must match with PMREMGenerator
@@ -1,17 +1,10 @@
1
1
  import {
2
- GammaEncoding,
3
2
  LinearEncoding,
4
- RGBEEncoding,
5
- RGBM7Encoding,
6
- RGBM16Encoding,
7
- RGBDEncoding,
8
3
  sRGBEncoding
9
4
  } from 'three';
10
5
 
11
6
  import { TempNode } from '../core/TempNode.js';
12
- import { FloatNode } from '../inputs/FloatNode.js';
13
7
  import { FunctionNode } from '../core/FunctionNode.js';
14
- import { ExpressionNode } from '../core/ExpressionNode.js';
15
8
 
16
9
  class ColorSpaceNode extends TempNode {
17
10
 
@@ -105,8 +98,6 @@ class ColorSpaceNode extends TempNode {
105
98
 
106
99
  ColorSpaceNode.Nodes = ( function () {
107
100
 
108
- // For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/
109
-
110
101
  const LinearToLinear = new FunctionNode( /* glsl */`
111
102
  vec4 LinearToLinear( in vec4 value ) {
112
103
 
@@ -115,22 +106,6 @@ ColorSpaceNode.Nodes = ( function () {
115
106
  }`
116
107
  );
117
108
 
118
- const GammaToLinear = new FunctionNode( /* glsl */`
119
- vec4 GammaToLinear( in vec4 value, in float gammaFactor ) {
120
-
121
- return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );
122
-
123
- }`
124
- );
125
-
126
- const LinearToGamma = new FunctionNode( /* glsl */`
127
- vec4 LinearToGamma( in vec4 value, in float gammaFactor ) {
128
-
129
- return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );
130
-
131
- }`
132
- );
133
-
134
109
  const sRGBToLinear = new FunctionNode( /* glsl */`
135
110
  vec4 sRGBToLinear( in vec4 value ) {
136
111
 
@@ -147,99 +122,19 @@ ColorSpaceNode.Nodes = ( function () {
147
122
  }`
148
123
  );
149
124
 
150
- const RGBEToLinear = new FunctionNode( /* glsl */`
151
- vec4 RGBEToLinear( in vec4 value ) {
152
-
153
- return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );
154
-
155
- }`
156
- );
157
-
158
- const LinearToRGBE = new FunctionNode( /* glsl */`
159
- vec4 LinearToRGBE( in vec4 value ) {
160
-
161
- float maxComponent = max( max( value.r, value.g ), value.b );
162
- float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );
163
- return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );
164
-
165
- }`
166
- );
167
-
168
- // reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html
169
-
170
- const RGBMToLinear = new FunctionNode( /* glsl */`
171
- vec3 RGBMToLinear( in vec4 value, in float maxRange ) {
172
-
173
- return vec4( value.xyz * value.w * maxRange, 1.0 );
174
-
175
- }`
176
- );
177
-
178
- const LinearToRGBM = new FunctionNode( /* glsl */`
179
- vec3 LinearToRGBM( in vec4 value, in float maxRange ) {
180
-
181
- float maxRGB = max( value.x, max( value.g, value.b ) );
182
- float M = clamp( maxRGB / maxRange, 0.0, 1.0 );
183
- M = ceil( M * 255.0 ) / 255.0;
184
- return vec4( value.rgb / ( M * maxRange ), M );
185
-
186
- }`
187
- );
188
-
189
- // reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html
190
-
191
- const RGBDToLinear = new FunctionNode( /* glsl */`
192
- vec3 RGBDToLinear( in vec4 value, in float maxRange ) {
193
-
194
- return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );
195
-
196
- }`
197
- );
198
-
199
- const LinearToRGBD = new FunctionNode( /* glsl */`
200
- vec3 LinearToRGBD( in vec4 value, in float maxRange ) {
201
-
202
- float maxRGB = max( value.x, max( value.g, value.b ) );
203
- float D = max( maxRange / maxRGB, 1.0 );
204
- D = clamp( floor( D ) / 255.0, 0.0, 1.0 );
205
- return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );
206
-
207
- }`
208
- );
209
-
210
125
  return {
211
126
  LinearToLinear: LinearToLinear,
212
- GammaToLinear: GammaToLinear,
213
- LinearToGamma: LinearToGamma,
214
127
  sRGBToLinear: sRGBToLinear,
215
- LinearTosRGB: LinearTosRGB,
216
- RGBEToLinear: RGBEToLinear,
217
- LinearToRGBE: LinearToRGBE,
218
- RGBMToLinear: RGBMToLinear,
219
- LinearToRGBM: LinearToRGBM,
220
- RGBDToLinear: RGBDToLinear,
221
- LinearToRGBD: LinearToRGBD
128
+ LinearTosRGB: LinearTosRGB
222
129
  };
223
130
 
224
131
  } )();
225
132
 
226
133
  ColorSpaceNode.LINEAR_TO_LINEAR = 'LinearToLinear';
227
134
 
228
- ColorSpaceNode.GAMMA_TO_LINEAR = 'GammaToLinear';
229
- ColorSpaceNode.LINEAR_TO_GAMMA = 'LinearToGamma';
230
-
231
135
  ColorSpaceNode.SRGB_TO_LINEAR = 'sRGBToLinear';
232
136
  ColorSpaceNode.LINEAR_TO_SRGB = 'LinearTosRGB';
233
137
 
234
- ColorSpaceNode.RGBE_TO_LINEAR = 'RGBEToLinear';
235
- ColorSpaceNode.LINEAR_TO_RGBE = 'LinearToRGBE';
236
-
237
- ColorSpaceNode.RGBM_TO_LINEAR = 'RGBMToLinear';
238
- ColorSpaceNode.LINEAR_TO_RGBM = 'LinearToRGBM';
239
-
240
- ColorSpaceNode.RGBD_TO_LINEAR = 'RGBDToLinear';
241
- ColorSpaceNode.LINEAR_TO_RGBD = 'LinearToRGBD';
242
-
243
138
  ColorSpaceNode.getEncodingComponents = function ( encoding ) {
244
139
 
245
140
  switch ( encoding ) {
@@ -248,16 +143,6 @@ ColorSpaceNode.getEncodingComponents = function ( encoding ) {
248
143
  return [ 'Linear' ];
249
144
  case sRGBEncoding:
250
145
  return [ 'sRGB' ];
251
- case RGBEEncoding:
252
- return [ 'RGBE' ];
253
- case RGBM7Encoding:
254
- return [ 'RGBM', new FloatNode( 7.0 ).setReadonly( true ) ];
255
- case RGBM16Encoding:
256
- return [ 'RGBM', new FloatNode( 16.0 ).setReadonly( true ) ];
257
- case RGBDEncoding:
258
- return [ 'RGBD', new FloatNode( 256.0 ).setReadonly( true ) ];
259
- case GammaEncoding:
260
- return [ 'Gamma', new ExpressionNode( 'float( GAMMA_FACTOR )', 'f' ) ];
261
146
 
262
147
  }
263
148
 
@@ -2,14 +2,12 @@ import {
2
2
  AdditiveBlending,
3
3
  Box2,
4
4
  BufferGeometry,
5
- ClampToEdgeWrapping,
6
5
  Color,
7
- DataTexture,
6
+ FramebufferTexture,
8
7
  InterleavedBuffer,
9
8
  InterleavedBufferAttribute,
10
9
  Mesh,
11
10
  MeshBasicMaterial,
12
- NearestFilter,
13
11
  RGBFormat,
14
12
  RawShaderMaterial,
15
13
  Vector2,
@@ -34,17 +32,8 @@ class Lensflare extends Mesh {
34
32
 
35
33
  // textures
36
34
 
37
- const tempMap = new DataTexture( new Uint8Array( 16 * 16 * 3 ), 16, 16, RGBFormat );
38
- tempMap.minFilter = NearestFilter;
39
- tempMap.magFilter = NearestFilter;
40
- tempMap.wrapS = ClampToEdgeWrapping;
41
- tempMap.wrapT = ClampToEdgeWrapping;
42
-
43
- const occlusionMap = new DataTexture( new Uint8Array( 16 * 16 * 3 ), 16, 16, RGBFormat );
44
- occlusionMap.minFilter = NearestFilter;
45
- occlusionMap.magFilter = NearestFilter;
46
- occlusionMap.wrapS = ClampToEdgeWrapping;
47
- occlusionMap.wrapT = ClampToEdgeWrapping;
35
+ const tempMap = new FramebufferTexture( 16, 16, RGBFormat );
36
+ const occlusionMap = new FramebufferTexture( 16, 16, RGBFormat );
48
37
 
49
38
  // material
50
39
 
@@ -193,6 +193,13 @@ class Reflector extends Mesh {
193
193
 
194
194
  };
195
195
 
196
+ this.dispose = function () {
197
+
198
+ renderTarget.dispose();
199
+ scope.material.dispose();
200
+
201
+ };
202
+
196
203
  }
197
204
 
198
205
  }
@@ -262,6 +262,13 @@ class Refractor extends Mesh {
262
262
 
263
263
  };
264
264
 
265
+ this.dispose = function () {
266
+
267
+ renderTarget.dispose();
268
+ scope.material.dispose();
269
+
270
+ };
271
+
265
272
  }
266
273
 
267
274
  }
@@ -13,7 +13,7 @@ import {
13
13
  * https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight
14
14
  *
15
15
  * First implemented by Simon Wallner
16
- * http://www.simonwallner.at/projects/atmospheric-scattering
16
+ * http://simonwallner.at/project/atmospheric-scattering/
17
17
  *
18
18
  * Improved by Martin Upitis
19
19
  * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR
@@ -18,8 +18,8 @@ import {
18
18
 
19
19
  /**
20
20
  * Work based on :
21
- * http://slayvin.net : Flat mirror for three.js
22
- * http://www.adelphi.edu/~stemkoski : An implementation of water shader based on the flat mirror
21
+ * https://github.com/Slayvin: Flat mirror for three.js
22
+ * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror
23
23
  * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL
24
24
  */
25
25
 
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  Clock,
3
3
  Color,
4
- LinearEncoding,
5
4
  Matrix4,
6
5
  Mesh,
7
6
  RepeatWrapping,
@@ -17,8 +16,8 @@ import { Refractor } from '../objects/Refractor.js';
17
16
 
18
17
  /**
19
18
  * References:
20
- * http://www.valvesoftware.com/publications/2010/siggraph2010_vlachos_waterflow.pdf
21
- * http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html
19
+ * https://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf
20
+ * http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html
22
21
  *
23
22
  */
24
23
 
@@ -41,7 +40,6 @@ class Water extends Mesh {
41
40
  const reflectivity = options.reflectivity || 0.02;
42
41
  const scale = options.scale || 1;
43
42
  const shader = options.shader || Water.WaterShader;
44
- const encoding = options.encoding !== undefined ? options.encoding : LinearEncoding;
45
43
 
46
44
  const textureLoader = new TextureLoader();
47
45
 
@@ -73,15 +71,13 @@ class Water extends Mesh {
73
71
  const reflector = new Reflector( geometry, {
74
72
  textureWidth: textureWidth,
75
73
  textureHeight: textureHeight,
76
- clipBias: clipBias,
77
- encoding: encoding
74
+ clipBias: clipBias
78
75
  } );
79
76
 
80
77
  const refractor = new Refractor( geometry, {
81
78
  textureWidth: textureWidth,
82
79
  textureHeight: textureHeight,
83
- clipBias: clipBias,
84
- encoding: encoding
80
+ clipBias: clipBias
85
81
  } );
86
82
 
87
83
  reflector.matrixAutoUpdate = false;
@@ -106,7 +106,9 @@ class GlitchPass extends Pass {
106
106
 
107
107
  }
108
108
 
109
- return new DataTexture( data_arr, dt_size, dt_size, RGBFormat, FloatType );
109
+ const texture = new DataTexture( data_arr, dt_size, dt_size, RGBFormat, FloatType );
110
+ texture.needsUpdate = true;
111
+ return texture;
110
112
 
111
113
  }
112
114
 
@@ -78,7 +78,7 @@ class SAOPass extends Pass {
78
78
  format: RGBAFormat
79
79
  } );
80
80
  this.depthRenderTarget = this.normalRenderTarget.clone();
81
-
81
+
82
82
  let depthTexture;
83
83
 
84
84
  if ( this.supportsDepthTextureExtension ) {
@@ -413,6 +413,7 @@ class SSAOPass extends Pass {
413
413
  this.noiseTexture = new DataTexture( data, width, height, RGBAFormat, FloatType );
414
414
  this.noiseTexture.wrapS = RepeatWrapping;
415
415
  this.noiseTexture.wrapT = RepeatWrapping;
416
+ this.noiseTexture.needsUpdate = true;
416
417
 
417
418
  }
418
419
 
@@ -151,6 +151,7 @@ export {
151
151
 
152
152
  // utils
153
153
  ArrayElementNode,
154
+ ConvertNode,
154
155
  JoinNode,
155
156
  SplitNode,
156
157
  SpriteSheetUVNode,
@@ -209,9 +209,9 @@ export const cond = ( ...params ) => {
209
209
 
210
210
  export const vec2 = ( ...params ) => {
211
211
 
212
- if ( params[0]?.isNode === true ) {
212
+ if ( params[ 0 ]?.isNode === true ) {
213
213
 
214
- return ShaderNodeObject( new ConvertNode( params[0], 'vec2' ) );
214
+ return ShaderNodeObject( new ConvertNode( params[ 0 ], 'vec2' ) );
215
215
 
216
216
  } else {
217
217
 
@@ -231,9 +231,9 @@ export const vec2 = ( ...params ) => {
231
231
 
232
232
  export const vec3 = ( ...params ) => {
233
233
 
234
- if ( params[0]?.isNode === true ) {
234
+ if ( params[ 0 ]?.isNode === true ) {
235
235
 
236
- return ShaderNodeObject( new ConvertNode( params[0], 'vec3' ) );
236
+ return ShaderNodeObject( new ConvertNode( params[ 0 ], 'vec3' ) );
237
237
 
238
238
  } else {
239
239
 
@@ -253,9 +253,9 @@ export const vec3 = ( ...params ) => {
253
253
 
254
254
  export const vec4 = ( ...params ) => {
255
255
 
256
- if ( params[0]?.isNode === true ) {
256
+ if ( params[ 0 ]?.isNode === true ) {
257
257
 
258
- return ShaderNodeObject( new ConvertNode( params[0], 'vec4' ) );
258
+ return ShaderNodeObject( new ConvertNode( params[ 0 ], 'vec4' ) );
259
259
 
260
260
  } else {
261
261
 
@@ -293,6 +293,7 @@ export const and = ShaderNodeProxy( OperatorNode, '&&' );
293
293
 
294
294
  export const element = ShaderNodeProxy( ArrayElementNode );
295
295
 
296
+ export const normalGeometry = new NormalNode( NormalNode.GEOMETRY );
296
297
  export const normalLocal = new NormalNode( NormalNode.LOCAL );
297
298
  export const normalWorld = new NormalNode( NormalNode.WORLD );
298
299
  export const normalView = new NormalNode( NormalNode.VIEW );
@@ -26,7 +26,7 @@ class InputNode extends Node {
26
26
 
27
27
  }
28
28
 
29
- getInputType( builder ) {
29
+ getInputType( /* builder */ ) {
30
30
 
31
31
  return this.inputType;
32
32
 
@@ -624,7 +624,7 @@ class NodeBuilder {
624
624
 
625
625
  getSignature() {
626
626
 
627
- return `// Three.js r${ REVISION } NodeMaterial System\n`;
627
+ return `// Three.js r${ REVISION } - NodeMaterial System\n`;
628
628
 
629
629
  }
630
630