@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,6 +1,6 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { sub, mul, div, mod, equal } from './OperatorNode.js';
3
- import { addMethodChaining, nodeObject, nodeProxy, float, vec2, vec3, vec4, Fn } from '../tsl/TSLCore.js';
3
+ import { addMethodChaining, nodeObject, nodeProxyIntent, float, vec2, vec3, vec4, Fn } from '../tsl/TSLCore.js';
4
4
  import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../../constants.js';
5
5
 
6
6
  /**
@@ -160,26 +160,31 @@ class MathNode extends TempNode {
160
160
 
161
161
  }
162
162
 
163
- generate( builder, output ) {
163
+ setup( builder ) {
164
164
 
165
- let method = this.method;
165
+ const { aNode, bNode, method } = this;
166
166
 
167
- const type = this.getNodeType( builder );
168
- const inputType = this.getInputType( builder );
167
+ let outputNode = null;
169
168
 
170
- const a = this.aNode;
171
- const b = this.bNode;
172
- const c = this.cNode;
169
+ if ( method === MathNode.ONE_MINUS ) {
173
170
 
174
- const coordinateSystem = builder.renderer.coordinateSystem;
171
+ outputNode = sub( 1.0, aNode );
172
+
173
+ } else if ( method === MathNode.RECIPROCAL ) {
174
+
175
+ outputNode = div( 1.0, aNode );
176
+
177
+ } else if ( method === MathNode.DIFFERENCE ) {
178
+
179
+ outputNode = abs( sub( aNode, bNode ) );
175
180
 
176
- if ( method === MathNode.TRANSFORM_DIRECTION ) {
181
+ } else if ( method === MathNode.TRANSFORM_DIRECTION ) {
177
182
 
178
183
  // dir can be either a direction vector or a normal vector
179
184
  // upper-left 3x3 of matrix is assumed to be orthogonal
180
185
 
181
- let tA = a;
182
- let tB = b;
186
+ let tA = aNode;
187
+ let tB = bNode;
183
188
 
184
189
  if ( builder.isMatrix( tA.getNodeType( builder ) ) ) {
185
190
 
@@ -193,23 +198,46 @@ class MathNode extends TempNode {
193
198
 
194
199
  const mulNode = mul( tA, tB ).xyz;
195
200
 
196
- return normalize( mulNode ).build( builder, output );
201
+ outputNode = normalize( mulNode );
197
202
 
198
- } else if ( method === MathNode.NEGATE ) {
203
+ }
199
204
 
200
- return builder.format( '( - ' + a.build( builder, inputType ) + ' )', type, output );
205
+ if ( outputNode !== null ) {
201
206
 
202
- } else if ( method === MathNode.ONE_MINUS ) {
207
+ return outputNode;
203
208
 
204
- return sub( 1.0, a ).build( builder, output );
209
+ } else {
205
210
 
206
- } else if ( method === MathNode.RECIPROCAL ) {
211
+ return super.setup( builder );
207
212
 
208
- return div( 1.0, a ).build( builder, output );
213
+ }
209
214
 
210
- } else if ( method === MathNode.DIFFERENCE ) {
215
+ }
216
+
217
+ generate( builder, output ) {
218
+
219
+ const properties = builder.getNodeProperties( this );
220
+
221
+ if ( properties.outputNode ) {
222
+
223
+ return super.generate( builder, output );
224
+
225
+ }
226
+
227
+ let method = this.method;
228
+
229
+ const type = this.getNodeType( builder );
230
+ const inputType = this.getInputType( builder );
231
+
232
+ const a = this.aNode;
233
+ const b = this.bNode;
234
+ const c = this.cNode;
235
+
236
+ const coordinateSystem = builder.renderer.coordinateSystem;
211
237
 
212
- return abs( sub( a, b ) ).build( builder, output );
238
+ if ( method === MathNode.NEGATE ) {
239
+
240
+ return builder.format( '( - ' + a.build( builder, inputType ) + ' )', type, output );
213
241
 
214
242
  } else {
215
243
 
@@ -260,6 +288,14 @@ class MathNode extends TempNode {
260
288
 
261
289
  }
262
290
 
291
+ if ( builder.shaderStage !== 'fragment' && ( method === MathNode.DFDX || method === MathNode.DFDY ) ) {
292
+
293
+ console.warn( `THREE.TSL: '${ method }' is not supported in the ${ builder.shaderStage } stage.` );
294
+
295
+ method = '/*' + method + '*/';
296
+
297
+ }
298
+
263
299
  params.push( a.build( builder, inputType ) );
