@plastic-software/three 0.174.0 → 0.175.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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  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 +93 -39
  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 +171 -48
  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 +71 -29
  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 +41 -3
  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 +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  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 +42 -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 +218 -5
  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 +86 -18
  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 +38 -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 +81 -61
  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 +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  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 +70 -0
  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 +131 -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 +266 -133
  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/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -125,7 +125,7 @@ export default ContextNode;
125
125
  * @param {Object} [value={}] - The modified context data.
126
126
  * @returns {ContextNode}
127
127
  */
128
- export const context = /*@__PURE__*/ nodeProxy( ContextNode );
128
+ export const context = /*@__PURE__*/ nodeProxy( ContextNode ).setParameterLength( 1, 2 );
129
129
 
130
130
  /**
131
131
  * TSL function for defining a label context value for a given node.
@@ -17,7 +17,7 @@ class InputNode extends Node {
17
17
  /**
18
18
  * Constructs a new input node.
19
19
  *
20
- * @param {any} value - The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
20
+ * @param {any} value - The value of this node. This can be any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
21
21
  * @param {?string} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
22
22
  */
23
23
  constructor( value, nodeType = null ) {
@@ -34,7 +34,7 @@ class InputNode extends Node {
34
34
  this.isInputNode = true;
35
35
 
36
36
  /**
37
- * The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
37
+ * The value of this node. This can be any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
38
38
  *
39
39
  * @type {any}
40
40
  */
@@ -674,9 +674,21 @@ class Node extends EventDispatcher {
674
674
 
675
675
  if ( result === undefined ) {
676
676
 
677
- result = this.generate( builder ) || '';
677
+ if ( nodeData.generated === undefined ) {
678
678
 
679
- nodeData.snippet = result;
679
+ nodeData.generated = true;
680
+
681
+ result = this.generate( builder ) || '';
682
+
683
+ nodeData.snippet = result;
684
+
685
+ } else {
686
+
687
+ console.warn( 'THREE.Node: Recursion detected.', this );
688
+
689
+ result = '';
690
+
691
+ }
680
692
 
681
693
  } else if ( nodeData.flowCodes !== undefined && builder.context.nodeBlock !== undefined ) {
682
694
 
@@ -314,11 +314,20 @@ class NodeBuilder {
314
314
  /**
315
315
  * This dictionary holds the node variables of this builder.
316
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).
317
319
  *
318
- * @type {Object<string,Array<NodeVar>>}
320
+ * @type {Object<string,Array<NodeVar>|number>}
319
321
  */
320
322
  this.vars = {};
321
323
 
324
+ /**
325
+ * This dictionary holds the declarations for each shader stage.
326
+ *
327
+ * @type {Object}
328
+ */
329
+ this.declarations = {};
330
+
322
331
  /**
323
332
  * Current code flow.
324
333
  * All code generated in this stack will be stored in `.flow`.
@@ -410,14 +419,6 @@ class NodeBuilder {
410
419
  */
411
420
  this.buildStage = null;
412
421
 
413
- /**
414
- * Whether comparison in shader code are generated with methods or not.
415
- *
416
- * @type {boolean}
417
- * @default false
418
- */
419
- this.useComparisonMethod = false;
420
-
421
422
  }
422
423
 
423
424
  /**
@@ -946,7 +947,7 @@ class NodeBuilder {
946
947
  * Only relevant for WebGL and its `WEBGL_multi_draw` extension.
947
948
  *
948
949
  * @abstract
949
- * @return {string} The drawIndex shader string.
950
+ * @return {?string} The drawIndex shader string.
950
951
  */
951
952
  getDrawIndex() {
952
953
 
@@ -1232,6 +1233,8 @@ class NodeBuilder {
1232
1233
 
1233
1234
  const attribute = new NodeAttribute( name, type );
1234
1235
 
1236
+ this.registerDeclaration( attribute );
1237
+
1235
1238
  attributes.push( attribute );
1236
1239
 
1237
1240
  return attribute;
@@ -1283,7 +1286,7 @@ class NodeBuilder {
1283
1286
  */
1284
1287
  isReference( type ) {
1285
1288
 
1286
- 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';
1287
1290
 
1288
1291
  }
1289
1292
 
@@ -1413,6 +1416,18 @@ class NodeBuilder {
1413
1416
 
1414
1417
  }
1415
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
+
1416
1431
  /**
1417
1432
  * Returns the type for a given buffer attribute.
1418
1433
  *
@@ -1682,6 +1697,8 @@ class NodeBuilder {
1682
1697
 
1683
1698
  this.uniforms[ shaderStage ].push( nodeUniform );
1684
1699
 
1700
+ this.registerDeclaration( nodeUniform );
1701
+
1685
1702
  nodeData.uniform = nodeUniform;
1686
1703
 
1687
1704
  }
@@ -1751,6 +1768,8 @@ class NodeBuilder {
1751
1768
 
1752
1769
  }
1753
1770
 
1771
+ this.registerDeclaration( nodeVar );
1772
+
1754
1773
  nodeData.variable = nodeVar;
1755
1774
 
1756
1775
  }
@@ -1831,6 +1850,8 @@ class NodeBuilder {
1831
1850
 
1832
1851
  varyings.push( nodeVarying );
1833
1852
 
1853
+ this.registerDeclaration( nodeVarying );
1854
+
1834
1855
  nodeData.varying = nodeVarying;
1835
1856
 
1836
1857
  }
@@ -1839,6 +1860,41 @@ class NodeBuilder {
1839
1860
 
1840
1861
  }
1841
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
+
1842
1898
  /**
1843
1899
  * Returns an instance of {@link NodeCode} for the given code node.
1844
1900
  *
@@ -2126,6 +2182,7 @@ class NodeBuilder {
2126
2182
 
2127
2183
  const previousFlow = this.flow;
2128
2184
  const previousVars = this.vars;
2185
+ const previousDeclarations = this.declarations;
2129
2186
  const previousCache = this.cache;
2130
2187
  const previousBuildStage = this.buildStage;
2131
2188
  const previousStack = this.stack;
@@ -2136,6 +2193,7 @@ class NodeBuilder {
2136
2193
 
2137
2194
  this.flow = flow;
2138
2195
  this.vars = {};
2196
+ this.declarations = {};
2139
2197
  this.cache = new NodeCache();
2140
2198
  this.stack = stack();
2141
2199
 
@@ -2151,6 +2209,7 @@ class NodeBuilder {
2151
2209
 
2152
2210
  this.flow = previousFlow;
2153
2211
  this.vars = previousVars;
2212
+ this.declarations = previousDeclarations;
2154
2213
  this.cache = previousCache;
2155
2214
  this.stack = previousStack;
2156
2215
 
@@ -2166,7 +2225,7 @@ class NodeBuilder {
2166
2225
  *
2167
2226
  * @abstract
2168
2227
  * @param {string} op - The operator name to resolve.
2169
- * @return {string} The resolved operator name.
2228
+ * @return {?string} The resolved operator name.
2170
2229
  */
2171
2230
  getFunctionOperator( /* op */ ) {
2172
2231
 
@@ -2174,6 +2233,19 @@ class NodeBuilder {
2174
2233
 
2175
2234
  }
2176
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
+
2177
2249
  /**
2178
2250
  * Generates a code flow based on a child Node.
2179
2251
  *
@@ -2542,13 +2614,13 @@ class NodeBuilder {
2542
2614
 
2543
2615
  if ( fromTypeLength === 16 && toTypeLength === 9 ) {
2544
2616
 
2545
- 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 )`;
2546
2618
 
2547
2619
  }
2548
2620
 
2549
2621
  if ( fromTypeLength === 9 && toTypeLength === 4 ) {
2550
2622
 
2551
- return `${ this.getType( toType ) }(${ snippet }[0].xy, ${ snippet }[1].xy)`;
2623
+ return `${ this.getType( toType ) }( ${ snippet }[ 0 ].xy, ${ snippet }[ 1 ].xy )`;
2552
2624
 
2553
2625
  }
2554
2626
 
@@ -167,12 +167,12 @@ class StackNode extends Node {
167
167
  * @function
168
168
  * @deprecated since r168. Use {@link StackNode#Else} instead.
169
169
  *
170
- * @param {...any} params
170
+ * @param {...any} params
171
171
  * @returns {StackNode}
172
172
  */
173
173
  else( ...params ) { // @deprecated, r168
174
174
 
175
- console.warn( 'TSL.StackNode: .else() has been renamed to .Else().' );
175
+ console.warn( 'THREE.TSL: .else() has been renamed to .Else().' );
176
176
  return this.Else( ...params );
177
177
 
178
178
  }
@@ -180,12 +180,12 @@ class StackNode extends Node {
180
180
  /**
181
181
  * @deprecated since r168. Use {@link StackNode#ElseIf} instead.
182
182
  *
183
- * @param {...any} params
183
+ * @param {...any} params
184
184
  * @returns {StackNode}
185
185
  */
186
186
  elseif( ...params ) { // @deprecated, r168
187
187
 
188
- console.warn( 'TSL.StackNode: .elseif() has been renamed to .ElseIf().' );
188
+ console.warn( 'THREE.TSL: .elseif() has been renamed to .ElseIf().' );
189
189
  return this.ElseIf( ...params );
190
190
 
191
191
  }
@@ -202,4 +202,4 @@ export default StackNode;
202
202
  * @param {?StackNode} [parent=null] - The parent stack node.
203
203
  * @returns {StackNode}
204
204
  */
205
- export const stack = /*@__PURE__*/ nodeProxy( StackNode );
205
+ export const stack = /*@__PURE__*/ nodeProxy( StackNode ).setParameterLength( 0, 1 );
@@ -75,7 +75,7 @@ export default StructNode;
75
75
  * @tsl
76
76
  * @function
77
77
  * @param {Object} membersLayout - The layout of the struct members.
78
- * @param {string} [name=null] - The name of the struct.
78
+ * @param {?string} [name=null] - The name of the struct.
79
79
  * @returns {Function} The struct function.
80
80
  */
81
81
  export const struct = ( membersLayout, name = null ) => {
@@ -46,7 +46,7 @@ class StructTypeNode extends Node {
46
46
  * Creates an instance of StructTypeNode.
47
47
  *
48
48
  * @param {Object} membersLayout - The layout of the members for the struct.
49
- * @param {string} [name=null] - The optional name of the struct.
49
+ * @param {?string} [name=null] - The optional name of the struct.
50
50
  */
51
51
  constructor( membersLayout, name = null ) {
52
52
 
@@ -62,7 +62,7 @@ class StructTypeNode extends Node {
62
62
  /**
63
63
  * The name of the struct.
64
64
  *
65
- * @type {string}
65
+ * @type {?string}
66
66
  * @default null
67
67
  */
68
68
  this.name = name;
@@ -23,8 +23,8 @@ class VarNode extends Node {
23
23
  * Constructs a new variable node.
24
24
  *
25
25
  * @param {Node} node - The node for which a variable should be created.
26
- * @param {?string} name - The name of the variable in the shader.
27
- * @param {?boolean} readOnly - The read-only flag.
26
+ * @param {?string} [name=null] - The name of the variable in the shader.
27
+ * @param {boolean} [readOnly=false] - The read-only flag.
28
28
  */
29
29
  constructor( node, name = null, readOnly = false ) {
30
30
 
@@ -74,12 +74,6 @@ class VarNode extends Node {
74
74
 
75
75
  }
76
76
 
77
- getHash( builder ) {
78
-
79
- return this.name || super.getHash( builder );
80
-
81
- }
82
-
83
77
  getMemberType( builder, name ) {
84
78
 
85
79
  return this.node.getMemberType( builder, name );
@@ -173,7 +173,7 @@ export default VaryingNode;
173
173
  * @param {?string} name - The name of the varying in the shader.
174
174
  * @returns {VaryingNode}
175
175
  */
176
- export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
176
+ export const varying = /*@__PURE__*/ nodeProxy( VaryingNode ).setParameterLength( 1, 2 );
177
177
 
178
178
  /**
179
179
  * Computes a node in the vertex stage.
@@ -192,14 +192,14 @@ addMethodChaining( 'toVertexStage', vertexStage );
192
192
 
193
193
  addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
194
194
 
195
- console.warn( 'TSL.VaryingNode: .varying() has been renamed to .toVarying().' );
195
+ console.warn( 'THREE.TSL: .varying() has been renamed to .toVarying().' );
196
196
  return varying( ...params );
197
197
 
198
198
  } );
199
199
 
200
200
  addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
201
201
 
202
- console.warn( 'TSL.VaryingNode: .vertexStage() has been renamed to .toVertexStage().' );
202
+ console.warn( 'THREE.TSL: .vertexStage() has been renamed to .toVertexStage().' );
203
203
  return varying( ...params );
204
204
 
205
205
  } );
@@ -137,7 +137,7 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
137
137
  * @function
138
138
  * @deprecated since r171. Use {@link blendBurn} instead.
139
139
  *
140
- * @param {...any} params
140
+ * @param {...any} params
141
141
  * @returns {Function}
142
142
  */
143
143
  export const burn = ( ...params ) => { // @deprecated, r171
@@ -152,7 +152,7 @@ export const burn = ( ...params ) => { // @deprecated, r171
152
152
  * @function
153
153
  * @deprecated since r171. Use {@link blendDodge} instead.
154
154
  *
155
- * @param {...any} params
155
+ * @param {...any} params
156
156
  * @returns {Function}
157
157
  */
158
158
  export const dodge = ( ...params ) => { // @deprecated, r171
@@ -167,7 +167,7 @@ export const dodge = ( ...params ) => { // @deprecated, r171
167
167
  * @function
168
168
  * @deprecated since r171. Use {@link blendScreen} instead.
169
169
  *
170
- * @param {...any} params
170
+ * @param {...any} params
171
171
  * @returns {Function}
172
172
  */
173
173
  export const screen = ( ...params ) => { // @deprecated, r171
@@ -182,7 +182,7 @@ export const screen = ( ...params ) => { // @deprecated, r171
182
182
  * @function
183
183
  * @deprecated since r171. Use {@link blendOverlay} instead.
184
184
  *
185
- * @param {...any} params
185
+ * @param {...any} params
186
186
  * @returns {Function}
187
187
  */
188
188
  export const overlay = ( ...params ) => { // @deprecated, r171
@@ -114,4 +114,4 @@ export default BumpMapNode;
114
114
  * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
115
115
  * @returns {BumpMapNode}
116
116
  */
117
- export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
117
+ export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode ).setParameterLength( 1, 2 );
@@ -145,4 +145,4 @@ export default NormalMapNode;
145
145
  * @param {?Node<vec2>} [scaleNode=null] - Controls the intensity of the effect.
146
146
  * @returns {NormalMapNode}
147
147
  */
148
- export const normalMap = /*@__PURE__*/ nodeProxy( NormalMapNode );
148
+ export const normalMap = /*@__PURE__*/ nodeProxy( NormalMapNode ).setParameterLength( 1, 2 );
@@ -62,4 +62,4 @@ export default PosterizeNode;
62
62
  * @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
63
63
  * @returns {PosterizeNode}
64
64
  */
65
- export const posterize = /*@__PURE__*/ nodeProxy( PosterizeNode );
65
+ export const posterize = /*@__PURE__*/ nodeProxy( PosterizeNode ).setParameterLength( 2 );
@@ -253,7 +253,7 @@ export const viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );
253
253
  */
254
254
  export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169
255
255
 
256
- console.warn( 'TSL.ViewportNode: "viewportResolution" is deprecated. Use "screenSize" instead.' );
256
+ console.warn( 'THREE.TSL: "viewportResolution" is deprecated. Use "screenSize" instead.' );
257
257
 
258
258
  return screenSize;
259
259
 
@@ -266,7 +266,7 @@ export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r1
266
266
  */
267
267
  export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
268
268
 
269
- console.warn( 'TSL.ViewportNode: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
269
+ console.warn( 'THREE.TSL: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
270
270
 
271
271
  return screenUV;
272
272
 
@@ -279,7 +279,7 @@ export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
279
279
  */
280
280
  export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
281
281
 
282
- console.warn( 'TSL.ViewportNode: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
282
+ console.warn( 'THREE.TSL: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
283
283
 
284
284
  return screenUV.flipY();
285
285
 
@@ -278,10 +278,10 @@ export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDep
278
278
  *
279
279
  * @tsl
280
280
  * @function
281
- * @param {Node<float>} value - The perspective depth.
281
+ * @param {?Node<float>} [value=null] - The perspective depth. If `null` is provided, the current fragment's depth is used.
282
282
  * @returns {ViewportDepthNode<float>}
283
283
  */
284
- export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
284
+ export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH ).setParameterLength( 0, 1 );
285
285
 
286
286
  /**
287
287
  * TSL object that represents the linear (orthographic) depth value of the current fragment
@@ -48,8 +48,8 @@ export default ViewportDepthTextureNode;
48
48
  *
49
49
  * @tsl
50
50
  * @function
51
- * @param {Node} [uvNode=screenUV] - The uv node.
51
+ * @param {?Node} [uvNode=screenUV] - The uv node.
52
52
  * @param {?Node} [levelNode=null] - The level node.
53
53
  * @returns {ViewportDepthTextureNode}
54
54
  */
55
- export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );
55
+ export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode ).setParameterLength( 0, 2 );
@@ -54,8 +54,8 @@ export default ViewportSharedTextureNode;
54
54
  *
55
55
  * @tsl
56
56
  * @function
57
- * @param {Node} [uvNode=screenUV] - The uv node.
57
+ * @param {?Node} [uvNode=screenUV] - The uv node.
58
58
  * @param {?Node} [levelNode=null] - The level node.
59
59
  * @returns {ViewportSharedTextureNode}
60
60
  */
61
- export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode );
61
+ export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode ).setParameterLength( 0, 2 );
@@ -118,21 +118,21 @@ export default ViewportTextureNode;
118
118
  *
119
119
  * @tsl
120
120
  * @function
121
- * @param {Node} [uvNode=screenUV] - The uv node.
121
+ * @param {?Node} [uvNode=screenUV] - The uv node.
122
122
  * @param {?Node} [levelNode=null] - The level node.
123
123
  * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
124
124
  * @returns {ViewportTextureNode}
125
125
  */
126
- export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode );
126
+ export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode ).setParameterLength( 0, 3 );
127
127
 
128
128
  /**
129
129
  * TSL function for creating a viewport texture node with enabled mipmap generation.
130
130
  *
131
131
  * @tsl
132
132
  * @function
133
- * @param {Node} [uvNode=screenUV] - The uv node.
133
+ * @param {?Node} [uvNode=screenUV] - The uv node.
134
134
  * @param {?Node} [levelNode=null] - The level node.
135
135
  * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
136
136
  * @returns {ViewportTextureNode}
137
137
  */
138
- export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
138
+ export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } ).setParameterLength( 0, 3 );
@@ -30,18 +30,18 @@ class ShadowMaskModel extends LightingModel {
30
30
  *
31
31
  * @param {Object} input - The input data.
32
32
  */
33
- direct( { shadowMask } ) {
33
+ direct( { lightNode } ) {
34
34
 
35
- this.shadowNode.mulAssign( shadowMask );
35
+ this.shadowNode.mulAssign( lightNode.shadowNode );
36
36
 
37
37
  }
38
38
 
39
39
  /**
40
40
  * Uses the shadow mask to produce the final color.
41
41
  *
42
- * @param {ContextNode} context - The current node context.
42
+ * @param {NodeBuilder} builder - The current node builder.
43
43
  */
44
- finish( context ) {
44
+ finish( { context } ) {
45
45
 
46
46
  diffuseColor.a.mulAssign( this.shadowNode.oneMinus() );
47
47
 
@@ -20,16 +20,16 @@ import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
20
20
  */
21
21
  const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
22
22
 
23
- const nDir = normalize( normal ).toVar( 'nDir' );
24
- const rbmax = sub( float( 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar( 'rbmax' );
25
- const rbmin = sub( float( - 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar( 'rbmin' );
26
- const rbminmax = vec3().toVar( 'rbminmax' );
23
+ const nDir = normalize( normal ).toVar();
24
+ const rbmax = sub( float( 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar();
25
+ const rbmin = sub( float( - 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar();
26
+ const rbminmax = vec3().toVar();
27
27
  rbminmax.x = nDir.x.greaterThan( float( 0 ) ).select( rbmax.x, rbmin.x );
28
28
  rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
29
29
  rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
30
30
 
31
- const correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ).toVar( 'correction' );
32
- const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar( 'boxIntersection' );
31
+ const correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ).toVar();
32
+ const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();
33
33
  return boxIntersection.sub( cubePos );
34
34
 
35
35
  } );
@@ -169,4 +169,4 @@ export default RangeNode;
169
169
  * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
170
170
  * @returns {RangeNode}
171
171
  */
172
- export const range = /*@__PURE__*/ nodeProxy( RangeNode );
172
+ export const range = /*@__PURE__*/ nodeProxy( RangeNode ).setParameterLength( 2 );