super-three 0.171.0 → 0.173.0

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