264
300
  if ( b !== null ) params.push( b.build( builder, inputType ) );
265
301
  if ( c !== null ) params.push( c.build( builder, inputType ) );
@@ -325,6 +361,8 @@ MathNode.RECIPROCAL = 'reciprocal';
325
361
  MathNode.TRUNC = 'trunc';
326
362
  MathNode.FWIDTH = 'fwidth';
327
363
  MathNode.TRANSPOSE = 'transpose';
364
+ MathNode.DETERMINANT = 'determinant';
365
+ MathNode.INVERSE = 'inverse';
328
366
 
329
367
  // 2 inputs
330
368
 
@@ -393,7 +431,7 @@ export const PI2 = /*@__PURE__*/ float( Math.PI * 2 );
393
431
  * @param {Node | number} x - The parameter.
394
432
  * @returns {Node<bool>}
395
433
  */
396
- export const all = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ALL ).setParameterLength( 1 );
434
+ export const all = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ALL ).setParameterLength( 1 );
397
435
 
398
436
  /**
399
437
  * Returns `true` if any components of `x` are `true`.
@@ -403,7 +441,7 @@ export const all = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ALL ).setParamete
403
441
  * @param {Node | number} x - The parameter.
404
442
  * @returns {Node<bool>}
405
443
  */
406
- export const any = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ANY ).setParameterLength( 1 );
444
+ export const any = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ANY ).setParameterLength( 1 );
407
445
 
408
446
  /**
409
447
  * Converts a quantity in degrees to radians.
@@ -413,7 +451,7 @@ export const any = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ANY ).setParamete
413
451
  * @param {Node | number} x - The input in degrees.
414
452
  * @returns {Node}
415
453
  */
416
- export const radians = /*@__PURE__*/ nodeProxy( MathNode, MathNode.RADIANS ).setParameterLength( 1 );
454
+ export const radians = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.RADIANS ).setParameterLength( 1 );
417
455
 
418
456
  /**
419
457
  * Convert a quantity in radians to degrees.
@@ -423,7 +461,7 @@ export const radians = /*@__PURE__*/ nodeProxy( MathNode, MathNode.RADIANS ).set
423
461
  * @param {Node | number} x - The input in radians.
424
462
  * @returns {Node}
425
463
  */
426
- export const degrees = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DEGREES ).setParameterLength( 1 );
464
+ export const degrees = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DEGREES ).setParameterLength( 1 );
427
465
 
428
466
  /**
429
467
  * Returns the natural exponentiation of the parameter.
@@ -433,7 +471,7 @@ export const degrees = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DEGREES ).set
433
471
  * @param {Node | number} x - The parameter.
434
472
  * @returns {Node}
435
473
  */
436
- export const exp = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EXP ).setParameterLength( 1 );
474
+ export const exp = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.EXP ).setParameterLength( 1 );
437
475
 
438
476
  /**
439
477
  * Returns 2 raised to the power of the parameter.
@@ -443,7 +481,7 @@ export const exp = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EXP ).setParamete
443
481
  * @param {Node | number} x - The parameter.
444
482
  * @returns {Node}
445
483
  */
446
- export const exp2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EXP2 ).setParameterLength( 1 );
484
+ export const exp2 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.EXP2 ).setParameterLength( 1 );
447
485
 
448
486
  /**
449
487
  * Returns the natural logarithm of the parameter.
@@ -453,7 +491,7 @@ export const exp2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.EXP2 ).setParame
453
491
  * @param {Node | number} x - The parameter.
454
492
  * @returns {Node}
455
493
  */
