super-three 0.173.5 → 0.175.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (832) hide show
  1. package/build/three.cjs +21993 -1359
  2. package/build/three.core.js +21129 -1188
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +835 -142
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19493 -17617
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19477 -17617
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +144 -42
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +194 -71
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +74 -30
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +51 -5
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +71 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +222 -9
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +87 -19
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +56 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +90 -70
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +75 -2
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +134 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +268 -134
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +185 -9
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -2,14 +2,45 @@ import { BufferGeometry } from '../core/BufferGeometry.js';
2
2
  import { Float32BufferAttribute } from '../core/BufferAttribute.js';
3
3
  import { Vector3 } from '../math/Vector3.js';
4
4
 
5
+ /**
6
+ * A geometry class for a rectangular cuboid with a given width, height, and depth.
7
+ * On creation, the cuboid is centred on the origin, with each edge parallel to one
8
+ * of the axes.
9
+ *
10
+ * ```js
11
+ * const geometry = new THREE.BoxGeometry( 1, 1, 1 );
12
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
13
+ * const cube = new THREE.Mesh( geometry, material );
14
+ * scene.add( cube );
15
+ * ```
16
+ *
17
+ * @augments BufferGeometry
18
+ */
5
19
  class BoxGeometry extends BufferGeometry {
6
20
 
21
+ /**
22
+ * Constructs a new box geometry.
23
+ *
24
+ * @param {number} [width=1] - The width. That is, the length of the edges parallel to the X axis.
25
+ * @param {number} [height=1] - The height. That is, the length of the edges parallel to the Y axis.
26
+ * @param {number} [depth=1] - The depth. That is, the length of the edges parallel to the Z axis.
27
+ * @param {number} [widthSegments=1] - Number of segmented rectangular faces along the width of the sides.
28
+ * @param {number} [heightSegments=1] - Number of segmented rectangular faces along the height of the sides.
29
+ * @param {number} [depthSegments=1] - Number of segmented rectangular faces along the depth of the sides.
30
+ */
7
31
  constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {
8
32
 
9
33
  super();
10
34
 
11
35
  this.type = 'BoxGeometry';
12
36
 
37
+ /**
38
+ * Holds the constructor parameters that have been
39
+ * used to generate the geometry. Any modification
40
+ * after instantiation does not change the geometry.
41
+ *
42
+ * @type {Object}
43
+ */
13
44
  this.parameters = {
14
45
  width: width,
15
46
  height: height,
@@ -169,6 +200,13 @@ class BoxGeometry extends BufferGeometry {
169
200
 
170
201
  }
171
202
 
203
+ /**
204
+ * Factory method for creating an instance of this class from the given
205
+ * JSON object.
206
+ *
207
+ * @param {Object} data - A JSON object representing the serialized geometry.
208
+ * @return {BoxGeometry} A new instance.
209
+ */
172
210
  static fromJSON( data ) {
173
211
 
174
212
  return new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );
@@ -1,8 +1,28 @@
1
1
  import { Path } from '../extras/core/Path.js';
2
2
  import { LatheGeometry } from './LatheGeometry.js';
3
3
 
4
+ /**
5
+ * A geometry class for a capsule with given radii and height. It is constructed using a lathe.
6
+ *
7
+ * ```js
8
+ * const geometry = new THREE.CapsuleGeometry( 1, 1, 4, 8 );
9
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
10
+ * const capsule = new THREE.Mesh( geometry, material );
11
+ * scene.add( capsule );
12
+ * ```
13
+ *
14
+ * @augments LatheGeometry
15
+ */
4
16
  class CapsuleGeometry extends LatheGeometry {
5
17
 
18
+ /**
19
+ * Constructs a new capsule geometry.
20
+ *
21
+ * @param {number} [radius=1] - Radius of the capsule.
22
+ * @param {number} [length=1] - Length of the middle section.
23
+ * @param {number} [capSegments=4] - Number of curve segments used to build the caps.
24
+ * @param {number} [radialSegments=8] - Number of segmented faces around the circumference of the capsule.
25
+ */
6
26
  constructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {
7
27
 
8
28
  const path = new Path();
@@ -13,6 +33,13 @@ class CapsuleGeometry extends LatheGeometry {
13
33
 
14
34
  this.type = 'CapsuleGeometry';
15
35
 
36
+ /**
37
+ * Holds the constructor parameters that have been
38
+ * used to generate the geometry. Any modification
39
+ * after instantiation does not change the geometry.
40
+ *
41
+ * @type {Object}
42
+ */
16
43
  this.parameters = {
17
44
  radius: radius,
18
45
  length: length,
@@ -22,6 +49,13 @@ class CapsuleGeometry extends LatheGeometry {
22
49
 
23
50
  }
24
51
 
52
+ /**
53
+ * Factory method for creating an instance of this class from the given
54
+ * JSON object.
55
+ *
56
+ * @param {Object} data - A JSON object representing the serialized geometry.
57
+ * @return {CapsuleGeometry} A new instance.
58
+ */
25
59
  static fromJSON( data ) {
26
60
 
27
61
  return new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );
@@ -3,14 +3,47 @@ import { Float32BufferAttribute } from '../core/BufferAttribute.js';
3
3
  import { Vector3 } from '../math/Vector3.js';
4
4
  import { Vector2 } from '../math/Vector2.js';
5
5
 
6
+ /**
7
+ * A simple shape of Euclidean geometry. It is constructed from a
8
+ * number of triangular segments that are oriented around a central point and
9
+ * extend as far out as a given radius. It is built counter-clockwise from a
10
+ * start angle and a given central angle. It can also be used to create
11
+ * regular polygons, where the number of segments determines the number of
12
+ * sides.
13
+ *
14
+ * ```js
15
+ * const geometry = new THREE.CircleGeometry( 5, 32 );
16
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
17
+ * const circle = new THREE.Mesh( geometry, material );
18
+ * scene.add( circle )
19
+ * ```
20
+ *
21
+ * @augments BufferGeometry
22
+ */
6
23
  class CircleGeometry extends BufferGeometry {
7
24
 
25
+ /**
26
+ * Constructs a new circle geometry.
27
+ *
28
+ * @param {number} [radius=1] - Radius of the circle.
29
+ * @param {number} [segments=32] - Number of segments (triangles), minimum = `3`.
30
+ * @param {number} [thetaStart=0] - Start angle for first segment in radians.
31
+ * @param {number} [thetaLength=Math.PI*2] - The central angle, often called theta,
32
+ * of the circular sector in radians. The default value results in a complete circle.
33
+ */
8
34
  constructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {
9
35
 
10
36
  super();
11
37
 
12
38
  this.type = 'CircleGeometry';
13
39
 
40
+ /**
41
+ * Holds the constructor parameters that have been
42
+ * used to generate the geometry. Any modification
43
+ * after instantiation does not change the geometry.
44
+ *
45
+ * @type {Object}
46
+ */
14
47
  this.parameters = {
15
48
  radius: radius,
16
49
  segments: segments,
@@ -89,6 +122,13 @@ class CircleGeometry extends BufferGeometry {
89
122
 
90
123
  }
91
124
 
125
+ /**
126
+ * Factory method for creating an instance of this class from the given
127
+ * JSON object.
128
+ *
129
+ * @param {Object} data - A JSON object representing the serialized geometry.
130
+ * @return {CircleGeometry} A new instance.
131
+ */
92
132
  static fromJSON( data ) {
93
133
 
94
134
  return new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );
@@ -1,13 +1,44 @@
1
1
  import { CylinderGeometry } from './CylinderGeometry.js';
2
2
 
3
+ /**
4
+ * A geometry class for representing a cone.
5
+ *
6
+ * ```js
7
+ * const geometry = new THREE.ConeGeometry( 5, 20, 32 );
8
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
9
+ * const cone = new THREE.Mesh(geometry, material );
10
+ * scene.add( cone );
11
+ * ```
12
+ *
13
+ * @augments CylinderGeometry
14
+ */
3
15
  class ConeGeometry extends CylinderGeometry {
4
16
 
17
+ /**
18
+ * Constructs a new cone geometry.
19
+ *
20
+ * @param {number} [radius=1] - Radius of the cone base.
21
+ * @param {number} [height=1] - Height of the cone.
22
+ * @param {number} [radialSegments=32] - Number of segmented faces around the circumference of the cone.
23
+ * @param {number} [heightSegments=1] - Number of rows of faces along the height of the cone.
24
+ * @param {boolean} [openEnded=false] - Whether the base of the cone is open or capped.
25
+ * @param {number} [thetaStart=0] - Start angle for first segment, in radians.
26
+ * @param {number} [thetaLength=Math.PI*2] - The central angle, often called theta, of the circular sector, in radians.
27
+ * The default value results in a complete cone.
28
+ */
5
29
  constructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {
6
30
 
7
31
  super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );
8
32
 
9
33
  this.type = 'ConeGeometry';
10
34
 
35
+ /**
36
+ * Holds the constructor parameters that have been
37
+ * used to generate the geometry. Any modification
38
+ * after instantiation does not change the geometry.
39
+ *
40
+ * @type {Object}
41
+ */
11
42
  this.parameters = {
12
43
  radius: radius,
13
44
  height: height,
@@ -20,6 +51,13 @@ class ConeGeometry extends CylinderGeometry {
20
51
 
21
52
  }
22
53
 
54
+ /**
55
+ * Factory method for creating an instance of this class from the given
56
+ * JSON object.
57
+ *
58
+ * @param {Object} data - A JSON object representing the serialized geometry.
59
+ * @return {ConeGeometry} A new instance.
60
+ */
23
61
  static fromJSON( data ) {
24
62
 
25
63
  return new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );
@@ -3,14 +3,46 @@ import { Float32BufferAttribute } from '../core/BufferAttribute.js';
3
3
  import { Vector3 } from '../math/Vector3.js';
4
4
  import { Vector2 } from '../math/Vector2.js';
5
5
 
6
+ /**
7
+ * A geometry class for representing a cylinder.
8
+ *
9
+ * ```js
10
+ * const geometry = new THREE.CylinderGeometry( 5, 5, 20, 32 );
11
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
12
+ * const cylinder = new THREE.Mesh( geometry, material );
13
+ * scene.add( cylinder );
14
+ * ```
15
+ *
16
+ * @augments BufferGeometry
17
+ */
6
18
  class CylinderGeometry extends BufferGeometry {
7
19
 
20
+ /**
21
+ * Constructs a new cylinder geometry.
22
+ *
23
+ * @param {number} [radiusTop=1] - Radius of the cylinder at the top.
24
+ * @param {number} [radiusBottom=1] - Radius of the cylinder at the bottom.
25
+ * @param {number} [height=1] - Height of the cylinder.
26
+ * @param {number} [radialSegments=32] - Number of segmented faces around the circumference of the cylinder.
27
+ * @param {number} [heightSegments=1] - Number of rows of faces along the height of the cylinder.
28
+ * @param {boolean} [openEnded=false] - Whether the base of the cylinder is open or capped.
29
+ * @param {number} [thetaStart=0] - Start angle for first segment, in radians.
30
+ * @param {number} [thetaLength=Math.PI*2] - The central angle, often called theta, of the circular sector, in radians.
31
+ * The default value results in a complete cylinder.
32
+ */
8
33
  constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {
9
34
 
10
35
  super();
11
36
 
12
37
  this.type = 'CylinderGeometry';
13
38
 
39
+ /**
40
+ * Holds the constructor parameters that have been
41
+ * used to generate the geometry. Any modification
42
+ * after instantiation does not change the geometry.
43
+ *
44
+ * @type {Object}
45
+ */
14
46
  this.parameters = {
15
47
  radiusTop: radiusTop,
16
48
  radiusBottom: radiusBottom,
@@ -281,6 +313,13 @@ class CylinderGeometry extends BufferGeometry {
281
313
 
282
314
  }
283
315
 
316
+ /**
317
+ * Factory method for creating an instance of this class from the given
318
+ * JSON object.
319
+ *
320
+ * @param {Object} data - A JSON object representing the serialized geometry.
321
+ * @return {CylinderGeometry} A new instance.
322
+ */
284
323
  static fromJSON( data ) {
285
324
 
286
325
  return new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );
@@ -1,7 +1,25 @@
1
1
  import { PolyhedronGeometry } from './PolyhedronGeometry.js';
2
2
 
3
+ /**
4
+ * A geometry class for representing a dodecahedron.
5
+ *
6
+ * ```js
7
+ * const geometry = new THREE.DodecahedronGeometry();
8
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
9
+ * const dodecahedron = new THREE.Mesh( geometry, material );
10
+ * scene.add( dodecahedron );
11
+ * ```
12
+ *
13
+ * @augments PolyhedronGeometry
14
+ */
3
15
  class DodecahedronGeometry extends PolyhedronGeometry {
4
16
 
17
+ /**
18
+ * Constructs a new dodecahedron geometry.
19
+ *
20
+ * @param {number} [radius=1] - Radius of the dodecahedron.
21
+ * @param {number} [detail=0] - Setting this to a value greater than `0` adds vertices making it no longer a dodecahedron.
22
+ */
5
23
  constructor( radius = 1, detail = 0 ) {
6
24
 
7
25
  const t = ( 1 + Math.sqrt( 5 ) ) / 2;
@@ -47,6 +65,13 @@ class DodecahedronGeometry extends PolyhedronGeometry {
47
65
 
48
66
  this.type = 'DodecahedronGeometry';
49
67
 
68
+ /**
69
+ * Holds the constructor parameters that have been
70
+ * used to generate the geometry. Any modification
71
+ * after instantiation does not change the geometry.
72
+ *
73
+ * @type {Object}
74
+ */
50
75
  this.parameters = {
51
76
  radius: radius,
52
77
  detail: detail
@@ -54,6 +79,13 @@ class DodecahedronGeometry extends PolyhedronGeometry {
54
79
 
55
80
  }
56
81
 
82
+ /**
83
+ * Factory method for creating an instance of this class from the given
84
+ * JSON object.
85
+ *
86
+ * @param {Object} data - A JSON object representing the serialized geometry.
87
+ * @return {DodecahedronGeometry} A new instance.
88
+ */
57
89
  static fromJSON( data ) {
58
90
 
59
91
  return new DodecahedronGeometry( data.radius, data.detail );
@@ -9,14 +9,42 @@ const _v1 = /*@__PURE__*/ new Vector3();
9
9
  const _normal = /*@__PURE__*/ new Vector3();
10
10
  const _triangle = /*@__PURE__*/ new Triangle();
11
11
 
12
+ /**
13
+ * Can be used as a helper object to view the edges of a geometry.
14
+ *
15
+ * ```js
16
+ * const geometry = new THREE.BoxGeometry();
17
+ * const edges = new THREE.EdgesGeometry( geometry );
18
+ * const line = new THREE.LineSegments( edges );
19
+ * scene.add( line );
20
+ * ```
21
+ *
22
+ * Note: It is not yet possible to serialize/deserialize instances of this class.
23
+ *
24
+ * @augments BufferGeometry
25
+ */
12
26
  class EdgesGeometry extends BufferGeometry {
13
27
 
28
+ /**
29
+ * Constructs a new edges geometry.
30
+ *
31
+ * @param {?BufferGeometry} [geometry=null] - The geometry.
32
+ * @param {number} [thresholdAngle=1] - An edge is only rendered if the angle (in degrees)
33
+ * between the face normals of the adjoining faces exceeds this value.
34
+ */
14
35
  constructor( geometry = null, thresholdAngle = 1 ) {
15
36
 
16
37
  super();
17
38
 
18
39
  this.type = 'EdgesGeometry';
19
40
 
41
+ /**
42
+ * Holds the constructor parameters that have been
43
+ * used to generate the geometry. Any modification
44
+ * after instantiation does not change the geometry.
45
+ *
46
+ * @type {Object}
47
+ */
20
48
  this.parameters = {
21
49
  geometry: geometry,
22
50
  thresholdAngle: thresholdAngle
@@ -1,25 +1,3 @@
1
- /**
2
- * Creates extruded geometry from a path shape.
3
- *
4
- * parameters = {
5
- *
6
- * curveSegments: <int>, // number of points on the curves
7
- * steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too
8
- * depth: <float>, // Depth to extrude the shape
9
- *
10
- * bevelEnabled: <bool>, // turn on bevel
11
- * bevelThickness: <float>, // how deep into the original shape bevel goes
12
- * bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel
13
- * bevelOffset: <float>, // how far from shape outline does bevel start
14
- * bevelSegments: <int>, // number of bevel layers
15
- *
16
- * extrudePath: <THREE.Curve> // curve to extrude shape along
17
- *
18
- * UVGenerator: <Object> // object that provides UV generator functions
19
- *
20
- * }
21
- */
22
-
23
1
  import { BufferGeometry } from '../core/BufferGeometry.js';
24
2
  import { Float32BufferAttribute } from '../core/BufferAttribute.js';
25
3
  import * as Curves from '../extras/curves/Curves.js';
@@ -28,14 +6,48 @@ import { Vector3 } from '../math/Vector3.js';
28
6
  import { Shape } from '../extras/core/Shape.js';
29
7
  import { ShapeUtils } from '../extras/ShapeUtils.js';
30
8
 
9
+ /**
10
+ * Creates extruded geometry from a path shape.
11
+ *
12
+ * ```js
13
+ * const length = 12, width = 8;
14
+ *
15
+ * const shape = new THREE.Shape();
16
+ * shape.moveTo( 0,0 );
17
+ * shape.lineTo( 0, width );
18
+ * shape.lineTo( length, width );
19
+ * shape.lineTo( length, 0 );
20
+ * shape.lineTo( 0, 0 );
21
+ *
22
+ * const geometry = new THREE.ExtrudeGeometry( shape );
23
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
24
+ * const mesh = new THREE.Mesh( geometry, material ) ;
25
+ * scene.add( mesh );
26
+ * ```
27
+ *
28
+ * @augments BufferGeometry
29
+ */
31
30
  class ExtrudeGeometry extends BufferGeometry {
32
31
 
32
+ /**
33
+ * Constructs a new extrude geometry.
34
+ *
35
+ * @param {Shape|Array<Shape>} [shapes] - A shape or an array of shapes.
36
+ * @param {ExtrudeGeometry~Options} [options] - The extrude settings.
37
+ */
33
38
  constructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {
34
39
 
35
40
  super();
36
41
 
37
42
  this.type = 'ExtrudeGeometry';
38
43
 
44
+ /**
45
+ * Holds the constructor parameters that have been
46
+ * used to generate the geometry. Any modification
47
+ * after instantiation does not change the geometry.
48
+ *
49
+ * @type {Object}
50
+ */
39
51
  this.parameters = {
40
52
  shapes: shapes,
41
53
  options: options
@@ -150,14 +162,53 @@ class ExtrudeGeometry extends BufferGeometry {
150
162
 
151
163
  }
152
164
 
165
+ /**Merges index-adjacent points that are within a threshold distance of each other. Array is modified in-place. Threshold distance is empirical, and scaled based on the magnitude of point coordinates.
166
+ * @param {Array<Vector2>} points
167
+ */
168
+ function mergeOverlappingPoints( points ) {
169
+
170
+ const THRESHOLD = 1e-10;
171
+ const THRESHOLD_SQ = THRESHOLD * THRESHOLD;
172
+ let prevPos = points[ 0 ];
173
+ for ( let i = 1; i <= points.length; i ++ ) {
174
+
175
+ const currentIndex = i % points.length;
176
+ const currentPos = points[ currentIndex ];
177
+ const dx = currentPos.x - prevPos.x;
178
+ const dy = currentPos.y - prevPos.y;
179
+ const distSq = dx * dx + dy * dy;
180
+
181
+ const scalingFactorSqrt = Math.max(
182
+ Math.abs( currentPos.x ),
183
+ Math.abs( currentPos.y ),
184
+ Math.abs( prevPos.x ),
185
+ Math.abs( prevPos.y )
186
+ );
187
+ const thesholdSqScaled = THRESHOLD_SQ * scalingFactorSqrt * scalingFactorSqrt;
188
+ if ( distSq <= thesholdSqScaled ) {
189
+
190
+ points.splice( currentIndex, 1 );
191
+ i --;
192
+ continue;
193
+
194
+ }
195
+
196
+ prevPos = currentPos;
197
+
198
+ }
199
+
200
+ }
201
+
202
+ mergeOverlappingPoints( vertices );
203
+ holes.forEach( mergeOverlappingPoints );
153
204
 
154
- const faces = ShapeUtils.triangulateShape( vertices, holes );
205
+ const numHoles = holes.length;
155
206
 
156
207
  /* Vertices */
157
208
 
158
209
  const contour = vertices; // vertices has all points but contour has only points of circumference
159
210
 
160
- for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
211
+ for ( let h = 0; h < numHoles; h ++ ) {
161
212
 
162
213
  const ahole = holes[ h ];
163
214
 
@@ -174,7 +225,7 @@ class ExtrudeGeometry extends BufferGeometry {
174
225
 
175
226
  }
176
227
 
177
- const vlen = vertices.length, flen = faces.length;
228
+ const vlen = vertices.length;
178
229
 
179
230
 
180
231
  // Find directions for point movement
@@ -321,7 +372,7 @@ class ExtrudeGeometry extends BufferGeometry {
321
372
  const holesMovements = [];
322
373
  let oneHoleMovements, verticesMovements = contourMovements.concat();
323
374
 
324
- for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
375
+ for ( let h = 0, hl = numHoles; h < hl; h ++ ) {
325
376
 
326
377
  const ahole = holes[ h ];
327
378
 
@@ -342,6 +393,8 @@ class ExtrudeGeometry extends BufferGeometry {
342
393
 
343
394
  }
344
395
 
396
+ const contractedContourVertices = [];
397
+ const expandedHoleVertices = [];
345
398
 
346
399
  // Loop bevelSegments, 1 for the front, 1 for the back
347
400
 
@@ -360,28 +413,36 @@ class ExtrudeGeometry extends BufferGeometry {
360
413
  const vert = scalePt2( contour[ i ], contourMovements[ i ], bs );
361
414
 
362
415
  v( vert.x, vert.y, - z );
416
+ if ( t == 0 ) contractedContourVertices.push( vert );
363
417
 
364
418
  }
365
419
 
366
420
  // expand holes
367
421
 
368
- for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
422
+ for ( let h = 0, hl = numHoles; h < hl; h ++ ) {
369
423
 
370
424
  const ahole = holes[ h ];
371
425
  oneHoleMovements = holesMovements[ h ];
372
-
426
+ const oneHoleVertices = [];
373
427
  for ( let i = 0, il = ahole.length; i < il; i ++ ) {
374
428
 
375
429
  const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
376
430
 
377
431
  v( vert.x, vert.y, - z );
432
+ if ( t == 0 ) oneHoleVertices.push( vert );
378
433
 
379
434
  }
380
435
 
436
+ if ( t == 0 ) expandedHoleVertices.push( oneHoleVertices );
437
+
381
438
  }
382
439
 
383
440
  }
384
441
 
442
+ const faces = ShapeUtils.triangulateShape( contractedContourVertices, expandedHoleVertices );
443
+
444
+ const flen = faces.length;
445
+
385
446
  const bs = bevelSize + bevelOffset;
386
447
 
387
448
  // Back facing vertices
@@ -698,6 +759,14 @@ class ExtrudeGeometry extends BufferGeometry {
698
759
 
699
760
  }
700
761
 
762
+ /**
763
+ * Factory method for creating an instance of this class from the given
764
+ * JSON object.
765
+ *
766
+ * @param {Object} data - A JSON object representing the serialized geometry.
767
+ * @param {Array<Shape>} shapes - An array of shapes.
768
+ * @return {ExtrudeGeometry} A new instance.
769
+ */
701
770
  static fromJSON( data, shapes ) {
702
771
 
703
772
  const geometryShapes = [];
@@ -810,5 +879,20 @@ function toJSON( shapes, options, data ) {
810
879
 
811
880
  }
812
881
 
882
+ /**
883
+ * Represents the `options` type of the geometry's constructor.
884
+ *
885
+ * @typedef {Object} ExtrudeGeometry~Options
886
+ * @property {number} [curveSegments=12] - Number of points on the curves.
887
+ * @property {number} [steps=1] - Number of points used for subdividing segments along the depth of the extruded spline.
888
+ * @property {number} [depth=1] - Depth to extrude the shape.
889
+ * @property {boolean} [bevelEnabled=true] - Whether to beveling to the shape or not.
890
+ * @property {number} [bevelThickness=0.2] - How deep into the original shape the bevel goes.
891
+ * @property {number} [bevelSize=bevelThickness-0.1] - Distance from the shape outline that the bevel extends.
892
+ * @property {number} [bevelOffset=0] - Distance from the shape outline that the bevel starts.
893
+ * @property {number} [bevelSegments=3] - Number of bevel layers.
894
+ * @property {?Curve} [extrudePath=null] - A 3D spline path along which the shape should be extruded. Bevels not supported for path extrusion.
895
+ * @property {Object} [UVGenerator] - An object that provides UV generator functions for custom UV generation.
896
+ **/
813
897
 
814
898
  export { ExtrudeGeometry };
@@ -1,7 +1,25 @@
1
1
  import { PolyhedronGeometry } from './PolyhedronGeometry.js';
2
2
 
3
+ /**
4
+ * A geometry class for representing an icosahedron.
5
+ *
6
+ * ```js
7
+ * const geometry = new THREE.IcosahedronGeometry();
8
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
9
+ * const icosahedron = new THREE.Mesh( geometry, material );
10
+ * scene.add( icosahedron );
11
+ * ```
12
+ *
13
+ * @augments PolyhedronGeometry
14
+ */
3
15
  class IcosahedronGeometry extends PolyhedronGeometry {
4
16
 
17
+ /**
18
+ * Constructs a new icosahedron geometry.
19
+ *
20
+ * @param {number} [radius=1] - Radius of the icosahedron.
21
+ * @param {number} [detail=0] - Setting this to a value greater than `0` adds vertices making it no longer a icosahedron.
22
+ */
5
23
  constructor( radius = 1, detail = 0 ) {
6
24
 
7
25
  const t = ( 1 + Math.sqrt( 5 ) ) / 2;
@@ -23,6 +41,13 @@ class IcosahedronGeometry extends PolyhedronGeometry {
23
41
 
24
42
  this.type = 'IcosahedronGeometry';
25
43
 
44
+ /**
45
+ * Holds the constructor parameters that have been
46
+ * used to generate the geometry. Any modification
47
+ * after instantiation does not change the geometry.
48
+ *
49
+ * @type {Object}
50
+ */
26
51
  this.parameters = {
27
52
  radius: radius,
28
53
  detail: detail
@@ -30,6 +55,13 @@ class IcosahedronGeometry extends PolyhedronGeometry {
30
55
 
31
56
  }
32
57
 
58
+ /**
59
+ * Factory method for creating an instance of this class from the given
60
+ * JSON object.
61
+ *
62
+ * @param {Object} data - A JSON object representing the serialized geometry.
63
+ * @return {IcosahedronGeometry} A new instance.
64
+ */
33
65
  static fromJSON( data ) {
34
66
 
35
67
  return new IcosahedronGeometry( data.radius, data.detail );