super-three 0.170.1 → 0.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -28,8 +28,21 @@ const getGradientIrradiance = /*@__PURE__*/ Fn( ( { normal, lightDirection, buil
28
28
 
29
29
  } );
30
30
 
31
+ /**
32
+ * Represents the lighting model for a toon material. Used in {@link MeshToonNodeMaterial}.
33
+ *
34
+ * @augments LightingModel
35
+ */
31
36
  class ToonLightingModel extends LightingModel {
32
37
 
38
+ /**
39
+ * Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is
40
+ * reduced to a small number of discrete shades to create a comic-like, flat look.
41
+ *
42
+ * @param {Object} input - The input data.
43
+ * @param {StackNode} stack - The current stack.
44
+ * @param {NodeBuilder} builder - The current node builder.
45
+ */
33
46
  direct( { lightDirection, lightColor, reflectedLight }, stack, builder ) {
34
47
 
35
48
  const irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );
@@ -38,6 +51,13 @@ class ToonLightingModel extends LightingModel {
38
51
 
39
52
  }
40
53
 
54
+ /**
55
+ * Implements the indirect lighting.
56
+ *
57
+ * @param {ContextNode} input - The current node context.
58
+ * @param {StackNode} stack - The current stack.
59
+ * @param {NodeBuilder} builder - The current node builder.
60
+ */
41
61
  indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
42
62
 
43
63
  reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
@@ -1,8 +1,6 @@
1
1
  import { abs, add, ceil, clamp, dFdx, dFdy, exp2, float, floor, Fn, fract, length, log2, max, min, mul, sin, sub, vec2, vec3 } from '../../tsl/TSLBase.js';
2
2
 
3
- /**
4
- * See: https://casual-effects.com/research/Wyman2017Hashed/index.html
5
- */
3
+ // See: https://casual-effects.com/research/Wyman2017Hashed/index.html
6
4
 
7
5
  const ALPHA_HASH_SCALE = 0.05; // Derived from trials only, and may be changed.
8
6
 
@@ -1,8 +1,23 @@
1
1
  import { positionWorld } from '../../accessors/Position.js';
2
2
  import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
3
3
 
4
- // https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html
4
+ /** @module getParallaxCorrectNormal **/
5
5
 
6
+ /**
7
+ * This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).
8
+ *
9
+ * Reference: {@link https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html}
10
+ *
11
+ * ```js
12
+ * const uvNode = getParallaxCorrectNormal( reflectVector, vec3( 200, 100, 100 ), vec3( 0, - 50, 0 ) );
13
+ * material.envNode = pmremTexture( renderTarget.texture, uvNode );
14
+ * ```
15
+ * @function
16
+ * @param {Node<vec3>} normal - The normal to correct.
17
+ * @param {Node<vec3>} cubeSize - The cube size should reflect the size of the environment (BPCEM is usually applied in closed environments like rooms).
18
+ * @param {Node<vec3>} cubePos - The cube position.
19
+ * @return {Node<vec3>} The parallax corrected normal.
20
+ */
6
21
  const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
7
22
 
8
23
  const nDir = normalize( normal ).toVar( 'nDir' );
@@ -9,9 +9,22 @@ import { Vector4 } from '../../math/Vector4.js';
9
9
  import { MathUtils } from '../../math/MathUtils.js';
10
10
  import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
11
11
 
12
+ /** @module RangeNode **/
13
+
12
14
  let min = null;
13
15
  let max = null;
14
16
 
17
+ /**
18
+ * `RangeNode` generates random instanced attribute data in a defined range.
19
+ * An exemplary use case for this utility node is to generate random per-instance
20
+ * colors:
21
+ * ```js
22
+ * const material = new MeshBasicNodeMaterial();
23
+ * material.colorNode = range( new Color( 0x000000 ), new Color( 0xFFFFFF ) );
24
+ * const mesh = new InstancedMesh( geometry, material, count );
25
+ * ```
26
+ * @augments Node
27
+ */
15
28
  class RangeNode extends Node {
16
29
 
17
30
  static get type() {
@@ -20,15 +33,40 @@ class RangeNode extends Node {
20
33
 
21
34
  }
22
35
 
36
+ /**
37
+ * Constructs a new range node.
38
+ *
39
+ * @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
40
+ * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
41
+ */
23
42
  constructor( minNode = float(), maxNode = float() ) {
24
43
 
25
44
  super();
26
45
 
46
+ /**
47
+ * A node defining the lower bound of the range.
48
+ *
49
+ * @type {Node<any>}
50
+ * @default float()
51
+ */
27
52
  this.minNode = minNode;
53
+
54
+ /**
55
+ * A node defining the upper bound of the range.
56
+ *
57
+ * @type {Node<any>}
58
+ * @default float()
59
+ */
28
60
  this.maxNode = maxNode;
29
61
 
30
62
  }
31
63
 
64
+ /**
65
+ * Returns the vector length which is computed based on the range definition.
66
+ *
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ * @return {Number} The vector length.
69
+ */
32
70
  getVectorLength( builder ) {
33
71
 
34
72
  const minLength = builder.getTypeLength( getValueType( this.minNode.value ) );
@@ -38,6 +76,12 @@ class RangeNode extends Node {
38
76
 
39
77
  }
40
78
 
79
+ /**
80
+ * This method is overwritten since the node type is inferred from range definition.
81
+ *
82
+ * @param {NodeBuilder} builder - The current node builder.
83
+ * @return {String} The node type.
84
+ */
41
85
  getNodeType( builder ) {
42
86
 
43
87
  return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
@@ -65,11 +109,11 @@ class RangeNode extends Node {
65
109
  max.setScalar( 0 );
66
110
 
67
111
  if ( minLength === 1 ) min.setScalar( minValue );
68
- else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b );
112
+ else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );
69
113
  else min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );
70
114
 
71
115
  if ( maxLength === 1 ) max.setScalar( maxValue );
72
- else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b );
116
+ else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );
73
117
  else max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );
74
118
 
75
119
  const stride = 4;
@@ -118,4 +162,12 @@ class RangeNode extends Node {
118
162
 
119
163
  export default RangeNode;
120
164
 
165
+ /**
166
+ * TSL function for creating a range node.
167
+ *
168
+ * @function
169
+ * @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
170
+ * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
171
+ * @returns {RangeNode}
172
+ */
121
173
  export const range = /*@__PURE__*/ nodeProxy( RangeNode );
@@ -1,6 +1,19 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module AtomicFunctionNode **/
5
+
6
+ /**
7
+ * `AtomicFunctionNode` represents any function that can operate on atomic variable types
8
+ * within a shader. In an atomic function, any modifiation to an atomic variable will
9
+ * occur as an indivisble step with a defined order relative to other modifications.
10
+ * Accordingly, even if multiple atomic functions are modifying an atomic variable at once
11
+ * atomic operations will not interfer with each other.
12
+ *
13
+ * This node can only be used with a WebGPU backend.
14
+ *
15
+ * @augments TempNode
16
+ */
4
17
  class AtomicFunctionNode extends TempNode {
5
18
 
6
19
  static get type() {
@@ -9,24 +22,68 @@ class AtomicFunctionNode extends TempNode {
9
22
 
10
23
  }
11
24
 
25
+ /**
26
+ * Constructs a new atomic function node.
27
+ *
28
+ * @param {String} method - The signature of the atomic function to construct.
29
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
30
+ * @param {Node} valueNode - The value that mutates the atomic variable.
31
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
32
+ */
12
33
  constructor( method, pointerNode, valueNode, storeNode = null ) {
13
34
 
14
35
  super( 'uint' );
15
36
 
37
+ /**
38
+ * The signature of the atomic function to construct.
39
+ *
40
+ * @type {String}
41
+ */
16
42
  this.method = method;
17
43
 
44
+ /**
45
+ * An atomic variable or element of an atomic buffer.
46
+ *
47
+ * @type {Node}
48
+ */
18
49
  this.pointerNode = pointerNode;
50
+
51
+ /**
52
+ * A value that modifies the atomic variable.
53
+ *
54
+ * @type {Node}
55
+ */
19
56
  this.valueNode = valueNode;
57
+
58
+ /**
59
+ * A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
60
+ *
61
+ * @type {Node?}
62
+ * @default null
63
+ */
20
64
  this.storeNode = storeNode;
21
65
 
22
66
  }
23
67
 
68
+ /**
69
+ * Overwrites the default implementation to return the type of
70
+ * the pointer node.
71
+ *
72
+ * @param {NodeBuilder} builder - The current node builder.
73
+ * @return {String} The input type.
74
+ */
24
75
  getInputType( builder ) {
25
76
 
26
77
  return this.pointerNode.getNodeType( builder );
27
78
 
28
79
  }
29
80
 
81
+ /**
82
+ * Overwritten since the node type is inferred from the input type.
83
+ *
84
+ * @param {NodeBuilder} builder - The current node builder.
85
+ * @return {String} The node type.
86
+ */
30
87
  getNodeType( builder ) {
31
88
 
32
89
  return this.getInputType( builder );
@@ -78,9 +135,29 @@ AtomicFunctionNode.ATOMIC_XOR = 'atomicXor';
78
135
 
79
136
  export default AtomicFunctionNode;
80
137
 
138
+ /**
139
+ * TSL function for creating an atomic function node.
140
+ *
141
+ * @function
142
+ * @param {String} method - The signature of the atomic function to construct.
143
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
144
+ * @param {Node} valueNode - The value that mutates the atomic variable.
145
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
146
+ * @returns {AtomicFunctionNode}
147
+ */
81
148
  const atomicNode = nodeProxy( AtomicFunctionNode );
82
149
 
83
- export const atomicFunc = ( method, pointerNode, valueNode, storeNode ) => {
150
+ /**
151
+ * TSL function for appending an atomic function call into the programmatic flow of a compute shader.
152
+ *
153
+ * @function
154
+ * @param {String} method - The signature of the atomic function to construct.
155
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
156
+ * @param {Node} valueNode - The value that mutates the atomic variable.
157
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
158
+ * @returns {AtomicFunctionNode}
159
+ */
160
+ export const atomicFunc = ( method, pointerNode, valueNode, storeNode = null ) => {
84
161
 
85
162
  const node = atomicNode( method, pointerNode, valueNode, storeNode );
86
163
  node.append();
@@ -89,11 +166,90 @@ export const atomicFunc = ( method, pointerNode, valueNode, storeNode ) => {
89
166
 
90
167
  };
91
168
 
169
+ /**
170
+ * Stores a value in the atomic variable.
171
+ *
172
+ * @function
173
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
174
+ * @param {Node} valueNode - The value that mutates the atomic variable.
175
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
176
+ * @returns {AtomicFunctionNode}
177
+ */
92
178
  export const atomicStore = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_STORE, pointerNode, valueNode, storeNode );
179
+
180
+ /**
181
+ * Increments the value stored in the atomic variable.
182
+ *
183
+ * @function
184
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
185
+ * @param {Node} valueNode - The value that mutates the atomic variable.
186
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
187
+ * @returns {AtomicFunctionNode}
188
+ */
93
189
  export const atomicAdd = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_ADD, pointerNode, valueNode, storeNode );
190
+
191
+ /**
192
+ * Decrements the value stored in the atomic variable.
193
+ *
194
+ * @function
195
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
196
+ * @param {Node} valueNode - The value that mutates the atomic variable.
197
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
198
+ * @returns {AtomicFunctionNode}
199
+ */
94
200
  export const atomicSub = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_SUB, pointerNode, valueNode, storeNode );
201
+
202
+ /**
203
+ * Stores in an atomic variable the maximum between its current value and a parameter.
204
+ *
205
+ * @function
206
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
207
+ * @param {Node} valueNode - The value that mutates the atomic variable.
208
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
209
+ * @returns {AtomicFunctionNode}
210
+ */
95
211
  export const atomicMax = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_MAX, pointerNode, valueNode, storeNode );
212
+
213
+ /**
214
+ * Stores in an atomic variable the minimum between its current value and a parameter.
215
+ *
216
+ * @function
217
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
218
+ * @param {Node} valueNode - The value that mutates the atomic variable.
219
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
220
+ * @returns {AtomicFunctionNode}
221
+ */
96
222
  export const atomicMin = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_MIN, pointerNode, valueNode, storeNode );
223
+
224
+ /**
225
+ * Stores in an atomic variable the bitwise AND of its value with a parameter.
226
+ *
227
+ * @function
228
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
229
+ * @param {Node} valueNode - The value that mutates the atomic variable.
230
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
231
+ * @returns {AtomicFunctionNode}
232
+ */
97
233
  export const atomicAnd = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_AND, pointerNode, valueNode, storeNode );
234
+
235
+ /**
236
+ * Stores in an atomic variable the bitwise OR of its value with a parameter.
237
+ *
238
+ * @function
239
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
240
+ * @param {Node} valueNode - The value that mutates the atomic variable.
241
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
242
+ * @returns {AtomicFunctionNode}
243
+ */
98
244
  export const atomicOr = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_OR, pointerNode, valueNode, storeNode );
