super-three 0.173.5 → 0.176.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 (832) hide show
  1. package/build/three.cjs +21993 -1359
  2. package/build/three.core.js +21129 -1188
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +835 -142
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19493 -17617
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19477 -17617
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +144 -42
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +194 -71
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +74 -30
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +51 -5
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +71 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +222 -9
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +87 -19
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +56 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +90 -70
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +75 -2
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +134 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +268 -134
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +185 -9
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -22,8 +22,6 @@ import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
22
22
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
23
23
  import ChainMap from '../../renderers/common/ChainMap.js';
24
24
 
25
- import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
26
-
27
25
  import BindGroup from '../../renderers/common/BindGroup.js';
28
26
 
29
27
  import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
@@ -87,14 +85,14 @@ class NodeBuilder {
87
85
  /**
88
86
  * The material of the 3D object.
89
87
  *
90
- * @type {Material?}
88
+ * @type {?Material}
91
89
  */
92
90
  this.material = ( object && object.material ) || null;
93
91
 
94
92
  /**
95
93
  * The geometry of the 3D object.
96
94
  *
97
- * @type {BufferGeometry?}
95
+ * @type {?BufferGeometry}
98
96
  */
99
97
  this.geometry = ( object && object.geometry ) || null;
100
98
 
@@ -115,7 +113,7 @@ class NodeBuilder {
115
113
  /**
116
114
  * The scene the 3D object belongs to.
117
115
  *
118
- * @type {Scene?}
116
+ * @type {?Scene}
119
117
  * @default null
120
118
  */
121
119
  this.scene = null;
@@ -123,7 +121,7 @@ class NodeBuilder {
123
121
  /**
124
122
  * The camera the 3D object is rendered with.
125
123
  *
126
- * @type {Camera?}
124
+ * @type {?Camera}
127
125
  * @default null
128
126
  */
129
127
  this.camera = null;
@@ -167,14 +165,14 @@ class NodeBuilder {
167
165
  /**
168
166
  * A dictionary that assigns each node to a unique hash.
169
167
  *
170
- * @type {Object<Number,Node>}
168
+ * @type {Object<number,Node>}
171
169
  */
172
170
  this.hashNodes = {};
173
171
 
174
172
  /**
175
173
  * A reference to a node material observer.
176
174
  *
177
- * @type {NodeMaterialObserver?}
175
+ * @type {?NodeMaterialObserver}
178
176
  * @default null
179
177
  */
180
178
  this.observer = null;
@@ -182,7 +180,7 @@ class NodeBuilder {
182
180
  /**
183
181
  * A reference to the current lights node.
184
182
  *
185
- * @type {LightsNode?}
183
+ * @type {?LightsNode}
186
184
  * @default null
187
185
  */
188
186
  this.lightsNode = null;
@@ -190,7 +188,7 @@ class NodeBuilder {
190
188
  /**
191
189
  * A reference to the current environment node.
192
190
  *
193
- * @type {Node?}
191
+ * @type {?Node}
194
192
  * @default null
195
193
  */
196
194
  this.environmentNode = null;
@@ -198,7 +196,7 @@ class NodeBuilder {
198
196
  /**
199
197
  * A reference to the current fog node.
200
198
  *
201
- * @type {FogNode?}
199
+ * @type {?FogNode}
202
200
  * @default null
203
201
  */
204
202
  this.fogNode = null;
@@ -206,42 +204,42 @@ class NodeBuilder {
206
204
  /**
207
205
  * The current clipping context.
208
206
  *
209
- * @type {ClippingContext?}
207
+ * @type {?ClippingContext}
210
208
  */
211
209
  this.clippingContext = null;
212
210
 
213
211
  /**
214
212
  * The generated vertex shader.
215
213
  *
216
- * @type {String?}
214
+ * @type {?string}
217
215
  */
218
216
  this.vertexShader = null;
219
217
 
220
218
  /**
221
219
  * The generated fragment shader.
222
220
  *
223
- * @type {String?}
221
+ * @type {?string}
224
222
  */
225
223
  this.fragmentShader = null;
226
224
 
227
225
  /**
228
226
  * The generated compute shader.
229
227
  *
230
- * @type {String?}
228
+ * @type {?string}
231
229
  */
232
230
  this.computeShader = null;
233
231
 
234
232
  /**
235
233
  * Nodes used in the primary flow of code generation.
236
234
  *
237
- * @type {Object<String,Array<Node>>}
235
+ * @type {Object<string,Array<Node>>}
238
236
  */
239
237
  this.flowNodes = { vertex: [], fragment: [], compute: [] };
240
238
 
241
239
  /**
242
240
  * Nodes code from `.flowNodes`.
243
241
  *
244
- * @type {Object<String,String>}
242
+ * @type {Object<string,string>}
245
243
  */
246
244
  this.flowCode = { vertex: '', fragment: '', compute: '' };
247
245
 
@@ -278,7 +276,7 @@ class NodeBuilder {
278
276
  /**
279
277
  * Reference to the array of bind groups.
280
278
  *
281
- * @type {Array<BindGroup>?}
279
+ * @type {?Array<BindGroup>}
282
280
  */
283
281
  this.bindGroups = null;
284
282
 
@@ -309,23 +307,32 @@ class NodeBuilder {
309
307
  * This dictionary holds the (native) node codes of this builder.
310
308
  * The codes are maintained in an array for each shader stage.
311
309
  *
312
- * @type {Object<String,Array<NodeCode>>}
310
+ * @type {Object<string,Array<NodeCode>>}
313
311
  */
314
312
  this.codes = {};
315
313
 
316
314
  /**
317
315
  * This dictionary holds the node variables of this builder.
318
316
  * The variables are maintained in an array for each shader stage.
317
+ * This dictionary is also used to count the number of variables
318
+ * according to their type (const, vars).
319
319
  *
320
- * @type {Object<String,Array<NodeVar>>}
320
+ * @type {Object<string,Array<NodeVar>|number>}
321
321
  */
322
322
  this.vars = {};
323
323
 
324
+ /**
325
+ * This dictionary holds the declarations for each shader stage.
326
+ *
327
+ * @type {Object}
328
+ */
329
+ this.declarations = {};
330
+
324
331
  /**
325
332
  * Current code flow.
326
333
  * All code generated in this stack will be stored in `.flow`.
327
334
  *
328
- * @type {{code: String}}
335
+ * @type {{code: string}}
329
336
  */
330
337
  this.flow = { code: '' };
331
338
 
@@ -357,7 +364,7 @@ class NodeBuilder {
357
364
  /**
358
365
  * A tab value. Used for shader string generation.
359
366
  *
360
- * @type {String}
367
+ * @type {string}
361
368
  * @default '\t'
362
369
  */
363
370
  this.tab = '\t';
@@ -365,7 +372,7 @@ class NodeBuilder {
365
372
  /**
366
373
  * Reference to the current function node.
367
374
  *
368
- * @type {FunctionNode?}
375
+ * @type {?FunctionNode}
369
376
  * @default null
370
377
  */
371
378
  this.currentFunctionNode = null;
@@ -401,25 +408,17 @@ class NodeBuilder {
401
408
  /**
402
409
  * The current shader stage.
403
410
  *
404
- * @type {('vertex'|'fragment'|'compute'|'any')?}
411
+ * @type {?('vertex'|'fragment'|'compute'|'any')}
405
412
  */
406
413
  this.shaderStage = null;
407
414
 
408
415
  /**
409
416
  * The current build stage.
410
417
  *
411
- * @type {('setup'|'analyze'|'generate')?}
418
+ * @type {?('setup'|'analyze'|'generate')}
412
419
  */
413
420
  this.buildStage = null;
414
421
 
415
- /**
416
- * Whether comparison in shader code are generated with methods or not.
417
- *
418
- * @type {Boolean}
419
- * @default false
420
- */
421
- this.useComparisonMethod = false;
422
-
423
422
  }
424
423
 
425
424
  /**
@@ -447,8 +446,8 @@ class NodeBuilder {
447
446
  * Factory method for creating an instance of {@link RenderTarget} with the given
448
447
  * dimensions and options.
449
448
  *
450
- * @param {Number} width - The width of the render target.
451
- * @param {Number} height - The height of the render target.
449
+ * @param {number} width - The width of the render target.
450
+ * @param {number} height - The height of the render target.
452
451
  * @param {Object} options - The options of the render target.
453
452
  * @return {RenderTarget} The render target.
454
453
  */
@@ -462,7 +461,7 @@ class NodeBuilder {
462
461
  * Factory method for creating an instance of {@link CubeRenderTarget} with the given
463
462
  * dimensions and options.
464
463
  *
465
- * @param {Number} size - The size of the cube render target.
464
+ * @param {number} size - The size of the cube render target.
466
465
  * @param {Object} options - The options of the cube render target.
467
466
  * @return {CubeRenderTarget} The cube render target.
468
467
  */
@@ -472,24 +471,11 @@ class NodeBuilder {
472
471
 
473
472
  }
474
473
 
475
- /**
476
- * Factory method for creating an instance of {@link PMREMGenerator}.
477
- *
478
- * @return {PMREMGenerator} The PMREM generator.
479
- */
480
- createPMREMGenerator() {
481
-
482
- // TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
483
-
484
- return new PMREMGenerator( this.renderer );
485
-
486
- }
487
-
488
474
  /**
489
475
  * Whether the given node is included in the internal array of nodes or not.
490
476
  *
491
477
  * @param {Node} node - The node to test.
492
- * @return {Boolean} Whether the given node is included in the internal array of nodes or not.
478
+ * @return {boolean} Whether the given node is included in the internal array of nodes or not.
493
479
  */
494
480
  includes( node ) {
495
481
 
@@ -499,10 +485,10 @@ class NodeBuilder {
499
485
 
500
486
  /**
501
487
  * Returns the output struct name which is required by
502
- * {@link module:OutputStructNode}.
488
+ * {@link OutputStructNode}.
503
489
  *
504
490
  * @abstract
505
- * @return {String} The name of the output struct.
491
+ * @return {string} The name of the output struct.
506
492
  */
507
493
  getOutputStructName() {}
508
494
 
@@ -510,7 +496,7 @@ class NodeBuilder {
510
496
  * Returns a bind group for the given group name and binding.
511
497
  *
512
498
  * @private
513
- * @param {String} groupName - The group name.
499
+ * @param {string} groupName - The group name.
514
500
  * @param {Array<NodeUniformsGroup>} bindings - List of bindings.
515
501
  * @return {BindGroup} The bind group
516
502
  */
@@ -561,7 +547,7 @@ class NodeBuilder {
561
547
  /**
562
548
  * Returns an array of node uniform groups for the given group name and shader stage.
563
549
  *
564
- * @param {String} groupName - The group name.
550
+ * @param {string} groupName - The group name.
565
551
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
566
552
  * @return {Array<NodeUniformsGroup>} The array of node uniform groups.
567
553
  */
@@ -659,7 +645,7 @@ class NodeBuilder {
659
645
  * This method sets the given node (value) with the given hash (key) into this dictionary.
660
646
  *
661
647
  * @param {Node} node - The node to add.
662
- * @param {Number} hash - The hash of the node.
648
+ * @param {number} hash - The hash of the node.
663
649
  */
664
650
  setHashNode( node, hash ) {
665
651
 
@@ -755,7 +741,7 @@ class NodeBuilder {
755
741
  * Whether the given texture is filtered or not.
756
742
  *
757
743
  * @param {Texture} texture - The texture to check.
758
- * @return {Boolean} Whether the given texture is filtered or not.
744
+ * @return {boolean} Whether the given texture is filtered or not.
759
745
  */
760
746
  isFilteredTexture( texture ) {
761
747
 
@@ -807,8 +793,8 @@ class NodeBuilder {
807
793
  * resolved to `textureSize` in GLSL.
808
794
  *
809
795
  * @abstract
810
- * @param {String} method - The method name to resolve.
811
- * @return {String} The resolved method name.
796
+ * @param {string} method - The method name to resolve.
797
+ * @return {string} The resolved method name.
812
798
  */
813
799
  getMethod( method ) {
814
800
 
@@ -819,7 +805,7 @@ class NodeBuilder {
819
805
  /**
820
806
  * Returns a node for the given hash, see {@link NodeBuilder#setHashNode}.
821
807
  *
822
- * @param {Number} hash - The hash of the node.
808
+ * @param {number} hash - The hash of the node.
823
809
  * @return {Node} The found node.
824
810
  */
825
811
  getNodeFromHash( hash ) {
@@ -907,7 +893,7 @@ class NodeBuilder {
907
893
  * Returns a cache for the given node.
908
894
  *
909
895
  * @param {Node} node - The node.
910
- * @param {Boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
896
+ * @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
911
897
  * @return {NodeCache} The cache.
912
898
  */
913
899
  getCacheFromNode( node, parent = true ) {
@@ -923,8 +909,8 @@ class NodeBuilder {
923
909
  * Whether the requested feature is available or not.
924
910
  *
925
911
  * @abstract
926
- * @param {String} name - The requested feature.
927
- * @return {Boolean} Whether the requested feature is supported or not.
912
+ * @param {string} name - The requested feature.
913
+ * @return {boolean} Whether the requested feature is supported or not.
928
914
  */
929
915
  isAvailable( /*name*/ ) {
930
916
 
@@ -936,7 +922,7 @@ class NodeBuilder {
936
922
  * Returns the vertexIndex input variable as a native shader string.
937
923
  *
938
924
  * @abstract
939
- * @return {String} The instanceIndex shader string.
925
+ * @return {string} The instanceIndex shader string.
940
926
  */
941
927
  getVertexIndex() {
942
928
 
@@ -948,7 +934,7 @@ class NodeBuilder {
948
934
  * Returns the instanceIndex input variable as a native shader string.
949
935
  *
950
936
  * @abstract
951
- * @return {String} The instanceIndex shader string.
937
+ * @return {string} The instanceIndex shader string.
952
938
  */
953
939
  getInstanceIndex() {
954
940
 
@@ -961,7 +947,7 @@ class NodeBuilder {
961
947
  * Only relevant for WebGL and its `WEBGL_multi_draw` extension.
962
948
  *
963
949
  * @abstract
964
- * @return {String} The drawIndex shader string.
950
+ * @return {?string} The drawIndex shader string.
965
951
  */
966
952
  getDrawIndex() {
967
953
 
@@ -973,7 +959,7 @@ class NodeBuilder {
973
959
  * Returns the frontFacing input variable as a native shader string.
974
960
  *
975
961
  * @abstract
976
- * @return {String} The frontFacing shader string.
962
+ * @return {string} The frontFacing shader string.
977
963
  */
978
964
  getFrontFacing() {
979
965
 
@@ -985,7 +971,7 @@ class NodeBuilder {
985
971
  * Returns the fragCoord input variable as a native shader string.
986
972
  *
987
973
  * @abstract
988
- * @return {String} The fragCoord shader string.
974
+ * @return {string} The fragCoord shader string.
989
975
  */
990
976
  getFragCoord() {
991
977
 
@@ -998,7 +984,7 @@ class NodeBuilder {
998
984
  * this method evaluate to `true`, WebGPU to `false`.
999
985
  *
1000
986
  * @abstract
1001
- * @return {Boolean} Whether to flip texture data along its vertical axis or not.
987
+ * @return {boolean} Whether to flip texture data along its vertical axis or not.
1002
988
  */
1003
989
  isFlipY() {
1004
990
 
@@ -1010,7 +996,7 @@ class NodeBuilder {
1010
996
  * Calling this method increases the usage count for the given node by one.
1011
997
  *
1012
998
  * @param {Node} node - The node to increase the usage count for.
1013
- * @return {Number} The updated usage count.
999
+ * @return {number} The updated usage count.
1014
1000
  */
1015
1001
  increaseUsage( node ) {
1016
1002
 
@@ -1026,9 +1012,9 @@ class NodeBuilder {
1026
1012
  *
1027
1013
  * @abstract
1028
1014
  * @param {Texture} texture - The texture.
1029
- * @param {String} textureProperty - The texture property name.
1030
- * @param {String} uvSnippet - Snippet defining the texture coordinates.
1031
- * @return {String} The generated shader string.
1015
+ * @param {string} textureProperty - The texture property name.
1016
+ * @param {string} uvSnippet - Snippet defining the texture coordinates.
1017
+ * @return {string} The generated shader string.
1032
1018
  */
1033
1019
  generateTexture( /* texture, textureProperty, uvSnippet */ ) {
1034
1020
 
@@ -1041,11 +1027,11 @@ class NodeBuilder {
1041
1027
  *
1042
1028
  * @abstract
1043
1029
  * @param {Texture} texture - The texture.
1044
- * @param {String} textureProperty - The texture property name.
1045
- * @param {String} uvSnippet - Snippet defining the texture coordinates.
1046
- * @param {String?} depthSnippet - Snippet defining the 0-based texture array index to sample.
1047
- * @param {String} levelSnippet - Snippet defining the mip level.
1048
- * @return {String} The generated shader string.
1030
+ * @param {string} textureProperty - The texture property name.
1031
+ * @param {string} uvSnippet - Snippet defining the texture coordinates.
1032
+ * @param {?string} depthSnippet - Snippet defining the 0-based texture array index to sample.
1033
+ * @param {string} levelSnippet - Snippet defining the mip level.
1034
+ * @return {string} The generated shader string.
1049
1035
  */
1050
1036
  generateTextureLod( /* texture, textureProperty, uvSnippet, depthSnippet, levelSnippet */ ) {
1051
1037
 
@@ -1056,9 +1042,9 @@ class NodeBuilder {
1056
1042
  /**
1057
1043
  * Generates the array declaration string.
1058
1044
  *
1059
- * @param {String} type - The type.
1060
- * @param {Number?} [count] - The count.
1061
- * @return {String} The generated value as a shader string.
1045
+ * @param {string} type - The type.
1046
+ * @param {?number} [count] - The count.
1047
+ * @return {string} The generated value as a shader string.
1062
1048
  */
1063
1049
  generateArrayDeclaration( type, count ) {
1064
1050
 
@@ -1069,10 +1055,10 @@ class NodeBuilder {
1069
1055
  /**
1070
1056
  * Generates the array shader string for the given type and value.
1071
1057
  *
1072
- * @param {String} type - The type.
1073
- * @param {Number?} [count] - The count.
1074
- * @param {Array<Node>?} [values=null] - The default values.
1075
- * @return {String} The generated value as a shader string.
1058
+ * @param {string} type - The type.
1059
+ * @param {?number} [count] - The count.
1060
+ * @param {?Array<Node>} [values=null] - The default values.
1061
+ * @return {string} The generated value as a shader string.
1076
1062
  */
1077
1063
  generateArray( type, count, values = null ) {
1078
1064
 
@@ -1105,10 +1091,10 @@ class NodeBuilder {
1105
1091
  /**
1106
1092
  * Generates the struct shader string.
1107
1093
  *
1108
- * @param {String} type - The type.
1094
+ * @param {string} type - The type.
1109
1095
  * @param {Array<Object>} [membersLayout] - The count.
1110
- * @param {Array<Node>?} [values=null] - The default values.
1111
- * @return {String} The generated value as a shader string.
1096
+ * @param {?Array<Node>} [values=null] - The default values.
1097
+ * @return {string} The generated value as a shader string.
1112
1098
  */
1113
1099
  generateStruct( type, membersLayout, values = null ) {
1114
1100
 
@@ -1138,9 +1124,9 @@ class NodeBuilder {
1138
1124
  /**
1139
1125
  * Generates the shader string for the given type and value.
1140
1126
  *
1141
- * @param {String} type - The type.
1142
- * @param {Any?} [value=null] - The value.
1143
- * @return {String} The generated value as a shader string.
1127
+ * @param {string} type - The type.
1128
+ * @param {?any} [value=null] - The value.
1129
+ * @return {string} The generated value as a shader string.
1144
1130
  */
1145
1131
  generateConst( type, value = null ) {
1146
1132
 
@@ -1175,11 +1161,11 @@ class NodeBuilder {
1175
1161
 
1176
1162
  return `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) }, ${ generateConst( value.z ) } )`;
1177
1163
 
1178
- } else if ( typeLength === 4 ) {
1164
+ } else if ( typeLength === 4 && type !== 'mat2' ) {
1179
1165
 
1180
1166
  return `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) }, ${ generateConst( value.z ) }, ${ generateConst( value.w ) } )`;
1181
1167
 
1182
- } else if ( typeLength > 4 && value && ( value.isMatrix3 || value.isMatrix4 ) ) {
1168
+ } else if ( typeLength >= 4 && value && ( value.isMatrix2 || value.isMatrix3 || value.isMatrix4 ) ) {
1183
1169
 
1184
1170
  return `${ this.getType( type ) }( ${ value.elements.map( generateConst ).join( ', ' ) } )`;
1185
1171
 
@@ -1197,8 +1183,8 @@ class NodeBuilder {
1197
1183
  * It might be necessary to convert certain data types to different ones
1198
1184
  * so this method can be used to hide the conversion.
1199
1185
  *
1200
- * @param {String} type - The type.
1201
- * @return {String} The updated type.
1186
+ * @param {string} type - The type.
1187
+ * @return {string} The updated type.
1202
1188
  */
1203
1189
  getType( type ) {
1204
1190
 
@@ -1211,8 +1197,8 @@ class NodeBuilder {
1211
1197
  /**
1212
1198
  * Whether the given attribute name is defined in the geometry or not.
1213
1199
  *
1214
- * @param {String} name - The attribute name.
1215
- * @return {Boolean} Whether the given attribute name is defined in the geometry.
1200
+ * @param {string} name - The attribute name.
1201
+ * @return {boolean} Whether the given attribute name is defined in the geometry.
1216
1202
  */
1217
1203
  hasGeometryAttribute( name ) {
1218
1204
 
@@ -1223,8 +1209,8 @@ class NodeBuilder {
1223
1209
  /**
1224
1210
  * Returns a node attribute for the given name and type.
1225
1211
  *
1226
- * @param {String} name - The attribute's name.
1227
- * @param {String} type - The attribute's type.
1212
+ * @param {string} name - The attribute's name.
1213
+ * @param {string} type - The attribute's type.
1228
1214
  * @return {NodeAttribute} The node attribute.
1229
1215
  */
1230
1216
  getAttribute( name, type ) {
@@ -1247,6 +1233,8 @@ class NodeBuilder {
1247
1233
 
1248
1234
  const attribute = new NodeAttribute( name, type );
1249
1235
 
1236
+ this.registerDeclaration( attribute );
1237
+
1250
1238
  attributes.push( attribute );
1251
1239
 
1252
1240
  return attribute;
@@ -1258,7 +1246,7 @@ class NodeBuilder {
1258
1246
  *
1259
1247
  * @param {Node} node - The node.
1260
1248
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
1261
- * @return {String} The property name.
1249
+ * @return {string} The property name.
1262
1250
  */
1263
1251
  getPropertyName( node/*, shaderStage*/ ) {
1264
1252
 
@@ -1269,8 +1257,8 @@ class NodeBuilder {
1269
1257
  /**
1270
1258
  * Whether the given type is a vector type or not.
1271
1259
  *
1272
- * @param {String} type - The type to check.
1273
- * @return {Boolean} Whether the given type is a vector type or not.
1260
+ * @param {string} type - The type to check.
1261
+ * @return {boolean} Whether the given type is a vector type or not.
1274
1262
  */
1275
1263
  isVector( type ) {
1276
1264
 
@@ -1281,8 +1269,8 @@ class NodeBuilder {
1281
1269
  /**
1282
1270
  * Whether the given type is a matrix type or not.
1283
1271
  *
1284
- * @param {String} type - The type to check.
1285
- * @return {Boolean} Whether the given type is a matrix type or not.
1272
+ * @param {string} type - The type to check.
1273
+ * @return {boolean} Whether the given type is a matrix type or not.
1286
1274
  */
1287
1275
  isMatrix( type ) {
1288
1276
 
@@ -1293,12 +1281,12 @@ class NodeBuilder {
1293
1281
  /**
1294
1282
  * Whether the given type is a reference type or not.
1295
1283
  *
1296
- * @param {String} type - The type to check.
1297
- * @return {Boolean} Whether the given type is a reference type or not.
1284
+ * @param {string} type - The type to check.
1285
+ * @return {boolean} Whether the given type is a reference type or not.
1298
1286
  */
1299
1287
  isReference( type ) {
1300
1288
 
1301
- return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
1289
+ return type === 'void' || type === 'property' || type === 'sampler' || type === 'samplerComparison' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
1302
1290
 
1303
1291
  }
1304
1292
 
@@ -1307,7 +1295,7 @@ class NodeBuilder {
1307
1295
  *
1308
1296
  * @abstract
1309
1297
  * @param {Texture} texture - The texture to check.
1310
- * @return {Boolean} Whether the given texture requires a conversion to working color space or not.
1298
+ * @return {boolean} Whether the given texture requires a conversion to working color space or not.
1311
1299
  */
1312
1300
  needsToWorkingColorSpace( /*texture*/ ) {
1313
1301
 
@@ -1319,7 +1307,7 @@ class NodeBuilder {
1319
1307
  * Returns the component type of a given texture.
1320
1308
  *
1321
1309
  * @param {Texture} texture - The texture.
1322
- * @return {String} The component type.
1310
+ * @return {string} The component type.
1323
1311
  */
1324
1312
  getComponentTypeFromTexture( texture ) {
1325
1313
 
@@ -1339,8 +1327,8 @@ class NodeBuilder {
1339
1327
  /**
1340
1328
  * Returns the element type for a given type.
1341
1329
  *
1342
- * @param {String} type - The type.
1343
- * @return {String} The element type.
1330
+ * @param {string} type - The type.
1331
+ * @return {string} The element type.
1344
1332
  */
1345
1333
  getElementType( type ) {
1346
1334
 
@@ -1355,8 +1343,8 @@ class NodeBuilder {
1355
1343
  /**
1356
1344
  * Returns the component type for a given type.
1357
1345
  *
1358
- * @param {String} type - The type.
1359
- * @return {String} The component type.
1346
+ * @param {string} type - The type.
1347
+ * @return {string} The component type.
1360
1348
  */
1361
1349
  getComponentType( type ) {
1362
1350
 
@@ -1379,8 +1367,8 @@ class NodeBuilder {
1379
1367
  /**
1380
1368
  * Returns the vector type for a given type.
1381
1369
  *
1382
- * @param {String} type - The type.
1383
- * @return {String} The vector type.
1370
+ * @param {string} type - The type.
1371
+ * @return {string} The vector type.
1384
1372
  */
1385
1373
  getVectorType( type ) {
1386
1374
 
@@ -1394,9 +1382,9 @@ class NodeBuilder {
1394
1382
  /**
1395
1383
  * Returns the data type for the given the length and component type.
1396
1384
  *
1397
- * @param {Number} length - The length.
1398
- * @param {String} [componentType='float'] - The component type.
1399
- * @return {String} The type.
1385
+ * @param {number} length - The length.
1386
+ * @param {string} [componentType='float'] - The component type.
1387
+ * @return {string} The type.
1400
1388
  */
1401
1389
  getTypeFromLength( length, componentType = 'float' ) {
1402
1390
 
@@ -1420,7 +1408,7 @@ class NodeBuilder {
1420
1408
  * Returns the type for a given typed array.
1421
1409
  *
1422
1410
  * @param {TypedArray} array - The typed array.
1423
- * @return {String} The type.
1411
+ * @return {string} The type.
1424
1412
  */
1425
1413
  getTypeFromArray( array ) {
1426
1414
 
@@ -1428,11 +1416,23 @@ class NodeBuilder {
1428
1416
 
1429
1417
  }
1430
1418
 
1419
+ /**
1420
+ * Returns the type is an integer type.
1421
+ *
1422
+ * @param {string} type - The type.
1423
+ * @return {boolean} Whether the type is an integer type or not.
1424
+ */
1425
+ isInteger( type ) {
1426
+
1427
+ return /int|uint|(i|u)vec/.test( type );
1428
+
1429
+ }
1430
+
1431
1431
  /**
1432
1432
  * Returns the type for a given buffer attribute.
1433
1433
  *
1434
1434
  * @param {BufferAttribute} attribute - The buffer attribute.
1435
- * @return {String} The type.
1435
+ * @return {string} The type.
1436
1436
  */
1437
1437
  getTypeFromAttribute( attribute ) {
1438
1438
 
@@ -1459,8 +1459,8 @@ class NodeBuilder {
1459
1459
  /**
1460
1460
  * Returns the length for the given data type.
1461
1461
  *
1462
- * @param {String} type - The data type.
1463
- * @return {Number} The length.
1462
+ * @param {string} type - The data type.
1463
+ * @return {number} The length.
1464
1464
  */
1465
1465
  getTypeLength( type ) {
1466
1466
 
@@ -1480,8 +1480,8 @@ class NodeBuilder {
1480
1480
  /**
1481
1481
  * Returns the vector type for a given matrix type.
1482
1482
  *
1483
- * @param {String} type - The matrix type.
1484
- * @return {String} The vector type.
1483
+ * @param {string} type - The matrix type.
1484
+ * @return {string} The vector type.
1485
1485
  */
1486
1486
  getVectorFromMatrix( type ) {
1487
1487
 
@@ -1494,9 +1494,9 @@ class NodeBuilder {
1494
1494
  * given value. E.g. `vec4` should be changed to the new component type
1495
1495
  * `uint` which results in `uvec4`.
1496
1496
  *
1497
- * @param {String} type - The type.
1498
- * @param {String} newComponentType - The new component type.
1499
- * @return {String} The new type.
1497
+ * @param {string} type - The type.
1498
+ * @param {string} newComponentType - The new component type.
1499
+ * @return {string} The new type.
1500
1500
  */
1501
1501
  changeComponentType( type, newComponentType ) {
1502
1502
 
@@ -1507,8 +1507,8 @@ class NodeBuilder {
1507
1507
  /**
1508
1508
  * Returns the integer type pendant for the given type.
1509
1509
  *
1510
- * @param {String} type - The type.
1511
- * @return {String} The integer type.
1510
+ * @param {string} type - The type.
1511
+ * @return {string} The integer type.
1512
1512
  */
1513
1513
  getIntegerType( type ) {
1514
1514
 
@@ -1558,7 +1558,7 @@ class NodeBuilder {
1558
1558
  *
1559
1559
  * @param {Node} node - The node to get the data for.
1560
1560
  * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
1561
- * @param {NodeCache?} cache - An optional cache.
1561
+ * @param {?NodeCache} cache - An optional cache.
1562
1562
  * @return {Object} The node data.
1563
1563
  */
1564
1564
  getDataFromNode( node, shaderStage = this.shaderStage, cache = null ) {
@@ -1600,7 +1600,7 @@ class NodeBuilder {
1600
1600
  * Returns an instance of {@link NodeAttribute} for the given buffer attribute node.
1601
1601
  *
1602
1602
  * @param {BufferAttributeNode} node - The buffer attribute node.
1603
- * @param {String} type - The node type.
1603
+ * @param {string} type - The node type.
1604
1604
  * @return {NodeAttribute} The node attribute.
1605
1605
  */
1606
1606
  getBufferAttributeFromNode( node, type ) {
@@ -1630,13 +1630,13 @@ class NodeBuilder {
1630
1630
  *
1631
1631
  * @param {OutputStructNode} node - The output struct node.
1632
1632
  * @param {Array<Object>} membersLayout - The output struct types.
1633
- * @param {String?} [name=null] - The name of the struct.
1633
+ * @param {?string} [name=null] - The name of the struct.
1634
1634
  * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
1635
1635
  * @return {StructType} The struct type attribute.
1636
1636
  */
1637
1637
  getStructTypeFromNode( node, membersLayout, name = null, shaderStage = this.shaderStage ) {
1638
1638
 
1639
- const nodeData = this.getDataFromNode( node, shaderStage );
1639
+ const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
1640
1640
 
1641
1641
  let structType = nodeData.structType;
1642
1642
 
@@ -1678,9 +1678,9 @@ class NodeBuilder {
1678
1678
  * Returns an instance of {@link NodeUniform} for the given uniform node.
1679
1679
  *
1680
1680
  * @param {UniformNode} node - The uniform node.
1681
- * @param {String} type - The uniform type.
1681
+ * @param {string} type - The uniform type.
1682
1682
  * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
1683
- * @param {String?} name - The name of the uniform.
1683
+ * @param {?string} name - The name of the uniform.
1684
1684
  * @return {NodeUniform} The node uniform.
1685
1685
  */
1686
1686
  getUniformFromNode( node, type, shaderStage = this.shaderStage, name = null ) {
@@ -1697,6 +1697,8 @@ class NodeBuilder {
1697
1697
 
1698
1698
  this.uniforms[ shaderStage ].push( nodeUniform );
1699
1699
 
1700
+ this.registerDeclaration( nodeUniform );
1701
+
1700
1702
  nodeData.uniform = nodeUniform;
1701
1703
 
1702
1704
  }
@@ -1709,7 +1711,7 @@ class NodeBuilder {
1709
1711
  * Returns the array length.
1710
1712
  *
1711
1713
  * @param {Node} node - The node.
1712
- * @return {Number?} The array length.
1714
+ * @return {?number} The array length.
1713
1715
  */
1714
1716
  getArrayCount( node ) {
1715
1717
 
@@ -1726,10 +1728,10 @@ class NodeBuilder {
1726
1728
  * Returns an instance of {@link NodeVar} for the given variable node.
1727
1729
  *
1728
1730
  * @param {VarNode} node - The variable node.
1729
- * @param {String?} name - The variable's name.
1730
- * @param {String} [type=node.getNodeType( this )] - The variable's type.
1731
+ * @param {?string} name - The variable's name.
1732
+ * @param {string} [type=node.getNodeType( this )] - The variable's type.
1731
1733
  * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
1732
- * @param {Boolean} [readOnly=false] - Whether the variable is read-only or not.
1734
+ * @param {boolean} [readOnly=false] - Whether the variable is read-only or not.
1733
1735
  *
1734
1736
  * @return {NodeVar} The node variable.
1735
1737
  */
@@ -1766,6 +1768,8 @@ class NodeBuilder {
1766
1768
 
1767
1769
  }
1768
1770
 
1771
+ this.registerDeclaration( nodeVar );
1772
+
1769
1773
  nodeData.variable = nodeVar;
1770
1774
 
1771
1775
  }
@@ -1778,7 +1782,7 @@ class NodeBuilder {
1778
1782
  * Returns whether a Node or its flow is deterministic, useful for use in `const`.
1779
1783
  *
1780
1784
  * @param {Node} node - The varying node.
1781
- * @return {Boolean} Returns true if deterministic.
1785
+ * @return {boolean} Returns true if deterministic.
1782
1786
  */
1783
1787
  isDeterministic( node ) {
1784
1788
 
@@ -1825,8 +1829,8 @@ class NodeBuilder {
1825
1829
  * Returns an instance of {@link NodeVarying} for the given varying node.
1826
1830
  *
1827
1831
  * @param {(VaryingNode|PropertyNode)} node - The varying node.
1828
- * @param {String?} name - The varying's name.
1829
- * @param {String} [type=node.getNodeType( this )] - The varying's type.
1832
+ * @param {?string} name - The varying's name.
1833
+ * @param {string} [type=node.getNodeType( this )] - The varying's type.
1830
1834
  * @return {NodeVar} The node varying.
1831
1835
  */
1832
1836
  getVaryingFromNode( node, name = null, type = node.getNodeType( this ) ) {
@@ -1846,6 +1850,8 @@ class NodeBuilder {
1846
1850
 
1847
1851
  varyings.push( nodeVarying );
1848
1852
 
1853
+ this.registerDeclaration( nodeVarying );
1854
+
1849
1855
  nodeData.varying = nodeVarying;
1850
1856
 
1851
1857
  }
@@ -1854,11 +1860,46 @@ class NodeBuilder {
1854
1860
 
1855
1861
  }
1856
1862
 
1863
+ /**
1864
+ * Registers a node declaration in the current shader stage.
1865
+ *
1866
+ * @param {Object} node - The node to be registered.
1867
+ */
1868
+ registerDeclaration( node ) {
1869
+
1870
+ const shaderStage = this.shaderStage;
1871
+ const declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );
1872
+
1873
+ const property = this.getPropertyName( node );
1874
+
1875
+ let index = 1;
1876
+ let name = property;
1877
+
1878
+ // Automatically renames the property if the name is already in use.
1879
+
1880
+ while ( declarations[ name ] !== undefined ) {
1881
+
1882
+ name = property + '_' + index ++;
1883
+
1884
+ }
1885
+
1886
+ declarations[ name ] = node;
1887
+
1888
+ if ( index > 1 ) {
1889
+
1890
+ node.name = name;
1891
+
1892
+ console.warn( `THREE.TSL: Declaration name '${ property }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
1893
+
1894
+ }
1895
+
1896
+ }
1897
+
1857
1898
  /**
1858
1899
  * Returns an instance of {@link NodeCode} for the given code node.
1859
1900
  *
1860
1901
  * @param {CodeNode} node - The code node.
1861
- * @param {String} type - The node type.
1902
+ * @param {string} type - The node type.
1862
1903
  * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
1863
1904
  * @return {NodeCode} The node code.
1864
1905
  */
@@ -1930,7 +1971,7 @@ class NodeBuilder {
1930
1971
  * Add a inline-code to the current flow code-block.
1931
1972
  *
1932
1973
  * @param {Node} node - The node to add.
1933
- * @param {String} code - The code to add.
1974
+ * @param {string} code - The code to add.
1934
1975
  * @param {Node} nodeBlock - Current ConditionalNode
1935
1976
  */
1936
1977
  addLineFlowCodeBlock( node, code, nodeBlock ) {
@@ -1947,8 +1988,8 @@ class NodeBuilder {
1947
1988
  /**
1948
1989
  * Add a inline-code to the current flow.
1949
1990
  *
1950
- * @param {String} code - The code to add.
1951
- * @param {Node?} [node= null] - Optional Node, can help the system understand if the Node is part of a code-block.
1991
+ * @param {string} code - The code to add.
1992
+ * @param {?Node} [node= null] - Optional Node, can help the system understand if the Node is part of a code-block.
1952
1993
  * @return {NodeBuilder} A reference to this node builder.
1953
1994
  */
1954
1995
  addLineFlowCode( code, node = null ) {
@@ -1978,7 +2019,7 @@ class NodeBuilder {
1978
2019
  /**
1979
2020
  * Adds a code to the current code flow.
1980
2021
  *
1981
- * @param {String} code - Shader code.
2022
+ * @param {string} code - Shader code.
1982
2023
  * @return {NodeBuilder} A reference to this node builder.
1983
2024
  */
1984
2025
  addFlowCode( code ) {
@@ -2047,6 +2088,22 @@ class NodeBuilder {
2047
2088
 
2048
2089
  }
2049
2090
 
2091
+ /**
2092
+ * Includes a node in the current function node.
2093
+ *
2094
+ * @param {Node} node - The node to include.
2095
+ * @returns {void}
2096
+ */
2097
+ addInclude( node ) {
2098
+
2099
+ if ( this.currentFunctionNode !== null ) {
2100
+
2101
+ this.currentFunctionNode.includes.push( node );
2102
+
2103
+ }
2104
+
2105
+ }
2106
+
2050
2107
  /**
2051
2108
  * Returns the native shader operator name for a given generic name.
2052
2109
  * It is a similar type of method like {@link NodeBuilder#getMethod}.
@@ -2118,13 +2175,14 @@ class NodeBuilder {
2118
2175
  * Runs the node flow through all the steps of creation, 'setup', 'analyze', 'generate'.
2119
2176
  *
2120
2177
  * @param {Node} node - The node to execute.
2121
- * @param {String?} output - Expected output type. For example 'vec3'.
2178
+ * @param {?string} output - Expected output type. For example 'vec3'.
2122
2179
  * @return {Object}
2123
2180
  */
2124
2181
  flowStagesNode( node, output = null ) {
2125
2182
 
2126
2183
  const previousFlow = this.flow;
2127
2184
  const previousVars = this.vars;
2185
+ const previousDeclarations = this.declarations;
2128
2186
  const previousCache = this.cache;
2129
2187
  const previousBuildStage = this.buildStage;
2130
2188
  const previousStack = this.stack;
@@ -2135,6 +2193,7 @@ class NodeBuilder {
2135
2193
 
2136
2194
  this.flow = flow;
2137
2195
  this.vars = {};
2196
+ this.declarations = {};
2138
2197
  this.cache = new NodeCache();
2139
2198
  this.stack = stack();
2140
2199
 
@@ -2150,6 +2209,7 @@ class NodeBuilder {
2150
2209
 
2151
2210
  this.flow = previousFlow;
2152
2211
  this.vars = previousVars;
2212
+ this.declarations = previousDeclarations;
2153
2213
  this.cache = previousCache;
2154
2214
  this.stack = previousStack;
2155
2215
 
@@ -2164,8 +2224,8 @@ class NodeBuilder {
2164
2224
  * It is a similar type of method like {@link NodeBuilder#getMethod}.
2165
2225
  *
2166
2226
  * @abstract
2167
- * @param {String} op - The operator name to resolve.
2168
- * @return {String} The resolved operator name.
2227
+ * @param {string} op - The operator name to resolve.
2228
+ * @return {?string} The resolved operator name.
2169
2229
  */
2170
2230
  getFunctionOperator( /* op */ ) {
2171
2231
 
@@ -2173,11 +2233,24 @@ class NodeBuilder {
2173
2233
 
2174
2234
  }
2175
2235
 
2236
+ /**
2237
+ * Builds the given shader node.
2238
+ *
2239
+ * @abstract
2240
+ * @param {ShaderNodeInternal} shaderNode - The shader node.
2241
+ * @return {string} The function code.
2242
+ */
2243
+ buildFunctionCode( /* shaderNode */ ) {
2244
+
2245
+ console.warn( 'Abstract function.' );
2246
+
2247
+ }
2248
+
2176
2249
  /**
2177
2250
  * Generates a code flow based on a child Node.
2178
2251
  *
2179
2252
  * @param {Node} node - The node to execute.
2180
- * @param {String?} output - Expected output type. For example 'vec3'.
2253
+ * @param {?string} output - Expected output type. For example 'vec3'.
2181
2254
  * @return {Object} The code flow.
2182
2255
  */
2183
2256
  flowChildNode( node, output = null ) {
@@ -2206,8 +2279,8 @@ class NodeBuilder {
2206
2279
  *
2207
2280
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2208
2281
  * @param {Node} node - The node to execute.
2209
- * @param {String?} output - Expected output type. For example 'vec3'.
2210
- * @param {String?} propertyName - The property name to assign the result.
2282
+ * @param {?string} output - Expected output type. For example 'vec3'.
2283
+ * @param {?string} propertyName - The property name to assign the result.
2211
2284
  * @return {Object}
2212
2285
  */
2213
2286
  flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
@@ -2248,7 +2321,7 @@ class NodeBuilder {
2248
2321
  *
2249
2322
  * @abstract
2250
2323
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2251
- * @return {String} The attribute code section.
2324
+ * @return {string} The attribute code section.
2252
2325
  */
2253
2326
  getAttributes( /*shaderStage*/ ) {
2254
2327
 
@@ -2261,7 +2334,7 @@ class NodeBuilder {
2261
2334
  *
2262
2335
  * @abstract
2263
2336
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2264
- * @return {String} The varying code section.
2337
+ * @return {string} The varying code section.
2265
2338
  */
2266
2339
  getVaryings( /*shaderStage*/ ) {
2267
2340
 
@@ -2272,10 +2345,10 @@ class NodeBuilder {
2272
2345
  /**
2273
2346
  * Returns a single variable definition as a shader string for the given variable type and name.
2274
2347
  *
2275
- * @param {String} type - The variable's type.
2276
- * @param {String} name - The variable's name.
2277
- * @param {Number?} [count=null] - The array length.
2278
- * @return {String} The shader string.
2348
+ * @param {string} type - The variable's type.
2349
+ * @param {string} name - The variable's name.
2350
+ * @param {?number} [count=null] - The array length.
2351
+ * @return {string} The shader string.
2279
2352
  */
2280
2353
  getVar( type, name, count = null ) {
2281
2354
 
@@ -2287,7 +2360,7 @@ class NodeBuilder {
2287
2360
  * Returns the variable definitions as a shader string for the given shader stage.
2288
2361
  *
2289
2362
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2290
- * @return {String} The variable code section.
2363
+ * @return {string} The variable code section.
2291
2364
  */
2292
2365
  getVars( shaderStage ) {
2293
2366
 
@@ -2314,7 +2387,7 @@ class NodeBuilder {
2314
2387
  *
2315
2388
  * @abstract
2316
2389
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2317
- * @return {String} The uniform code section.
2390
+ * @return {string} The uniform code section.
2318
2391
  */
2319
2392
  getUniforms( /*shaderStage*/ ) {
2320
2393
 
@@ -2326,7 +2399,7 @@ class NodeBuilder {
2326
2399
  * Returns the native code definitions as a shader string for the given shader stage.
2327
2400
  *
2328
2401
  * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
2329
- * @return {String} The native code section.
2402
+ * @return {string} The native code section.
2330
2403
  */
2331
2404
  getCodes( shaderStage ) {
2332
2405
 
@@ -2351,7 +2424,7 @@ class NodeBuilder {
2351
2424
  /**
2352
2425
  * Returns the hash of this node builder.
2353
2426
  *
2354
- * @return {String} The hash.
2427
+ * @return {string} The hash.
2355
2428
  */
2356
2429
  getHash() {
2357
2430
 
@@ -2362,7 +2435,7 @@ class NodeBuilder {
2362
2435
  /**
2363
2436
  * Sets the current shader stage.
2364
2437
  *
2365
- * @param {('vertex'|'fragment'|'compute'|'any')?} shaderStage - The shader stage to set.
2438
+ * @param {?('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage to set.
2366
2439
  */
2367
2440
  setShaderStage( shaderStage ) {
2368
2441
 
@@ -2373,7 +2446,7 @@ class NodeBuilder {
2373
2446
  /**
2374
2447
  * Returns the current shader stage.
2375
2448
  *
2376
- * @return {('vertex'|'fragment'|'compute'|'any')?} The current shader stage.
2449
+ * @return {?('vertex'|'fragment'|'compute'|'any')} The current shader stage.
2377
2450
  */
2378
2451
  getShaderStage() {
2379
2452
 
@@ -2384,7 +2457,7 @@ class NodeBuilder {
2384
2457
  /**
2385
2458
  * Sets the current build stage.
2386
2459
  *
2387
- * @param {('setup'|'analyze'|'generate')?} buildStage - The build stage to set.
2460
+ * @param {?('setup'|'analyze'|'generate')} buildStage - The build stage to set.
2388
2461
  */
2389
2462
  setBuildStage( buildStage ) {
2390
2463
 
@@ -2395,7 +2468,7 @@ class NodeBuilder {
2395
2468
  /**
2396
2469
  * Returns the current build stage.
2397
2470
  *
2398
- * @return {('setup'|'analyze'|'generate')?} The current build stage.
2471
+ * @return {?('setup'|'analyze'|'generate')} The current build stage.
2399
2472
  */
2400
2473
  getBuildStage() {
2401
2474
 
@@ -2497,7 +2570,7 @@ class NodeBuilder {
2497
2570
  * Returns a uniform representation which is later used for UBO generation and rendering.
2498
2571
  *
2499
2572
  * @param {NodeUniform} uniformNode - The uniform node.
2500
- * @param {String} type - The requested type.
2573
+ * @param {string} type - The requested type.
2501
2574
  * @return {Uniform} The uniform.
2502
2575
  */
2503
2576
  getNodeUniform( uniformNode, type ) {
@@ -2520,10 +2593,10 @@ class NodeBuilder {
2520
2593
  * this method might be used to convert a simple float string `"1.0"` into a
2521
2594
  * `vec3` representation: `"vec3<f32>( 1.0 )"`.
2522
2595
  *
2523
- * @param {String} snippet - The shader snippet.
2524
- * @param {String} fromType - The source type.
2525
- * @param {String} toType - The target type.
2526
- * @return {String} The updated shader string.
2596
+ * @param {string} snippet - The shader snippet.
2597
+ * @param {string} fromType - The source type.
2598
+ * @param {string} toType - The target type.
2599
+ * @return {string} The updated shader string.
2527
2600
  */
2528
2601
  format( snippet, fromType, toType ) {
2529
2602
 
@@ -2541,13 +2614,13 @@ class NodeBuilder {
2541
2614
 
2542
2615
  if ( fromTypeLength === 16 && toTypeLength === 9 ) {
2543
2616
 
2544
- return `${ this.getType( toType ) }(${ snippet }[0].xyz, ${ snippet }[1].xyz, ${ snippet }[2].xyz)`;
2617
+ return `${ this.getType( toType ) }( ${ snippet }[ 0 ].xyz, ${ snippet }[ 1 ].xyz, ${ snippet }[ 2 ].xyz )`;
2545
2618
 
2546
2619
  }
2547
2620
 
2548
2621
  if ( fromTypeLength === 9 && toTypeLength === 4 ) {
2549
2622
 
2550
- return `${ this.getType( toType ) }(${ snippet }[0].xy, ${ snippet }[1].xy)`;
2623
+ return `${ this.getType( toType ) }( ${ snippet }[ 0 ].xy, ${ snippet }[ 1 ].xy )`;
2551
2624
 
2552
2625
  }
2553
2626
 
@@ -2608,7 +2681,7 @@ class NodeBuilder {
2608
2681
  /**
2609
2682
  * Returns a signature with the engine's current revision.
2610
2683
  *
2611
- * @return {String} The signature.
2684
+ * @return {string} The signature.
2612
2685
  */
2613
2686
  getSignature() {
2614
2687
 
@@ -2622,7 +2695,7 @@ class NodeBuilder {
2622
2695
  * @function
2623
2696
  * @deprecated since r168. Use `new NodeMaterial()` instead, with targeted node material name.
2624
2697
  *
2625
- * @param {String} [type='NodeMaterial'] - The node material type.
2698
+ * @param {string} [type='NodeMaterial'] - The node material type.
2626
2699
  * @throws {Error}
2627
2700
  */
2628
2701
  createNodeMaterial( type = 'NodeMaterial' ) { // @deprecated, r168