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
@@ -1,7 +1,20 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { sub, mul, div } from './OperatorNode.js';
3
3
  import { addMethodChaining, nodeObject, nodeProxy, float, vec2, vec3, vec4, Fn } from '../tsl/TSLCore.js';
4
-
4
+ import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../../constants.js';
5
+
6
+ /** @module MathNode **/
7
+
8
+ /**
9
+ * This node represents a variety of mathematical methods available in shaders.
10
+ * They are divided into three categories:
11
+ *
12
+ * - Methods with one input like `sin`, `cos` or `normalize`.
13
+ * - Methods with two inputs like `dot`, `cross` or `pow`.
14
+ * - Methods with three inputs like `mix`, `clamp` or `smoothstep`.
15
+ *
16
+ * @augments TempNode
17
+ */
5
18
  class MathNode extends TempNode {
6
19
 
7
20
  static get type() {
@@ -10,18 +23,65 @@ class MathNode extends TempNode {
10
23
 
11
24
  }
12
25
 
26
+ /**
27
+ * Constructs a new math node.
28
+ *
29
+ * @param {String} method - The method name.
30
+ * @param {Node} aNode - The first input.
31
+ * @param {Node?} [bNode=null] - The second input.
32
+ * @param {Node?} [cNode=null] - The third input.
33
+ */
13
34
  constructor( method, aNode, bNode = null, cNode = null ) {
14
35
 
15
36
  super();
16
37
 
38
+ /**
39
+ * The method name.
40
+ *
41
+ * @type {String}
42
+ */
17
43
  this.method = method;
18
44
 
45
+ /**
46
+ * The first input.
47
+ *
48
+ * @type {Node}
49
+ */
19
50
  this.aNode = aNode;
51
+
52
+ /**
53
+ * The second input.
54
+ *
55
+ * @type {Node?}
56
+ * @default null
57
+ */
20
58
  this.bNode = bNode;
59
+
60
+ /**
61
+ * The third input.
62
+ *
63
+ * @type {Node?}
64
+ * @default null
65
+ */
21
66
  this.cNode = cNode;
22
67
 
68
+ /**
69
+ * This flag can be used for type testing.
70
+ *
71
+ * @type {Boolean}
72
+ * @readonly
73
+ * @default true
74
+ */
75
+ this.isMathNode = true;
76
+
23
77
  }
24
78
 
79
+ /**
80
+ * The input type is inferred from the node types of the input nodes.
81
+ *
82
+ * @param {NodeBuilder} builder - The current node builder.
83
+ * @return {String} The input type.
84
+ */
25
85
  getInputType( builder ) {
26
86
 
27
87
  const aType = this.aNode.getNodeType( builder );
@@ -50,6 +110,12 @@ class MathNode extends TempNode {
50
110
 
51
111
  }
52
112
 
113
+ /**
114
+ * The selected method as well as the input type determine the node type of this node.
115
+ *
116
+ * @param {NodeBuilder} builder - The current node builder.
117
+ * @return {String} The node type.
118
+ */
53
119
  getNodeType( builder ) {
54
120
 
55
121
  const method = this.method;
@@ -84,7 +150,7 @@ class MathNode extends TempNode {
84
150
 
85
151
  generate( builder, output ) {
86
152
 
87
- const method = this.method;
153
+ let method = this.method;
88
154
 
89
155
  const type = this.getNodeType( builder );
90
156
  const inputType = this.getInputType( builder );
@@ -93,7 +159,7 @@ class MathNode extends TempNode {
93
159
  const b = this.bNode;
94
160
  const c = this.cNode;
95
161
 
96
- const isWebGL = builder.renderer.isWebGLRenderer === true;
162
+ const coordinateSystem = builder.renderer.coordinateSystem;
97
163
 
98
164
  if ( method === MathNode.TRANSFORM_DIRECTION ) {
99
165
 
@@ -144,14 +210,14 @@ class MathNode extends TempNode {
144
210
  b.build( builder, type )
145
211
  );
146
212
 
147
- } else if ( isWebGL && method === MathNode.STEP ) {
213
+ } else if ( coordinateSystem === WebGLCoordinateSystem && method === MathNode.STEP ) {
148
214
 
149
215
  params.push(
150
216
  a.build( builder, builder.getTypeLength( a.getNodeType( builder ) ) === 1 ? 'float' : inputType ),
151
217
  b.build( builder, inputType )
152
218
  );
153
219
 
154
- } else if ( ( isWebGL && ( method === MathNode.MIN || method === MathNode.MAX ) ) || method === MathNode.MOD ) {
220
+ } else if ( ( coordinateSystem === WebGLCoordinateSystem && ( method === MathNode.MIN || method === MathNode.MAX ) ) || method === MathNode.MOD ) {
155
221
 
156
222
  params.push(
157
223
  a.build( builder, inputType ),
@@ -176,6 +242,12 @@ class MathNode extends TempNode {
176
242
 
177
243
  } else {
178
244
 
245
+ if ( coordinateSystem === WebGPUCoordinateSystem && method === MathNode.ATAN && b !== null ) {
246
+
247
+ method = 'atan2';
248
+
249
+ }
250
+
179
251
  params.push( a.build( builder, inputType ) );
180
252
  if ( b !== null ) params.push( b.build( builder, inputType ) );
181
253
  if ( c !== null ) params.push( c.build( builder, inputType ) );
@@ -210,7 +282,6 @@ class MathNode extends TempNode {
210
282
 
211
283
  MathNode.ALL = 'all';
212
284
  MathNode.ANY = 'any';
213
- MathNode.EQUALS = 'equals';
214
285
 
215
286
  MathNode.RADIANS = 'radians';
216
287
  MathNode.DEGREES = 'degrees';
@@ -241,12 +312,12 @@ MathNode.ROUND = 'round';
241
312
  MathNode.RECIPROCAL = 'reciprocal';
242
313
  MathNode.TRUNC = 'trunc';
243
314
  MathNode.FWIDTH = 'fwidth';
244
- MathNode.BITCAST = 'bitcast';
245
315
  MathNode.TRANSPOSE = 'transpose';
246
316
 
247
317
  // 2 inputs
248
318
 
249
- MathNode.ATAN2 = 'atan2';
319
+ MathNode.BITCAST = 'bitcast';
320
+ MathNode.EQUALS = 'equals';
250
321
  MathNode.MIN = 'min';
251
322
  MathNode.MAX = 'max';
252
323
  MathNode.MOD = 'mod';
@@ -269,72 +340,574 @@ MathNode.FACEFORWARD = 'faceforward';
269
340
 
270
341
  export default MathNode;
271
342
 
343
+ // 1 inputs
344
+
345
+ /**
346
+ * A small value used to handle floating-point precision errors.
347
+ *
348
+ * @type {Node<float>}
349
+ */
272
350
  export const EPSILON = /*@__PURE__*/ float( 1e-6 );
351
+
352
+ /**
353
+ * Represents infinity.
354
+ *
355
+ * @type {Node<float>}
356
+ */
273
357
  export const INFINITY = /*@__PURE__*/ float( 1e6 );
358
+
359
+ /**
360
+ * Represents PI.
361
+ *
362
+ * @type {Node<float>}
363
+ */
274
364
  export const PI = /*@__PURE__*/ float( Math.PI );
365
+
366
+ /**
367
+ * Represents PI * 2.
368
+ *
369
+ * @type {Node<float>}
370
+ */
275
371
  export const PI2 = /*@__PURE__*/ float( Math.PI * 2 );
276
372
 
373
+ /**
374
+ * Returns `true` if all components of `x` are `true`.
375
+ *
376
+ * @function
377
+ * @param {Node | Number} x - The parameter.
378
+ * @returns {Node<bool>}
379
+ */
277
380
  export const all = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ALL );
381
+
382
+ /**
383
+ * Returns `true` if any components of `x` are `true`.
384
+ *
385
+ * @function
386
+ * @param {Node | Number} x - The parameter.
387
+ * @returns {Node<bool>}
388
+ */
278
389
  export const any = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ANY );
279
- export const equals = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EQUALS );
280
390
 
391
+ /**
392
+ * Converts a quantity in degrees to radians.
393
+ *
394
+ * @function
395
+ * @param {Node | Number} x - The input in degrees.
396
+ * @returns {Node}
397
+ */
281
398
  export const radians = /*@__PURE__*/ nodeProxy( MathNode, MathNode.RADIANS );
399
+
400
+ /**
401
+ * Convert a quantity in radians to degrees.
402
+ *
403
+ * @function
404
+ * @param {Node | Number} x - The input in radians.
405
+ * @returns {Node}
406
+ */
282
407
  export const degrees = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DEGREES );
408
+
409
+ /**
410
+ * Returns the natural exponentiation of the parameter.
411
+ *
412
+ * @function
413
+ * @param {Node | Number} x - The parameter.
414
+ * @returns {Node}
415
+ */
283
416
  export const exp = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EXP );
417
+
418
+ /**
419
+ * Returns 2 raised to the power of the parameter.
420
+ *
421
+ * @function
422
+ * @param {Node | Number} x - The parameter.
423
+ * @returns {Node}
424
+ */
284
425
  export const exp2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EXP2 );
426
+
427
+ /**
428
+ * Returns the natural logarithm of the parameter.
429
+ *
430
+ * @function
431
+ * @param {Node | Number} x - The parameter.
432
+ * @returns {Node}
433
+ */
285
434
  export const log = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LOG );
435
+
436
+ /**
437
+ * Returns the base 2 logarithm of the parameter.
438
+ *
439
+ * @function
440
+ * @param {Node | Number} x - The parameter.
441
+ * @returns {Node}
442
+ */
286
443
  export const log2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LOG2 );
444
+
445
+ /**
446
+ * Returns the square root of the parameter.
447
+ *
448
+ * @function
449
+ * @param {Node | Number} x - The parameter.
450
+ * @returns {Node}
451
+ */
287
452
  export const sqrt = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SQRT );
453
+
454
+ /**
455
+ * Returns the inverse of the square root of the parameter.
456
+ *
457
+ * @function
458
+ * @param {Node | Number} x - The parameter.
459
+ * @returns {Node}
460
+ */
288
461
  export const inverseSqrt = /*@__PURE__*/ nodeProxy( MathNode, MathNode.INVERSE_SQRT );
462
+
463
+ /**
464
+ * Finds the nearest integer less than or equal to the parameter.
465
+ *
466
+ * @function
467
+ * @param {Node | Number} x - The parameter.
468
+ * @returns {Node}
469
+ */
289
470
  export const floor = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FLOOR );
471
+
472
+ /**
473
+ * Finds the nearest integer that is greater than or equal to the parameter.
474
+ *
475
+ * @function
476
+ * @param {Node | Number} x - The parameter.
477
+ * @returns {Node}
478
+ */
290
479
  export const ceil = /*@__PURE__*/ nodeProxy( MathNode, MathNode.CEIL );
480
+
481
+ /**
482
+ * Calculates the unit vector in the same direction as the original vector.
483
+ *
484
+ * @function
485
+ * @param {Node} x - The input vector.
486
+ * @returns {Node}
487
+ */
291
488
  export const normalize = /*@__PURE__*/ nodeProxy( MathNode, MathNode.NORMALIZE );
489
+
490
+ /**
491
+ * Computes the fractional part of the parameter.
492
+ *
493
+ * @function
494
+ * @param {Node | Number} x - The parameter.
495
+ * @returns {Node}
496
+ */
292
497
  export const fract = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FRACT );
