super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -3,6 +3,13 @@ import { scriptableValue } from './ScriptableValueNode.js';
3
3
  import { nodeProxy, float } from '../tsl/TSLBase.js';
4
4
  import { hashArray, hashString } from '../core/NodeUtils.js';
5
5
 
6
+ /** @module ScriptableNode **/
7
+
8
+ /**
9
+ * A Map-like data structure for managing resources of scriptable nodes.
10
+ *
11
+ * @augments Map
12
+ */
6
13
  class Resources extends Map {
7
14
 
8
15
  get( key, callback = null, ...params ) {
@@ -58,8 +65,49 @@ class Parameters {
58
65
 
59
66
  }
60
67
 
68
+ /**
69
+ * Defines the resources (e.g. namespaces) of scriptable nodes.
70
+ *
71
+ * @type {Resources}
72
+ */
61
73
  export const ScriptableNodeResources = new Resources();
62
74
 
75
+ /**
76
+ * This type of node allows to implement nodes with custom scripts. The script
77
+ * section is represented as an instance of `CodeNode` written with JavaScript.
78
+ * The script itself must adhere to a specific structure.
79
+ *
80
+ * - main(): Executed once by default and every time `node.needsUpdate` is set.
81
+ * - layout: The layout object defines the script's interface (inputs and outputs).
82
+ *
83
+ * ```js
84
+ * ScriptableNodeResources.set( 'TSL', TSL );
85
+ *
86
+ * const scriptableNode = scriptable( js( `
87
+ * layout = {
88
+ * outputType: 'node',
89
+ * elements: [
90
+ * { name: 'source', inputType: 'node' },
91
+ * ]
92
+ * };
93
+ *
94
+ * const { mul, oscSine } = TSL;
95
+ *
96
+ * function main() {
97
+ * const source = parameters.get( 'source' ) || float();
98
+ * return mul( source, oscSine() ) );
99
+ * }
100
+ *
101
+ * ` ) );
102
+ *
103
+ * scriptableNode.setParameter( 'source', color( 1, 0, 0 ) );
104
+ *
105
+ * const material = new THREE.MeshBasicNodeMaterial();
106
+ * material.colorNode = scriptableNode;
107
+ * ```
108
+ *
109
+ * @augments Node
110
+ */
63
111
  class ScriptableNode extends Node {
64
112
 
65
113
  static get type() {
@@ -68,11 +116,30 @@ class ScriptableNode extends Node {
68
116
 
69
117
  }
70
118
 
119
+ /**
120
+ * Constructs a new scriptable node.
121
+ *
122
+ * @param {CodeNode?} [codeNode=null] - The code node.
123
+ * @param {Object} [parameters={}] - The parameters definition.
124
+ */
71
125
  constructor( codeNode = null, parameters = {} ) {
72
126
 
73
127
  super();
74
128
 
129
+ /**
130
+ * The code node.
131
+ *
132
+ * @type {CodeNode?}
133
+ * @default null
134
+ */
75
135
  this.codeNode = codeNode;
136
+
137
+ /**
138
+ * The parameters definition.
139
+ *
140
+ * @type {Object}
141
+ * @default {}
142
+ */
76
143
  this.parameters = parameters;
77
144
 
78
145
  this._local = new Resources();
@@ -86,34 +153,68 @@ class ScriptableNode extends Node {
86
153
 
87
154
  this.onRefresh = this.onRefresh.bind( this );
88
155
 
156
+ /**
157
+ * This flag can be used for type testing.
158
+ *
159
+ * @type {Boolean}
160
+ * @readonly
161
+ * @default true
162
+ */
89
163
  this.isScriptableNode = true;
90
164
 
91
165
  }
92
166
 
167
+ /**
168
+ * The source code of the scriptable node.
169
+ *
170
+ * @type {String}
171
+ */
93
172
  get source() {
94
173
 
95
174
  return this.codeNode ? this.codeNode.code : '';
96
175
 
97
176
  }
98
177
 
178
+ /**
179
+ * Sets the reference of a local script variable.
180
+ *
181
+ * @param {String} name - The variable name.
182
+ * @param {Object} value - The reference to set.
183
+ * @return {Resources} The resource map
184
+ */
99
185
  setLocal( name, value ) {
100
186
 
101
187
  return this._local.set( name, value );
102
188
 
103
189
  }
104
190
 
191
+ /**
192
+ * Gets the value of a local script variable.
193
+ *
194
+ * @param {String} name - The variable name.
195
+ * @return {Object} The value.
196
+ */
105
197
  getLocal( name ) {
106
198
 
107
199
  return this._local.get( name );
108
200
 
109
201
  }
110
202
 
203
+ /**
204
+ * Event listener for the `refresh` event.
205
+ */
111
206
  onRefresh() {
112
207
 
113
208
  this._refresh();
114
209
 
115
210
  }
116
211
 
212
+ /**
213
+ * Returns an input from the layout with the given id/name.
214
+ *
215
+ * @param {String} id - The id/name of the input.
216
+ * @return {Object} The element entry.
217
+ */
117
218
  getInputLayout( id ) {
118
219
 
119
220
  for ( const element of this.getLayout() ) {
@@ -128,6 +229,12 @@ class ScriptableNode extends Node {
128
229
 
129
230
  }
130
231
 
232
+ /**
233
+ * Returns an output from the layout with the given id/name.
234
+ *
235
+ * @param {String} id - The id/name of the output.
236
+ * @return {Object} The element entry.
237
+ */
131
238
  getOutputLayout( id ) {
132
239
 
133
240
  for ( const element of this.getLayout() ) {
@@ -142,6 +249,13 @@ class ScriptableNode extends Node {
142
249
 
143
250
  }
144
251
 
252
+ /**
253
+ * Defines a script output for the given name and value.
254
+ *
255
+ * @param {String} name - The name of the output.
256
+ * @param {Node} value - The node value.
257
+ * @return {ScriptableNode} A reference to this node.
258
+ */
145
259
  setOutput( name, value ) {
146
260
 
147
261
  const outputs = this._outputs;
@@ -160,18 +274,37 @@ class ScriptableNode extends Node {
160
274
 
161
275
  }
162
276
 
277
+ /**
278
+ * Returns a script output for the given name.
279
+ *
280
+ * @param {String} name - The name of the output.
281
+ * @return {ScriptableValueNode} The node value.
282
+ */
163
283
  getOutput( name ) {
164
284
 
165
285
  return this._outputs[ name ];
166
286
 
167
287
  }
168
288
 
289
+ /**
290
+ * Returns a parameter for the given name
291
+ *
292
+ * @param {String} name - The name of the parameter.
293
+ * @return {ScriptableValueNode} The node value.
294
+ */
169
295
  getParameter( name ) {
170
296
 
171
297
  return this.parameters[ name ];
172
298
 
173
299
  }
174
300
 
301
+ /**
302
+ * Sets a value for the given parameter name.
303
+ *
304
+ * @param {String} name - The parameter name.
305
+ * @param {Any} value - The parameter value.
306
+ * @return {ScriptableNode} A reference to this node.
307
+ */
175
308
  setParameter( name, value ) {
176
309
 
177
310
  const parameters = this.parameters;
@@ -205,12 +338,24 @@ class ScriptableNode extends Node {
205
338
 
206
339
  }
207
340
 
341
+ /**
342
+ * Returns the value of this node which is the value of
343
+ * the default output.
344
+ *
345
+ * @return {Node} The value.
346
+ */
208
347
  getValue() {
209
348
 
210
349
  return this.getDefaultOutput().getValue();
211
350
 
212
351
  }
213
352
 
353
+ /**
354
+ * Deletes a parameter from the script.
355
+ *
356
+ * @param {String} name - The parameter to remove.
357
+ * @return {ScriptableNode} A reference to this node.
358
+ */
214
359
  deleteParameter( name ) {
215
360
 
216
361
  let valueNode = this.parameters[ name ];
@@ -227,6 +372,11 @@ class ScriptableNode extends Node {
227
372
 
228
373
  }
229
374
 
375
+ /**
376
+ * Deletes all parameters from the script.
377
+ *
378
+ * @return {ScriptableNode} A reference to this node.
379
+ */
230
380
  clearParameters() {
231
381
 
232
382
  for ( const name of Object.keys( this.parameters ) ) {
@@ -241,6 +391,13 @@ class ScriptableNode extends Node {
241
391
 
242
392
  }
243
393
 
394
+ /**
395
+ * Calls a function from the script.
396
+ *
397
+ * @param {String} name - The function name.
398
+ * @param {...Any} params - A list of parameters.
399
+ * @return {Any} The result of the function call.
400
+ */
244
401
  call( name, ...params ) {
245
402
 
246
403
  const object = this.getObject();
@@ -254,6 +411,13 @@ class ScriptableNode extends Node {
254
411
 
255
412
  }
256
413
 
414
+ /**
415
+ * Asynchronously calls a function from the script.
416
+ *
417
+ * @param {String} name - The function name.
418
+ * @param {...Any} params - A list of parameters.
419
+ * @return {Promise<Any>} The result of the function call.
420
+ */
257
421
  async callAsync( name, ...params ) {
258
422
 
259
423
  const object = this.getObject();
@@ -267,12 +431,23 @@ class ScriptableNode extends Node {
267
431
 
268
432
  }
269
433
 
434
+ /**
435
+ * Overwritten since the node types is inferred from the script's output.
436
+ *
437
+ * @param {NodeBuilder} builder - The current node builder
438
+ * @return {String} The node type.
439
+ */
270
440
  getNodeType( builder ) {
271
441
 
272
442
  return this.getDefaultOutputNode().getNodeType( builder );
273
443
 
274
444
  }
275
445
 
446
+ /**
447
+ * Refreshes the script node.
448
+ *
449
+ * @param {String?} [output=null] - An optional output.
450
+ */
276
451
  refresh( output = null ) {
277
452
 
278
453
  if ( output !== null ) {
@@ -287,6 +462,11 @@ class ScriptableNode extends Node {
287
462
 
288
463
  }
289
464
 
465
+ /**
466
+ * Returns an object representation of the script.
467
+ *
468
+ * @return {Object} The result object.
469
+ */
290
470
  getObject() {
291
471
 
292
472
  if ( this.needsUpdate ) this.dispose();
@@ -302,7 +482,7 @@ class ScriptableNode extends Node {
302
482
  const THREE = ScriptableNodeResources.get( 'THREE' );
303
483
  const TSL = ScriptableNodeResources.get( 'TSL' );
304
484
 
305
- const method = this.getMethod( this.codeNode );
485
+ const method = this.getMethod();
306
486
  const params = [ parameters, this._local, ScriptableNodeResources, refresh, setOutput, THREE, TSL ];
307
487
 
308
488
  this._object = method( ...params );
@@ -368,12 +548,22 @@ class ScriptableNode extends Node {
368
548
 
369
549
  }
370
550
 
551
+ /**
552
+ * Returns the layout of the script.
553
+ *
554
+ * @return {Object} The script's layout.
555
+ */
371
556
  getLayout() {
372
557
 
373
558
  return this.getObject().layout;
374
559
 
375
560
  }
376
561
 
562
+ /**
563
+ * Returns default node output of the script.
564
+ *
565
+ * @return {Node} The default node output.
566
+ */
377
567
  getDefaultOutputNode() {
378
568
 
379
569
  const output = this.getDefaultOutput().value;
@@ -388,12 +578,22 @@ class ScriptableNode extends Node {
388
578
 
389
579
  }
390
580
 
581
+ /**
582
+ * Returns default output of the script.
583
+ *
584
+ * @return {ScriptableValueNode} The default output.
585
+ */
391
586
  getDefaultOutput() {
392
587
 
393
588
  return this._exec()._output;
394
589
 
395
590
  }
396
591
 
592
+ /**
593
+ * Returns a function created from the node's script.
594
+ *
595
+ * @return {Function} The function representing the node's code.
596
+ */
397
597
  getMethod() {
398
598
 
399
599
  if ( this.needsUpdate ) this.dispose();
@@ -418,6 +618,9 @@ class ScriptableNode extends Node {
418
618
 
419
619
  }
420
620
 
621
+ /**
622
+ * Frees all internal resources.
623
+ */
421
624
  dispose() {
422
625
 
423
626
  if ( this._method === null ) return;
@@ -470,6 +673,12 @@ class ScriptableNode extends Node {
470
673
 
471
674
  }
472
675
 
676
+ /**
677
+ * Executes the `main` function of the script.
678
+ *
679
+ * @private
680
+ * @return {ScriptableNode} A reference to this node.
681
+ */
473
682
  _exec() {
474
683
 
475
684
  if ( this.codeNode === null ) return this;
@@ -488,6 +697,11 @@ class ScriptableNode extends Node {
488
697
 
489
698
  }
490
699
 
700
+ /**
701
+ * Executes the refresh.
702
+ *
703
+ * @private
704
+ */
491
705
  _refresh() {
492
706
 
493
707
  this.needsUpdate = true;
@@ -502,4 +716,12 @@ class ScriptableNode extends Node {
502
716
 
503
717
  export default ScriptableNode;
504
718
 
719
+ /**
720
+ * TSL function for creating a scriptable node.
721
+ *
722
+ * @function
723
+ * @param {CodeNode?} [codeNode=null] - The code node.
724
+ * @param {Object} [parameters={}] - The parameters definition.
725
+ * @returns {ScriptableNode}
726
+ */
505
727
  export const scriptable = /*@__PURE__*/ nodeProxy( ScriptableNode );
@@ -4,6 +4,13 @@ import { nodeProxy, float } from '../tsl/TSLBase.js';
4
4
 
5
5
  import { EventDispatcher } from '../../core/EventDispatcher.js';
6
6
 
7
+ /** @module ScriptableValueNode **/
8
+
9
+ /**
10
+ * `ScriptableNode` uses this class to manage script inputs and outputs.
11
+ *
12
+ * @augments Node
13
+ */
7
14
  class ScriptableValueNode extends Node {
8
15
 
9
16
  static get type() {
@@ -12,22 +19,72 @@ class ScriptableValueNode extends Node {
12
19
 
13
20
  }
14
21
 
22
+ /**
23
+ * Constructs a new scriptable node.
24
+ *
25
+ * @param {Any} [value=null] - The value.
26
+ */
15
27
  constructor( value = null ) {
16
28
 
17
29
  super();
18
30
 
31
+ /**
32
+ * A reference to the value.
33
+ *
34
+ * @private
35
+ * @default null
36
+ */
19
37
  this._value = value;
38
+
39
+ /**
40
+ * Depending on the type of `_value`, this property might cache parsed data.
41
+ *
42
+ * @private
43
+ * @default null
44
+ */
20
45
  this._cache = null;
21
46
 
47
+ /**
48
+ * If this node represents an input, this property represents the input type.
49
+ *
50
+ * @type {String?}
51
+ * @default null
52
+ */
22
53
  this.inputType = null;
23
- this.outpuType = null;
24
54
 
55
+ /**
56
+ * If this node represents an output, this property represents the output type.
57
+ *
58
+ * @type {String?}
59
+ * @default null
60
+ */
61
+ this.outputType = null;
62
+
63
+ /**
64
+ * An event dispatcher for managing events.
65
+ *
66
+ * @type {EventDispatcher}
67
+ */
25
68
  this.events = new EventDispatcher();
26
69
 
70
+ /**
71
+ * This flag can be used for type testing.
72
+ *
73
+ * @type {Boolean}
74
+ * @readonly
75
+ * @default true
76
+ */
27
77
  this.isScriptableValueNode = true;
28
78
 
29
79
  }
30
80
 
81
+ /**
82
+ * Whether this node represents an output or not.
83
+ *
84
+ * @type {Boolean}
85
+ * @readonly
86
+ * @default true
87
+ */
31
88
  get isScriptableOutputNode() {
32
89
 
33
90
  return this.outputType !== null;
@@ -54,18 +111,32 @@ class ScriptableValueNode extends Node {
54
111
 
55
112
  }
56
113
 
114
+ /**
115
+ * The node's value.
116
+ *
117
+ * @type {Any}
118
+ */
57
119
  get value() {
58
120
 
59
121
  return this._value;
60
122
 
61
123
  }
62
124
 
125
+ /**
126
+ * Dispatches the `refresh` event.
127
+ */
63
128
  refresh() {
64
129
 
65
130
  this.events.dispatchEvent( { type: 'refresh' } );
66
131
 
67
132
  }
68
133
 
134
+ /**
135
+ * The `value` property usually represents a node or even binary data in form of array buffers.
136
+ * In this case, this method tries to return the actual value behind the complex type.
137
+ *
138
+ * @return {Any} The value.
139
+ */
69
140
  getValue() {
70
141
 
71
142
  const value = this.value;
@@ -93,6 +164,12 @@ class ScriptableValueNode extends Node {
93
164
 
94
165
  }
95
166
 
167
+ /**
168
+ * Overwritten since the node type is inferred from the value.
169
+ *
170
+ * @param {NodeBuilder} builder - The current node builder.
171
+ * @return {String} The node type.
172
+ */
96
173
  getNodeType( builder ) {
97
174
 
98
175
  return this.value && this.value.isNode ? this.value.getNodeType( builder ) : 'float';
@@ -167,4 +244,11 @@ class ScriptableValueNode extends Node {
167
244
 
168
245
  export default ScriptableValueNode;
169
246
 
247
+ /**
248
+ * TSL function for creating a scriptable value node.
249
+ *
250
+ * @function
251
+ * @param {Any} [value=null] - The value.
252
+ * @returns {ScriptableValueNode}
253
+ */
170
254
  export const scriptableValue = /*@__PURE__*/ nodeProxy( ScriptableValueNode );
@@ -0,0 +1,125 @@
1
+ import TempNode from './TempNode.js';
2
+ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
3
+
4
+ /** @module ArrayNode **/
5
+
6
+ /**
7
+ * ArrayNode represents a collection of nodes, typically created using the {@link module:TSL~array} function.
8
+ * ```js
9
+ * const colors = array( [
10
+ * vec3( 1, 0, 0 ),
11
+ * vec3( 0, 1, 0 ),
12
+ * vec3( 0, 0, 1 )
13
+ * ] );
14
+ *
15
+ * const redColor = tintColors.element( 0 );
16
+ *
17
+ * @augments Node
18
+ */
19
+ class ArrayNode extends TempNode {
20
+
21
+ static get type() {
22
+
23
+ return 'ArrayNode';
24
+
25
+ }
26
+
27
+ /**
28
+ * Constructs a new array node.
29
+ *
30
+ * @param {String} [nodeType] - The data type of the elements.
31
+ * @param {Number} [count] - Size of the array.
32
+ * @param {Array<Node>?} [values=null] - Array default values.
33
+ */
34
+ constructor( nodeType, count, values = null ) {
35
+
36
+ super( nodeType );
37
+
38
+ /**
39
+ * Array size.
40
+ *
41
+ * @type {Array<Node>}
42
+ */
43
+ this.count = count;
44
+
45
+ /**
46
+ * Array default values.
47
+ *
48
+ * @type {Array<Node>}
49
+ */
50
+ this.values = values;
51
+
52
+ /**
53
+ * This flag can be used for type testing.
54
+ *
55
+ * @type {Boolean}
56
+ * @readonly
57
+ * @default true
58
+ */
59
+ this.isArrayNode = true;
60
+
61
+ }
62
+
63
+ getNodeType( builder ) {
64
+
65
+ if ( this.nodeType === null ) {
66
+
67
+ this.nodeType = this.values[ 0 ].getNodeType( builder );
68
+
69
+ }
70
+
71
+ return this.nodeType;
72
+
73
+ }
74
+
75
+ getElementType( builder ) {
76
+
77
+ return this.getNodeType( builder );
78
+
79
+ }
80
+
81
+ generate( builder ) {
82
+
83
+ const type = this.getNodeType( builder );
84
+
85
+ return builder.generateArray( type, this.count, this.values );
86
+
87
+ }
88
+
89
+ }
90
+
91
+ export default ArrayNode;
92
+
93
+ /**
94
+ * TSL function for creating an array node.
95
+ *
96
+ * @function
97
+ * @param {String|Array<Node>} nodeTypeOrValues - A string representing the element type (e.g., 'vec3')
98
+ * or an array containing the default values (e.g., [ vec3() ]).
99
+ * @param {Number?} [count] - Size of the array.
100
+ * @returns {ArrayNode}
101
+ */
102
+ export const array = ( ...params ) => {
103
+
104
+ let node;
105
+
106
+ if ( params.length === 1 ) {
107
+
108
+ const values = params[ 0 ];
109
+
110
+ node = new ArrayNode( null, values.length, values );
111
+
112
+ } else {
113
+
114
+ const nodeType = params[ 0 ];
115
+ const count = params[ 1 ];
116
+
117
+ node = new ArrayNode( nodeType, count );
118
+
119
+ }
120
+
121
+ return nodeObject( node );
122
+
123
+ };
124
+
125
+ addMethodChaining( 'toArray', ( node, count ) => array( Array( count ).fill( node ) ) );