super-three 0.171.0 → 0.173.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,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 modification to an atomic variable will
9
+ * occur as an indivisible 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 interfere 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 );
@@ -46,7 +103,13 @@ class AtomicFunctionNode extends TempNode {
46
103
  const params = [];
47
104
 
48
105
  params.push( `&${ a.build( builder, inputType ) }` );
49
- params.push( b.build( builder, inputType ) );
106
+
107
+ if ( b !== null ) {
108
+
109
+ params.push( b.build( builder, inputType ) );
110
+
111
+
112
+ }
50
113
 
51
114
  const methodSnippet = `${ builder.getMethod( method, type ) }( ${params.join( ', ' )} )`;
52
115
 
@@ -78,9 +141,29 @@ AtomicFunctionNode.ATOMIC_XOR = 'atomicXor';
78
141
 
79
142
  export default AtomicFunctionNode;
80
143
 
144
+ /**
145
+ * TSL function for creating an atomic function node.
146
+ *
147
+ * @function
148
+ * @param {String} method - The signature of the atomic function to construct.
149
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
150
+ * @param {Node} valueNode - The value that mutates the atomic variable.
151
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
152
+ * @returns {AtomicFunctionNode}
153
+ */
81
154
  const atomicNode = nodeProxy( AtomicFunctionNode );
82
155
 
83
- export const atomicFunc = ( method, pointerNode, valueNode, storeNode ) => {
156
+ /**
157
+ * TSL function for appending an atomic function call into the programmatic flow of a compute shader.
158
+ *
159
+ * @function
160
+ * @param {String} method - The signature of the atomic function to construct.
161
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
162
+ * @param {Node} valueNode - The value that mutates the atomic variable.
163
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
164
+ * @returns {AtomicFunctionNode}
165
+ */
166
+ export const atomicFunc = ( method, pointerNode, valueNode, storeNode = null ) => {
84
167
 
85
168
  const node = atomicNode( method, pointerNode, valueNode, storeNode );
86
169
  node.append();
@@ -89,11 +172,100 @@ export const atomicFunc = ( method, pointerNode, valueNode, storeNode ) => {
89
172
 
90
173
  };
91
174
 
175
+ /**
176
+ * Loads the value stored in the atomic variable.
177
+ *
178
+ * @function
179
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
180
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
181
+ * @returns {AtomicFunctionNode}
182
+ */
183
+ export const atomicLoad = ( pointerNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_LOAD, pointerNode, null, storeNode );
184
+
185
+ /**
186
+ * Stores a value in the atomic variable.
187
+ *
188
+ * @function
189
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
190
+ * @param {Node} valueNode - The value that mutates the atomic variable.
191
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
192
+ * @returns {AtomicFunctionNode}
193
+ */
92
194
  export const atomicStore = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_STORE, pointerNode, valueNode, storeNode );
195
+
196
+ /**
197
+ * Increments the value stored in the atomic variable.
198
+ *
199
+ * @function
200
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
201
+ * @param {Node} valueNode - The value that mutates the atomic variable.
202
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
203
+ * @returns {AtomicFunctionNode}
204
+ */
93
205
  export const atomicAdd = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_ADD, pointerNode, valueNode, storeNode );
206
+
207
+ /**
208
+ * Decrements the value stored in the atomic variable.
209
+ *
210
+ * @function
211
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
212
+ * @param {Node} valueNode - The value that mutates the atomic variable.
213
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
214
+ * @returns {AtomicFunctionNode}
215
+ */
94
216
  export const atomicSub = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_SUB, pointerNode, valueNode, storeNode );
217
+
218
+ /**
219
+ * Stores in an atomic variable the maximum between its current value and a parameter.
220
+ *
221
+ * @function
222
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
223
+ * @param {Node} valueNode - The value that mutates the atomic variable.
224
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
225
+ * @returns {AtomicFunctionNode}
226
+ */
95
227
  export const atomicMax = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_MAX, pointerNode, valueNode, storeNode );
