@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
@@ -81,19 +81,67 @@ function lineToLineClosestPoints( line1, line2, target1 = null, target2 = null )
81
81
 
82
82
  }
83
83
 
84
+ /**
85
+ * An octree is a hierarchical tree data structure used to partition a three-dimensional
86
+ * space by recursively subdividing it into eight octants.
87
+ *
88
+ * This particular implementation can have up to sixteen levels and stores up to eight triangles
89
+ * in leaf nodes.
90
+ *
91
+ * `Octree` can be used in games to compute collision between the game world and colliders from
92
+ * the player or other dynamic 3D objects.
93
+ *
94
+ *
95
+ * ```js
96
+ * const octree = new Octree().fromGraphNode( scene );
97
+ * const result = octree.capsuleIntersect( playerCollider ); // collision detection
98
+ * ```
99
+ */
84
100
  class Octree {
85
101
 
102
+ /**
103
+ * Constructs a new Octree.
104
+ *
105
+ * @param {Box3} [box] - The base box with enclose the entire Octree.
106
+ */
86
107
  constructor( box ) {
87
108
 
109
+ /**
110
+ * The base box with enclose the entire Octree.
111
+ *
112
+ * @type {Box3}
113
+ */
88
114
  this.box = box;
115
+
116
+ /**
117
+ * The bounds of the Octree. Compared to {@link Octree#box}, no
118
+ * margin is applied.
119
+ *
120
+ * @type {Box3}
121
+ */
89
122
  this.bounds = new Box3();
90
123
 
124
+ /**
125
+ * Can by used for layers configuration for refine testing.
126
+ *
127
+ * @type {Layers}
128
+ */
129
+ this.layers = new Layers();
130
+
131
+ // private
132
+
91
133
  this.subTrees = [];
92
134
  this.triangles = [];
93
- this.layers = new Layers();
94
135
 
95
136
  }
96
137
 
138
+ /**
139
+ * Adds the given triangle to the Octree. The triangle vertices are clamped if they exceed
140
+ * the bounds of the Octree.
141
+ *
142
+ * @param {Triangle} triangle - The triangle to add.
143
+ * @return {Octree} A reference to this Octree.
144
+ */
97
145
  addTriangle( triangle ) {
98
146
 
99
147
  this.bounds.min.x = Math.min( this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x );
@@ -109,6 +157,11 @@ class Octree {
109
157
 
110
158
  }
111
159
 
160
+ /**
161
+ * Prepares {@link Octree#box} for the build.
162
+ *
163
+ * @return {Octree} A reference to this Octree.
164
+ */
112
165
  calcBox() {
113
166
 
114
167
  this.box = this.bounds.clone();
@@ -122,6 +175,13 @@ class Octree {
122
175
 
123
176
  }
124
177
 
178
+ /**
179
+ * Splits the Octree. This method is used recursively when
180
+ * building the Octree.
181
+ *
182
+ * @param {number} level - The current level.
183
+ * @return {Octree} A reference to this Octree.
184
+ */
125
185
  split( level ) {
126
186
 
127
187
  if ( ! this.box ) return;
@@ -187,6 +247,11 @@ class Octree {
187
247
 
188
248
  }
189
249
 
250
+ /**
251
+ * Builds the Octree.
252
+ *
253
+ * @return {Octree} A reference to this Octree.
254
+ */
190
255
  build() {
191
256
 
192
257
  this.calcBox();
@@ -196,6 +261,12 @@ class Octree {
196
261
 
197
262
  }
198
263
 
264
+ /**
265
+ * Computes the triangles that potentially intersect with the given ray.
266
+ *
267
+ * @param {Ray} ray - The ray to test.
268
+ * @param {Array<Triangle>} triangles - The target array that holds the triangles.
269
+ */
199
270
  getRayTriangles( ray, triangles ) {
200
271
 
201
272
  for ( let i = 0; i < this.subTrees.length; i ++ ) {
@@ -219,10 +290,16 @@ class Octree {
219
290
 
220
291
  }
221
292
 
222
- return triangles;
223
-
224
293
  }
225
294
 
295
+ /**
296
+ * Computes the intersection between the given capsule and triangle.
297
+ *
298
+ * @param {Capsule} capsule - The capsule to test.
299
+ * @param {Triangle} triangle - The triangle to test.
300
+ * @return {Object|false} The intersection object. If no intersection
301
+ * is detected, the method returns `false`.
302
+ */
226
303
  triangleCapsuleIntersect( capsule, triangle ) {
227
304
 
228
305
  triangle.getPlane( _plane );
@@ -277,6 +354,14 @@ class Octree {
277
354
 
278
355
  }
279
356
 
357
+ /**
358
+ * Computes the intersection between the given sphere and triangle.
359
+ *
360
+ * @param {Sphere} sphere - The sphere to test.
361
+ * @param {Triangle} triangle - The triangle to test.
362
+ * @return {Object|false} The intersection object. If no intersection
363
+ * is detected, the method returns `false`.
364
+ */
280
365
  triangleSphereIntersect( sphere, triangle ) {
281
366
 
282
367
  triangle.getPlane( _plane );
@@ -319,6 +404,12 @@ class Octree {
319
404
 
320
405
  }
321
406
 
407
+ /**
408
+ * Computes the triangles that potentially intersect with the given bounding sphere.
409
+ *
410
+ * @param {Sphere} sphere - The sphere to test.
411
+ * @param {Array<Triangle>} triangles - The target array that holds the triangles.
412
+ */
322
413
  getSphereTriangles( sphere, triangles ) {
323
414
 
324
415
  for ( let i = 0; i < this.subTrees.length; i ++ ) {
@@ -345,6 +436,12 @@ class Octree {
345
436
 
346
437
  }
347
438
 
439
+ /**
440
+ * Computes the triangles that potentially intersect with the given capsule.
441
+ *
442
+ * @param {Capsule} capsule - The capsule to test.
443
+ * @param {Array<Triangle>} triangles - The target array that holds the triangles.
444
+ */
348
445
  getCapsuleTriangles( capsule, triangles ) {
349
446
 
350
447
  for ( let i = 0; i < this.subTrees.length; i ++ ) {
@@ -371,6 +468,13 @@ class Octree {
371
468
 
372
469
  }
373
470
 
471
+ /**
472
+ * Performs a bounding sphere intersection test with this Octree.
473
+ *
474
+ * @param {Sphere} sphere - The bounding sphere to test.
475
+ * @return {Object|boolean} The intersection object. If no intersection
476
+ * is detected, the method returns `false`.
477
+ */
374
478
  sphereIntersect( sphere ) {
375
479
 
376
480
  _sphere.copy( sphere );
@@ -405,6 +509,13 @@ class Octree {
405
509
 
406
510
  }
407
511
 
512
+ /**
513
+ * Performs a capsule intersection test with this Octree.
514
+ *
515
+ * @param {Capsule} capsule - The capsule to test.
516
+ * @return {Object|boolean} The intersection object. If no intersection
517
+ * is detected, the method returns `false`.
518
+ */
408
519
  capsuleIntersect( capsule ) {
409
520
 
410
521
  _capsule.copy( capsule );
@@ -439,10 +550,15 @@ class Octree {
439
550
 
440
551
  }
441
552
 
553
+ /**
554
+ * Performs a ray intersection test with this Octree.
555
+ *
556
+ * @param {Ray} ray - The ray to test.
557
+ * @return {Object|boolean} The nearest intersection object. If no intersection
558
+ * is detected, the method returns `false`.
559
+ */
442
560
  rayIntersect( ray ) {
443
561
 
444
- if ( ray.direction.length() === 0 ) return;
445
-
446
562
  const triangles = [];
447
563
  let triangle, position, distance = 1e100;
448
564
 
@@ -472,6 +588,12 @@ class Octree {
472
588
 
473
589
  }
474
590
 
591
+ /**
592
+ * Constructs the Octree from the given 3D object.
593
+ *
594
+ * @param {Object3D} group - The scene graph node.
595
+ * @return {Octree} A reference to this Octree.
596
+ */
475
597
  fromGraphNode( group ) {
476
598
 
477
599
  group.updateWorldMatrix( true, true );
@@ -529,6 +651,11 @@ class Octree {
529
651
 
530
652
  }
531
653
 
654
+ /**
655
+ * Clears the Octree by making it empty.
656
+ *
657
+ * @return {Octree} A reference to this Octree.
658
+ */
532
659
  clear() {
533
660
 
534
661
  this.box = null;
@@ -1,17 +1,17 @@
1
- // Ported from Stefan Gustavson's java implementation
2
- // http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
3
- // Read Stefan's excellent paper for details on how this code works.
4
- //
5
- // Sean McCullough banksean@gmail.com
6
- //
7
- // Added 4D noise
8
-
9
1
  /**
10
- * You can pass in a random number generator object if you like.
11
- * It is assumed to have a random() method.
2
+ * A utility class providing noise functions.
3
+ *
4
+ * The code is based on [Simplex noise demystified]{@link https://web.archive.org/web/20210210162332/http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf}
5
+ * by Stefan Gustavson, 2005.
12
6
  */
13
7
  class SimplexNoise {
14
8
 
9
+ /**
10
+ * Constructs a new simplex noise object.
11
+ *
12
+ * @param {Object} [r=Math] - A math utility class that holds a `random()` method. This makes it
13
+ * possible to pass in custom random number generator.
14
+ */
15
15
  constructor( r = Math ) {
16
16
 
17
17
  this.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],
@@ -58,24 +58,13 @@ class SimplexNoise {
58
58
 
59
59
  }
60
60
 
61
- dot( g, x, y ) {
62
-
63
- return g[ 0 ] * x + g[ 1 ] * y;
64
-
65
- }
66
-
67
- dot3( g, x, y, z ) {
68
-
69
- return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;
70
-
71
- }
72
-
73
- dot4( g, x, y, z, w ) {
74
-
75
- return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;
76
-
77
- }
78
-
61
+ /**
62
+ * A 2D simplex noise method.
63
+ *
64
+ * @param {number} xin - The x coordinate.
65
+ * @param {number} yin - The y coordinate.
66
+ * @return {number} The noise value.
67
+ */
79
68
  noise( xin, yin ) {
80
69
 
81
70
  let n0; // Noise contributions from the three corners
@@ -129,7 +118,7 @@ class SimplexNoise {
129
118
  else {
130
119
 
131
120
  t0 *= t0;
132
- n0 = t0 * t0 * this.dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient
121
+ n0 = t0 * t0 * this._dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient
133
122
 
134
123
  }
135
124
 
@@ -138,7 +127,7 @@ class SimplexNoise {
138
127
  else {
139
128
 
140
129
  t1 *= t1;
141
- n1 = t1 * t1 * this.dot( this.grad3[ gi1 ], x1, y1 );
130
+ n1 = t1 * t1 * this._dot( this.grad3[ gi1 ], x1, y1 );
142
131
 
143
132
  }
144
133
 
@@ -147,7 +136,7 @@ class SimplexNoise {
147
136
  else {
148
137
 
149
138
  t2 *= t2;
150
- n2 = t2 * t2 * this.dot( this.grad3[ gi2 ], x2, y2 );
139
+ n2 = t2 * t2 * this._dot( this.grad3[ gi2 ], x2, y2 );
151
140
 
152
141
  }
153
142
 
@@ -157,7 +146,14 @@ class SimplexNoise {
157
146
 
158
147
  }
159
148
 
160
- // 3D simplex noise
149
+ /**
150
+ * A 3D simplex noise method.
151
+ *
152
+ * @param {number} xin - The x coordinate.
153
+ * @param {number} yin - The y coordinate.
154
+ * @param {number} zin - The z coordinate.
155
+ * @return {number} The noise value.
156
+ */
161
157
  noise3d( xin, yin, zin ) {
162
158
 
163
159
  let n0; // Noise contributions from the four corners
@@ -257,7 +253,7 @@ class SimplexNoise {
257
253
  else {
258
254
 
259
255
  t0 *= t0;
260
- n0 = t0 * t0 * this.dot3( this.grad3[ gi0 ], x0, y0, z0 );
256
+ n0 = t0 * t0 * this._dot3( this.grad3[ gi0 ], x0, y0, z0 );
261
257
 
262
258
  }
263
259
 
@@ -266,7 +262,7 @@ class SimplexNoise {
266
262
  else {
267
263
 
268
264
  t1 *= t1;
269
- n1 = t1 * t1 * this.dot3( this.grad3[ gi1 ], x1, y1, z1 );
265
+ n1 = t1 * t1 * this._dot3( this.grad3[ gi1 ], x1, y1, z1 );
270
266
 
271
267
  }
272
268
 
@@ -275,7 +271,7 @@ class SimplexNoise {
275
271
  else {
276
272
 
277
273
  t2 *= t2;
278
- n2 = t2 * t2 * this.dot3( this.grad3[ gi2 ], x2, y2, z2 );
274
+ n2 = t2 * t2 * this._dot3( this.grad3[ gi2 ], x2, y2, z2 );
279
275
 
280
276
  }
281
277
 
@@ -284,7 +280,7 @@ class SimplexNoise {
284
280
  else {
285
281
 
286
282
  t3 *= t3;
287
- n3 = t3 * t3 * this.dot3( this.grad3[ gi3 ], x3, y3, z3 );
283
+ n3 = t3 * t3 * this._dot3( this.grad3[ gi3 ], x3, y3, z3 );
288
284
 
289
285
  }
290
286
 
@@ -294,7 +290,15 @@ class SimplexNoise {
294
290
 
295
291
  }
296
292
 
297
- // 4D simplex noise
293
+ /**
294
+ * A 4D simplex noise method.
295
+ *
296
+ * @param {number} x - The x coordinate.
297
+ * @param {number} y - The y coordinate.
298
+ * @param {number} z - The z coordinate.
299
+ * @param {number} w - The w coordinate.
300
+ * @return {number} The noise value.
301
+ */
298
302
  noise4d( x, y, z, w ) {
299
303
 
300
304
  // For faster and easier lookups
@@ -394,7 +398,7 @@ class SimplexNoise {
394
398
  else {
395
399
 
396
400
  t0 *= t0;
397
- n0 = t0 * t0 * this.dot4( grad4[ gi0 ], x0, y0, z0, w0 );
401
+ n0 = t0 * t0 * this._dot4( grad4[ gi0 ], x0, y0, z0, w0 );
398
402
 
399
403
  }
400
404
 
@@ -403,7 +407,7 @@ class SimplexNoise {
403
407
  else {
404
408
 
405
409
  t1 *= t1;
406
- n1 = t1 * t1 * this.dot4( grad4[ gi1 ], x1, y1, z1, w1 );
410
+ n1 = t1 * t1 * this._dot4( grad4[ gi1 ], x1, y1, z1, w1 );
407
411
 
408
412
  }
409
413
 
@@ -412,7 +416,7 @@ class SimplexNoise {
412
416
  else {
413
417
 
414
418
  t2 *= t2;
415
- n2 = t2 * t2 * this.dot4( grad4[ gi2 ], x2, y2, z2, w2 );
419
+ n2 = t2 * t2 * this._dot4( grad4[ gi2 ], x2, y2, z2, w2 );
416
420
 
417
421
  }
418
422
 
@@ -421,7 +425,7 @@ class SimplexNoise {
421
425
  else {
422
426
 
423
427
  t3 *= t3;
424
- n3 = t3 * t3 * this.dot4( grad4[ gi3 ], x3, y3, z3, w3 );
428
+ n3 = t3 * t3 * this._dot4( grad4[ gi3 ], x3, y3, z3, w3 );
425
429
 
426
430
  }
427
431
 
@@ -430,7 +434,7 @@ class SimplexNoise {
430
434
  else {
431
435
 
432
436
  t4 *= t4;
433
- n4 = t4 * t4 * this.dot4( grad4[ gi4 ], x4, y4, z4, w4 );
437
+ n4 = t4 * t4 * this._dot4( grad4[ gi4 ], x4, y4, z4, w4 );
434
438
 
435
439
  }
436
440
 
@@ -439,6 +443,26 @@ class SimplexNoise {
439
443
 
440
444
  }
441
445
 
446
+ // private
447
+
448
+ _dot( g, x, y ) {
449
+
450
+ return g[ 0 ] * x + g[ 1 ] * y;
451
+
452
+ }
453
+
454
+ _dot3( g, x, y, z ) {
455
+
456
+ return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;
457
+
458
+ }
459
+
460
+ _dot4( g, x, y, z, w ) {
461
+
462
+ return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;
463
+
464
+ }
465
+
442
466
  }
443
467
 
444
468
  export { SimplexNoise };
@@ -6,39 +6,33 @@ import {
6
6
  } from 'three';
7
7
  import { ConvexGeometry } from '../geometries/ConvexGeometry.js';
8
8
 
9
+ const _v1 = new Vector3();
10
+
9
11
  /**
10
- * @fileoverview This class can be used to subdivide a convex Geometry object into pieces.
11
- *
12
- * Usage:
12
+ * This class can be used to subdivide a convex Geometry object into pieces.
13
13
  *
14
14
  * Use the function prepareBreakableObject to prepare a Mesh object to be broken.
15
- *
16
- * Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane)
17
- *
15
+ * Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane).
18
16
  * Sub-objects that are product of subdivision don't need prepareBreakableObject to be called on them.
19
17
  *
20
18
  * Requisites for the object:
21
- *
22
- * - Mesh object must have a buffer geometry and a material
23
- *
24
- * - Vertex normals must be planar (not smoothed)
25
- *
26
- * - The geometry must be convex (this is not checked in the library). You can create convex
27
- * geometries with ConvexGeometry. The BoxGeometry, SphereGeometry and other convex primitives
28
- * can also be used.
19
+ * - Mesh object must have a buffer geometry and a material.
20
+ * - Vertex normals must be planar (not smoothed).
21
+ * - The geometry must be convex (this is not checked in the library). You can create convex
22
+ * geometries with {@link ConvexGeometry}. The {@link BoxGeometry}, {@link SphereGeometry} and other
23
+ * convex primitives can also be used.
29
24
  *
30
25
  * Note: This lib adds member variables to object's userData member (see prepareBreakableObject function)
31
26
  * Use with caution and read the code when using with other libs.
32
- *
33
- * @param {double} minSizeForBreak Min size a debris can have to break.
34
- * @param {double} smallDelta Max distance to consider that a point belongs to a plane.
35
- *
36
27
  */
37
-
38
- const _v1 = new Vector3();
39
-
40
28
  class ConvexObjectBreaker {
41
29
 
30
+ /**
31
+ * Constructs a new convex object breaker.
32
+ *
33
+ * @param {number} [minSizeForBreak=1.4] - Min size a debris can have to break.
34
+ * @param {number} [smallDelta=0.0001] - Max distance to consider that a point belongs to a plane.
35
+ */
42
36
  constructor( minSizeForBreak = 1.4, smallDelta = 0.0001 ) {
43
37
 
44
38
  this.minSizeForBreak = minSizeForBreak;
@@ -68,6 +62,15 @@ class ConvexObjectBreaker {
68
62
 
69
63
  }
70
64
 
65
+ /**
66
+ * Must be called for all 3D objects that should be breakable.
67
+ *
68
+ * @param {Object3D} object - The 3D object. It must have a convex geometry.
69
+ * @param {number} mass - The 3D object's mass in kg. Must be greater than `0`.
70
+ * @param {Vector3} velocity - The 3D object's velocity.
71
+ * @param {Vector3} angularVelocity - The 3D object's angular velocity.
72
+ * @param {boolean} breakable - Whether the 3D object is breakable or not.
73
+ */
71
74
  prepareBreakableObject( object, mass, velocity, angularVelocity, breakable ) {
72
75
 
73
76
  // object is a Object3d (normally a Mesh), must have a buffer geometry, and it must be convex.
@@ -82,11 +85,16 @@ class ConvexObjectBreaker {
82
85
 
83
86
  }
84
87
 
85
- /*
86
- * @param {int} maxRadialIterations Iterations for radial cuts.
87
- * @param {int} maxRandomIterations Max random iterations for not-radial cuts
88
+ /**
89
+ * Subdivides the given 3D object into pieces by an impact (meaning another object hits
90
+ * the given 3D object at a certain surface point).
88
91
  *
89
- * Returns the array of pieces
92
+ * @param {Object3D} object - The 3D object to subdivide.
93
+ * @param {Vector3} pointOfImpact - The point of impact.
94
+ * @param {Vector3} normal - The impact normal.
95
+ * @param {number} maxRadialIterations - Iterations for radial cuts.
96
+ * @param {number} maxRandomIterations - Max random iterations for not-radial cuts.
97
+ * @return {Array<Object3D>} The array of pieces.
90
98
  */
91
99
  subdivideByImpact( object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations ) {
92
100
 
@@ -168,6 +176,14 @@ class ConvexObjectBreaker {
168
176
 
169
177
  }
170
178
 
179
+ /**
180
+ * Subdivides the given 3D object into pieces by a plane.
181
+ *
182
+ * @param {Object3D} object - The 3D object to subdivide.
183
+ * @param {Plane} plane - The plane to cut the 3D object.
184
+ * @param {{object1:?Mesh,object2:?Mesh}} output - An object that stores the pieces.
185
+ * @return {number} The number of pieces.
186
+ */
171
187
  cutByPlane( object, plane, output ) {
172
188
 
173
189
  // Returns breakable objects in output.object1 and output.object2 members, the resulting 2 pieces of the cut.
@@ -449,6 +465,8 @@ class ConvexObjectBreaker {
449
465
 
450
466
  }
451
467
 
468
+ // internal helpers
469
+
452
470
  static transformFreeVector( v, m ) {
453
471
 
454
472
  // input: