super-three 0.171.0 → 0.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,6 +1,15 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { float, addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module RemapNode **/
5
+
6
+ /**
7
+ * This node allows to remap a node value from one range into another. E.g a value of
8
+ * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
9
+ * `RemapNode` takes care of that and converts the original value of `0.4` to `0.5`.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class RemapNode extends Node {
5
14
 
6
15
  static get type() {
@@ -9,16 +18,63 @@ class RemapNode extends Node {
9
18
 
10
19
  }
11
20
 
21
+ /**
22
+ * Constructs a new remap node.
23
+ *
24
+ * @param {Node} node - The node that should be remapped.
25
+ * @param {Node} inLowNode - The source or current lower bound of the range.
26
+ * @param {Node} inHighNode - The source or current upper bound of the range.
27
+ * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
28
+ * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
29
+ */
12
30
  constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
13
31
 
14
32
  super();
15
33
 
34
+ /**
35
+ * The node that should be remapped.
36
+ *
37
+ * @type {Node}
38
+ */
16
39
  this.node = node;
40
+
41
+ /**
42
+ * The source or current lower bound of the range.
43
+ *
44
+ * @type {Node}
45
+ */
17
46
  this.inLowNode = inLowNode;
47
+
48
+ /**
49
+ * The source or current upper bound of the range.
50
+ *
51
+ * @type {Node}
52
+ */
18
53
  this.inHighNode = inHighNode;
54
+
55
+ /**
56
+ * The target lower bound of the range.
57
+ *
58
+ * @type {Node}
59
+ * @default float(0)
60
+ */
19
61
  this.outLowNode = outLowNode;
62
+
63
+ /**
64
+ * The target upper bound of the range.
65
+ *
66
+ * @type {Node}
67
+ * @default float(1)
68
+ */
20
69
  this.outHighNode = outHighNode;
21
70
 
71
+ /**
72
+ * Whether the node value should be clamped before
73
+ * remapping it to the target range.
74
+ *
75
+ * @type {Boolean}
76
+ * @default true
77
+ */
22
78
  this.doClamp = true;
23
79
 
24
80
  }
