super-three 0.173.4 → 0.175.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 (832) hide show
  1. package/build/three.cjs +22198 -1564
  2. package/build/three.core.js +21287 -1346
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +882 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19358 -17482
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19342 -17482
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +144 -42
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +194 -71
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +74 -30
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +51 -5
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +71 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +222 -9
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +87 -19
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +56 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +90 -70
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +75 -2
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +134 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +268 -134
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +187 -11
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -5,8 +5,6 @@ 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
8
  /**
11
9
  * Can be used for triplanar texture mapping.
12
10
  *
@@ -28,11 +26,11 @@ class TriplanarTexturesNode extends Node {
28
26
  * Constructs a new triplanar textures node.
29
27
  *
30
28
  * @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.
29
+ * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
30
+ * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
31
+ * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
32
+ * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
33
+ * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
36
34
  */
37
35
  constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
38
36
 
@@ -48,7 +46,7 @@ class TriplanarTexturesNode extends Node {
48
46
  /**
49
47
  * Second texture node. When not set, the shader will sample from `textureXNode` instead.
50
48
  *
51
- * @type {Node}
49
+ * @type {?Node}
52
50
  * @default null
53
51
  */
54
52
  this.textureYNode = textureYNode;
@@ -56,7 +54,7 @@ class TriplanarTexturesNode extends Node {
56
54
  /**
57
55
  * Third texture node. When not set, the shader will sample from `textureXNode` instead.
58
56
  *
59
- * @type {Node}
57
+ * @type {?Node}
60
58
  * @default null
61
59
  */
62
60
  this.textureZNode = textureZNode;
@@ -122,27 +120,29 @@ export default TriplanarTexturesNode;
122
120
  /**
123
121
  * TSL function for creating a triplanar textures node.
124
122
  *
123
+ * @tsl
125
124
  * @function
126
125
  * @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.
126
+ * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
127
+ * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
128
+ * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
129
+ * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
130
+ * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
132
131
  * @returns {TriplanarTexturesNode}
133
132
  */
134
- export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode );
133
+ export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode ).setParameterLength( 1, 6 );
135
134
 
136
135
  /**
137
136
  * TSL function for creating a triplanar textures node.
138
137
  *
138
+ * @tsl
139
139
  * @function
140
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.
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
146
  * @returns {TriplanarTexturesNode}
147
147
  */
148
148
  export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
@@ -1,12 +1,11 @@
1
1
  import { Fn, vec2 } from '../tsl/TSLBase.js';
2
2
  import { rotate } from './RotateNode.js';
3
3
 
4
- /** @module UVUtils **/
5
-
6
4
  /**
7
5
  * Rotates the given uv coordinates around a center point
8
6
  *
9
- * @method
7
+ * @tsl
8
+ * @function
10
9
  * @param {Node<vec2>} uv - The uv coordinates.
11
10
  * @param {Node<float>} rotation - The rotation defined in radians.
12
11
  * @param {Node<vec2>} center - The center of rotation
@@ -21,7 +20,8 @@ export const rotateUV = /*@__PURE__*/ Fn( ( [ uv, rotation, center = vec2( 0.5 )
21
20
  /**
22
21
  * Applies a spherical warping effect to the given uv coordinates.
23
22
  *
24
- * @method
23
+ * @tsl
24
+ * @function
25
25
  * @param {Node<vec2>} uv - The uv coordinates.
26
26
  * @param {Node<float>} strength - The strength of the effect.
27
27
  * @param {Node<vec2>} center - The center point
@@ -3,8 +3,6 @@ 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
6
  /**
9
7
  * A special version of a screen uv function that involves a depth comparison
10
8
  * when computing the final uvs. The function mitigates visual errors when
@@ -12,8 +10,9 @@ import { linearDepth } from '../display/ViewportDepthNode.js';
12
10
  * objects in front of a refractive surface might appear on the refractive surface
13
11
  * which is incorrect.
14
12
  *
15
- * @method
16
- * @param {Node<vec2>?} uv - Optional uv coordinates. By default `screenUV` is used.
13
+ * @tsl
14
+ * @function
15
+ * @param {?Node<vec2>} uv - Optional uv coordinates. By default `screenUV` is used.
17
16
  * @return {Node<vec2>} The update uv coordinates.
18
17
  */
19
18
  export const viewportSafeUV = /*@__PURE__*/ Fn( ( [ uv = null ] ) => {
@@ -141,41 +141,107 @@ function copyArrayContents( src, target ) {
141
141
 
142
142
  }
143
143
 
144
+ /**
145
+ * A special version of a mesh with multi draw batch rendering support. Use
146
+ * this class if you have to render a large number of objects with the same
147
+ * material but with different geometries or world transformations. The usage of
148
+ * `BatchedMesh` will help you to reduce the number of draw calls and thus improve the overall
149
+ * rendering performance in your application.
150
+ *
151
+ * ```js
152
+ * const box = new THREE.BoxGeometry( 1, 1, 1 );
153
+ * const sphere = new THREE.SphereGeometry( 1, 12, 12 );
154
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
155
+ *
156
+ * // initialize and add geometries into the batched mesh
157
+ * const batchedMesh = new BatchedMesh( 10, 5000, 10000, material );
158
+ * const boxGeometryId = batchedMesh.addGeometry( box );
159
+ * const sphereGeometryId = batchedMesh.addGeometry( sphere );
160
+ *
161
+ * // create instances of those geometries
162
+ * const boxInstancedId1 = batchedMesh.addInstance( boxGeometryId );
163
+ * const boxInstancedId2 = batchedMesh.addInstance( boxGeometryId );
164
+ *
165
+ * const sphereInstancedId1 = batchedMesh.addInstance( sphereGeometryId );
166
+ * const sphereInstancedId2 = batchedMesh.addInstance( sphereGeometryId );
167
+ *
168
+ * // position the geometries
169
+ * batchedMesh.setMatrixAt( boxInstancedId1, boxMatrix1 );
170
+ * batchedMesh.setMatrixAt( boxInstancedId2, boxMatrix2 );
171
+ *
172
+ * batchedMesh.setMatrixAt( sphereInstancedId1, sphereMatrix1 );
173
+ * batchedMesh.setMatrixAt( sphereInstancedId2, sphereMatrix2 );
174
+ *
175
+ * scene.add( batchedMesh );
176
+ * ```
177
+ *
178
+ * @augments Mesh
179
+ */
144
180
  class BatchedMesh extends Mesh {
145
181
 
146
- get maxInstanceCount() {
147
-
148
- return this._maxInstanceCount;
149
-
150
- }
151
-
152
- get instanceCount() {
153
-
154
- return this._instanceInfo.length - this._availableInstanceIds.length;
155
-
156
- }
157
-
158
- get unusedVertexCount() {
159
-
160
- return this._maxVertexCount - this._nextVertexStart;
161
-
162
- }
163
-
164
- get unusedIndexCount() {
165
-
166
- return this._maxIndexCount - this._nextIndexStart;
167
-
168
- }
169
-
182
+ /**
183
+ * Constructs a new batched mesh.
184
+ *
185
+ * @param {number} maxInstanceCount - The maximum number of individual instances planned to be added and rendered.
186
+ * @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries.
187
+ * @param {number} [maxIndexCount=maxVertexCount*2] - The maximum number of indices to be used by all unique geometries
188
+ * @param {Material|Array<Material>} [material] - The mesh material.
189
+ */
170
190
  constructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {
171
191
 
172
192
  super( new BufferGeometry(), material );
173
193
 
194
+ /**
195
+ * This flag can be used for type testing.
196
+ *
197
+ * @type {boolean}
198
+ * @readonly
199
+ * @default true
200
+ */
174
201
  this.isBatchedMesh = true;
202
+
203
+ /**
204
+ * When set ot `true`, the individual objects of a batch are frustum culled.
205
+ *
206
+ * @type {boolean}
207
+ * @default true
208
+ */
175
209
  this.perObjectFrustumCulled = true;
210
+
211
+ /**
212
+ * When set to `true`, the individual objects of a batch are sorted to improve overdraw-related artifacts.
213
+ * If the material is marked as "transparent" objects are rendered back to front and if not then they are
214
+ * rendered front to back.
215
+ *
216
+ * @type {boolean}
217
+ * @default true
218
+ */
176
219
  this.sortObjects = true;
220
+
221
+ /**
222
+ * The bounding box of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingBox}.
223
+ *
224
+ * @type {?Box3}
225
+ * @default null
226
+ */
177
227
  this.boundingBox = null;
228
+
229
+ /**
230
+ * The bounding sphere of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingSphere}.
231
+ *
232
+ * @type {?Sphere}
233
+ * @default null
234
+ */
178
235
  this.boundingSphere = null;
236
+
237
+ /**
238
+ * Takes a sort a function that is run before render. The function takes a list of instances to
239
+ * sort and a camera. The objects in the list include a "z" field to perform a depth-ordered
240
+ * sort with.
241
+ *
242
+ * @type {?Function}
243
+ * @default null
244
+ */
179
245
  this.customSort = null;
180
246
 
181
247
  // stores visible, active, and geometry id per instance and reserved buffer ranges for geometries
@@ -216,6 +282,54 @@ class BatchedMesh extends Mesh {
216
282
 
217
283
  }
218
284
 
285
+ /**
286
+ * The maximum number of individual instances that can be stored in the batch.
287
+ *
288
+ * @type {number}
289
+ * @readonly
290
+ */
291
+ get maxInstanceCount() {
292
+
293
+ return this._maxInstanceCount;
294
+
295
+ }
296
+
297
+ /**
298
+ * The instance count.
299
+ *
300
+ * @type {number}
301
+ * @readonly
302
+ */
303
+ get instanceCount() {
304
+
305
+ return this._instanceInfo.length - this._availableInstanceIds.length;
306
+
307
+ }
308
+
309
+ /**
310
+ * The number of unused vertices.
311
+ *
312
+ * @type {number}
313
+ * @readonly
314
+ */
315
+ get unusedVertexCount() {
316
+
317
+ return this._maxVertexCount - this._nextVertexStart;
318
+
319
+ }
320
+
321
+ /**
322
+ * The number of unused indices.
323
+ *
324
+ * @type {number}
325
+ * @readonly
326
+ */
327
+ get unusedIndexCount() {
328
+
329
+ return this._maxIndexCount - this._nextIndexStart;
330
+
331
+ }
332
+
219
333
  _initMatricesTexture() {
220
334
 
221
335
  // layout (1 matrix = 4 pixels)
@@ -329,6 +443,11 @@ class BatchedMesh extends Mesh {
329
443
 
330
444
  }
331
445
 
446
+ /**
447
+ * Validates the instance defined by the given ID.
448
+ *
449
+ * @param {number} instanceId - The instance to validate.
450
+ */
332
451
  validateInstanceId( instanceId ) {
333
452
 
334
453
  const instanceInfo = this._instanceInfo;
@@ -340,6 +459,11 @@ class BatchedMesh extends Mesh {
340
459
 
341
460
  }
342
461
 
462
+ /**
463
+ * Validates the geometry defined by the given ID.
464
+ *
465
+ * @param {number} geometryId - The geometry to validate.
466
+ */
343
467
  validateGeometryId( geometryId ) {
344
468
 
345
469
  const geometryInfoList = this._geometryInfo;
@@ -351,7 +475,13 @@ class BatchedMesh extends Mesh {
351
475
 
352
476
  }
353
477
 
354
-
478
+ /**
479
+ * Takes a sort a function that is run before render. The function takes a list of instances to
480
+ * sort and a camera. The objects in the list include a "z" field to perform a depth-ordered sort with.
481
+ *
482
+ * @param {Function} func - The custom sort function.
483
+ * @return {BatchedMesh} A reference to this batched mesh.
484
+ */
355
485
  setCustomSort( func ) {
356
486
 
357
487
  this.customSort = func;
@@ -359,6 +489,11 @@ class BatchedMesh extends Mesh {
359
489
 
360
490
  }
361
491
 
492
+ /**
493
+ * Computes the bounding box, updating {@link BatchedMesh#boundingBox}.
494
+ * Bounding boxes aren't computed by default. They need to be explicitly computed,
495
+ * otherwise they are `null`.
496
+ */
362
497
  computeBoundingBox() {
363
498
 
364
499
  if ( this.boundingBox === null ) {
@@ -384,6 +519,11 @@ class BatchedMesh extends Mesh {
384
519
 
385
520
  }
386
521
 
522
+ /**
523
+ * Computes the bounding sphere, updating {@link BatchedMesh#boundingSphere}.
524
+ * Bounding spheres aren't computed by default. They need to be explicitly computed,
525
+ * otherwise they are `null`.
526
+ */
387
527
  computeBoundingSphere() {
388
528
 
389
529
  if ( this.boundingSphere === null ) {
@@ -409,6 +549,13 @@ class BatchedMesh extends Mesh {
409
549
 
410
550
  }
411
551
 
552
+ /**
553
+ * Adds a new instance to the batch using the geometry of the given ID and returns
554
+ * a new id referring to the new instance to be used by other functions.
555
+ *
556
+ * @param {number} geometryId - The ID of a previously added geometry via {@link BatchedMesh#addGeometry}.
557
+ * @return {number} The instance ID.
558
+ */
412
559
  addInstance( geometryId ) {
413
560
 
414
561
  const atCapacity = this._instanceInfo.length >= this.maxInstanceCount;
@@ -460,6 +607,21 @@ class BatchedMesh extends Mesh {
460
607
 
461
608
  }
462
609
 
610
+ /**
611
+ * Adds the given geometry to the batch and returns the associated
612
+ * geometry id referring to it to be used in other functions.
613
+ *
614
+ * @param {BufferGeometry} geometry - The geometry to add.
615
+ * @param {number} [reservedVertexCount=-1] - Optional parameter specifying the amount of
616
+ * vertex buffer space to reserve for the added geometry. This is necessary if it is planned
617
+ * to set a new geometry at this index at a later time that is larger than the original geometry.
618
+ * Defaults to the length of the given geometry vertex buffer.
619
+ * @param {number} [reservedIndexCount=-1] - Optional parameter specifying the amount of index
620
+ * buffer space to reserve for the added geometry. This is necessary if it is planned to set a
621
+ * new geometry at this index at a later time that is larger than the original geometry. Defaults to
622
+ * the length of the given geometry index buffer.
623
+ * @return {number} The geometry ID.
624
+ */
463
625
  addGeometry( geometry, reservedVertexCount = - 1, reservedIndexCount = - 1 ) {
464
626
 
465
627
  this._initializeGeometry( geometry );
@@ -538,6 +700,15 @@ class BatchedMesh extends Mesh {
538
700
 
539
701
  }
540
702
 
703
+ /**
704
+ * Replaces the geometry at the given ID with the provided geometry. Throws an error if there
705
+ * is not enough space reserved for geometry. Calling this will change all instances that are
706
+ * rendering that geometry.
707
+ *
708
+ * @param {number} geometryId - The ID of the geometry that should be replaced with the given geometry.
709
+ * @param {BufferGeometry} geometry - The new geometry.
710
+ * @return {number} The geometry ID.
711
+ */
541
712
  setGeometryAt( geometryId, geometry ) {
542
713
 
543
714
  if ( geometryId >= this._geometryCount ) {
@@ -643,6 +814,13 @@ class BatchedMesh extends Mesh {
643
814
 
644
815
  }
645
816
 
817
+ /**
818
+ * Deletes the geometry defined by the given ID from this batch. Any instances referencing
819
+ * this geometry will also be removed as a side effect.
820
+ *
821
+ * @param {number} geometryId - The ID of the geometry to remove from the batch.
822
+ * @return {BatchedMesh} A reference to this batched mesh.
823
+ */
646
824
  deleteGeometry( geometryId ) {
647
825
 
648
826
  const geometryInfoList = this._geometryInfo;
@@ -672,6 +850,12 @@ class BatchedMesh extends Mesh {
672
850
 
673
851
  }
674
852
 
853
+ /**
854
+ * Deletes an existing instance from the batch using the given ID.
855
+ *
856
+ * @param {number} instanceId - The ID of the instance to remove from the batch.
857
+ * @return {BatchedMesh} A reference to this batched mesh.
858
+ */
675
859
  deleteInstance( instanceId ) {
676
860
 
677
861
  this.validateInstanceId( instanceId );
@@ -684,6 +868,13 @@ class BatchedMesh extends Mesh {
684
868
 
685
869
  }
686
870
 
871
+ /**
872
+ * Repacks the sub geometries in [name] to remove any unused space remaining from
873
+ * previously deleted geometry, freeing up space to add new geometry.
874
+ *
875
+ * @param {number} instanceId - The ID of the instance to remove from the batch.
876
+ * @return {BatchedMesh} A reference to this batched mesh.
877
+ */
687
878
  optimize() {
688
879
 
689
880
  // track the next indices to copy data to
@@ -773,7 +964,13 @@ class BatchedMesh extends Mesh {
773
964
 
774
965
  }
775
966
 
776
- // get bounding box and compute it if it doesn't exist
967
+ /**
968
+ * Returns the bounding box for the given geometry.
969
+ *
970
+ * @param {number} geometryId - The ID of the geometry to return the bounding box for.
971
+ * @param {Box3} target - The target object that is used to store the method's result.
972
+ * @return {Box3|null} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
973
+ */
777
974
  getBoundingBoxAt( geometryId, target ) {
778
975
 
779
976
  if ( geometryId >= this._geometryCount ) {
@@ -812,7 +1009,13 @@ class BatchedMesh extends Mesh {
812
1009
 
813
1010
  }
814
1011
 
815
- // get bounding sphere and compute it if it doesn't exist
1012
+ /**
1013
+ * Returns the bounding sphere for the given geometry.
1014
+ *
1015
+ * @param {number} geometryId - The ID of the geometry to return the bounding sphere for.
1016
+ * @param {Sphere} target - The target object that is used to store the method's result.
1017
+ * @return {Sphere|null} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
1018
+ */
816
1019
  getBoundingSphereAt( geometryId, target ) {
817
1020
 
818
1021
  if ( geometryId >= this._geometryCount ) {
@@ -858,6 +1061,14 @@ class BatchedMesh extends Mesh {
858
1061
 
859
1062
  }
860
1063
 
1064
+ /**
1065
+ * Sets the given local transformation matrix to the defined instance.
1066
+ * Negatively scaled matrices are not supported.
1067
+ *
1068
+ * @param {number} instanceId - The ID of an instance to set the matrix of.
1069
+ * @param {Matrix4} matrix - A 4x4 matrix representing the local transformation of a single instance.
1070
+ * @return {BatchedMesh} A reference to this batched mesh.
1071
+ */
861
1072
  setMatrixAt( instanceId, matrix ) {
862
1073
 
863
1074
  this.validateInstanceId( instanceId );
@@ -871,6 +1082,13 @@ class BatchedMesh extends Mesh {
871
1082
 
872
1083
  }
873
1084
 
1085
+ /**
1086
+ * Returns the local transformation matrix of the defined instance.
1087
+ *
1088
+ * @param {number} instanceId - The ID of an instance to get the matrix of.
1089
+ * @param {Matrix4} matrix - The target object that is used to store the method's result.
1090
+ * @return {Matrix4} The instance's local transformation matrix.
1091
+ */
874
1092
  getMatrixAt( instanceId, matrix ) {
875
1093
 
876
1094
  this.validateInstanceId( instanceId );
@@ -878,6 +1096,13 @@ class BatchedMesh extends Mesh {
878
1096
 
879
1097
  }
880
1098
 
1099
+ /**
1100
+ * Sets the given color to the defined instance.
1101
+ *
1102
+ * @param {number} instanceId - The ID of an instance to set the color of.
1103
+ * @param {Color} color - The color to set the instance to.
1104
+ * @return {BatchedMesh} A reference to this batched mesh.
1105
+ */
881
1106
  setColorAt( instanceId, color ) {
882
1107
 
883
1108
  this.validateInstanceId( instanceId );
@@ -895,6 +1120,13 @@ class BatchedMesh extends Mesh {
895
1120
 
896
1121
  }
897
1122
 
1123
+ /**
1124
+ * Returns the color of the defined instance.
1125
+ *
1126
+ * @param {number} instanceId - The ID of an instance to get the color of.
1127
+ * @param {Color} color - The target object that is used to store the method's result.
1128
+ * @return {Color} The instance's color.
1129
+ */
898
1130
  getColorAt( instanceId, color ) {
899
1131
 
900
1132
  this.validateInstanceId( instanceId );
@@ -902,23 +1134,36 @@ class BatchedMesh extends Mesh {
902
1134
 
903
1135
  }
904
1136
 
905
- setVisibleAt( instanceId, value ) {
1137
+ /**
1138
+ * Sets the visibility of the instance.
1139
+ *
1140
+ * @param {number} instanceId - The id of the instance to set the visibility of.
1141
+ * @param {boolean} visible - Whether the instance is visible or not.
1142
+ * @return {BatchedMesh} A reference to this batched mesh.
1143
+ */
1144
+ setVisibleAt( instanceId, visible ) {
906
1145
 
907
1146
  this.validateInstanceId( instanceId );
908
1147
 
909
- if ( this._instanceInfo[ instanceId ].visible === value ) {
1148
+ if ( this._instanceInfo[ instanceId ].visible === visible ) {
910
1149
 
911
1150
  return this;
912
1151
 
913
1152
  }
914
1153
 
915
- this._instanceInfo[ instanceId ].visible = value;
1154
+ this._instanceInfo[ instanceId ].visible = visible;
916
1155
  this._visibilityChanged = true;
917
1156
 
918
1157
  return this;
919
1158
 
920
1159
  }
921
1160
 
1161
+ /**
1162
+ * Returns the visibility state of the defined instance.
1163
+ *
1164
+ * @param {number} instanceId - The ID of an instance to get the visibility state of.
1165
+ * @return {boolean} Whether the instance is visible or not.
1166
+ */
922
1167
  getVisibleAt( instanceId ) {
923
1168
 
924
1169
  this.validateInstanceId( instanceId );
@@ -927,6 +1172,13 @@ class BatchedMesh extends Mesh {
927
1172
 
928
1173
  }
929
1174
 
1175
+ /**
1176
+ * Sets the geometry ID of the instance at the given index.
1177
+ *
1178
+ * @param {number} instanceId - The ID of the instance to set the geometry ID of.
1179
+ * @param {number} geometryId - The geometry ID to be use by the instance.
1180
+ * @return {BatchedMesh} A reference to this batched mesh.
1181
+ */
930
1182
  setGeometryIdAt( instanceId, geometryId ) {
931
1183
 
932
1184
  this.validateInstanceId( instanceId );
@@ -938,6 +1190,12 @@ class BatchedMesh extends Mesh {
938
1190
 
939
1191
  }
940
1192
 
1193
+ /**
1194
+ * Returns the geometry ID of the defined instance.
1195
+ *
1196
+ * @param {number} instanceId - The ID of an instance to get the geometry ID of.
1197
+ * @return {number} The instance's geometry ID.
1198
+ */
941
1199
  getGeometryIdAt( instanceId ) {
942
1200
 
943
1201
  this.validateInstanceId( instanceId );
@@ -946,6 +1204,18 @@ class BatchedMesh extends Mesh {
946
1204
 
947
1205
  }
948
1206
 
1207
+ /**
1208
+ * Get the range representing the subset of triangles related to the attached geometry,
1209
+ * indicating the starting offset and count, or `null` if invalid.
1210
+ *
1211
+ * @param {number} geometryId - The id of the geometry to get the range of.
1212
+ * @param {Object} [target] - The target object that is used to store the method's result.
1213
+ * @return {{
1214
+ * vertexStart:number,vertexCount:number,reservedVertexCount:number,
1215
+ * indexStart:number,indexCount:number,reservedIndexCount:number,
1216
+ * start:number,count:number
1217
+ * }} The result object with range data.
1218
+ */
949
1219
  getGeometryRangeAt( geometryId, target = {} ) {
950
1220
 
951
1221
  this.validateGeometryId( geometryId );
@@ -966,6 +1236,13 @@ class BatchedMesh extends Mesh {
966
1236
 
967
1237
  }
968
1238
 
1239
+ /**
1240
+ * Resizes the necessary buffers to support the provided number of instances.
1241
+ * If the provided arguments shrink the number of instances but there are not enough
1242
+ * unused Ids at the end of the list then an error is thrown.
1243
+ *
1244
+ * @param {number} maxInstanceCount - The max number of individual instances that can be added and rendered by the batch.
1245
+ */
969
1246
  setInstanceCount( maxInstanceCount ) {
970
1247
 
971
1248
  // shrink the available instances as much as possible
@@ -1019,6 +1296,14 @@ class BatchedMesh extends Mesh {
1019
1296
 
1020
1297
  }
1021
1298
 
1299
+ /**
1300
+ * Resizes the available space in the batch's vertex and index buffer attributes to the provided sizes.
1301
+ * If the provided arguments shrink the geometry buffers but there is not enough unused space at the
1302
+ * end of the geometry attributes then an error is thrown.
1303
+ *
1304
+ * @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries to resize to.
1305
+ * @param {number} maxIndexCount - The maximum number of indices to be used by all unique geometries to resize to.
1306
+ */
1022
1307
  setGeometrySize( maxVertexCount, maxIndexCount ) {
1023
1308
 
1024
1309
  // Check if we can shrink to the requested vertex attribute size
@@ -1179,6 +1464,10 @@ class BatchedMesh extends Mesh {
1179
1464
 
1180
1465
  }
1181
1466
 
1467
+ /**
1468
+ * Frees the GPU-related resources allocated by this instance. Call this
1469
+ * method whenever this instance is no longer used in your app.
1470
+ */
1182
1471
  dispose() {
1183
1472
 
1184
1473
  // Assuming the geometry is not shared with other meshes
@@ -1197,8 +1486,6 @@ class BatchedMesh extends Mesh {
1197
1486
 
1198
1487
  }
1199
1488
 
1200
- return this;
1201
-
1202
1489
  }
1203
1490
 
1204
1491
  onBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {