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
@@ -2,6 +2,14 @@ import TempNode from '../core/TempNode.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
  import { vectorComponents } from '../core/constants.js';
4
4
 
5
+ /** @module AssignNode **/
6
+
7
+ /**
8
+ * These node represents an assign operation. Meaning a node is assigned
9
+ * to another node.
10
+ *
11
+ * @augments TempNode
12
+ */
5
13
  class AssignNode extends TempNode {
6
14
 
7
15
  static get type() {
@@ -10,15 +18,38 @@ class AssignNode extends TempNode {
10
18
 
11
19
  }
12
20
 
21
+ /**
22
+ * Constructs a new assign node.
23
+ *
24
+ * @param {Node} targetNode - The target node.
25
+ * @param {Node} sourceNode - The source type.
26
+ */
13
27
  constructor( targetNode, sourceNode ) {
14
28
 
15
29
  super();
16
30
 
31
+ /**
32
+ * The target node.
33
+ *
34
+ * @type {Node}
35
+ */
17
36
  this.targetNode = targetNode;
37
+
38
+ /**
39
+ * The source node.
40
+ *
41
+ * @type {Node}
42
+ */
18
43
  this.sourceNode = sourceNode;
19
44
 
20
45
  }
21
46
 
47
+ /**
48
+ * Whether this node is used more than once in context of other nodes. This method
49
+ * is overwritten since it always returns `false` (assigns are unique).
50
+ *
51
+ * @return {Boolean} A flag that indicates if there is more than one dependency to other nodes. Always `false`.
52
+ */
22
53
  hasDependencies() {
23
54
 
24
55
  return false;
@@ -31,6 +62,13 @@ class AssignNode extends TempNode {
31
62
 
32
63
  }
33
64
 
65
+ /**
66
+ * Whether a split is required when assigning source to target. This can happen when the component length of
67
+ * target and source data type does not match.
68
+ *
69
+ * @param {NodeBuilder} builder - The current node builder.
70
+ * @return {Boolean} Whether a split is required when assigning source to target.
71
+ */
34
72
  needsSplitAssign( builder ) {
35
73
 
36
74
  const { targetNode } = this;
@@ -38,9 +76,9 @@ class AssignNode extends TempNode {
38
76
  if ( builder.isAvailable( 'swizzleAssign' ) === false && targetNode.isSplitNode && targetNode.components.length > 1 ) {
39
77
 
40
78
  const targetLength = builder.getTypeLength( targetNode.node.getNodeType( builder ) );
41
- const assignDiferentVector = vectorComponents.join( '' ).slice( 0, targetLength ) !== targetNode.components;
79
+ const assignDifferentVector = vectorComponents.join( '' ).slice( 0, targetLength ) !== targetNode.components;
42
80
 
43
- return assignDiferentVector;
81
+ return assignDifferentVector;
44
82
 
45
83
  }
46
84
 
@@ -126,6 +164,14 @@ class AssignNode extends TempNode {
126
164
 
127
165
  export default AssignNode;
128
166
 
167
+ /**
168
+ * TSL function for creating an assign node.
169
+ *
170
+ * @function
171
+ * @param {Node} targetNode - The target node.
172
+ * @param {Node} sourceNode - The source type.
173
+ * @returns {AssignNode}
174
+ */
129
175
  export const assign = /*@__PURE__*/ nodeProxy( AssignNode );
130
176
 
131
177
  addMethodChaining( 'assign', assign );
@@ -1,6 +1,13 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeObject, varying } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module AttributeNode **/
5
+
6
+ /**
7
+ * Base class for representing shader attributes as nodes.
8
+ *
9
+ * @augments Node
10
+ */
4
11
  class AttributeNode extends Node {
5
12
 
6
13
  static get type() {
@@ -9,10 +16,22 @@ class AttributeNode extends Node {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new attribute node.
21
+ *
22
+ * @param {String} attributeName - The name of the attribute.
23
+ * @param {String?} nodeType - The node type.
24
+ */
12
25
  constructor( attributeName, nodeType = null ) {
13
26
 
14
27
  super( nodeType );
15
28
 
29
+ /**
30
+ * `AttributeNode` sets this property to `true` by default.
31
+ *
32
+ * @type {Boolean}
33
+ * @default true
34
+ */
16
35
  this.global = true;
17
36
 
18
37
  this._attributeName = attributeName;
@@ -51,6 +70,14 @@ class AttributeNode extends Node {
51
70
 
52
71
  }
53
72
 
73
+ /**
74
+ * Sets the attribute name to the given value. The method can be
75
+ * overwritten in derived classes if the final name must be computed
76
+ * analytically.
77
+ *
78
+ * @param {String} attributeName - The name of the attribute.
79
+ * @return {AttributeNode} A reference to this node.
80
+ */
54
81
  setAttributeName( attributeName ) {
55
82
 
56
83
  this._attributeName = attributeName;
@@ -59,6 +86,14 @@ class AttributeNode extends Node {
59
86
 
60
87
  }
61
88
 
89
+ /**
90
+ * Returns the attribute name of this node. The method can be
91
+ * overwritten in derived classes if the final name must be computed
92
+ * analytically.
93
+ *
94
+ * @param {NodeBuilder} builder - The current node builder.
95
+ * @return {String} The attribute name.
96
+ */
62
97
  getAttributeName( /*builder*/ ) {
63
98
 
64
99
  return this._attributeName;
@@ -122,4 +157,12 @@ class AttributeNode extends Node {
122
157
 
123
158
  export default AttributeNode;
124
159
 
160
+ /**
161
+ * TSL function for creating an attribute node.
162
+ *
163
+ * @function
164
+ * @param {String} name - The name of the attribute.
165
+ * @param {String?} nodeType - The node type.
166
+ * @returns {AttributeNode}
167
+ */
125
168
  export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
@@ -1,6 +1,19 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module BypassNode **/
5
+
6
+ /**
7
+ * The class generates the code of a given node but returns another node in the output.
8
+ * This can be used to call a method or node that does not return a value, i.e.
9
+ * type `void` on an input where returning a value is required. Example:
10
+ *
11
+ * ```js
12
+ * material.colorNode = myColor.bypass( runVoidFn() )
13
+ *```
14
+ *
15
+ * @augments Node
16
+ */
4
17
  class BypassNode extends Node {
5
18
 
6
19
  static get type() {
@@ -9,13 +22,37 @@ class BypassNode extends Node {
9
22
 
10
23
  }
11
24
 
12
- constructor( returnNode, callNode ) {
25
+ /**
26
+ * Constructs a new bypass node.
27
+ *
28
+ * @param {Node} outputNode - The output node.
29
+ * @param {Node} callNode - The call node.
30
+ */
31
+ constructor( outputNode, callNode ) {
13
32
 
14
33
  super();
15
34
 
35
+ /**
36
+ * This flag can be used for type testing.
37
+ *
38
+ * @type {Boolean}
39
+ * @readonly
40
+ * @default true
41
+ */
16
42
  this.isBypassNode = true;
17
43
 
18
- this.outputNode = returnNode;
44
+ /**
45
+ * The output node.
46
+ *
47
+ * @type {Node}
48
+ */
49
+ this.outputNode = outputNode;
50
+
51
+ /**
52
+ * The call node.
53
+ *
54
+ * @type {Node}
55
+ */
19
56
  this.callNode = callNode;
20
57
 
21
58
  }
@@ -44,6 +81,14 @@ class BypassNode extends Node {
44
81
 
45
82
  export default BypassNode;
46
83
 
84
+ /**
85
+ * TSL function for creating a bypass node.
86
+ *
87
+ * @function
88
+ * @param {Node} outputNode - The output node.
89
+ * @param {Node} callNode - The call node.
90
+ * @returns {BypassNode}
91
+ */
47
92
  export const bypass = /*@__PURE__*/ nodeProxy( BypassNode );
48
93
 
49
94
  addMethodChaining( 'bypass', bypass );
@@ -1,6 +1,15 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module CacheNode **/
5
+
6
+ /**
7
+ * This node can be used as a cache management component for another node.
8
+ * Caching is in general used by default in {@link NodeBuilder} but this node
9
+ * allows the usage of a shared parent cache during the build process.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class CacheNode extends Node {
5
14
 
6
15
  static get type() {
@@ -9,20 +18,54 @@ class CacheNode extends Node {
9
18
 
10
19
  }
11
20
 
21
+ /**
22
+ * Constructs a new cache node.
23
+ *
24
+ * @param {Node} node - The node that should be cached.
25
+ * @param {Boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
26
+ */
12
27
  constructor( node, parent = true ) {
13
28
 
14
29
  super();
15
30
 
31
+ /**
32
+ * The node that should be cached.
33
+ *
34
+ * @type {Node}
35
+ */
16
36
  this.node = node;
37
+
38
+ /**
39
+ * Whether this node refers to a shared parent cache or not.
40
+ *
41
+ * @type {Boolean}
42
+ * @default true
43
+ */
17
44
  this.parent = parent;
18
45
 
46
+ /**
47
+ * This flag can be used for type testing.
48
+ *
49
+ * @type {Boolean}
50
+ * @readonly
51
+ * @default true
52
+ */
19
53
  this.isCacheNode = true;
20
54
 
21
55
  }
22
56
 
23
57
  getNodeType( builder ) {
24
58
 
25
- return this.node.getNodeType( builder );
59
+ const previousCache = builder.getCache();
60
+ const cache = builder.getCacheFromNode( this, this.parent );
61
+
62
+ builder.setCache( cache );
63
+
64
+ const nodeType = this.node.getNodeType( builder );
65
+
66
+ builder.setCache( previousCache );
67
+
68
+ return nodeType;
26
69
 
27
70
  }
28
71
 
@@ -45,6 +88,14 @@ class CacheNode extends Node {
45
88
 
46
89
  export default CacheNode;
47
90
 
48
- export const cache = ( node, ...params ) => nodeObject( new CacheNode( nodeObject( node ), ...params ) );
91
+ /**
92
+ * TSL function for creating a cache node.
93
+ *
94
+ * @function
95
+ * @param {Node} node - The node that should be cached.
96
+ * @param {Boolean} parent - Whether this node refers to a shared parent cache or not.
97
+ * @returns {CacheNode}
98
+ */
99
+ export const cache = ( node, parent ) => nodeObject( new CacheNode( nodeObject( node ), parent ) );
49
100
 
50
101
  addMethodChaining( 'cache', cache );
@@ -1,5 +1,12 @@
1
1
  import InputNode from './InputNode.js';
2
2
 
3
+ const _regNum = /float|u?int/;
4
+
5
+ /**
6
+ * Class for representing a constant value in the shader.
7
+ *
8
+ * @augments InputNode
9
+ */
3
10
  class ConstNode extends InputNode {
4
11
 
5
12
  static get type() {
@@ -8,14 +15,33 @@ class ConstNode extends InputNode {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new input node.
20
+ *
21
+ * @param {Any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color).
22
+ * @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
23
+ */
11
24
  constructor( value, nodeType = null ) {
12
25
 
13
26
  super( value, nodeType );
14
27
 
28
+ /**
29
+ * This flag can be used for type testing.
30
+ *
31
+ * @type {Boolean}
32
+ * @readonly
33
+ * @default true
34
+ */
15
35
  this.isConstNode = true;
16
36
 
17
37
  }
18
38
 
39
+ /**
40
+ * Generates the shader string of the value with the current node builder.
41
+ *
42
+ * @param {NodeBuilder} builder - The current node builder.
43
+ * @return {String} The generated value as a shader string.
44
+ */
19
45
  generateConst( builder ) {
20
46
 
21
47
  return builder.generateConst( this.getNodeType( builder ), this.value );
@@ -26,6 +52,12 @@ class ConstNode extends InputNode {
26
52
 
27
53
  const type = this.getNodeType( builder );
28
54
 
55
+ if ( _regNum.test( type ) && _regNum.test( output ) ) {
56
+
57
+ return builder.generateConst( output, this.value );
58
+
59
+ }
60
+
29
61
  return builder.format( this.generateConst( builder ), type, output );
30
62
 
31
63
  }
@@ -1,6 +1,18 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module ContextNode **/
5
+
6
+ /**
7
+ * This node can be used as a context management component for another node.
8
+ * {@link NodeBuilder} performs its node building process in a specific context and
9
+ * this node allows the modify the context. A typical use case is to overwrite `getUV()` e.g.:
10
+ *
11
+ * ```js
12
+ *node.context( { getUV: () => customCoord } );
13
+ *```
14
+ * @augments Node
15
+ */
4
16
  class ContextNode extends Node {
5
17
 
6
18
  static get type() {
@@ -9,23 +21,59 @@ class ContextNode extends Node {
9
21
 
10
22
  }
11
23
 
24
+ /**
25
+ * Constructs a new context node.
26
+ *
27
+ * @param {Node} node - The node whose context should be modified.
28
+ * @param {Object} [value={}] - The modified context data.
29
+ */
12
30
  constructor( node, value = {} ) {
13
31
 
14
32
  super();
15
33
 
34
+ /**
35
+ * This flag can be used for type testing.
36
+ *
37
+ * @type {Boolean}
38
+ * @readonly
39
+ * @default true
40
+ */
16
41
  this.isContextNode = true;
17
42
 
43
+ /**
44
+ * The node whose context should be modified.
45
+ *
46
+ * @type {Node}
47
+ */
18
48
  this.node = node;
49
+
50
+ /**
51
+ * The modified context data.
52
+ *
53
+ * @type {Object}
54
+ * @default {}
55
+ */
19
56
  this.value = value;
20
57
 
21
58
  }
22
59
 
60
+ /**
61
+ * This method is overwritten to ensure it returns the reference to {@link module:ContextNode~ContextNode#node}.
62
+ *
63
+ * @return {Node} A reference to {@link module:ContextNode~ContextNode#node}.
64
+ */
23
65
  getScope() {
24
66
 
25
67
  return this.node.getScope();
26
68
 
27
69
  }
28
70
 
71
+ /**
72
+ * This method is overwritten to ensure it returns the type of {@link module:ContextNode~ContextNode#node}.
73
+ *
74
+ * @param {NodeBuilder} builder - The current node builder.
75
+ * @return {String} The node type.
76
+ */
29
77
  getNodeType( builder ) {
30
78
 
31
79
  return this.node.getNodeType( builder );
@@ -70,7 +118,24 @@ class ContextNode extends Node {
70
118
 
71
119
  export default ContextNode;
72
120
 
121
+ /**
122
+ * TSL function for creating a context node.
123
+ *
124
+ * @function
125
+ * @param {Node} node - The node whose context should be modified.
126
+ * @param {Object} [value={}] - The modified context data.
127
+ * @returns {ContextNode}
128
+ */
73
129
  export const context = /*@__PURE__*/ nodeProxy( ContextNode );
130
+
131
+ /**
132
+ * TSL function for defining a label context value for a given node.
133
+ *
134
+ * @function
135
+ * @param {Node} node - The node whose context should be modified.
136
+ * @param {String} name - The name/label to set.
137
+ * @returns {ContextNode}
138
+ */
74
139
  export const label = ( node, name ) => context( node, { label: name } );
75
140
 
76
141
  addMethodChaining( 'context', context );
@@ -1,6 +1,21 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeImmutable, varying } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module IndexNode **/
5
+
6
+ /**
7
+ * This class represents shader indices of different types. The following predefined node
8
+ * objects cover frequent use cases:
9
+ *
10
+ * - `vertexIndex`: The index of a vertex within a mesh.
11
+ * - `instanceIndex`: The index of either a mesh instance or an invocation of a compute shader.
12
+ * - `drawIndex`: The index of a draw call.
13
+ * - `invocationLocalIndex`: The index of a compute invocation within the scope of a workgroup load.
14
+ * - `invocationSubgroupIndex`: The index of a compute invocation within the scope of a subgroup.
15
+ * - `subgroupIndex`: The index of the subgroup the current compute invocation belongs to.
16
+ *
17
+ * @augments Node
18
+ */
4
19
  class IndexNode extends Node {
5
20
 
6
21
  static get type() {
@@ -9,13 +24,30 @@ class IndexNode extends Node {
9
24
 
10
25
  }
11
26
 
27
+ /**
28
+ * Constructs a new index node.
29
+ *
30
+ * @param {('vertex'|'instance'|'subgroup'|'invocationLocal'|'invocationSubgroup'|'draw')} scope - The scope of the index node.
31
+ */
12
32
  constructor( scope ) {
13
33
 
14
34
  super( 'uint' );
15
35
 
36
+ /**
37
+ * The scope of the index node.
38
+ *
39
+ * @type {String}
40
+ */
16
41
  this.scope = scope;
17
42
 
18
- this.isInstanceIndexNode = true;
43
+ /**
44
+ * This flag can be used for type testing.
45
+ *
46
+ * @type {Boolean}
47
+ * @readonly
48
+ * @default true
49
+ */
50
+ this.isIndexNode = true;
19
51
 
20
52
  }
21
53
 
@@ -28,32 +60,26 @@ class IndexNode extends Node {
28
60
 
29
61
  if ( scope === IndexNode.VERTEX ) {
30
62
 
31
- // The index of a vertex within a mesh.
32
63
  propertyName = builder.getVertexIndex();
33
64
 
34
65
  } else if ( scope === IndexNode.INSTANCE ) {
35
66
 
36
- // The index of either a mesh instance or an invocation of a compute shader.
37
67
  propertyName = builder.getInstanceIndex();
38
68
 
39
69
  } else if ( scope === IndexNode.DRAW ) {
40
70
 
41
- // The index of a draw call.
42
71
  propertyName = builder.getDrawIndex();
43
72
 
44
73
  } else if ( scope === IndexNode.INVOCATION_LOCAL ) {
45
74
 
46
- // The index of a compute invocation within the scope of a workgroup load.
47
75
  propertyName = builder.getInvocationLocalIndex();
48
76
 
49
77
  } else if ( scope === IndexNode.INVOCATION_SUBGROUP ) {
50
78
 
51
- // The index of a compute invocation within the scope of a subgroup.
52
79
  propertyName = builder.getInvocationSubgroupIndex();
53
80
 
54
81
  } else if ( scope === IndexNode.SUBGROUP ) {
55
82
 
56
- // The index of the subgroup the current compute invocation belongs to.
57
83
  propertyName = builder.getSubgroupIndex();
58
84
 
59
85
  } else {
@@ -91,9 +117,44 @@ IndexNode.DRAW = 'draw';
91
117
 
92
118
  export default IndexNode;
93
119
 
120
+ /**
121
+ * TSL object that represents the index of a vertex within a mesh.
122
+ *
123
+ * @type {IndexNode}
124
+ */
94
125
  export const vertexIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.VERTEX );
126
+
127
+ /**
128
+ * TSL object that represents the index of either a mesh instance or an invocation of a compute shader.
129
+ *
130
+ * @type {IndexNode}
131
+ */
95
132
  export const instanceIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INSTANCE );
133
+
134
+ /**
135
+ * TSL object that represents the index of the subgroup the current compute invocation belongs to.
136
+ *
137
+ * @type {IndexNode}
138
+ */
96
139
  export const subgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.SUBGROUP );
140
+
141
+ /**
142
+ * TSL object that represents the index of a compute invocation within the scope of a subgroup.
143
+ *
144
+ * @type {IndexNode}
145
+ */
97
146
  export const invocationSubgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_SUBGROUP );
147
+
148
+ /**
149
+ * TSL object that represents the index of a compute invocation within the scope of a workgroup load.
150
+ *
151
+ * @type {IndexNode}
152
+ */
98
153
  export const invocationLocalIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_LOCAL );
154
+
155
+ /**
156
+ * TSL object that represents the index of a draw call.
157
+ *
158
+ * @type {IndexNode}
159
+ */
99
160
  export const drawIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.DRAW );
@@ -1,6 +1,11 @@
1
1
  import Node from './Node.js';
2
2
  import { getValueType, getValueFromType, arrayBufferToBase64 } from './NodeUtils.js';
3
3
 
4
+ /**
5
+ * Base class for representing data input nodes.
6
+ *
7
+ * @augments Node
8
+ */
4
9
  class InputNode extends Node {
5
10
 
6
11
  static get type() {
@@ -9,13 +14,38 @@ class InputNode extends Node {
9
14
 
10
15
  }
11
16
 
17
+ /**
18
+ * Constructs a new input node.
19
+ *
20
+ * @param {Any} value - The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
21
+ * @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
22
+ */
12
23
  constructor( value, nodeType = null ) {
13
24
 
14
25
  super( nodeType );
15
26
 
27
+ /**
28
+ * This flag can be used for type testing.
29
+ *
30
+ * @type {Boolean}
31
+ * @readonly
32
+ * @default true
33
+ */
16
34
  this.isInputNode = true;
17
35
 
36
+ /**
37
+ * The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
38
+ *
39
+ * @type {Any}
40
+ */
18
41
  this.value = value;
42
+
43
+ /**
44
+ * The precision of the value in the shader.
45
+ *
46
+ * @type {('low'|'medium'|'high')?}
47
+ * @default null
48
+ */
19
49
  this.precision = null;
20
50
 
21
51
  }
@@ -32,12 +62,30 @@ class InputNode extends Node {
32
62
 
33
63
  }
34
64
 
65
+ /**
66
+ * Returns the input type of the node which is by default the node type. Derived modules
67
+ * might overwrite this method and use a fixed type or compute one analytically.
68
+ *
69
+ * A typical example for different input and node types are textures. The input type of a
70
+ * normal RGBA texture is `texture` whereas its node type is `vec4`.
71
+ *
72
+ * @param {NodeBuilder} builder - The current node builder.
73
+ * @return {String} The input type.
74
+ */
35
75
  getInputType( builder ) {
36
76
 
37
77
  return this.getNodeType( builder );
38
78
 
39
79
  }
40
80
 
81
+ /**
82
+ * Sets the precision to the given value. The method can be
83
+ * overwritten in derived classes if the final precision must be computed
84
+ * analytically.
85
+ *
86
+ * @param {('low'|'medium'|'high')} precision - The precision of the input value in the shader.
87
+ * @return {InputNode} A reference to this node.
88
+ */
41
89
  setPrecision( precision ) {
42
90
 
43
91
  this.precision = precision;