498
+
499
+ /**
500
+ * Returns the sine of the parameter.
501
+ *
502
+ * @function
503
+ * @param {Node | Number} x - The parameter.
504
+ * @returns {Node}
505
+ */
293
506
  export const sin = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SIN );
507
+
508
+ /**
509
+ * Returns the cosine of the parameter.
510
+ *
511
+ * @function
512
+ * @param {Node | Number} x - The parameter.
513
+ * @returns {Node}
514
+ */
294
515
  export const cos = /*@__PURE__*/ nodeProxy( MathNode, MathNode.COS );
516
+
517
+ /**
518
+ * Returns the tangent of the parameter.
519
+ *
520
+ * @function
521
+ * @param {Node | Number} x - The parameter.
522
+ * @returns {Node}
523
+ */
295
524
  export const tan = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TAN );
525
+
526
+ /**
527
+ * Returns the arcsine of the parameter.
528
+ *
529
+ * @function
530
+ * @param {Node | Number} x - The parameter.
531
+ * @returns {Node}
532
+ */
296
533
  export const asin = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ASIN );
534
+
535
+ /**
536
+ * Returns the arccosine of the parameter.
537
+ *
538
+ * @function
539
+ * @param {Node | Number} x - The parameter.
540
+ * @returns {Node}
541
+ */
297
542
  export const acos = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ACOS );
543
+
544
+ /**
545
+ * Returns the arc-tangent of the parameter.
546
+ * If two parameters are provided, the result is `atan2(y/x)`.
547
+ *
548
+ * @function
549
+ * @param {Node | Number} y - The y parameter.
550
+ * @param {(Node | Number)?} x - The x parameter.
551
+ * @returns {Node}
552
+ */
298
553
  export const atan = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ATAN );
554
+
555
+ /**
556
+ * Returns the absolute value of the parameter.
557
+ *
558
+ * @function
559
+ * @param {Node | Number} x - The parameter.
560
+ * @returns {Node}
561
+ */
299
562
  export const abs = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ABS );
563
+
564
+ /**
565
+ * Extracts the sign of the parameter.
566
+ *
567
+ * @function
568
+ * @param {Node | Number} x - The parameter.
569
+ * @returns {Node}
570
+ */
300
571
  export const sign = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SIGN );
572
+
573
+ /**
574
+ * Calculates the length of a vector.
575
+ *
576
+ * @function
577
+ * @param {Node} x - The parameter.
578
+ * @returns {Node<float>}
579
+ */
301
580
  export const length = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LENGTH );
581
+
582
+ /**
583
+ * Negates the value of the parameter (-x).
584
+ *
585
+ * @function
586
+ * @param {Node | Number} x - The parameter.
587
+ * @returns {Node}
588
+ */
302
589
  export const negate = /*@__PURE__*/ nodeProxy( MathNode, MathNode.NEGATE );
