@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  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 +93 -39
  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 +171 -48
  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 +71 -29
  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 +41 -3
  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 +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  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 +42 -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 +218 -5
  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 +86 -18
  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 +38 -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 +81 -61
  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 +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  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 +70 -0
  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 +131 -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 +266 -133
  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/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -19,10 +19,11 @@ import {
19
19
  /**
20
20
  * Make a new DataTexture to store the descriptions of the curves.
21
21
  *
22
- * @param { number } numberOfCurves the number of curves needed to be described by this texture.
23
- * @returns { DataTexture }
22
+ * @private
23
+ * @param {number} numberOfCurves - The number of curves needed to be described by this texture.
24
+ * @returns {DataTexture}
24
25
  */
25
- export function initSplineTexture( numberOfCurves = 1 ) {
26
+ function initSplineTexture( numberOfCurves = 1 ) {
26
27
 
27
28
  const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
28
29
  const dataTexture = new DataTexture(
@@ -44,13 +45,14 @@ export function initSplineTexture( numberOfCurves = 1 ) {
44
45
  }
45
46
 
46
47
  /**
47
- * Write the curve description to the data texture
48
+ * Write the curve description to the data texture.
48
49
  *
49
- * @param { DataTexture } texture The DataTexture to write to
50
- * @param { Curve } splineCurve The curve to describe
51
- * @param { number } offset Which curve slot to write to
50
+ * @private
51
+ * @param {DataTexture} texture - The data texture to write to.
52
+ * @param {Curve} splineCurve - The curve to describe.
53
+ * @param {number} offset - Which curve slot to write to.
52
54
  */
53
- export function updateSplineTexture( texture, splineCurve, offset = 0 ) {
55
+ function updateSplineTexture( texture, splineCurve, offset = 0 ) {
54
56
 
55
57
  const numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );
56
58
  splineCurve.arcLengthDivisions = numberOfPoints / 2;
@@ -78,7 +80,6 @@ export function updateSplineTexture( texture, splineCurve, offset = 0 ) {
78
80
 
79
81
  }
80
82
 
81
-
82
83
  function setTextureValue( texture, index, x, y, z, o ) {
83
84
 
84
85
  const image = texture.image;
@@ -92,12 +93,12 @@ function setTextureValue( texture, index, x, y, z, o ) {
92
93
  }
93
94
 
94
95
  /**
95
- * Create a new set of uniforms for describing the curve modifier
96
+ * Create a new set of uniforms for describing the curve modifier.
96
97
  *
97
- * @param { DataTexture } splineTexture which holds the curve description
98
- * @returns { Object } The uniforms object to be used in the shader
98
+ * @param {DataTexture} splineTexture - Which holds the curve description.
99
+ * @returns {Object} The uniforms object to be used in the shader.
99
100
  */
100
- export function getUniforms( splineTexture ) {
101
+ function getUniforms( splineTexture ) {
101
102
 
102
103
  const uniforms = {
103
104
  spineTexture: { value: splineTexture },
@@ -111,7 +112,7 @@ export function getUniforms( splineTexture ) {
111
112
 
112
113
  }
113
114
 
114
- export function modifyShader( material, uniforms, numberOfCurves = 1 ) {
115
+ function modifyShader( material, uniforms, numberOfCurves = 1 ) {
115
116
 
116
117
  if ( material.__ok ) return;
117
118
  material.__ok = true;
@@ -198,13 +199,18 @@ vec3 transformedNormal = normalMatrix * (basis * objectNormal);
198
199
  }
199
200
 
200
201
  /**
201
- * A helper class for making meshes bend around curves
202
+ * A modifier for making meshes bend around curves.
203
+ *
204
+ * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
205
+ * import the class from `CurveModifierGPU.js`.
202
206
  */
203
207
  export class Flow {
204
208
 
205
209
  /**
206
- * @param {Mesh} mesh The mesh to clone and modify to bend around the curve
207
- * @param {number} numberOfCurves The amount of space that should preallocated for additional curves
210
+ * Constructs a new Flow instance.
211
+ *
212
+ * @param {Mesh} mesh - The mesh to clone and modify to bend around the curve.
213
+ * @param {number} numberOfCurves - The amount of space that should preallocated for additional curves.
208
214
  */
209
215
  constructor( mesh, numberOfCurves = 1 ) {
210
216
 
@@ -252,9 +258,15 @@ export class Flow {
252
258
 
253
259
  }
254
260
 
261
+ /**
262
+ * Updates the curve for the given curve index.
263
+ *
264
+ * @param {number} index - The curve index.
265
+ * @param {Curve} curve - The curve that should be used to bend the mesh.
266
+ */
255
267
  updateCurve( index, curve ) {
256
268
 
257
- if ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );
269
+ if ( index >= this.curveArray.length ) throw Error( 'Flow: Index out of range.' );
258
270
  const curveLength = curve.getLength();
259
271
  this.uniforms.spineLength.value = curveLength;
260
272
  this.curveLengthArray[ index ] = curveLength;
@@ -263,6 +275,11 @@ export class Flow {
263
275
 
264
276
  }
265
277
 
278
+ /**
279
+ * Moves the mesh along the curve.
280
+ *
281
+ * @param {number} amount - The offset.
282
+ */
266
283
  moveAlongCurve( amount ) {
267
284
 
268
285
  this.uniforms.pathOffset.value += amount;
@@ -270,19 +287,25 @@ export class Flow {
270
287
  }
271
288
 
272
289
  }
273
- const matrix = new Matrix4();
290
+
291
+ const _matrix = new Matrix4();
274
292
 
275
293
  /**
276
- * A helper class for creating instanced versions of flow, where the instances are placed on the curve.
294
+ * An instanced version of {@link Flow} for making meshes bend around curves, where the instances are placed on the curve.
295
+ *
296
+ * This module can only be used with {@link WebGLRenderer}.
297
+ *
298
+ * @augments Flow
277
299
  */
278
300
  export class InstancedFlow extends Flow {
279
301
 
280
302
  /**
303
+ * Constructs a new InstancedFlow instance.
281
304
  *
282
- * @param {number} count The number of instanced elements
283
- * @param {number} curveCount The number of curves to preallocate for
284
- * @param {Geometry} geometry The geometry to use for the instanced mesh
285
- * @param {Material} material The material to use for the instanced mesh
305
+ * @param {number} count - The number of instanced elements.
306
+ * @param {number} curveCount - The number of curves to preallocate for.
307
+ * @param {Geometry} geometry - The geometry to use for the instanced mesh.
308
+ * @param {Material} material - The material to use for the instanced mesh.
286
309
  */
287
310
  constructor( count, curveCount, geometry, material ) {
288
311
 
@@ -304,25 +327,25 @@ export class InstancedFlow extends Flow {
304
327
  * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects
305
328
  * This writes that information to the matrix and marks it as needing update.
306
329
  *
307
- * @param {number} index of the instanced element to update
330
+ * @param {number} index - The index of tge instanced element to update.
308
331
  */
309
332
  writeChanges( index ) {
310
333
 
311
- matrix.makeTranslation(
334
+ _matrix.makeTranslation(
312
335
  this.curveLengthArray[ this.whichCurve[ index ] ],
313
336
  this.whichCurve[ index ],
314
337
  this.offsets[ index ]
315
338
  );
316
- this.object3D.setMatrixAt( index, matrix );
339
+ this.object3D.setMatrixAt( index, _matrix );
317
340
  this.object3D.instanceMatrix.needsUpdate = true;
318
341
 
319
342
  }
320
343
 
321
344
  /**
322
- * Move an individual element along the curve by a specific amount
345
+ * Move an individual element along the curve by a specific amount.
323
346
  *
324
- * @param {number} index Which element to update
325
- * @param {number} offset Move by how much
347
+ * @param {number} index - Which element to update.
348
+ * @param {number} offset - The offset.
326
349
  */
327
350
  moveIndividualAlongCurve( index, offset ) {
328
351
 
@@ -332,14 +355,14 @@ export class InstancedFlow extends Flow {
332
355
  }
333
356
 
334
357
  /**
335
- * Select which curve to use for an element
358
+ * Select which curve to use for an element.
336
359
  *
337
- * @param {number} index the index of the instanced element to update
338
- * @param {number} curveNo the index of the curve it should use
360
+ * @param {number} index - The index of the instanced element to update.
361
+ * @param {number} curveNo - The index of the curve it should use.
339
362
  */
340
363
  setCurve( index, curveNo ) {
341
364
 
342
- if ( isNaN( curveNo ) ) throw Error( 'curve index being set is Not a Number (NaN)' );
365
+ if ( isNaN( curveNo ) ) throw Error( 'InstancedFlow: Curve index being set is Not a Number (NaN).' );
343
366
  this.whichCurve[ index ] = curveNo;
344
367
  this.writeChanges( index );
345
368
 
@@ -19,10 +19,11 @@ import { modelWorldMatrix, normalLocal, vec2, vec3, vec4, mat3, varyingProperty,
19
19
  /**
20
20
  * Make a new DataTexture to store the descriptions of the curves.
21
21
  *
22
- * @param { number } [numberOfCurves=1] the number of curves needed to be described by this texture.
23
- * @returns { DataTexture } The new DataTexture
22
+ * @private
23
+ * @param {number} [numberOfCurves=1] - The number of curves needed to be described by this texture.
24
+ * @returns {DataTexture} The new data texture.
24
25
  */
25
- export function initSplineTexture( numberOfCurves = 1 ) {
26
+ function initSplineTexture( numberOfCurves = 1 ) {
26
27
 
27
28
  const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
28
29
  const dataTexture = new DataTexture(
@@ -44,13 +45,14 @@ export function initSplineTexture( numberOfCurves = 1 ) {
44
45
  }
45
46
 
46
47
  /**
47
- * Write the curve description to the data texture
48
+ * Write the curve description to the data texture.
48
49
  *
49
- * @param { DataTexture } texture The DataTexture to write to
50
- * @param { Curve } splineCurve The curve to describe
51
- * @param { number } offset Which curve slot to write to
50
+ * @private
51
+ * @param {DataTexture} texture - The data texture to write to.
52
+ * @param {Curve} splineCurve - The curve to describe.
53
+ * @param {number} [offset=0] - Which curve slot to write to.
52
54
  */
53
- export function updateSplineTexture( texture, splineCurve, offset = 0 ) {
55
+ function updateSplineTexture( texture, splineCurve, offset = 0 ) {
54
56
 
55
57
  const numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );
56
58
  splineCurve.arcLengthDivisions = numberOfPoints / 2;
@@ -93,12 +95,13 @@ function setTextureValue( texture, index, x, y, z, o ) {
93
95
  }
94
96
 
95
97
  /**
96
- * Create a new set of uniforms for describing the curve modifier
98
+ * Create a new set of uniforms for describing the curve modifier.
97
99
  *
98
- * @param { DataTexture } splineTexture which holds the curve description
99
- * @returns { Object } The uniforms object
100
+ * @private
101
+ * @param {DataTexture} splineTexture - Which holds the curve description.
102
+ * @returns {Object} The uniforms object.
100
103
  */
101
- export function getUniforms( splineTexture ) {
104
+ function getUniforms( splineTexture ) {
102
105
 
103
106
  return {
104
107
  spineTexture: splineTexture,
@@ -111,7 +114,7 @@ export function getUniforms( splineTexture ) {
111
114
 
112
115
  }
113
116
 
114
- export function modifyShader( material, uniforms, numberOfCurves ) {
117
+ function modifyShader( material, uniforms, numberOfCurves ) {
115
118
 
116
119
  const spineTexture = uniforms.spineTexture;
117
120
 
@@ -157,13 +160,18 @@ export function modifyShader( material, uniforms, numberOfCurves ) {
157
160
  }
158
161
 
159
162
  /**
160
- * A helper class for making meshes bend around curves
163
+ * A modifier for making meshes bend around curves.
164
+ *
165
+ * This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
166
+ * import the class from `CurveModifier.js`.
161
167
  */
162
168
  export class Flow {
163
169
 
164
170
  /**
165
- * @param {Mesh} mesh The mesh to clone and modify to bend around the curve
166
- * @param {number} numberOfCurves The amount of space that should preallocated for additional curves
171
+ * Constructs a new Flow instance.
172
+ *
173
+ * @param {Mesh} mesh - The mesh to clone and modify to bend around the curve.
174
+ * @param {number} numberOfCurves - The amount of space that should preallocated for additional curves.
167
175
  */
168
176
  constructor( mesh, numberOfCurves = 1 ) {
169
177
 
@@ -212,9 +220,15 @@ export class Flow {
212
220
 
213
221
  }
214
222
 
223
+ /**
224
+ * Updates the curve for the given curve index.
225
+ *
226
+ * @param {number} index - The curve index.
227
+ * @param {Curve} curve - The curve that should be used to bend the mesh.
228
+ */
215
229
  updateCurve( index, curve ) {
216
230
 
217
- if ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );
231
+ if ( index >= this.curveArray.length ) throw Error( 'Flow: Index out of range.' );
218
232
 
219
233
  const curveLength = curve.getLength();
220
234
 
@@ -226,6 +240,11 @@ export class Flow {
226
240
 
227
241
  }
228
242
 
243
+ /**
244
+ * Moves the mesh along the curve.
245
+ *
246
+ * @param {number} amount - The offset.
247
+ */
229
248
  moveAlongCurve( amount ) {
230
249
 
231
250
  this.uniforms.pathOffset += amount;
@@ -9,8 +9,26 @@ const _A = new Vector3();
9
9
  const _B = new Vector3();
10
10
  const _C = new Vector3();
11
11
 
12
+ /**
13
+ * The modifier can be used to split faces at sharp edges. This allows to compute
14
+ * normals without smoothing the edges which can lead to an improved visual result.
15
+ *
16
+ * ```js
17
+ * const modifier = new EdgeSplitModifier();
18
+ * geometry = modifier.modify( geometry, Math.PI * 0.4 );
19
+ * ```
20
+ */
12
21
  class EdgeSplitModifier {
13
22
 
23
+ /**
24
+ * Returns a new, modified version of the given geometry by applying an edge-split operation.
25
+ * Please note that the resulting geometry is always indexed.
26
+ *
27
+ * @param {BufferGeometry} geometry - The geometry to modify.
28
+ * @param {number} cutOffAngle - The cut off angle in radians.
29
+ * @param {boolean} [tryKeepNormals=true] - Whether to try to keep normals or not.
30
+ * @return {BufferGeometry} A new, modified geometry.
31
+ */
14
32
  modify( geometry, cutOffAngle, tryKeepNormals = true ) {
15
33
 
16
34
  function computeNormals() {
@@ -8,18 +8,30 @@ import {
8
8
  } from 'three';
9
9
  import * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';
10
10
 
11
- /**
12
- * Simplification Geometry Modifier
13
- * - based on code and technique
14
- * - by Stan Melax in 1998
15
- * - Progressive Mesh type Polygon Reduction Algorithm
16
- * - http://www.melax.com/polychop/
17
- */
18
-
19
11
  const _cb = new Vector3(), _ab = new Vector3();
20
12
 
13
+ /**
14
+ * This class can be used to modify a geometry by simplifying it. A typical use
15
+ * case for such a modifier is automatic LOD generation.
16
+ *
17
+ * The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm]{@link https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/}
18
+ * by Stan Melax in 1998.
19
+ *
20
+ * ```js
21
+ * const modifier = new SimplifyModifier();
22
+ * geometry = modifier.modify( geometry );
23
+ * ```
24
+ */
21
25
  class SimplifyModifier {
22
26
 
27
+ /**
28
+ * Returns a new, modified version of the given geometry by applying a simplification.
29
+ * Please note that the resulting geometry is always non-indexed.
30
+ *
31
+ * @param {BufferGeometry} geometry - The geometry to modify.
32
+ * @param {number} count - The number of vertices to remove.
33
+ * @return {BufferGeometry} A new, modified geometry.
34
+ */
23
35
  modify( geometry, count ) {
24
36
 
25
37
  geometry = geometry.clone();
@@ -7,18 +7,49 @@ import {
7
7
  } from 'three';
8
8
 
9
9
  /**
10
- * Break faces with edges longer than maxEdgeLength
10
+ * This class can be used to modify a geometry by breaking its edges if they
11
+ * are longer than maximum length.
12
+ *
13
+ * ```js
14
+ * const modifier = new TessellateModifier( 8, 6 );
15
+ * geometry = modifier.modify( geometry );
16
+ * ```
11
17
  */
12
-
13
18
  class TessellateModifier {
14
19
 
20
+ /**
21
+ * Constructs a new Tessellate modifier.
22
+ *
23
+ * @param {number} [maxEdgeLength=0.1] - The maximum edge length.
24
+ * @param {number} [maxIterations=6] - The number of iterations.
25
+ */
15
26
  constructor( maxEdgeLength = 0.1, maxIterations = 6 ) {
16
27
 
28
+ /**
29
+ * The maximum edge length.
30
+ *
31
+ * @type {number}
32
+ * @default 0.1
33
+ */
17
34
  this.maxEdgeLength = maxEdgeLength;
35
+
36
+ /**
37
+ * The maximum edge length.
38
+ *
39
+ * @type {number}
40
+ * @default 0.1
41
+ */
18
42
  this.maxIterations = maxIterations;
19
43
 
20
44
  }
21
45
 
46
+ /**
47
+ * Returns a new, modified version of the given geometry by applying a tesselation.
48
+ * Please note that the resulting geometry is always non-indexed.
49
+ *
50
+ * @param {BufferGeometry} geometry - The geometry to modify.
51
+ * @return {BufferGeometry} A new, modified geometry.
52
+ */
22
53
  modify( geometry ) {
23
54
 
24
55
  if ( geometry.index !== null ) {
@@ -1,14 +1,32 @@
1
1
  import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';
2
2
 
3
3
  /**
4
- * A ground-projected skybox. The height is how far the camera that took the photo was above the ground -
5
- * a larger value will magnify the downward part of the image. By default the object is centered at the camera,
6
- * so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius
7
- * large enough to ensure your user's camera stays inside.
4
+ * A ground-projected skybox.
5
+ *
6
+ * By default the object is centered at the camera, so it is often helpful to set
7
+ * `skybox.position.y = height` to put the ground at the origin.
8
+ *
9
+ * ```js
10
+ * const height = 15, radius = 100;
11
+ *
12
+ * const skybox = new GroundedSkybox( envMap, height, radius );
13
+ * skybox.position.y = height;
14
+ * scene.add( skybox );
15
+ * ```
16
+ *
17
+ * @augments Mesh
8
18
  */
9
-
10
19
  class GroundedSkybox extends Mesh {
11
20
 
21
+ /**
22
+ * Constructs a new ground-projected skybox.
23
+ *
24
+ * @param {Texture} map - The environment map to use.
25
+ * @param {number} height - The height is how far the camera that took the photo was above the ground.
26
+ * A larger value will magnify the downward part of the image.
27
+ * @param {number} radius - The radius of the skybox. Must be large enough to ensure the scene's camera stays inside.
28
+ * @param {number} [resolution=128] - The geometry resolution of the skybox.
29
+ */
12
30
  constructor( map, height, radius, resolution = 128 ) {
13
31
 
14
32
  if ( height <= 0 || radius <= 0 || resolution <= 0 ) {
@@ -15,16 +15,59 @@ import {
15
15
  Vector4
16
16
  } from 'three';
17
17
 
18
+ /**
19
+ * Creates a simulated lens flare that tracks a light.
20
+ *
21
+ * Note that this class can only be used with {@link WebGLRenderer}.
22
+ * When using {@link WebGPURenderer}, use {@link LensflareMesh}.
23
+ *
24
+ * ```js
25
+ * const light = new THREE.PointLight( 0xffffff, 1.5, 2000 );
26
+ *
27
+ * const lensflare = new Lensflare();
28
+ * lensflare.addElement( new LensflareElement( textureFlare0, 512, 0 ) );
29
+ * lensflare.addElement( new LensflareElement( textureFlare1, 512, 0 ) );
30
+ * lensflare.addElement( new LensflareElement( textureFlare2, 60, 0.6 ) );
31
+ *
32
+ * light.add( lensflare );
33
+ * ```
34
+ *
35
+ * @augments Mesh
36
+ */
18
37
  class Lensflare extends Mesh {
19
38
 
39
+ /**
40
+ * Constructs a new lensflare.
41
+ */
20
42
  constructor() {
21
43
 
22
44
  super( Lensflare.Geometry, new MeshBasicMaterial( { opacity: 0, transparent: true } ) );
23
45
 
46
+ /**
47
+ * This flag can be used for type testing.
48
+ *
49
+ * @type {boolean}
50
+ * @readonly
51
+ * @default true
52
+ */
24
53
  this.isLensflare = true;
25
54
 
26
55
  this.type = 'Lensflare';
56
+
57
+ /**
58
+ * Overwritten to disable view-frustum culling by default.
59
+ *
60
+ * @type {boolean}
61
+ * @default false
62
+ */
27
63
  this.frustumCulled = false;
64
+
65
+ /**
66
+ * Overwritten to make sure lensflares a rendered last.
67
+ *
68
+ * @type {number}
69
+ * @default Infinity
70
+ */
28
71
  this.renderOrder = Infinity;
29
72
 
30
73
  //
@@ -149,6 +192,11 @@ class Lensflare extends Mesh {
149
192
 
150
193
  const mesh2 = new Mesh( geometry, material2 );
151
194
 
195
+ /**
196
+ * Adds the given lensflare element to this instance.
197
+ *
198
+ * @param {LensflareElement} element - The element to add.
199
+ */
152
200
  this.addElement = function ( element ) {
153
201
 
154
202
  elements.push( element );
@@ -263,6 +311,10 @@ class Lensflare extends Mesh {
263
311
 
264
312
  };
265
313
 
314
+ /**
315
+ * Frees the GPU-related resources allocated by this instance. Call this
316
+ * method whenever this instance is no longer used in your app.
317
+ */
266
318
  this.dispose = function () {
267
319
 
268
320
  material1a.dispose();
@@ -284,15 +336,52 @@ class Lensflare extends Mesh {
284
336
 
285
337
  }
286
338
 
287
- //
288
-
339
+ /**
340
+ * Represents a single flare that can be added to a {@link Lensflare} container.
341
+ */
289
342
  class LensflareElement {
290
343
 
344
+ /**
345
+ * Constructs a new lensflare element.
346
+ *
347
+ * @param {Texture} texture - The flare's texture.
348
+ * @param {number} [size=1] - The size in pixels.
349
+ * @param {number} [distance=0] - The normalized distance (`[0,1]`) from the light source.
350
+ * A value of `0` means the flare is located at light source.
351
+ * @param {Color} [color] - The flare's color
352
+ */
291
353
  constructor( texture, size = 1, distance = 0, color = new Color( 0xffffff ) ) {
292
354
 
355
+ /**
356
+ * The flare's texture.
357
+ *
358
+ * @type {Texture}
359
+ */
293
360
  this.texture = texture;
361
+
362
+ /**
363
+ * The size in pixels.
364
+ *
365
+ * @type {number}
366
+ * @default 1
367
+ */
294
368
  this.size = size;
369
+
370
+ /**
371
+ * The normalized distance (`[0,1]`) from the light source.
372
+ * A value of `0` means the flare is located at light source.
373
+ *
374
+ * @type {number}
375
+ * @default 0
376
+ */
295
377
  this.distance = distance;
378
+
379
+ /**
380
+ * The flare's color
381
+ *
382
+ * @type {Color}
383
+ * @default (1,1,1)
384
+ */
296
385
  this.color = color;
297
386
 
298
387
  }
@@ -18,16 +18,59 @@ import {
18
18
 
19
19
  import { texture, textureLoad, uv, ivec2, vec2, vec4, positionGeometry, reference, varyingProperty, materialReference, Fn } from 'three/tsl';
20
20
 
21
+ /**
22
+ * Creates a simulated lens flare that tracks a light.
23
+ *
24
+ * Note that this class can only be used with {@link WebGPURenderer}.
25
+ * When using {@link WebGLRenderer}, use {@link Lensflare}.
26
+ *
27
+ * ```js
28
+ * const light = new THREE.PointLight( 0xffffff, 1.5, 2000 );
29
+ *
30
+ * const lensflare = new LensflareMesh();
31
+ * lensflare.addElement( new LensflareElement( textureFlare0, 512, 0 ) );
32
+ * lensflare.addElement( new LensflareElement( textureFlare1, 512, 0 ) );
33
+ * lensflare.addElement( new LensflareElement( textureFlare2, 60, 0.6 ) );
34
+ *
35
+ * light.add( lensflare );
36
+ * ```
37
+ *
38
+ * @augments Mesh
39
+ */
21
40
  class LensflareMesh extends Mesh {
22
41
 
42
+ /**
43
+ * Constructs a new lensflare mesh.
44
+ */
23
45
  constructor() {
24
46
 
25
47
  super( LensflareMesh.Geometry, new MeshBasicNodeMaterial( { opacity: 0, transparent: true } ) );
26
48
 
27
- this.isLensflare = true;
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
56
+ this.isLensflareMesh = true;
28
57
 
29
58
  this.type = 'LensflareMesh';
59
+
60
+ /**
61
+ * Overwritten to disable view-frustum culling by default.
62
+ *
63
+ * @type {boolean}
64
+ * @default false
65
+ */
30
66
  this.frustumCulled = false;
67
+
68
+ /**
69
+ * Overwritten to make sure lensflares a rendered last.
70
+ *
71
+ * @type {number}
72
+ * @default Infinity
73
+ */
31
74
  this.renderOrder = Infinity;
32
75
 
33
76
  //
@@ -146,7 +189,11 @@ class LensflareMesh extends Mesh {
146
189
 
147
190
  } )();
148
191
 
149
-
192
+ /**
193
+ * Adds the given lensflare element to this instance.
194
+ *
195
+ * @param {LensflareElement} element - The element to add.
196
+ */
150
197
  this.addElement = function ( element ) {
151
198
 
152
199
  elements.push( element );
@@ -264,6 +311,10 @@ class LensflareMesh extends Mesh {
264
311
 
265
312
  };
266
313
 
314
+ /**
315
+ * Frees the GPU-related resources allocated by this instance. Call this
316
+ * method whenever this instance is no longer used in your app.
317
+ */
267
318
  this.dispose = function () {
268
319
 
269
320
  material1a.dispose();