super-three 0.171.0 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -3,7 +3,7 @@
3
3
 
4
4
  export * from './TSLCore.js'; // float(), vec2(), vec3(), vec4(), mat3(), mat4(), Fn(), If(), element(), nodeObject(), nodeProxy(), ...
5
5
  export * from '../core/UniformNode.js'; // uniform()
6
- export * from '../core/PropertyNode.js'; // property() <-> TODO: Seperate Material Properties in other file
6
+ export * from '../core/PropertyNode.js'; // property() <-> TODO: Separate Material Properties in other file
7
7
  export * from '../core/AssignNode.js'; // .assign()
8
8
  export * from '../code/FunctionCallNode.js'; // .call()
9
9
  export * from '../math/OperatorNode.js'; // .add(), .sub(), ...
@@ -11,7 +11,7 @@ export * from '../math/MathNode.js'; // abs(), floor(), ...
11
11
  export * from '../math/ConditionalNode.js'; // select(), ...
12
12
  export * from '../core/ContextNode.js'; // .context()
13
13
  export * from '../core/VarNode.js'; // .var() -> TODO: Maybe rename .toVar() -> .var()
14
- export * from '../core/VaryingNode.js'; // varying() -> TODO: Add vertexStage()
14
+ export * from '../core/VaryingNode.js'; // varying(), vertexStage()
15
15
  export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
16
16
  export * from '../display/ToneMappingNode.js'; // .toToneMapping()
17
17
  export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
@@ -1,24 +1,60 @@
1
1
  import Node from '../core/Node.js';
2
2
 
3
- class ArrayElementNode extends Node {
3
+ /**
4
+ * Base class for representing element access on an array-like
5
+ * node data structures.
6
+ *
7
+ * @augments Node
8
+ */
9
+ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
4
10
 
5
11
  static get type() {
6
12
 
7
13
  return 'ArrayElementNode';
8
14
 
9
- } // @TODO: If extending from TempNode it breaks webgpu_compute
15
+ }
10
16
 
