@plastic-software/three 0.167.4 → 0.174.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 (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
package/src/math/Ray.js CHANGED
@@ -9,15 +9,45 @@ const _edge1 = /*@__PURE__*/ new Vector3();
9
9
  const _edge2 = /*@__PURE__*/ new Vector3();
10
10
  const _normal = /*@__PURE__*/ new Vector3();
11
11
 
12
+ /**
13
+ * A ray that emits from an origin in a certain direction. The class is used by
14
+ * {@link Raycaster} to assist with raycasting. Raycasting is used for
15
+ * mouse picking (working out what objects in the 3D space the mouse is over)
16
+ * amongst other things.
17
+ */
12
18
  class Ray {
13
19
 
20
+ /**
21
+ * Constructs a new ray.
22
+ *
23
+ * @param {Vector3} [origin=(0,0,0)] - The origin of the ray.
24
+ * @param {Vector3} [direction=(0,0,-1)] - The (normalized) direction of the ray.
25
+ */
14
26
  constructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {
15
27
 
28
+ /**
29
+ * The origin of the ray.
30
+ *
31
+ * @type {Vector3}
32
+ */
16
33
  this.origin = origin;
34
+
35
+ /**
36
+ * The (normalized) direction of the ray.
37
+ *
38
+ * @type {Vector3}
39
+ */
17
40
  this.direction = direction;
18
41
 
19
42
  }
20
43
 
44
+ /**
45
+ * Sets the ray's components by copying the given values.
46
+ *
47
+ * @param {Vector3} origin - The origin.
48
+ * @param {Vector3} direction - The direction.
49
+ * @return {Ray} A reference to this ray.
50
+ */
21
51
  set( origin, direction ) {
22
52
 
23
53
  this.origin.copy( origin );
@@ -27,6 +57,12 @@ class Ray {
27
57
 
28
58
  }
29
59
 
60
+ /**
61
+ * Copies the values of the given ray to this instance.
62
+ *
63
+ * @param {Ray} ray - The ray to copy.
64
+ * @return {Ray} A reference to this ray.
65
+ */
30
66
  copy( ray ) {
31
67
 
32
68
  this.origin.copy( ray.origin );
@@ -36,12 +72,25 @@ class Ray {
36
72
 
37
73
  }
38
74
 
75
+ /**
76
+ * Returns a vector that is located at a given distance along this ray.
77
+ *
78
+ * @param {number} t - The distance along the ray to retrieve a position for.
79
+ * @param {Vector3} target - The target vector that is used to store the method's result.
80
+ * @return {Vector3} A position on the ray.
81
+ */
39
82
  at( t, target ) {
40
83
 
41
84
  return target.copy( this.origin ).addScaledVector( this.direction, t );
42
85
 
43
86
  }
44
87
 
88
+ /**
89
+ * Adjusts the direction of the ray to point at the given vector in world space.
90
+ *
91
+ * @param {Vector3} v - The target position.
92
+ * @return {Ray} A reference to this ray.
93
+ */
45
94
  lookAt( v ) {
46
95
 
47
96
  this.direction.copy( v ).sub( this.origin ).normalize();
@@ -50,6 +99,12 @@ class Ray {
50
99
 
51
100
  }
52
101
 
102
+ /**
103
+ * Shift the origin of this ray along its direction by the given distance.
104
+ *
105
+ * @param {number} t - The distance along the ray to interpolate.
106
+ * @return {Ray} A reference to this ray.
107
+ */
53
108
  recast( t ) {
54
109
 
55
110
  this.origin.copy( this.at( t, _vector ) );
@@ -58,6 +113,13 @@ class Ray {
58
113
 
59
114
  }
60
115
 
116
+ /**
117
+ * Returns the point along this ray that is closest to the given point.
118
+ *
119
+ * @param {Vector3} point - A point in 3D space to get the closet location on the ray for.
120
+ * @param {Vector3} target - The target vector that is used to store the method's result.
121
+ * @return {Vector3} The closest point on this ray.
122
+ */
61
123
  closestPointToPoint( point, target ) {
62
124
 
63
125
  target.subVectors( point, this.origin );
@@ -74,12 +136,24 @@ class Ray {
74
136
 
75
137
  }
76
138
 
139
+ /**
140
+ * Returns the distance of the closest approach between this ray and the given point.
141
+ *
142
+ * @param {Vector3} point - A point in 3D space to compute the distance to.
143
+ * @return {number} The distance.
144
+ */
77
145
  distanceToPoint( point ) {
78
146
 
79
147
  return Math.sqrt( this.distanceSqToPoint( point ) );
80
148
 
81
149
  }
82
150
 
151
+ /**
152
+ * Returns the squared distance of the closest approach between this ray and the given point.
153
+ *
154
+ * @param {Vector3} point - A point in 3D space to compute the distance to.
155
+ * @return {number} The squared distance.
156
+ */
83
157
  distanceSqToPoint( point ) {
84
158
 
85
159
  const directionDistance = _vector.subVectors( point, this.origin ).dot( this.direction );
@@ -98,6 +172,15 @@ class Ray {
98
172
 
99
173
  }
100
174
 
175
+ /**
176
+ * Returns the squared distance between this ray and the given line segment.
177
+ *
178
+ * @param {Vector3} v0 - The start point of the line segment.
179
+ * @param {Vector3} v1 - The end point of the line segment.
180
+ * @param {Vector3} [optionalPointOnRay] - When provided, it receives the point on this ray that is closest to the segment.
181
+ * @param {Vector3} [optionalPointOnSegment] - When provided, it receives the point on the line segment that is closest to this ray.
182
+ * @return {number} The squared distance.
183
+ */
101
184
  distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {
102
185
 
103
186
  // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h
@@ -217,6 +300,14 @@ class Ray {
217
300
 
218
301
  }
219
302
 
303
+ /**
304
+ * Intersects this ray with the given sphere, returning the intersection
305
+ * point or `null` if there is no intersection.
306
+ *
307
+ * @param {Sphere} sphere - The sphere to intersect.
308
+ * @param {Vector3} target - The target vector that is used to store the method's result.
309
+ * @return {?Vector3} The intersection point.
310
+ */
220
311
  intersectSphere( sphere, target ) {
221
312
 
222
313
  _vector.subVectors( sphere.center, this.origin );
@@ -247,12 +338,25 @@ class Ray {
247
338
 
248
339
  }
249
340
 
341
+ /**
342
+ * Returns `true` if this ray intersects with the given sphere.
343
+ *
344
+ * @param {Sphere} sphere - The sphere to intersect.
345
+ * @return {boolean} Whether this ray intersects with the given sphere or not.
346
+ */
250
347
  intersectsSphere( sphere ) {
251
348
 
252
349
  return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );
253
350
 
254
351
  }
255
352
 
353
+ /**
354
+ * Computes the distance from the ray's origin to the given plane. Returns `null` if the ray
355
+ * does not intersect with the plane.
356
+ *
357
+ * @param {Plane} plane - The plane to compute the distance to.
358
+ * @return {?number} Whether this ray intersects with the given sphere or not.
359
+ */
256
360
  distanceToPlane( plane ) {
257
361
 
258
362
  const denominator = plane.normal.dot( this.direction );
@@ -280,6 +384,14 @@ class Ray {
280
384
 
281
385
  }
282
386
 
387
+ /**
388
+ * Intersects this ray with the given plane, returning the intersection
389
+ * point or `null` if there is no intersection.
390
+ *
391
+ * @param {Plane} plane - The plane to intersect.
392
+ * @param {Vector3} target - The target vector that is used to store the method's result.
393
+ * @return {?Vector3} The intersection point.
394
+ */
283
395
  intersectPlane( plane, target ) {
284
396
 
285
397
  const t = this.distanceToPlane( plane );
@@ -294,6 +406,12 @@ class Ray {
294
406
 
295
407
  }
296
408
 
409
+ /**
410
+ * Returns `true` if this ray intersects with the given plane.
411
+ *
412
+ * @param {Plane} plane - The plane to intersect.
413
+ * @return {boolean} Whether this ray intersects with the given plane or not.
414
+ */
297
415
  intersectsPlane( plane ) {
298
416
 
299
417
  // check if the ray lies on the plane first
@@ -320,6 +438,14 @@ class Ray {
320
438
 
321
439
  }
322
440
 
441
+ /**
442
+ * Intersects this ray with the given bounding box, returning the intersection
443
+ * point or `null` if there is no intersection.
444
+ *
445
+ * @param {Box3} box - The box to intersect.
446
+ * @param {Vector3} target - The target vector that is used to store the method's result.
447
+ * @return {?Vector3} The intersection point.
448
+ */
323
449
  intersectBox( box, target ) {
324
450
 
325
451
  let tmin, tmax, tymin, tymax, tzmin, tzmax;
@@ -386,12 +512,29 @@ class Ray {
386
512
 
387
513
  }
388
514
 
515
+ /**
516
+ * Returns `true` if this ray intersects with the given box.
517
+ *
518
+ * @param {Box3} box - The box to intersect.
519
+ * @return {boolean} Whether this ray intersects with the given box or not.
520
+ */
389
521
  intersectsBox( box ) {
390
522
 
391
523
  return this.intersectBox( box, _vector ) !== null;
392
524
 
393
525
  }
394
526
 
527
+ /**
528
+ * Intersects this ray with the given triangle, returning the intersection
529
+ * point or `null` if there is no intersection.
530
+ *
531
+ * @param {Vector3} a - The first vertex of the triangle.
532
+ * @param {Vector3} b - The second vertex of the triangle.
533
+ * @param {Vector3} c - The third vertex of the triangle.
534
+ * @param {boolean} backfaceCulling - Whether to use backface culling or not.
535
+ * @param {Vector3} target - The target vector that is used to store the method's result.
536
+ * @return {?Vector3} The intersection point.
537
+ */
395
538
  intersectTriangle( a, b, c, backfaceCulling, target ) {
396
539
 
397
540
  // Compute the offset origin, edges, and normal.
@@ -467,6 +610,12 @@ class Ray {
467
610
 
468
611
  }
469
612
 
613
+ /**
614
+ * Transforms this ray with the given 4x4 transformation matrix.
615
+ *
616
+ * @param {Matrix4} matrix4 - The transformation matrix.
617
+ * @return {Ray} A reference to this ray.
618
+ */
470
619
  applyMatrix4( matrix4 ) {
471
620
 
472
621
  this.origin.applyMatrix4( matrix4 );
@@ -476,12 +625,23 @@ class Ray {
476
625
 
477
626
  }
478
627
 
628
+ /**
629
+ * Returns `true` if this ray is equal with the given one.
630
+ *
631
+ * @param {Ray} ray - The ray to test for equality.
632
+ * @return {boolean} Whether this ray is equal with the given one.
633
+ */
479
634
  equals( ray ) {
480
635
 
481
636
  return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );
482
637
 
483
638
  }
484
639
 
640
+ /**
641
+ * Returns a new ray with copied values from this instance.
642
+ *
643
+ * @return {Ray} A clone of this instance.
644
+ */
485
645
  clone() {
486
646
 
487
647
  return new this.constructor().copy( this );
@@ -5,17 +5,52 @@ const _box = /*@__PURE__*/ new Box3();
5
5
  const _v1 = /*@__PURE__*/ new Vector3();
6
6
  const _v2 = /*@__PURE__*/ new Vector3();
7
7
 
8
+ /**
9
+ * An analytical 3D sphere defined by a center and radius. This class is mainly
10
+ * used as a Bounding Sphere for 3D objects.
11
+ */
8
12
  class Sphere {
9
13
 
14
+ /**
15
+ * Constructs a new sphere.
16
+ *
17
+ * @param {Vector3} [center=(0,0,0)] - The center of the sphere
18
+ * @param {number} [radius=-1] - The radius of the sphere.
19
+ */
10
20
  constructor( center = new Vector3(), radius = - 1 ) {
11
21
 
22
+ /**
23
+ * This flag can be used for type testing.
24
+ *
25
+ * @type {boolean}
26
+ * @readonly
27
+ * @default true
28
+ */
12
29
  this.isSphere = true;
13
30
 
31
+ /**
32
+ * The center of the sphere
33
+ *
34
+ * @type {Vector3}
35
+ */
14
36
  this.center = center;
37
+
38
+ /**
39
+ * The radius of the sphere.
40
+ *
41
+ * @type {number}
42
+ */
15
43
  this.radius = radius;
16
44
 
17
45
  }
18
46
 
47
+ /**
48
+ * Sets the sphere's components by copying the given values.
49
+ *
50
+ * @param {Vector3} center - The center.
51
+ * @param {number} radius - The radius.
52
+ * @return {Sphere} A reference to this sphere.
53
+ */
19
54
  set( center, radius ) {
20
55
 
21
56
  this.center.copy( center );
@@ -25,6 +60,16 @@ class Sphere {
25
60
 
26
61
  }
27
62
 
63
+ /**
64
+ * Computes the minimum bounding sphere for list of points.
65
+ * If the optional center point is given, it is used as the sphere's
66
+ * center. Otherwise, the center of the axis-aligned bounding box
67
+ * encompassing the points is calculated.
68
+ *
69
+ * @param {Array<Vector3>} points - A list of points in 3D space.
70
+ * @param {Vector3} [optionalCenter] - The center of the sphere.
71
+ * @return {Sphere} A reference to this sphere.
72
+ */
28
73
  setFromPoints( points, optionalCenter ) {
29
74
 
30
75
  const center = this.center;
@@ -53,6 +98,12 @@ class Sphere {
53
98
 
54
99
  }
55
100
 
101
+ /**
102
+ * Copies the values of the given sphere to this instance.
103
+ *
104
+ * @param {Sphere} sphere - The sphere to copy.
105
+ * @return {Sphere} A reference to this sphere.
106
+ */
56
107
  copy( sphere ) {
57
108
 
58
109
  this.center.copy( sphere.center );
@@ -62,12 +113,25 @@ class Sphere {
62
113
 
63
114
  }
64
115
 
116
+ /**
117
+ * Returns `true` if the sphere is empty (the radius set to a negative number).
118
+ *
119
+ * Spheres with a radius of `0` contain only their center point and are not
120
+ * considered to be empty.
121
+ *
122
+ * @return {boolean} Whether this sphere is empty or not.
123
+ */
65
124
  isEmpty() {
66
125
 
67
126
  return ( this.radius < 0 );
68
127
 
69
128
  }
70
129
 
130
+ /**
131
+ * Makes this sphere empty which means in encloses a zero space in 3D.
132
+ *
133
+ * @return {Sphere} A reference to this sphere.
134
+ */
71
135
  makeEmpty() {
72
136
 
73
137
  this.center.set( 0, 0, 0 );
@@ -77,18 +141,39 @@ class Sphere {
77
141
 
78
142
  }
79
143
 
144
+ /**
145
+ * Returns `true` if this sphere contains the given point inclusive of
146
+ * the surface of the sphere.
147
+ *
148
+ * @param {Vector3} point - The point to check.
149
+ * @return {boolean} Whether this sphere contains the given point or not.
150
+ */
80
151
  containsPoint( point ) {
81
152
 
82
153
  return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );
83
154
 
84
155
  }
85
156
 
157
+ /**
158
+ * Returns the closest distance from the boundary of the sphere to the
159
+ * given point. If the sphere contains the point, the distance will
160
+ * be negative.
161
+ *
162
+ * @param {Vector3} point - The point to compute the distance to.
163
+ * @return {number} The distance to the point.
164
+ */
86
165
  distanceToPoint( point ) {
87
166
 
88
167
  return ( point.distanceTo( this.center ) - this.radius );
89
168
 
90
169
  }
91
170
 
171
+ /**
172
+ * Returns `true` if this sphere intersects with the given one.
173
+ *
174
+ * @param {Sphere} sphere - The sphere to test.
175
+ * @return {boolean} Whether this sphere intersects with the given one or not.
176
+ */
92
177
  intersectsSphere( sphere ) {
93
178
 
94
179
  const radiusSum = this.radius + sphere.radius;
@@ -97,18 +182,39 @@ class Sphere {
97
182
 
98
183
  }
99
184
 
185
+ /**
186
+ * Returns `true` if this sphere intersects with the given box.
187
+ *
188
+ * @param {Box3} box - The box to test.
189
+ * @return {boolean} Whether this sphere intersects with the given box or not.
190
+ */
100
191
  intersectsBox( box ) {
101
192
 
102
193
  return box.intersectsSphere( this );
103
194
 
104
195
  }
105
196
 
197
+ /**
198
+ * Returns `true` if this sphere intersects with the given plane.
199
+ *
200
+ * @param {Plane} plane - The plane to test.
201
+ * @return {boolean} Whether this sphere intersects with the given plane or not.
202
+ */
106
203
  intersectsPlane( plane ) {
107
204
 
108
205
  return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;
109
206
 
110
207
  }
111
208
 
209
+ /**
210
+ * Clamps a point within the sphere. If the point is outside the sphere, it
211
+ * will clamp it to the closest point on the edge of the sphere. Points
212
+ * already inside the sphere will not be affected.
213
+ *
214
+ * @param {Vector3} point - The plane to clamp.
215
+ * @param {Vector3} target - The target vector that is used to store the method's result.
216
+ * @return {Vector3} The clamped point.
217
+ */
112
218
  clampPoint( point, target ) {
113
219
 
114
220
  const deltaLengthSq = this.center.distanceToSquared( point );
@@ -126,6 +232,12 @@ class Sphere {
126
232
 
127
233
  }
128
234
 
235
+ /**
236
+ * Returns a bounding box that encloses this sphere.
237
+ *
238
+ * @param {Box3} target - The target box that is used to store the method's result.
239
+ * @return {Box3} The bounding box that encloses this sphere.
240
+ */
129
241
  getBoundingBox( target ) {
130
242
 
131
243
  if ( this.isEmpty() ) {
@@ -143,6 +255,12 @@ class Sphere {
143
255
 
144
256
  }
145
257
 
258
+ /**
259
+ * Transforms this sphere with the given 4x4 transformation matrix.
260
+ *
261
+ * @param {Matrix4} matrix - The transformation matrix.
262
+ * @return {Sphere} A reference to this sphere.
263
+ */
146
264
  applyMatrix4( matrix ) {
147
265
 
148
266
  this.center.applyMatrix4( matrix );
@@ -152,6 +270,12 @@ class Sphere {
152
270
 
153
271
  }
154
272
 
273
+ /**
274
+ * Translates the sphere's center by the given offset.
275
+ *
276
+ * @param {Vector3} offset - The offset.
277
+ * @return {Sphere} A reference to this sphere.
278
+ */
155
279
  translate( offset ) {
156
280
 
157
281
  this.center.add( offset );
@@ -160,6 +284,12 @@ class Sphere {
160
284
 
161
285
  }
162
286
 
287
+ /**
288
+ * Expands the boundaries of this sphere to include the given point.
289
+ *
290
+ * @param {Vector3} point - The point to include.
291
+ * @return {Sphere} A reference to this sphere.
292
+ */
163
293
  expandByPoint( point ) {
164
294
 
165
295
  if ( this.isEmpty() ) {
@@ -194,6 +324,12 @@ class Sphere {
194
324
 
195
325
  }
196
326
 
327
+ /**
328
+ * Expands this sphere to enclose both the original sphere and the given sphere.
329
+ *
330
+ * @param {Sphere} sphere - The sphere to include.
331
+ * @return {Sphere} A reference to this sphere.
332
+ */
197
333
  union( sphere ) {
198
334
 
199
335
  if ( sphere.isEmpty() ) {
@@ -228,12 +364,23 @@ class Sphere {
228
364
 
229
365
  }
230
366
 
367
+ /**
368
+ * Returns `true` if this sphere is equal with the given one.
369
+ *
370
+ * @param {Sphere} sphere - The sphere to test for equality.
371
+ * @return {boolean} Whether this bounding sphere is equal with the given one.
372
+ */
231
373
  equals( sphere ) {
232
374
 
233
375
  return sphere.center.equals( this.center ) && ( sphere.radius === this.radius );
234
376
 
235
377
  }
236
378
 
379
+ /**
380
+ * Returns a new sphere with copied values from this instance.
381
+ *
382
+ * @return {Sphere} A clone of this instance.
383
+ */
237
384
  clone() {
238
385
 
239
386
  return new this.constructor().copy( this );
@@ -1,23 +1,54 @@
1
- import * as MathUtils from './MathUtils.js';
1
+ import { clamp } from './MathUtils.js';
2
2
 
3
3
  /**
4
- * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system
5
- *
6
- * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.
7
- * theta (the azimuthal angle) is measured from the positive z-axis.
4
+ * This class can be used to represent points in 3D space as
5
+ * [Spherical coordinates]{@link https://en.wikipedia.org/wiki/Spherical_coordinate_system}.
8
6
  */
9
7
  class Spherical {
10
8
 
9
+ /**
10
+ * Constructs a new spherical.
11
+ *
12
+ * @param {number} [radius=1] - The radius, or the Euclidean distance (straight-line distance) from the point to the origin.
13
+ * @param {number} [phi=0] - The polar angle in radians from the y (up) axis.
14
+ * @param {number} [theta=0] - The equator/azimuthal angle in radians around the y (up) axis.
15
+ */
11
16
  constructor( radius = 1, phi = 0, theta = 0 ) {
12
17
 
18
+ /**
19
+ * The radius, or the Euclidean distance (straight-line distance) from the point to the origin.
20
+ *
21
+ * @type {number}
22
+ * @default 1
23
+ */
13
24
  this.radius = radius;
14
- this.phi = phi; // polar angle
15
- this.theta = theta; // azimuthal angle
16
25
 
17
- return this;
26
+ /**
27
+ * The polar angle in radians from the y (up) axis.
28
+ *
29
+ * @type {number}
30
+ * @default 0
31
+ */
32
+ this.phi = phi;
33
+
34
+ /**
35
+ * The equator/azimuthal angle in radians around the y (up) axis.
36
+ *
37
+ * @type {number}
38
+ * @default 0
39
+ */
40
+ this.theta = theta;
18
41
 
19
42
  }
20
43
 
44
+ /**
45
+ * Sets the spherical components by copying the given values.
46
+ *
47
+ * @param {number} radius - The radius.
48
+ * @param {number} phi - The polar angle.
49
+ * @param {number} theta - The azimuthal angle.
50
+ * @return {Spherical} A reference to this spherical.
51
+ */
21
52
  set( radius, phi, theta ) {
22
53
 
23
54
  this.radius = radius;
@@ -28,6 +59,12 @@ class Spherical {
28
59
 
29
60
  }
30
61
 
62
+ /**
63
+ * Copies the values of the given spherical to this instance.
64
+ *
65
+ * @param {Spherical} other - The spherical to copy.
66
+ * @return {Spherical} A reference to this spherical.
67
+ */
31
68
  copy( other ) {
32
69
 
33
70
  this.radius = other.radius;
@@ -38,22 +75,42 @@ class Spherical {
38
75
 
39
76
  }
40
77
 
41
- // restrict phi to be between EPS and PI-EPS
78
+ /**
79
+ * Restricts the polar angle [page:.phi phi] to be between `0.000001` and pi -
80
+ * `0.000001`.
81
+ *
82
+ * @return {Spherical} A reference to this spherical.
83
+ */
42
84
  makeSafe() {
43
85
 
44
86
  const EPS = 0.000001;
45
- this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );
87
+ this.phi = clamp( this.phi, EPS, Math.PI - EPS );
46
88
 
47
89
  return this;
48
90
 
49
91
  }
50
92
 
93
+ /**
94
+ * Sets the spherical components from the given vector which is assumed to hold
95
+ * Cartesian coordinates.
96
+ *
97
+ * @param {Vector3} v - The vector to set.
98
+ * @return {Spherical} A reference to this spherical.
99
+ */
51
100
  setFromVector3( v ) {
52
101
 
53
102
  return this.setFromCartesianCoords( v.x, v.y, v.z );
54
103
 
55
104
  }
56
105
 
106
+ /**
107
+ * Sets the spherical components from the given Cartesian coordinates.
108
+ *
109
+ * @param {number} x - The x value.
110
+ * @param {number} y - The x value.
111
+ * @param {number} z - The x value.
112
+ * @return {Spherical} A reference to this spherical.
113
+ */
57
114
  setFromCartesianCoords( x, y, z ) {
58
115
 
59
116
  this.radius = Math.sqrt( x * x + y * y + z * z );
@@ -66,7 +123,7 @@ class Spherical {
66
123
  } else {
67
124
 
68
125
  this.theta = Math.atan2( x, z );
69
- this.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) );
126
+ this.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );
70
127
 
71
128
  }
72
129
 
@@ -74,6 +131,11 @@ class Spherical {
74
131
 
75
132
  }
76
133
 
134
+ /**
135
+ * Returns a new spherical with copied values from this instance.
136
+ *
137
+ * @return {Spherical} A clone of this instance.
138
+ */
77
139
  clone() {
78
140
 
79
141
  return new this.constructor().copy( this );