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
@@ -9,6 +9,13 @@ import { NodeUpdateType } from '../core/constants.js';
9
9
 
10
10
  import { IntType, UnsignedIntType } from '../../constants.js';
11
11
 
12
+ /** @module TextureNode **/
13
+
14
+ /**
15
+ * This type of uniform node represents a 2D texture.
16
+ *
17
+ * @augments module:UniformNode~UniformNode
18
+ */
12
19
  class TextureNode extends UniformNode {
13
20
 
14
21
  static get type() {
@@ -17,26 +24,125 @@ class TextureNode extends UniformNode {
17
24
 
18
25
  }
19
26
 
27
+ /**
28
+ * Constructs a new texture node.
29
+ *
30
+ * @param {Texture} value - The texture.
31
+ * @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
32
+ * @param {Node<int>?} [levelNode=null] - The level node.
33
+ * @param {Node<float>?} [biasNode=null] - The bias node.
34
+ */
20
35
  constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
21
36
 
22
37
  super( value );
23
38
 
39
+ /**
40
+ * This flag can be used for type testing.
41
+ *
42
+ * @type {Boolean}
43
+ * @readonly
44
+ * @default true
45
+ */
24
46
  this.isTextureNode = true;
25
47
 
48
+ /**
49
+ * Represents the texture coordinates.
50
+ *
51
+ * @type {Node<vec2|vec3>?}
52
+ * @default null
53
+ */
26
54
  this.uvNode = uvNode;
55
+
56
+ /**
57
+ * Represents the mip level that should be selected.
58
+ *
59
+ * @type {Node<int>?}
60
+ * @default null
61
+ */
27
62
  this.levelNode = levelNode;
63
+
64
+ /**
65
+ * Represents the bias to be applied during level-of-detail computation.
66
+ *
67
+ * @type {Node<float>?}
68
+ * @default null
69
+ */
28
70
  this.biasNode = biasNode;
71
+
72
+ /**
73
+ * Represents a reference value a texture sample is compared to.
74
+ *
75
+ * @type {Node<float>?}
76
+ * @default null
77
+ */
29
78
  this.compareNode = null;
79
+
80
+ /**
81
+ * When using texture arrays, the depth node defines the layer to select.
82
+ *
83
+ * @type {Node<int>?}
84
+ * @default null
85
+ */
30
86
  this.depthNode = null;
87
+
88
+ /**
89
+ * When defined, a texture is sampled using explicit gradients.
90
+ *
91
+ * @type {Array<Node<vec2>>?}
92
+ * @default null
93
+ */
31
94
  this.gradNode = null;
32
95
 
96
+ /**
97
+ * Whether texture values should be sampled or fetched.
98
+ *
99
+ * @type {Boolean}
100
+ * @default true
101
+ */
33
102
  this.sampler = true;
103
+
104
+ /**
105
+ * Whether the uv transformation matrix should be
106
+ * automatically updated or not. Use `setUpdateMatrix()`
107
+ * if you want to change the value of the property.
108
+ *
109
+ * @type {Boolean}
110
+ * @default false
111
+ */
34
112
  this.updateMatrix = false;
113
+
114
+ /**
115
+ * By default the `update()` method is not executed. `setUpdateMatrix()`
116
+ * sets the value to `frame` when the uv transformation matrix should
117
+ * automatically be updated.
118
+ *
119
+ * @type {String}
120
+ * @default 'none'
121
+ */
35
122
  this.updateType = NodeUpdateType.NONE;
36
123
 
124
+ /**
125
+ * The reference node.
126
+ *
127
+ * @type {Node?}
128
+ * @default null
129
+ */
37
130
  this.referenceNode = null;
38
131
 
132
+ /**
133
+ * The texture value is stored in a private property.
134
+ *
135
+ * @private
136
+ * @type {Texture}
137
+ */
39
138
  this._value = value;
139
+
140
+ /**
141
+ * The uniform node that represents the uv transformation matrix.
142
+ *
143
+ * @private
144
+ * @type {UniformNode<mat3>?}
145
+ */
40
146
  this._matrixUniform = null;
41
147
 
42
148
  this.setUpdateMatrix( uvNode === null );
@@ -57,18 +163,35 @@ class TextureNode extends UniformNode {
57
163
 
58
164
  }
59
165
 
166
+ /**
167
+ * The texture value.
168
+ *
169
+ * @type {Texture}
170
+ */
60
171
  get value() {
61
172
 
62
173
  return this.referenceNode ? this.referenceNode.value : this._value;
63
174
 
64
175
  }
65
176
 
177
+ /**
178
+ * Overwritten since the uniform hash is defined by the texture's UUID.
179
+ *
180
+ * @param {NodeBuilder} builder - The current node builder.
181
+ * @return {String} The uniform hash.
182
+ */
66
183
  getUniformHash( /*builder*/ ) {
67
184
 
68
185
  return this.value.uuid;
69
186
 
70
187
  }
71
188
 
189
+ /**
190
+ * Overwritten since the node type is inferred from the texture type.
191
+ *
192
+ * @param {NodeBuilder} builder - The current node builder.
193
+ * @return {String} The node type.
194
+ */
72
195
  getNodeType( /*builder*/ ) {
73
196
 
74
197
  if ( this.value.isDepthTexture === true ) return 'float';
@@ -87,24 +210,47 @@ class TextureNode extends UniformNode {
87
210
 
88
211
  }
89
212
 
213
+ /**
214
+ * Overwrites the default implementation to return a fixed value `'texture'`.
215
+ *
216
+ * @param {NodeBuilder} builder - The current node builder.
217
+ * @return {String} The input type.
218
+ */
90
219
  getInputType( /*builder*/ ) {
91
220
 
92
221
  return 'texture';
93
222
 
94
223
  }
95
224
 
225
+ /**
226
+ * Returns a default uvs based on the current texture's channel.
227
+ *
228
+ * @return {AttributeNode<vec2>} The default uvs.
229
+ */
96
230
  getDefaultUV() {
97
231
 
98
232
  return uv( this.value.channel );
99
233
 
100
234
  }
101
235
 
236
+ /**
237
+ * Overwritten to always return the texture reference of the node.
238
+ *
239
+ * @param {Any} state - This method can be invocated in different contexts so `state` can refer to any object type.
240
+ * @return {Texture} The texture reference.
241
+ */
102
242
  updateReference( /*state*/ ) {
103
243
 
104
244
  return this.value;
105
245
 
106
246
  }
107
247
 
248
+ /**
249
+ * Transforms the given uv node with the texture transformation matrix.
250
+ *
251
+ * @param {Node} uvNode - The uv node to transform.
252
+ * @return {Node} The transformed uv node.
253
+ */
108
254
  getTransformedUV( uvNode ) {
109
255
 
110
256
  if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
@@ -113,15 +259,29 @@ class TextureNode extends UniformNode {
113
259
 
114
260
  }
115
261
 
262
+ /**
263
+ * Defines whether the uv transformation matrix should automatically be updated or not.
264
+ *
265
+ * @param {Boolean} value - The update toggle.
266
+ * @return {TextureNode} A reference to this node.
267
+ */
116
268
  setUpdateMatrix( value ) {
117
269
 
118
270
  this.updateMatrix = value;
119
- this.updateType = value ? NodeUpdateType.FRAME : NodeUpdateType.NONE;
271
+ this.updateType = value ? NodeUpdateType.RENDER : NodeUpdateType.NONE;
120
272
 
121
273
  return this;
122
274
 
123
275
  }
124
276
 
277
+ /**
278
+ * Setups the uv node. Depending on the backend as well as texture's image and type, it might be necessary
279
+ * to modify the uv node for correct sampling.
280
+ *
281
+ * @param {NodeBuilder} builder - The current node builder.
282
+ * @param {Node} uvNode - The uv node to setup.
283
+ * @return {Node} The updated uv node.
284
+ */
125
285
  setupUV( builder, uvNode ) {
126
286
 
127
287
  const texture = this.value;
@@ -144,6 +304,11 @@ class TextureNode extends UniformNode {
144
304
 
145
305
  }
146
306
 
307
+ /**
308
+ * Setups texture node by preparing the internal nodes for code generation.
309
+ *
310
+ * @param {NodeBuilder} builder - The current node builder.
311
+ */
147
312
  setup( builder ) {
148
313
 
149
314
  const properties = builder.getNodeProperties( this );
@@ -151,6 +316,16 @@ class TextureNode extends UniformNode {
151
316
 
152
317
  //
153
318
 
319
+ const texture = this.value;
320
+
321
+ if ( ! texture || texture.isTexture !== true ) {
322
+
323
+ throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
324
+
325
+ }
326
+
327
+ //
328
+
154
329
  let uvNode = this.uvNode;
155
330
 
156
331
  if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
@@ -190,12 +365,32 @@ class TextureNode extends UniformNode {
190
365
 
191
366
  }
192
367
 
368
+ /**
369
+ * Generates the uv code snippet.
370
+ *
371
+ * @param {NodeBuilder} builder - The current node builder.
372
+ * @param {Node} uvNode - The uv node to generate code for.
373
+ * @return {String} The generated code snippet.
374
+ */
193
375
  generateUV( builder, uvNode ) {
194
376
 
195
377
  return uvNode.build( builder, this.sampler === true ? 'vec2' : 'ivec2' );
196
378
 
197
379
  }
198
380
 
381
+ /**
382
+ * Generates the snippet for the texture sampling.
383
+ *
384
+ * @param {NodeBuilder} builder - The current node builder.
385
+ * @param {String} textureProperty - The texture property.
386
+ * @param {String} uvSnippet - The uv snippet.
387
+ * @param {String?} levelSnippet - The level snippet.
388
+ * @param {String?} biasSnippet - The bias snippet.
389
+ * @param {String?} depthSnippet - The depth snippet.
390
+ * @param {String?} compareSnippet - The compare snippet.
391
+ * @param {Array<String>?} gradSnippet - The grad snippet.
392
+ * @return {String} The generated code snippet.
393
+ */
199
394
  generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
200
395
 
201
396
  const texture = this.value;
@@ -232,18 +427,18 @@ class TextureNode extends UniformNode {
232
427
 
233
428
  }
234
429
 
430
+ /**
431
+ * Generates the code snippet of the texture node.
432
+ *
433
+ * @param {NodeBuilder} builder - The current node builder.
434
+ * @param {String} output - The current output.
435
+ * @return {String} The generated code snippet.
436
+ */
235
437
  generate( builder, output ) {
236
438
 
237
- const properties = builder.getNodeProperties( this );
238
-
239
439
  const texture = this.value;
240
440
 
241
- if ( ! texture || texture.isTexture !== true ) {
242
-
243
- throw new Error( 'TextureNode: Need a three.js texture.' );
244
-
245
- }
246
-
441
+ const properties = builder.getNodeProperties( this );
247
442
  const textureProperty = super.generate( builder, 'property' );
248
443
 
249
444
  if ( output === 'sampler' ) {
@@ -299,6 +494,12 @@ class TextureNode extends UniformNode {
299
494
 
300
495
  }
301
496
 
497
+ /**
498
+ * Sets the sampler value.
499
+ *
500
+ * @param {Boolean} value - The sampler value to set.
501
+ * @return {TextureNode} A reference to this texture node.
502
+ */
302
503
  setSampler( value ) {
303
504
 
304
505
  this.sampler = value;
@@ -307,6 +508,11 @@ class TextureNode extends UniformNode {
307
508
 
308
509
  }
309
510
 
511
+ /**
512
+ * Returns the sampler value.
513
+ *
514
+ * @return {Boolean} The sampler value.
515
+ */
310
516
  getSampler() {
311
517
 
312
518
  return this.sampler;
@@ -315,7 +521,28 @@ class TextureNode extends UniformNode {
315
521
 
316
522
  // @TODO: Move to TSL
317
523
 
318
- uv( uvNode ) {
524
+ /**
525
+ * @function
526
+ * @deprecated since r172. Use {@link TextureNode#sample} instead.
527
+ *
528
+ * @param {Node} uvNode - The uv node.
529
+ * @return {TextureNode} A texture node representing the texture sample.
530
+ */
531
+ uv( uvNode ) { // @deprecated, r172
532
+
533
+ console.warn( 'THREE.TextureNode: .uv() has been renamed. Use .sample() instead.' );
534
+
535
+ return this.sample( uvNode );
536
+
537
+ }
538
+
539
+ /**
540
+ * Samples the texture with the given uv node.
541
+ *
542
+ * @param {Node} uvNode - The uv node.
543
+ * @return {TextureNode} A texture node representing the texture sample.
544
+ */
545
+ sample( uvNode ) {
319
546
 
320
547
  const textureNode = this.clone();
321
548
  textureNode.uvNode = nodeObject( uvNode );
@@ -325,6 +552,12 @@ class TextureNode extends UniformNode {
325
552
 
326
553
  }
327
554
 
555
+ /**
556
+ * Samples a blurred version of the texture by defining an internal bias.
557
+ *
558
+ * @param {Node<float>} amountNode - How blurred the texture should be.
559
+ * @return {TextureNode} A texture node representing the texture sample.
560
+ */
328
561
  blur( amountNode ) {
329
562
 
330
563
  const textureNode = this.clone();
@@ -335,6 +568,12 @@ class TextureNode extends UniformNode {
335
568
 
336
569
  }
337
570
 
571
+ /**
572
+ * Samples a specific mip of the texture.
573
+ *
574
+ * @param {Node<int>} levelNode - The mip level to sample.
575
+ * @return {TextureNode} A texture node representing the texture sample.
576
+ */
338
577
  level( levelNode ) {
339
578
 
340
579
  const textureNode = this.clone();
@@ -345,12 +584,24 @@ class TextureNode extends UniformNode {
345
584
 
346
585
  }
347
586
 
587
+ /**
588
+ * Returns the texture size of the requested level.
589
+ *
590
+ * @param {Node<int>} levelNode - The level to compute the size for.
591
+ * @return {TextureSizeNode} The texture size.
592
+ */
348
593
  size( levelNode ) {
349
594
 
350
595
  return textureSize( this, levelNode );
351
596
 
352
597
  }
353
598
 
599
+ /**
600
+ * Samples the texture with the given bias.
601
+ *
602
+ * @param {Node<float>} biasNode - The bias node.
603
+ * @return {TextureNode} A texture node representing the texture sample.
604
+ */
354
605
  bias( biasNode ) {
355
606
 
356
607
  const textureNode = this.clone();
@@ -361,6 +612,12 @@ class TextureNode extends UniformNode {
361
612
 
362
613
  }
363
614
 
615
+ /**
616
+ * Samples the texture by executing a compare operation.
617
+ *
618
+ * @param {Node<float>} compareNode - The node that defines the compare value.
619
+ * @return {TextureNode} A texture node representing the texture sample.
620
+ */
364
621
  compare( compareNode ) {
365
622
 
366
623
  const textureNode = this.clone();
@@ -371,6 +628,13 @@ class TextureNode extends UniformNode {
371
628
 
372
629
  }
373
630
 
631
+ /**
632
+ * Samples the texture using an explicit gradient.
633
+ *
634
+ * @param {Node<vec2>} gradNodeX - The gradX node.
635
+ * @param {Node<vec2>} gradNodeY - The gradY node.
636
+ * @return {TextureNode} A texture node representing the texture sample.
637
+ */
374
638
  grad( gradNodeX, gradNodeY ) {
375
639
 
376
640
  const textureNode = this.clone();
@@ -381,6 +645,12 @@ class TextureNode extends UniformNode {
381
645
 
382
646
  }
383
647
 
648
+ /**
649
+ * Samples the texture by defining a depth node.
650
+ *
651
+ * @param {Node<int>} depthNode - The depth node.
652
+ * @return {TextureNode} A texture node representing the texture sample.
653
+ */
384
654
  depth( depthNode ) {
385
655
 
386
656
  const textureNode = this.clone();
@@ -415,6 +685,9 @@ class TextureNode extends UniformNode {
415
685
 
416
686
  }
417
687
 
688
+ /**
689
+ * The update is used to implement the update of the uv transformation matrix.
690
+ */
418
691
  update() {
419
692
 
420
693
  const texture = this.value;
@@ -430,6 +703,11 @@ class TextureNode extends UniformNode {
430
703
 
431
704
  }
432
705
 
706
+ /**
707
+ * Clones the texture node.
708
+ *
709
+ * @return {TextureNode} The cloned texture node.
710
+ */
433
711
  clone() {
434
712
 
435
713
  const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
@@ -443,9 +721,37 @@ class TextureNode extends UniformNode {
443
721
 
444
722
  export default TextureNode;
445
723
 
724
+ /**
725
+ * TSL function for creating a texture node.
726
+ *
727
+ * @function
728
+ * @param {Texture} value - The texture.
729
+ * @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
730
+ * @param {Node<int>?} [levelNode=null] - The level node.
731
+ * @param {Node<float>?} [biasNode=null] - The bias node.
732
+ * @returns {TextureNode}
733
+ */
446
734
  export const texture = /*@__PURE__*/ nodeProxy( TextureNode );
735
+
736
+ /**
737
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
738
+ *
739
+ * @function
740
+ * @param {Texture} value - The texture.
741
+ * @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
742
+ * @param {Node<int>?} [levelNode=null] - The level node.
743
+ * @param {Node<float>?} [biasNode=null] - The bias node.
744
+ * @returns {TextureNode}
745
+ */
447
746
  export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
448
747
 
449
748
  //export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
450
749
 
750
+ /**
751
+ * Converts a texture or texture node to a sampler.
752
+ *
753
+ * @function
754
+ * @param {TextureNode|Texture} aTexture - The texture or texture node to convert.
755
+ * @returns {Node}
756
+ */
451
757
  export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : texture( aTexture ) ).convert( 'sampler' );
@@ -1,6 +1,15 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module TextureSizeNode **/
5
+
6
+ /**
7
+ * A node that represents the dimensions of a texture. The texture size is
8
+ * retrieved in the shader via built-in shader functions like `textureDimensions()`
9
+ * or `textureSize()`.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class TextureSizeNode extends Node {
5
14
 
6
15
  static get type() {
@@ -9,13 +18,38 @@ class TextureSizeNode extends Node {
9
18
 
10
19
  }
11
20
 
21
+ /**
22
+ * Constructs a new texture size node.
23
+ *
24
+ * @param {TextureNode} textureNode - A texture node which size should be retrieved.
25
+ * @param {Node<int>?} [levelNode=null] - A level node which defines the requested mip.
26
+ */
12
27
  constructor( textureNode, levelNode = null ) {
13
28
 
14
29
  super( 'uvec2' );
15
30
 
31
+ /**
32
+ * This flag can be used for type testing.
33
+ *
34
+ * @type {Boolean}
35
+ * @readonly
36
+ * @default true
37
+ */
16
38
  this.isTextureSizeNode = true;
17
39
 
40
+ /**
41
+ * A texture node which size should be retrieved.
42
+ *
43
+ * @type {TextureNode}
44
+ */
18
45
  this.textureNode = textureNode;
46
+
47
+ /**
48
+ * A level node which defines the requested mip.
49
+ *
50
+ * @type {Node<int>}
51
+ * @default null
52
+ */
19
53
  this.levelNode = levelNode;
20
54
 
21
55
  }
@@ -33,4 +67,12 @@ class TextureSizeNode extends Node {
33
67
 
34
68
  export default TextureSizeNode;
35
69
 
70
+ /**
71
+ * TSL function for creating a texture size node.
72
+ *
73
+ * @function
74
+ * @param {TextureNode} textureNode - A texture node which size should be retrieved.
75
+ * @param {Node<int>?} [levelNode=null] - A level node which defines the requested mip.
76
+ * @returns {TextureSizeNode}
77
+ */
36
78
  export const textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode );
@@ -1,3 +1,12 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
2
 
3
- export const uv = ( index ) => attribute( 'uv' + ( index > 0 ? index : '' ), 'vec2' );
3
+ /** @module UV **/
4
+
5
+ /**
6
+ * TSL function for creating an uv attribute node with the given index.
7
+ *
8
+ * @function
9
+ * @param {Number} [index=0] - The uv index.
10
+ * @return {AttributeNode<vec2>} The uv attribute node.
11
+ */
12
+ export const uv = ( index = 0 ) => attribute( 'uv' + ( index > 0 ? index : '' ), 'vec2' );