17
+ /**
18
+ * Constructs an array element node.
19
+ *
20
+ * @param {Node} node - The array-like node.
21
+ * @param {Node} indexNode - The index node that defines the element access.
22
+ */
11
23
  constructor( node, indexNode ) {
12
24
 
13
25
  super();
14
26
 
27
+ /**
28
+ * The array-like node.
29
+ *
30
+ * @type {Node}
31
+ */
15
32
  this.node = node;
33
+
34
+ /**
35
+ * The index node that defines the element access.
36
+ *
37
+ * @type {Node}
38
+ */
16
39
  this.indexNode = indexNode;
17
40
 
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {Boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
18
48
  this.isArrayElementNode = true;
19
49
 
20
50
  }
21
51
 
52
+ /**
53
+ * This method is overwritten since the node type is inferred from the array-like node.
54
+ *
55
+ * @param {NodeBuilder} builder - The current node builder.
56
+ * @return {String} The node type.
57
+ */
22
58
  getNodeType( builder ) {
23
59
 
24
60
  return this.node.getElementType( builder );
@@ -1,5 +1,12 @@
1
1
  import Node from '../core/Node.js';
2
2
 
3
+ /**
4
+ * This module is part of the TSL core and usually not used in app level code.
5
+ * It represents a convert operation during the shader generation process
6
+ * meaning it converts the data type of a node to a target data type.
7
+ *
8
+ * @augments Node
9
+ */
3
10
  class ConvertNode extends Node {
4
11
 
5
12
  static get type() {
@@ -8,15 +15,39 @@ class ConvertNode extends Node {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new convert node.
20
+ *
21
+ * @param {Node} node - The node which type should be converted.
22
+ * @param {String} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
23
+ */
11
24
  constructor( node, convertTo ) {
12
25
 
13
26
  super();
14
27
 
28
+ /**
29
+ * The node which type should be converted.
30
+ *
31
+ * @type {Node}
32
+ */
15
33
  this.node = node;
34
+
35
+ /**
36
+ * The target node type. Multiple types can be defined by separating them with a `|` sign.
37
+ *
38
+ * @type {String}
39
+ */
16
40
  this.convertTo = convertTo;
17
41
 
18
42
  }
19
43
 
44
+ /**
45
+ * This method is overwritten since the implementation tries to infer the best
46
+ * matching type from the {@link ConvertNode#convertTo} property.
47
+ *
48
+ * @param {NodeBuilder} builder - The current node builder.
49
+ * @return {String} The node type.
50
+ */
20
51
  getNodeType( builder ) {
21
52
 
22
53
  const requestType = this.node.getNodeType( builder );
@@ -6,8 +6,16 @@ import { cubeTexture } from '../accessors/CubeTextureNode.js';
6
6
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
7
7
  import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
8
8
 
9
+ /** @module CubeMapNode **/
10
+
9
11
  const _cache = new WeakMap();
10
12
 
13
+ /**
14
+ * This node can be used to automatically convert environment maps in the
15
+ * equirectangular format into the cube map format.
16
+ *
17
+ * @augments TempNode
18
+ */
11
19
  class CubeMapNode extends TempNode {
12
20
 
13
21
  static get type() {
@@ -16,20 +24,59 @@ class CubeMapNode extends TempNode {
16
24
 
17
25
  }
18
26
 
27
+ /**
28
+ * Constructs a new cube map node.
29
+ *
30
+ * @param {Node} envNode - The node representing the environment map.
31
+ */
19
32
  constructor( envNode ) {
20
33
 
21
34
  super( 'vec3' );
22
35
 
36
+ /**
37
+ * The node representing the environment map.
38
+ *
39
+ * @type {Node}
40
+ */
23
41
  this.envNode = envNode;
24
42
 
43
+ /**
44
+ * A reference to the internal cube texture.
45
+ *
46
+ * @private
47
+ * @type {CubeTexture}
48
+ * @default null
49
+ */
25
50
  this._cubeTexture = null;
51
+
52
+ /**
53
+ * A reference to the internal cube texture node.
54
+ *
55
+ * @private
56
+ * @type {CubeTextureNode}
57
+ */
26
58
  this._cubeTextureNode = cubeTexture();
27
59
 
28
60
  const defaultTexture = new CubeTexture();
29
61
  defaultTexture.isRenderTargetTexture = true;
30
62
 
63
+ /**
64
+ * A default cube texture that acts as a placeholder.
65
+ * It is used when the conversion from equirectangular to cube
66
+ * map has not finished yet for a given texture.
67
+ *
68
+ * @private
69
+ * @type {CubeTexture}
70
+ */
31
71
  this._defaultTexture = defaultTexture;
32
72
 
73
+ /**
74
+ * The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
75
+ * the texture once per render in its {@link CubeMapNode#updateBefore} method.
76
+ *
77
+ * @type {String}
78
+ * @default 'render'
79
+ */
33
80
  this.updateBeforeType = NodeUpdateType.RENDER;
34
81
 
35
82
  }
@@ -117,6 +164,14 @@ class CubeMapNode extends TempNode {
117
164
 
118
165
  export default CubeMapNode;
119
166
 
167
+ /**
168
+ * Returns true if the given equirectangular image has been fully loaded
169
+ * and is ready for further processing.
170
+ *
171
+ * @private
172
+ * @param {Image} image - The equirectangular image to check.
173
+ * @return {Boolean} Whether the image is ready or not.
174
+ */
120
175
  function isEquirectangularMapReady( image ) {
121
176
 
122
177
  if ( image === null || image === undefined ) return false;
@@ -125,6 +180,14 @@ function isEquirectangularMapReady( image ) {
125
180
 
126
181
  }
127
182
 
183
+ /**
184
+ * This function is executed when `dispose()` is called on the equirectangular
185
+ * texture. In this case, the generated cube map with its render target
186
+ * is deleted as well.
187
+ *
188
+ * @private
189
+ * @param {Object} event - The event object.
190
+ */
128
191
  function onTextureDispose( event ) {
129
192
 
130
193
  const texture = event.target;
@@ -143,6 +206,14 @@ function onTextureDispose( event ) {
143
206
 
144
207
  }
145
208
 
209
+ /**
210
+ * This function makes sure the generated cube map uses the correct
211
+ * texture mapping that corresponds to the equirectangular original.
212
+ *
213
+ * @private
214
+ * @param {Texture} texture - The cube texture.
215
+ * @param {Number} mapping - The original texture mapping.
216
+ */
146
217
  function mapTextureMapping( texture, mapping ) {
147
218
 
148
219
  if ( mapping === EquirectangularReflectionMapping ) {
@@ -157,4 +228,11 @@ function mapTextureMapping( texture, mapping ) {
157
228
 
158
229
  }
159
230
 
231
+ /**
232
+ * TSL function for creating a cube map node.
233
+ *
234
+ * @function
235
+ * @param {Node} envNode - The node representing the environment map.
236
+ * @returns {CubeMapNode}
237
+ */
160
238
  export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
@@ -2,7 +2,23 @@ import { select } from '../math/ConditionalNode.js';
2
2
  import { expression } from '../code/ExpressionNode.js';
3
3
  import { addMethodChaining } from '../tsl/TSLCore.js';
4
4
 
5
+ /** @module Discard **/
6
+
7
+ /**
8
+ * Represents a `discard` shader operation in TSL.
9
+ *
10
+ * @method
11
+ * @param {ConditionalNode?} conditional - An optional conditional node. It allows to decide whether the discard should be executed or not.
12
+ * @return {Node} The `discard` expression.
13
+ */
5
14
  export const Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).append();
15
+
16
+ /**
17
+ * Represents a `return` shader operation in TSL.
18
+ *
19
+ * @method
20
+ * @return {ExpressionNode} The `return` expression.
21
+ */
6
22
  export const Return = () => expression( 'return' ).append();
7
23
 
8
24
  addMethodChaining( 'discard', Discard );
@@ -2,6 +2,19 @@ import TempNode from '../core/TempNode.js';
2
2
  import { positionWorldDirection } from '../accessors/Position.js';
3
3
  import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module EquirectUVNode **/
6
+
7
+ /**
8
+ * Can be used to compute texture coordinates for projecting an
9
+ * equirectangular texture onto a mesh for using it as the scene's
10
+ * background.
11
+ *
12
+ * ```js
13
+ * scene.backgroundNode = texture( equirectTexture, equirectUV() );
14
+ * ```
15
+ *
16
+ * @augments TempNode
17
+ */
5
18
  class EquirectUVNode extends TempNode {
6
19
 
7
20
  static get type() {
@@ -10,10 +23,20 @@ class EquirectUVNode extends TempNode {
10
23
 
11
24
  }
12
25
 
26
+ /**
27
+ * Constructs a new equirect uv node.
28
+ *
29
+ * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
30
+ */
13
31
  constructor( dirNode = positionWorldDirection ) {
14
32
 
15
33
  super( 'vec2' );
16
34
 
35
+ /**
36
+ * A direction vector for sampling why is by default `positionWorldDirection`.
37
+ *
38
+ * @type {Node<vec3>}
39
+ */
17
40
  this.dirNode = dirNode;
18
41
 
19
42
  }
@@ -22,7 +45,7 @@ class EquirectUVNode extends TempNode {
22
45
 
23
46
  const dir = this.dirNode;
24
47
 
25
- const u = dir.z.atan2( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
48
+ const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
26
49
  const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
27
50
 
28
51
  return vec2( u, v );
@@ -33,4 +56,11 @@ class EquirectUVNode extends TempNode {
33
56
 
34
57
  export default EquirectUVNode;
35
58
 
59
+ /**
60
+ * TSL function for creating an equirect uv node.
61
+ *
62
+ * @function
63
+ * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
64
+ * @returns {EquirectUVNode}
65
+ */
36
66
  export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
@@ -1,6 +1,21 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { vectorComponents } from '../core/constants.js';
3
3
 
4
+ /**
5
+ * This module is part of the TSL core and usually not used in app level code.
6
+ * It represents a flip operation during the shader generation process
7
+ * meaning it flips normalized values with the following formula:
8
+ * ```
9
+ * x = 1 - x;
10
+ * ```
11
+ * `FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and
12
+ * `flipSTPQ()` method invocations on node objects. For example:
13
+ * ```js
14
+ * uvNode = uvNode.flipY();
15
+ * ```
16
+ *
17
+ * @augments TempNode
18
+ */
4
19
  class FlipNode extends TempNode {
5
20
 
6
21
  static get type() {
@@ -9,15 +24,38 @@ class FlipNode extends TempNode {
9
24
 
10
25
  }
11
26
 
27
+ /**
28
+ * Constructs a new flip node.
29
+ *
30
+ * @param {Node} sourceNode - The node which component(s) should be flipped.
31
+ * @param {String} components - The components that should be flipped e.g. `'x'` or `'xy'`.
32
+ */
12
33
  constructor( sourceNode, components ) {
13
34
 
14
35
  super();
15
36
 
37
+ /**
38
+ * The node which component(s) should be flipped.
39
+ *
40
+ * @type {Node}
41
+ */
16
42
  this.sourceNode = sourceNode;
43
+
44
+ /**
45
+ * The components that should be flipped e.g. `'x'` or `'xy'`.
46
+ *
47
+ * @type {String}
48
+ */
17
49
  this.components = components;
18
50
 
19
51
  }
20
52
 
53
+ /**
54
+ * This method is overwritten since the node type is inferred from the source node.
55
+ *
56
+ * @param {NodeBuilder} builder - The current node builder.
57
+ * @return {String} The node type.
58
+ */
21
59
  getNodeType( builder ) {
22
60
 
23
61
  return this.sourceNode.getNodeType( builder );
@@ -1,6 +1,15 @@
1
1
  import Node from '../core/Node.js';
2
- import { nodeProxy } from '../tsl/TSLBase.js';
2
+ import { nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module FunctionOverloadingNode **/
5
+
6
+ /**
7
+ * This class allows to define multiple overloaded versions
8
+ * of the same function. Depending on the parameters of the function
9
+ * call, the node picks the best-fit overloaded version.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class FunctionOverloadingNode extends Node {
5
14
 
6
15
  static get type() {
@@ -9,19 +18,55 @@ class FunctionOverloadingNode extends Node {
9
18
 
10
19
  }
11
20
 
21
+ /**
22
+ * Constructs a new function overloading node.
23
+ *
24
+ * @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
25
+ * @param {...Node} parametersNodes - A list of parameter nodes.
26
+ */
12
27
  constructor( functionNodes = [], ...parametersNodes ) {
13
28
 
14
29
  super();
15
30
 
31
+ /**
32
+ * Array of `Fn` function definitions.
33
+ *
34
+ * @type {Array<Function>}
35
+ */
16
36
  this.functionNodes = functionNodes;
37
+
38
+ /**
39
+ * A list of parameter nodes.
40
+ *
41
+ * @type {Array<Node>}
42
+ */
17
43
  this.parametersNodes = parametersNodes;
18
44
 
45
+ /**
46
+ * The selected overloaded function call.
47
+ *
48
+ * @private
49
+ * @type {ShaderCallNodeInternal}
50
+ */
19
51
  this._candidateFnCall = null;
20
52
 
53
+ /**
54
+ * This node is marked as global.
55
+ *
56
+ * @type {Boolean}
57
+ * @default true
58
+ */
21
59
  this.global = true;
22
60
 
23
61
  }
24
62
 
63
+ /**
64
+ * This method is overwritten since the node type is inferred from
65
+ * the function's return type.
66
+ *
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ * @return {String} The node type.
69
+ */
25
70
  getNodeType() {
26
71
 
27
72
  return this.functionNodes[ 0 ].shaderNode.layout.type;
@@ -98,4 +143,11 @@ export default FunctionOverloadingNode;
98
143
 
99
144
  const overloadingBaseFn = /*@__PURE__*/ nodeProxy( FunctionOverloadingNode );
100
145
 
146
+ /**
147
+ * TSL function for creating a function overloading node.
148
+ *
149
+ * @function
150
+ * @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
151
+ * @returns {FunctionOverloadingNode}
152
+ */
101
153
  export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
@@ -1,5 +1,12 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
 
3
+ /**
4
+ * This module is part of the TSL core and usually not used in app level code.
5
+ * It represents a join operation during the shader generation process.
6
+ * For example in can compose/join two single floats into a `vec2` type.
7
+ *
8
+ * @augments TempNode
9
+ */
3
10
  class JoinNode extends TempNode {
4
11
 
5
12
  static get type() {
@@ -8,14 +15,32 @@ class JoinNode extends TempNode {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new join node.
20
+ *
21
+ * @param {Array<Node>} nodes - An array of nodes that should be joined.
22
+ * @param {String?} [nodeType=null] - The node type.
23
+ */
11
24
  constructor( nodes = [], nodeType = null ) {
12
25
 
13
26
  super( nodeType );
14
27
 
28
+ /**
29
+ * An array of nodes that should be joined.
30
+ *
31
+ * @type {Array<Node>}
32
+ */
15
33
  this.nodes = nodes;
16
34
 
17
35
  }
18
36
 
37
+ /**
38
+ * This method is overwritten since the node type must be inferred from the
39
+ * joined data length if not explicitly defined.
40
+ *
41
+ * @param {NodeBuilder} builder - The current node builder.
42
+ * @return {String} The node type.
43
+ */
19
44
  getNodeType( builder ) {
20
45
 
21
46
  if ( this.nodeType !== null ) {
@@ -2,6 +2,34 @@ import Node from '../core/Node.js';
2
2
  import { expression } from '../code/ExpressionNode.js';
3
3
  import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module LoopNode **/
6
+
7
+ /**
8
+ * This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
9
+ * ```js
10
+ * Loop( count, ( { i } ) => {
11
+ *
12
+ * } );
13
+ * ```
14
+ * However, it is also possible to define a start and end ranges, data types and loop conditions:
15
+ * ```js
16
+ * Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<' }, ( { i } ) => {
17
+ *
18
+ * } );
19
+ *```
20
+ * Nested loops can be defined in a compacted form:
21
+ * ```js
22
+ * Loop( 10, 5, ( { i, j } ) => {
23
+ *
24
+ * } );
25
+ * ```
26
+ * Loops that should run backwards can be defined like so:
27
+ * ```js
28
+ * Loop( { start: 10 }, () => {} );
29
+ * ```
30
+ * The module also provides `Break()` and `Continue()` TSL expression for loop control.
31
+ * @augments Node
32
+ */
5
33
  class LoopNode extends Node {
6
34
 
7
35
  static get type() {
@@ -10,6 +38,11 @@ class LoopNode extends Node {
10
38
 
11
39
  }
12
40
 
41
+ /**
42
+ * Constructs a new loop node.
43
+ *
44
+ * @param {Array<Any>} params - Depending on the loop type, array holds different parameterization values for the loop.
45
+ */
13
46
  constructor( params = [] ) {
14
47
 
15
48
  super();
@@ -18,12 +51,25 @@ class LoopNode extends Node {
18
51
 
19
52
  }
20
53
 
54
+ /**
55
+ * Returns a loop variable name based on an index. The pattern is
56
+ * `0` = `i`, `1`= `j`, `2`= `k` and so on.
57
+ *
58
+ * @param {Number} index - The index.
59
+ * @return {String} The loop variable name.
60
+ */
21
61
  getVarName( index ) {
22
62
 
23
- return String.fromCharCode( 'i'.charCodeAt() + index );
63
+ return String.fromCharCode( 'i'.charCodeAt( 0 ) + index );
24
64
 
25
65
  }
26
66
 
67
+ /**
68
+ * Returns properties about this node.
69
+ *
70
+ * @param {NodeBuilder} builder - The current node builder.
71
+ * @return {Object} The node properties.
72
+ */
27
73
  getProperties( builder ) {
28
74
 
29
75
  const properties = builder.getNodeProperties( this );
@@ -56,6 +102,12 @@ class LoopNode extends Node {
56
102
 
57
103
  }
58
104
 
105
+ /**
106
+ * This method is overwritten since the node type is inferred based on the loop configuration.
107
+ *
108
+ * @param {NodeBuilder} builder - The current node builder.
109
+ * @return {String} The node type.
110
+ */
59
111
  getNodeType( builder ) {
60
112
 
61
113
  const { returnsNode } = this.getProperties( builder );
@@ -197,8 +249,29 @@ class LoopNode extends Node {
197
249
 
198
250
  export default LoopNode;
199
251
 
252
+ /**
253
+ * TSL function for creating a loop node.
254
+ *
255
+ * @function
256
+ * @param {...Any} params - A list of parameters.
257
+ * @returns {LoopNode}
258
+ */
200
259
  export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).append();
260
+
261
+ /**
262
+ * TSL function for creating a `Continue()` expression.
263
+ *
264
+ * @function
265
+ * @returns {ExpressionNode}
266
+ */
201
267
  export const Continue = () => expression( 'continue' ).append();
268
+
269
+ /**
270
+ * TSL function for creating a `Break()` expression.
271
+ *
272
+ * @function
273
+ * @returns {ExpressionNode}
274
+ */
202
275
  export const Break = () => expression( 'break' ).append();
203
276
 
204
277
  //
@@ -3,6 +3,14 @@ import { transformedNormalView } from '../accessors/Normal.js';
3
3
  import { positionViewDirection } from '../accessors/Position.js';
4
4
  import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
5
5
 
6
+ /** @module MatcapUVNode **/
7
+
8
+ /**
9
+ * Can be used to compute texture coordinates for projecting a
10
+ * matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
11
+ *
12
+ * @augments TempNode
13
+ */
6
14
  class MatcapUVNode extends TempNode {
7
15
 
8
16
  static get type() {
@@ -11,6 +19,9 @@ class MatcapUVNode extends TempNode {
11
19
 
12
20
  }
13
21
 
22
+ /**
23
+ * Constructs a new matcap uv node.
24
+ */
14
25
  constructor() {
15
26
 
16
27
  super( 'vec2' );
@@ -30,4 +41,10 @@ class MatcapUVNode extends TempNode {
30
41
 
31
42
  export default MatcapUVNode;
32
43
 
44
+ /**
45
+ * TSL function for creating a matcap uv node.
46
+ *
47
+ * @function
48
+ * @returns {MatcapUVNode}
49
+ */
33
50
  export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );