@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  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 +1432 -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 +58 -1
  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/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -17,12 +17,12 @@ export function addMethodChaining( name, nodeElement ) {
17
17
 
18
18
  if ( NodeElements.has( name ) ) {
19
19
 
20
- console.warn( `Redefinition of method chaining ${ name }` );
20
+ console.warn( `THREE.TSL: Redefinition of method chaining '${ name }'.` );
21
21
  return;
22
22
 
23
23
  }
24
24
 
25
- if ( typeof nodeElement !== 'function' ) throw new Error( `Node element ${ name } is not a function` );
25
+ if ( typeof nodeElement !== 'function' ) throw new Error( `THREE.TSL: Node element ${ name } is not a function` );
26
26
 
27
27
  NodeElements.set( name, nodeElement );
28
28
 
@@ -213,11 +213,38 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
213
213
 
214
214
  const assignNode = ( node ) => nodeObject( settings !== null ? Object.assign( node, settings ) : node );
215
215
 
216
+ let fn, name = scope, minParams, maxParams;
217
+
218
+ function verifyParamsLimit( params ) {
219
+
220
+ let tslName;
221
+
222
+ if ( name ) tslName = /[a-z]/i.test( name ) ? name + '()' : name;
223
+ else tslName = NodeClass.type;
224
+
225
+ if ( minParams !== undefined && params.length < minParams ) {
226
+
227
+ console.error( `THREE.TSL: "${ tslName }" parameter length is less than minimum required.` );
228
+
229
+ return params.concat( new Array( minParams - params.length ).fill( 0 ) );
230
+
231
+ } else if ( maxParams !== undefined && params.length > maxParams ) {
232
+
233
+ console.error( `THREE.TSL: "${ tslName }" parameter length exceeds limit.` );
234
+
235
+ return params.slice( 0, maxParams );
236
+
237
+ }
238
+
239
+ return params;
240
+
241
+ }
242
+
216
243
  if ( scope === null ) {
217
244
 
218
- return ( ...params ) => {
245
+ fn = ( ...params ) => {
219
246
 
220
- return assignNode( new NodeClass( ...nodeArray( params ) ) );
247
+ return assignNode( new NodeClass( ...nodeArray( verifyParamsLimit( params ) ) ) );
221
248
 
222
249
  };
223
250
 
@@ -225,22 +252,41 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
225
252
 
226
253
  factor = nodeObject( factor );
227
254
 
228
- return ( ...params ) => {
255
+ fn = ( ...params ) => {
229
256
 
230
- return assignNode( new NodeClass( scope, ...nodeArray( params ), factor ) );
257
+ return assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ), factor ) );
231
258
 
232
259
  };
233
260
 
234
261
  } else {
235
262
 
236
- return ( ...params ) => {
263
+ fn = ( ...params ) => {
237
264
 
238
- return assignNode( new NodeClass( scope, ...nodeArray( params ) ) );
265
+ return assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ) ) );
239
266
 
240
267
  };
241
268
 
242
269
  }
243
270
 
271
+ fn.setParameterLength = ( ...params ) => {
272
+
273
+ if ( params.length === 1 ) minParams = maxParams = params[ 0 ];
274
+ else if ( params.length === 2 ) [ minParams, maxParams ] = params;
275
+
276
+ return fn;
277
+
278
+ };
279
+
280
+ fn.setName = ( value ) => {
281
+
282
+ name = value;
283
+
284
+ return fn;
285
+
286
+ };
287
+
288
+ return fn;
289
+
244
290
  };
245
291
 