@@ -39,7 +95,30 @@ class RemapNode extends Node {
39
95
 
40
96
  export default RemapNode;
41
97
 
98
+ /**
99
+ * TSL function for creating a remap node.
100
+ *
101
+ * @function
102
+ * @param {Node} node - The node that should be remapped.
103
+ * @param {Node} inLowNode - The source or current lower bound of the range.
104
+ * @param {Node} inHighNode - The source or current upper bound of the range.
105
+ * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
106
+ * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
107
+ * @returns {RemapNode}
108
+ */
42
109
  export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
110
+
111
+ /**
112
+ * TSL function for creating a remap node, but with enabled clamping.
113
+ *
114
+ * @function
115
+ * @param {Node} node - The node that should be remapped.
116
+ * @param {Node} inLowNode - The source or current lower bound of the range.
117
+ * @param {Node} inHighNode - The source or current upper bound of the range.
118
+ * @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
119
+ * @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
120
+ * @returns {RemapNode}
121
+ */
43
122
  export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
44
123
 
45
124
  addMethodChaining( 'remap', remap );
@@ -2,6 +2,13 @@ import TempNode from '../core/TempNode.js';
2
2
  import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
3
3
  import { cos, sin } from '../math/MathNode.js';
4
4
 
5
+ /** @module RotateNode **/
6
+
7
+ /**
8
+ * Applies a rotation to the given position node.
9
+ *
10
+ * @augments TempNode
11
+ */
5
12
  class RotateNode extends TempNode {
6
13
 
7
14
  static get type() {
@@ -10,15 +17,40 @@ class RotateNode extends TempNode {
10
17
 
11
18
  }
12
19
 
20
+ /**
21
+ * Constructs a new rotate node.
22
+ *
23
+ * @param {Node} positionNode - The position node.
24
+ * @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
25
+ * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
26
+ */
13
27
  constructor( positionNode, rotationNode ) {
14
28
 
15
29
  super();
16
30
 
31
+ /**
32
+ * The position node.
33
+ *
34
+ * @type {Node}
35
+ */
17
36
  this.positionNode = positionNode;
37
+
38
+ /**
39
+ * Represents the rotation that is applied to the position node.
40
+ * Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
41
+ *
42
+ * @type {Node}
43
+ */
18
44
  this.rotationNode = rotationNode;
19
45
 
20
46
  }
21
47
 
48
+ /**
49
+ * The type of the {@link RotateNode#positionNode} defines the node's type.
50
+ *
51
+ * @param {NodeBuilder} builder - The current node builder.
52
+ * @return {String} The node's type.
53
+ */
22
54
  getNodeType( builder ) {
23
55
 
24
56
  return this.positionNode.getNodeType( builder );
@@ -60,4 +92,13 @@ class RotateNode extends TempNode {
60
92
 
61
93
  export default RotateNode;
62
94
 
95
+ /**
96
+ * TSL function for creating a rotate node.
97
+ *
98
+ * @function
99
+ * @param {Node} positionNode - The position node.
100
+ * @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
101
+ * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
102
+ * @returns {RotateNode}
103
+ */
63
104
  export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
@@ -1,6 +1,17 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { vectorComponents } from '../core/constants.js';
3
3
 
4
+ /**
5
+ * This module is part of the TSL core and usually not used in app level code.
6
+ * `SetNode` represents a set operation which means it is used to implement any
7
+ * `setXYZW()`, `setRGBA()` and `setSTPQ()` method invocations on node objects.
8
+ * For example:
9
+ * ```js
10
+ * materialLine.colorNode = color( 0, 0, 0 ).setR( float( 1 ) );
11
+ * ```
12
+ *
13
+ * @augments TempNode
14
+ */
4
15
  class SetNode extends TempNode {
5
16
 
6
17
  static get type() {
@@ -9,16 +20,46 @@ class SetNode extends TempNode {
9
20
 
10
21
  }
11
22
 
23
+ /**
24
+ * Constructs a new set node.
25
+ *
26
+ * @param {Node} sourceNode - The node that should be updated.
27
+ * @param {String} components - The components that should be updated.
28
+ * @param {Node} targetNode - The value node.
29
+ */
12
30
  constructor( sourceNode, components, targetNode ) {
13
31
 
14
32
  super();
15
33
 
34
+ /**
35
+ * The node that should be updated.
36
+ *
37
+ * @type {Node}
38
+ */
16
39
  this.sourceNode = sourceNode;
40
+
41
+ /**
42
+ * The components that should be updated.
43
+ *
44
+ * @type {String}
45
+ */
17
46
  this.components = components;
47
+
48
+ /**
49
+ * The value node.
50
+ *
51
+ * @type {Node}
52
+ */
18
53
  this.targetNode = targetNode;
19
54
 
20
55
  }
21
56
 
57
+ /**
58
+ * This method is overwritten since the node type is inferred from {@link SetNode#sourceNode}.
59
+ *
60
+ * @param {NodeBuilder} builder - The current node builder.
61
+ * @return {String} The node type.
62
+ */
22
63
  getNodeType( builder ) {
23
64
 
24
65
  return this.sourceNode.getNodeType( builder );
@@ -30,7 +71,9 @@ class SetNode extends TempNode {
30
71
  const { sourceNode, components, targetNode } = this;
31
72
 
32
73
  const sourceType = this.getNodeType( builder );
33
- const targetType = builder.getTypeFromLength( components.length, targetNode.getNodeType( builder ) );
74
+
75
+ const componentType = builder.getComponentType( targetNode.getNodeType( builder ) );
76
+ const targetType = builder.getTypeFromLength( components.length, componentType );
34
77
 
35
78
  const targetSnippet = targetNode.build( builder, targetType );
36
79
  const sourceSnippet = sourceNode.build( builder, sourceType );
@@ -1,8 +1,19 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { vectorComponents } from '../core/constants.js';
3
3
 
4
- const stringVectorComponents = vectorComponents.join( '' );
5
-
4
+ const _stringVectorComponents = vectorComponents.join( '' );
5
+
6
+ /**
7
+ * This module is part of the TSL core and usually not used in app level code.
8
+ * `SplitNode` represents a property access operation which means it is
9
+ * used to implement any `.xyzw`, `.rgba` and `stpq` usage on node objects.
10
+ * For example:
11
+ * ```js
12
+ * const redValue = color.r;
13
+ * ```
14
+ *
15
+ * @augments Node
16
+ */
6
17
  class SplitNode extends Node {
7
18
 
8
19
  static get type() {
@@ -11,17 +22,46 @@ class SplitNode extends Node {
11
22
 
12
23
  }
13
24
 
25
+ /**
26
+ * Constructs a new split node.
27
+ *
28
+ * @param {Node} node - The node that should be accessed.
29
+ * @param {String} [components='x'] - The components that should be accessed.
30
+ */
14
31
  constructor( node, components = 'x' ) {
15
32
 
16
33
  super();
17
34
 
35
+ /**
36
+ * The node that should be accessed.
37
+ *
38
+ * @type {Node}
39
+ */
18
40
  this.node = node;
41
+
42
+ /**
43
+ * The components that should be accessed.
44
+ *
45
+ * @type {string}
46
+ */
19
47
  this.components = components;
20
48
 
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {Boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
21
56
  this.isSplitNode = true;
22
57
 
23
58
  }
24
59
 
60
+ /**
61
+ * Returns the vector length which is computed based on the requested components.
62
+ *
63
+ * @return {Number} The vector length.
64
+ */
25
65
  getVectorLength() {
26
66
 
27
67
  let vectorLength = this.components.length;
@@ -36,12 +76,24 @@ class SplitNode extends Node {
36
76
 
37
77
  }
38
78
 
79
+ /**
80
+ * Returns the component type of the node's type.
81
+ *
82
+ * @param {NodeBuilder} builder - The current node builder.
83
+ * @return {String} The component type.
84
+ */
39
85
  getComponentType( builder ) {
40
86
 
41
87
  return builder.getComponentType( this.node.getNodeType( builder ) );
42
88
 
43
89
  }
44
90
 
91
+ /**
92
+ * This method is overwritten since the node type is inferred from requested components.
93
+ *
94
+ * @param {NodeBuilder} builder - The current node builder.
95
+ * @return {String} The node type.
96
+ */
45
97
  getNodeType( builder ) {
46
98
 
47
99
  return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
@@ -71,7 +123,7 @@ class SplitNode extends Node {
71
123
 
72
124
  const nodeSnippet = node.build( builder, type );
73
125
 
74
- if ( this.components.length === nodeTypeLength && this.components === stringVectorComponents.slice( 0, this.components.length ) ) {
126
+ if ( this.components.length === nodeTypeLength && this.components === _stringVectorComponents.slice( 0, this.components.length ) ) {
75
127
 
76
128
  // unnecessary swizzle
77
129
 
@@ -2,6 +2,19 @@ import Node from '../core/Node.js';
2
2
  import { uv } from '../accessors/UV.js';
3
3
  import { nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module SpriteSheetUVNode **/
6
+
7
+ /**
8
+ * Can be used to compute texture coordinates for animated sprite sheets.
9
+ *
10
+ * ```js
11
+ * const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );
12
+ *
13
+ * material.colorNode = texture( spriteSheet, uvNode );
14
+ * ```
15
+ *
16
+ * @augments Node
17
+ */
5
18
  class SpriteSheetUVNode extends Node {
6
19
 
7
20
  static get type() {
@@ -10,12 +23,36 @@ class SpriteSheetUVNode extends Node {
10
23
 
11
24
  }
12
25
 
26
+ /**
27
+ * Constructs a new sprite sheet uv node.
28
+ *
29
+ * @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
30
+ * @param {Node<vec2>} [uvNode=uv()] - The uv node.
31
+ * @param {Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
32
+ */
13
33
  constructor( countNode, uvNode = uv(), frameNode = float( 0 ) ) {
14
34
 
15
35
  super( 'vec2' );
16
36
 
37
+ /**
38
+ * The node that defines the number of sprites in the x and y direction (e.g 6x6).
39
+ *
40
+ * @type {Node<vec2>}
41
+ */
17
42
  this.countNode = countNode;
43
+
44
+ /**
45
+ * The uv node.
46
+ *
47
+ * @type {Node<vec2>}
48
+ */
18
49
  this.uvNode = uvNode;
50
+
51
+ /**
52
+ * The node that defines the current frame/sprite.
53
+ *
54
+ * @type {Node<float>}
55
+ */
19
56
  this.frameNode = frameNode;
20
57
 
21
58
  }
@@ -42,4 +79,13 @@ class SpriteSheetUVNode extends Node {
42
79
 
43
80
  export default SpriteSheetUVNode;
44
81
 
82
+ /**
83
+ * TSL function for creating a sprite sheet uv node.
84
+ *
85
+ * @function
86
+ * @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
87
+ * @param {Node<vec2>} [uvNode=uv()] - The uv node.
88
+ * @param {Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
89
+ * @returns {SpriteSheetUVNode}
90
+ */
45
91
  export const spritesheetUV = /*@__PURE__*/ nodeProxy( SpriteSheetUVNode );
@@ -3,6 +3,23 @@ import { cameraViewMatrix, cameraProjectionMatrix } from '../accessors/Camera.js
3
3
  import { positionLocal } from '../accessors/Position.js';
4
4
  import { Fn, defined } from '../tsl/TSLBase.js';
5
5
 
6
+ /** @module SpriteUtils **/
7
+
8
+ /**
9
+ * This can be used to achieve a billboarding behavior for flat meshes. That means they are
10
+ * oriented always towards the camera.
11
+ *
12
+ * ```js
13
+ * material.vertexNode = billboarding();
14
+ * ```
15
+ *
16
+ * @method
17
+ * @param {Object} config - The configuration object.
18
+ * @param {Node<vec3>?} [config.position=null] - Can be used to define the vertex positions in world space.
19
+ * @param {Boolean} [config.horizontal=true] - Whether to follow the camera rotation horizontally or not.
20
+ * @param {Boolean} [config.vertical=false] - Whether to follow the camera rotation vertically or not.
21
+ * @return {Node<vec3>} The updated vertex position in clip space.
22
+ */
6
23
  export const billboarding = /*@__PURE__*/ Fn( ( { position = null, horizontal = true, vertical = false } ) => {
7
24
 
8
25
  let worldMatrix;
@@ -1,6 +1,19 @@
1
1
  import { nodeProxy } from '../tsl/TSLBase.js';
2
2
  import ArrayElementNode from './ArrayElementNode.js';
3
3
 
4
+ /** @module StorageArrayElementNode **/
5
+
6
+ /**
7
+ * This class enables element access on instances of {@link StorageBufferNode}.
8
+ * In most cases, it is indirectly used when accessing elements with the
9
+ * {@link StorageBufferNode#element} method.
10
+ *
11
+ * ```js
12
+ * const position = positionStorage.element( instanceIndex );
13
+ * ```
14
+ *
15
+ * @augments ArrayElementNode
16
+ */
4
17
  class StorageArrayElementNode extends ArrayElementNode {
5
18
 
6
19
  static get type() {
@@ -9,14 +22,33 @@ class StorageArrayElementNode extends ArrayElementNode {
9
22
 
10
23
  }
11
24
 
25
+ /**
26
+ * Constructs storage buffer element node.
27
+ *
28
+ * @param {StorageBufferNode} storageBufferNode - The storage buffer node.
29
+ * @param {Node} indexNode - The index node that defines the element access.
30
+ */
12
31
  constructor( storageBufferNode, indexNode ) {
13
32
 
14
33
  super( storageBufferNode, indexNode );
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.isStorageArrayElementNode = true;
17
43
 
18
44
  }
19
45
 
46
+ /**
47
+ * The storage buffer node.
48
+ *
49
+ * @param {Node} value
50
+ * @type {StorageBufferNode}
51
+ */
20
52
  set storageBufferNode( value ) {
21
53
 
22
54
  this.node = value;
@@ -87,4 +119,12 @@ class StorageArrayElementNode extends ArrayElementNode {
87
119
 
88
120
  export default StorageArrayElementNode;
89
121
 
122
+ /**
123
+ * TSL function for creating a storage element node.
124
+ *
125
+ * @function
126
+ * @param {StorageBufferNode} storageBufferNode - The storage buffer node.
127
+ * @param {Node} indexNode - The index node that defines the element access.
128
+ * @returns {StorageArrayElementNode}
129
+ */
90
130
  export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode );
@@ -1,8 +1,27 @@
1
1
  import { renderGroup } from '../core/UniformGroupNode.js';
2
2
  import { uniform } from '../core/UniformNode.js';
3
3
 
4
+ /** @module Timer **/
5
+
6
+ /**
7
+ * Represents the elapsed time in seconds.
8
+ *
9
+ * @type {UniformNode<float>}
10
+ */
4
11
  export const time = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.time );
12
+
13
+ /**
14
+ * Represents the delta time in seconds.
15
+ *
16
+ * @type {UniformNode<float>}
17
+ */
5
18
  export const deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.deltaTime );
19
+
20
+ /**
21
+ * Represents the current frame ID.
22
+ *
23
+ * @type {UniformNode<uint>}
24
+ */
6
25
  export const frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );
7
26
 
8
27
  // Deprecated
@@ -5,6 +5,17 @@ import { positionLocal } from '../accessors/Position.js';
5
5
  import { texture } from '../accessors/TextureNode.js';
6
6
  import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
7
7
 
8
+ /** @module TriplanarTexturesNode **/
9
+
10
+ /**
11
+ * Can be used for triplanar texture mapping.
12
+ *
13
+ * ```js
14
+ * material.colorNode = triplanarTexture( texture( diffuseMap ) );
15
+ * ```
16
+ *
17
+ * @augments Node
18
+ */
8
19
  class TriplanarTexturesNode extends Node {
9
20
 
10
21
  static get type() {
@@ -13,17 +24,65 @@ class TriplanarTexturesNode extends Node {
13
24
 
14
25
  }
15
26
 
27
+ /**
28
+ * Constructs a new triplanar textures node.
29
+ *
30
+ * @param {Node} textureXNode - First texture node.
31
+ * @param {Node?} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
32
+ * @param {Node?} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
33
+ * @param {Node<float>?} [scaleNode=float(1)] - The scale node.
34
+ * @param {Node<vec3>?} [positionNode=positionLocal] - Vertex positions in local space.
35
+ * @param {Node<vec3>?} [normalNode=normalLocal] - Normals in local space.
36
+ */
16
37
  constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
17
38
 
18
39
  super( 'vec4' );
19
40
 
41
+ /**
42
+ * First texture node.
43
+ *
44
+ * @type {Node}
45
+ */
20
46
  this.textureXNode = textureXNode;
47
+
48
+ /**
49
+ * Second texture node. When not set, the shader will sample from `textureXNode` instead.
50
+ *
51
+ * @type {Node}
52
+ * @default null
53
+ */
21
54
  this.textureYNode = textureYNode;
55
+
56
+ /**
57
+ * Third texture node. When not set, the shader will sample from `textureXNode` instead.
58
+ *
59
+ * @type {Node}
60
+ * @default null
61
+ */
22
62
  this.textureZNode = textureZNode;
23
63
 
64
+ /**
65
+ * The scale node.
66
+ *
67
+ * @type {Node<float>}
68
+ * @default float(1)
69
+ */
24
70
  this.scaleNode = scaleNode;
25
71
 
72
+ /**
73
+ * Vertex positions in local space.
74
+ *
75
+ * @type {Node<vec3>}
76
+ * @default positionLocal
77
+ */
26
78
  this.positionNode = positionNode;
79
+
80
+ /**
81
+ * Normals in local space.
82
+ *
83
+ * @type {Node<vec3>}
84
+ * @default normalLocal
85
+ */
27
86
  this.normalNode = normalNode;
28
87
 
29
88
  }
@@ -60,5 +119,30 @@ class TriplanarTexturesNode extends Node {
60
119
 
61
120
  export default TriplanarTexturesNode;
62
121
 
122
+ /**
123
+ * TSL function for creating a triplanar textures node.
124
+ *
125
+ * @function
126
+ * @param {Node} textureXNode - First texture node.
127
+ * @param {Node?} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
128
+ * @param {Node?} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
129
+ * @param {Node<float>?} [scaleNode=float(1)] - The scale node.
130
+ * @param {Node<vec3>?} [positionNode=positionLocal] - Vertex positions in local space.
131
+ * @param {Node<vec3>?} [normalNode=normalLocal] - Normals in local space.
132
+ * @returns {TriplanarTexturesNode}
133
+ */
63
134
  export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode );
135
+
136
+ /**
137
+ * TSL function for creating a triplanar textures node.
138
+ *
139
+ * @function
140
+ * @param {Node} textureXNode - First texture node.
141
+ * @param {Node?} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
142
+ * @param {Node?} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
143
+ * @param {Node<float>?} [scaleNode=float(1)] - The scale node.
144
+ * @param {Node<vec3>?} [positionNode=positionLocal] - Vertex positions in local space.
145
+ * @param {Node<vec3>?} [normalNode=normalLocal] - Normals in local space.
146
+ * @returns {TriplanarTexturesNode}
147
+ */
64
148
  export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
@@ -1,12 +1,32 @@
1
1
  import { Fn, vec2 } from '../tsl/TSLBase.js';
2
2
  import { rotate } from './RotateNode.js';
3
3
 
4
+ /** @module UVUtils **/
5
+
6
+ /**
7
+ * Rotates the given uv coordinates around a center point
8
+ *
9
+ * @method
10
+ * @param {Node<vec2>} uv - The uv coordinates.
11
+ * @param {Node<float>} rotation - The rotation defined in radians.
12
+ * @param {Node<vec2>} center - The center of rotation
13
+ * @return {Node<vec2>} The rotated uv coordinates.
14
+ */
4
15
  export const rotateUV = /*@__PURE__*/ Fn( ( [ uv, rotation, center = vec2( 0.5 ) ] ) => {
5
16
 
6
17
  return rotate( uv.sub( center ), rotation ).add( center );
7
18
 
8
19
  } );
9
20
 
21
+ /**
22
+ * Applies a spherical warping effect to the given uv coordinates.
23
+ *
24
+ * @method
25
+ * @param {Node<vec2>} uv - The uv coordinates.
26
+ * @param {Node<float>} strength - The strength of the effect.
27
+ * @param {Node<vec2>} center - The center point
28
+ * @return {Node<vec2>} The updated uv coordinates.
29
+ */
10
30
  export const spherizeUV = /*@__PURE__*/ Fn( ( [ uv, strength, center = vec2( 0.5 ) ] ) => {
11
31
 
12
32
  const delta = uv.sub( center );