590
+
591
+ /**
592
+ * Return `1` minus the parameter.
593
+ *
594
+ * @function
595
+ * @param {Node | Number} x - The parameter.
596
+ * @returns {Node}
597
+ */
303
598
  export const oneMinus = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ONE_MINUS );
599
+
600
+ /**
601
+ * Returns the partial derivative of the parameter with respect to x.
602
+ *
603
+ * @function
604
+ * @param {Node | Number} x - The parameter.
605
+ * @returns {Node}
606
+ */
304
607
  export const dFdx = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DFDX );
608
+
609
+ /**
610
+ * Returns the partial derivative of the parameter with respect to y.
611
+ *
612
+ * @function
613
+ * @param {Node | Number} x - The parameter.
614
+ * @returns {Node}
615
+ */
305
616
  export const dFdy = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DFDY );
617
+
618
+ /**
619
+ * Rounds the parameter to the nearest integer.
620
+ *
621
+ * @function
622
+ * @param {Node | Number} x - The parameter.
623
+ * @returns {Node}
624
+ */
306
625
  export const round = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ROUND );
626
+
627
+ /**
628
+ * Returns the reciprocal of the parameter `(1/x)`.
629
+ *
630
+ * @function
631
+ * @param {Node | Number} x - The parameter.
632
+ * @returns {Node}
633
+ */
307
634
  export const reciprocal = /*@__PURE__*/ nodeProxy( MathNode, MathNode.RECIPROCAL );
635
+
636
+ /**
637
+ * Truncates the parameter, removing the fractional part.
638
+ *
639
+ * @function
640
+ * @param {Node | Number} x - The parameter.
641
+ * @returns {Node}
642
+ */
308
643
  export const trunc = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRUNC );
644
+
645
+ /**
646
+ * Returns the sum of the absolute derivatives in x and y.
647
+ *
648
+ * @function
649
+ * @param {Node | Number} x - The parameter.
650
+ * @returns {Node}
651
+ */
309
652
  export const fwidth = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FWIDTH );
310
- export const bitcast = /*@__PURE__*/ nodeProxy( MathNode, MathNode.BITCAST );
653
+
654
+ /**
655
+ * Returns the transpose of a matrix.
656
+ *
657
+ * @function
658
+ * @param {Node<mat2|mat3|mat4>} x - The parameter.
659
+ * @returns {Node}
660
+ */
311
661
  export const transpose = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRANSPOSE );
312
662
 
313
- export const atan2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ATAN2 );
663
+ // 2 inputs
664
+
665
+ /**
666
+ * Reinterpret the bit representation of a value in one type as a value in another type.
667
+ *
668
+ * @function
669
+ * @param {Node | Number} x - The parameter.
670
+ * @param {String} y - The new type.
671
+ * @returns {Node}
672
+ */
673
+ export const bitcast = /*@__PURE__*/ nodeProxy( MathNode, MathNode.BITCAST );
674
+
675
+ /**
676
+ * Returns `true` if `x` equals `y`.
677
+ *
678
+ * @function
679
+ * @param {Node | Number} x - The first parameter.
680
+ * @param {Node | Number} y - The second parameter.
681
+ * @returns {Node<bool>}
682
+ */
683
+ export const equals = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EQUALS );
684
+
685
+ /**
686
+ * Returns the lesser of two values.
687
+ *
688
+ * @function
689
+ * @param {Node | Number} x - The y parameter.
690
+ * @param {Node | Number} y - The x parameter.
691
+ * @returns {Node}
692
+ */
314
693
  export const min = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MIN );
694
+
695
+ /**
696
+ * Returns the greater of two values.
697
+ *
698
+ * @function
699
+ * @param {Node | Number} x - The y parameter.
700
+ * @param {Node | Number} y - The x parameter.
701
+ * @returns {Node}
702
+ */
315
703
  export const max = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MAX );
704
+
705
+ /**
706
+ * Computes the remainder of dividing the first node by the second one.
707
+ *
708
+ * @function
709
+ * @param {Node | Number} x - The y parameter.
710
+ * @param {Node | Number} y - The x parameter.
711
+ * @returns {Node}
712
+ */
316
713
  export const mod = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MOD );
714
+
715
+ /**
716
+ * Generate a step function by comparing two values.
717
+ *
718
+ * @function
719
+ * @param {Node | Number} x - The y parameter.
720
+ * @param {Node | Number} y - The x parameter.
721
+ * @returns {Node}
722
+ */
317
723
  export const step = /*@__PURE__*/ nodeProxy( MathNode, MathNode.STEP );
724
+
725
+ /**
726
+ * Calculates the reflection direction for an incident vector.
727
+ *
728
+ * @function
729
+ * @param {Node<vec2|vec3|vec4>} I - The incident vector.
730
+ * @param {Node<vec2|vec3|vec4>} N - The normal vector.
731
+ * @returns {Node<vec2|vec3|vec4>}
732
+ */
318
733
  export const reflect = /*@__PURE__*/ nodeProxy( MathNode, MathNode.REFLECT );
734
+
735
+ /**
736
+ * Calculates the distance between two points.
737
+ *
738
+ * @function
739
+ * @param {Node<vec2|vec3|vec4>} x - The first point.
740
+ * @param {Node<vec2|vec3|vec4>} y - The second point.
741
+ * @returns {Node<float>}
742
+ */
319
743
  export const distance = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DISTANCE );
744
+
745
+ /**
746
+ * Calculates the absolute difference between two values.
747
+ *
748
+ * @function
749
+ * @param {Node | Number} x - The first parameter.
750
+ * @param {Node | Number} y - The second parameter.
751
+ * @returns {Node}
752
+ */
320
753
  export const difference = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DIFFERENCE );