246
292
  const ShaderNodeImmutable = function ( NodeClass, ...params ) {
@@ -514,7 +560,35 @@ export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, al
514
560
  export const nodeProxy = ( ...params ) => new ShaderNodeProxy( ...params );
515
561
  export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
516
562
 
517
- export const Fn = ( jsFunc, nodeType ) => {
563
+ let fnId = 0;
564
+
565
+ export const Fn = ( jsFunc, layout = null ) => {
566
+
567
+ let nodeType = null;
568
+
569
+ if ( layout !== null ) {
570
+
571
+ if ( typeof layout === 'object' ) {
572
+
573
+ nodeType = layout.return;
574
+
575
+ } else {
576
+
577
+ if ( typeof layout === 'string' ) {
578
+
579
+ nodeType = layout;
580
+
581
+ } else {
582
+
583
+ console.error( 'THREE.TSL: Invalid layout type.' );
584
+
585
+ }
586
+
587
+ layout = null;
588
+
589
+ }
590
+
591
+ }
518
592
 
519
593
  const shaderNode = new ShaderNode( jsFunc, nodeType );
520
594
 
@@ -556,6 +630,35 @@ export const Fn = ( jsFunc, nodeType ) => {
556
630
 
557
631
  };
558
632
 
633
+ if ( layout !== null ) {
634
+
635
+ if ( typeof layout.inputs !== 'object' ) {
636
+
637
+ const fullLayout = {
638
+ name: 'fn' + fnId ++,
639
+ type: nodeType,
640
+ inputs: []
641
+ };
642
+
643
+ for ( const name in layout ) {
644
+
645
+ if ( name === 'return' ) continue;
646
+
647
+ fullLayout.inputs.push( {
648
+ name: name,
649
+ type: layout[ name ]
650
+ } );
651
+
652
+ }
653
+
654
+ layout = fullLayout;
655
+
656
+ }
657
+
658
+ fn.setLayout( layout );
659
+
660
+ }
661
+
559
662
  return fn;
560
663
 
561
664
  };
@@ -565,12 +668,12 @@ export const Fn = ( jsFunc, nodeType ) => {
565
668
  * @function
566
669
  * @deprecated since r168. Use {@link Fn} instead.
567
670
  *
568
- * @param {...any} params
671
+ * @param {...any} params
569
672
  * @returns {Function}
570
673
  */
571
674
  export const tslFn = ( ...params ) => { // @deprecated, r168
572
675
 
573
- console.warn( 'TSL.ShaderNode: tslFn() has been renamed to Fn().' );
676
+ console.warn( 'THREE.TSL: tslFn() has been renamed to Fn().' );
574
677
  return Fn( ...params );
575
678
 
576
679
  };
@@ -667,7 +770,7 @@ addMethodChaining( 'toMat4', mat4 );
667
770
 
668
771
  // basic nodes
669
772
 
670
- export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode );
773
+ export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode ).setParameterLength( 2 );
671
774
  export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
672
775
  export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject( node ), channels ) );
673
776
 
@@ -63,8 +63,10 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
63
63
 
64
64
  generate( builder ) {
65
65
 
66
+ const indexType = this.indexNode.getNodeType( builder );
67
+
66
68
  const nodeSnippet = this.node.build( builder );
67
- const indexSnippet = this.indexNode.build( builder, 'uint' );
69
+ const indexSnippet = this.indexNode.build( builder, ! builder.isVector( indexType ) && builder.isInteger( indexType ) ? indexType : 'uint' );
68
70
 
69
71
  return `${ nodeSnippet }[ ${ indexSnippet } ]`;
70
72
 
@@ -42,7 +42,7 @@ class CubeMapNode extends TempNode {
42
42
  * A reference to the internal cube texture.
43
43
  *
44
44
  * @private
45
- * @type {CubeTexture}
45
+ * @type {?CubeTexture}
46
46
  * @default null
47
47
  */
48
48
  this._cubeTexture = null;
@@ -53,7 +53,7 @@ class CubeMapNode extends TempNode {
53
53
  * @private
54
54
  * @type {CubeTextureNode}
55
55
  */
56
- this._cubeTextureNode = cubeTexture();
56
+ this._cubeTextureNode = cubeTexture( null );
57
57
 
58
58
  const defaultTexture = new CubeTexture();
59
59
  defaultTexture.isRenderTargetTexture = true;
@@ -234,4 +234,4 @@ function mapTextureMapping( texture, mapping ) {
234
234
  * @param {Node} envNode - The node representing the environment map.
235
235
  * @returns {CubeMapNode}
236
236
  */
237
- export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
237
+ export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode ).setParameterLength( 1 );
@@ -0,0 +1,70 @@
1
+ import TempNode from '../core/TempNode.js';
2
+ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
3
+
4
+ class DebugNode extends TempNode {
5
+
6
+ static get type() {
7
+
8
+ return 'DebugNode';
9
+
10
+ }
11
+
12
+ constructor( node, callback = null ) {
13
+
14
+ super();
15
+
16
+ this.node = node;
17
+ this.callback = callback;
18
+
19
+ }
20
+
21
+ getNodeType( builder ) {
22
+
23
+ return this.node.getNodeType( builder );
24
+
25
+ }
26
+
27
+ setup( builder ) {
28
+
29
+ return this.node.build( builder );
30
+
31
+ }
32
+
33
+ analyze( builder ) {
34
+
35
+ return this.node.build( builder );
36
+
37
+ }
38
+
39
+ generate( builder ) {
40
+
41
+ const callback = this.callback;
42
+ const snippet = this.node.build( builder );
43
+
44
+ let code = '';
45
+ code += '// #--- TSL Debug ---#\n';
46
+ code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
47
+ code += '/* ... */ ' + snippet + ' /* ... */\n';
48
+ code += '// #-----------------#\n';
49
+
50
+ if ( callback !== null ) {
51
+
52
+ callback( code );
53
+
54
+ } else {
55
+
56
+ console.log( code );
57
+
58
+ }
59
+
60
+ return snippet;
61
+
62
+ }
63
+
64
+ }
65
+
66
+ export default DebugNode;
67
+
68
+ export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) );
69
+
70
+ addMethodChaining( 'debug', debug );
@@ -59,7 +59,7 @@ export default EquirectUVNode;
59
59
  *
60
60
  * @tsl
61
61
  * @function
62
- * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
62
+ * @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
63
63
  * @returns {EquirectUVNode}
64
64
  */
65
- export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
65
+ export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode ).setParameterLength( 0, 1 );
@@ -56,17 +56,42 @@ class JoinNode extends TempNode {
56
56
  generate( builder, output ) {
57
57
 
58
58
  const type = this.getNodeType( builder );
59
+ const maxLength = builder.getTypeLength( type );
60
+
59
61
  const nodes = this.nodes;
60
62
 
61
63
  const primitiveType = builder.getComponentType( type );
62
64
 
63
65
  const snippetValues = [];
64
66
 
67
+ let length = 0;
68
+
65
69
  for ( const input of nodes ) {
66
70
 
67
- let inputSnippet = input.build( builder );
71
+ if ( length >= maxLength ) {
72
+
73
+ console.error( `THREE.TSL: Length of parameters exceeds maximum length of function '${ type }()' type.` );
74
+ break;
75
+
76
+ }
77
+
78
+ let inputType = input.getNodeType( builder );
79
+ let inputTypeLength = builder.getTypeLength( inputType );
80
+ let inputSnippet;
81
+
82
+ if ( length + inputTypeLength > maxLength ) {
83
+
84
+ console.error( `THREE.TSL: Length of '${ type }()' data exceeds maximum length of output type.` );
85
+
86
+ inputTypeLength = maxLength - length;
87
+ inputType = builder.getTypeFromLength( inputTypeLength );
88
+
89
+ }
90
+
91
+ length += inputTypeLength;
92
+ inputSnippet = input.build( builder, inputType );
68
93
 
69
- const inputPrimitiveType = builder.getComponentType( input.getNodeType( builder ) );
94
+ const inputPrimitiveType = builder.getComponentType( inputType );
70
95
 
71
96
  if ( inputPrimitiveType !== primitiveType ) {
72
97
 
@@ -25,6 +25,16 @@ import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
25
25
  * ```js
26
26
  * Loop( { start: 10 }, () => {} );
27
27
  * ```
28
+ * It is possible to execute with boolean values, similar to the `while` syntax.
29
+ * ```js
30
+ * const value = float( 0 ).toVar();
31
+ *
32
+ * Loop( value.lessThan( 10 ), () => {
33
+ *
34
+ * value.addAssign( 1 );
35
+ *
36
+ * } );
37
+ * ```
28
38
  * The module also provides `Break()` and `Continue()` TSL expression for loop control.
29
39
  * @augments Node
30
40
  */
@@ -133,15 +143,25 @@ class LoopNode extends Node {
133
143
 
134
144
  const param = params[ i ];
135
145
 
136
- let start = null, end = null, name = null, type = null, condition = null, update = null;
146
+ let isWhile = false, start = null, end = null, name = null, type = null, condition = null, update = null;
137
147
 
138
148
  if ( param.isNode ) {
139
149
 
140
- type = 'int';
141
- name = this.getVarName( i );
142
- start = '0';
143
- end = param.build( builder, type );
144
- condition = '<';
150
+ if ( param.getNodeType( builder ) === 'bool' ) {
151
+
152
+ isWhile = true;
153
+ type = 'bool';
154
+ end = param.build( builder, type );
155
+
156
+ } else {
157
+
158
+ type = 'int';
159
+ name = this.getVarName( i );
160
+ start = '0';
161
+ end = param.build( builder, type );
162
+ condition = '<';
163
+
164
+ }
145
165
 
146
166
  } else {
147
167
 
@@ -187,41 +207,51 @@ class LoopNode extends Node {
187
207
 
188
208
  }
189
209
 
190
- const internalParam = { start, end, condition };
210
+ let loopSnippet;
191
211
 
192
- //
212
+ if ( isWhile ) {
193
213
 
194
- const startSnippet = internalParam.start;
195
- const endSnippet = internalParam.end;
214
+ loopSnippet = `while ( ${ end } )`;
196
215
 
197
- let declarationSnippet = '';
198
- let conditionalSnippet = '';
199
- let updateSnippet = '';
216
+ } else {
200
217
 
201
- if ( ! update ) {
218
+ const internalParam = { start, end, condition };
202
219
 
203
- if ( type === 'int' || type === 'uint' ) {
220
+ //
204
221
 
205
- if ( condition.includes( '<' ) ) update = '++';
206
- else update = '--';
222
+ const startSnippet = internalParam.start;
223
+ const endSnippet = internalParam.end;
207
224
 
208
- } else {
225
+ let declarationSnippet = '';
226
+ let conditionalSnippet = '';
227
+ let updateSnippet = '';
228
+
229
+ if ( ! update ) {
230
+
231
+ if ( type === 'int' || type === 'uint' ) {
232
+
233
+ if ( condition.includes( '<' ) ) update = '++';
234
+ else update = '--';
209
235
 
210
- if ( condition.includes( '<' ) ) update = '+= 1.';
211
- else update = '-= 1.';
236
+ } else {
237
+
238
+ if ( condition.includes( '<' ) ) update = '+= 1.';
239
+ else update = '-= 1.';
240
+
241
+ }
212
242
 
213
243
  }
214
244
 
215
- }
245
+ declarationSnippet += builder.getVar( type, name ) + ' = ' + startSnippet;
216
246
 
217
- declarationSnippet += builder.getVar( type, name ) + ' = ' + startSnippet;
247
+ conditionalSnippet += name + ' ' + condition + ' ' + endSnippet;
248
+ updateSnippet += name + ' ' + update;
218
249
 
219
- conditionalSnippet += name + ' ' + condition + ' ' + endSnippet;
220
- updateSnippet += name + ' ' + update;
250
+ loopSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
221
251
 
222
- const forSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
252
+ }
223
253
 
224
- builder.addFlowCode( ( i === 0 ? '\n' : '' ) + builder.tab + forSnippet + ' {\n\n' ).addFlowTab();
254
+ builder.addFlowCode( ( i === 0 ? '\n' : '' ) + builder.tab + loopSnippet + ' {\n\n' ).addFlowTab();
225
255
 
226
256
  }
227
257
 
@@ -282,12 +312,12 @@ export const Break = () => expression( 'break' ).append();
282
312
  * @function
283
313
  * @deprecated since r168. Use {@link Loop} instead.
284
314
  *
285
- * @param {...any} params
315
+ * @param {...any} params
286
316
  * @returns {LoopNode}
287
317
  */
288
318
  export const loop = ( ...params ) => { // @deprecated, r168
289
319
 
290
- console.warn( 'TSL.LoopNode: loop() has been renamed to Loop().' );
320
+ console.warn( 'THREE.TSL: loop() has been renamed to Loop().' );
291
321
  return Loop( ...params );
292
322
 
293
323
  };
@@ -100,4 +100,4 @@ export default MaxMipLevelNode;
100
100
  * @param {TextureNode} textureNode - The texture node to compute the max mip level for.
101
101
  * @returns {MaxMipLevelNode}
102
102
  */
103
- export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode );
103
+ export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode ).setParameterLength( 1 );
@@ -76,8 +76,8 @@ class ReflectorNode extends TextureNode {
76
76
  * A reference to the internal reflector base node which holds the actual implementation.
77
77
  *
78
78
  * @private
79
- * @type {?ReflectorBaseNode}
80
- * @default null
79
+ * @type {ReflectorBaseNode}
80
+ * @default ReflectorBaseNode
81
81
  */
82
82
  this._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );
83
83
 
@@ -101,11 +101,11 @@ export default RemapNode;
101
101
  * @param {Node} node - The node that should be remapped.
102
102
  * @param {Node} inLowNode - The source or current lower bound of the range.
103
103
  * @param {Node} inHighNode - The source or current upper bound of the range.
104
- * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
105
- * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
104
+ * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
105
+ * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
106
106
  * @returns {RemapNode}
107
107
  */
108
- export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
108
+ export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } ).setParameterLength( 3, 5 );
109
109
 
110
110
  /**
111
111
  * TSL function for creating a remap node, but with enabled clamping.
@@ -115,11 +115,11 @@ export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp:
115
115
  * @param {Node} node - The node that should be remapped.
116
116
  * @param {Node} inLowNode - The source or current lower bound of the range.
117
117
  * @param {Node} inHighNode - The source or current upper bound of the range.
118
- * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
119
- * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
118
+ * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
119
+ * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
120
120
  * @returns {RemapNode}
121
121
  */
122
- export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
122
+ export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode ).setParameterLength( 3, 5 );
123
123
 
124
124
  addMethodChaining( 'remap', remap );
125
125
  addMethodChaining( 'remapClamp', remapClamp );
@@ -100,4 +100,4 @@ export default RotateNode;
100
100
  * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
101
101
  * @returns {RotateNode}
102
102
  */
103
- export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
103
+ export const rotate = /*@__PURE__*/ nodeProxy( RotateNode ).setParameterLength( 2 );
@@ -83,8 +83,8 @@ export default SpriteSheetUVNode;
83
83
  * @tsl
84
84
  * @function
85
85
  * @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
86
- * @param {Node<vec2>} [uvNode=uv()] - The uv node.
87
- * @param {Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
86
+ * @param {?Node<vec2>} [uvNode=uv()] - The uv node.
87
+ * @param {?Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
88
88
  * @returns {SpriteSheetUVNode}
89
89
  */
90
- export const spritesheetUV = /*@__PURE__*/ nodeProxy( SpriteSheetUVNode );
90
+ export const spritesheetUV = /*@__PURE__*/ nodeProxy( SpriteSheetUVNode ).setParameterLength( 3 );
@@ -140,4 +140,4 @@ export default StorageArrayElementNode;
140
140
  * @param {Node} indexNode - The index node that defines the element access.
141
141
  * @returns {StorageArrayElementNode}
142
142
  */
143
- export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode );
143
+ export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode ).setParameterLength( 2 );
@@ -46,7 +46,7 @@ class TriplanarTexturesNode extends Node {
46
46
  /**
47
47
  * Second texture node. When not set, the shader will sample from `textureXNode` instead.
48
48
  *
49
- * @type {Node}
49
+ * @type {?Node}
50
50
  * @default null
51
51
  */
52
52
  this.textureYNode = textureYNode;
@@ -54,7 +54,7 @@ class TriplanarTexturesNode extends Node {
54
54
  /**
55
55
  * Third texture node. When not set, the shader will sample from `textureXNode` instead.
56
56
  *
57
- * @type {Node}
57
+ * @type {?Node}
58
58
  * @default null
59
59
  */
60
60
  this.textureZNode = textureZNode;
@@ -130,7 +130,7 @@ export default TriplanarTexturesNode;
130
130
  * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
131
131
  * @returns {TriplanarTexturesNode}
132
132
  */
133
- export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode );
133
+ export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode ).setParameterLength( 1, 6 );
134
134
 
135
135
  /**
136
136
  * TSL function for creating a triplanar textures node.
@@ -446,7 +446,7 @@ class BatchedMesh extends Mesh {
446
446
  /**
447
447
  * Validates the instance defined by the given ID.
448
448
  *
449
- * @param {number} instanceId - The the instance to validate.
449
+ * @param {number} instanceId - The instance to validate.
450
450
  */
451
451
  validateInstanceId( instanceId ) {
452
452
 
@@ -462,7 +462,7 @@ class BatchedMesh extends Mesh {
462
462
  /**
463
463
  * Validates the geometry defined by the given ID.
464
464
  *
465
- * @param {number} geometryId - The the geometry to validate.
465
+ * @param {number} geometryId - The geometry to validate.
466
466
  */
467
467
  validateGeometryId( geometryId ) {
468
468
 
@@ -705,7 +705,7 @@ class BatchedMesh extends Mesh {
705
705
  * is not enough space reserved for geometry. Calling this will change all instances that are
706
706
  * rendering that geometry.
707
707
  *
708
- * @param {number} geometryId - The ID of the geomtry that should be replaced with the given geometry.
708
+ * @param {number} geometryId - The ID of the geometry that should be replaced with the given geometry.
709
709
  * @param {BufferGeometry} geometry - The new geometry.
710
710
  * @return {number} The geometry ID.
711
711
  */
@@ -818,7 +818,7 @@ class BatchedMesh extends Mesh {
818
818
  * Deletes the geometry defined by the given ID from this batch. Any instances referencing
819
819
  * this geometry will also be removed as a side effect.
820
820
  *
821
- * @param {number} geometryId - The ID of the geomtry to remove from the batch.
821
+ * @param {number} geometryId - The ID of the geometry to remove from the batch.
822
822
  * @return {BatchedMesh} A reference to this batched mesh.
823
823
  */
824
824
  deleteGeometry( geometryId ) {
@@ -71,7 +71,7 @@ class InstancedMesh extends Mesh {
71
71
  * {@link Texture#needsUpdate} flag to true if you modify instanced data
72
72
  * via {@link InstancedMesh#setMorphAt}.
73
73
  *
74
- * @type {?InstancedBufferAttribute}
74
+ * @type {?DataTexture}
75
75
  * @default null
76
76
  */
77
77
  this.morphTexture = null;
@@ -321,7 +321,7 @@ class InstancedMesh extends Mesh {
321
321
  * {@link InstancedMesh#instanceMatrix} to `true` after updating all the colors.
322
322
  *
323
323
  * @param {number} index - The instance index.
324
- * @param {Matrix4} matrix - The the local transformation.
324
+ * @param {Matrix4} matrix - The local transformation.
325
325
  */
326
326
  setMatrixAt( index, matrix ) {
327
327
 
@@ -245,7 +245,7 @@ class LOD extends Object3D {
245
245
  * Updates the LOD by computing which LOD level should be visible according
246
246
  * to the current distance of the given camera.
247
247
  *
248
- * @param {Camera} camera - The camera the scene is renderd with.
248
+ * @param {Camera} camera - The camera the scene is rendered with.
249
249
  */
250
250
  update( camera ) {
251
251
 
@@ -310,7 +310,7 @@ class Skeleton {
310
310
  * Setups the skeleton by the given JSON and bones.
311
311
  *
312
312
  * @param {Object} json - The skeleton as serialized JSON.
313
- * @param {Array<Bone>} bones - An array of bones.
313
+ * @param {Object<string, Bone>} bones - An array of bones.
314
314
  * @return {Skeleton} A reference of this instance.
315
315
  */
316
316
  fromJSON( json, bones ) {