super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -0,0 +1,433 @@
1
+ import { float, Fn, If, nodeProxyIntent, uint, int, uvec2, uvec3, uvec4, ivec2, ivec3, ivec4 } from '../tsl/TSLCore.js';
2
+ import { bitcast, floatBitsToUint } from './BitcastNode.js';
3
+ import MathNode, { negate } from './MathNode.js';
4
+
5
+ const registeredBitcountFunctions = {};
6
+
7
+ /**
8
+ * This node represents an operation that counts the bits of a piece of shader data.
9
+ *
10
+ * @augments MathNode
11
+ */
12
+ class BitcountNode extends MathNode {
13
+
14
+ static get type() {
15
+
16
+ return 'BitcountNode';
17
+
18
+ }
19
+
20
+ /**
21
+ * Constructs a new math node.
22
+ *
23
+ * @param {'countTrailingZeros'|'countLeadingZeros'|'countOneBits'} method - The method name.
24
+ * @param {Node} aNode - The first input.
25
+ */
26
+ constructor( method, aNode ) {
27
+
28
+ super( method, aNode );
29
+
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
37
+ this.isBitcountNode = true;
38
+
39
+ }
40
+
41
+ /**
42
+ * Casts the input value of the function to an integer if necessary.
43
+ *
44
+ * @private
45
+ * @param {Node<uint>|Node<int>} inputNode - The input value.
46
+ * @param {Node<uint>} outputNode - The output value.
47
+ * @param {string} elementType - The type of the input value.
48
+ */
49
+ _resolveElementType( inputNode, outputNode, elementType ) {
50
+
51
+ if ( elementType === 'int' ) {
52
+
53
+ outputNode.assign( bitcast( inputNode, 'uint' ) );
54
+
55
+ } else {
56
+
57
+ outputNode.assign( inputNode );
58
+
59
+ }
60
+
61
+ }
62
+
63
+ _returnDataNode( inputType ) {
64
+
65
+ switch ( inputType ) {
66
+
67
+ case 'uint': {
68
+
69
+ return uint;
70
+
71
+ }
72
+
73
+ case 'int': {
74
+
75
+ return int;
76
+
77
+ }
78
+
79
+ case 'uvec2': {
80
+
81
+ return uvec2;
82
+
83
+ }
84
+
85
+ case 'uvec3': {
86
+
87
+ return uvec3;
88
+
89
+ }
90
+
91
+ case 'uvec4': {
92
+
93
+ return uvec4;
94
+
95
+ }
96
+
97
+ case 'ivec2': {
98
+
99
+ return ivec2;
100
+
101
+ }
102
+
103
+ case 'ivec3': {
104
+
105
+ return ivec3;
106
+
107
+ }
108
+
109
+ case 'ivec4': {
110
+
111
+ return ivec4;
112
+
113
+ }
114
+
115
+ }
116
+
117
+ }
118
+
119
+ /**
120
+ * Creates and registers a reusable GLSL function that emulates the behavior of countTrailingZeros.
121
+ *
122
+ * @private
123
+ * @param {string} method - The name of the function to create.
124
+ * @param {string} elementType - The type of the input value.
125
+ * @returns {Function} - The generated function
126
+ */
127
+ _createTrailingZerosBaseLayout( method, elementType ) {
128
+
129
+ const outputConvertNode = this._returnDataNode( elementType );
130
+
131
+ const fnDef = Fn( ( [ value ] ) => {
132
+
133
+ const v = uint( 0.0 );
134
+
135
+ this._resolveElementType( value, v, elementType );
136
+
137
+ const f = float( v.bitAnd( negate( v ) ) );
138
+ const uintBits = floatBitsToUint( f );
139
+
140
+ const numTrailingZeros = ( uintBits.shiftRight( 23 ) ).sub( 127 );
141
+
142
+ return outputConvertNode( numTrailingZeros );
143
+
144
+ } ).setLayout( {
145
+ name: method,
146
+ type: elementType,
147
+ inputs: [
148
+ { name: 'value', type: elementType }
149
+ ]
150
+ } );
151
+
152
+ return fnDef;
153
+
154
+ }
155
+
156
+ /**
157
+ * Creates and registers a reusable GLSL function that emulates the behavior of countLeadingZeros.
158
+ *
159
+ * @private
160
+ * @param {string} method - The name of the function to create.
161
+ * @param {string} elementType - The type of the input value.
162
+ * @returns {Function} - The generated function
163
+ */
164
+ _createLeadingZerosBaseLayout( method, elementType ) {
165
+
166
+ const outputConvertNode = this._returnDataNode( elementType );
167
+
168
+ const fnDef = Fn( ( [ value ] ) => {
169
+
170
+ If( value.equal( uint( 0 ) ), () => {
171
+
172
+ return uint( 32 );
173
+
174
+ } );
175
+
176
+ const v = uint( 0 );
177
+ const n = uint( 0 );
178
+ this._resolveElementType( value, v, elementType );
179
+
180
+ If( v.shiftRight( 16 ).equal( 0 ), () => {
181
+
182
+ n.addAssign( 16 );
183
+ v.shiftLeftAssign( 16 );
184
+
185
+ } );
186
+
187
+ If( v.shiftRight( 24 ).equal( 0 ), () => {
188
+
189
+ n.addAssign( 8 );
190
+ v.shiftLeftAssign( 8 );
191
+
192
+ } );
193
+
194
+ If( v.shiftRight( 28 ).equal( 0 ), () => {
195
+
196
+ n.addAssign( 4 );
197
+ v.shiftLeftAssign( 4 );
198
+
199
+ } );
200
+
201
+ If( v.shiftRight( 30 ).equal( 0 ), () => {
202
+
203
+ n.addAssign( 2 );
204
+ v.shiftLeftAssign( 2 );
205
+
206
+ } );
207
+
208
+ If( v.shiftRight( 31 ).equal( 0 ), () => {
209
+
210
+ n.addAssign( 1 );
211
+
212
+ } );
213
+
214
+ return outputConvertNode( n );
215
+
216
+ } ).setLayout( {
217
+ name: method,
218
+ type: elementType,
219
+ inputs: [
220
+ { name: 'value', type: elementType }
221
+ ]
222
+ } );
223
+
224
+ return fnDef;
225
+
226
+ }
227
+
228
+ /**
229
+ * Creates and registers a reusable GLSL function that emulates the behavior of countOneBits.
230
+ *
231
+ * @private
232
+ * @param {string} method - The name of the function to create.
233
+ * @param {string} elementType - The type of the input value.
234
+ * @returns {Function} - The generated function
235
+ */
236
+ _createOneBitsBaseLayout( method, elementType ) {
237
+
238
+ const outputConvertNode = this._returnDataNode( elementType );
239
+
240
+ const fnDef = Fn( ( [ value ] ) => {
241
+
242
+ const v = uint( 0.0 );
243
+
244
+ this._resolveElementType( value, v, elementType );
245
+
246
+ v.assign( v.sub( v.shiftRight( uint( 1 ) ).bitAnd( uint( 0x55555555 ) ) ) );
247
+ v.assign( v.bitAnd( uint( 0x33333333 ) ).add( v.shiftRight( uint( 2 ) ).bitAnd( uint( 0x33333333 ) ) ) );
248
+
249
+ const numBits = v.add( v.shiftRight( uint( 4 ) ) ).bitAnd( uint( 0xF0F0F0F ) ).mul( uint( 0x1010101 ) ).shiftRight( uint( 24 ) );
250
+
251
+ return outputConvertNode( numBits );
252
+
253
+ } ).setLayout( {
254
+ name: method,
255
+ type: elementType,
256
+ inputs: [
257
+ { name: 'value', type: elementType }
258
+ ]
259
+ } );
260
+
261
+ return fnDef;
262
+
263
+ }
264
+
265
+ /**
266
+ * Creates and registers a reusable GLSL function that emulates the behavior of the specified bitcount function.
267
+ * including considerations for component-wise bitcounts on vector type inputs.
268
+ *
269
+ * @private
270
+ * @param {string} method - The name of the function to create.
271
+ * @param {string} inputType - The type of the input value.
272
+ * @param {number} typeLength - The vec length of the input value.
273
+ * @param {Function} baseFn - The base function that operates on an individual component of the vector.
274
+ * @returns {Function} - The alias function for the specified bitcount method.
275
+ */
276
+ _createMainLayout( method, inputType, typeLength, baseFn ) {
277
+
278
+ const outputConvertNode = this._returnDataNode( inputType );
279
+
280
+ const fnDef = Fn( ( [ value ] ) => {
281
+
282
+ if ( typeLength === 1 ) {
283
+
284
+ return outputConvertNode( baseFn( value ) );
285
+
286
+ } else {
287
+
288
+ const vec = outputConvertNode( 0 );
289
+
290
+ const components = [ 'x', 'y', 'z', 'w' ];
291
+ for ( let i = 0; i < typeLength; i ++ ) {
292
+
293
+ const component = components[ i ];
294
+
295
+ vec[ component ].assign( baseFn( value[ component ] ) );
296
+
297
+ }
298
+
299
+ return vec;
300
+
301
+ }
302
+
303
+ } ).setLayout( {
304
+ name: method,
305
+ type: inputType,
306
+ inputs: [
307
+ { name: 'value', type: inputType }
308
+ ]
309
+ } );
310
+
311
+ return fnDef;
312
+
313
+ }
314
+
315
+ setup( builder ) {
316
+
317
+ const { method, aNode } = this;
318
+
319
+ const { renderer } = builder;
320
+
321
+ if ( renderer.backend.isWebGPUBackend ) {
322
+
323
+ // use built-in WGSL functions for WebGPU
324
+
325
+ return super.setup( builder );
326
+
327
+ }
328
+
329
+ const inputType = this.getInputType( builder );
330
+ const elementType = builder.getElementType( inputType );
331
+
332
+ const typeLength = builder.getTypeLength( inputType );
333
+
334
+ const baseMethod = `${method}_base_${elementType}`;
335
+ const newMethod = `${method}_${inputType}`;
336
+
337
+ let baseFn = registeredBitcountFunctions[ baseMethod ];
338
+
339
+ if ( baseFn === undefined ) {
340
+
341
+ switch ( method ) {
342
+
343
+ case BitcountNode.COUNT_LEADING_ZEROS: {
344
+
345
+ baseFn = this._createLeadingZerosBaseLayout( baseMethod, elementType );
346
+ break;
347
+
348
+ }
349
+
350
+ case BitcountNode.COUNT_TRAILING_ZEROS: {
351
+
352
+ baseFn = this._createTrailingZerosBaseLayout( baseMethod, elementType );
353
+ break;
354
+
355
+ }
356
+
357
+ case BitcountNode.COUNT_ONE_BITS: {
358
+
359
+ baseFn = this._createOneBitsBaseLayout( baseMethod, elementType );
360
+ break;
361
+
362
+ }
363
+
364
+ }
365
+
366
+ registeredBitcountFunctions[ baseMethod ] = baseFn;
367
+
368
+ }
369
+
370
+ let fn = registeredBitcountFunctions[ newMethod ];
371
+
372
+ if ( fn === undefined ) {
373
+
374
+ fn = this._createMainLayout( newMethod, inputType, typeLength, baseFn );
375
+ registeredBitcountFunctions[ newMethod ] = fn;
376
+
377
+ }
378
+
379
+ const output = Fn( () => {
380
+
381
+ return fn(
382
+ aNode,
383
+ );
384
+
385
+ } );
386
+
387
+ return output();
388
+
389
+ }
390
+
391
+ }
392
+
393
+ export default BitcountNode;
394
+
395
+ BitcountNode.COUNT_TRAILING_ZEROS = 'countTrailingZeros';
396
+ BitcountNode.COUNT_LEADING_ZEROS = 'countLeadingZeros';
397
+ BitcountNode.COUNT_ONE_BITS = 'countOneBits';
398
+
399
+ /**
400
+ * Finds the number of consecutive 0 bits from the least significant bit of the input value,
401
+ * which is also the index of the least significant bit of the input value.
402
+ *
403
+ * Can only be used with {@link WebGPURenderer} and a WebGPU backend.
404
+ *
405
+ * @tsl
406
+ * @function
407
+ * @param {Node | number} x - The input value.
408
+ * @returns {Node}
409
+ */
410
+ export const countTrailingZeros = /*@__PURE__*/ nodeProxyIntent( BitcountNode, BitcountNode.COUNT_TRAILING_ZEROS ).setParameterLength( 1 );
411
+
412
+ /**
413
+ * Finds the number of consecutive 0 bits starting from the most significant bit of the input value.
414
+ *
415
+ * Can only be used with {@link WebGPURenderer} and a WebGPU backend.
416
+ *
417
+ * @tsl
418
+ * @function
419
+ * @param {Node | number} x - The input value.
420
+ * @returns {Node}
421
+ */
422
+ export const countLeadingZeros = /*@__PURE__*/ nodeProxyIntent( BitcountNode, BitcountNode.COUNT_LEADING_ZEROS ).setParameterLength( 1 );
423
+
424
+ /**
425
+ * Finds the number of '1' bits set in the input value
426
+ *
427
+ * Can only be used with {@link WebGPURenderer} and a WebGPU backend.
428
+ *
429
+ * @tsl
430
+ * @function
431
+ * @returns {Node}
432
+ */
433
+ export const countOneBits = /*@__PURE__*/ nodeProxyIntent( BitcountNode, BitcountNode.COUNT_ONE_BITS ).setParameterLength( 1 );
@@ -66,7 +66,7 @@ class ConditionalNode extends Node {
66
66
  * @param {NodeBuilder} builder - The current node builder.
67
67
  * @return {string} The node type.
68
68
  */
69
- getNodeType( builder ) {
69
+ generateNodeType( builder ) {
70
70
 
71
71
  const { ifNode, elseNode } = builder.getNodeProperties( this );
72
72
 
@@ -174,7 +174,7 @@ class ConditionalNode extends Node {
174
174
 
175
175
  if ( functionNode === null ) {
176
176
 
177
- warn( 'TSL: Return statement used in an inline \'Fn()\'. Define a layout struct to allow return values.' );
177
+ warn( 'TSL: Return statement used in an inline \'Fn()\'. Define a layout struct to allow return values.', this.stackTrace );
178
178
 
179
179
  ifSnippet = '// ' + ifSnippet;
180
180
 
@@ -204,7 +204,7 @@ class ConditionalNode extends Node {
204
204
 
205
205
  if ( functionNode === null ) {
206
206
 
207
- warn( 'TSL: Return statement used in an inline \'Fn()\'. Define a layout struct to allow return values.' );
207
+ warn( 'TSL: Return statement used in an inline \'Fn()\'. Define a layout struct to allow return values.', this.stackTrace );
208
208
 
209
209
  elseSnippet = '// ' + elseSnippet;
210
210
 
@@ -1,5 +1,5 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { sub, mul, div, mod, equal } from './OperatorNode.js';
2
+ import { sub, mul, div, mod } from './OperatorNode.js';
3
3
  import { addMethodChaining, nodeObject, nodeProxyIntent, float, vec2, vec3, vec4, Fn } from '../tsl/TSLCore.js';
4
4
  import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../../constants.js';
5
5
  import { warn } from '../../utils.js';
@@ -133,7 +133,7 @@ class MathNode extends TempNode {
133
133
  * @param {NodeBuilder} builder - The current node builder.
134
134
  * @return {string} The node type.
135
135
  */
136
- getNodeType( builder ) {
136
+ generateNodeType( builder ) {
137
137
 
138
138
  const method = this.method;
139
139
 
@@ -291,7 +291,7 @@ class MathNode extends TempNode {
291
291
 
292
292
  if ( builder.shaderStage !== 'fragment' && ( method === MathNode.DFDX || method === MathNode.DFDY ) ) {
293
293
 
294
- warn( `TSL: '${ method }' is not supported in the ${ builder.shaderStage } stage.` );
294
+ warn( `TSL: '${ method }' is not supported in the ${ builder.shaderStage } stage.`, this.stackTrace );
295
295
 
296
296
  method = '/*' + method + '*/';
297
297
 
@@ -345,11 +345,17 @@ MathNode.CEIL = 'ceil';
345
345
  MathNode.NORMALIZE = 'normalize';
346
346
  MathNode.FRACT = 'fract';
347
347
  MathNode.SIN = 'sin';
348
+ MathNode.SINH = 'sinh';
348
349
  MathNode.COS = 'cos';
350
+ MathNode.COSH = 'cosh';
349
351
  MathNode.TAN = 'tan';
352
+ MathNode.TANH = 'tanh';
350
353
  MathNode.ASIN = 'asin';
354
+ MathNode.ASINH = 'asinh';
351
355
  MathNode.ACOS = 'acos';
356
+ MathNode.ACOSH = 'acosh';
352
357
  MathNode.ATAN = 'atan';
358
+ MathNode.ATANH = 'atanh';
353
359
  MathNode.ABS = 'abs';
354
360
  MathNode.SIGN = 'sign';
355
361
  MathNode.LENGTH = 'length';
@@ -590,6 +596,16 @@ export const fract = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FRACT ).s
590
596
  */
591
597
  export const sin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SIN ).setParameterLength( 1 );
592
598
 
599
+ /**
600
+ * Returns the hyperbolic sine of the parameter.
601
+ *
602
+ * @tsl
603
+ * @function
604
+ * @param {Node | number} x - The parameter.
605
+ * @returns {Node}
606
+ */
607
+ export const sinh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SINH ).setParameterLength( 1 );
608
+
593
609
  /**
594
610
  * Returns the cosine of the parameter.
595
611
  *
@@ -600,6 +616,16 @@ export const sin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SIN ).setPa
600
616
  */
601
617
  export const cos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.COS ).setParameterLength( 1 );
602
618
 
619
+ /**
620
+ * Returns the hyperbolic cosine of the parameter.
621
+ *
622
+ * @tsl
623
+ * @function
624
+ * @param {Node | number} x - The parameter.
625
+ * @returns {Node}
626
+ */
627
+ export const cosh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.COSH ).setParameterLength( 1 );
628
+
603
629
  /**
604
630
  * Returns the tangent of the parameter.
605
631
  *
@@ -610,6 +636,16 @@ export const cos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.COS ).setPa
610
636
  */
611
637
  export const tan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TAN ).setParameterLength( 1 );
612
638
 
639
+ /**
640
+ * Returns the hyperbolic tangent of the parameter.
641
+ *
642
+ * @tsl
643
+ * @function
644
+ * @param {Node | number} x - The parameter.
645
+ * @returns {Node}
646
+ */
647
+ export const tanh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TANH ).setParameterLength( 1 );
648
+
613
649
  /**
614
650
  * Returns the arcsine of the parameter.
615
651
  *
@@ -620,6 +656,16 @@ export const tan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TAN ).setPa
620
656
  */
621
657
  export const asin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ASIN ).setParameterLength( 1 );
622
658
 
659
+ /**
660
+ * Returns the inverse hyperbolic sine of the parameter.
661
+ *
662
+ * @tsl
663
+ * @function
664
+ * @param {Node | number} x - The parameter.
665
+ * @returns {Node}
666
+ */
667
+ export const asinh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ASINH ).setParameterLength( 1 );
668
+
623
669
  /**
624
670
  * Returns the arccosine of the parameter.
625
671
  *
@@ -630,6 +676,16 @@ export const asin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ASIN ).set
630
676
  */
631
677
  export const acos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ACOS ).setParameterLength( 1 );
632
678
 
679
+ /**
680
+ * Returns the inverse hyperbolic cosine of the parameter.
681
+ *
682
+ * @tsl
683
+ * @function
684
+ * @param {Node | number} x - The parameter.
685
+ * @returns {Node}
686
+ */
687
+ export const acosh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ACOSH ).setParameterLength( 1 );
688
+
633
689
  /**
634
690
  * Returns the arc-tangent of the parameter.
635
691
  * If two parameters are provided, the result is `atan2(y/x)`.
@@ -642,6 +698,16 @@ export const acos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ACOS ).set
642
698
  */
643
699
  export const atan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ATAN ).setParameterLength( 1, 2 );
644
700
 
701
+ /**
702
+ * Returns the inverse hyperbolic tangent of the parameter.
703
+ *
704
+ * @tsl
705
+ * @function
706
+ * @param {Node | number} x - The parameter.
707
+ * @returns {Node}
708
+ */
709
+ export const atanh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ATANH ).setParameterLength( 1 );
710
+
645
711
  /**
646
712
  * Returns the absolute value of the parameter.
647
713
  *
@@ -784,23 +850,6 @@ export const inverse = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.INVERSE
784
850
 
785
851
  // 2 inputs
786
852
 
787
- /**
788
- * Returns `true` if `x` equals `y`.
789
- *
790
- * @tsl
791
- * @function
792
- * @param {Node | number} x - The first parameter.
793
- * @param {Node | number} y - The second parameter.
794
- * @deprecated since r175. Use {@link equal} instead.
795
- * @returns {Node<bool>}
796
- */
797
- export const equals = ( x, y ) => { // @deprecated, r172
798
-
799
- warn( 'TSL: "equals" is deprecated. Use "equal" inside a vector instead, like: "bvec*( equal( ... ) )"' );
800
- return equal( x, y );
801
-
802
- };
803
-
804
853
  /**
805
854
  * Returns the least of the given values.
806
855
  *
@@ -981,7 +1030,7 @@ export const mix = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MIX ).setPa
981
1030
  * @param {Node | number} [high=1] - The upper bound.
982
1031
  * @returns {Node}
983
1032
  */