754
+
755
+ /**
756
+ * Calculates the dot product of two vectors.
757
+ *
758
+ * @function
759
+ * @param {Node<vec2|vec3|vec4>} x - The first vector.
760
+ * @param {Node<vec2|vec3|vec4>} y - The second vector.
761
+ * @returns {Node<float>}
762
+ */
321
763
  export const dot = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DOT );
764
+
765
+ /**
766
+ * Calculates the cross product of two vectors.
767
+ *
768
+ * @function
769
+ * @param {Node<vec2|vec3|vec4>} x - The first vector.
770
+ * @param {Node<vec2|vec3|vec4>} y - The second vector.
771
+ * @returns {Node<vec2|vec3|vec4>}
772
+ */
322
773
  export const cross = /*@__PURE__*/ nodeProxy( MathNode, MathNode.CROSS );
774
+
775
+ /**
776
+ * Return the value of the first parameter raised to the power of the second one.
777
+ *
778
+ * @function
779
+ * @param {Node | Number} x - The first parameter.
780
+ * @param {Node | Number} y - The second parameter.
781
+ * @returns {Node}
782
+ */
323
783
  export const pow = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW );
784
+
785
+ /**
786
+ * Returns the square of the parameter.
787
+ *
788
+ * @function
789
+ * @param {Node | Number} x - The first parameter.
790
+ * @returns {Node}
791
+ */
324
792
  export const pow2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 2 );
793
+
794
+ /**
795
+ * Returns the cube of the parameter.
796
+ *
797
+ * @function
798
+ * @param {Node | Number} x - The first parameter.
799
+ * @returns {Node}
800
+ */
325
801
  export const pow3 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 3 );
802
+
803
+ /**
804
+ * Returns the fourth power of the parameter.
805
+ *
806
+ * @function
807
+ * @param {Node | Number} x - The first parameter.
808
+ * @returns {Node}
809
+ */
326
810
  export const pow4 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 4 );
811
+
812
+ /**
813
+ * Transforms the direction of a vector by a matrix and then normalizes the result.
814
+ *
815
+ * @function
816
+ * @param {Node<vec2|vec3|vec4>} direction - The direction vector.
817
+ * @param {Node<mat2|mat3|mat4>} matrix - The transformation matrix.
818
+ * @returns {Node}
819
+ */
327
820
  export const transformDirection = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRANSFORM_DIRECTION );
328
821
 
822
+ /**
823
+ * Returns the cube root of a number.
824
+ *
825
+ * @function
826
+ * @param {Node | Number} a - The first parameter.
827
+ * @returns {Node}
828
+ */
329
829
  export const cbrt = ( a ) => mul( sign( a ), pow( abs( a ), 1.0 / 3.0 ) );
830
+
831
+ /**
832
+ * Calculate the squared length of a vector.
833
+ *
834
+ * @function
835
+ * @param {Node<vec2|vec3|vec4>} a - The vector.
836
+ * @returns {Node<float>}
837
+ */
330
838
  export const lengthSq = ( a ) => dot( a, a );
839
+
840
+ /**
841
+ * Linearly interpolates between two values.
842
+ *
843
+ * @function
844
+ * @param {Node | Number} a - The first parameter.
845
+ * @param {Node | Number} b - The second parameter.
846
+ * @param {Node | Number} t - The interpolation value.
847
+ * @returns {Node}
848
+ */
331
849
  export const mix = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MIX );
850
+
851
+ /**
852
+ * Constrains a value to lie between two further values.
853
+ *
854
+ * @function
855
+ * @param {Node | Number} value - The value to constrain.
856
+ * @param {Node | Number} [low=0] - The lower bound.
857
+ * @param {Node | Number} [high=1] - The upper bound.
858
+ * @returns {Node}
859
+ */
332
860
  export const clamp = ( value, low = 0, high = 1 ) => nodeObject( new MathNode( MathNode.CLAMP, nodeObject( value ), nodeObject( low ), nodeObject( high ) ) );
861
+
862
+ /**
863
+ * Constrains a value between `0` and `1`.
864
+ *
865
+ * @function
866
+ * @param {Node | Number} value - The value to constrain.
867
+ * @returns {Node}
868
+ */
333
869
  export const saturate = ( value ) => clamp( value );
