@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
@@ -6,14 +6,46 @@ import { CubicBezierCurve } from '../curves/CubicBezierCurve.js';
6
6
  import { QuadraticBezierCurve } from '../curves/QuadraticBezierCurve.js';
7
7
  import { LineCurve } from '../curves/LineCurve.js';
8
8
 
9
+ /**
10
+ * A 2D path representation. The class provides methods for creating paths
11
+ * and contours of 2D shapes similar to the 2D Canvas API.
12
+ *
13
+ * ```js
14
+ * const path = new THREE.Path();
15
+ *
16
+ * path.lineTo( 0, 0.8 );
17
+ * path.quadraticCurveTo( 0, 1, 0.2, 1 );
18
+ * path.lineTo( 1, 1 );
19
+ *
20
+ * const points = path.getPoints();
21
+ *
22
+ * const geometry = new THREE.BufferGeometry().setFromPoints( points );
23
+ * const material = new THREE.LineBasicMaterial( { color: 0xffffff } );
24
+ *
25
+ * const line = new THREE.Line( geometry, material );
26
+ * scene.add( line );
27
+ * ```
28
+ *
29
+ * @augments CurvePath
30
+ */
9
31
  class Path extends CurvePath {
10
32
 
33
+ /**
34
+ * Constructs a new path.
35
+ *
36
+ * @param {Array<Vector2>} [points] - An array of 2D points defining the path.
37
+ */
11
38
  constructor( points ) {
12
39
 
13
40
  super();
14
41
 
15
42
  this.type = 'Path';
16
43
 
44
+ /**
45
+ * The current offset of the path. Any new curve added will start here.
46
+ *
47
+ * @type {Vector2}
48
+ */
17
49
  this.currentPoint = new Vector2();
18
50
 
19
51
  if ( points ) {
@@ -24,6 +56,13 @@ class Path extends CurvePath {
24
56
 
25
57
  }
26
58
 
59
+ /**
60
+ * Creates a path from the given list of points. The points are added
61
+ * to the path as instances of {@link LineCurve}.
62
+ *
63
+ * @param {Array<Vector2>} points - An array of 2D points.
64
+ * @return {Path} A reference to this path.
65
+ */
27
66
  setFromPoints( points ) {
28
67
 
29
68
  this.moveTo( points[ 0 ].x, points[ 0 ].y );
@@ -38,6 +77,13 @@ class Path extends CurvePath {
38
77
 
39
78
  }
40
79
 
80
+ /**
81
+ * Moves {@link Path#currentPoint} to the given point.
82
+ *
83
+ * @param {number} x - The x coordinate.
84
+ * @param {number} y - The y coordinate.
85
+ * @return {Path} A reference to this path.
86
+ */
41
87
  moveTo( x, y ) {
42
88
 
43
89
  this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?
@@ -46,6 +92,14 @@ class Path extends CurvePath {
46
92
 
47
93
  }
48
94
 
95
+ /**
96
+ * Adds an instance of {@link LineCurve} to the path by connecting
97
+ * the current point with the given one.
98
+ *
99
+ * @param {number} x - The x coordinate of the end point.
100
+ * @param {number} y - The y coordinate of the end point.
101
+ * @return {Path} A reference to this path.
102
+ */
49
103
  lineTo( x, y ) {
50
104
 
51
105
  const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );
@@ -57,6 +111,16 @@ class Path extends CurvePath {
57
111
 
58
112
  }
59
113
 
114
+ /**
115
+ * Adds an instance of {@link QuadraticBezierCurve} to the path by connecting
116
+ * the current point with the given one.
117
+ *
118
+ * @param {number} aCPx - The x coordinate of the control point.
119
+ * @param {number} aCPy - The y coordinate of the control point.
120
+ * @param {number} aX - The x coordinate of the end point.
121
+ * @param {number} aY - The y coordinate of the end point.
122
+ * @return {Path} A reference to this path.
123
+ */
60
124
  quadraticCurveTo( aCPx, aCPy, aX, aY ) {
61
125
 
62
126
  const curve = new QuadraticBezierCurve(
@@ -73,6 +137,18 @@ class Path extends CurvePath {
73
137
 
74
138
  }
75
139
 
140
+ /**
141
+ * Adds an instance of {@link CubicBezierCurve} to the path by connecting
142
+ * the current point with the given one.
143
+ *
144
+ * @param {number} aCP1x - The x coordinate of the first control point.
145
+ * @param {number} aCP1y - The y coordinate of the first control point.
146
+ * @param {number} aCP2x - The x coordinate of the second control point.
147
+ * @param {number} aCP2y - The y coordinate of the second control point.
148
+ * @param {number} aX - The x coordinate of the end point.
149
+ * @param {number} aY - The y coordinate of the end point.
150
+ * @return {Path} A reference to this path.
151
+ */
76
152
  bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
77
153
 
78
154
  const curve = new CubicBezierCurve(
@@ -90,7 +166,14 @@ class Path extends CurvePath {
90
166
 
91
167
  }
92
168
 
93
- splineThru( pts /*Array of Vector*/ ) {
169
+ /**
170
+ * Adds an instance of {@link SplineCurve} to the path by connecting
171
+ * the current point with the given list of points.
172
+ *
173
+ * @param {Array<Vector2>} pts - An array of points in 2D space.
174
+ * @return {Path} A reference to this path.
175
+ */
176
+ splineThru( pts ) {
94
177
 
95
178
  const npts = [ this.currentPoint.clone() ].concat( pts );
96
179
 
@@ -103,6 +186,18 @@ class Path extends CurvePath {
103
186
 
104
187
  }
105
188
 
189
+ /**
190
+ * Adds an arc as an instance of {@link EllipseCurve} to the path, positioned relative
191
+ * to the current point.
192
+ *
193
+ * @param {number} aX - The x coordinate of the center of the arc offsetted from the previous curve.
194
+ * @param {number} aY - The y coordinate of the center of the arc offsetted from the previous curve.
195
+ * @param {number} aRadius - The radius of the arc.
196
+ * @param {number} aStartAngle - The start angle in radians.
197
+ * @param {number} aEndAngle - The end angle in radians.
198
+ * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
199
+ * @return {Path} A reference to this path.
200
+ */
106
201
  arc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
107
202
 
108
203
  const x0 = this.currentPoint.x;
@@ -115,6 +210,17 @@ class Path extends CurvePath {
115
210
 
116
211
  }
117
212
 
213
+ /**
214
+ * Adds an absolutely positioned arc as an instance of {@link EllipseCurve} to the path.
215
+ *
216
+ * @param {number} aX - The x coordinate of the center of the arc.
217
+ * @param {number} aY - The y coordinate of the center of the arc.
218
+ * @param {number} aRadius - The radius of the arc.
219
+ * @param {number} aStartAngle - The start angle in radians.
220
+ * @param {number} aEndAngle - The end angle in radians.
221
+ * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
222
+ * @return {Path} A reference to this path.
223
+ */
118
224
  absarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
119
225
 
120
226
  this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
@@ -123,6 +229,20 @@ class Path extends CurvePath {
123
229
 
124
230
  }
125
231
 
232
+ /**
233
+ * Adds an ellipse as an instance of {@link EllipseCurve} to the path, positioned relative
234
+ * to the current point
235
+ *
236
+ * @param {number} aX - The x coordinate of the center of the ellipse offsetted from the previous curve.
237
+ * @param {number} aY - The y coordinate of the center of the ellipse offsetted from the previous curve.
238
+ * @param {number} xRadius - The radius of the ellipse in the x axis.
239
+ * @param {number} yRadius - The radius of the ellipse in the y axis.
240
+ * @param {number} aStartAngle - The start angle in radians.
241
+ * @param {number} aEndAngle - The end angle in radians.
242
+ * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
243
+ * @param {boolean} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
244
+ * @return {Path} A reference to this path.
245
+ */
126
246
  ellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
127
247
 
128
248
  const x0 = this.currentPoint.x;
@@ -134,6 +254,19 @@ class Path extends CurvePath {
134
254
 
135
255
  }
136
256
 
257
+ /**
258
+ * Adds an absolutely positioned ellipse as an instance of {@link EllipseCurve} to the path.
259
+ *
260
+ * @param {number} aX - The x coordinate of the absolute center of the ellipse.
261
+ * @param {number} aY - The y coordinate of the absolute center of the ellipse.
262
+ * @param {number} xRadius - The radius of the ellipse in the x axis.
263
+ * @param {number} yRadius - The radius of the ellipse in the y axis.
264
+ * @param {number} aStartAngle - The start angle in radians.
265
+ * @param {number} aEndAngle - The end angle in radians.
266
+ * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
267
+ * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
268
+ * @return {Path} A reference to this path.
269
+ */
137
270
  absellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
138
271
 
139
272
  const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );
@@ -1,20 +1,76 @@
1
1
  import { Path } from './Path.js';
2
- import * as MathUtils from '../../math/MathUtils.js';
3
-
2
+ import { generateUUID } from '../../math/MathUtils.js';
3
+
4
+ /**
5
+ * Defines an arbitrary 2d shape plane using paths with optional holes. It
6
+ * can be used with {@link ExtrudeGeometry}, {@link ShapeGeometry}, to get
7
+ * points, or to get triangulated faces.
8
+ *
9
+ * ```js
10
+ * const heartShape = new THREE.Shape();
11
+ *
12
+ * heartShape.moveTo( 25, 25 );
13
+ * heartShape.bezierCurveTo( 25, 25, 20, 0, 0, 0 );
14
+ * heartShape.bezierCurveTo( - 30, 0, - 30, 35, - 30, 35 );
15
+ * heartShape.bezierCurveTo( - 30, 55, - 10, 77, 25, 95 );
16
+ * heartShape.bezierCurveTo( 60, 77, 80, 55, 80, 35 );
17
+ * heartShape.bezierCurveTo( 80, 35, 80, 0, 50, 0 );
18
+ * heartShape.bezierCurveTo( 35, 0, 25, 25, 25, 25 );
19
+ *
20
+ * const extrudeSettings = {
21
+ * depth: 8,
22
+ * bevelEnabled: true,
23
+ * bevelSegments: 2,
24
+ * steps: 2,
25
+ * bevelSize: 1,
26
+ * bevelThickness: 1
27
+ * };
28
+ *
29
+ * const geometry = new THREE.ExtrudeGeometry( heartShape, extrudeSettings );
30
+ * const mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial() );
31
+ * ```
32
+ *
33
+ * @augments Path
34
+ */
4
35
  class Shape extends Path {
5
36
 
37
+ /**
38
+ * Constructs a new shape.
39
+ *
40
+ * @param {Array<Vector2>} [points] - An array of 2D points defining the shape.
41
+ */
6
42
  constructor( points ) {
7
43
 
8
44
  super( points );
9
45
 
10
- this.uuid = MathUtils.generateUUID();
46
+ /**
47
+ * The UUID of the shape.
48
+ *
49
+ * @type {string}
50
+ * @readonly
51
+ */
52
+ this.uuid = generateUUID();
11
53
 
12
54
  this.type = 'Shape';
13
55
 
56
+ /**
57
+ * Defines the holes in the shape. Hole definitions must use the
58
+ * opposite winding order (CW/CCW) than the outer shape.
59
+ *
60
+ * @type {Array<Path>}
61
+ * @readonly
62
+ */
14
63
  this.holes = [];
15
64
 
16
65
  }
17
66
 
67
+ /**
68
+ * Returns an array representing each contour of the holes
69
+ * as a list of 2D points.
70
+ *
71
+ * @param {number} divisions - The fineness of the result.
72
+ * @return {Array<Array<Vector2>>} The holes as a series of 2D points.
73
+ */
18
74
  getPointsHoles( divisions ) {
19
75
 
20
76
  const holesPts = [];
@@ -31,6 +87,13 @@ class Shape extends Path {
31
87
 
32
88
  // get points of shape and holes (keypoints based on segments parameter)
33
89
 
90
+ /**
91
+ * Returns an object that holds contour data for the shape and its holes as
92
+ * arrays of 2D points.
93
+ *
94
+ * @param {number} divisions - The fineness of the result.
95
+ * @return {{shape:Array<Vector2>,holes:Array<Array<Vector2>>}} An object with contour data.
96
+ */
34
97
  extractPoints( divisions ) {
35
98
 
36
99
  return {
@@ -3,19 +3,51 @@ import { Path } from './Path.js';
3
3
  import { Shape } from './Shape.js';
4
4
  import { ShapeUtils } from '../ShapeUtils.js';
5
5
 
6
+ /**
7
+ * This class is used to convert a series of paths to an array of
8
+ * shapes. It is specifically used in context of fonts and SVG.
9
+ */
6
10
  class ShapePath {
7
11
 
12
+ /**
13
+ * Constructs a new shape path.
14
+ */
8
15
  constructor() {
9
16
 
10
17
  this.type = 'ShapePath';
11
18
 
19
+ /**
20
+ * The color of the shape.
21
+ *
22
+ * @type {Color}
23
+ */
12
24
  this.color = new Color();
13
25
 
26
+ /**
27
+ * The paths that have been generated for this shape.
28
+ *
29
+ * @type {Array<Path>}
30
+ * @default null
31
+ */
14
32
  this.subPaths = [];
33
+
34
+ /**
35
+ * The current path that is being generated.
36
+ *
37
+ * @type {?Path}
38
+ * @default null
39
+ */
15
40
  this.currentPath = null;
16
41
 
17
42
  }
18
43
 
44
+ /**
45
+ * Creates a new path and moves it current point to the given one.
46
+ *
47
+ * @param {number} x - The x coordinate.
48
+ * @param {number} y - The y coordinate.
49
+ * @return {ShapePath} A reference to this shape path.
50
+ */
19
51
  moveTo( x, y ) {
20
52
 
21
53
  this.currentPath = new Path();
@@ -26,6 +58,14 @@ class ShapePath {
26
58
 
27
59
  }
28
60
 
61
+ /**
62
+ * Adds an instance of {@link LineCurve} to the path by connecting
63
+ * the current point with the given one.
64
+ *
65
+ * @param {number} x - The x coordinate of the end point.
66
+ * @param {number} y - The y coordinate of the end point.
67
+ * @return {ShapePath} A reference to this shape path.
68
+ */
29
69
  lineTo( x, y ) {
30
70
 
31
71
  this.currentPath.lineTo( x, y );
@@ -34,6 +74,16 @@ class ShapePath {
34
74
 
35
75
  }
36
76
 
77
+ /**
78
+ * Adds an instance of {@link QuadraticBezierCurve} to the path by connecting
79
+ * the current point with the given one.
80
+ *
81
+ * @param {number} aCPx - The x coordinate of the control point.
82
+ * @param {number} aCPy - The y coordinate of the control point.
83
+ * @param {number} aX - The x coordinate of the end point.
84
+ * @param {number} aY - The y coordinate of the end point.
85
+ * @return {ShapePath} A reference to this shape path.
86
+ */
37
87
  quadraticCurveTo( aCPx, aCPy, aX, aY ) {
38
88
 
39
89
  this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );
@@ -42,6 +92,18 @@ class ShapePath {
42
92
 
43
93
  }
44
94
 
95
+ /**
96
+ * Adds an instance of {@link CubicBezierCurve} to the path by connecting
97
+ * the current point with the given one.
98
+ *
99
+ * @param {number} aCP1x - The x coordinate of the first control point.
100
+ * @param {number} aCP1y - The y coordinate of the first control point.
101
+ * @param {number} aCP2x - The x coordinate of the second control point.
102
+ * @param {number} aCP2y - The y coordinate of the second control point.
103
+ * @param {number} aX - The x coordinate of the end point.
104
+ * @param {number} aY - The y coordinate of the end point.
105
+ * @return {ShapePath} A reference to this shape path.
106
+ */
45
107
  bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
46
108
 
47
109
  this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );
@@ -50,6 +112,13 @@ class ShapePath {
50
112
 
51
113
  }
52
114
 
115
+ /**
116
+ * Adds an instance of {@link SplineCurve} to the path by connecting
117
+ * the current point with the given list of points.
118
+ *
119
+ * @param {Array<Vector2>} pts - An array of points in 2D space.
120
+ * @return {ShapePath} A reference to this shape path.
121
+ */
53
122
  splineThru( pts ) {
54
123
 
55
124
  this.currentPath.splineThru( pts );
@@ -58,6 +127,13 @@ class ShapePath {
58
127
 
59
128
  }
60
129
 
130
+ /**
131
+ * Converts the paths into an array of shapes.
132
+ *
133
+ * @param {boolean} isCCW - By default solid shapes are defined clockwise (CW) and holes are defined counterclockwise (CCW).
134
+ * If this flag is set to `true`, then those are flipped.
135
+ * @return {Array<Shape>} An array of shapes.
136
+ */
61
137
  toShapes( isCCW ) {
62
138
 
63
139
  function toShapesNoHoles( inSubpaths ) {
@@ -1,11 +1,33 @@
1
1
  import { EllipseCurve } from './EllipseCurve.js';
2
2
 
3
+ /**
4
+ * A curve representing an arc.
5
+ *
6
+ * @augments EllipseCurve
7
+ */
3
8
  class ArcCurve extends EllipseCurve {
4
9
 
10
+ /**
11
+ * Constructs a new arc curve.
12
+ *
13
+ * @param {number} [aX=0] - The X center of the ellipse.
14
+ * @param {number} [aY=0] - The Y center of the ellipse.
15
+ * @param {number} [aRadius=1] - The radius of the ellipse in the x direction.
16
+ * @param {number} [aStartAngle=0] - The start angle of the curve in radians starting from the positive X axis.
17
+ * @param {number} [aEndAngle=Math.PI*2] - The end angle of the curve in radians starting from the positive X axis.
18
+ * @param {boolean} [aClockwise=false] - Whether the ellipse is drawn clockwise or not.
19
+ */
5
20
  constructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
6
21
 
7
22
  super( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
8
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
9
31
  this.isArcCurve = true;
10
32
 
11
33
  this.type = 'ArcCurve';
@@ -1,27 +1,26 @@
1
1
  import { Vector3 } from '../../math/Vector3.js';
2
2
  import { Curve } from '../core/Curve.js';
3
3
 
4
- /**
5
- * Centripetal CatmullRom Curve - which is useful for avoiding
6
- * cusps and self-intersections in non-uniform catmull rom curves.
7
- * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf
8
- *
9
- * curve.type accepts centripetal(default), chordal and catmullrom
10
- * curve.tension is used for catmullrom which defaults to 0.5
11
- */
12
-
4
+ function CubicPoly() {
13
5
 
14
- /*
15
- Based on an optimized c++ solution in
16
- - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
17
- - http://ideone.com/NoEbVM
6
+ /**
7
+ * Centripetal CatmullRom Curve - which is useful for avoiding
8
+ * cusps and self-intersections in non-uniform catmull rom curves.
9
+ * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf
10
+ *
11
+ * curve.type accepts centripetal(default), chordal and catmullrom
12
+ * curve.tension is used for catmullrom which defaults to 0.5
13
+ */
18
14
 
19
- This CubicPoly class could be used for reusing some variables and calculations,
20
- but for three.js curve use, it could be possible inlined and flatten into a single function call
21
- which can be placed in CurveUtils.
22
- */
15
+ /*
16
+ Based on an optimized c++ solution in
17
+ - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
18
+ - http://ideone.com/NoEbVM
23
19
 
24
- function CubicPoly() {
20
+ This CubicPoly class could be used for reusing some variables and calculations,
21
+ but for three.js curve use, it could be possible inlined and flatten into a single function call
22
+ which can be placed in CurveUtils.
23
+ */
25
24
 
26
25
  let c0 = 0, c1 = 0, c2 = 0, c3 = 0;
27
26
 
@@ -83,23 +82,95 @@ const px = /*@__PURE__*/ new CubicPoly();
83
82
  const py = /*@__PURE__*/ new CubicPoly();
84
83
  const pz = /*@__PURE__*/ new CubicPoly();
85
84
 
85
+ /**
86
+ * A curve representing a Catmull-Rom spline.
87
+ *
88
+ * ```js
89
+ * //Create a closed wavey loop
90
+ * const curve = new THREE.CatmullRomCurve3( [
91
+ * new THREE.Vector3( -10, 0, 10 ),
92
+ * new THREE.Vector3( -5, 5, 5 ),
93
+ * new THREE.Vector3( 0, 0, 0 ),
94
+ * new THREE.Vector3( 5, -5, 5 ),
95
+ * new THREE.Vector3( 10, 0, 10 )
96
+ * ] );
97
+ *
98
+ * const points = curve.getPoints( 50 );
99
+ * const geometry = new THREE.BufferGeometry().setFromPoints( points );
100
+ *
101
+ * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
102
+ *
103
+ * // Create the final object to add to the scene
104
+ * const curveObject = new THREE.Line( geometry, material );
105
+ * ```
106
+ *
107
+ * @augments Curve
108
+ */
86
109
  class CatmullRomCurve3 extends Curve {
87
110
 
111
+ /**
112
+ * Constructs a new Catmull-Rom curve.
113
+ *
114
+ * @param {Array<Vector3>} [points] - An array of 3D points defining the curve.
115
+ * @param {boolean} [closed=false] - Whether the curve is closed or not.
116
+ * @param {('centripetal'|'chordal'|'catmullrom')} [curveType='centripetal'] - The curve type.
117
+ * @param {number} [tension=0.5] - Tension of the curve.
118
+ */
88
119
  constructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {
89
120
 
90
121
  super();
91
122
 
123
+ /**
124
+ * This flag can be used for type testing.
125
+ *
126
+ * @type {boolean}
127
+ * @readonly
128
+ * @default true
129
+ */
92
130
  this.isCatmullRomCurve3 = true;
93
131
 
94
132
  this.type = 'CatmullRomCurve3';
95
133
 
134
+ /**
135
+ * An array of 3D points defining the curve.
136
+ *
137
+ * @type {Array<Vector3>}
138
+ */
96
139
  this.points = points;
140
+
141
+ /**
142
+ * Whether the curve is closed or not.
143
+ *
144
+ * @type {boolean}
145
+ * @default false
146
+ */
97
147
  this.closed = closed;
148
+
149
+ /**
150
+ * The curve type.
151
+ *
152
+ * @type {('centripetal'|'chordal'|'catmullrom')}
153
+ * @default 'centripetal'
154
+ */
98
155
  this.curveType = curveType;
156
+
157
+ /**
158
+ * Tension of the curve.
159
+ *
160
+ * @type {number}
161
+ * @default 0.5
162
+ */
99
163
  this.tension = tension;
100
164
 
101
165
  }
102
166
 
167
+ /**
168
+ * Returns a point on the curve.
169
+ *
170
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
171
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
172
+ * @return {Vector3} The position on the curve.
173
+ */
103
174
  getPoint( t, optionalTarget = new Vector3() ) {
104
175
 
105
176
  const point = optionalTarget;
@@ -2,23 +2,90 @@ import { Curve } from '../core/Curve.js';
2
2
  import { CubicBezier } from '../core/Interpolations.js';
3
3
  import { Vector2 } from '../../math/Vector2.js';
4
4
 
5
+ /**
6
+ * A curve representing a 2D Cubic Bezier curve.
7
+ *
8
+ * ```js
9
+ * const curve = new THREE.CubicBezierCurve(
10
+ * new THREE.Vector2( - 0, 0 ),
11
+ * new THREE.Vector2( - 5, 15 ),
12
+ * new THREE.Vector2( 20, 15 ),
13
+ * new THREE.Vector2( 10, 0 )
14
+ * );
15
+ *
16
+ * const points = curve.getPoints( 50 );
17
+ * const geometry = new THREE.BufferGeometry().setFromPoints( points );
18
+ *
19
+ * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
20
+ *
21
+ * // Create the final object to add to the scene
22
+ * const curveObject = new THREE.Line( geometry, material );
23
+ * ```
24
+ *
25
+ * @augments Curve
26
+ */
5
27
  class CubicBezierCurve extends Curve {
6
28
 
29
+ /**
30
+ * Constructs a new Cubic Bezier curve.
31
+ *
32
+ * @param {Vector2} [v0] - The start point.
33
+ * @param {Vector2} [v1] - The first control point.
34
+ * @param {Vector2} [v2] - The second control point.
35
+ * @param {Vector2} [v3] - The end point.
36
+ */
7
37
  constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {
8
38
 
9
39
  super();
10
40
 
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
11
48
  this.isCubicBezierCurve = true;
12
49
 
13
50
  this.type = 'CubicBezierCurve';
14
51
 
52
+ /**
53
+ * The start point.
54
+ *
55
+ * @type {Vector2}
56
+ */
15
57
  this.v0 = v0;
58
+
59
+ /**
60
+ * The first control point.
61
+ *
62
+ * @type {Vector2}
63
+ */
16
64
  this.v1 = v1;
65
+
66
+ /**
67
+ * The second control point.
68
+ *
69
+ * @type {Vector2}
70
+ */
17
71
  this.v2 = v2;
72
+
73
+ /**
74
+ * The end point.
75
+ *
76
+ * @type {Vector2}
77
+ */
18
78
  this.v3 = v3;
19
79
 
20
80
  }
21
81
 
82
+ /**
83
+ * Returns a point on the curve.
84
+ *
85
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
86
+ * @param {Vector2} [optionalTarget] - The optional target vector the result is written to.
87
+ * @return {Vector2} The position on the curve.
88
+ */
22
89
  getPoint( t, optionalTarget = new Vector2() ) {
23
90
 
24
91
  const point = optionalTarget;