@plastic-software/three 0.174.0 → 0.175.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,11 +1,16 @@
1
1
  import { Quaternion } from '../math/Quaternion.js';
2
2
  import { AdditiveAnimationBlendMode } from '../constants.js';
3
3
 
4
- // converts an array to a specific type
5
- function convertArray( array, type, forceClone ) {
4
+ /**
5
+ * Converts an array to a specific type.
6
+ *
7
+ * @param {TypedArray|Array} array - The array to convert.
8
+ * @param {TypedArray.constructor} type - The constructor of a typed array that defines the new type.
9
+ * @return {TypedArray} The converted array.
10
+ */
11
+ function convertArray( array, type ) {
6
12
 
7
- if ( ! array || // let 'undefined' and 'null' pass
8
- ! forceClone && array.constructor === type ) return array;
13
+ if ( ! array || array.constructor === type ) return array;
9
14
 
10
15
  if ( typeof type.BYTES_PER_ELEMENT === 'number' ) {
11
16
 
@@ -17,14 +22,24 @@ function convertArray( array, type, forceClone ) {
17
22
 
18
23
  }
19
24
 
25
+ /**
26
+ * Returns `true` if the given object is a typed array.
27
+ *
28
+ * @param {any} object - The object to check.
29
+ * @return {boolean} Whether the given object is a typed array.
30
+ */
20
31
  function isTypedArray( object ) {
21
32
 
22
- return ArrayBuffer.isView( object ) &&
23
- ! ( object instanceof DataView );
33
+ return ArrayBuffer.isView( object ) && ! ( object instanceof DataView );
24
34
 
25
35
  }
26
36
 
27
- // returns an array by which times and values can be sorted
37
+ /**
38
+ * Returns an array by which times and values can be sorted.
39
+ *
40
+ * @param {Array<number>} times - The keyframe time values.
41
+ * @return {Array<number>} The array.
42
+ */
28
43
  function getKeyframeOrder( times ) {
29
44
 
30
45
  function compareTime( i, j ) {
@@ -43,7 +58,14 @@ function getKeyframeOrder( times ) {
43
58
 
44
59
  }
45
60
 
46
- // uses the array previously returned by 'getKeyframeOrder' to sort data
61
+ /**
62
+ * Sorts the given array by the previously computed order via `getKeyframeOrder()`.
63
+ *
64
+ * @param {Array<number>} values - The values to sort.
65
+ * @param {number} stride - The stride.
66
+ * @param {Array<number>} order - The sort order.
67
+ * @return {Array<number>} The sorted values.
68
+ */
47
69
  function sortedArray( values, stride, order ) {
48
70
 
49
71
  const nValues = values.length;
@@ -65,7 +87,14 @@ function sortedArray( values, stride, order ) {
65
87
 
66
88
  }
67
89
 
68
- // function for parsing AOS keyframe formats
90
+ /**
91
+ * Used for parsing AOS keyframe formats.
92
+ *
93
+ * @param {Array<number>} jsonKeys - A list of JSON keyframes.
94
+ * @param {Array<number>} times - This array will be filled with keyframe times by this function.
95
+ * @param {Array<number>} values - This array will be filled with keyframe values by this function.
96
+ * @param {string} valuePropertyName - The name of the property to use.
97
+ */
69
98
  function flattenJSON( jsonKeys, times, values, valuePropertyName ) {
70
99
 
71
100
  let i = 1, key = jsonKeys[ 0 ];
@@ -140,6 +169,16 @@ function flattenJSON( jsonKeys, times, values, valuePropertyName ) {
140
169
 
141
170
  }
142
171
 
172
+ /**
173
+ * Creates a new clip, containing only the segment of the original clip between the given frames.
174
+ *
175
+ * @param {AnimationClip} sourceClip - The values to sort.
176
+ * @param {string} name - The name of the clip.
177
+ * @param {number} startFrame - The start frame.
178
+ * @param {number} endFrame - The end frame.
179
+ * @param {number} [fps=30] - The FPS.
180
+ * @return {AnimationClip} The new sub clip.
181
+ */
143
182
  function subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
144
183
 
145
184
  const clip = sourceClip.clone();
@@ -211,6 +250,15 @@ function subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
211
250
 
212
251
  }
213
252
 
253
+ /**
254
+ * Converts the keyframes of the given animation clip to an additive format.
255
+ *
256
+ * @param {AnimationClip} targetClip - The clip to make additive.
257
+ * @param {number} [referenceFrame=0] - The reference frame.
258
+ * @param {AnimationClip} [referenceClip=targetClip] - The reference clip.
259
+ * @param {number} [fps=30] - The FPS.
260
+ * @return {AnimationClip} The updated clip which is now additive.
261
+ */
214
262
  function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {
215
263
 
216
264
  if ( fps <= 0 ) fps = 30;
@@ -334,15 +382,117 @@ function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targe
334
382
 
335
383
  }
336
384
 
337
- const AnimationUtils = {
338
- convertArray: convertArray,
339
- isTypedArray: isTypedArray,
340
- getKeyframeOrder: getKeyframeOrder,
341
- sortedArray: sortedArray,
342
- flattenJSON: flattenJSON,
343
- subclip: subclip,
344
- makeClipAdditive: makeClipAdditive
345
- };
385
+ /**
386
+ * A class with various methods to assist with animations.
387
+ *
388
+ * @hideconstructor
389
+ */
390
+ class AnimationUtils {
391
+
392
+ /**
393
+ * Converts an array to a specific type
394
+ *
395
+ * @static
396
+ * @param {TypedArray|Array} array - The array to convert.
397
+ * @param {TypedArray.constructor} type - The constructor of a type array.
398
+ * @return {TypedArray} The converted array
399
+ */
400
+ static convertArray( array, type ) {
401
+
402
+ return convertArray( array, type );
403
+
404
+ }
405
+
406
+ /**
407
+ * Returns `true` if the given object is a typed array.
408
+ *
409
+ * @static
410
+ * @param {any} object - The object to check.
411
+ * @return {boolean} Whether the given object is a typed array.
412
+ */
413
+ static isTypedArray( object ) {
414
+
415
+ return isTypedArray( object );
416
+
417
+ }
418
+
419
+ /**
420
+ * Returns an array by which times and values can be sorted.
421
+ *
422
+ * @static
423
+ * @param {Array<number>} times - The keyframe time values.
424
+ * @return {Array<number>} The array.
425
+ */
426
+ static getKeyframeOrder( times ) {
427
+
428
+ return getKeyframeOrder( times );
429
+
430
+ }
431
+
432
+ /**
433
+ * Sorts the given array by the previously computed order via `getKeyframeOrder()`.
434
+ *
435
+ * @static
436
+ * @param {Array<number>} values - The values to sort.
437
+ * @param {number} stride - The stride.
438
+ * @param {Array<number>} order - The sort order.
439
+ * @return {Array<number>} The sorted values.
440
+ */
441
+ static sortedArray( values, stride, order ) {
442
+
443
+ return sortedArray( values, stride, order );
444
+
445
+ }
446
+
447
+ /**
448
+ * Used for parsing AOS keyframe formats.
449
+ *
450
+ * @static
451
+ * @param {Array<number>} jsonKeys - A list of JSON keyframes.
452
+ * @param {Array<number>} times - This array will be filled with keyframe times by this method.
453
+ * @param {Array<number>} values - This array will be filled with keyframe values by this method.
454
+ * @param {string} valuePropertyName - The name of the property to use.
455
+ */
456
+ static flattenJSON( jsonKeys, times, values, valuePropertyName ) {
457
+
458
+ flattenJSON( jsonKeys, times, values, valuePropertyName );
459
+
460
+ }
461
+
462
+ /**
463
+ * Creates a new clip, containing only the segment of the original clip between the given frames.
464
+ *
465
+ * @static
466
+ * @param {AnimationClip} sourceClip - The values to sort.
467
+ * @param {string} name - The name of the clip.
468
+ * @param {number} startFrame - The start frame.
469
+ * @param {number} endFrame - The end frame.
470
+ * @param {number} [fps=30] - The FPS.
471
+ * @return {AnimationClip} The new sub clip.
472
+ */
473
+ static subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
474
+
475
+ return subclip( sourceClip, name, startFrame, endFrame, fps );
476
+
477
+ }
478
+
479
+ /**
480
+ * Converts the keyframes of the given animation clip to an additive format.
481
+ *
482
+ * @static
483
+ * @param {AnimationClip} targetClip - The clip to make additive.
484
+ * @param {number} [referenceFrame=0] - The reference frame.
485
+ * @param {AnimationClip} [referenceClip=targetClip] - The reference clip.
486
+ * @param {number} [fps=30] - The FPS.
487
+ * @return {AnimationClip} The updated clip which is now additive.
488
+ */
489
+ static makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {
490
+
491
+ return makeClipAdditive( targetClip, referenceFrame, referenceClip, fps );
492
+
493
+ }
494
+
495
+ }
346
496
 
347
497
  export {
348
498
  convertArray,
@@ -8,25 +8,60 @@ import { LinearInterpolant } from '../math/interpolants/LinearInterpolant.js';
8
8
  import { DiscreteInterpolant } from '../math/interpolants/DiscreteInterpolant.js';
9
9
  import * as AnimationUtils from './AnimationUtils.js';
10
10
 
11
+ /**
12
+ * Represents s a timed sequence of keyframes, which are composed of lists of
13
+ * times and related values, and which are used to animate a specific property
14
+ * of an object.
15
+ */
11
16
  class KeyframeTrack {
12
17
 
18
+ /**
19
+ * Constructs a new keyframe track.
20
+ *
21
+ * @param {string} name - The keyframe track's name.
22
+ * @param {Array<number>} times - A list of keyframe times.
23
+ * @param {Array<number>} values - A list of keyframe values.
24
+ * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} [interpolation] - The interpolation type.
25
+ */
13
26
  constructor( name, times, values, interpolation ) {
14
27
 
15
28
  if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );
16
29
  if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );
17
30
 
31
+ /**
32
+ * The track's name can refer to morph targets or bones or
33
+ * possibly other values within an animated object. See {@link PropertyBinding#parseTrackName}
34
+ * for the forms of strings that can be parsed for property binding.
35
+ *
36
+ * @type {string}
37
+ */
18
38
  this.name = name;
19
39
 
40
+ /**
41
+ * The keyframe times.
42
+ *
43
+ * @type {Float32Array}
44
+ */
20
45
  this.times = AnimationUtils.convertArray( times, this.TimeBufferType );
46
+
47
+ /**
48
+ * The keyframe values.
49
+ *
50
+ * @type {Float32Array}
51
+ */
21
52
  this.values = AnimationUtils.convertArray( values, this.ValueBufferType );
22
53
 
23
54
  this.setInterpolation( interpolation || this.DefaultInterpolation );
24
55
 
25
56
  }
26
57
 
27
- // Serialization (in static context, because of constructor invocation
28
- // and automatic invocation of .toJSON):
29
-
58
+ /**
59
+ * Converts the keyframe track to JSON.
60
+ *
61
+ * @static
62
+ * @param {KeyframeTrack} track - The keyframe track to serialize.
63
+ * @return {Object} The serialized keyframe track as JSON.
64
+ */
30
65
  static toJSON( track ) {
31
66
 
32
67
  const trackType = track.constructor;
@@ -65,24 +100,51 @@ class KeyframeTrack {
65
100
 
66
101
  }
67
102
 
103
+ /**
104
+ * Factory method for creating a new discrete interpolant.
105
+ *
106
+ * @static
107
+ * @param {TypedArray} [result] - The result buffer.
108
+ * @return {DiscreteInterpolant} The new interpolant.
109
+ */
68
110
  InterpolantFactoryMethodDiscrete( result ) {
69
111
 
70
112
  return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );
71
113
 
72
114
  }
73
115
 
116
+ /**
117
+ * Factory method for creating a new linear interpolant.
118
+ *
119
+ * @static
120
+ * @param {TypedArray} [result] - The result buffer.
121
+ * @return {LinearInterpolant} The new interpolant.
122
+ */
74
123
  InterpolantFactoryMethodLinear( result ) {
75
124
 
76
125
  return new LinearInterpolant( this.times, this.values, this.getValueSize(), result );
77
126
 
78
127
  }
79
128
 
129
+ /**
130
+ * Factory method for creating a new smooth interpolant.
131
+ *
132
+ * @static
133
+ * @param {TypedArray} [result] - The result buffer.
134
+ * @return {CubicInterpolant} The new interpolant.
135
+ */
80
136
  InterpolantFactoryMethodSmooth( result ) {
81
137
 
82
138
  return new CubicInterpolant( this.times, this.values, this.getValueSize(), result );
83
139
 
84
140
  }
85
141
 
142
+ /**
143
+ * Defines the interpolation factor method for this keyframe track.
144
+ *
145
+ * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} interpolation - The interpolation type.
146
+ * @return {KeyframeTrack} A reference to this keyframe track.
147
+ */
86
148
  setInterpolation( interpolation ) {
87
149
 
88
150
  let factoryMethod;
@@ -140,6 +202,11 @@ class KeyframeTrack {
140
202
 
141
203
  }
142
204
 
205
+ /**
206
+ * Returns the current interpolation type.
207
+ *
208
+ * @return {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} The interpolation type.
209
+ */
143
210
  getInterpolation() {
144
211
 
145
212
  switch ( this.createInterpolant ) {
@@ -160,13 +227,23 @@ class KeyframeTrack {
160
227
 
161
228
  }
162
229
 
230
+ /**
231
+ * Returns the value size.
232
+ *
233
+ * @return {number} The value size.
234
+ */
163
235
  getValueSize() {
164
236
 
165
237
  return this.values.length / this.times.length;
166
238
 
167
239
  }
168
240
 
169
- // move all keyframes either forwards or backwards in time
241
+ /**
242
+ * Moves all keyframes either forward or backward in time.
243
+ *
244
+ * @param {number} timeOffset - The offset to move the time values.
245
+ * @return {KeyframeTrack} A reference to this keyframe track.
246
+ */
170
247
  shift( timeOffset ) {
171
248
 
172
249
  if ( timeOffset !== 0.0 ) {
@@ -185,7 +262,12 @@ class KeyframeTrack {
185
262
 
186
263
  }
187
264
 
188
- // scale all keyframe times by a factor (useful for frame <-> seconds conversions)
265
+ /**
266
+ * Scale all keyframe times by a factor (useful for frame - seconds conversions).
267
+ *
268
+ * @param {number} timeScale - The time scale.
269
+ * @return {KeyframeTrack} A reference to this keyframe track.
270
+ */
189
271
  scale( timeScale ) {
190
272
 
191
273
  if ( timeScale !== 1.0 ) {
@@ -204,8 +286,16 @@ class KeyframeTrack {
204
286
 
205
287
  }
206
288
 
207
- // removes keyframes before and after animation without changing any values within the range [startTime, endTime].
208
- // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values
289
+ /**
290
+ * Removes keyframes before and after animation without changing any values within the defined time range.
291
+ *
292
+ * Note: The method does not shift around keys to the start of the track time, because for interpolated
293
+ * keys this will change their values
294
+ *
295
+ * @param {number} startTime - The start time.
296
+ * @param {number} endTime - The end time.
297
+ * @return {KeyframeTrack} A reference to this keyframe track.
298
+ */
209
299
  trim( startTime, endTime ) {
210
300
 
211
301
  const times = this.times,
@@ -248,7 +338,12 @@ class KeyframeTrack {
248
338
 
249
339
  }
250
340
 
251
- // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable
341
+ /**
342
+ * Performs minimal validation on the keyframe track. Returns `true` if the values
343
+ * are valid.
344
+ *
345
+ * @return {boolean} Whether the keyframes are valid or not.
346
+ */
252
347
  validate() {
253
348
 
254
349
  let valid = true;
@@ -325,10 +420,16 @@ class KeyframeTrack {
325
420
 
326
421
  }
327
422
 
328
- // removes equivalent sequential keys as common in morph target sequences
329
- // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)
423
+ /**
424
+ * Optimizes this keyframe track by removing equivalent sequential keys (which are
425
+ * common in morph target sequences).
426
+ *
427
+ * @return {AnimationClip} A reference to this animation clip.
428
+ */
330
429
  optimize() {
331
430
 
431
+ // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)
432
+
332
433
  // times or values may be shared with other tracks, so overwriting is unsafe
333
434
  const times = this.times.slice(),
334
435
  values = this.values.slice(),
@@ -438,6 +539,11 @@ class KeyframeTrack {
438
539
 
439
540
  }
440
541
 
542
+ /**
543
+ * Returns a new keyframe track with copied values from this instance.
544
+ *
545
+ * @return {KeyframeTrack} A clone of this instance.
546
+ */
441
547
  clone() {
442
548
 
443
549
  const times = this.times.slice();
@@ -455,8 +561,36 @@ class KeyframeTrack {
455
561
 
456
562
  }
457
563
 
564
+ /**
565
+ * The value type name.
566
+ *
567
+ * @type {String}
568
+ * @default ''
569
+ */
570
+ KeyframeTrack.prototype.ValueTypeName = '';
571
+
572
+ /**
573
+ * The time buffer type of this keyframe track.
574
+ *
575
+ * @type {TypedArray|Array}
576
+ * @default Float32Array.constructor
577
+ */
458
578
  KeyframeTrack.prototype.TimeBufferType = Float32Array;
579
+
580
+ /**
581
+ * The value buffer type of this keyframe track.
582
+ *
583
+ * @type {TypedArray|Array}
584
+ * @default Float32Array.constructor
585
+ */
459
586
  KeyframeTrack.prototype.ValueBufferType = Float32Array;
587
+
588
+ /**
589
+ * The default interpolation type of this keyframe track.
590
+ *
591
+ * @type {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)}
592
+ * @default InterpolateLinear
593
+ */
460
594
  KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;
461
595
 
462
596
  export { KeyframeTrack };
@@ -100,15 +100,48 @@ class Composite {
100
100
  // prototype version of these methods with one that represents
101
101
  // the bound state. When the property is not found, the methods
102
102
  // become no-ops.
103
+
104
+
105
+ /**
106
+ * This holds a reference to a real property in the scene graph; used internally.
107
+ */
103
108
  class PropertyBinding {
104
109
 
110
+ /**
111
+ * Constructs a new property binding.
112
+ *
113
+ * @param {Object} rootNode - The root node.
114
+ * @param {string} path - The path.
115
+ * @param {?Object} [parsedPath] - The parsed path.
116
+ */
105
117
  constructor( rootNode, path, parsedPath ) {
106
118
 
119
+ /**
120
+ * The object path to the animated property.
121
+ *
122
+ * @type {string}
123
+ */
107
124
  this.path = path;
125
+
126
+ /**
127
+ * An object holding information about the path.
128
+ *
129
+ * @type {Object}
130
+ */
108
131
  this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );
109
132
 
133
+ /**
134
+ * The object owns the animated property.
135
+ *
136
+ * @type {?Object}
137
+ */
110
138
  this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );
111
139
 
140
+ /**
141
+ * The root node.
142
+ *
143
+ * @type {Object3D|Skeleton}
144
+ */
112
145
  this.rootNode = rootNode;
113
146
 
114
147
  // initial state of these methods that calls 'bind'
@@ -118,6 +151,15 @@ class PropertyBinding {
118
151
  }
119
152
 
120
153
 
154
+ /**
155
+ * Factory method for creating a property binding from the given parameters.
156
+ *
157
+ * @static
158
+ * @param {Object} root - The root node.
159
+ * @param {string} path - The path.
160
+ * @param {?Object} [parsedPath] - The parsed path.
161
+ * @return {PropertyBinding|Composite} The created property binding or composite.
162
+ */
121
163
  static create( root, path, parsedPath ) {
122
164
 
123
165
  if ( ! ( root && root.isAnimationObjectGroup ) ) {
@@ -136,8 +178,8 @@ class PropertyBinding {
136
178
  * Replaces spaces with underscores and removes unsupported characters from
137
179
  * node names, to ensure compatibility with parseTrackName().
138
180
  *
139
- * @param {string} name Node name to be sanitized.
140
- * @return {string}
181
+ * @param {string} name - Node name to be sanitized.
182
+ * @return {string} The sanitized node name.
141
183
  */
142
184
  static sanitizeNodeName( name ) {
143
185
 
@@ -145,6 +187,24 @@ class PropertyBinding {
145
187
 
146
188
  }
147
189
 
190
+ /**
191
+ * Parses the given track name (an object path to an animated property) and
192
+ * returns an object with information about the path. Matches strings in the following forms:
193
+ *
194
+ * - nodeName.property
195
+ * - nodeName.property[accessor]
196
+ * - nodeName.material.property[accessor]
197
+ * - uuid.property[accessor]
198
+ * - uuid.objectName[objectIndex].propertyName[propertyIndex]
199
+ * - parentName/nodeName.property
200
+ * - parentName/parentName/nodeName.property[index]
201
+ * - .bone[Armature.DEF_cog].position
202
+ * - scene:helium_balloon_model:helium_balloon_model.position
203
+ *
204
+ * @static
205
+ * @param {string} trackName - The track name to parse.
206
+ * @return {Object} The parsed track name as an object.
207
+ */
148
208
  static parseTrackName( trackName ) {
149
209
 
150
210
  const matches = _trackRe.exec( trackName );
@@ -193,6 +253,15 @@ class PropertyBinding {
193
253
 
194
254
  }
195
255
 
256
+ /**
257
+ * Searches for a node in the hierarchy of the given root object by the given
258
+ * node name.
259
+ *
260
+ * @static
261
+ * @param {Object} root - The root object.
262
+ * @param {string|number} nodeName - The name of the node.
263
+ * @return {?Object} The found node. Returns `null` if no object was found.
264
+ */
196
265
  static findNode( root, nodeName ) {
197
266
 
198
267
  if ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {
@@ -411,7 +480,9 @@ class PropertyBinding {
411
480
 
412
481
  }
413
482
 
414
- // create getter / setter pair for a property in the scene graph
483
+ /**
484
+ * Creates a getter / setter pair for the property tracked by this binding.
485
+ */
415
486
  bind() {
416
487
 
417
488
  let targetObject = this.node;
@@ -644,6 +715,9 @@ class PropertyBinding {
644
715
 
645
716
  }
646
717
 
718
+ /**
719
+ * Unbinds the property.
720
+ */
647
721
  unbind() {
648
722
 
649
723
  this.node = null;