@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
@@ -4,40 +4,113 @@ import { denormalize, normalize } from '../math/MathUtils.js';
4
4
 
5
5
  const _vector = /*@__PURE__*/ new Vector3();
6
6
 
7
+ /**
8
+ * An alternative version of a buffer attribute with interleaved data. Interleaved
9
+ * attributes share a common interleaved data storage ({@link InterleavedBuffer}) and refer with
10
+ * different offsets into the buffer.
11
+ */
7
12
  class InterleavedBufferAttribute {
8
13
 
14
+ /**
15
+ * Constructs a new interleaved buffer attribute.
16
+ *
17
+ * @param {InterleavedBuffer} interleavedBuffer - The buffer holding the interleaved data.
18
+ * @param {number} itemSize - The item size.
19
+ * @param {number} offset - The attribute offset into the buffer.
20
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
21
+ */
9
22
  constructor( interleavedBuffer, itemSize, offset, normalized = false ) {
10
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
11
31
  this.isInterleavedBufferAttribute = true;
12
32
 
33
+ /**
34
+ * The name of the buffer attribute.
35
+ *
36
+ * @type {string}
37
+ */
13
38
  this.name = '';
14
39
 
40
+ /**
41
+ * The buffer holding the interleaved data.
42
+ *
43
+ * @type {InterleavedBuffer}
44
+ */
15
45
  this.data = interleavedBuffer;
46
+
47
+ /**
48
+ * The item size, see {@link BufferAttribute#itemSize}.
49
+ *
50
+ * @type {number}
51
+ */
16
52
  this.itemSize = itemSize;
53
+
54
+ /**
55
+ * The attribute offset into the buffer.
56
+ *
57
+ * @type {number}
58
+ */
17
59
  this.offset = offset;
18
60
 
61
+ /**
62
+ * Whether the data are normalized or not, see {@link BufferAttribute#normalized}
63
+ *
64
+ * @type {InterleavedBuffer}
65
+ */
19
66
  this.normalized = normalized;
20
67
 
21
68
  }
22
69
 
70
+ /**
71
+ * The item count of this buffer attribute.
72
+ *
73
+ * @type {number}
74
+ * @readonly
75
+ */
23
76
  get count() {
24
77
 
25
78
  return this.data.count;
26
79
 
27
80
  }
28
81
 
82
+ /**
83
+ * The array holding the interleaved buffer attribute data.
84
+ *
85
+ * @type {TypedArray}
86
+ */
29
87
  get array() {
30
88
 
31
89
  return this.data.array;
32
90
 
33
91
  }
34
92
 
93
+ /**
94
+ * Flag to indicate that this attribute has changed and should be re-sent to
95
+ * the GPU. Set this to `true` when you modify the value of the array.
96
+ *
97
+ * @type {number}
98
+ * @default false
99
+ * @param {boolean} value
100
+ */
35
101
  set needsUpdate( value ) {
36
102
 
37
103
  this.data.needsUpdate = value;
38
104
 
39
105
  }
40
106
 
107
+ /**
108
+ * Applies the given 4x4 matrix to the given attribute. Only works with
109
+ * item size `3`.
110
+ *
111
+ * @param {Matrix4} m - The matrix to apply.
112
+ * @return {InterleavedBufferAttribute} A reference to this instance.
113
+ */
41
114
  applyMatrix4( m ) {
42
115
 
43
116
  for ( let i = 0, l = this.data.count; i < l; i ++ ) {
@@ -54,6 +127,13 @@ class InterleavedBufferAttribute {
54
127
 
55
128
  }
56
129
 
130
+ /**
131
+ * Applies the given 3x3 normal matrix to the given attribute. Only works with
132
+ * item size `3`.
133
+ *
134
+ * @param {Matrix3} m - The normal matrix to apply.
135
+ * @return {InterleavedBufferAttribute} A reference to this instance.
136
+ */
57
137
  applyNormalMatrix( m ) {
58
138
 
59
139
  for ( let i = 0, l = this.count; i < l; i ++ ) {
@@ -70,6 +150,13 @@ class InterleavedBufferAttribute {
70
150
 
71
151
  }
72
152
 
153
+ /**
154
+ * Applies the given 4x4 matrix to the given attribute. Only works with
155
+ * item size `3` and with direction vectors.
156
+ *
157
+ * @param {Matrix4} m - The matrix to apply.
158
+ * @return {InterleavedBufferAttribute} A reference to this instance.
159
+ */
73
160
  transformDirection( m ) {
74
161
 
75
162
  for ( let i = 0, l = this.count; i < l; i ++ ) {
@@ -86,6 +173,13 @@ class InterleavedBufferAttribute {
86
173
 
87
174
  }
88
175
 
176
+ /**
177
+ * Returns the given component of the vector at the given index.
178
+ *
179
+ * @param {number} index - The index into the buffer attribute.
180
+ * @param {number} component - The component index.
181
+ * @return {number} The returned value.
182
+ */
89
183
  getComponent( index, component ) {
90
184
 
91
185
  let value = this.array[ index * this.data.stride + this.offset + component ];
@@ -96,6 +190,14 @@ class InterleavedBufferAttribute {
96
190
 
97
191
  }
98
192
 
193
+ /**
194
+ * Sets the given value to the given component of the vector at the given index.
195
+ *
196
+ * @param {number} index - The index into the buffer attribute.
197
+ * @param {number} component - The component index.
198
+ * @param {number} value - The value to set.
199
+ * @return {InterleavedBufferAttribute} A reference to this instance.
200
+ */
99
201
  setComponent( index, component, value ) {
100
202
 
101
203
  if ( this.normalized ) value = normalize( value, this.array );
@@ -106,6 +208,13 @@ class InterleavedBufferAttribute {
106
208
 
107
209
  }
108
210
 
211
+ /**
212
+ * Sets the x component of the vector at the given index.
213
+ *
214
+ * @param {number} index - The index into the buffer attribute.
215
+ * @param {number} x - The value to set.
216
+ * @return {InterleavedBufferAttribute} A reference to this instance.
217
+ */
109
218
  setX( index, x ) {
110
219
 
111
220
  if ( this.normalized ) x = normalize( x, this.array );
@@ -116,6 +225,13 @@ class InterleavedBufferAttribute {
116
225
 
117
226
  }
118
227
 
228
+ /**
229
+ * Sets the y component of the vector at the given index.
230
+ *
231
+ * @param {number} index - The index into the buffer attribute.
232
+ * @param {number} y - The value to set.
233
+ * @return {InterleavedBufferAttribute} A reference to this instance.
234
+ */
119
235
  setY( index, y ) {
120
236
 
121
237
  if ( this.normalized ) y = normalize( y, this.array );
@@ -126,6 +242,13 @@ class InterleavedBufferAttribute {
126
242
 
127
243
  }
128
244
 
245
+ /**
246
+ * Sets the z component of the vector at the given index.
247
+ *
248
+ * @param {number} index - The index into the buffer attribute.
249
+ * @param {number} z - The value to set.
250
+ * @return {InterleavedBufferAttribute} A reference to this instance.
251
+ */
129
252
  setZ( index, z ) {
130
253
 
131
254
  if ( this.normalized ) z = normalize( z, this.array );
@@ -136,6 +259,13 @@ class InterleavedBufferAttribute {
136
259
 
137
260
  }
138
261
 
262
+ /**
263
+ * Sets the w component of the vector at the given index.
264
+ *
265
+ * @param {number} index - The index into the buffer attribute.
266
+ * @param {number} w - The value to set.
267
+ * @return {InterleavedBufferAttribute} A reference to this instance.
268
+ */
139
269
  setW( index, w ) {
140
270
 
141
271
  if ( this.normalized ) w = normalize( w, this.array );
@@ -146,6 +276,12 @@ class InterleavedBufferAttribute {
146
276
 
147
277
  }
148
278
 
279
+ /**
280
+ * Returns the x component of the vector at the given index.
281
+ *
282
+ * @param {number} index - The index into the buffer attribute.
283
+ * @return {number} The x component.
284
+ */
149
285
  getX( index ) {
150
286
 
151
287
  let x = this.data.array[ index * this.data.stride + this.offset ];
@@ -156,6 +292,12 @@ class InterleavedBufferAttribute {
156
292
 
157
293
  }
158
294
 
295
+ /**
296
+ * Returns the y component of the vector at the given index.
297
+ *
298
+ * @param {number} index - The index into the buffer attribute.
299
+ * @return {number} The y component.
300
+ */
159
301
  getY( index ) {
160
302
 
161
303
  let y = this.data.array[ index * this.data.stride + this.offset + 1 ];
@@ -166,6 +308,12 @@ class InterleavedBufferAttribute {
166
308
 
167
309
  }
168
310
 
311
+ /**
312
+ * Returns the z component of the vector at the given index.
313
+ *
314
+ * @param {number} index - The index into the buffer attribute.
315
+ * @return {number} The z component.
316
+ */
169
317
  getZ( index ) {
170
318
 
171
319
  let z = this.data.array[ index * this.data.stride + this.offset + 2 ];
@@ -176,6 +324,12 @@ class InterleavedBufferAttribute {
176
324
 
177
325
  }
178
326
 
327
+ /**
328
+ * Returns the w component of the vector at the given index.
329
+ *
330
+ * @param {number} index - The index into the buffer attribute.
331
+ * @return {number} The w component.
332
+ */
179
333
  getW( index ) {
180
334
 
181
335
  let w = this.data.array[ index * this.data.stride + this.offset + 3 ];
@@ -186,6 +340,14 @@ class InterleavedBufferAttribute {
186
340
 
187
341
  }
188
342
 
343
+ /**
344
+ * Sets the x and y component of the vector at the given index.
345
+ *
346
+ * @param {number} index - The index into the buffer attribute.
347
+ * @param {number} x - The value for the x component to set.
348
+ * @param {number} y - The value for the y component to set.
349
+ * @return {InterleavedBufferAttribute} A reference to this instance.
350
+ */
189
351
  setXY( index, x, y ) {
190
352
 
191
353
  index = index * this.data.stride + this.offset;
@@ -204,6 +366,15 @@ class InterleavedBufferAttribute {
204
366
 
205
367
  }
206
368
 
369
+ /**
370
+ * Sets the x, y and z component of the vector at the given index.
371
+ *
372
+ * @param {number} index - The index into the buffer attribute.
373
+ * @param {number} x - The value for the x component to set.
374
+ * @param {number} y - The value for the y component to set.
375
+ * @param {number} z - The value for the z component to set.
376
+ * @return {InterleavedBufferAttribute} A reference to this instance.
377
+ */
207
378
  setXYZ( index, x, y, z ) {
208
379
 
209
380
  index = index * this.data.stride + this.offset;
@@ -224,6 +395,16 @@ class InterleavedBufferAttribute {
224
395
 
225
396
  }
226
397
 
398
+ /**
399
+ * Sets the x, y, z and w component of the vector at the given index.
400
+ *
401
+ * @param {number} index - The index into the buffer attribute.
402
+ * @param {number} x - The value for the x component to set.
403
+ * @param {number} y - The value for the y component to set.
404
+ * @param {number} z - The value for the z component to set.
405
+ * @param {number} w - The value for the w component to set.
406
+ * @return {InterleavedBufferAttribute} A reference to this instance.
407
+ */
227
408
  setXYZW( index, x, y, z, w ) {
228
409
 
229
410
  index = index * this.data.stride + this.offset;
@@ -246,6 +427,14 @@ class InterleavedBufferAttribute {
246
427
 
247
428
  }
248
429
 
430
+ /**
431
+ * Returns a new buffer attribute with copied values from this instance.
432
+ *
433
+ * If no parameter is provided, cloning an interleaved buffer attribute will de-interleave buffer data.
434
+ *
435
+ * @param {Object} [data] - An object with interleaved buffers that allows to retain the interleaved property.
436
+ * @return {BufferAttribute|InterleavedBufferAttribute} A clone of this instance.
437
+ */
249
438
  clone( data ) {
250
439
 
251
440
  if ( data === undefined ) {
@@ -288,6 +477,14 @@ class InterleavedBufferAttribute {
288
477
 
289
478
  }
290
479
 
480
+ /**
481
+ * Serializes the buffer attribute into JSON.
482
+ *
483
+ * If no parameter is provided, cloning an interleaved buffer attribute will de-interleave buffer data.
484
+ *
485
+ * @param {Object} [data] - An optional value holding meta information about the serialization.
486
+ * @return {Object} A JSON object representing the serialized buffer attribute.
487
+ */
291
488
  toJSON( data ) {
292
489
 
293
490
  if ( data === undefined ) {
@@ -1,56 +1,117 @@
1
+ /**
2
+ * A layers object assigns an 3D object to 1 or more of 32
3
+ * layers numbered `0` to `31` - internally the layers are stored as a
4
+ * bit mask], and by default all 3D objects are a member of layer `0`.
5
+ *
6
+ * This can be used to control visibility - an object must share a layer with
7
+ * a camera to be visible when that camera's view is
8
+ * rendered.
9
+ *
10
+ * All classes that inherit from {@link Object3D} have an `layers` property which
11
+ * is an instance of this class.
12
+ */
1
13
  class Layers {
2
14
 
15
+ /**
16
+ * Constructs a new layers instance, with membership
17
+ * initially set to layer `0`.
18
+ */
3
19
  constructor() {
4
20
 
21
+ /**
22
+ * A bit mask storing which of the 32 layers this layers object is currently
23
+ * a member of.
24
+ *
25
+ * @type {number}
26
+ */
5
27
  this.mask = 1 | 0;
6
28
 
7
29
  }
8
30
 
9
- set( channel ) {
31
+ /**
32
+ * Sets membership to the given layer, and remove membership all other layers.
33
+ *
34
+ * @param {number} layer - The layer to set.
35
+ */
36
+ set( layer ) {
10
37
 
11
- this.mask = ( 1 << channel | 0 ) >>> 0;
38
+ this.mask = ( 1 << layer | 0 ) >>> 0;
12
39
 
13
40
  }
14
41
 
15
- enable( channel ) {
42
+ /**
43
+ * Adds membership of the given layer.
44
+ *
45
+ * @param {number} layer - The layer to enable.
46
+ */
47
+ enable( layer ) {
16
48
 
17
- this.mask |= 1 << channel | 0;
49
+ this.mask |= 1 << layer | 0;
18
50
 
19
51
  }
20
52
 
53
+ /**
54
+ * Adds membership to all layers.
55
+ */
21
56
  enableAll() {
22
57
 
23
58
  this.mask = 0xffffffff | 0;
24
59
 
25
60
  }
26
61
 
27
- toggle( channel ) {
62
+ /**
63
+ * Toggles the membership of the given layer.
64
+ *
65
+ * @param {number} layer - The layer to toggle.
66
+ */
67
+ toggle( layer ) {
28
68
 
29
- this.mask ^= 1 << channel | 0;
69
+ this.mask ^= 1 << layer | 0;
30
70
 
31
71
  }
32
72
 
33
- disable( channel ) {
73
+ /**
74
+ * Removes membership of the given layer.
75
+ *
76
+ * @param {number} layer - The layer to enable.
77
+ */
78
+ disable( layer ) {
34
79
 
35
- this.mask &= ~ ( 1 << channel | 0 );
80
+ this.mask &= ~ ( 1 << layer | 0 );
36
81
 
37
82
  }
38
83
 
84
+ /**
85
+ * Removes the membership from all layers.
86
+ */
39
87
  disableAll() {
40
88
 
41
89
  this.mask = 0;
42
90
 
43
91
  }
44
92
 
93
+ /**
94
+ * Returns `true` if this and the given layers object have at least one
95
+ * layer in common.
96
+ *
97
+ * @param {Layers} layers - The layers to test.
98
+ * @return {boolean } Whether this and the given layers object have at least one layer in common or not.
99
+ */
45
100
  test( layers ) {
46
101
 
47
102
  return ( this.mask & layers.mask ) !== 0;
48
103
 
49
104
  }
50
105
 
51
- isEnabled( channel ) {
106
+ /**
107
+ * Returns `true` if the given layer is enabled.
108
+ *
109
+ * @param {number} layer - The layer to test.
110
+ * @return {boolean } Whether the given layer is enabled or not.
111
+ */
112
+ isEnabled( layer ) {
52
113
 
53
- return ( this.mask & ( 1 << channel | 0 ) ) !== 0;
114
+ return ( this.mask & ( 1 << layer | 0 ) ) !== 0;
54
115
 
55
116
  }
56
117
 
@@ -330,6 +330,29 @@ class Object3D extends EventDispatcher {
330
330
  */
331
331
  this.animations = [];
332
332
 
333
+ /**
334
+ * Custom depth material to be used when rendering to the depth map. Can only be used
335
+ * in context of meshes. When shadow-casting with a {@link DirectionalLight} or {@link SpotLight},
336
+ * if you are modifying vertex positions in the vertex shader you must specify a custom depth
337
+ * material for proper shadows.
338
+ *
339
+ * Only relevant in context of {@link WebGLRenderer}.
340
+ *
341
+ * @type {(Material|undefined)}
342
+ * @default undefined
343
+ */
344
+ this.customDepthMaterial = undefined;
345
+
346
+ /**
347
+ * Same as {@link Object3D#customDepthMaterial}, but used with {@link PointLight}.
348
+ *
349
+ * Only relevant in context of {@link WebGLRenderer}.
350
+ *
351
+ * @type {(Material|undefined)}
352
+ * @default undefined
353
+ */
354
+ this.customDistanceMaterial = undefined;
355
+
333
356
  /**
334
357
  * An object that can be used to store custom data about the 3D object. It
335
358
  * should not hold references to functions as these will not be cloned.
@@ -4,18 +4,86 @@ import { Layers } from './Layers.js';
4
4
 
5
5
  const _matrix = /*@__PURE__*/ new Matrix4();
6
6
 
7
+ /**
8
+ * This class is designed to assist with raycasting. Raycasting is used for
9
+ * mouse picking (working out what objects in the 3d space the mouse is over)
10
+ * amongst other things.
11
+ */
7
12
  class Raycaster {
8
13
 
14
+ /**
15
+ * Constructs a new raycaster.
16
+ *
17
+ * @param {Vector3} origin - The origin vector where the ray casts from.
18
+ * @param {Vector3} direction - The (normalized) direction vector that gives direction to the ray.
19
+ * @param {number} [near=0] - All results returned are further away than near. Near can't be negative.
20
+ * @param {number} [far=Infinity] - All results returned are closer than far. Far can't be lower than near.
21
+ */
9
22
  constructor( origin, direction, near = 0, far = Infinity ) {
10
23
 
24
+ /**
25
+ * The ray used for raycasting.
26
+ *
27
+ * @type {Ray}
28
+ */
11
29
  this.ray = new Ray( origin, direction );
12
- // direction is assumed to be normalized (for accurate distance calculations)
13
30
 
31
+ /**
32
+ * All results returned are further away than near. Near can't be negative.
33
+ *
34
+ * @type {number}
35
+ * @default 0
36
+ */
14
37
  this.near = near;
38
+
39
+ /**
40
+ * All results returned are further away than near. Near can't be negative.
41
+ *
42
+ * @type {number}
43
+ * @default Infinity
44
+ */
15
45
  this.far = far;
46
+
47
+ /**
48
+ * The camera to use when raycasting against view-dependent objects such as
49
+ * billboarded objects like sprites. This field can be set manually or
50
+ * is set when calling `setFromCamera()`.
51
+ *
52
+ * @type {?Camera}
53
+ * @default null
54
+ */
16
55
  this.camera = null;
56
+
57
+ /**
58
+ * Allows to selectively ignore 3D objects when performing intersection tests.
59
+ * The following code example ensures that only 3D objects on layer `1` will be
60
+ * honored by raycaster.
61
+ * ```js
62
+ * raycaster.layers.set( 1 );
63
+ * object.layers.enable( 1 );
64
+ * ```
65
+ *
66
+ * @type {Layers}
67
+ */
17
68
  this.layers = new Layers();
18
69
 
70
+
71
+ /**
72
+ * A parameter object that configures the raycasting. It has the structure:
73
+ *
74
+ * ```
75
+ * {
76
+ * Mesh: {},
77
+ * Line: { threshold: 1 },
78
+ * LOD: {},
79
+ * Points: { threshold: 1 },
80
+ * Sprite: {}
81
+ * }
82
+ * ```
83
+ * Where `threshold` is the precision of the raycaster when intersecting objects, in world units.
84
+ *
85
+ * @type {Object}
86
+ */
19
87
  this.params = {
20
88
  Mesh: {},
21
89
  Line: { threshold: 1 },
@@ -26,6 +94,12 @@ class Raycaster {
26
94
 
27
95
  }
28
96
 
97
+ /**
98
+ * Updates the ray with a new origin and direction by copying the values from the arguments.
99
+ *
100
+ * @param {Vector3} origin - The origin vector where the ray casts from.
101
+ * @param {Vector3} direction - The (normalized) direction vector that gives direction to the ray.
102
+ */
29
103
  set( origin, direction ) {
30
104
 
31
105
  // direction is assumed to be normalized (for accurate distance calculations)
@@ -34,6 +108,13 @@ class Raycaster {
34
108
 
35
109
  }
36
110
 
111
+ /**
112
+ * Uses the given coordinates and camera to compute a new origin and direction for the internal ray.
113
+ *
114
+ * @param {Vector2} coords - 2D coordinates of the mouse, in normalized device coordinates (NDC).
115
+ * X and Y components should be between `-1` and `1`.
116
+ * @param {Camera} camera - The camera from which the ray should originate.
117
+ */
37
118
  setFromCamera( coords, camera ) {
38
119
 
39
120
  if ( camera.isPerspectiveCamera ) {
@@ -56,6 +137,12 @@ class Raycaster {
56
137
 
57
138
  }
58
139
 
140
+ /**
141
+ * Uses the given WebXR controller to compute a new origin and direction for the internal ray.
142
+ *
143
+ * @param {WebXRController} controller - The controller to copy the position and direction from.
144
+ * @return {Raycaster} A reference to this raycaster.
145
+ */
59
146
  setFromXRController( controller ) {
60
147
 
61
148
  _matrix.identity().extractRotation( controller.matrixWorld );
@@ -67,6 +154,42 @@ class Raycaster {
67
154
 
68
155
  }
69
156
 
157
+ /**
158
+ * The intersection point of a raycaster intersection test.
159
+ * @typedef {Object} Raycaster~Intersection
160
+ * @property {number} distance - The distance from the ray's origin to the intersection point.
161
+ * @property {number} distanceToRay - Some 3D objects e.g. {@link Points} provide the distance of the
162
+ * intersection to the nearest point on the ray. For other objects it will be `undefined`.
163
+ * @property {Vector3} point - The intersection point, in world coordinates.
164
+ * @property {Object} face - The face that has been intersected.
165
+ * @property {number} faceIndex - The face index.
166
+ * @property {Object3D} object - The 3D object that has been intersected.
167
+ * @property {Vector2} uv - U,V coordinates at point of intersection.
168
+ * @property {Vector2} uv1 - Second set of U,V coordinates at point of intersection.
169
+ * @property {Vector3} uv1 - Interpolated normal vector at point of intersection.
170
+ * @property {number} instanceId - The index number of the instance where the ray
171
+ * intersects the {@link InstancedMesh}.
172
+ */
173
+
174
+ /**
175
+ * Checks all intersection between the ray and the object with or without the
176
+ * descendants. Intersections are returned sorted by distance, closest first.
177
+ *
178
+ * `Raycaster` delegates to the `raycast()` method of the passed 3D object, when
179
+ * evaluating whether the ray intersects the object or not. This allows meshes to respond
180
+ * differently to ray casting than lines or points.
181
+ *
182
+ * Note that for meshes, faces must be pointed towards the origin of the ray in order
183
+ * to be detected; intersections of the ray passing through the back of a face will not
184
+ * be detected. To raycast against both faces of an object, you'll want to set {@link Material#side}
185
+ * to `THREE.DoubleSide`.
186
+ *
187
+ * @param {Object3D} object - The 3D object to check for intersection with the ray.
188
+ * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
189
+ * Otherwise it only checks intersection with the object.
190
+ * @param {Array<Raycaster~Intersection>} [intersects=[]] The target array that holds the result of the method.
191
+ * @return {Array<Raycaster~Intersection>} An array holding the intersection points.
192
+ */
70
193
  intersectObject( object, recursive = true, intersects = [] ) {
71
194
 
72
195
  intersect( object, this, intersects, recursive );
@@ -77,6 +200,16 @@ class Raycaster {
77
200
 
78
201
  }
79
202
 
203
+ /**
204
+ * Checks all intersection between the ray and the objects with or without
205
+ * the descendants. Intersections are returned sorted by distance, closest first.
206
+ *
207
+ * @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.
208
+ * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
209
+ * Otherwise it only checks intersection with the object.
210
+ * @param {Array<Raycaster~Intersection>} [intersects=[]] The target array that holds the result of the method.
211
+ * @return {Array<Raycaster~Intersection>} An array holding the intersection points.
212
+ */
80
213
  intersectObjects( objects, recursive = true, intersects = [] ) {
81
214
 
82
215
  for ( let i = 0, l = objects.length; i < l; i ++ ) {