984
- export const clamp = ( value, low = 0, high = 1 ) => nodeObject( new MathNode( MathNode.CLAMP, nodeObject( value ), nodeObject( low ), nodeObject( high ) ) );
1033
+ export const clamp = ( value, low = 0, high = 1 ) => new MathNode( MathNode.CLAMP, nodeObject( value ), nodeObject( low ), nodeObject( high ) );
985
1034
 
986
1035
  /**
987
1036
  * Constrains a value between `0` and `1`.
@@ -1081,24 +1130,6 @@ export const smoothstepElement = ( x, low, high ) => smoothstep( low, high, x );
1081
1130
  */
1082
1131
  export const stepElement = ( x, edge ) => step( edge, x );
1083
1132
 
1084
- /**
1085
- * Returns the arc-tangent of the quotient of its parameters.
1086
- *
1087
- * @tsl
1088
- * @function
1089
- * @deprecated since r172. Use {@link atan} instead.
1090
- *
1091
- * @param {Node | number} y - The y parameter.
1092
- * @param {Node | number} x - The x parameter.
1093
- * @returns {Node}
1094
- */
1095
- export const atan2 = ( y, x ) => { // @deprecated, r172
1096
-
1097
- warn( 'TSL: "atan2" is overloaded. Use "atan" instead.' );
1098
- return atan( y, x );
1099
-
1100
- };
1101
-
1102
1133
  // GLSL alias function