228
+
229
+ /**
230
+ * Stores in an atomic variable the minimum between its current value and a parameter.
231
+ *
232
+ * @function
233
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
234
+ * @param {Node} valueNode - The value that mutates the atomic variable.
235
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
236
+ * @returns {AtomicFunctionNode}
237
+ */
96
238
  export const atomicMin = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_MIN, pointerNode, valueNode, storeNode );
239
+
240
+ /**
241
+ * Stores in an atomic variable the bitwise AND of its value with a parameter.
242
+ *
243
+ * @function
244
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
245
+ * @param {Node} valueNode - The value that mutates the atomic variable.
246
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
247
+ * @returns {AtomicFunctionNode}
248
+ */
97
249
  export const atomicAnd = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_AND, pointerNode, valueNode, storeNode );
250
+
251
+ /**
252
+ * Stores in an atomic variable the bitwise OR of its value with a parameter.
253
+ *
254
+ * @function
255
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
256
+ * @param {Node} valueNode - The value that mutates the atomic variable.
257
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
258
+ * @returns {AtomicFunctionNode}
259
+ */
98
260
  export const atomicOr = ( pointerNode, valueNode, storeNode = null ) => atomicFunc( AtomicFunctionNode.ATOMIC_OR, pointerNode, valueNode, storeNode );
261
+
262
+ /**
263
+ * Stores in an atomic variable the bitwise XOR of its value with a parameter.
264
+ *
265
+ * @function
266
+ * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.
267
+ * @param {Node} valueNode - The value that mutates the atomic variable.
268
+ * @param {Node?} [storeNode=null] - A variable storing the return value of an atomic operation, typically the value of the atomic variable before the operation.
269
+ * @returns {AtomicFunctionNode}
270
+ */
99
271
  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,93 @@ 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 `globalId` builtin node. A non-linearized 3-dimensional
209
+ * representation of the current invocation's position within a 3D global grid.
210
+ *
211
+ * @function
212
+ * @returns {ComputeBuiltinNode<uvec3>}
213
+ */
214
+ export const globalId = /*@__PURE__*/ computeBuiltin( 'globalId', 'uvec3' );
215
+ /**
216
+ * TSL function for creating a `localId` builtin node. A non-linearized 3-dimensional
217
+ * representation of the current invocation's position within a 3D workgroup grid.
218
+ *
219
+ * @function
220
+ * @returns {ComputeBuiltinNode<uvec3>}
221
+ */
96
222
  export const localId = /*@__PURE__*/ computeBuiltin( 'localId', 'uvec3' );
223
+
224
+ /**
225
+ * TSL function for creating a `subgroupSize` builtin node. A device dependent variable
226
+ * that exposes the size of the current invocation's subgroup.
227
+ *
228
+ * @function
229
+ * @returns {ComputeBuiltinNode<uint>}
230
+ */
97
231
  export const subgroupSize = /*@__PURE__*/ computeBuiltin( 'subgroupSize', 'uint' );
98
232
 
@@ -2,6 +2,13 @@ import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
4
4
 