456
- export const log = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LOG ).setParameterLength( 1 );
494
+ export const log = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.LOG ).setParameterLength( 1 );
457
495
 
458
496
  /**
459
497
  * Returns the base 2 logarithm of the parameter.
@@ -463,7 +501,7 @@ export const log = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LOG ).setParamete
463
501
  * @param {Node | number} x - The parameter.
464
502
  * @returns {Node}
465
503
  */
466
- export const log2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LOG2 ).setParameterLength( 1 );
504
+ export const log2 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.LOG2 ).setParameterLength( 1 );
467
505
 
468
506
  /**
469
507
  * Returns the square root of the parameter.
@@ -473,7 +511,7 @@ export const log2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LOG2 ).setParame
473
511
  * @param {Node | number} x - The parameter.
474
512
  * @returns {Node}
475
513
  */
476
- export const sqrt = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SQRT ).setParameterLength( 1 );
514
+ export const sqrt = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SQRT ).setParameterLength( 1 );
477
515
 
478
516
  /**
479
517
  * Returns the inverse of the square root of the parameter.
@@ -483,7 +521,7 @@ export const sqrt = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SQRT ).setParame
483
521
  * @param {Node | number} x - The parameter.
484
522
  * @returns {Node}
485
523
  */
486
- export const inverseSqrt = /*@__PURE__*/ nodeProxy( MathNode, MathNode.INVERSE_SQRT ).setParameterLength( 1 );
524
+ export const inverseSqrt = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.INVERSE_SQRT ).setParameterLength( 1 );
487
525
 
488
526
  /**
489
527
  * Finds the nearest integer less than or equal to the parameter.
@@ -493,7 +531,7 @@ export const inverseSqrt = /*@__PURE__*/ nodeProxy( MathNode, MathNode.INVERSE_S
493
531
  * @param {Node | number} x - The parameter.
494
532
  * @returns {Node}
495
533
  */
496
- export const floor = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FLOOR ).setParameterLength( 1 );
534
+ export const floor = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FLOOR ).setParameterLength( 1 );
497
535
 
498
536
  /**
499
537
  * Finds the nearest integer that is greater than or equal to the parameter.
@@ -503,7 +541,7 @@ export const floor = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FLOOR ).setPara
503
541
  * @param {Node | number} x - The parameter.
504
542
  * @returns {Node}
505
543
  */
506
- export const ceil = /*@__PURE__*/ nodeProxy( MathNode, MathNode.CEIL ).setParameterLength( 1 );
544
+ export const ceil = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.CEIL ).setParameterLength( 1 );
507
545
 
508
546
  /**
509
547
  * Calculates the unit vector in the same direction as the original vector.
@@ -513,7 +551,7 @@ export const ceil = /*@__PURE__*/ nodeProxy( MathNode, MathNode.CEIL ).setParame
513
551
  * @param {Node} x - The input vector.
514
552
  * @returns {Node}
515
553
  */
516
- export const normalize = /*@__PURE__*/ nodeProxy( MathNode, MathNode.NORMALIZE ).setParameterLength( 1 );
554
+ export const normalize = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.NORMALIZE ).setParameterLength( 1 );
517
555
 
518
556
  /**
519
557
  * Computes the fractional part of the parameter.
@@ -523,7 +561,7 @@ export const normalize = /*@__PURE__*/ nodeProxy( MathNode, MathNode.NORMALIZE )
523
561
  * @param {Node | number} x - The parameter.
524
562
  * @returns {Node}
525
563
  */
526
- export const fract = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FRACT ).setParameterLength( 1 );
564
+ export const fract = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FRACT ).setParameterLength( 1 );
527
565
 
528
566
  /**
529
567
  * Returns the sine of the parameter.
@@ -533,7 +571,7 @@ export const fract = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FRACT ).setPara
533
571
  * @param {Node | number} x - The parameter.
534
572
  * @returns {Node}
535
573
  */