1103
1134
 
1104
1135
  export const faceforward = faceForward;
@@ -1108,7 +1139,6 @@ export const inversesqrt = inverseSqrt;
1108
1139
 
1109
1140
  addMethodChaining( 'all', all );
1110
1141
  addMethodChaining( 'any', any );
1111
- addMethodChaining( 'equals', equals );
1112
1142
 
1113
1143
  addMethodChaining( 'radians', radians );
1114
1144
  addMethodChaining( 'degrees', degrees );
@@ -1123,11 +1153,17 @@ addMethodChaining( 'ceil', ceil );
1123
1153
  addMethodChaining( 'normalize', normalize );
1124
1154
  addMethodChaining( 'fract', fract );
1125
1155
  addMethodChaining( 'sin', sin );
1156
+ addMethodChaining( 'sinh', sinh );
1126
1157
  addMethodChaining( 'cos', cos );
1158
+ addMethodChaining( 'cosh', cosh );
1127
1159
  addMethodChaining( 'tan', tan );
1160
+ addMethodChaining( 'tanh', tanh );
1128
1161
  addMethodChaining( 'asin', asin );
1162
+ addMethodChaining( 'asinh', asinh );
1129
1163
  addMethodChaining( 'acos', acos );
1164
+ addMethodChaining( 'acosh', acosh );
1130
1165
  addMethodChaining( 'atan', atan );