870
+
871
+ /**
872
+ * Calculates the refraction direction for an incident vector.
873
+ *
874
+ * @function
875
+ * @param {Node<vec2|vec3|vec4>} I - The incident vector.
876
+ * @param {Node<vec2|vec3|vec4>} N - The normal vector.
877
+ * @param {Node<float>} eta - The the ratio of indices of refraction.
878
+ * @returns {Node<vec2|vec3|vec4>}
879
+ */
334
880
  export const refract = /*@__PURE__*/ nodeProxy( MathNode, MathNode.REFRACT );
881
+
882
+ /**
883
+ * Performs a Hermite interpolation between two values.
884
+ *
885
+ * @function
886
+ * @param {Node | Number} low - The value of the lower edge of the Hermite function.
887
+ * @param {Node | Number} high - The value of the upper edge of the Hermite function.
888
+ * @param {Node | Number} x - The source value for interpolation.
889
+ * @returns {Node}
890
+ */
335
891
  export const smoothstep = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SMOOTHSTEP );
892
+
893
+ /**
894
+ * Returns a vector pointing in the same direction as another.
895
+ *
896
+ * @function
897
+ * @param {Node<vec2|vec3|vec4>} N - The vector to orient.
898
+ * @param {Node<vec2|vec3|vec4>} I - The incident vector.
899
+ * @param {Node<vec2|vec3|vec4>} Nref - The reference vector.
900
+ * @returns {Node<vec2|vec3|vec4>}
901
+ */
336
902
  export const faceForward = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FACEFORWARD );
337
903
 
904
+ /**
905
+ * Returns a random value for the given uv.
906
+ *
907
+ * @function
908
+ * @param {Node<vec2>} uv - The uv node.
909
+ * @returns {Node<float>}
910
+ */
338
911
  export const rand = /*@__PURE__*/ Fn( ( [ uv ] ) => {
339
912
 
340
913
  const a = 12.9898, b = 78.233, c = 43758.5453;
@@ -344,9 +917,52 @@ export const rand = /*@__PURE__*/ Fn( ( [ uv ] ) => {
344
917
 
345
918
  } );
346
919
 
920
+ /**
921
+ * Alias for `mix()` with a different parameter order.
922
+ *
923
+ * @function
924
+ * @param {Node | Number} t - The interpolation value.
925
+ * @param {Node | Number} e1 - The first parameter.
926
+ * @param {Node | Number} e2 - The second parameter.
927
+ * @returns {Node}
928
+ */
347
929
  export const mixElement = ( t, e1, e2 ) => mix( e1, e2, t );
930
+
931
+ /**
932
+ * Alias for `smoothstep()` with a different parameter order.
933
+ *
934
+ * @function
935
+ * @param {Node | Number} x - The source value for interpolation.
936
+ * @param {Node | Number} low - The value of the lower edge of the Hermite function.
937
+ * @param {Node | Number} high - The value of the upper edge of the Hermite function.
938
+ * @returns {Node}
939
+ */
348
940
  export const smoothstepElement = ( x, low, high ) => smoothstep( low, high, x );
349
941
 
942
+ /**
943
+ * Returns the arc-tangent of the quotient of its parameters.
944
+ *
945
+ * @function
946
+ * @deprecated since r172. Use {@link atan} instead.
947
+ *
948
+ * @param {Node | Number} y - The y parameter.
949
+ * @param {Node | Number} x - The x parameter.
950
+ * @returns {Node}
951
+ */
952
+ export const atan2 = ( y, x ) => { // @deprecated, r172
953
+
954
+ console.warn( 'THREE.TSL: "atan2" is overloaded. Use "atan" instead.' );
955
+ return atan( y, x );
956
+
957
+ };
958
+
959
+ // GLSL alias function
960
+
961
+ export const faceforward = faceForward;
962
+ export const inversesqrt = inverseSqrt;
963
+
964
+ // Method chaining
965
+
350
966
  addMethodChaining( 'all', all );
351
967
  addMethodChaining( 'any', any );
352
968
  addMethodChaining( 'equals', equals );