@needle-tools/three 0.169.20 → 0.183.2-canary.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 (1051) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -6
  3. package/build/three.cjs +54178 -56709
  4. package/build/three.core.js +59506 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +11645 -73012
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +648 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +53905 -51657
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +53884 -51814
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +5 -15
  17. package/examples/jsm/animation/AnimationClipCreator.js +58 -6
  18. package/examples/jsm/animation/CCDIKSolver.js +152 -45
  19. package/examples/jsm/capabilities/WebGL.js +28 -29
  20. package/examples/jsm/capabilities/WebGPU.js +19 -17
  21. package/examples/jsm/controls/ArcballControls.js +474 -178
  22. package/examples/jsm/controls/DragControls.js +100 -58
  23. package/examples/jsm/controls/FirstPersonControls.js +116 -6
  24. package/examples/jsm/controls/FlyControls.js +50 -2
  25. package/examples/jsm/controls/MapControls.js +96 -8
  26. package/examples/jsm/controls/OrbitControls.js +496 -57
  27. package/examples/jsm/controls/PointerLockControls.js +115 -22
  28. package/examples/jsm/controls/TrackballControls.js +166 -14
  29. package/examples/jsm/controls/TransformControls.js +336 -26
  30. package/examples/jsm/csm/CSM.js +232 -18
  31. package/examples/jsm/csm/CSMFrustum.js +61 -4
  32. package/examples/jsm/csm/CSMHelper.js +50 -0
  33. package/examples/jsm/csm/CSMShader.js +13 -1
  34. package/examples/jsm/csm/CSMShadowNode.js +599 -0
  35. package/examples/jsm/curves/CurveExtras.js +303 -31
  36. package/examples/jsm/curves/NURBSCurve.js +91 -16
  37. package/examples/jsm/curves/NURBSSurface.js +52 -6
  38. package/examples/jsm/curves/NURBSUtils.js +102 -112
  39. package/examples/jsm/curves/NURBSVolume.js +24 -4
  40. package/examples/jsm/effects/AnaglyphEffect.js +134 -7
  41. package/examples/jsm/effects/AsciiEffect.js +69 -22
  42. package/examples/jsm/effects/OutlineEffect.js +61 -111
  43. package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
  44. package/examples/jsm/effects/StereoEffect.js +31 -0
  45. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  46. package/examples/jsm/environments/DebugEnvironment.js +50 -0
  47. package/examples/jsm/environments/RoomEnvironment.js +83 -42
  48. package/examples/jsm/exporters/DRACOExporter.js +56 -14
  49. package/examples/jsm/exporters/EXRExporter.js +40 -9
  50. package/examples/jsm/exporters/GLTFExporter.js +502 -169
  51. package/examples/jsm/exporters/OBJExporter.js +21 -1
  52. package/examples/jsm/exporters/PLYExporter.js +44 -12
  53. package/examples/jsm/exporters/STLExporter.js +27 -5
  54. package/examples/jsm/exporters/USDZExporter.js +781 -291
  55. package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  56. package/examples/jsm/geometries/ConvexGeometry.js +19 -0
  57. package/examples/jsm/geometries/DecalGeometry.js +91 -30
  58. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  59. package/examples/jsm/geometries/ParametricGeometry.js +38 -5
  60. package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  61. package/examples/jsm/geometries/TeapotGeometry.js +23 -38
  62. package/examples/jsm/geometries/TextGeometry.js +48 -29
  63. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  64. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  65. package/examples/jsm/helpers/LightProbeHelper.js +36 -0
  66. package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
  67. package/examples/jsm/helpers/OctreeHelper.js +36 -0
  68. package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  69. package/examples/jsm/helpers/RapierHelper.js +59 -0
  70. package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  71. package/examples/jsm/helpers/TextureHelper.js +28 -0
  72. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  73. package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  74. package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  75. package/examples/jsm/helpers/ViewHelper.js +181 -9
  76. package/examples/jsm/inspector/Inspector.js +487 -0
  77. package/examples/jsm/inspector/RendererInspector.js +425 -0
  78. package/examples/jsm/inspector/tabs/Console.js +238 -0
  79. package/examples/jsm/inspector/tabs/Parameters.js +348 -0
  80. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  81. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  82. package/examples/jsm/inspector/ui/Graph.js +95 -0
  83. package/examples/jsm/inspector/ui/Item.js +170 -0
  84. package/examples/jsm/inspector/ui/List.js +75 -0
  85. package/examples/jsm/inspector/ui/Profiler.js +1975 -0
  86. package/examples/jsm/inspector/ui/Style.js +1613 -0
  87. package/examples/jsm/inspector/ui/Tab.js +233 -0
  88. package/examples/jsm/inspector/ui/Values.js +439 -0
  89. package/examples/jsm/inspector/ui/utils.js +56 -0
  90. package/examples/jsm/interactive/HTMLMesh.js +43 -12
  91. package/examples/jsm/interactive/InteractiveGroup.js +170 -52
  92. package/examples/jsm/interactive/SelectionBox.js +106 -9
  93. package/examples/jsm/interactive/SelectionHelper.js +76 -30
  94. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  95. package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
  96. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  97. package/examples/jsm/lighting/TiledLighting.js +42 -0
  98. package/examples/jsm/lights/LightProbeGenerator.js +44 -7
  99. package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
  100. package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
  101. package/examples/jsm/lines/Line2.js +41 -4
  102. package/examples/jsm/lines/LineGeometry.js +80 -2
  103. package/examples/jsm/lines/LineMaterial.js +105 -5
  104. package/examples/jsm/lines/LineSegments2.js +54 -4
  105. package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  106. package/examples/jsm/lines/Wireframe.js +41 -4
  107. package/examples/jsm/lines/WireframeGeometry2.js +27 -2
  108. package/examples/jsm/lines/webgpu/Line2.js +28 -2
  109. package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
  110. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  111. package/examples/jsm/loaders/3DMLoader.js +78 -6
  112. package/examples/jsm/loaders/3MFLoader.js +148 -7
  113. package/examples/jsm/loaders/AMFLoader.js +34 -14
  114. package/examples/jsm/loaders/BVHLoader.js +59 -12
  115. package/examples/jsm/loaders/ColladaLoader.js +61 -4027
  116. package/examples/jsm/loaders/DDSLoader.js +68 -1
  117. package/examples/jsm/loaders/DRACOLoader.js +146 -22
  118. package/examples/jsm/loaders/EXRLoader.js +255 -34
  119. package/examples/jsm/loaders/FBXLoader.js +80 -42
  120. package/examples/jsm/loaders/FontLoader.js +83 -6
  121. package/examples/jsm/loaders/GCodeLoader.js +71 -14
  122. package/examples/jsm/loaders/GLTFLoader.js +381 -263
  123. package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  124. package/examples/jsm/loaders/HDRLoader.js +485 -0
  125. package/examples/jsm/loaders/IESLoader.js +42 -0
  126. package/examples/jsm/loaders/KMZLoader.js +39 -6
  127. package/examples/jsm/loaders/KTX2Loader.js +124 -48
  128. package/examples/jsm/loaders/KTXLoader.js +31 -10
  129. package/examples/jsm/loaders/LDrawLoader.js +192 -145
  130. package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
  131. package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
  132. package/examples/jsm/loaders/LUTImageLoader.js +79 -38
  133. package/examples/jsm/loaders/LWOLoader.js +54 -59
  134. package/examples/jsm/loaders/LottieLoader.js +54 -1
  135. package/examples/jsm/loaders/MD2Loader.js +37 -1
  136. package/examples/jsm/loaders/MDDLoader.js +57 -12
  137. package/examples/jsm/loaders/MTLLoader.js +60 -35
  138. package/examples/jsm/loaders/MaterialXLoader.js +268 -34
  139. package/examples/jsm/loaders/NRRDLoader.js +40 -8
  140. package/examples/jsm/loaders/OBJLoader.js +51 -2
  141. package/examples/jsm/loaders/PCDLoader.js +173 -21
  142. package/examples/jsm/loaders/PDBLoader.js +41 -2
  143. package/examples/jsm/loaders/PLYLoader.js +70 -39
  144. package/examples/jsm/loaders/PVRLoader.js +25 -6
  145. package/examples/jsm/loaders/RGBELoader.js +6 -438
  146. package/examples/jsm/loaders/STLLoader.js +48 -38
  147. package/examples/jsm/loaders/SVGLoader.js +119 -25
  148. package/examples/jsm/loaders/TDSLoader.js +92 -74
  149. package/examples/jsm/loaders/TGALoader.js +23 -2
  150. package/examples/jsm/loaders/TIFFLoader.js +23 -0
  151. package/examples/jsm/loaders/TTFLoader.js +50 -3
  152. package/examples/jsm/loaders/USDLoader.js +279 -0
  153. package/examples/jsm/loaders/USDZLoader.js +4 -858
  154. package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
  155. package/examples/jsm/loaders/VOXLoader.js +688 -87
  156. package/examples/jsm/loaders/VRMLLoader.js +121 -12
  157. package/examples/jsm/loaders/VTKLoader.js +77 -25
  158. package/examples/jsm/loaders/XYZLoader.js +36 -0
  159. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  160. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  161. package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
  162. package/examples/jsm/loaders/usd/USDAParser.js +822 -0
  163. package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
  164. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  165. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  166. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  167. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  168. package/examples/jsm/math/Capsule.js +91 -14
  169. package/examples/jsm/math/ColorConverter.js +22 -0
  170. package/examples/jsm/math/ColorSpaces.js +74 -2
  171. package/examples/jsm/math/ConvexHull.js +517 -93
  172. package/examples/jsm/math/ImprovedNoise.js +32 -15
  173. package/examples/jsm/math/Lut.js +113 -0
  174. package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  175. package/examples/jsm/math/OBB.js +141 -29
  176. package/examples/jsm/math/Octree.js +283 -7
  177. package/examples/jsm/math/SimplexNoise.js +68 -42
  178. package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  179. package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
  180. package/examples/jsm/misc/Gyroscope.js +12 -0
  181. package/examples/jsm/misc/MD2Character.js +117 -2
  182. package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  183. package/examples/jsm/misc/MorphAnimMesh.js +44 -0
  184. package/examples/jsm/misc/MorphBlendMesh.js +103 -0
  185. package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
  186. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  187. package/examples/jsm/misc/RollerCoaster.js +57 -0
  188. package/examples/jsm/misc/TubePainter.js +437 -40
  189. package/examples/jsm/misc/Volume.js +123 -76
  190. package/examples/jsm/misc/VolumeSlice.js +95 -49
  191. package/examples/jsm/modifiers/CurveModifier.js +66 -38
  192. package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
  193. package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  194. package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
  195. package/examples/jsm/modifiers/TessellateModifier.js +35 -2
  196. package/examples/jsm/objects/GroundedSkybox.js +25 -6
  197. package/examples/jsm/objects/Lensflare.js +94 -2
  198. package/examples/jsm/objects/LensflareMesh.js +64 -10
  199. package/examples/jsm/objects/MarchingCubes.js +90 -5
  200. package/examples/jsm/objects/Reflector.js +76 -2
  201. package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  202. package/examples/jsm/objects/Refractor.js +62 -0
  203. package/examples/jsm/objects/ShadowMesh.js +54 -4
  204. package/examples/jsm/objects/Sky.js +106 -16
  205. package/examples/jsm/objects/SkyMesh.js +211 -38
  206. package/examples/jsm/objects/Water.js +49 -8
  207. package/examples/jsm/objects/Water2.js +49 -7
  208. package/examples/jsm/objects/Water2Mesh.js +50 -9
  209. package/examples/jsm/objects/WaterMesh.js +136 -43
  210. package/examples/jsm/physics/AmmoPhysics.js +60 -7
  211. package/examples/jsm/physics/JoltPhysics.js +65 -12
  212. package/examples/jsm/physics/RapierPhysics.js +217 -21
  213. package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  214. package/examples/jsm/postprocessing/BloomPass.js +128 -26
  215. package/examples/jsm/postprocessing/BokehPass.js +99 -22
  216. package/examples/jsm/postprocessing/ClearPass.js +54 -3
  217. package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  218. package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  219. package/examples/jsm/postprocessing/EffectComposer.js +140 -6
  220. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  221. package/examples/jsm/postprocessing/FilmPass.js +54 -5
  222. package/examples/jsm/postprocessing/GTAOPass.js +202 -57
  223. package/examples/jsm/postprocessing/GlitchPass.js +86 -34
  224. package/examples/jsm/postprocessing/HalftonePass.js +65 -10
  225. package/examples/jsm/postprocessing/LUTPass.js +38 -8
  226. package/examples/jsm/postprocessing/MaskPass.js +91 -0
  227. package/examples/jsm/postprocessing/OutlinePass.js +272 -135
  228. package/examples/jsm/postprocessing/OutputPass.js +65 -14
  229. package/examples/jsm/postprocessing/Pass.js +100 -4
  230. package/examples/jsm/postprocessing/RenderPass.js +94 -0
  231. package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  232. package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
  233. package/examples/jsm/postprocessing/SAOPass.js +128 -55
  234. package/examples/jsm/postprocessing/SMAAPass.js +106 -75
  235. package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
  236. package/examples/jsm/postprocessing/SSAOPass.js +173 -60
  237. package/examples/jsm/postprocessing/SSRPass.js +268 -53
  238. package/examples/jsm/postprocessing/SavePass.js +69 -16
  239. package/examples/jsm/postprocessing/ShaderPass.js +65 -7
  240. package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  241. package/examples/jsm/postprocessing/TexturePass.js +72 -8
  242. package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
  243. package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
  244. package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
  245. package/examples/jsm/renderers/Projector.js +288 -32
  246. package/examples/jsm/renderers/SVGRenderer.js +323 -61
  247. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
  248. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  249. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
  250. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  251. package/examples/jsm/shaders/AfterimageShader.js +8 -3
  252. package/examples/jsm/shaders/BasicShader.js +8 -1
  253. package/examples/jsm/shaders/BleachBypassShader.js +10 -3
  254. package/examples/jsm/shaders/BlendShader.js +8 -1
  255. package/examples/jsm/shaders/BokehShader.js +9 -3
  256. package/examples/jsm/shaders/BokehShader2.js +11 -4
  257. package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  258. package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  259. package/examples/jsm/shaders/ColorifyShader.js +8 -1
  260. package/examples/jsm/shaders/ConvolutionShader.js +9 -38
  261. package/examples/jsm/shaders/CopyShader.js +8 -1
  262. package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  263. package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  264. package/examples/jsm/shaders/DigitalGlitch.js +10 -7
  265. package/examples/jsm/shaders/DotScreenShader.js +8 -3
  266. package/examples/jsm/shaders/ExposureShader.js +8 -1
  267. package/examples/jsm/shaders/FXAAShader.js +233 -221
  268. package/examples/jsm/shaders/FilmShader.js +13 -0
  269. package/examples/jsm/shaders/FocusShader.js +8 -3
  270. package/examples/jsm/shaders/FreiChenShader.js +10 -3
  271. package/examples/jsm/shaders/GTAOShader.js +55 -45
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  273. package/examples/jsm/shaders/HalftoneShader.js +24 -4
  274. package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  275. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  276. package/examples/jsm/shaders/HueSaturationShader.js +10 -3
  277. package/examples/jsm/shaders/KaleidoShader.js +11 -4
  278. package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
  279. package/examples/jsm/shaders/LuminosityShader.js +8 -2
  280. package/examples/jsm/shaders/MirrorShader.js +10 -4
  281. package/examples/jsm/shaders/NormalMapShader.js +7 -2
  282. package/examples/jsm/shaders/OutputShader.js +19 -1
  283. package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
  284. package/examples/jsm/shaders/RGBShiftShader.js +8 -1
  285. package/examples/jsm/shaders/SAOShader.js +27 -5
  286. package/examples/jsm/shaders/SMAAShader.js +24 -1
  287. package/examples/jsm/shaders/SSAOShader.js +37 -6
  288. package/examples/jsm/shaders/SSRShader.js +32 -6
  289. package/examples/jsm/shaders/SepiaShader.js +8 -3
  290. package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  291. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  292. package/examples/jsm/shaders/TechnicolorShader.js +10 -4
  293. package/examples/jsm/shaders/ToonShader.js +29 -6
  294. package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  295. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
  296. package/examples/jsm/shaders/VelocityShader.js +8 -1
  297. package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  298. package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  299. package/examples/jsm/shaders/VignetteShader.js +8 -3
  300. package/examples/jsm/shaders/VolumeShader.js +11 -2
  301. package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  302. package/examples/jsm/textures/FlakesTexture.js +14 -0
  303. package/examples/jsm/transpiler/AST.js +436 -31
  304. package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
  305. package/examples/jsm/transpiler/Linker.js +327 -0
  306. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
  307. package/examples/jsm/transpiler/TSLEncoder.js +363 -97
  308. package/examples/jsm/transpiler/Transpiler.js +50 -1
  309. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  310. package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
  311. package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  312. package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
  313. package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  314. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  315. package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
  316. package/examples/jsm/tsl/display/BloomNode.js +534 -0
  317. package/examples/jsm/tsl/display/CRT.js +150 -0
  318. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  319. package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  320. package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  321. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  322. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  323. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  324. package/examples/jsm/tsl/display/GTAONode.js +571 -0
  325. package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
  326. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  327. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  328. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  329. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  330. package/examples/jsm/tsl/display/OutlineNode.js +762 -0
  331. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  332. package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
  333. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  334. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  335. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  336. package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
  337. package/examples/jsm/tsl/display/SSGINode.js +642 -0
  338. package/examples/jsm/tsl/display/SSRNode.js +656 -0
  339. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  340. package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
  341. package/examples/jsm/tsl/display/Shape.js +29 -0
  342. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
  343. package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
  344. package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
  345. package/examples/jsm/tsl/display/TRAANode.js +726 -0
  346. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  347. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  348. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  349. package/examples/jsm/tsl/display/hashBlur.js +54 -0
  350. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  351. package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  352. package/examples/jsm/tsl/math/Bayer.js +73 -0
  353. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  354. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  355. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  356. package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
  357. package/examples/jsm/utils/CameraUtils.js +15 -6
  358. package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
  359. package/examples/jsm/utils/GeometryUtils.js +32 -27
  360. package/examples/jsm/utils/LDrawUtils.js +14 -5
  361. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  362. package/examples/jsm/utils/SceneUtils.js +53 -3
  363. package/examples/jsm/utils/ShadowMapViewer.js +72 -33
  364. package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
  365. package/examples/jsm/utils/SkeletonUtils.js +48 -0
  366. package/examples/jsm/utils/SortUtils.js +17 -5
  367. package/examples/jsm/utils/UVsDebug.js +12 -4
  368. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
  369. package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
  370. package/examples/jsm/utils/WorkerPool.js +67 -2
  371. package/examples/jsm/webxr/ARButton.js +19 -0
  372. package/examples/jsm/webxr/OculusHandModel.js +84 -0
  373. package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  374. package/examples/jsm/webxr/Text2D.js +20 -6
  375. package/examples/jsm/webxr/VRButton.js +31 -0
  376. package/examples/jsm/webxr/XRButton.js +23 -0
  377. package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
  378. package/examples/jsm/webxr/XREstimatedLight.js +35 -4
  379. package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  380. package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
  381. package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  382. package/examples/jsm/webxr/XRPlanes.js +18 -0
  383. package/package.json +29 -34
  384. package/src/Three.Core.js +198 -0
  385. package/src/Three.Legacy.js +0 -21
  386. package/src/Three.TSL.js +641 -0
  387. package/src/Three.WebGPU.Nodes.js +14 -186
  388. package/src/Three.WebGPU.js +16 -186
  389. package/src/Three.js +2 -197
  390. package/src/animation/AnimationAction.js +263 -31
  391. package/src/animation/AnimationClip.js +162 -7
  392. package/src/animation/AnimationMixer.js +99 -15
  393. package/src/animation/AnimationObjectGroup.js +45 -21
  394. package/src/animation/AnimationUtils.js +163 -24
  395. package/src/animation/KeyframeTrack.js +191 -17
  396. package/src/animation/PropertyBinding.js +91 -16
  397. package/src/animation/PropertyMixer.js +72 -5
  398. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  399. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  400. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  401. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  402. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  403. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  404. package/src/audio/Audio.js +386 -8
  405. package/src/audio/AudioAnalyser.js +58 -1
  406. package/src/audio/AudioContext.js +15 -0
  407. package/src/audio/AudioListener.js +94 -13
  408. package/src/audio/PositionalAudio.js +107 -0
  409. package/src/cameras/ArrayCamera.js +37 -0
  410. package/src/cameras/Camera.js +61 -0
  411. package/src/cameras/CubeCamera.js +86 -0
  412. package/src/cameras/OrthographicCamera.js +110 -1
  413. package/src/cameras/PerspectiveCamera.js +174 -35
  414. package/src/cameras/StereoCamera.js +48 -2
  415. package/src/constants.js +1546 -11
  416. package/src/core/BufferAttribute.js +417 -3
  417. package/src/core/BufferGeometry.js +407 -22
  418. package/src/core/Clock.js +69 -8
  419. package/src/core/EventDispatcher.js +52 -8
  420. package/src/core/GLBufferAttribute.js +113 -2
  421. package/src/core/InstancedBufferAttribute.js +29 -0
  422. package/src/core/InstancedBufferGeometry.js +20 -0
  423. package/src/core/InstancedInterleavedBuffer.js +26 -0
  424. package/src/core/InterleavedBuffer.js +141 -7
  425. package/src/core/InterleavedBufferAttribute.js +200 -2
  426. package/src/core/Layers.js +71 -10
  427. package/src/core/Object3D.js +673 -26
  428. package/src/core/Raycaster.js +136 -2
  429. package/src/core/RenderTarget.js +256 -27
  430. package/src/core/RenderTarget3D.js +48 -0
  431. package/src/core/Timer.js +184 -0
  432. package/src/core/Uniform.js +29 -0
  433. package/src/core/UniformsGroup.js +84 -2
  434. package/src/extras/Controls.js +89 -1
  435. package/src/extras/DataUtils.js +50 -9
  436. package/src/extras/Earcut.js +18 -779
  437. package/src/extras/ImageUtils.js +22 -14
  438. package/src/extras/PMREMGenerator.js +316 -67
  439. package/src/extras/ShapeUtils.js +24 -2
  440. package/src/extras/TextureUtils.js +101 -15
  441. package/src/extras/core/Curve.js +156 -55
  442. package/src/extras/core/CurvePath.js +63 -22
  443. package/src/extras/core/Interpolations.js +34 -2
  444. package/src/extras/core/Path.js +134 -1
  445. package/src/extras/core/Shape.js +66 -3
  446. package/src/extras/core/ShapePath.js +80 -4
  447. package/src/extras/curves/ArcCurve.js +22 -0
  448. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  449. package/src/extras/curves/CubicBezierCurve.js +67 -0
  450. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  451. package/src/extras/curves/EllipseCurve.js +102 -0
  452. package/src/extras/curves/LineCurve.js +36 -0
  453. package/src/extras/curves/LineCurve3.js +36 -0
  454. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  455. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  456. package/src/extras/curves/SplineCurve.js +48 -0
  457. package/src/extras/lib/earcut.js +685 -0
  458. package/src/geometries/BoxGeometry.js +39 -0
  459. package/src/geometries/CapsuleGeometry.js +196 -11
  460. package/src/geometries/CircleGeometry.js +41 -0
  461. package/src/geometries/ConeGeometry.js +39 -0
  462. package/src/geometries/CylinderGeometry.js +42 -2
  463. package/src/geometries/DodecahedronGeometry.js +33 -0
  464. package/src/geometries/EdgesGeometry.js +30 -2
  465. package/src/geometries/ExtrudeGeometry.js +148 -52
  466. package/src/geometries/IcosahedronGeometry.js +33 -0
  467. package/src/geometries/LatheGeometry.js +44 -3
  468. package/src/geometries/OctahedronGeometry.js +33 -0
  469. package/src/geometries/PlaneGeometry.js +35 -0
  470. package/src/geometries/PolyhedronGeometry.js +30 -1
  471. package/src/geometries/RingGeometry.js +37 -0
  472. package/src/geometries/ShapeGeometry.js +38 -0
  473. package/src/geometries/SphereGeometry.js +38 -0
  474. package/src/geometries/TetrahedronGeometry.js +33 -0
  475. package/src/geometries/TorusGeometry.js +44 -3
  476. package/src/geometries/TorusKnotGeometry.js +39 -0
  477. package/src/geometries/TubeGeometry.js +50 -0
  478. package/src/geometries/WireframeGeometry.js +32 -0
  479. package/src/helpers/ArrowHelper.js +62 -5
  480. package/src/helpers/AxesHelper.js +28 -0
  481. package/src/helpers/Box3Helper.js +28 -0
  482. package/src/helpers/BoxHelper.js +43 -7
  483. package/src/helpers/CameraHelper.js +103 -27
  484. package/src/helpers/DirectionalLightHelper.js +55 -0
  485. package/src/helpers/GridHelper.js +26 -0
  486. package/src/helpers/HemisphereLightHelper.js +42 -0
  487. package/src/helpers/PlaneHelper.js +33 -0
  488. package/src/helpers/PointLightHelper.js +43 -24
  489. package/src/helpers/PolarGridHelper.js +30 -0
  490. package/src/helpers/SkeletonHelper.js +73 -7
  491. package/src/helpers/SpotLightHelper.js +43 -0
  492. package/src/lights/AmbientLight.js +25 -0
  493. package/src/lights/DirectionalLight.js +70 -0
  494. package/src/lights/DirectionalLightShadow.js +15 -0
  495. package/src/lights/HemisphereLight.js +42 -0
  496. package/src/lights/Light.js +37 -11
  497. package/src/lights/LightProbe.js +37 -9
  498. package/src/lights/LightShadow.js +202 -7
  499. package/src/lights/PointLight.js +74 -0
  500. package/src/lights/PointLightShadow.js +15 -80
  501. package/src/lights/RectAreaLight.js +59 -0
  502. package/src/lights/SpotLight.js +124 -1
  503. package/src/lights/SpotLightShadow.js +33 -3
  504. package/src/lights/webgpu/IESSpotLight.js +22 -0
  505. package/src/lights/webgpu/ProjectorLight.js +46 -0
  506. package/src/loaders/AnimationLoader.js +34 -2
  507. package/src/loaders/AudioLoader.js +34 -2
  508. package/src/loaders/BufferGeometryLoader.js +38 -13
  509. package/src/loaders/Cache.js +75 -2
  510. package/src/loaders/CompressedTextureLoader.js +36 -3
  511. package/src/loaders/CubeTextureLoader.js +45 -0
  512. package/src/loaders/DataTextureLoader.js +45 -4
  513. package/src/loaders/FileLoader.js +85 -5
  514. package/src/loaders/ImageBitmapLoader.js +113 -11
  515. package/src/loaders/ImageLoader.js +85 -8
  516. package/src/loaders/Loader.js +144 -0
  517. package/src/loaders/LoaderUtils.js +18 -36
  518. package/src/loaders/LoadingManager.js +187 -0
  519. package/src/loaders/MaterialLoader.js +62 -3
  520. package/src/loaders/ObjectLoader.js +131 -31
  521. package/src/loaders/TextureLoader.js +33 -0
  522. package/src/loaders/nodes/NodeLoader.js +68 -4
  523. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  524. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  525. package/src/materials/LineBasicMaterial.js +74 -1
  526. package/src/materials/LineDashedMaterial.js +52 -1
  527. package/src/materials/Material.js +502 -8
  528. package/src/materials/MeshBasicMaterial.js +168 -2
  529. package/src/materials/MeshDepthMaterial.js +94 -0
  530. package/src/materials/MeshDistanceMaterial.js +76 -0
  531. package/src/materials/MeshLambertMaterial.js +283 -0
  532. package/src/materials/MeshMatcapMaterial.js +164 -0
  533. package/src/materials/MeshNormalMaterial.js +114 -0
  534. package/src/materials/MeshPhongMaterial.js +298 -0
  535. package/src/materials/MeshPhysicalMaterial.js +296 -4
  536. package/src/materials/MeshStandardMaterial.js +300 -2
  537. package/src/materials/MeshToonMaterial.js +219 -0
  538. package/src/materials/PointsMaterial.js +89 -0
  539. package/src/materials/RawShaderMaterial.js +25 -0
  540. package/src/materials/ShaderMaterial.js +234 -6
  541. package/src/materials/ShadowMaterial.js +54 -0
  542. package/src/materials/SpriteMaterial.js +82 -0
  543. package/src/materials/nodes/Line2NodeMaterial.js +158 -53
  544. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  545. package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
  546. package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
  547. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  548. package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
  549. package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
  550. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  551. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
  552. package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
  553. package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
  554. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  555. package/src/materials/nodes/NodeMaterial.js +789 -74
  556. package/src/materials/nodes/NodeMaterials.js +0 -1
  557. package/src/materials/nodes/PointsNodeMaterial.js +180 -11
  558. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  559. package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
  560. package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
  561. package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
  562. package/src/math/Box2.js +177 -0
  563. package/src/math/Box3.js +271 -0
  564. package/src/math/Color.js +355 -11
  565. package/src/math/ColorManagement.js +158 -92
  566. package/src/math/Cylindrical.js +65 -6
  567. package/src/math/Euler.js +139 -5
  568. package/src/math/Frustum.js +108 -9
  569. package/src/math/FrustumArray.js +258 -0
  570. package/src/math/Interpolant.js +87 -8
  571. package/src/math/Line3.js +221 -2
  572. package/src/math/MathUtils.js +408 -20
  573. package/src/math/Matrix2.js +70 -0
  574. package/src/math/Matrix3.js +229 -4
  575. package/src/math/Matrix4.js +489 -94
  576. package/src/math/Plane.js +164 -2
  577. package/src/math/Quaternion.js +322 -90
  578. package/src/math/Ray.js +162 -0
  579. package/src/math/Sphere.js +175 -0
  580. package/src/math/Spherical.js +73 -11
  581. package/src/math/SphericalHarmonics3.js +112 -14
  582. package/src/math/Triangle.js +206 -2
  583. package/src/math/Vector2.js +396 -10
  584. package/src/math/Vector3.js +550 -15
  585. package/src/math/Vector4.js +415 -9
  586. package/src/math/interpolants/BezierInterpolant.js +108 -0
  587. package/src/math/interpolants/CubicInterpolant.js +10 -1
  588. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  589. package/src/math/interpolants/LinearInterpolant.js +13 -0
  590. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  591. package/src/nodes/Nodes.js +91 -88
  592. package/src/nodes/TSL.js +32 -38
  593. package/src/nodes/accessors/AccessorsUtils.js +37 -9
  594. package/src/nodes/accessors/Arrays.js +68 -0
  595. package/src/nodes/accessors/BatchNode.js +49 -14
  596. package/src/nodes/accessors/Bitangent.js +82 -13
  597. package/src/nodes/accessors/BufferAttributeNode.js +269 -8
  598. package/src/nodes/accessors/BufferNode.js +91 -2
  599. package/src/nodes/accessors/BuiltinNode.js +63 -0
  600. package/src/nodes/accessors/Camera.js +400 -10
  601. package/src/nodes/accessors/ClippingNode.js +149 -45
  602. package/src/nodes/accessors/CubeTextureNode.js +137 -7
  603. package/src/nodes/accessors/InstanceNode.js +245 -40
  604. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  605. package/src/nodes/accessors/Lights.js +88 -0
  606. package/src/nodes/accessors/MaterialNode.js +355 -13
  607. package/src/nodes/accessors/MaterialProperties.js +57 -1
  608. package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
  609. package/src/nodes/accessors/ModelNode.js +117 -5
  610. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
  611. package/src/nodes/accessors/MorphNode.js +73 -26
  612. package/src/nodes/accessors/Normal.js +174 -19
  613. package/src/nodes/accessors/Object3DNode.js +146 -12
  614. package/src/nodes/accessors/PointUVNode.js +25 -0
  615. package/src/nodes/accessors/Position.js +119 -7
  616. package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
  617. package/src/nodes/accessors/ReferenceNode.js +223 -8
  618. package/src/nodes/accessors/ReflectVector.js +29 -3
  619. package/src/nodes/accessors/RendererReferenceNode.js +45 -2
  620. package/src/nodes/accessors/SceneProperties.js +53 -0
  621. package/src/nodes/accessors/SkinningNode.js +180 -43
  622. package/src/nodes/accessors/StorageBufferNode.js +278 -26
  623. package/src/nodes/accessors/StorageTextureNode.js +205 -12
  624. package/src/nodes/accessors/Tangent.js +48 -10
  625. package/src/nodes/accessors/TangentUtils.js +46 -0
  626. package/src/nodes/accessors/Texture3DNode.js +104 -11
  627. package/src/nodes/accessors/TextureBicubic.js +31 -4
  628. package/src/nodes/accessors/TextureNode.js +564 -52
  629. package/src/nodes/accessors/TextureSizeNode.js +42 -1
  630. package/src/nodes/accessors/UV.js +9 -1
  631. package/src/nodes/accessors/UniformArrayNode.js +226 -34
  632. package/src/nodes/accessors/UserDataNode.js +46 -2
  633. package/src/nodes/accessors/VelocityNode.js +93 -3
  634. package/src/nodes/accessors/VertexColorNode.js +39 -4
  635. package/src/nodes/code/CodeNode.js +101 -8
  636. package/src/nodes/code/ExpressionNode.js +29 -2
  637. package/src/nodes/code/FunctionCallNode.js +98 -10
  638. package/src/nodes/code/FunctionNode.js +69 -2
  639. package/src/nodes/core/ArrayNode.js +174 -0
  640. package/src/nodes/core/AssignNode.js +80 -9
  641. package/src/nodes/core/AttributeNode.js +47 -4
  642. package/src/nodes/core/BypassNode.js +47 -3
  643. package/src/nodes/core/ConstNode.js +32 -0
  644. package/src/nodes/core/ContextNode.js +220 -14
  645. package/src/nodes/core/IndexNode.js +72 -7
  646. package/src/nodes/core/InputNode.js +50 -1
  647. package/src/nodes/core/InspectorNode.js +128 -0
  648. package/src/nodes/core/IsolateNode.js +133 -0
  649. package/src/nodes/core/LightingModel.js +65 -5
  650. package/src/nodes/core/MRTNode.js +113 -2
  651. package/src/nodes/core/Node.js +595 -36
  652. package/src/nodes/core/NodeAttribute.js +38 -0
  653. package/src/nodes/core/NodeBuilder.js +1840 -121
  654. package/src/nodes/core/NodeCache.js +41 -2
  655. package/src/nodes/core/NodeCode.js +31 -0
  656. package/src/nodes/core/NodeError.js +28 -0
  657. package/src/nodes/core/NodeFrame.js +153 -24
  658. package/src/nodes/core/NodeFunction.js +48 -1
  659. package/src/nodes/core/NodeFunctionInput.js +44 -0
  660. package/src/nodes/core/NodeParser.js +13 -1
  661. package/src/nodes/core/NodeUniform.js +53 -1
  662. package/src/nodes/core/NodeUtils.js +201 -51
  663. package/src/nodes/core/NodeVar.js +47 -1
  664. package/src/nodes/core/NodeVarying.js +47 -1
  665. package/src/nodes/core/OutputStructNode.js +54 -12
  666. package/src/nodes/core/ParameterNode.js +60 -2
  667. package/src/nodes/core/PropertyNode.js +286 -7
  668. package/src/nodes/core/StackNode.js +337 -20
  669. package/src/nodes/core/StackTrace.js +139 -0
  670. package/src/nodes/core/StructNode.js +134 -0
  671. package/src/nodes/core/StructType.js +13 -0
  672. package/src/nodes/core/StructTypeNode.js +126 -6
  673. package/src/nodes/core/SubBuildNode.js +89 -0
  674. package/src/nodes/core/TempNode.js +31 -5
  675. package/src/nodes/core/UniformGroupNode.js +85 -7
  676. package/src/nodes/core/UniformNode.js +163 -16
  677. package/src/nodes/core/VarNode.js +317 -10
  678. package/src/nodes/core/VaryingNode.js +115 -13
  679. package/src/nodes/core/constants.js +40 -0
  680. package/src/nodes/display/BlendModes.js +171 -0
  681. package/src/nodes/display/BumpMapNode.js +38 -2
  682. package/src/nodes/display/ColorAdjustment.js +118 -6
  683. package/src/nodes/display/ColorSpaceFunctions.js +22 -6
  684. package/src/nodes/display/ColorSpaceNode.js +97 -47
  685. package/src/nodes/display/FrontFacingNode.js +64 -7
  686. package/src/nodes/display/NormalMapNode.js +101 -54
  687. package/src/nodes/display/PassNode.js +690 -33
  688. package/src/nodes/display/RenderOutputNode.js +94 -4
  689. package/src/nodes/display/ScreenNode.js +138 -27
  690. package/src/nodes/display/ToneMappingFunctions.js +62 -10
  691. package/src/nodes/display/ToneMappingNode.js +88 -8
  692. package/src/nodes/display/ToonOutlinePassNode.js +84 -4
  693. package/src/nodes/display/ViewportDepthNode.js +227 -10
  694. package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
  695. package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
  696. package/src/nodes/display/ViewportTextureNode.js +171 -7
  697. package/src/nodes/fog/Fog.js +97 -0
  698. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  699. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  700. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  701. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  702. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  703. package/src/nodes/functions/BSDF/LTC.js +45 -1
  704. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  705. package/src/nodes/functions/BasicLightingModel.js +28 -6
  706. package/src/nodes/functions/PhongLightingModel.js +36 -6
  707. package/src/nodes/functions/PhysicalLightingModel.js +336 -91
  708. package/src/nodes/functions/ShadowMaskModel.js +30 -3
  709. package/src/nodes/functions/ToonLightingModel.js +21 -2
  710. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  711. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  712. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  713. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  714. package/src/nodes/geometry/RangeNode.js +97 -8
  715. package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
  716. package/src/nodes/gpgpu/BarrierNode.js +52 -3
  717. package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
  718. package/src/nodes/gpgpu/ComputeNode.js +212 -16
  719. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  720. package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
  721. package/src/nodes/lighting/AONode.js +18 -0
  722. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  723. package/src/nodes/lighting/AnalyticLightNode.js +186 -399
  724. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  725. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  726. package/src/nodes/lighting/DirectionalLightNode.js +12 -11
  727. package/src/nodes/lighting/EnvironmentNode.js +59 -19
  728. package/src/nodes/lighting/HemisphereLightNode.js +33 -2
  729. package/src/nodes/lighting/IESSpotLightNode.js +13 -1
  730. package/src/nodes/lighting/IrradianceNode.js +17 -0
  731. package/src/nodes/lighting/LightProbeNode.js +20 -0
  732. package/src/nodes/lighting/LightUtils.js +11 -3
  733. package/src/nodes/lighting/LightingContextNode.js +52 -4
  734. package/src/nodes/lighting/LightingNode.js +15 -6
  735. package/src/nodes/lighting/LightsNode.js +238 -35
  736. package/src/nodes/lighting/PointLightNode.js +60 -25
  737. package/src/nodes/lighting/PointShadowNode.js +325 -0
  738. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  739. package/src/nodes/lighting/RectAreaLightNode.js +50 -14
  740. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  741. package/src/nodes/lighting/ShadowFilterNode.js +264 -0
  742. package/src/nodes/lighting/ShadowNode.js +867 -0
  743. package/src/nodes/lighting/SpotLightNode.js +99 -18
  744. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  745. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  746. package/src/nodes/math/BitcastNode.js +156 -0
  747. package/src/nodes/math/BitcountNode.js +433 -0
  748. package/src/nodes/math/ConditionalNode.js +110 -21
  749. package/src/nodes/math/Hash.js +8 -0
  750. package/src/nodes/math/MathNode.js +820 -97
  751. package/src/nodes/math/MathUtils.js +47 -1
  752. package/src/nodes/math/OperatorNode.js +517 -84
  753. package/src/nodes/math/PackFloatNode.js +98 -0
  754. package/src/nodes/math/TriNoise3D.js +17 -7
  755. package/src/nodes/math/UnpackFloatNode.js +96 -0
  756. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  757. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  758. package/src/nodes/pmrem/PMREMNode.js +180 -23
  759. package/src/nodes/pmrem/PMREMUtils.js +114 -5
  760. package/src/nodes/procedural/Checker.js +8 -0
  761. package/src/nodes/shapes/Shapes.js +33 -0
  762. package/src/nodes/tsl/TSLBase.js +10 -4
  763. package/src/nodes/tsl/TSLCore.js +732 -160
  764. package/src/nodes/utils/ArrayElementNode.js +55 -4
  765. package/src/nodes/utils/ConvertNode.js +31 -0
  766. package/src/nodes/utils/CubeMapNode.js +79 -2
  767. package/src/nodes/utils/DebugNode.js +83 -0
  768. package/src/nodes/utils/Discard.js +18 -2
  769. package/src/nodes/utils/EquirectUV.js +27 -0
  770. package/src/nodes/utils/EventNode.js +118 -0
  771. package/src/nodes/utils/FlipNode.js +38 -0
  772. package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
  773. package/src/nodes/utils/JoinNode.js +57 -4
  774. package/src/nodes/utils/LoopNode.js +193 -55
  775. package/src/nodes/utils/MatcapUV.js +22 -0
  776. package/src/nodes/utils/MaxMipLevelNode.js +49 -1
  777. package/src/nodes/utils/MemberNode.js +120 -0
  778. package/src/nodes/utils/Oscillators.js +41 -0
  779. package/src/nodes/utils/Packing.js +30 -1
  780. package/src/nodes/utils/PostProcessingUtils.js +154 -0
  781. package/src/nodes/utils/RTTNode.js +165 -9
  782. package/src/nodes/utils/ReflectorNode.js +407 -21
  783. package/src/nodes/utils/RemapNode.js +81 -2
  784. package/src/nodes/utils/RotateNode.js +41 -1
  785. package/src/nodes/utils/SampleNode.js +91 -0
  786. package/src/nodes/utils/SetNode.js +44 -1
  787. package/src/nodes/utils/SplitNode.js +66 -3
  788. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  789. package/src/nodes/utils/SpriteUtils.js +16 -0
  790. package/src/nodes/utils/StorageArrayElementNode.js +56 -3
  791. package/src/nodes/utils/Timer.js +26 -0
  792. package/src/nodes/utils/TriplanarTextures.js +65 -0
  793. package/src/nodes/utils/UVUtils.js +48 -0
  794. package/src/nodes/utils/ViewportUtils.js +12 -0
  795. package/src/objects/BatchedMesh.js +798 -309
  796. package/src/objects/Bone.js +24 -0
  797. package/src/objects/ClippingGroup.js +68 -0
  798. package/src/objects/Group.js +24 -0
  799. package/src/objects/InstancedMesh.js +131 -2
  800. package/src/objects/LOD.js +99 -5
  801. package/src/objects/Line.js +90 -7
  802. package/src/objects/LineLoop.js +20 -0
  803. package/src/objects/LineSegments.js +20 -1
  804. package/src/objects/Mesh.js +84 -0
  805. package/src/objects/Points.js +60 -0
  806. package/src/objects/Skeleton.js +120 -5
  807. package/src/objects/SkinnedMesh.js +102 -6
  808. package/src/objects/Sprite.js +65 -1
  809. package/src/renderers/WebGL3DRenderTarget.js +26 -0
  810. package/src/renderers/WebGLArrayRenderTarget.js +26 -0
  811. package/src/renderers/WebGLCubeRenderTarget.js +41 -5
  812. package/src/renderers/WebGLRenderTarget.js +19 -0
  813. package/src/renderers/WebGLRenderer.js +1016 -278
  814. package/src/renderers/common/Animation.js +123 -14
  815. package/src/renderers/common/Attributes.js +41 -1
  816. package/src/renderers/common/Backend.js +623 -44
  817. package/src/renderers/common/Background.js +99 -16
  818. package/src/renderers/common/BindGroup.js +37 -2
  819. package/src/renderers/common/Binding.js +46 -0
  820. package/src/renderers/common/Bindings.js +211 -20
  821. package/src/renderers/common/BlendMode.js +143 -0
  822. package/src/renderers/common/Buffer.js +89 -0
  823. package/src/renderers/common/BufferUtils.js +25 -0
  824. package/src/renderers/common/BundleGroup.js +57 -0
  825. package/src/renderers/common/CanvasTarget.js +341 -0
  826. package/src/renderers/common/ChainMap.js +73 -10
  827. package/src/renderers/common/ClippingContext.js +172 -87
  828. package/src/renderers/common/Color4.js +40 -0
  829. package/src/renderers/common/ComputePipeline.js +24 -0
  830. package/src/renderers/common/Constants.js +2 -1
  831. package/src/renderers/common/CubeRenderTarget.js +77 -7
  832. package/src/renderers/common/DataMap.js +37 -1
  833. package/src/renderers/common/Geometries.js +163 -14
  834. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  835. package/src/renderers/common/Info.js +81 -36
  836. package/src/renderers/common/InspectorBase.js +146 -0
  837. package/src/renderers/common/Lighting.js +57 -0
  838. package/src/renderers/common/Pipeline.js +22 -0
  839. package/src/renderers/common/Pipelines.js +150 -7
  840. package/src/renderers/common/PostProcessing.js +22 -84
  841. package/src/renderers/common/ProgrammableStage.js +60 -2
  842. package/src/renderers/common/QuadMesh.js +63 -6
  843. package/src/renderers/common/RenderBundle.js +14 -8
  844. package/src/renderers/common/RenderBundles.js +40 -10
  845. package/src/renderers/common/RenderContext.js +219 -4
  846. package/src/renderers/common/RenderContexts.js +54 -17
  847. package/src/renderers/common/RenderList.js +233 -24
  848. package/src/renderers/common/RenderLists.js +46 -6
  849. package/src/renderers/common/RenderObject.js +548 -46
  850. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  851. package/src/renderers/common/RenderObjects.js +133 -15
  852. package/src/renderers/common/RenderPipeline.js +216 -6
  853. package/src/renderers/common/Renderer.js +2155 -332
  854. package/src/renderers/common/RendererUtils.js +200 -0
  855. package/src/renderers/common/SampledTexture.js +99 -39
  856. package/src/renderers/common/Sampler.js +148 -1
  857. package/src/renderers/common/Storage3DTexture.js +100 -0
  858. package/src/renderers/common/StorageArrayTexture.js +84 -0
  859. package/src/renderers/common/StorageBuffer.js +38 -2
  860. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  861. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  862. package/src/renderers/common/StorageTexture.js +65 -0
  863. package/src/renderers/common/Textures.js +273 -57
  864. package/src/renderers/common/TimestampQueryPool.js +163 -0
  865. package/src/renderers/common/Uniform.js +233 -3
  866. package/src/renderers/common/UniformBuffer.js +19 -0
  867. package/src/renderers/common/UniformsGroup.js +235 -26
  868. package/src/renderers/common/XRManager.js +1677 -0
  869. package/src/renderers/common/XRRenderTarget.js +91 -0
  870. package/src/renderers/common/extras/PMREMGenerator.js +371 -108
  871. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  872. package/src/renderers/common/nodes/NodeLibrary.js +95 -17
  873. package/src/renderers/common/nodes/NodeManager.js +852 -0
  874. package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
  875. package/src/renderers/common/nodes/NodeSampler.js +41 -1
  876. package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
  877. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  878. package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
  879. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  880. package/src/renderers/shaders/DFGLUTData.js +49 -0
  881. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  882. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  883. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  884. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  885. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  886. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  887. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  888. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  889. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  890. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  891. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  892. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  893. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  894. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  895. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  896. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
  897. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  898. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  899. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  900. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  901. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  902. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  903. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  904. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
  905. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  906. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  907. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  908. package/src/renderers/shaders/ShaderChunk.js +3 -3
  909. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  910. package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
  911. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  912. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  913. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  914. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  915. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  916. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  917. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  918. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  919. package/src/renderers/shaders/ShaderLib.js +7 -5
  920. package/src/renderers/shaders/UniformsLib.js +2 -7
  921. package/src/renderers/shaders/UniformsUtils.js +21 -2
  922. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  923. package/src/renderers/webgl/WebGLBackground.js +30 -5
  924. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  925. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  926. package/src/renderers/webgl/WebGLCapabilities.js +7 -14
  927. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  928. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  929. package/src/renderers/webgl/WebGLGeometries.js +10 -35
  930. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  931. package/src/renderers/webgl/WebGLInfo.js +3 -1
  932. package/src/renderers/webgl/WebGLLights.js +18 -1
  933. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  934. package/src/renderers/webgl/WebGLObjects.js +3 -1
  935. package/src/renderers/webgl/WebGLOutput.js +267 -0
  936. package/src/renderers/webgl/WebGLProgram.js +87 -148
  937. package/src/renderers/webgl/WebGLPrograms.js +53 -51
  938. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  939. package/src/renderers/webgl/WebGLShadowMap.js +204 -28
  940. package/src/renderers/webgl/WebGLState.js +88 -56
  941. package/src/renderers/webgl/WebGLTextures.js +293 -59
  942. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  943. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  944. package/src/renderers/webgl/WebGLUtils.js +7 -5
  945. package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
  946. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  947. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
  948. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
  949. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  950. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
  951. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  952. package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
  953. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
  954. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  955. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
  956. package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
  957. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
  958. package/src/renderers/webgpu/WebGPURenderer.js +55 -4
  959. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
  960. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
  961. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
  962. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
  963. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  964. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
  965. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
  966. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
  967. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
  968. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
  969. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
  970. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  971. package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
  972. package/src/renderers/webxr/WebXRController.js +87 -2
  973. package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
  974. package/src/renderers/webxr/WebXRManager.js +275 -15
  975. package/src/scenes/Fog.js +60 -0
  976. package/src/scenes/FogExp2.js +51 -0
  977. package/src/scenes/Scene.js +88 -0
  978. package/src/textures/CanvasTexture.js +28 -0
  979. package/src/textures/CompressedArrayTexture.js +57 -0
  980. package/src/textures/CompressedCubeTexture.js +29 -0
  981. package/src/textures/CompressedTexture.js +64 -6
  982. package/src/textures/CubeDepthTexture.js +76 -0
  983. package/src/textures/CubeTexture.js +52 -4
  984. package/src/textures/Data3DTexture.js +79 -2
  985. package/src/textures/DataArrayTexture.js +93 -0
  986. package/src/textures/DataTexture.js +65 -0
  987. package/src/textures/DepthTexture.js +59 -11
  988. package/src/textures/ExternalTexture.js +56 -0
  989. package/src/textures/FramebufferTexture.js +62 -0
  990. package/src/textures/Source.js +106 -4
  991. package/src/textures/Texture.js +488 -6
  992. package/src/textures/VideoFrameTexture.js +72 -0
  993. package/src/textures/VideoTexture.js +78 -6
  994. package/src/utils.js +322 -3
  995. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  996. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  997. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  998. package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  999. package/examples/jsm/exporters/MMDExporter.js +0 -217
  1000. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1001. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1002. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  1003. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
  1004. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  1005. package/examples/jsm/loaders/RGBMLoader.js +0 -1081
  1006. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
  1007. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
  1008. package/examples/jsm/misc/Timer.js +0 -128
  1009. package/examples/jsm/objects/InstancedPoints.js +0 -21
  1010. package/examples/jsm/shaders/GodRaysShader.js +0 -321
  1011. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  1012. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  1013. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  1014. package/src/nodes/accessors/SceneNode.js +0 -55
  1015. package/src/nodes/code/ScriptableNode.js +0 -505
  1016. package/src/nodes/code/ScriptableValueNode.js +0 -170
  1017. package/src/nodes/core/CacheNode.js +0 -50
  1018. package/src/nodes/core/UniformGroup.js +0 -13
  1019. package/src/nodes/display/AfterImageNode.js +0 -158
  1020. package/src/nodes/display/AnaglyphPassNode.js +0 -67
  1021. package/src/nodes/display/AnamorphicNode.js +0 -151
  1022. package/src/nodes/display/BlendMode.js +0 -54
  1023. package/src/nodes/display/BloomNode.js +0 -341
  1024. package/src/nodes/display/DenoiseNode.js +0 -204
  1025. package/src/nodes/display/DepthOfFieldNode.js +0 -124
  1026. package/src/nodes/display/DotScreenNode.js +0 -66
  1027. package/src/nodes/display/FXAANode.js +0 -332
  1028. package/src/nodes/display/FilmNode.js +0 -56
  1029. package/src/nodes/display/GTAONode.js +0 -331
  1030. package/src/nodes/display/GaussianBlurNode.js +0 -213
  1031. package/src/nodes/display/Lut3DNode.js +0 -57
  1032. package/src/nodes/display/MotionBlur.js +0 -25
  1033. package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
  1034. package/src/nodes/display/PixelationPassNode.js +0 -213
  1035. package/src/nodes/display/PosterizeNode.js +0 -33
  1036. package/src/nodes/display/RGBShiftNode.js +0 -53
  1037. package/src/nodes/display/StereoCompositePassNode.js +0 -110
  1038. package/src/nodes/display/TransitionNode.js +0 -80
  1039. package/src/nodes/fog/FogExp2Node.js +0 -35
  1040. package/src/nodes/fog/FogNode.js +0 -50
  1041. package/src/nodes/fog/FogRangeNode.js +0 -36
  1042. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  1043. package/src/nodes/utils/EquirectUVNode.js +0 -36
  1044. package/src/nodes/utils/MatcapUVNode.js +0 -33
  1045. package/src/nodes/utils/OscNode.js +0 -85
  1046. package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
  1047. package/src/nodes/utils/TimerNode.js +0 -97
  1048. package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
  1049. package/src/renderers/common/nodes/Nodes.js +0 -534
  1050. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  1051. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
@@ -6,163 +6,300 @@ import SplitNode from '../utils/SplitNode.js';
6
6
  import SetNode from '../utils/SetNode.js';
7
7
  import FlipNode from '../utils/FlipNode.js';
8
8
  import ConstNode from '../core/ConstNode.js';
9
+ import MemberNode from '../utils/MemberNode.js';
10
+ import StackTrace from '../core/StackTrace.js';
9
11
  import { getValueFromType, getValueType } from '../core/NodeUtils.js';
10
-
11
- //
12
+ import { warn, error } from '../../utils.js';
12
13
 
13
14
  let currentStack = null;
14
15
 
15
16
  const NodeElements = new Map();
16
17
 
18
+ // Extend Node Class for TSL using prototype
19
+
17
20
  export function addMethodChaining( name, nodeElement ) {
18
21
 
22
+ // No require StackTrace because this is internal API
23
+
19
24
  if ( NodeElements.has( name ) ) {
20
25
 
21
- console.warn( `Redefinition of method chaining ${ name }` );
26
+ warn( `TSL: Redefinition of method chaining '${ name }'.` );
22
27
  return;
23
28
 
24
29
  }
25
30
 
26
- if ( typeof nodeElement !== 'function' ) throw new Error( `Node element ${ name } is not a function` );
31
+ if ( typeof nodeElement !== 'function' ) throw new Error( `THREE.TSL: Node element ${ name } is not a function` );
27
32
 
28
33
  NodeElements.set( name, nodeElement );
29
34
 
35
+ if ( name !== 'assign' ) {
36
+
37
+ // Changing Node prototype to add method chaining
38
+
39
+ Node.prototype[ name ] = function ( ...params ) {
40
+
41
+ //if ( name === 'toVarIntent' ) return this;
42
+
43
+ return this.isStackNode ? this.addToStack( nodeElement( ...params ) ) : nodeElement( this, ...params );
44
+
45
+ };
46
+
47
+ // Adding assign method chaining
48
+
49
+ Node.prototype[ name + 'Assign' ] = function ( ...params ) {
50
+
51
+ return this.isStackNode ? this.assign( params[ 0 ], nodeElement( ...params ) ) : this.assign( nodeElement( this, ...params ) );
52
+
53
+ };
54
+
55
+ }
56
+
30
57
  }