1166
+ addMethodChaining( 'atanh', atanh );
1131
1167
  addMethodChaining( 'abs', abs );
1132
1168
  addMethodChaining( 'sign', sign );
1133
1169
  addMethodChaining( 'length', length );
@@ -1140,7 +1176,6 @@ addMethodChaining( 'round', round );
1140
1176
  addMethodChaining( 'reciprocal', reciprocal );
1141
1177
  addMethodChaining( 'trunc', trunc );
1142
1178
  addMethodChaining( 'fwidth', fwidth );
1143
- addMethodChaining( 'atan2', atan2 );
1144
1179
  addMethodChaining( 'min', min );
1145
1180
  addMethodChaining( 'max', max );
1146
1181
  addMethodChaining( 'step', stepElement );
@@ -1,5 +1,6 @@
1
1
  import { WebGLCoordinateSystem } from '../../constants.js';
2
2
  import TempNode from '../core/TempNode.js';
3
+ import StackTrace from '../core/StackTrace.js';
3
4
  import { addMethodChaining, Fn, int, nodeProxyIntent } from '../tsl/TSLCore.js';
4
5
  import { warn } from '../../utils.js';
5
6
 
@@ -107,7 +108,7 @@ class OperatorNode extends TempNode {
107
108
  * @param {?string} [output=null] - The output type.
108
109
  * @return {string} The node type.
109
110
  */
110
- getNodeType( builder, output = null ) {
111
+ generateNodeType( builder, output = null ) {
111
112
 
112
113
  const op = this.op;
113
114
 
@@ -743,7 +744,7 @@ addMethodChaining( 'decrement', decrement );
743
744
  */
744
745
  export const modInt = ( a, b ) => { // @deprecated, r175
745
746
 
746
- warn( 'TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.' );
747
+ warn( 'TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.', new StackTrace() );
747
748
  return mod( int( a ), int( b ) );
748
749
 
749
750
  };