5
+ /** @module ComputeNode **/
6
+
7
+ /**
8
+ * TODO
9
+ *
10
+ * @augments Node
11
+ */
5
12
  class ComputeNode extends Node {
6
13
 
7
14
  static get type() {
@@ -10,39 +17,116 @@ class ComputeNode extends Node {
10
17
 
11
18
  }
12
19
 
20
+ /**
21
+ * Constructs a new compute node.
22
+ *
23
+ * @param {Node} computeNode - TODO
24
+ * @param {Number} count - TODO.
25
+ * @param {Array<Number>} [workgroupSize=[64]] - TODO.
26
+ */
13
27
  constructor( computeNode, count, workgroupSize = [ 64 ] ) {
14
28
 
15
29
  super( 'void' );
16
30
 
31
+ /**
32
+ * This flag can be used for type testing.
33
+ *
34
+ * @type {Boolean}
35
+ * @readonly
36
+ * @default true
37
+ */
17
38
  this.isComputeNode = true;
18
39
 
40
+ /**
41
+ * TODO
42
+ *
43
+ * @type {Node}
44
+ */
19
45
  this.computeNode = computeNode;
20
46
 
47
+ /**
48
+ * TODO
49
+ *
50
+ * @type {Number}
51
+ */
21
52
  this.count = count;
53
+
54
+ /**
55
+ * TODO
56
+ *
57
+ * @type {Array<Number>}
58
+ * @default [64]
59
+ */
22
60
  this.workgroupSize = workgroupSize;
61
+
62
+ /**
63
+ * TODO
64
+ *
65
+ * @type {Number}
66
+ */
23
67
  this.dispatchCount = 0;
24
68
 
69
+ /**
70
+ * TODO
71
+ *
72
+ * @type {Number}
73
+ */
25
74
  this.version = 1;
75
+
76
+ /**
77
+ * The name or label of the uniform.
78
+ *
79
+ * @type {String}
80
+ * @default ''
81
+ */
82
+ this.name = '';
83
+
84
+ /**
85
+ * The `updateBeforeType` is set to `NodeUpdateType.OBJECT` since {@link ComputeNode#updateBefore}
86
+ * is executed once per object by default.
87
+ *
88
+ * @type {String}
89
+ * @default 'object'
90
+ */
26
91
  this.updateBeforeType = NodeUpdateType.OBJECT;
27
92
 
93
+ /**
94
+ * TODO
95
+ *
96
+ * @type {Function}
97
+ */
28
98
  this.onInitFunction = null;
29
99
 
30
100
  this.updateDispatchCount();
31
101
 
32
102
  }
33
103
 
104
+ /**
105
+ * Executes the `dispose` event for this node.
106
+ */
34
107
  dispose() {
35
108
 
36
109
  this.dispatchEvent( { type: 'dispose' } );
37
110
 
38
111
  }
39
112
 
40
- set needsUpdate( value ) {
113
+ /**
114
+ * Sets the {@link ComputeNode#name} property.
115
+ *
116
+ * @param {String} name - The name of the uniform.
117
+ * @return {ComputeNode} A reference to this node.
118
+ */
119
+ label( name ) {
120
+
121
+ this.name = name;
41
122
 
42
- if ( value === true ) this.version ++;
123
+ return this;
43
124
 
44
125
  }
45
126
 
127
+ /**
128
+ * TODO
129
+ */
46
130
  updateDispatchCount() {
47
131
 
48
132
  const { count, workgroupSize } = this;
@@ -56,6 +140,12 @@ class ComputeNode extends Node {
56
140
 
57
141
  }
58
142
 
143
+ /**
144
+ * TODO
145
+ *
146
+ * @param {Function} callback - TODO.
147
+ * @return {ComputeNode} A reference to this node.
148
+ */
59
149
  onInit( callback ) {
60
150
 
61
151
  this.onInitFunction = callback;
@@ -64,6 +154,11 @@ class ComputeNode extends Node {
64
154
 
65
155
  }
66
156
 
157
+ /**
158
+ * The method execute the compute for this node.
159
+ *
160
+ * @param {NodeFrame} frame - A reference to the current node frame.
161
+ */
67
162
  updateBefore( { renderer } ) {
68
163
 
69
164
  renderer.compute( this );
@@ -92,6 +187,15 @@ class ComputeNode extends Node {
92
187
 
93
188
  export default ComputeNode;
94
189
 
190
+ /**
191
+ * TSL function for creating a compute node.
192
+ *
193
+ * @function
194
+ * @param {Node} node - TODO
195
+ * @param {Number} count - TODO.
196
+ * @param {Array<Number>} [workgroupSize=[64]] - TODO.
197
+ * @returns {AtomicFunctionNode}
198
+ */
95
199
  export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
96
200
 
97
201
  addMethodChaining( 'compute', compute );