31
58
 
32
59
  const parseSwizzle = ( props ) => props.replace( /r|s/g, 'x' ).replace( /g|t/g, 'y' ).replace( /b|p/g, 'z' ).replace( /a|q/g, 'w' );
33
60
  const parseSwizzleAndSort = ( props ) => parseSwizzle( props ).split( '' ).sort().join( '' );
34
61
 
35
- const shaderNodeHandler = {
62
+ Node.prototype.assign = function ( ...params ) {
36
63
 
37
- setup( NodeClosure, params ) {
64
+ if ( this.isStackNode !== true ) {
38
65
 
39
- const inputs = params.shift();
66
+ if ( currentStack !== null ) {
40
67
 
41
- return NodeClosure( nodeObjects( inputs ), ...params );
68
+ currentStack.assign( this, ...params );
42
69
 
43
- },
70
+ } else {
44
71
 
45
- get( node, prop, nodeObj ) {
72
+ error( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().', new StackTrace() );
46
73
 
47
- if ( typeof prop === 'string' && node[ prop ] === undefined ) {
74
+ }
48
75
 
49
- if ( node.isStackNode !== true && prop === 'assign' ) {
76
+ return this;
50
77
 
51
- return ( ...params ) => {
78
+ } else {
52
79
 
53
- currentStack.assign( nodeObj, ...params );
80
+ const nodeElement = NodeElements.get( 'assign' );
54
81
 
55
- return nodeObj;
82
+ return this.addToStack( nodeElement( ...params ) );
56
83
 
57
- };
84
+ }
85
+
86
+ };
87
+
88
+ Node.prototype.toVarIntent = function () {
89
+
90
+ return this;
91
+
92
+ };
93
+
94
+ Node.prototype.get = function ( value ) {
95
+
96
+ return new MemberNode( this, value );
97
+
98
+ };
99
+
100
+ // Cache prototype for TSL
101
+
102
+ const proto = {};
103
+
104
+ // Set swizzle properties for xyzw, rgba, and stpq.
105
+
106
+ function setProtoSwizzle( property, altA, altB ) {
107
+
108
+ // swizzle properties
109
+
110
+ proto[ property ] = proto[ altA ] = proto[ altB ] = {
111
+
112
+ get() {
113
+
114
+ this._cache = this._cache || {};
115
+
116
+ //
117
+
118
+ let split = this._cache[ property ];
119
+
120
+ if ( split === undefined ) {
121
+
122
+ split = new SplitNode( this, property );
58
123
 
59
- } else if ( NodeElements.has( prop ) ) {
124
+ this._cache[ property ] = split;
60
125
 
61
- const nodeElement = NodeElements.get( prop );
126
+ }
127
+
128
+ return split;
129
+
130
+ },
131
+
132
+ set( value ) {
133
+
134
+ this[ property ].assign( nodeObject( value ) );
135
+
136
+ }
137
+
138
+ };
62
139
 
63
- return node.isStackNode ? ( ...params ) => nodeObj.add( nodeElement( ...params ) ) : ( ...params ) => nodeElement( nodeObj, ...params );
140
+ // set properties ( swizzle ) and sort to xyzw sequence
64
141
 
65
- } else if ( prop === 'self' ) {
142
+ const propUpper = property.toUpperCase();
143
+ const altAUpper = altA.toUpperCase();
144
+ const altBUpper = altB.toUpperCase();
66
145
 
67
- return node;
146
+ // Set methods for swizzle properties
68
147
 
69
- } else if ( prop.endsWith( 'Assign' ) && NodeElements.has( prop.slice( 0, prop.length - 'Assign'.length ) ) ) {
148
+ Node.prototype[ 'set' + propUpper ] = Node.prototype[ 'set' + altAUpper ] = Node.prototype[ 'set' + altBUpper ] = function ( value ) {
70
149
 
71
- const nodeElement = NodeElements.get( prop.slice( 0, prop.length - 'Assign'.length ) );
150
+ const swizzle = parseSwizzleAndSort( property );
72
151
 
73
- return node.isStackNode ? ( ...params ) => nodeObj.assign( params[ 0 ], nodeElement( ...params ) ) : ( ...params ) => nodeObj.assign( nodeElement( nodeObj, ...params ) );
152
+ return new SetNode( this, swizzle, nodeObject( value ) );
74
153
 
75
- } else if ( /^[xyzwrgbastpq]{1,4}$/.test( prop ) === true ) {
154
+ };
76
155
 
77
- // accessing properties ( swizzle )
156
+ // Set methods for flip properties
78
157
 
79
- prop = parseSwizzle( prop );
158
+ Node.prototype[ 'flip' + propUpper ] = Node.prototype[ 'flip' + altAUpper ] = Node.prototype[ 'flip' + altBUpper ] = function () {
80
159
 
81
- return nodeObject( new SplitNode( nodeObj, prop ) );
160
+ const swizzle = parseSwizzleAndSort( property );
82
161
 
83
- } else if ( /^set[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
162
+ return new FlipNode( this, swizzle );
84
163
 
85
- // set properties ( swizzle ) and sort to xyzw sequence
164
+ };
86
165
 
87
- prop = parseSwizzleAndSort( prop.slice( 3 ).toLowerCase() );
166
+ }
88
167
 
89
- return ( value ) => nodeObject( new SetNode( node, prop, value ) );
168
+ const swizzleA = [ 'x', 'y', 'z', 'w' ];
169
+ const swizzleB = [ 'r', 'g', 'b', 'a' ];
170
+ const swizzleC = [ 's', 't', 'p', 'q' ];
90
171
 
91
- } else if ( /^flip[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
172
+ for ( let a = 0; a < 4; a ++ ) {
92
173
 
93
- // set properties ( swizzle ) and sort to xyzw sequence
174
+ let prop = swizzleA[ a ];
175
+ let altA = swizzleB[ a ];
176
+ let altB = swizzleC[ a ];
94
177
 
95
- prop = parseSwizzleAndSort( prop.slice( 4 ).toLowerCase() );
178
+ setProtoSwizzle( prop, altA, altB );
96
179
 
97
- return () => nodeObject( new FlipNode( nodeObject( node ), prop ) );
180
+ for ( let b = 0; b < 4; b ++ ) {
98
181
 
99
- } else if ( prop === 'width' || prop === 'height' || prop === 'depth' ) {
182
+ prop = swizzleA[ a ] + swizzleA[ b ];
183
+ altA = swizzleB[ a ] + swizzleB[ b ];
184
+ altB = swizzleC[ a ] + swizzleC[ b ];
100
185
 
101
- // accessing property
186
+ setProtoSwizzle( prop, altA, altB );
102
187
 
103
- if ( prop === 'width' ) prop = 'x';
104
- else if ( prop === 'height' ) prop = 'y';
105
- else if ( prop === 'depth' ) prop = 'z';
188
+ for ( let c = 0; c < 4; c ++ ) {
106
189
 
107
- return nodeObject( new SplitNode( node, prop ) );
190
+ prop = swizzleA[ a ] + swizzleA[ b ] + swizzleA[ c ];
191
+ altA = swizzleB[ a ] + swizzleB[ b ] + swizzleB[ c ];
192
+ altB = swizzleC[ a ] + swizzleC[ b ] + swizzleC[ c ];
108
193
 
109
- } else if ( /^\d+$/.test( prop ) === true ) {
194
+ setProtoSwizzle( prop, altA, altB );
110
195
 
111
- // accessing array
196
+ for ( let d = 0; d < 4; d ++ ) {
112
197
 
113
- return nodeObject( new ArrayElementNode( nodeObj, new ConstNode( Number( prop ), 'uint' ) ) );
198
+ prop = swizzleA[ a ] + swizzleA[ b ] + swizzleA[ c ] + swizzleA[ d ];
199
+ altA = swizzleB[ a ] + swizzleB[ b ] + swizzleB[ c ] + swizzleB[ d ];
200
+ altB = swizzleC[ a ] + swizzleC[ b ] + swizzleC[ c ] + swizzleC[ d ];
201
+
202
+ setProtoSwizzle( prop, altA, altB );
114
203
 
115
204
  }
116
205
 
117
206
  }
118
207
 
119
- return Reflect.get( node, prop, nodeObj );
208
+ }
209
+
210
+ }
211
+
212
+ // Set/get static properties for array elements (0-31).
213
+
214
+ for ( let i = 0; i < 32; i ++ ) {
120
215
 
121
- },
216
+ proto[ i ] = {
122
217
 
123
- set( node, prop, value, nodeObj ) {
218
+ get() {
124
219
 
125
- if ( typeof prop === 'string' && node[ prop ] === undefined ) {
220
+ this._cache = this._cache || {};
126
221
 
127
- // setting properties
222
+ //
128
223
 
129
- if ( /^[xyzwrgbastpq]{1,4}$/.test( prop ) === true || prop === 'width' || prop === 'height' || prop === 'depth' || /^\d+$/.test( prop ) === true ) {
224
+ let element = this._cache[ i ];
130
225
 
131
- nodeObj[ prop ].assign( value );
226
+ if ( element === undefined ) {
132
227
 
133
- return true;
228
+ element = new ArrayElementNode( this, new ConstNode( i, 'uint' ) );
229
+
230
+ this._cache[ i ] = element;
134
231
 
135
232
  }
136
233
 
234
+ return element;
235
+
236
+ },
237
+
238
+ set( value ) {
239
+
240
+ this[ i ].assign( nodeObject( value ) );
241
+
137
242
  }
138
243
 
139
- return Reflect.set( node, prop, value, nodeObj );
244
+ };
140
245
 
141
- }
246
+ }
142
247
 
143
- };
248
+ /*
249
+ // Set properties for width, height, and depth.
144
250
 
145
- const nodeObjectsCacheMap = new WeakMap();
146
- const nodeBuilderFunctionsCacheMap = new WeakMap();
251
+ function setProtoProperty( property, target ) {
147
252
 
148
- const ShaderNodeObject = function ( obj, altType = null ) {
253
+ proto[ property ] = {
149
254
 
150
- const type = getValueType( obj );
255
+ get() {
151
256
 
152
- if ( type === 'node' ) {
257
+ this._cache = this._cache || {};
258
+
259
+ //
153
260
 
154
- let nodeObject = nodeObjectsCacheMap.get( obj );
261
+ let split = this._cache[ target ];
155
262
 
156
- if ( nodeObject === undefined ) {
263
+ if ( split === undefined ) {
157
264
 
158
- nodeObject = new Proxy( obj, shaderNodeHandler );
265
+ split = new SplitNode( this, target );
266
+
267
+ this._cache[ target ] = split;
268
+
269
+ }
159
270
 
160
- nodeObjectsCacheMap.set( obj, nodeObject );
161
- nodeObjectsCacheMap.set( nodeObject, nodeObject );
271
+ return split;
272
+
273
+ },
274
+
275
+ set( value ) {
276
+
277
+ this[ target ].assign( nodeObject( value ) );
162
278
 
163
279
  }
164
280
 
165
- return nodeObject;
281
+ };
282
+
283
+ }
284
+
285
+ setProtoProperty( 'width', 'x' );
286
+ setProtoProperty( 'height', 'y' );
287
+ setProtoProperty( 'depth', 'z' );
288
+ */
289
+
290
+ Object.defineProperties( Node.prototype, proto );
291
+
292
+ // --- FINISH ---
293
+
294
+ const nodeBuilderFunctionsCacheMap = new WeakMap();
295
+
296
+ const ShaderNodeObject = function ( obj, altType = null ) {
297
+
298
+ const type = getValueType( obj );
299
+
300
+ if ( type === 'node' ) {
301
+
302
+ return obj;
166
303
 
167
304
  } else if ( ( altType === null && ( type === 'float' || type === 'boolean' ) ) || ( type && type !== 'shader' && type !== 'string' ) ) {
168
305
 
@@ -170,7 +307,7 @@ const ShaderNodeObject = function ( obj, altType = null ) {
170
307
 
171
308
  } else if ( type === 'shader' ) {
172
309
 
173
- return Fn( obj );
310
+ return obj.isFn ? obj : Fn( obj );
174
311
 
175
312
  }
176
313
 
@@ -206,13 +343,61 @@ const ShaderNodeArray = function ( array, altType = null ) {
206
343
 
207
344
  const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, settings = null ) {
208
345
 
209
- const assignNode = ( node ) => nodeObject( settings !== null ? Object.assign( node, settings ) : node );
346
+ function assignNode( node ) {
347
+
348
+ if ( settings !== null ) {
349
+
350
+ node = nodeObject( Object.assign( node, settings ) );
351
+
352
+ if ( settings.intent === true ) {
353
+
354
+ node = node.toVarIntent();
355
+
356
+ }
357
+
358
+ } else {
359
+
360
+ node = nodeObject( node );
361
+
362
+ }
363
+
364
+ return node;
365
+
366
+
367
+ }
368
+
369
+ let fn, name = scope, minParams, maxParams;
370
+
371
+ function verifyParamsLimit( params ) {
372
+
373
+ let tslName;
374
+
375
+ if ( name ) tslName = /[a-z]/i.test( name ) ? name + '()' : name;
376
+ else tslName = NodeClass.type;
377
+
378
+ if ( minParams !== undefined && params.length < minParams ) {
379
+
380
+ error( `TSL: "${ tslName }" parameter length is less than minimum required.`, new StackTrace() );
381
+
382
+ return params.concat( new Array( minParams - params.length ).fill( 0 ) );
383
+
384
+ } else if ( maxParams !== undefined && params.length > maxParams ) {
385
+
386
+ error( `TSL: "${ tslName }" parameter length exceeds limit.`, new StackTrace() );
387
+
388
+ return params.slice( 0, maxParams );
389
+
390
+ }
391
+
392
+ return params;
393
+
394
+ }
210
395
 
211
396
  if ( scope === null ) {
212
397
 
213
- return ( ...params ) => {
398
+ fn = ( ...params ) => {
214
399
 
215
- return assignNode( new NodeClass( ...nodeArray( params ) ) );
400
+ return assignNode( new NodeClass( ...nodeArray( verifyParamsLimit( params ) ) ) );
216
401
 
217
402
  };
218
403
 
@@ -220,38 +405,59 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
220
405
 
221
406
  factor = nodeObject( factor );
222
407
 
223
- return ( ...params ) => {
408
+ fn = ( ...params ) => {
224
409
 
225
- return assignNode( new NodeClass( scope, ...nodeArray( params ), factor ) );
410
+ return assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ), factor ) );
226
411
 
227
412
  };
228
413
 
229
414
  } else {
230
415
 
231
- return ( ...params ) => {
416
+ fn = ( ...params ) => {
232
417
 
233
- return assignNode( new NodeClass( scope, ...nodeArray( params ) ) );
418
+ return assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ) ) );
234
419
 
235
420
  };
236
421
 
237
422
  }
238
423
 
424
+ fn.setParameterLength = ( ...params ) => {
425
+
426
+ if ( params.length === 1 ) minParams = maxParams = params[ 0 ];
427
+ else if ( params.length === 2 ) [ minParams, maxParams ] = params;
428
+
429
+ return fn;
430
+
431
+ };
432
+
433
+ fn.setName = ( value ) => {
434
+
435
+ name = value;
436
+
437
+ return fn;
438
+
439
+ };
440
+
441
+ return fn;
442
+
239
443
  };
240
444
 
241
445
  const ShaderNodeImmutable = function ( NodeClass, ...params ) {
242
446
 
243
- return nodeObject( new NodeClass( ...nodeArray( params ) ) );
447
+ return new NodeClass( ...nodeArray( params ) );
244
448
 
245
449
  };
246
450
 
247
451
  class ShaderCallNodeInternal extends Node {
248
452
 
249
- constructor( shaderNode, inputNodes ) {
453
+ constructor( shaderNode, rawInputs ) {
250
454
 
251
455
  super();
252
456
 
253
457
  this.shaderNode = shaderNode;
254
- this.inputNodes = inputNodes;
458
+ this.rawInputs = rawInputs;
459
+
460
+ this.isShaderCallNodeInternal = true;
255
461
 
256
462
  }
257
463
 
@@ -261,15 +467,41 @@ class ShaderCallNodeInternal extends Node {
261
467
 
262
468
  }
263
469
 
470
+ getElementType( builder ) {
471
+
472
+ return this.getOutputNode( builder ).getElementType( builder );
473
+
474
+ }
475
+
476
+ getMemberType( builder, name ) {
477
+
478
+ return this.getOutputNode( builder ).getMemberType( builder, name );
479
+
480
+ }
481
+
264
482
  call( builder ) {
265
483
 
266
- const { shaderNode, inputNodes } = this;
484
+ const { shaderNode, rawInputs } = this;
267
485
 
268
486
  const properties = builder.getNodeProperties( shaderNode );
269
- if ( properties.onceOutput ) return properties.onceOutput;
487
+
488
+ const subBuild = builder.getClosestSubBuild( shaderNode.subBuilds ) || '';
489
+ const subBuildProperty = subBuild || 'default';
490
+
491
+ if ( properties[ subBuildProperty ] ) {
492
+
493
+ return properties[ subBuildProperty ];
494
+
495
+ }
270
496
 
271
497
  //
272
498
 
499
+ const previousSubBuildFn = builder.subBuildFn;
500
+ const previousFnCall = builder.fnCall;
501
+
502
+ builder.subBuildFn = subBuild;
503
+ builder.fnCall = this;
504
+
273
505
  let result = null;
274
506
 
275
507
  if ( shaderNode.layout ) {
@@ -294,26 +526,61 @@ class ShaderCallNodeInternal extends Node {
294
526
 
295
527
  }
296
528
 
297
- if ( builder.currentFunctionNode !== null ) {
529
+ builder.addInclude( functionNode );
298
530
 
299
- builder.currentFunctionNode.includes.push( functionNode );
531
+ //
300
532
 
301
- }
533
+ const inputs = rawInputs ? getLayoutParameters( rawInputs ) : null;
302
534
 
303
- result = nodeObject( functionNode.call( inputNodes ) );
535
+ result = nodeObject( functionNode.call( inputs ) );
304
536
 
305
537
  } else {
306
538
 
539
+ const secureNodeBuilder = new Proxy( builder, {
540
+
541
+ get: ( target, property, receiver ) => {
542
+
543
+ let value;
544
+
545
+ if ( Symbol.iterator === property ) {
546
+
547
+ value = function* () {
548
+
549
+ yield undefined;
550
+
551
+ };
552
+
553
+ } else {
554
+
555
+ value = Reflect.get( target, property, receiver );
556
+
557
+ }
558
+
559
+ return value;
560
+
561
+ }
562
+
563
+ } );
564
+
565
+ //
566
+
567
+ const inputs = rawInputs ? getProxyParameters( rawInputs ) : null;
568
+
569
+ const hasParameters = Array.isArray( rawInputs ) ? rawInputs.length > 0 : rawInputs !== null;
570
+
307
571
  const jsFunc = shaderNode.jsFunc;
308
- const outputNode = inputNodes !== null ? jsFunc( inputNodes, builder ) : jsFunc( builder );
572
+ const outputNode = hasParameters || jsFunc.length > 1 ? jsFunc( inputs, secureNodeBuilder ) : jsFunc( secureNodeBuilder );
309
573
 
310
574
  result = nodeObject( outputNode );
311
575
 
312
576
  }
313
577
 
578
+ builder.subBuildFn = previousSubBuildFn;
579
+ builder.fnCall = previousFnCall;
580
+
314
581
  if ( shaderNode.once ) {
315
582
 
316
- properties.onceOutput = result;
583
+ properties[ subBuildProperty ] = result;
317
584
 
318
585
  }
319
586
 
@@ -321,43 +588,198 @@ class ShaderCallNodeInternal extends Node {
321
588
 
322
589
  }
323
590
 
591
+ setupOutput( builder ) {
592
+
593
+ builder.addStack();
594
+
595
+ builder.stack.outputNode = this.call( builder );
596
+
597
+ return builder.removeStack();
598
+
599
+ }
600
+
324
601
  getOutputNode( builder ) {
325
602
 
326
603
  const properties = builder.getNodeProperties( this );
604
+ const subBuildOutput = builder.getSubBuildOutput( this );
605
+
606
+ properties[ subBuildOutput ] = properties[ subBuildOutput ] || this.setupOutput( builder );
607
+ properties[ subBuildOutput ].subBuild = builder.getClosestSubBuild( this );
608
+
609
+ return properties[ subBuildOutput ];
610
+
611
+ }
612
+
613
+ build( builder, output = null ) {
614
+
615
+ let result = null;
616
+
617
+ const buildStage = builder.getBuildStage();
618
+ const properties = builder.getNodeProperties( this );
619
+
620
+ const subBuildOutput = builder.getSubBuildOutput( this );
621
+ const outputNode = this.getOutputNode( builder );
622
+
623
+ const previousFnCall = builder.fnCall;
624
+
625
+ builder.fnCall = this;
626
+
627
+ if ( buildStage === 'setup' ) {
628
+
629
+ const subBuildInitialized = builder.getSubBuildProperty( 'initialized', this );
630
+
631
+ if ( properties[ subBuildInitialized ] !== true ) {
632
+
633
+ properties[ subBuildInitialized ] = true;
634
+
635
+ properties[ subBuildOutput ] = this.getOutputNode( builder );
636
+ properties[ subBuildOutput ].build( builder );
637
+
638
+ // If the shaderNode has subBuilds, add them to the chaining nodes
639
+ // so they can be built later in the build process.
327
640
 
328
- if ( properties.outputNode === null ) {
641
+ if ( this.shaderNode.subBuilds ) {
329
642
 
330
- properties.outputNode = this.setupOutput( builder );
643
+ for ( const node of builder.chaining ) {
644
+
645
+ const nodeData = builder.getDataFromNode( node, 'any' );
646
+ nodeData.subBuilds = nodeData.subBuilds || new Set();
647
+
648
+ for ( const subBuild of this.shaderNode.subBuilds ) {
649
+
650
+ nodeData.subBuilds.add( subBuild );
651
+
652
+ }
653
+
654
+ //builder.getDataFromNode( node ).subBuilds = nodeData.subBuilds;
655
+
656
+ }
657
+
658
+ }
659
+
660
+ }
661
+
662
+ result = properties[ subBuildOutput ];
663
+
664
+ } else if ( buildStage === 'analyze' ) {
665
+
666
+ outputNode.build( builder, output );
667
+
668
+ } else if ( buildStage === 'generate' ) {
669
+
670
+ result = outputNode.build( builder, output ) || '';
331
671
 
332
672
  }
333
673
 
334
- return properties.outputNode;
674
+ builder.fnCall = previousFnCall;
675
+
676
+ return result;
335
677
 
336
678
  }
337
679
 
338
- setup( builder ) {
680
+ }
339
681
 
340
- return this.getOutputNode( builder );
682
+ function getLayoutParameters( params ) {
341
683
 
342
- }
684
+ let output;
343
685
 
344
- setupOutput( builder ) {
686
+ nodeObjects( params );
345
687
 
346
- builder.addStack();
688
+ const isArrayAsParameter = params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
347
689
 
348
- builder.stack.outputNode = this.call( builder );
690
+ if ( isArrayAsParameter ) {
349
691
 
350
- return builder.removeStack();
692
+ output = [ ...params ];
693
+
694
+ } else {
695
+
696
+ output = params[ 0 ];
351
697
 
352
698
  }
353
699
 
354
- generate( builder, output ) {
700
+ return output;
355
701
 
356
- const outputNode = this.getOutputNode( builder );
702
+ }
357
703
 
358
- return outputNode.build( builder, output );
704
+ function getProxyParameters( params ) {
359
705
 
360
- }
706
+ let index = 0;
707
+
708
+ nodeObjects( params );
709
+
710
+ return new Proxy( params, {
711
+
712
+ get: ( target, property, receiver ) => {
713
+
714
+ let value;
715
+
716
+ if ( property === 'length' ) {
717
+
718
+ value = params.length;
719
+
720
+ return value;
721
+
722
+ }
723
+
724
+ if ( Symbol.iterator === property ) {
725
+
726
+ value = function* () {
727
+
728
+ for ( const inputNode of params ) {
729
+
730
+ yield nodeObject( inputNode );
731
+
732
+ }
733
+
734
+ };
735
+
736
+ } else {
737
+
738
+ if ( params.length > 0 ) {
739
+
740
+ if ( Object.getPrototypeOf( params[ 0 ] ) === Object.prototype ) {
741
+
742
+ const objectTarget = params[ 0 ];
743
+
744
+ if ( objectTarget[ property ] === undefined ) {
745
+
746
+ value = objectTarget[ index ++ ];
747
+
748
+ } else {
749
+
750
+ value = Reflect.get( objectTarget, property, receiver );
751
+
752
+ }
753
+
754
+ } else if ( params[ 0 ] instanceof Node ) {
755
+
756
+ if ( params[ property ] === undefined ) {
757
+
758
+ value = params[ index ++ ];
759
+
760
+ } else {
761
+
762
+ value = Reflect.get( params, property, receiver );
763
+
764
+ }
765
+
766
+ }
767
+
768
+ } else {
769
+
770
+ value = Reflect.get( target, property, receiver );
771
+
772
+ }
773
+
774
+ value = nodeObject( value );
775
+
776
+ }
777
+
778
+ return value;
779
+
780
+ }
781
+
782
+ } );
361
783
 
362
784
  }
363
785
 
@@ -384,11 +806,15 @@ class ShaderNodeInternal extends Node {
384
806
 
385
807
  }
386
808
 
387
- call( inputs = null ) {
809
+ getLayout() {
810
+
811
+ return this.layout;
812
+
813
+ }
388
814
 
389
- nodeObjects( inputs );
815
+ call( rawInputs = null ) {
390
816
 
391
- return nodeObject( new ShaderCallNodeInternal( this, inputs ) );
817
+ return new ShaderCallNodeInternal( this, rawInputs );
392
818
 
393
819
  }
394
820
 
@@ -440,25 +866,29 @@ const getConstNode = ( value, type ) => {
440
866
 
441
867
  };
442
868
 
443
- const safeGetNodeType = ( node ) => {
869
+ const ConvertType = function ( type, cacheMap = null ) {
444
870
 
445
- try {
871
+ return ( ...params ) => {
446
872
 
447
- return node.getNodeType();
873
+ for ( const param of params ) {
448
874
 
449
- } catch ( _ ) {
875
+ if ( param === undefined ) {
450
876
 
451
- return undefined;
877
+ error( `TSL: Invalid parameter for the type "${ type }".`, new StackTrace() );
452
878
 
453
- }
879
+ return new ConstNode( 0, type );
454
880
 
455
- };
881
+ }
456
882
 
457
- const ConvertType = function ( type, cacheMap = null ) {
883
+ }
458
884
 
459
- return ( ...params ) => {
885
+ if ( params.length === 0 || ( ! [ 'bool', 'float', 'int', 'uint' ].includes( type ) && params.every( param => {
460
886
 
461
- if ( params.length === 0 || ( ! [ 'bool', 'float', 'int', 'uint' ].includes( type ) && params.every( param => typeof param !== 'object' ) ) ) {
887
+ const paramType = typeof param;
888
+
889
+ return paramType !== 'object' && paramType !== 'function';
890
+
891
+ } ) ) ) {
462
892
 
463
893
  params = [ getValueFromType( type, ...params ) ];
464
894
 
@@ -466,20 +896,20 @@ const ConvertType = function ( type, cacheMap = null ) {
466
896
 
467
897
  if ( params.length === 1 && cacheMap !== null && cacheMap.has( params[ 0 ] ) ) {
468
898
 
469
- return nodeObject( cacheMap.get( params[ 0 ] ) );
899
+ return nodeObjectIntent( cacheMap.get( params[ 0 ] ) );
470
900
 
471
901
  }
472
902
 
473
903
  if ( params.length === 1 ) {
474
904
 
475
905
  const node = getConstNode( params[ 0 ], type );
476
- if ( safeGetNodeType( node ) === type ) return nodeObject( node );
477
- return nodeObject( new ConvertNode( node, type ) );
906
+ if ( node.nodeType === type ) return nodeObjectIntent( node );
907
+ return nodeObjectIntent( new ConvertNode( node, type ) );
478
908
 
479
909
  }
480
910
 
481
911
  const nodes = params.map( param => getConstNode( param ) );
482
- return nodeObject( new JoinNode( nodes, type ) );
912
+ return nodeObjectIntent( new JoinNode( nodes, type ) );
483
913
 
484
914
  };
485
915
 
@@ -497,78 +927,161 @@ export const getConstNodeType = ( value ) => ( value !== undefined && value !==
497
927
 
498
928
  export function ShaderNode( jsFunc, nodeType ) {
499
929
 
500
- return new Proxy( new ShaderNodeInternal( jsFunc, nodeType ), shaderNodeHandler );
930
+ return new ShaderNodeInternal( jsFunc, nodeType );
501
931
 
502
932
  }
503
933
 
504
934
  export const nodeObject = ( val, altType = null ) => /* new */ ShaderNodeObject( val, altType );
935
+ export const nodeObjectIntent = ( val, altType = null ) => /* new */ nodeObject( val, altType ).toVarIntent();
505
936
  export const nodeObjects = ( val, altType = null ) => new ShaderNodeObjects( val, altType );
506
937
  export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, altType );
507
- export const nodeProxy = ( ...params ) => new ShaderNodeProxy( ...params );
508
- export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
938
+ export const nodeProxy = ( NodeClass, scope = null, factor = null, settings = null ) => new ShaderNodeProxy( NodeClass, scope, factor, settings );
939
+ export const nodeImmutable = ( NodeClass, ...params ) => new ShaderNodeImmutable( NodeClass, ...params );
940
+ export const nodeProxyIntent = ( NodeClass, scope = null, factor = null, settings = {} ) => new ShaderNodeProxy( NodeClass, scope, factor, { ...settings, intent: true } );
941
+
942
+ let fnId = 0;
509
943
 
510
- export const Fn = ( jsFunc, nodeType ) => {
944
+ class FnNode extends Node {
511
945
 
512
- const shaderNode = new ShaderNode( jsFunc, nodeType );
946
+ constructor( jsFunc, layout = null ) {
513
947
 
514
- const fn = ( ...params ) => {
948
+ super();
515
949
 
516
- let inputs;
950
+ let nodeType = null;
517
951
 
518
- nodeObjects( params );
952
+ if ( layout !== null ) {
519
953
 
520
- if ( params[ 0 ] && params[ 0 ].isNode ) {
954
+ if ( typeof layout === 'object' ) {
521
955
 
522
- inputs = [ ...params ];
956
+ nodeType = layout.return;
523
957
 
524
- } else {
958
+ } else {
959
+
960
+ if ( typeof layout === 'string' ) {
961
+
962
+ nodeType = layout;
963
+
964
+ } else {
965
+
966
+ error( 'TSL: Invalid layout type.', new StackTrace() );
967
+
968
+ }
969
+
970
+ layout = null;
525
971
 
526
- inputs = params[ 0 ];
972
+ }
527
973
 
528
974
  }
529
975
 
530
- return shaderNode.call( inputs );
976
+ this.shaderNode = new ShaderNode( jsFunc, nodeType );
531
977
 
532
- };
978
+ if ( layout !== null ) {
533
979
 
534
- fn.shaderNode = shaderNode;
980
+ this.setLayout( layout );
535
981
 
536
- fn.setLayout = ( layout ) => {
982
+ }
537
983
 
538
- shaderNode.setLayout( layout );
984
+ this.isFn = true;
539
985
 
540
- return fn;
986
+ }
541
987
 
542
- };
988
+ setLayout( layout ) {
543
989
 
544
- fn.once = () => {
990
+ const nodeType = this.shaderNode.nodeType;
545
991
 
546
- shaderNode.once = true;
992
+ if ( typeof layout.inputs !== 'object' ) {
547
993
 
548
- return fn;
994
+ const fullLayout = {
995
+ name: 'fn' + fnId ++,
996
+ type: nodeType,
997
+ inputs: []
998
+ };
549
999
 
550
- };
1000
+ for ( const name in layout ) {
551
1001
 
552
- return fn;
1002
+ if ( name === 'return' ) continue;
553
1003
 
554
- };
1004
+ fullLayout.inputs.push( {
1005
+ name: name,
1006
+ type: layout[ name ]
1007
+ } );
555
1008
 
556
- export const tslFn = ( ...params ) => { // @deprecated, r168
1009
+ }
557
1010
 
558
- console.warn( 'TSL.ShaderNode: tslFn() has been renamed to Fn().' );
559
- return Fn( ...params );
1011
+ layout = fullLayout;
560
1012
 
561
- };
1013
+ }
562
1014
 
563
- //
1015
+ this.shaderNode.setLayout( layout );
564
1016
 
565
- addMethodChaining( 'toGlobal', ( node ) => {
1017
+ return this;
566
1018
 
567
- node.global = true;
1019
+ }
568
1020
 
569
- return node;
1021
+ getNodeType( builder ) {
570
1022
 
571
- } );
1023
+ return this.shaderNode.getNodeType( builder ) || 'float';
1024
+
1025
+ }
1026
+
1027
+ call( ...params ) {
1028
+
1029
+ const fnCall = this.shaderNode.call( params );
1030
+
1031
+ if ( this.shaderNode.nodeType === 'void' ) fnCall.toStack();
1032
+
1033
+ return fnCall.toVarIntent();
1034
+
1035
+ }
1036
+
1037
+ once( subBuilds = null ) {
1038
+
1039
+ this.shaderNode.once = true;
1040
+ this.shaderNode.subBuilds = subBuilds;
1041
+
1042
+ return this;
1043
+
1044
+ }
1045
+
1046
+ generate( builder ) {
1047
+
1048
+ const type = this.getNodeType( builder );
1049
+
1050
+ error( 'TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".', this.stackTrace );
1051
+
1052
+ return builder.generateConst( type );
1053
+
1054
+ }
1055
+
1056
+ }
1057
+
1058
+ export function Fn( jsFunc, layout = null ) {
1059
+
1060
+ const instance = new FnNode( jsFunc, layout );
1061
+
1062
+ return new Proxy( () => {}, {
1063
+
1064
+ apply( target, thisArg, params ) {
1065
+
1066
+ return instance.call( ...params );
1067
+
1068
+ },
1069
+
1070
+ get( target, prop, receiver ) {
1071
+
1072
+ return Reflect.get( instance, prop, receiver );
1073
+
1074
+ },
1075
+
1076
+ set( target, prop, value, receiver ) {
1077
+
1078
+ return Reflect.set( instance, prop, value, receiver );
1079
+
1080
+ }
1081
+
1082
+ } );
1083
+
1084
+ }
572
1085
 
573
1086
  //
574
1087
 
@@ -586,17 +1099,52 @@ export const setCurrentStack = ( stack ) => {
586
1099
 
587
1100
  export const getCurrentStack = () => currentStack;
588
1101
 
1102
+ /**
1103
+ * Represent a conditional node using if/else statements.
1104
+ *
1105
+ * ```js
1106
+ * If( condition, function )
1107
+ * .ElseIf( condition, function )
1108
+ * .Else( function )
1109
+ * ```
1110
+ * @tsl
1111
+ * @function
1112
+ * @param {...any} params - The parameters for the conditional node.
1113
+ * @returns {StackNode} The conditional node.
1114
+ */
589
1115
  export const If = ( ...params ) => currentStack.If( ...params );
590
1116
 
591
- export function append( node ) {
592
-
593
- if ( currentStack ) currentStack.add( node );
1117
+ /**
1118
+ * Represent a conditional node using switch/case statements.
1119
+ *
1120
+ * ```js
1121
+ * Switch( value )
1122
+ * .Case( 1, function )
1123
+ * .Case( 2, 3, 4, function )
1124
+ * .Default( function )
1125
+ * ```
1126
+ * @tsl
1127
+ * @function
1128
+ * @param {...any} params - The parameters for the conditional node.
1129
+ * @returns {StackNode} The conditional node.
1130
+ */
1131
+ export const Switch = ( ...params ) => currentStack.Switch( ...params );
1132
+
1133
+ /**
1134
+ * Add the given node to the current stack.
1135
+ *
1136
+ * @param {Node} node - The node to add.
1137
+ * @returns {Node} The node that was added to the stack.
1138
+ */
1139
+ export function Stack( node ) {
1140
+
1141
+ if ( currentStack ) currentStack.addToStack( node );
594
1142
 
595
1143
  return node;
596
1144
 
597
1145
  }
598
1146
 
599
- addMethodChaining( 'append', append );
1147
+ addMethodChaining( 'toStack', Stack );
600
1148
 
601
1149
  // types
602
1150
 
@@ -626,8 +1174,8 @@ export const mat2 = new ConvertType( 'mat2' );
626
1174
  export const mat3 = new ConvertType( 'mat3' );
627
1175
  export const mat4 = new ConvertType( 'mat4' );
628
1176
 
629
- export const string = ( value = '' ) => nodeObject( new ConstNode( value, 'string' ) );
630
- export const arrayBuffer = ( value ) => nodeObject( new ConstNode( value, 'ArrayBuffer' ) );
1177
+ export const string = ( value = '' ) => new ConstNode( value, 'string' );
1178
+ export const arrayBuffer = ( value ) => new ConstNode( value, 'ArrayBuffer' );
631
1179
 
632
1180
  addMethodChaining( 'toColor', color );
633
1181
  addMethodChaining( 'toFloat', float );
@@ -652,9 +1200,33 @@ addMethodChaining( 'toMat4', mat4 );
652
1200
 
653
1201
  // basic nodes
654
1202
 
655
- export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode );
656
- export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
657
- export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject( node ), channels ) );
1203
+ export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode ).setParameterLength( 2 );
1204
+ export const convert = ( node, types ) => new ConvertNode( nodeObject( node ), types );
1205
+ export const split = ( node, channels ) => new SplitNode( nodeObject( node ), channels );
658
1206
 
659
1207
  addMethodChaining( 'element', element );
660
1208
  addMethodChaining( 'convert', convert );
1209
+
1210
+ // deprecated
1211
+
1212
+ /**
1213
+ * @tsl
1214
+ * @function
1215
+ * @deprecated since r176. Use {@link Stack} instead.
1216
+ *
1217
+ * @param {Node} node - The node to add.
1218
+ * @returns {Function}
1219
+ */
1220
+ export const append = ( node ) => { // @deprecated, r176
1221
+
1222
+ warn( 'TSL: append() has been renamed to Stack().', new StackTrace() );
1223
+ return Stack( node );
1224
+
1225
+ };
1226
+
1227
+ addMethodChaining( 'append', ( node ) => { // @deprecated, r176
1228
+
1229
+ warn( 'TSL: .append() has been renamed to .toStack().', new StackTrace() );
1230
+ return Stack( node );
1231
+
1232
+ } );