@plastic-software/three 0.174.0 → 0.175.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,5 +1,3 @@
1
- // https://cs.nyu.edu/~perlin/noise/
2
-
3
1
  const _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,
4
2
  23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,
5
3
  174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,
@@ -37,8 +35,22 @@ function grad( hash, x, y, z ) {
37
35
 
38
36
  }
39
37
 
38
+ /**
39
+ * A utility class providing a 3D noise function.
40
+ *
41
+ * The code is based on [IMPROVED NOISE]{@link https://cs.nyu.edu/~perlin/noise/}
42
+ * by Ken Perlin, 2002.
43
+ */
40
44
  class ImprovedNoise {
41
45
 
46
+ /**
47
+ * Returns a noise value for the given parameters.
48
+ *
49
+ * @param {number} x - The x coordinate.
50
+ * @param {number} y - The y coordinate.
51
+ * @param {number} z - The z coordinate.
52
+ * @return {number} The noise value.
53
+ */
42
54
  noise( x, y, z ) {
43
55
 
44
56
  const floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );
@@ -4,22 +4,83 @@ import {
4
4
  MathUtils
5
5
  } from 'three';
6
6
 
7
+ /**
8
+ * Represents a lookup table for colormaps. It is used to determine the color
9
+ * values from a range of data values.
10
+ *
11
+ * ```js
12
+ * const lut = new Lut( 'rainbow', 512 );
13
+ * const color = lut.getColor( 0.5 );
14
+ * ```
15
+ */
7
16
  class Lut {
8
17
 
18
+ /**
19
+ * Constructs a new Lut.
20
+ *
21
+ * @param {('rainbow'|'cooltowarm'|'blackbody'|'grayscale')} [colormap='rainbow'] - Sets a colormap from predefined list of colormaps.
22
+ * @param {number} [count=32] - Sets the number of colors used to represent the data array.
23
+ */
9
24
  constructor( colormap, count = 32 ) {
10
25
 
26
+ /**
27
+ * This flag can be used for type testing.
28
+ *
29
+ * @type {boolean}
30
+ * @readonly
31
+ * @default true
32
+ */
11
33
  this.isLut = true;
12
34
 
35
+
36
+ /**
37
+ * The lookup table for the selected color map
38
+ *
39
+ * @type {Array<Color>}
40
+ */
13
41
  this.lut = [];
42
+
43
+ /**
44
+ * The currently selected color map.
45
+ *
46
+ * @type {Array}
47
+ */
14
48
  this.map = [];
49
+
50
+ /**
51
+ * The number of colors of the current selected color map.
52
+ *
53
+ * @type {number}
54
+ * @default 32
55
+ */
15
56
  this.n = 0;
57
+
58
+ /**
59
+ * The minimum value to be represented with the lookup table.
60
+ *
61
+ * @type {number}
62
+ * @default 0
63
+ */
16
64
  this.minV = 0;
65
+
66
+ /**
67
+ * The maximum value to be represented with the lookup table.
68
+ *
69
+ * @type {number}
70
+ * @default 1
71
+ */
17
72
  this.maxV = 1;
18
73
 
19
74
  this.setColorMap( colormap, count );
20
75
 
21
76
  }
22
77
 
78
+ /**
79
+ * Sets the given LUT.
80
+ *
81
+ * @param {Lut} value - The LUT to set.
82
+ * @return {Lut} A reference to this LUT.
83
+ */
23
84
  set( value ) {
24
85
 
25
86
  if ( value.isLut === true ) {
@@ -32,6 +93,12 @@ class Lut {
32
93
 
33
94
  }
34
95
 
96
+ /**
97
+ * Sets the minimum value to be represented with this LUT.
98
+ *
99
+ * @param {number} min - The minimum value to be represented with the lookup table.
100
+ * @return {Lut} A reference to this LUT.
101
+ */
35
102
  setMin( min ) {
36
103
 
37
104
  this.minV = min;
@@ -40,6 +107,12 @@ class Lut {
40
107
 
41
108
  }
42
109
 
110
+ /**
111
+ * Sets the maximum value to be represented with this LUT.
112
+ *
113
+ * @param {number} max - The maximum value to be represented with the lookup table.
114
+ * @return {Lut} A reference to this LUT.
115
+ */
43
116
  setMax( max ) {
44
117
 
45
118
  this.maxV = max;
@@ -48,6 +121,13 @@ class Lut {
48
121
 
49
122
  }
50
123
 
124
+ /**
125
+ * Configure the lookup table for the given color map and number of colors.
126
+ *
127
+ * @param {string} colormap - The name of the color map.
128
+ * @param {number} [count=32] - The number of colors.
129
+ * @return {Lut} A reference to this LUT.
130
+ */
51
131
  setColorMap( colormap, count = 32 ) {
52
132
 
53
133
  this.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow;
@@ -97,6 +177,12 @@ class Lut {
97
177
 
98
178
  }
99
179
 
180
+ /**
181
+ * Copies the given lut.
182
+ *
183
+ * @param {Lut} lut - The LUT to copy.
184
+ * @return {Lut} A reference to this LUT.
185
+ */
100
186
  copy( lut ) {
101
187
 
102
188
  this.lut = lut.lut;
@@ -109,6 +195,12 @@ class Lut {
109
195
 
110
196
  }
111
197
 
198
+ /**
199
+ * Returns an instance of Color for the given data value.
200
+ *
201
+ * @param {number} alpha - The value to lookup.
202
+ * @return {Color} The color from the LUT.
203
+ */
112
204
  getColor( alpha ) {
113
205
 
114
206
  alpha = MathUtils.clamp( alpha, this.minV, this.maxV );
@@ -121,6 +213,14 @@ class Lut {
121
213
 
122
214
  }
123
215
 
216
+ /**
217
+ * Adds a color map to this Lut instance.
218
+ *
219
+ * @param {string} name - The name of the color map.
220
+ * @param {Array} arrayOfColors - An array of color values. Each value is an array
221
+ * holding a threshold and the actual color value as a hexadecimal number.
222
+ * @return {Lut} A reference to this LUT.
223
+ */
124
224
  addColorMap( name, arrayOfColors ) {
125
225
 
126
226
  ColorMapKeywords[ name ] = arrayOfColors;
@@ -129,6 +229,11 @@ class Lut {
129
229
 
130
230
  }
131
231
 
232
+ /**
233
+ * Creates a canvas in order to visualize the lookup table as a texture.
234
+ *
235
+ * @return {HTMLCanvasElement} The created canvas.
236
+ */
132
237
  createCanvas() {
133
238
 
134
239
  const canvas = document.createElement( 'canvas' );
@@ -141,6 +246,12 @@ class Lut {
141
246
 
142
247
  }
143
248
 
249
+ /**
250
+ * Updates the given canvas with the Lut's data.
251
+ *
252
+ * @param {HTMLCanvasElement} canvas - The canvas to update.
253
+ * @return {HTMLCanvasElement} The updated canvas.
254
+ */
144
255
  updateCanvas( canvas ) {
145
256
 
146
257
  const ctx = canvas.getContext( '2d', { alpha: false } );
@@ -4,6 +4,10 @@ import {
4
4
  Vector3
5
5
  } from 'three';
6
6
 
7
+ const _face = new Triangle();
8
+ const _color = new Vector3();
9
+ const _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();
10
+
7
11
  /**
8
12
  * Utility class for sampling weighted random points on the surface of a mesh.
9
13
  *
@@ -11,16 +15,39 @@ import {
11
15
  * random samples may be selected in O(logn) time. Memory usage is O(n).
12
16
  *
13
17
  * References:
14
- * - http://www.joesfer.com/?p=84
15
- * - https://stackoverflow.com/a/4322940/1314762
18
+ * - {@link http://www.joesfer.com/?p=84}
19
+ * - {@link https://stackoverflow.com/a/4322940/1314762}
20
+ *
21
+ * ```js
22
+ * const sampler = new MeshSurfaceSampler( surfaceMesh )
23
+ * .setWeightAttribute( 'color' )
24
+ * .build();
25
+ *
26
+ * const mesh = new THREE.InstancedMesh( sampleGeometry, sampleMaterial, 100 );
27
+ *
28
+ * const position = new THREE.Vector3();
29
+ * const matrix = new THREE.Matrix4();
30
+ *
31
+ * // Sample randomly from the surface, creating an instance of the sample geometry at each sample point.
32
+ *
33
+ * for ( let i = 0; i < 100; i ++ ) {
34
+ *
35
+ * sampler.sample( position );
36
+ * matrix.makeTranslation( position.x, position.y, position.z );
37
+ * mesh.setMatrixAt( i, matrix );
38
+ *
39
+ * }
40
+ *
41
+ * scene.add( mesh );
42
+ * ```
16
43
  */
17
-
18
- const _face = new Triangle();
19
- const _color = new Vector3();
20
- const _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();
21
-
22
44
  class MeshSurfaceSampler {
23
45
 
46
+ /**
47
+ * Constructs a mesh surface sampler.
48
+ *
49
+ * @param {Mesh} mesh - Surface mesh from which to sample.
50
+ */
24
51
  constructor( mesh ) {
25
52
 
26
53
  this.geometry = mesh.geometry;
@@ -37,6 +64,16 @@ class MeshSurfaceSampler {
37
64
 
38
65
  }
39
66
 
67
+ /**
68
+ * Specifies a vertex attribute to be used as a weight when sampling from the surface.
69
+ * Faces with higher weights are more likely to be sampled, and those with weights of
70
+ * zero will not be sampled at all. For vector attributes, only .x is used in sampling.
71
+ *
72
+ * If no weight attribute is selected, sampling is randomly distributed by area.
73
+ *
74
+ * @param {string} name - The attribute name.
75
+ * @return {MeshSurfaceSampler} A reference to this sampler.
76
+ */
40
77
  setWeightAttribute( name ) {
41
78
 
42
79
  this.weightAttribute = name ? this.geometry.getAttribute( name ) : null;
@@ -45,6 +82,13 @@ class MeshSurfaceSampler {
45
82
 
46
83
  }
47
84
 
85
+ /**
86
+ * Processes the input geometry and prepares to return samples. Any configuration of the
87
+ * geometry or sampler must occur before this method is called. Time complexity is O(n)
88
+ * for a surface with n faces.
89
+ *
90
+ * @return {MeshSurfaceSampler} A reference to this sampler.
91
+ */
48
92
  build() {
49
93
 
50
94
  const indexAttribute = this.indexAttribute;
@@ -107,6 +151,12 @@ class MeshSurfaceSampler {
107
151
 
108
152
  }
109
153
 
154
+ /**
155
+ * Allows to set a custom random number generator. Default is `Math.random()`.
156
+ *
157
+ * @param {Function} randomFunction - A random number generator.
158
+ * @return {MeshSurfaceSampler} A reference to this sampler.
159
+ */
110
160
  setRandomGenerator( randomFunction ) {
111
161
 
112
162
  this.randomFunction = randomFunction;
@@ -114,21 +164,34 @@ class MeshSurfaceSampler {
114
164
 
115
165
  }
116
166
 
167
+ /**
168
+ * Selects a random point on the surface of the input geometry, returning the
169
+ * position and optionally the normal vector, color and UV Coordinate at that point.
170
+ * Time complexity is O(log n) for a surface with n faces.
171
+ *
172
+ * @param {Vector3} targetPosition - The target object holding the sampled position.
173
+ * @param {Vector3} targetNormal - The target object holding the sampled normal.
174
+ * @param {Color} targetColor - The target object holding the sampled color.
175
+ * @param {Vector2} targetUV - The target object holding the sampled uv coordinates.
176
+ * @return {MeshSurfaceSampler} A reference to this sampler.
177
+ */
117
178
  sample( targetPosition, targetNormal, targetColor, targetUV ) {
118
179
 
119
- const faceIndex = this.sampleFaceIndex();
120
- return this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );
180
+ const faceIndex = this._sampleFaceIndex();
181
+ return this._sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );
121
182
 
122
183
  }
123
184
 
124
- sampleFaceIndex() {
185
+ // private
186
+
187
+ _sampleFaceIndex() {
125
188
 
126
189
  const cumulativeTotal = this.distribution[ this.distribution.length - 1 ];
127
- return this.binarySearch( this.randomFunction() * cumulativeTotal );
190
+ return this._binarySearch( this.randomFunction() * cumulativeTotal );
128
191
 
129
192
  }
130
193
 
131
- binarySearch( x ) {
194
+ _binarySearch( x ) {
132
195
 
133
196
  const dist = this.distribution;
134
197
  let start = 0;
@@ -162,7 +225,7 @@ class MeshSurfaceSampler {
162
225
 
163
226
  }
164
227
 
165
- sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {
228
+ _sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {
166
229
 
167
230
  let u = this.randomFunction();
168
231
  let v = this.randomFunction();
@@ -37,18 +37,51 @@ const matrix = new Matrix4();
37
37
  const inverse = new Matrix4();
38
38
  const localRay = new Ray();
39
39
 
40
- // OBB
41
-
40
+ /**
41
+ * Represents an oriented bounding box (OBB) in 3D space.
42
+ */
42
43
  class OBB {
43
44
 
45
+ /**
46
+ * Constructs a new OBB.
47
+ *
48
+ * @param {Vector3} [center] - The center of the OBB.
49
+ * @param {Vector3} [halfSize] - Positive halfwidth extents of the OBB along each axis.
50
+ * @param {Matrix3} [rotation] - The rotation of the OBB.
51
+ */
44
52
  constructor( center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3() ) {
45
53
 
54
+ /**
55
+ * The center of the OBB.
56
+ *
57
+ * @type {Vector3}
58
+ */
46
59
  this.center = center;
60
+
61
+ /**
62
+ * Positive halfwidth extents of the OBB along each axis.
63
+ *
64
+ * @type {Vector3}
65
+ */
47
66
  this.halfSize = halfSize;
67
+
68
+ /**
69
+ * The rotation of the OBB.
70
+ *
71
+ * @type {Matrix3}
72
+ */
48
73
  this.rotation = rotation;
49
74
 
50
75
  }
51
76
 
77
+ /**
78
+ * Sets the OBBs components to the given values.
79
+ *
80
+ * @param {Vector3} [center] - The center of the OBB.
81
+ * @param {Vector3} [halfSize] - Positive halfwidth extents of the OBB along each axis.
82
+ * @param {Matrix3} [rotation] - The rotation of the OBB.
83
+ * @return {OBB} A reference to this OBB.
84
+ */
52
85
  set( center, halfSize, rotation ) {
53
86
 
54
87
  this.center = center;
@@ -59,6 +92,12 @@ class OBB {
59
92
 
60
93
  }
61
94
 
95
+ /**
96
+ * Copies the values of the given OBB to this instance.
97
+ *
98
+ * @param {OBB} obb - The OBB to copy.
99
+ * @return {OBB} A reference to this OBB.
100
+ */
62
101
  copy( obb ) {
63
102
 
64
103
  this.center.copy( obb.center );
@@ -69,27 +108,40 @@ class OBB {
69
108
 
70
109
  }
71
110
 
111
+ /**
112
+ * Returns a new OBB with copied values from this instance.
113
+ *
114
+ * @return {OBB} A clone of this instance.
115
+ */
72
116
  clone() {
73
117
 
74
118
  return new this.constructor().copy( this );
75
119
 
76
120
  }
77
121
 
78
- getSize( result ) {
122
+ /**
123
+ * Returns the size of this OBB.
124
+ *
125
+ * @param {Vector3} target - The target vector that is used to store the method's result.
126
+ * @return {Vector3} The size.
127
+ */
128
+ getSize( target ) {
79
129
 
80
- return result.copy( this.halfSize ).multiplyScalar( 2 );
130
+ return target.copy( this.halfSize ).multiplyScalar( 2 );
81
131
 
82
132
  }
83
133
 
84
134
  /**
85
- * Reference: Closest Point on OBB to Point in Real-Time Collision Detection
86
- * by Christer Ericson (chapter 5.1.4)
87
- *
88
- * @param {Vector3} point
89
- * @param {Vector3} result
90
- * @returns {Vector3}
91
- */
92
- clampPoint( point, result ) {
135
+ * Clamps the given point within the bounds of this OBB.
136
+ *
137
+ * @param {Vector3} point - The point that should be clamped within the bounds of this OBB.
138
+ * @param {Vector3} target - The target vector that is used to store the method's result.
139
+ * @returns {Vector3} - The clamped point.
140
+ */
141
+ clampPoint( point, target ) {
142
+
143
+ // Reference: Closest Point on OBB to Point in Real-Time Collision Detection
144
+ // by Christer Ericson (chapter 5.1.4)
93
145
 
94
146
  const halfSize = this.halfSize;
95
147
 
@@ -98,23 +150,29 @@ class OBB {
98
150
 
99
151
  // start at the center position of the OBB
100
152
 
101
- result.copy( this.center );
153
+ target.copy( this.center );
102
154
 
103
155
  // project the target onto the OBB axes and walk towards that point
104
156
 
105
157
  const x = MathUtils.clamp( v1.dot( xAxis ), - halfSize.x, halfSize.x );
106
- result.add( xAxis.multiplyScalar( x ) );
158
+ target.add( xAxis.multiplyScalar( x ) );
107
159
 
108
160
  const y = MathUtils.clamp( v1.dot( yAxis ), - halfSize.y, halfSize.y );
109
- result.add( yAxis.multiplyScalar( y ) );
161
+ target.add( yAxis.multiplyScalar( y ) );
110
162
 
111
163
  const z = MathUtils.clamp( v1.dot( zAxis ), - halfSize.z, halfSize.z );
112
- result.add( zAxis.multiplyScalar( z ) );
164
+ target.add( zAxis.multiplyScalar( z ) );
113
165
 
114
- return result;
166
+ return target;
115
167
 
116
168
  }
117
169
 
170
+ /**
171
+ * Returns `true` if the given point lies within this OBB.
172
+ *
173
+ * @param {Vector3} point - The point to test.
174
+ * @returns {boolean} - Whether the given point lies within this OBB or not.
175
+ */
118
176
  containsPoint( point ) {
119
177
 
120
178
  v1.subVectors( point, this.center );
@@ -128,12 +186,24 @@ class OBB {
128
186
 
129
187
  }
130
188
 
189
+ /**
190
+ * Returns `true` if the given AABB intersects this OBB.
191
+ *
192
+ * @param {Box3} box3 - The AABB to test.
193
+ * @returns {boolean} - Whether the given AABB intersects this OBB or not.
194
+ */
131
195
  intersectsBox3( box3 ) {
132
196
 
133
197
  return this.intersectsOBB( obb.fromBox3( box3 ) );
134
198
 
135
199
  }
136
200
 
201
+ /**
202
+ * Returns `true` if the given bounding sphere intersects this OBB.
203
+ *
204
+ * @param {Sphere} sphere - The bounding sphere to test.
205
+ * @returns {boolean} - Whether the given bounding sphere intersects this OBB or not.
206
+ */
137
207
  intersectsSphere( sphere ) {
138
208
 
139
209
  // find the point on the OBB closest to the sphere center
@@ -147,15 +217,17 @@ class OBB {
147
217
  }
148
218
 
149
219
  /**
150
- * Reference: OBB-OBB Intersection in Real-Time Collision Detection
151
- * by Christer Ericson (chapter 4.4.1)
152
- *
153
- * @param {OBB} obb
154
- * @param {number} [epsilon=Number.EPSILON] - A small value to prevent arithmetic errors
155
- * @returns {boolean}
156
- */
220
+ * Returns `true` if the given OBB intersects this OBB.
221
+ *
222
+ * @param {OBB} obb - The OBB to test.
223
+ * @param {number} [epsilon=Number.EPSILON] - A small value to prevent arithmetic errors.
224
+ * @returns {boolean} - Whether the given OBB intersects this OBB or not.
225
+ */
157
226
  intersectsOBB( obb, epsilon = Number.EPSILON ) {
158
227
 
228
+ // Reference: OBB-OBB Intersection in Real-Time Collision Detection
229
+ // by Christer Ericson (chapter 4.4.1)
230
+
159
231
  // prepare data structures (the code uses the same nomenclature like the reference)
160
232
 
161
233
  a.c = this.center;
@@ -290,14 +362,16 @@ class OBB {
290
362
  }
291
363
 
292
364
  /**
293
- * Reference: Testing Box Against Plane in Real-Time Collision Detection
294
- * by Christer Ericson (chapter 5.2.3)
295
- *
296
- * @param {Plane} plane
297
- * @returns {boolean}
298
- */
365
+ * Returns `true` if the given plane intersects this OBB.
366
+ *
367
+ * @param {Plane} plane - The plane to test.
368
+ * @returns {boolean} Whether the given plane intersects this OBB or not.
369
+ */
299
370
  intersectsPlane( plane ) {
300
371
 
372
+ // Reference: Testing Box Against Plane in Real-Time Collision Detection
373
+ // by Christer Ericson (chapter 5.2.3)
374
+
301
375
  this.rotation.extractBasis( xAxis, yAxis, zAxis );
302
376
 
303
377
  // compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;
@@ -317,14 +391,14 @@ class OBB {
317
391
  }
318
392
 
319
393
  /**
320
- * Performs a ray/OBB intersection test and stores the intersection point
321
- * to the given 3D vector. If no intersection is detected, *null* is returned.
322
- *
323
- * @param {Ray} ray
324
- * @param {Vector3} result
325
- * @return {?Vector3}
326
- */
327
- intersectRay( ray, result ) {
394
+ * Performs a ray/OBB intersection test and stores the intersection point
395
+ * in the given 3D vector.
396
+ *
397
+ * @param {Ray} ray - The ray to test.
398
+ * @param {Vector3} target - The target vector that is used to store the method's result.
399
+ * @return {?Vector3} The intersection point. If no intersection is detected, `null` is returned.
400
+ */
401
+ intersectRay( ray, target ) {
328
402
 
329
403
  // the idea is to perform the intersection test in the local space
330
404
  // of the OBB.
@@ -344,11 +418,11 @@ class OBB {
344
418
 
345
419
  // perform ray <-> AABB intersection test
346
420
 
347
- if ( localRay.intersectBox( aabb, result ) ) {
421
+ if ( localRay.intersectBox( aabb, target ) ) {
348
422
 
349
423
  // transform the intersection point back to world space
350
424
 
351
- return result.applyMatrix4( matrix );
425
+ return target.applyMatrix4( matrix );
352
426
 
353
427
  } else {
354
428
 
@@ -359,18 +433,23 @@ class OBB {
359
433
  }
360
434
 
361
435
  /**
362
- * Performs a ray/OBB intersection test. Returns either true or false if
363
- * there is a intersection or not.
364
- *
365
- * @param {Ray} ray
366
- * @returns {boolean}
367
- */
436
+ * Returns `true` if the given ray intersects this OBB.
437
+ *
438
+ * @param {Ray} ray - The ray to test.
439
+ * @returns {boolean} Whether the given ray intersects this OBB or not.
440
+ */
368
441
  intersectsRay( ray ) {
369
442
 
370
443
  return this.intersectRay( ray, v1 ) !== null;
371
444
 
372
445
  }
373
446
 
447
+ /**
448
+ * Defines an OBB based on the given AABB.
449
+ *
450
+ * @param {Box3} box3 - The AABB to setup the OBB from.
451
+ * @return {OBB} A reference of this OBB.
452
+ */
374
453
  fromBox3( box3 ) {
375
454
 
376
455
  box3.getCenter( this.center );
@@ -383,6 +462,12 @@ class OBB {
383
462
 
384
463
  }
385
464
 
465
+ /**
466
+ * Returns `true` if the given OBB is equal to this OBB.
467
+ *
468
+ * @param {OBB} obb - The OBB to test.
469
+ * @returns {boolean} Whether the given OBB is equal to this OBB or not.
470
+ */
386
471
  equals( obb ) {
387
472
 
388
473
  return obb.center.equals( this.center ) &&
@@ -391,6 +476,14 @@ class OBB {
391
476
 
392
477
  }
393
478
 
479
+ /**
480
+ * Applies the given transformation matrix to this OBB. This method can be
481
+ * used to transform the bounding volume with the world matrix of a 3D object
482
+ * in order to keep both entities in sync.
483
+ *
484
+ * @param {Matrix4} matrix - The matrix to apply.
485
+ * @return {OBB} A reference of this OBB.
486
+ */
394
487
  applyMatrix4( matrix ) {
395
488
 
396
489
  const e = matrix.elements;