@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
@@ -403,8 +403,28 @@ ShaderLib[ 'line' ] = {
403
403
  `
404
404
  };
405
405
 
406
+ /**
407
+ * A material for drawing wireframe-style geometries.
408
+ *
409
+ * Unlike {@link LineBasicMaterial}, it supports arbitrary line widths and allows using world units
410
+ * instead of screen space units. This material is used with {@link LineSegments2} and {@link Line2}.
411
+ *
412
+ * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
413
+ * use {@link Line2NodeMaterial}.
414
+ *
415
+ * @augments ShaderMaterial
416
+ */
406
417
  class LineMaterial extends ShaderMaterial {
407
418
 
419
+ /**
420
+ * Constructs a new line segments geometry.
421
+ *
422
+ * @param {Object} [parameters] - An object with one or more properties
423
+ * defining the material's appearance. Any property of the material
424
+ * (including any property from inherited materials) can be passed
425
+ * in here. Color values can be passed any type of value accepted
426
+ * by {@link Color#set}.
427
+ */
408
428
  constructor( parameters ) {
409
429
 
410
430
  super( {
@@ -419,12 +439,25 @@ class LineMaterial extends ShaderMaterial {
419
439
 
420
440
  } );
421
441
 
442
+ /**
443
+ * This flag can be used for type testing.
444
+ *
445
+ * @type {boolean}
446
+ * @readonly
447
+ * @default true
448
+ */
422
449
  this.isLineMaterial = true;
423
450
 
424
451
  this.setValues( parameters );
425
452
 
426
453
  }
427
454
 
455
+ /**
456
+ * The material's color.
457
+ *
458
+ * @type {Color}
459
+ * @default (1,1,1)
460
+ */
428
461
  get color() {
429
462
 
430
463
  return this.uniforms.diffuse.value;
@@ -437,6 +470,12 @@ class LineMaterial extends ShaderMaterial {
437
470
 
438
471
  }
439
472
 
473
+ /**
474
+ * Whether the material's sizes (width, dash gaps) are in world units.
475
+ *
476
+ * @type {boolean}
477
+ * @default false
478
+ */
440
479
  get worldUnits() {
441
480
 
442
481
  return 'WORLD_UNITS' in this.defines;
@@ -457,6 +496,13 @@ class LineMaterial extends ShaderMaterial {
457
496
 
458
497
  }
459
498
 
499
+ /**
500
+ * Controls line thickness in CSS pixel units when `worldUnits` is `false` (default),
501
+ * or in world units when `worldUnits` is `true`.
502
+ *
503
+ * @type {number}
504
+ * @default 1
505
+ */
460
506
  get linewidth() {
461
507
 
462
508
  return this.uniforms.linewidth.value;
@@ -470,6 +516,12 @@ class LineMaterial extends ShaderMaterial {
470
516
 
471
517
  }
472
518
 
519
+ /**
520
+ * Whether the line is dashed, or solid.
521
+ *
522
+ * @type {boolean}
523
+ * @default false
524
+ */
473
525
  get dashed() {
474
526
 
475
527
  return 'USE_DASH' in this.defines;
@@ -496,6 +548,12 @@ class LineMaterial extends ShaderMaterial {
496
548
 
497
549
  }
498
550
 
551
+ /**
552
+ * The scale of the dashes and gaps.
553
+ *
554
+ * @type {number}
555
+ * @default 1
556
+ */
499
557
  get dashScale() {
500
558
 
501
559
  return this.uniforms.dashScale.value;
@@ -508,6 +566,12 @@ class LineMaterial extends ShaderMaterial {
508
566
 
509
567
  }
510
568
 
569
+ /**
570
+ * The size of the dash.
571
+ *
572
+ * @type {number}
573
+ * @default 1
574
+ */
511
575
  get dashSize() {
512
576
 
513
577
  return this.uniforms.dashSize.value;
@@ -520,6 +584,12 @@ class LineMaterial extends ShaderMaterial {
520
584
 
521
585
  }
522
586
 
587
+ /**
588
+ * Where in the dash cycle the dash starts.
589
+ *
590
+ * @type {number}
591
+ * @default 0
592
+ */
523
593
  get dashOffset() {
524
594
 
525
595
  return this.uniforms.dashOffset.value;
@@ -532,6 +602,12 @@ class LineMaterial extends ShaderMaterial {
532
602
 
533
603
  }
534
604
 
605
+ /**
606
+ * The size of the gap.
607
+ *
608
+ * @type {number}
609
+ * @default 0
610
+ */
535
611
  get gapSize() {
536
612
 
537
613
  return this.uniforms.gapSize.value;
@@ -544,6 +620,12 @@ class LineMaterial extends ShaderMaterial {
544
620
 
545
621
  }
546
622
 
623
+ /**
624
+ * The opacity.
625
+ *
626
+ * @type {number}
627
+ * @default 1
628
+ */
547
629
  get opacity() {
548
630
 
549
631
  return this.uniforms.opacity.value;
@@ -557,6 +639,13 @@ class LineMaterial extends ShaderMaterial {
557
639
 
558
640
  }
559
641
 
642
+ /**
643
+ * The size of the viewport, in screen pixels. This must be kept updated to make
644
+ * screen-space rendering accurate.The `LineSegments2.onBeforeRender` callback
645
+ * performs the update for visible objects.
646
+ *
647
+ * @type {Vector2}
648
+ */
560
649
  get resolution() {
561
650
 
562
651
  return this.uniforms.resolution.value;
@@ -569,6 +658,12 @@ class LineMaterial extends ShaderMaterial {
569
658
 
570
659
  }
571
660
 
661
+ /**
662
+ * Whether to use alphaToCoverage or not. When enabled, this can improve the
663
+ * anti-aliasing of line edges when using MSAA.
664
+ *
665
+ * @type {boolean}
666
+ */
572
667
  get alphaToCoverage() {
573
668
 
574
669
  return 'USE_ALPHA_TO_COVERAGE' in this.defines;
@@ -224,22 +224,65 @@ function raycastScreenSpace( lineSegments, camera, intersects ) {
224
224
 
225
225
  }
226
226
 
227
+ /**
228
+ * A series of lines drawn between pairs of vertices.
229
+ *
230
+ * This adds functionality beyond {@link LineSegments}, like arbitrary line width and changing width
231
+ * to be in world units. {@link Line2} extends this object, forming a polyline instead of individual
232
+ * segments.
233
+ *
234
+ * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
235
+ * import the class from `lines/webgpu/LineSegments2.js`.
236
+ *
237
+ * ```js
238
+ * const geometry = new LineSegmentsGeometry();
239
+ * geometry.setPositions( positions );
240
+ * geometry.setColors( colors );
241
+ *
242
+ * const material = new LineMaterial( { linewidth: 5, vertexColors: true } };
243
+ *
244
+ * const lineSegments = new LineSegments2( geometry, material );
245
+ * scene.add( lineSegments );
246
+ * ```
247
+ *
248
+ * @augments Mesh
249
+ */
227
250
  class LineSegments2 extends Mesh {
228
251
 
252
+ /**
253
+ * Constructs a new wide line.
254
+ *
255
+ * @param {LineSegmentsGeometry} [geometry] - The line geometry.
256
+ * @param {LineMaterial} [material] - The line material.
257
+ */
229
258
  constructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {
230
259
 
231
260
  super( geometry, material );
232
261
 
262
+ /**
263
+ * This flag can be used for type testing.
264
+ *
265
+ * @type {boolean}
266
+ * @readonly
267
+ * @default true
268
+ */
233
269
  this.isLineSegments2 = true;
234
270
 
235
271
  this.type = 'LineSegments2';
236
272
 
237
273
  }
238
274
 
239
- // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
240
-
275
+ /**
276
+ * Computes an array of distance values which are necessary for rendering dashed lines.
277
+ * For each vertex in the geometry, the method calculates the cumulative length from the
278
+ * current point to the very beginning of the line.
279
+ *
280
+ * @return {LineSegments2} A reference to this instance.
281
+ */
241
282
  computeLineDistances() {
242
283
 
284
+ // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
285
+
243
286
  const geometry = this.geometry;
244
287
 
245
288
  const instanceStart = geometry.attributes.instanceStart;
@@ -265,6 +308,12 @@ class LineSegments2 extends Mesh {
265
308
 
266
309
  }
267
310
 
311
+ /**
312
+ * Computes intersection points between a casted ray and this instance.
313
+ *
314
+ * @param {Raycaster} raycaster - The raycaster.
315
+ * @param {Array<Object>} intersects - The target array that holds the intersection points.
316
+ */
268
317
  raycast( raycaster, intersects ) {
269
318
 
270
319
  const worldUnits = this.material.worldUnits;
@@ -12,12 +12,29 @@ import {
12
12
  const _box = new Box3();
13
13
  const _vector = new Vector3();
14
14
 
15
+ /**
16
+ * A series of vertex pairs, forming line segments.
17
+ *
18
+ * This is used in {@link LineSegments2} to describe the shape.
19
+ *
20
+ * @augments InstancedBufferGeometry
21
+ */
15
22
  class LineSegmentsGeometry extends InstancedBufferGeometry {
16
23
 
24
+ /**
25
+ * Constructs a new line segments geometry.
26
+ */
17
27
  constructor() {
18
28
 
19
29
  super();
20
30
 
31
+ /**
32
+ * This flag can be used for type testing.
33
+ *
34
+ * @type {boolean}
35
+ * @readonly
36
+ * @default true
37
+ */
21
38
  this.isLineSegmentsGeometry = true;
22
39
 
23
40
  this.type = 'LineSegmentsGeometry';
@@ -32,6 +49,12 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
32
49
 
33
50
  }
34
51
 
52
+ /**
53
+ * Applies the given 4x4 transformation matrix to the geometry.
54
+ *
55
+ * @param {Matrix4} matrix - The matrix to apply.
56
+ * @return {LineSegmentsGeometry} A reference to this instance.
57
+ */
35
58
  applyMatrix4( matrix ) {
36
59
 
37
60
  const start = this.attributes.instanceStart;
@@ -63,6 +86,13 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
63
86
 
64
87
  }
65
88
 
89
+ /**
90
+ * Sets the given line positions for this geometry. The length must be a multiple of six since
91
+ * each line segment is defined by a start end vertex in the pattern `(xyz xyz)`.
92
+ *
93
+ * @param {Float32Array|Array<number>} array - The position data to set.
94
+ * @return {LineSegmentsGeometry} A reference to this geometry.
95
+ */
66
96
  setPositions( array ) {
67
97
 
68
98
  let lineSegments;
@@ -93,6 +123,13 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
93
123
 
94
124
  }
95
125
 
126
+ /**
127
+ * Sets the given line colors for this geometry. The length must be a multiple of six since
128
+ * each line segment is defined by a start end color in the pattern `(rgb rgb)`.
129
+ *
130
+ * @param {Float32Array|Array<number>} array - The position data to set.
131
+ * @return {LineSegmentsGeometry} A reference to this geometry.
132
+ */
96
133
  setColors( array ) {
97
134
 
98
135
  let colors;
@@ -116,6 +153,12 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
116
153
 
117
154
  }
118
155
 
156
+ /**
157
+ * Setups this line segments geometry from the given wireframe geometry.
158
+ *
159
+ * @param {WireframeGeometry} geometry - The geometry that should be used as a data source for this geometry.
160
+ * @return {LineSegmentsGeometry} A reference to this geometry.
161
+ */
119
162
  fromWireframeGeometry( geometry ) {
120
163
 
121
164
  this.setPositions( geometry.attributes.position.array );
@@ -124,6 +167,12 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
124
167
 
125
168
  }
126
169
 
170
+ /**
171
+ * Setups this line segments geometry from the given edges geometry.
172
+ *
173
+ * @param {EdgesGeometry} geometry - The geometry that should be used as a data source for this geometry.
174
+ * @return {LineSegmentsGeometry} A reference to this geometry.
175
+ */
127
176
  fromEdgesGeometry( geometry ) {
128
177
 
129
178
  this.setPositions( geometry.attributes.position.array );
@@ -132,6 +181,12 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
132
181
 
133
182
  }
134
183
 
184
+ /**
185
+ * Setups this line segments geometry from the given mesh.
186
+ *
187
+ * @param {Mesh} mesh - The mesh geometry that should be used as a data source for this geometry.
188
+ * @return {LineSegmentsGeometry} A reference to this geometry.
189
+ */
135
190
  fromMesh( mesh ) {
136
191
 
137
192
  this.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );
@@ -142,6 +197,13 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
142
197
 
143
198
  }
144
199
 
200
+ /**
201
+ * Setups this line segments geometry from the given line segments.
202
+ *
203
+ * @param {LineSegments} lineSegments - The line segments that should be used as a data source for this geometry.
204
+ * Assumes the source geometry is not using indices.
205
+ * @return {LineSegmentsGeometry} A reference to this geometry.
206
+ */
145
207
  fromLineSegments( lineSegments ) {
146
208
 
147
209
  const geometry = lineSegments.geometry;
@@ -230,14 +292,6 @@ class LineSegmentsGeometry extends InstancedBufferGeometry {
230
292
 
231
293
  }
232
294
 
233
- applyMatrix( matrix ) {
234
-
235
- console.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );
236
-
237
- return this.applyMatrix4( matrix );
238
-
239
- }
240
-
241
295
  }
242
296
 
243
297
  export { LineSegmentsGeometry };
@@ -12,22 +12,58 @@ const _start = new Vector3();
12
12
  const _end = new Vector3();
13
13
  const _viewport = new Vector4();
14
14
 
15
+ /**
16
+ * A class for creating wireframes based on wide lines.
17
+ *
18
+ * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
19
+ * import the class from `lines/webgpu/Wireframe.js`.
20
+ *
21
+ * ```js
22
+ * const geometry = new THREE.IcosahedronGeometry();
23
+ * const wireframeGeometry = new WireframeGeometry2( geo );
24
+ *
25
+ * const wireframe = new Wireframe( wireframeGeometry, material );
26
+ * scene.add( wireframe );
27
+ * ```
28
+ *
29
+ * @augments Mesh
30
+ */
15
31
  class Wireframe extends Mesh {
16
32
 
33
+ /**
34
+ * Constructs a new wireframe.
35
+ *
36
+ * @param {LineSegmentsGeometry} [geometry] - The line geometry.
37
+ * @param {LineMaterial} [material] - The line material.
38
+ */
17
39
  constructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {
18
40
 
19
41
  super( geometry, material );
20
42
 
43
+ /**
44
+ * This flag can be used for type testing.
45
+ *
46
+ * @type {boolean}
47
+ * @readonly
48
+ * @default true
49
+ */
21
50
  this.isWireframe = true;
22
51
 
23
52
  this.type = 'Wireframe';
24
53
 
25
54
  }
26
55
 
27
- // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
28
-
56
+ /**
57
+ * Computes an array of distance values which are necessary for rendering dashed lines.
58
+ * For each vertex in the geometry, the method calculates the cumulative length from the
59
+ * current point to the very beginning of the line.
60
+ *
61
+ * @return {Wireframe} A reference to this instance.
62
+ */
29
63
  computeLineDistances() {
30
64
 
65
+ // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
66
+
31
67
  const geometry = this.geometry;
32
68
 
33
69
  const instanceStart = geometry.attributes.instanceStart;
@@ -3,12 +3,36 @@ import {
3
3
  } from 'three';
4
4
  import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';
5
5
 
6
+ /**
7
+ * A special type of line segments geometry intended for wireframe rendering.
8
+ *
9
+ * This is used in {@link Wireframe} to describe the shape.
10
+ *
11
+ * ```js
12
+ * const geometry = new THREE.IcosahedronGeometry();
13
+ * const wireframeGeometry = new WireframeGeometry2( geo );
14
+ * ```
15
+ *
16
+ * @augments LineSegmentsGeometry
17
+ */
6
18
  class WireframeGeometry2 extends LineSegmentsGeometry {
7
19
 
20
+ /**
21
+ * Constructs a new wireframe geometry.
22
+ *
23
+ * @param {BufferGeometry} [geometry] - The geometry to render the wireframe for.
24
+ */
8
25
  constructor( geometry ) {
9
26
 
10
27
  super();
11
28
 
29
+ /**
30
+ * This flag can be used for type testing.
31
+ *
32
+ * @type {boolean}
33
+ * @readonly
34
+ * @default true
35
+ */
12
36
  this.isWireframeGeometry2 = true;
13
37
 
14
38
  this.type = 'WireframeGeometry2';
@@ -3,13 +3,37 @@ import { Line2NodeMaterial } from 'three/webgpu';
3
3
  import { LineSegments2 } from './LineSegments2.js';
4
4
  import { LineGeometry } from '../LineGeometry.js';
5
5
 
6
-
6
+ /**
7
+ * A polyline drawn between vertices.
8
+ *
9
+ * This adds functionality beyond {@link Line}, like arbitrary line width and changing width to
10
+ * be in world units.It extends {@link LineSegments2}, simplifying constructing segments from a
11
+ * chain of points.
12
+ *
13
+ * This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
14
+ * import the class from `lines/Line2.js`.
15
+ *
16
+ * @augments LineSegments2
17
+ */
7
18
  class Line2 extends LineSegments2 {
8
19
 
20
+ /**
21
+ * Constructs a new wide line.
22
+ *
23
+ * @param {LineGeometry} [geometry] - The line geometry.
24
+ * @param {Line2NodeMaterial} [material] - The line material.
25
+ */
9
26
  constructor( geometry = new LineGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
10
27
 
11
28
  super( geometry, material );
12
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
13
37
  this.isLine2 = true;
14
38
 
15
39
  this.type = 'Line2';
@@ -223,24 +223,56 @@ function raycastScreenSpace( lineSegments, camera, intersects ) {
223
223
 
224
224
  }
225
225
 
226
+ /**
227
+ * A series of lines drawn between pairs of vertices.
228
+ *
229
+ * This adds functionality beyond {@link LineSegments}, like arbitrary line width and changing width
230
+ * to be in world units. {@link Line2} extends this object, forming a polyline instead of individual
231
+ * segments.
232
+ *
233
+ * This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
234
+ * import the class from `lines/LineSegments2.js`.
235
+ *
236
+ * @augments Mesh
237
+ */
226
238
  class LineSegments2 extends Mesh {
227
239
 
240
+ /**
241
+ * Constructs a new wide line.
242
+ *
243
+ * @param {LineSegmentsGeometry} [geometry] - The line geometry.
244
+ * @param {Line2NodeMaterial} [material] - The line material.
245
+ */
228
246
  constructor( geometry = new LineSegmentsGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
229
247
 
230
248
  super( geometry, material );
231
249
 
250
+ /**
251
+ * This flag can be used for type testing.
252
+ *
253
+ * @type {boolean}
254
+ * @readonly
255
+ * @default true
256
+ */
232
257
  this.isLineSegments2 = true;
233
258
 
234
259
  this.type = 'LineSegments2';
235
260
 
236
- this.resolution = new Vector2();
261
+ this._resolution = new Vector2();
237
262
 
238
263
  }
239
264
 
240
- // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
241
-
265
+ /**
266
+ * Computes an array of distance values which are necessary for rendering dashed lines.
267
+ * For each vertex in the geometry, the method calculates the cumulative length from the
268
+ * current point to the very beginning of the line.
269
+ *
270
+ * @return {LineSegments2} A reference to this instance.
271
+ */
242
272
  computeLineDistances() {
243
273
 
274
+ // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
275
+
244
276
  const geometry = this.geometry;
245
277
 
246
278
  const instanceStart = geometry.attributes.instanceStart;
@@ -269,10 +301,16 @@ class LineSegments2 extends Mesh {
269
301
  onBeforeRender( renderer ) {
270
302
 
271
303
  renderer.getViewport( _viewport );
272
- this.resolution.set( _viewport.z, _viewport.w );
304
+ this._resolution.set( _viewport.z, _viewport.w );
273
305
 
274
306
  }
275
307
 
308
+ /**
309
+ * Computes intersection points between a casted ray and this instance.
310
+ *
311
+ * @param {Raycaster} raycaster - The raycaster.
312
+ * @param {Array<Object>} intersects - The target array that holds the intersection points.
313
+ */
276
314
  raycast( raycaster, intersects ) {
277
315
 
278
316
  const worldUnits = this.material.worldUnits;
@@ -312,7 +350,7 @@ class LineSegments2 extends Mesh {
312
350
  } else {
313
351
 
314
352
  const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );
315
- sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, this.resolution );
353
+ sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, this._resolution );
316
354
 
317
355
  }
318
356
 
@@ -342,7 +380,7 @@ class LineSegments2 extends Mesh {
342
380
  } else {
343
381
 
344
382
  const distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );
345
- boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, this.resolution );
383
+ boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, this._resolution );
346
384
 
347
385
  }
348
386
 
@@ -11,22 +11,50 @@ import { LineSegmentsGeometry } from '../../lines/LineSegmentsGeometry.js';
11
11
  const _start = new Vector3();
12
12
  const _end = new Vector3();
13
13
 
14
+ /**
15
+ * A class for creating wireframes based on wide lines.
16
+ *
17
+ * This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
18
+ * import the class from `lines/Wireframe.js`.
19
+ *
20
+ * @augments Mesh
21
+ */
14
22
  class Wireframe extends Mesh {
15
23
 
24
+ /**
25
+ * Constructs a new wireframe.
26
+ *
27
+ * @param {LineSegmentsGeometry} [geometry] - The line geometry.
28
+ * @param {Line2NodeMaterial} [material] - The line material.
29
+ */
16
30
  constructor( geometry = new LineSegmentsGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
17
31
 
18
32
  super( geometry, material );
19
33
 
34
+ /**
35
+ * This flag can be used for type testing.
36
+ *
37
+ * @type {boolean}
38
+ * @readonly
39
+ * @default true
40
+ */
20
41
  this.isWireframe = true;
21
42
 
22
43
  this.type = 'Wireframe';
23
44
 
24
45
  }
25
46
 
26
- // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
27
-
47
+ /**
48
+ * Computes an array of distance values which are necessary for rendering dashed lines.
49
+ * For each vertex in the geometry, the method calculates the cumulative length from the
50
+ * current point to the very beginning of the line.
51
+ *
52
+ * @return {Wireframe} A reference to this instance.
53
+ */
28
54
  computeLineDistances() {
29
55
 
56
+ // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
57
+
30
58
  const geometry = this.geometry;
31
59
 
32
60
  const instanceStart = geometry.attributes.instanceStart;