536
- export const sin = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SIN ).setParameterLength( 1 );
574
+ export const sin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SIN ).setParameterLength( 1 );
537
575
 
538
576
  /**
539
577
  * Returns the cosine of the parameter.
@@ -543,7 +581,7 @@ export const sin = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SIN ).setParamete
543
581
  * @param {Node | number} x - The parameter.
544
582
  * @returns {Node}
545
583
  */
546
- export const cos = /*@__PURE__*/ nodeProxy( MathNode, MathNode.COS ).setParameterLength( 1 );
584
+ export const cos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.COS ).setParameterLength( 1 );
547
585
 
548
586
  /**
549
587
  * Returns the tangent of the parameter.
@@ -553,7 +591,7 @@ export const cos = /*@__PURE__*/ nodeProxy( MathNode, MathNode.COS ).setParamete
553
591
  * @param {Node | number} x - The parameter.
554
592
  * @returns {Node}
555
593
  */
556
- export const tan = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TAN ).setParameterLength( 1 );
594
+ export const tan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TAN ).setParameterLength( 1 );
557
595
 
558
596
  /**
559
597
  * Returns the arcsine of the parameter.
@@ -563,7 +601,7 @@ export const tan = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TAN ).setParamete
563
601
  * @param {Node | number} x - The parameter.
564
602
  * @returns {Node}
565
603
  */
566
- export const asin = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ASIN ).setParameterLength( 1 );
604
+ export const asin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ASIN ).setParameterLength( 1 );
567
605
 
568
606
  /**
569
607
  * Returns the arccosine of the parameter.
@@ -573,7 +611,7 @@ export const asin = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ASIN ).setParame
573
611
  * @param {Node | number} x - The parameter.
574
612
  * @returns {Node}
575
613
  */
576
- export const acos = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ACOS ).setParameterLength( 1 );
614
+ export const acos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ACOS ).setParameterLength( 1 );
577
615
 
578
616
  /**
579
617
  * Returns the arc-tangent of the parameter.
@@ -585,7 +623,7 @@ export const acos = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ACOS ).setParame
585
623
  * @param {?(Node | number)} x - The x parameter.
586
624
  * @returns {Node}
587
625
  */
588
- export const atan = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ATAN ).setParameterLength( 1, 2 );
626
+ export const atan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ATAN ).setParameterLength( 1, 2 );
589
627
 
590
628
  /**
591
629
  * Returns the absolute value of the parameter.
@@ -595,7 +633,7 @@ export const atan = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ATAN ).setParame
595
633
  * @param {Node | number} x - The parameter.
596
634
  * @returns {Node}
597
635
  */
598
- export const abs = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ABS ).setParameterLength( 1 );
636
+ export const abs = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ABS ).setParameterLength( 1 );
599
637
 
600
638
  /**
601
639
  * Extracts the sign of the parameter.
@@ -605,7 +643,7 @@ export const abs = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ABS ).setParamete
605
643
  * @param {Node | number} x - The parameter.
606
644
  * @returns {Node}
607
645
  */
608
- export const sign = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SIGN ).setParameterLength( 1 );
646
+ export const sign = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SIGN ).setParameterLength( 1 );
609
647
 
610
648
  /**
611
649
  * Calculates the length of a vector.
@@ -615,7 +653,7 @@ export const sign = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SIGN ).setParame
615
653
  * @param {Node} x - The parameter.
616
654
  * @returns {Node<float>}
617
655
  */
618
- export const length = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LENGTH ).setParameterLength( 1 );
656
+ export const length = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.LENGTH ).setParameterLength( 1 );
619
657
 
620
658
  /**
621
659
  * Negates the value of the parameter (-x).
@@ -625,7 +663,7 @@ export const length = /*@__PURE__*/ nodeProxy( MathNode, MathNode.LENGTH ).setPa
625
663
  * @param {Node | number} x - The parameter.
626
664
  * @returns {Node}
627
665
  */
628
- export const negate = /*@__PURE__*/ nodeProxy( MathNode, MathNode.NEGATE ).setParameterLength( 1 );
666
+ export const negate = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.NEGATE ).setParameterLength( 1 );
629
667
 
