@plastic-software/three 0.174.0 → 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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  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 +1429 -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 +53 -0
  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/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -10,9 +10,19 @@ import {
10
10
 
11
11
  import { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';
12
12
 
13
+ /** @module SceneUtils */
14
+
13
15
  const _color = /*@__PURE__*/new Color();
14
16
  const _matrix = /*@__PURE__*/new Matrix4();
15
17
 
18
+ /**
19
+ * This function creates a mesh for each instance of the given instanced mesh and
20
+ * adds it to a group. Each mesh will honor the current 3D transformation of its
21
+ * corresponding instance.
22
+ *
23
+ * @param {InstancedMesh} instancedMesh - The instanced mesh.
24
+ * @return {Group} A group of meshes.
25
+ */
16
26
  function createMeshesFromInstancedMesh( instancedMesh ) {
17
27
 
18
28
  const group = new Group();
@@ -39,6 +49,13 @@ function createMeshesFromInstancedMesh( instancedMesh ) {
39
49
 
40
50
  }
41
51
 
52
+ /**
53
+ * This function creates a mesh for each geometry-group of the given multi-material mesh and
54
+ * adds it to a group.
55
+ *
56
+ * @param {Mesh} mesh - The multi-material mesh.
57
+ * @return {Group} A group of meshes.
58
+ */
42
59
  function createMeshesFromMultiMaterialMesh( mesh ) {
43
60
 
44
61
  if ( Array.isArray( mesh.material ) === false ) {
@@ -110,6 +127,16 @@ function createMeshesFromMultiMaterialMesh( mesh ) {
110
127
 
111
128
  }
112
129
 
130
+ /**
131
+ * This function represents an alternative way to create 3D objects with multiple materials.
132
+ * Normally, {@link BufferGeometry#groups} are used which might introduce issues e.g. when
133
+ * exporting the object to a 3D format. This function accepts a geometry and an array of
134
+ * materials and creates for each material a mesh that is added to a group.
135
+ *
136
+ * @param {BufferGeometry} geometry - The geometry.
137
+ * @param {Array<Material>} materials - An array of materials.
138
+ * @return {Group} A group representing a multi-material object.
139
+ */
113
140
  function createMultiMaterialObject( geometry, materials ) {
114
141
 
115
142
  const group = new Group();
@@ -124,6 +151,18 @@ function createMultiMaterialObject( geometry, materials ) {
124
151
 
125
152
  }
126
153
 
154
+
155
+ /**
156
+ * Executes a reducer function for each vertex of the given 3D object.
157
+ * `reduceVertices()` returns a single value: the function's accumulated result.
158
+ *
159
+ * @param {Object3D} object - The 3D object that should be processed. It must have a
160
+ * geometry with a `position` attribute.
161
+ * @param {function(number,Vector3):number} func - The reducer function. First argument
162
+ * is the current value, second argument the current vertex.
163
+ * @param {any} initialValue - The initial value.
164
+ * @return {any} The result.
165
+ */
127
166
  function reduceVertices( object, func, initialValue ) {
128
167
 
129
168
  let value = initialValue;
@@ -174,8 +213,10 @@ function reduceVertices( object, func, initialValue ) {
174
213
  }
175
214
 
176
215
  /**
177
- * @param {InstancedMesh} mesh
178
- * @param {function(int, int):int} compareFn
216
+ * Sorts the instances of the given instanced mesh.
217
+ *
218
+ * @param {InstancedMesh} mesh - The instanced mesh to sort.
219
+ * @param {function(number, number):number} compareFn - A custom compare function for the sort.
179
220
  */
180
221
  function sortInstancedMesh( mesh, compareFn ) {
181
222
 
@@ -246,7 +287,9 @@ function sortInstancedMesh( mesh, compareFn ) {
246
287
  }
247
288
 
248
289
  /**
249
- * @param {Object3D} object Object to traverse.
290
+ * Generator based alternative to {@link Object3D#traverse}.
291
+ *
292
+ * @param {Object3D} object - Object to traverse.
250
293
  * @yields {Object3D} Objects that passed the filter condition.
251
294
  */
252
295
  function* traverseGenerator( object ) {
@@ -264,6 +307,8 @@ function* traverseGenerator( object ) {
264
307
  }
265
308
 
266
309
  /**
310
+ * Generator based alternative to {@link Object3D#traverseVisible}.
311
+ *
267
312
  * @param {Object3D} object Object to traverse.
268
313
  * @yields {Object3D} Objects that passed the filter condition.
269
314
  */
@@ -284,6 +329,8 @@ function* traverseVisibleGenerator( object ) {
284
329
  }
285
330
 
286
331
  /**
332
+ * Generator based alternative to {@link Object3D#traverseAncestors}.
333
+ *
287
334
  * @param {Object3D} object Object to traverse.
288
335
  * @yields {Object3D} Objects that passed the filter condition.
289
336
  */
@@ -16,30 +16,25 @@ import { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';
16
16
  * It works for shadow casting lights: DirectionalLight and SpotLight.
17
17
  * It renders out the shadow map and displays it on a HUD.
18
18
  *
19
- * Example usage:
20
- * 1) Import ShadowMapViewer into your app.
19
+ * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
20
+ * import the class from `ShadowMapViewerGPU.js`.
21
21
  *
22
- * 2) Create a shadow casting light and name it optionally:
23
- * let light = new DirectionalLight( 0xffffff, 1 );
24
- * light.castShadow = true;
25
- * light.name = 'Sun';
26
- *
27
- * 3) Create a shadow map viewer for that light and set its size and position optionally:
28
- * let shadowMapViewer = new ShadowMapViewer( light );
29
- * shadowMapViewer.size.set( 128, 128 ); //width, height default: 256, 256
30
- * shadowMapViewer.position.set( 10, 10 ); //x, y in pixel default: 0, 0 (top left corner)
31
- *
32
- * 4) Render the shadow map viewer in your render loop:
33
- * shadowMapViewer.render( renderer );
34
- *
35
- * 5) Optionally: Update the shadow map viewer on window resize:
36
- * shadowMapViewer.updateForWindowResize();
37
- *
38
- * 6) If you set the position or size members directly, you need to call shadowMapViewer.update();
22
+ * ```js
23
+ * const lightShadowMapViewer = new ShadowMapViewer( light );
24
+ * lightShadowMapViewer.position.x = 10;
25
+ * lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10;
26
+ * lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4;
27
+ * lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4;
28
+ * lightShadowMapViewer.update();
29
+ * ```
39
30
  */
40
-
41
31
  class ShadowMapViewer {
42
32
 
33
+ /**
34
+ * Constructs a new shadow map viewer.
35
+ *
36
+ * @param {Light} light - The shadow casting light.
37
+ */
43
38
  constructor( light ) {
44
39
 
45
40
  //- Internals
@@ -110,11 +105,21 @@ class ShadowMapViewer {
110
105
 
111
106
  }
112
107
 
113
- //- API
114
- // Set to false to disable displaying this shadow map
108
+ /**
109
+ * Whether to display the shadow map viewer or not.
110
+ *
111
+ * @type {boolean}
112
+ * @default true
113
+ */
115
114
  this.enabled = true;
116
115
 
117
- // Set the size of the displayed shadow map on the HUD
116
+ /**
117
+ * The size of the viewer. When changing this property, make sure
118
+ * to call {@link ShadowMapViewer#update}.
119
+ *
120
+ * @type {{width:number,height:number}}
121
+ * @default true
122
+ */
118
123
  this.size = {
119
124
  width: frame.width,
120
125
  height: frame.height,
@@ -131,7 +136,13 @@ class ShadowMapViewer {
131
136
  }
132
137
  };
133
138
 
134
- // Set the position of the displayed shadow map on the HUD
139
+ /**
140
+ * The position of the viewer. When changing this property, make sure
141
+ * to call {@link ShadowMapViewer#update}.
142
+ *
143
+ * @type {{x:number,y:number, set:function(number,number)}}
144
+ * @default true
145
+ */
135
146
  this.position = {
136
147
  x: frame.x,
137
148
  y: frame.y,
@@ -150,6 +161,11 @@ class ShadowMapViewer {
150
161
  }
151
162
  };
152
163
 
164
+ /**
165
+ * Renders the viewer. This method must be called in the app's animation loop.
166
+ *
167
+ * @param {WebGLRenderer} renderer - The renderer.
168
+ */
153
169
  this.render = function ( renderer ) {
154
170
 
155
171
  if ( this.enabled ) {
@@ -171,6 +187,10 @@ class ShadowMapViewer {
171
187
 
172
188
  };
173
189
 
190
+ /**
191
+ * Resizes the viewer. This method should be called whenever the app's
192
+ * window is resized.
193
+ */
174
194
  this.updateForWindowResize = function () {
175
195
 
176
196
  if ( this.enabled ) {
@@ -187,6 +207,9 @@ class ShadowMapViewer {
187
207
 
188
208
  };
189
209
 
210
+ /**
211
+ * Updates the viewer.
212
+ */
190
213
  this.update = function () {
191
214
 
192
215
  this.position.set( this.position.x, this.position.y );
@@ -16,30 +16,25 @@ import { texture } from 'three/tsl';
16
16
  * It works for shadow casting lights: DirectionalLight and SpotLight.
17
17
  * It renders out the shadow map and displays it on a HUD.
18
18
  *
19
- * Example usage:
20
- * 1) Import ShadowMapViewer into your app.
19
+ * This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
20
+ * import the class from `ShadowMapViewer.js`.
21
21
  *
22
- * 2) Create a shadow casting light and name it optionally:
23
- * let light = new DirectionalLight( 0xffffff, 1 );
24
- * light.castShadow = true;
25
- * light.name = 'Sun';
26
- *
27
- * 3) Create a shadow map viewer for that light and set its size and position optionally:
28
- * let shadowMapViewer = new ShadowMapViewer( light );
29
- * shadowMapViewer.size.set( 128, 128 ); //width, height default: 256, 256
30
- * shadowMapViewer.position.set( 10, 10 ); //x, y in pixel default: 0, 0 (top left corner)
31
- *
32
- * 4) Render the shadow map viewer in your render loop:
33
- * shadowMapViewer.render( renderer );
34
- *
35
- * 5) Optionally: Update the shadow map viewer on window resize:
36
- * shadowMapViewer.updateForWindowResize();
37
- *
38
- * 6) If you set the position or size members directly, you need to call shadowMapViewer.update();
22
+ * ```js
23
+ * const lightShadowMapViewer = new ShadowMapViewer( light );
24
+ * lightShadowMapViewer.position.x = 10;
25
+ * lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10;
26
+ * lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4;
27
+ * lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4;
28
+ * lightShadowMapViewer.update();
29
+ * ```
39
30
  */
40
-
41
31
  class ShadowMapViewer {
42
32
 
33
+ /**
34
+ * Constructs a new shadow map viewer.
35
+ *
36
+ * @param {Light} light - The shadow casting light.
37
+ */
43
38
  constructor( light ) {
44
39
 
45
40
  //- Internals
@@ -106,11 +101,21 @@ class ShadowMapViewer {
106
101
 
107
102
  }
108
103
 
109
- //- API
110
- // Set to false to disable displaying this shadow map
104
+ /**
105
+ * Whether to display the shadow map viewer or not.
106
+ *
107
+ * @type {boolean}
108
+ * @default true
109
+ */
111
110
  this.enabled = true;
112
111
 
113
- // Set the size of the displayed shadow map on the HUD
112
+ /**
113
+ * The size of the viewer. When changing this property, make sure
114
+ * to call {@link ShadowMapViewer#update}.
115
+ *
116
+ * @type {{width:number,height:number}}
117
+ * @default true
118
+ */
114
119
  this.size = {
115
120
  width: frame.width,
116
121
  height: frame.height,
@@ -127,7 +132,13 @@ class ShadowMapViewer {
127
132
  }
128
133
  };
129
134
 
130
- // Set the position of the displayed shadow map on the HUD
135
+ /**
136
+ * The position of the viewer. When changing this property, make sure
137
+ * to call {@link ShadowMapViewer#update}.
138
+ *
139
+ * @type {{width:number,height:number}}
140
+ * @default true
141
+ */
131
142
  this.position = {
132
143
  x: frame.x,
133
144
  y: frame.y,
@@ -146,6 +157,11 @@ class ShadowMapViewer {
146
157
  }
147
158
  };
148
159
 
160
+ /**
161
+ * Renders the viewer. This method must be called in the app's animation loop.
162
+ *
163
+ * @param {WebGPURenderer} renderer - The renderer.
164
+ */
149
165
  this.render = function ( renderer ) {
150
166
 
151
167
  if ( this.enabled ) {
@@ -167,6 +183,10 @@ class ShadowMapViewer {
167
183
 
168
184
  };
169
185
 
186
+ /**
187
+ * Resizes the viewer. This method should be called whenever the app's
188
+ * window is resized.
189
+ */
170
190
  this.updateForWindowResize = function () {
171
191
 
172
192
  if ( this.enabled ) {
@@ -183,6 +203,9 @@ class ShadowMapViewer {
183
203
 
184
204
  };
185
205
 
206
+ /**
207
+ * Updates the viewer.
208
+ */
186
209
  this.update = function () {
187
210
 
188
211
  this.position.set( this.position.x, this.position.y );
@@ -9,6 +9,8 @@ import {
9
9
  VectorKeyframeTrack
10
10
  } from 'three';
11
11
 
12
+ /** @module SkeletonUtils */
13
+
12
14
  function getBoneName( bone, options ) {
13
15
 
14
16
  if ( options.getBoneName !== undefined ) {
@@ -21,6 +23,14 @@ function getBoneName( bone, options ) {
21
23
 
22
24
  }
23
25
 
26
+ /**
27
+ * Retargets the skeleton from the given source 3D object to the
28
+ * target 3D object.
29
+ *
30
+ * @param {Object3D} target - The target 3D object.
31
+ * @param {Object3D} source - The source 3D object.
32
+ * @param {module:SkeletonUtils~RetargetOptions} options - The options.
33
+ */
24
34
  function retarget( target, source, options = {} ) {
25
35
 
26
36
  const quat = new Quaternion(),
@@ -196,6 +206,16 @@ function retarget( target, source, options = {} ) {
196
206
 
197
207
  }
198
208
 
209
+ /**
210
+ * Retargets the animation clip of the source object to the
211
+ * target 3D object.
212
+ *
213
+ * @param {Object3D} target - The target 3D object.
214
+ * @param {Object3D} source - The source 3D object.
215
+ * @param {AnimationClip} clip - The animation clip.
216
+ * @param {module:SkeletonUtils~RetargetOptions} options - The options.
217
+ * @return {AnimationClip} The retargeted animation clip.
218
+ */
199
219
  function retargetClip( target, source, clip, options = {} ) {
200
220
 
201
221
  options.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;
@@ -354,6 +374,14 @@ function retargetClip( target, source, clip, options = {} ) {
354
374
 
355
375
  }
356
376
 
377
+ /**
378
+ * Clones the given 3D object and its descendants, ensuring that any `SkinnedMesh` instances are
379
+ * correctly associated with their bones. Bones are also cloned, and must be descendants of the
380
+ * object passed to this method. Other data, like geometries and materials, are reused by reference.
381
+ *
382
+ * @param {Object3D} source - The 3D object to clone.
383
+ * @return {Object3D} The cloned 3D object.
384
+ */
357
385
  function clone( source ) {
358
386
 
359
387
  const sourceLookup = new Map();
@@ -435,6 +463,23 @@ function parallelTraverse( a, b, callback ) {
435
463
 
436
464
  }
437
465
 
466
+ /**
467
+ * Retarget options of `SkeletonUtils`.
468
+ *
469
+ * @typedef {Object} module:SkeletonUtils~RetargetOptions
470
+ * @property {boolean} [useFirstFramePosition=false] - Whether to use the position of the first frame or not.
471
+ * @property {number} [fps] - The FPS of the clip.
472
+ * @property {Object<string,string>} [names] - A dictionary for mapping target to source bone names.
473
+ * @property {function(string):string} [getBoneName] - A function for mapping bone names. Alternative to `names`.
474
+ * @property {Array<number>} [trim] - Whether to trim the clip or not. If set the array should hold two values for the start and end.
475
+ * @property {boolean} [preserveBoneMatrix=true] - Whether to preserve bone matrices or not.
476
+ * @property {boolean} [preserveBonePositions=true] - Whether to preserve bone positions or not.
477
+ * @property {boolean} [useTargetMatrix=false] - Whether to use the target matrix or not.
478
+ * @property {string} [hip='hip'] - The name of the source's hip bone.
479
+ * @property {Vector3} [hipInfluence=(1,1,1)] - The hip influence.
480
+ * @property {number} [scale=1] - The scale.
481
+ **/
482
+
438
483
  export {
439
484
  retarget,
440
485
  retargetClip,
@@ -1,8 +1,5 @@
1
- // Hybrid radix sort from
2
- // - https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab
3
- // - https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271
4
- //
5
- // expects unsigned 32b integer values
1
+
2
+ /** @module SortUtils */
6
3
 
7
4
  const POWER = 3;
8
5
  const BIT_MAX = 32;
@@ -24,6 +21,18 @@ for ( let i = 0; i < ( ITERATIONS + 1 ); i ++ ) {
24
21
 
25
22
  const defaultGet = ( el ) => el;
26
23
 
24
+ /**
25
+ * Hybrid radix sort from.
26
+ *
27
+ * - {@link https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab}
28
+ * - {@link https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271}
29
+ *
30
+ * Expects unsigned 32b integer values.
31
+ *
32
+ * @function
33
+ * @param {Array<Object>} arr - The array to sort.
34
+ * @param {Object} opt - The options
35
+ */
27
36
  export const radixSort = ( arr, opt ) => {
28
37
 
29
38
  const len = arr.length;
@@ -2,14 +2,19 @@ import {
2
2
  Vector2
3
3
  } from 'three';
4
4
 
5
+ /** @module UVsDebug */
6
+
5
7
  /**
6
- * tool for "unwrapping" and debugging three.js geometries UV mapping
8
+ * Function for "unwrapping" and debugging three.js geometries UV mapping.
7
9
  *
8
- * Sample usage:
9
- * document.body.appendChild( UVsDebug( new THREE.SphereGeometry( 10, 10, 10, 10 ) ) );
10
+ * ```js
11
+ * document.body.appendChild( UVsDebug( new THREE.SphereGeometry() ) );
12
+ * ```
10
13
  *
14
+ * @param {BufferGeometry} geometry - The geometry whose uv coordinates should be inspected.
15
+ * @param {number} [size=1024] - The size of the debug canvas.
16
+ * @return {HTMLCanvasElement} A canvas element with visualized uv coordinates.
11
17
  */
12
-
13
18
  function UVsDebug( geometry, size = 1024 ) {
14
19
 
15
20
  // handles wrapping of uv.x > 1 only
@@ -10,11 +10,24 @@ import {
10
10
  SRGBColorSpace
11
11
  } from 'three';
12
12
 
13
+ /** @module WebGLTextureUtils */
14
+
13
15
  let _renderer;
14
16
  let fullscreenQuadGeometry;
15
17
  let fullscreenQuadMaterial;
16
18
  let fullscreenQuad;
17
19
 
20
+ /**
21
+ * Returns an uncompressed version of the given compressed texture.
22
+ *
23
+ * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
24
+ * import the function from {@link WebGPUTextureUtils}.
25
+ *
26
+ * @param {CompressedTexture} texture - The compressed texture.
27
+ * @param {number} [maxTextureSize=Infinity] - The maximum size of the uncompressed texture.
28
+ * @param {?WebGLRenderer} [renderer=null] - A reference to a renderer.
29
+ * @return {CanvasTexture} The uncompressed texture.
30
+ */
18
31
  export function decompress( texture, maxTextureSize = Infinity, renderer = null ) {
19
32
 
20
33
  if ( ! fullscreenQuadGeometry ) fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 );
@@ -6,9 +6,23 @@ import {
6
6
  } from 'three';
7
7
  import { texture, uv } from 'three/tsl';
8
8
 
9
+ /** @module WebGPUTextureUtils */
10
+
9
11
  let _renderer;
10
12
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
11
13
 
14
+ /**
15
+ * Returns an uncompressed version of the given compressed texture.
16
+ *
17
+ * This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
18
+ * import the function from {@link WebGLTextureUtils}.
19
+ *
20
+ * @async
21
+ * @param {CompressedTexture} blitTexture - The compressed texture.
22
+ * @param {number} [maxTextureSize=Infinity] - The maximum size of the uncompressed texture.
23
+ * @param {?WebGPURenderer} [renderer=null] - A reference to a renderer.
24
+ * @return {Promise<CanvasTexture>} A Promise that resolved with the uncompressed texture.
25
+ */
12
26
  export async function decompress( blitTexture, maxTextureSize = Infinity, renderer = null ) {
13
27
 
14
28
  if ( renderer === null ) {
@@ -1,17 +1,58 @@
1
1
  /**
2
- * @author Deepkolos / https://github.com/deepkolos
2
+ * A simple pool for managing Web Workers.
3
3
  */
4
-
5
4
  export class WorkerPool {
6
5
 
6
+ /**
7
+ * Constructs a new Worker pool.
8
+ *
9
+ * @param {number} [pool=4] - The size of the pool.
10
+ */
7
11
  constructor( pool = 4 ) {
8
12
 
13
+ /**
14
+ * The size of the pool.
15
+ *
16
+ * @type {number}
17
+ * @default 4
18
+ */
9
19
  this.pool = pool;
20
+
21
+ /**
22
+ * A message queue.
23
+ *
24
+ * @type {Array<Object>}
25
+ */
10
26
  this.queue = [];
27
+
28
+ /**
29
+ * An array of Workers.
30
+ *
31
+ * @type {Array<Worker>}
32
+ */
11
33
  this.workers = [];
34
+
35
+ /**
36
+ * An array with resolve functions for messages.
37
+ *
38
+ * @type {Array<Function>}
39
+ */
12
40
  this.workersResolve = [];
41
+
42
+ /**
43
+ * The current worker status.
44
+ *
45
+ * @type {number}
46
+ */
13
47
  this.workerStatus = 0;
14
48
 
49
+ /**
50
+ * A factory function for creating workers.
51
+ *
52
+ * @type {?Function}
53
+ */
54
+ this.workerCreator = null;
55
+
15
56
  }
16
57
 
17
58
  _initWorker( workerId ) {
@@ -54,18 +95,36 @@ export class WorkerPool {
54
95
 
55
96
  }
56
97
 
98
+ /**
99
+ * Sets a function that is responsible for creating Workers.
100
+ *
101
+ * @param {Function} workerCreator - The worker creator function.
102
+ */
57
103
  setWorkerCreator( workerCreator ) {
58
104
 
59
105
  this.workerCreator = workerCreator;
60
106
 
61
107
  }
62
108
 
109
+ /**
110
+ * Sets the Worker limit
111
+ *
112
+ * @param {number} pool - The size of the pool.
113
+ */
63
114
  setWorkerLimit( pool ) {
64
115
 
65
116
  this.pool = pool;
66
117
 
67
118
  }
68
119
 
120
+ /**
121
+ * Post a message to an idle Worker. If no Worker is available,
122
+ * the message is pushed into a message queue for later processing.
123
+ *
124
+ * @param {Object} msg - The message.
125
+ * @param {Array<ArrayBuffer>} transfer - An array with array buffers for data transfer.
126
+ * @return {Promise} A Promise that resolves when the message has been processed.
127
+ */
69
128
  postMessage( msg, transfer ) {
70
129
 
71
130
  return new Promise( ( resolve ) => {
@@ -89,6 +148,10 @@ export class WorkerPool {
89
148
 
90
149
  }
91
150
 
151
+ /**
152
+ * Terminates all Workers of this pool. Call this method whenever this
153
+ * Worker pool is no longer used in your app.
154
+ */
92
155
  dispose() {
93
156
 
94
157
  this.workers.forEach( ( worker ) => worker.terminate() );
@@ -1,5 +1,23 @@
1
+ /**
2
+ * A utility class for creating a button that allows to initiate
3
+ * immersive AR sessions based on WebXR. The button can be created
4
+ * with a factory method and then appended ot the website's DOM.
5
+ *
6
+ * ```js
7
+ * document.body.appendChild( ARButton.createButton( renderer ) );
8
+ * ```
9
+ *
10
+ * @hideconstructor
11
+ */
1
12
  class ARButton {
2
13
 
14
+ /**
15
+ * Constructs a new AR button.
16
+ *
17
+ * @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
18
+ * @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
19
+ * @return {HTMLElement} The button or an error message if `immersive-ar` isn't supported.
20
+ */
3
21
  static createButton( renderer, sessionInit = {} ) {
4
22
 
5
23
  const button = document.createElement( 'button' );