245
+
246
+ /**
247
+ * Stores in an atomic variable the bitwise XOR of its value with a parameter.
248
+ *
249
+ * @function
250
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
251
+ * @param {Node} valueNode - The value that mutates the atomic variable.
252
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
253
+ * @returns {AtomicFunctionNode}
254
+ */
99
255
  export const atomicXor = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_XOR, pointerNode, valueNode, storeNode );
@@ -1,8 +1,22 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module BarrierNode **/
5
+
6
+ /**
7
+ * Represents a GPU control barrier that synchronizes compute operations within a given scope.
8
+ *
9
+ * This node can only be used with a WebGPU backend.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class BarrierNode extends Node {
5
14
 
15
+ /**
16
+ * Constructs a new barrier node.
17
+ *
18
+ * @param {String} scope - The scope defines the behavior of the node.
19
+ */
6
20
  constructor( scope ) {
7
21
 
8
22
  super();
@@ -32,9 +46,42 @@ class BarrierNode extends Node {
32
46
 
33
47
  export default BarrierNode;
34
48
 
49
+ /**
50
+ * TSL function for creating a barrier node.
51
+ *
52
+ * @function
53
+ * @param {String} scope - The scope defines the behavior of the node..
54
+ * @returns {BarrierNode}
55
+ */
35
56
  const barrier = nodeProxy( BarrierNode );
36
57
 
58
+ /**
59
+ * TSL function for creating a workgroup barrier. All compute shader
60
+ * invocations must wait for each invocation within a workgroup to
61
+ * complete before the barrier can be surpassed.
62
+ *
63
+ * @function
64
+ * @returns {BarrierNode}
65
+ */
37
66
  export const workgroupBarrier = () => barrier( 'workgroup' ).append();
67
+
68
+ /**
69
+ * TSL function for creating a storage barrier. All invocations must
70
+ * wait for each access to variables within the 'storage' address space
71
+ * to complete before the barrier can be passed.
72
+ *
73
+ * @function
74
+ * @returns {BarrierNode}
75
+ */
38
76
  export const storageBarrier = () => barrier( 'storage' ).append();
77
+
78
+ /**
79
+ * TSL function for creating a texture barrier. All invocations must
80
+ * wait for each access to variables within the 'texture' address space
81
+ * to complete before the barrier can be passed.
82
+ *
83
+ * @function
84
+ * @returns {BarrierNode}
85
+ */
39
86
  export const textureBarrier = () => barrier( 'texture' ).append();
40
87
 
@@ -1,6 +1,16 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeObject } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module ComputeBuiltinNode **/
5
+
6
+ /**
7
+ * `ComputeBuiltinNode` represents a compute-scope builtin value that expose information
8
+ * about the currently running dispatch and/or the device it is running on.
9
+ *
10
+ * This node can only be used with a WebGPU backend.
11
+ *
12
+ * @augments Node
13
+ */
4
14
  class ComputeBuiltinNode extends Node {
5
15
 
6
16
  static get type() {
@@ -9,26 +19,56 @@ class ComputeBuiltinNode extends Node {
9
19
 
10
20
  }
11
21
 
22
+ /**
23
+ * Constructs a new compute builtin node.
24
+ *
25
+ * @param {String} builtinName - The built-in name.
26
+ * @param {String} nodeType - The node type.
27
+ */
12
28
  constructor( builtinName, nodeType ) {
13
29
 
14
30
  super( nodeType );
15
31
 
32
+ /**
33
+ * The built-in name.
34
+ *
35
+ * @private
36
+ * @type {String}
37
+ */
16
38
  this._builtinName = builtinName;
17
39
 
18
40
  }
19
41
 
42
+ /**
43
+ * This method is overwritten since hash is derived from the built-in name.
44
+ *
45
+ * @param {NodeBuilder} builder - The current node builder.
46
+ * @return {String} The hash.
47
+ */
20
48
  getHash( builder ) {
21
49
 
22
50
  return this.getBuiltinName( builder );
23
51
 
24
52
  }
25
53
 
54
+ /**
55
+ * This method is overwritten since the node type is simply derived from `nodeType`..
56
+ *
57
+ * @param {NodeBuilder} builder - The current node builder.
58
+ * @return {String} The node type.
59
+ */
26
60
  getNodeType( /*builder*/ ) {
27
61
 
28
62
  return this.nodeType;
29
63
 
30
64
  }
31
65
 
66
+ /**
67
+ * Sets the builtin name.
68
+ *
69
+ * @param {String} builtinName - The built-in name.
70
+ * @return {ComputeBuiltinNode} A reference to this node.
71
+ */
32
72
  setBuiltinName( builtinName ) {
33
73
 
34
74
  this._builtinName = builtinName;
@@ -37,12 +77,23 @@ class ComputeBuiltinNode extends Node {
37
77
 
38
78
  }
39
79
 
80
+ /**
81
+ * Returns the builtin name.
82
+ *
83
+ * @param {NodeBuilder} builder - The current node builder.
84
+ * @return {String} The builtin name.
85
+ */
40
86
  getBuiltinName( /*builder*/ ) {
41
87
 
42
88
  return this._builtinName;
43
89
 
44
90
  }
45
91
 
92
+ /**
93
+ * Whether the current node builder has the builtin or not.
94
+ *
95
+ * @param {NodeBuilder} builder - The current node builder.
96
+ */
46
97
  hasBuiltin( builder ) {
47
98
 
48
99
  builder.hasBuiltin( this._builtinName );
@@ -89,10 +140,85 @@ class ComputeBuiltinNode extends Node {
89
140
 
90
141
  export default ComputeBuiltinNode;
91
142
 
143
+ /**
144
+ * TSL function for creating a compute builtin node.
145
+ *
146
+ * @function
147
+ * @param {String} name - The built-in name.
148
+ * @param {String} nodeType - The node type.
149
+ * @returns {ComputeBuiltinNode}
150
+ */
92
151
  const computeBuiltin = ( name, nodeType ) => nodeObject( new ComputeBuiltinNode( name, nodeType ) );
93
152
 
153
+ /**
154
+ * TSL function for creating a `numWorkgroups` builtin node.
155
+ * Represents the number of workgroups dispatched by the compute shader.
156
+ * ```js
157
+ * // Run 512 invocations/threads with a workgroup size of 128.
158
+ * const computeFn = Fn(() => {
159
+ *
160
+ * // numWorkgroups.x = 4
161
+ * storageBuffer.element(0).assign(numWorkgroups.x)
162
+ *
163
+ * })().compute(512, [128]);
164
+ *
165
+ * // Run 512 invocations/threads with the default workgroup size of 64.
166
+ * const computeFn = Fn(() => {
167
+ *
168
+ * // numWorkgroups.x = 8
169
+ * storageBuffer.element(0).assign(numWorkgroups.x)
170
+ *
171
+ * })().compute(512);
172
+ * ```
173
+ *
174
+ * @function
175
+ * @returns {ComputeBuiltinNode<uvec3>}
176
+ */
94
177
  export const numWorkgroups = /*@__PURE__*/ computeBuiltin( 'numWorkgroups', 'uvec3' );
178
+
179
+ /**
180
+ * TSL function for creating a `workgroupId` builtin node.
181
+ * Represents the 3-dimensional index of the workgroup the current compute invocation belongs to.
182
+ * ```js
183
+ * // Execute 12 compute threads with a workgroup size of 3.
184
+ * const computeFn = Fn( () => {
185
+ *
186
+ * If( workgroupId.x.modInt( 2 ).equal( 0 ), () => {
187
+ *
188
+ * storageBuffer.element( instanceIndex ).assign( instanceIndex );
189
+ *
190
+ * } ).Else( () => {
191
+ *
192
+ * storageBuffer.element( instanceIndex ).assign( 0 );
193
+ *
194
+ * } );
195
+ *
196
+ * } )().compute( 12, [ 3 ] );
197
+ *
198
+ * // workgroupId.x = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3];
199
+ * // Buffer Output = [0, 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0];
200
+ * ```
201
+ *
202
+ * @function
203
+ * @returns {ComputeBuiltinNode<uvec3>}
204
+ */
95
205
  export const workgroupId = /*@__PURE__*/ computeBuiltin( 'workgroupId', 'uvec3' );
206
+
207
+ /**
208
+ * TSL function for creating a `localId` builtin node. A non-linearized 3-dimensional
209
+ * representation of the current invocation's position within a 3D workgroup grid.
210
+ *
211
+ * @function
212
+ * @returns {ComputeBuiltinNode<uvec3>}
213
+ */
96
214
  export const localId = /*@__PURE__*/ computeBuiltin( 'localId', 'uvec3' );
215
+
216
+ /**
217
+ * TSL function for creating a `subgroupSize` builtin node. A device dependent variable
218
+ * that exposes the size of the current invocation's subgroup.
219
+ *
220
+ * @function
221
+ * @returns {ComputeBuiltinNode<uint>}
222
+ */
97
223
  export const subgroupSize = /*@__PURE__*/ computeBuiltin( 'subgroupSize', 'uint' );
98
224