630
668
  /**
631
669
  * Return `1` minus the parameter.
@@ -635,7 +673,7 @@ export const negate = /*@__PURE__*/ nodeProxy( MathNode, MathNode.NEGATE ).setPa
635
673
  * @param {Node | number} x - The parameter.
636
674
  * @returns {Node}
637
675
  */
638
- export const oneMinus = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ONE_MINUS ).setParameterLength( 1 );
676
+ export const oneMinus = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ONE_MINUS ).setParameterLength( 1 );
639
677
 
640
678
  /**
641
679
  * Returns the partial derivative of the parameter with respect to x.
@@ -645,7 +683,7 @@ export const oneMinus = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ONE_MINUS ).
645
683
  * @param {Node | number} x - The parameter.
646
684
  * @returns {Node}
647
685
  */
648
- export const dFdx = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DFDX ).setParameterLength( 1 );
686
+ export const dFdx = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DFDX ).setParameterLength( 1 );
649
687
 
650
688
  /**
651
689
  * Returns the partial derivative of the parameter with respect to y.
@@ -655,7 +693,7 @@ export const dFdx = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DFDX ).setParame
655
693
  * @param {Node | number} x - The parameter.
656
694
  * @returns {Node}
657
695
  */
658
- export const dFdy = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DFDY ).setParameterLength( 1 );
696
+ export const dFdy = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DFDY ).setParameterLength( 1 );
659
697
 
660
698
  /**
661
699
  * Rounds the parameter to the nearest integer.
@@ -665,7 +703,7 @@ export const dFdy = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DFDY ).setParame
665
703
  * @param {Node | number} x - The parameter.
666
704
  * @returns {Node}
667
705
  */
668
- export const round = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ROUND ).setParameterLength( 1 );
706
+ export const round = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ROUND ).setParameterLength( 1 );
669
707
 
670
708
  /**
671
709
  * Returns the reciprocal of the parameter `(1/x)`.
@@ -675,7 +713,7 @@ export const round = /*@__PURE__*/ nodeProxy( MathNode, MathNode.ROUND ).setPara
675
713
  * @param {Node | number} x - The parameter.
676
714
  * @returns {Node}
677
715
  */
678
- export const reciprocal = /*@__PURE__*/ nodeProxy( MathNode, MathNode.RECIPROCAL ).setParameterLength( 1 );
716
+ export const reciprocal = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.RECIPROCAL ).setParameterLength( 1 );
679
717
 
680
718
  /**
681
719
  * Truncates the parameter, removing the fractional part.
@@ -685,7 +723,7 @@ export const reciprocal = /*@__PURE__*/ nodeProxy( MathNode, MathNode.RECIPROCAL
685
723
  * @param {Node | number} x - The parameter.
686
724
  * @returns {Node}
687
725
  */
688
- export const trunc = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRUNC ).setParameterLength( 1 );
726
+ export const trunc = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRUNC ).setParameterLength( 1 );
689
727
 
690
728
  /**
691
729
  * Returns the sum of the absolute derivatives in x and y.
@@ -695,7 +733,7 @@ export const trunc = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRUNC ).setPara
695
733
  * @param {Node | number} x - The parameter.
696
734
  * @returns {Node}
697
735
  */
698
- export const fwidth = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FWIDTH ).setParameterLength( 1 );
736
+ export const fwidth = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FWIDTH ).setParameterLength( 1 );
699
737
 
700
738
  /**
701
739
  * Returns the transpose of a matrix.
@@ -705,7 +743,27 @@ export const fwidth = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FWIDTH ).setPa
705
743
  * @param {Node<mat2|mat3|mat4>} x - The parameter.
706
744
  * @returns {Node}
707
745
  */
708
- export const transpose = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRANSPOSE ).setParameterLength( 1 );
746
+ export const transpose = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRANSPOSE ).setParameterLength( 1 );
747
+
748
+ /**
749
+ * Returns the determinant of a matrix.
750
+ *
751
+ * @tsl
752
+ * @function
753
+ * @param {Node<mat2|mat3|mat4>} x - The parameter.
754
+ * @returns {Node<float>}
755
+ */
756
+ export const determinant = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DETERMINANT ).setParameterLength( 1 );
757
+
758
+ /**
759
+ * Returns the inverse of a matrix.
760
+ *
761
+ * @tsl
762
+ * @function
763
+ * @param {Node<mat2|mat3|mat4>} x - The parameter.
764
+ * @returns {Node<mat2|mat3|mat4>}
765
+ */
766
+ export const inverse = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.INVERSE ).setParameterLength( 1 );
709
767
 
710
768
  // 2 inputs
711
769
 
@@ -718,7 +776,7 @@ export const transpose = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRANSPOSE )
718
776
  * @param {string} y - The new type.
719
777
  * @returns {Node}
720
778
  */
721
- export const bitcast = /*@__PURE__*/ nodeProxy( MathNode, MathNode.BITCAST ).setParameterLength( 2 );
779
+ export const bitcast = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.BITCAST ).setParameterLength( 2 );
722
780
 
723
781
  /**
724
782
  * Returns `true` if `x` equals `y`.
@@ -745,7 +803,7 @@ export const equals = ( x, y ) => { // @deprecated, r172
745
803
  * @param {...(Node | number)} values - The values to compare.
746
804
  * @returns {Node}
747
805
  */
748
- export const min = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MIN ).setParameterLength( 2, Infinity );
806
+ export const min = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MIN ).setParameterLength( 2, Infinity );
749
807
 
750
808
  /**
751
809
  * Returns the greatest of the given values.
@@ -755,7 +813,7 @@ export const min = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MIN ).setParamete
755
813
  * @param {...(Node | number)} values - The values to compare.
756
814
  * @returns {Node}
757
815
  */
758
- export const max = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MAX ).setParameterLength( 2, Infinity );
816
+ export const max = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MAX ).setParameterLength( 2, Infinity );
759
817
 
760
818
  /**
761
819
  * Generate a step function by comparing two values.
@@ -766,7 +824,7 @@ export const max = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MAX ).setParamete
766
824
  * @param {Node | number} y - The x parameter.
767
825
  * @returns {Node}
768
826
  */
769
- export const step = /*@__PURE__*/ nodeProxy( MathNode, MathNode.STEP ).setParameterLength( 2 );
827
+ export const step = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.STEP ).setParameterLength( 2 );
770
828
 
771
829
  /**
772
830
  * Calculates the reflection direction for an incident vector.
@@ -777,7 +835,7 @@ export const step = /*@__PURE__*/ nodeProxy( MathNode, MathNode.STEP ).setParame
777
835
  * @param {Node<vec2|vec3|vec4>} N - The normal vector.
778
836
  * @returns {Node<vec2|vec3|vec4>}
779
837
  */
780
- export const reflect = /*@__PURE__*/ nodeProxy( MathNode, MathNode.REFLECT ).setParameterLength( 2 );
838
+ export const reflect = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.REFLECT ).setParameterLength( 2 );
781
839
 
782
840
  /**
783
841
  * Calculates the distance between two points.
@@ -788,7 +846,7 @@ export const reflect = /*@__PURE__*/ nodeProxy( MathNode, MathNode.REFLECT ).set
788
846
  * @param {Node<vec2|vec3|vec4>} y - The second point.
789
847
  * @returns {Node<float>}
790
848
  */
791
- export const distance = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DISTANCE ).setParameterLength( 2 );
849
+ export const distance = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DISTANCE ).setParameterLength( 2 );
792
850
 
793
851
  /**
794
852
  * Calculates the absolute difference between two values.
@@ -799,7 +857,7 @@ export const distance = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DISTANCE ).s
799
857
  * @param {Node | number} y - The second parameter.
800
858
  * @returns {Node}
801
859
  */
802
- export const difference = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DIFFERENCE ).setParameterLength( 2 );
860
+ export const difference = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DIFFERENCE ).setParameterLength( 2 );
803
861
 
804
862
  /**
805
863
  * Calculates the dot product of two vectors.
@@ -810,18 +868,18 @@ export const difference = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DIFFERENCE
810
868
  * @param {Node<vec2|vec3|vec4>} y - The second vector.
811
869
  * @returns {Node<float>}
812
870
  */
813
- export const dot = /*@__PURE__*/ nodeProxy( MathNode, MathNode.DOT ).setParameterLength( 2 );
871
+ export const dot = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DOT ).setParameterLength( 2 );
814
872
 
815
873
  /**
816
874
  * Calculates the cross product of two vectors.
817
875
  *
818
876
  * @tsl
819
877
  * @function
820
- * @param {Node<vec2|vec3|vec4>} x - The first vector.
821
- * @param {Node<vec2|vec3|vec4>} y - The second vector.
822
- * @returns {Node<vec2|vec3|vec4>}
878
+ * @param {Node<vec2|vec3>} x - The first vector.
879
+ * @param {Node<vec2|vec3>} y - The second vector.
880
+ * @returns {Node<float|vec3>}
823
881
  */
824
- export const cross = /*@__PURE__*/ nodeProxy( MathNode, MathNode.CROSS ).setParameterLength( 2 );
882
+ export const cross = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.CROSS ).setParameterLength( 2 );
825
883
 
826
884
  /**
827
885
  * Return the value of the first parameter raised to the power of the second one.
@@ -832,7 +890,7 @@ export const cross = /*@__PURE__*/ nodeProxy( MathNode, MathNode.CROSS ).setPara
832
890
  * @param {Node | number} y - The second parameter.
833
891
  * @returns {Node}
834
892
  */
835
- export const pow = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW ).setParameterLength( 2 );
893
+ export const pow = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.POW ).setParameterLength( 2 );
836
894
 
837
895
  /**
838
896
  * Returns the square of the parameter.
@@ -842,7 +900,7 @@ export const pow = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW ).setParamete
842
900
  * @param {Node | number} x - The first parameter.
843
901
  * @returns {Node}
844
902
  */
845
- export const pow2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 2 ).setParameterLength( 1 );
903
+ export const pow2 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.POW, 2 ).setParameterLength( 1 );
846
904
 
847
905
  /**
848
906
  * Returns the cube of the parameter.
@@ -852,7 +910,7 @@ export const pow2 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 2 ).setPara
852
910
  * @param {Node | number} x - The first parameter.
853
911
  * @returns {Node}
854
912
  */
855
- export const pow3 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 3 ).setParameterLength( 1 );
913
+ export const pow3 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.POW, 3 ).setParameterLength( 1 );
856
914
 
857
915
  /**
858
916
  * Returns the fourth power of the parameter.
@@ -862,7 +920,7 @@ export const pow3 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 3 ).setPara
862
920
  * @param {Node | number} x - The first parameter.
863
921
  * @returns {Node}
864
922
  */
865
- export const pow4 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 4 ).setParameterLength( 1 );
923
+ export const pow4 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.POW, 4 ).setParameterLength( 1 );
866
924
 
867
925
  /**
868
926
  * Transforms the direction of a vector by a matrix and then normalizes the result.
@@ -873,7 +931,7 @@ export const pow4 = /*@__PURE__*/ nodeProxy( MathNode, MathNode.POW, 4 ).setPara
873
931
  * @param {Node<mat2|mat3|mat4>} matrix - The transformation matrix.
874
932
  * @returns {Node}
875
933
  */
876
- export const transformDirection = /*@__PURE__*/ nodeProxy( MathNode, MathNode.TRANSFORM_DIRECTION ).setParameterLength( 2 );
934
+ export const transformDirection = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRANSFORM_DIRECTION ).setParameterLength( 2 );
877
935
 
878
936
  /**
879
937
  * Returns the cube root of a number.
@@ -905,7 +963,7 @@ export const lengthSq = ( a ) => dot( a, a );
905
963
  * @param {Node | number} t - The interpolation value.
906
964
  * @returns {Node}
907
965
  */
908
- export const mix = /*@__PURE__*/ nodeProxy( MathNode, MathNode.MIX ).setParameterLength( 3 );
966
+ export const mix = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MIX ).setParameterLength( 3 );
909
967
 
910
968
  /**
911
969
  * Constrains a value to lie between two further values.
@@ -939,7 +997,7 @@ export const saturate = ( value ) => clamp( value );
939
997
  * @param {Node<float>} eta - The ratio of indices of refraction.
940
998
  * @returns {Node<vec2|vec3|vec4>}
941
999
  */
942
- export const refract = /*@__PURE__*/ nodeProxy( MathNode, MathNode.REFRACT ).setParameterLength( 3 );
1000
+ export const refract = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.REFRACT ).setParameterLength( 3 );
943
1001
 
944
1002
  /**
945
1003
  * Performs a Hermite interpolation between two values.
@@ -951,7 +1009,7 @@ export const refract = /*@__PURE__*/ nodeProxy( MathNode, MathNode.REFRACT ).set
951
1009
  * @param {Node | number} x - The source value for interpolation.
952
1010
  * @returns {Node}
953
1011
  */
954
- export const smoothstep = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SMOOTHSTEP ).setParameterLength( 3 );
1012
+ export const smoothstep = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SMOOTHSTEP ).setParameterLength( 3 );
955
1013
 
956
1014
  /**
957
1015
  * Returns a vector pointing in the same direction as another.
@@ -963,7 +1021,7 @@ export const smoothstep = /*@__PURE__*/ nodeProxy( MathNode, MathNode.SMOOTHSTEP
963
1021
  * @param {Node<vec2|vec3|vec4>} Nref - The reference vector.
964
1022
  * @returns {Node<vec2|vec3|vec4>}
965
1023
  */
966
- export const faceForward = /*@__PURE__*/ nodeProxy( MathNode, MathNode.FACEFORWARD ).setParameterLength( 3 );
1024
+ export const faceForward = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FACEFORWARD ).setParameterLength( 3 );
967
1025
 
968
1026
  /**
969
1027
  * Returns a random value for the given uv.
@@ -1006,6 +1064,17 @@ export const mixElement = ( t, e1, e2 ) => mix( e1, e2, t );
1006
1064
  */
1007
1065
  export const smoothstepElement = ( x, low, high ) => smoothstep( low, high, x );
1008
1066
 
1067
+ /**
1068
+ * Alias for `step()` with a different parameter order.
1069
+ *
1070
+ * @tsl
1071
+ * @function
1072
+ * @param {Node | number} x - The source value for interpolation.
1073
+ * @param {Node | number} edge - The edge value.
1074
+ * @returns {Node}
1075
+ */
1076
+ export const stepElement = ( x, edge ) => step( edge, x );
1077
+
1009
1078
  /**
1010
1079
  * Returns the arc-tangent of the quotient of its parameters.
1011
1080
  *
@@ -1068,7 +1137,7 @@ addMethodChaining( 'fwidth', fwidth );
1068
1137
  addMethodChaining( 'atan2', atan2 );
1069
1138
  addMethodChaining( 'min', min );
1070
1139
  addMethodChaining( 'max', max );
1071
- addMethodChaining( 'step', step );
1140
+ addMethodChaining( 'step', stepElement );
1072
1141
  addMethodChaining( 'reflect', reflect );
1073
1142
  addMethodChaining( 'distance', distance );
1074
1143
  addMethodChaining( 'dot', dot );
@@ -1087,4 +1156,6 @@ addMethodChaining( 'difference', difference );
1087
1156
  addMethodChaining( 'saturate', saturate );
1088
1157
  addMethodChaining( 'cbrt', cbrt );
1089
1158
  addMethodChaining( 'transpose', transpose );
1159
+ addMethodChaining( 'determinant', determinant );
1160
+ addMethodChaining( 'inverse', inverse );
1090
1161
  addMethodChaining( 'rand', rand );