@plastic-software/three 0.174.0 → 0.175.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -24,7 +24,8 @@ import {
24
24
  CompressedTexture,
25
25
  Vector3,
26
26
  Quaternion,
27
- REVISION
27
+ REVISION,
28
+ ImageUtils
28
29
  } from 'three';
29
30
 
30
31
  /**
@@ -61,11 +62,55 @@ const KHR_mesh_quantization_ExtraAttrTypes = {
61
62
  ],
62
63
  };
63
64
 
64
-
65
+ /**
66
+ * An exporter for `glTF` 2.0.
67
+ *
68
+ * glTF (GL Transmission Format) is an [open format specification]{@link https://github.com/KhronosGroup/glTF/tree/master/specification/2.0}
69
+ * for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf)
70
+ * or binary (.glb) format. External files store textures (.jpg, .png) and additional binary
71
+ * data (.bin). A glTF asset may deliver one or more scenes, including meshes, materials,
72
+ * textures, skins, skeletons, morph targets, animations, lights, and/or cameras.
73
+ *
74
+ * GLTFExporter supports the [glTF 2.0 extensions]{@link https://github.com/KhronosGroup/glTF/tree/master/extensions/}:
75
+ *
76
+ * - KHR_lights_punctual
77
+ * - KHR_materials_clearcoat
78
+ * - KHR_materials_dispersion
79
+ * - KHR_materials_emissive_strength
80
+ * - KHR_materials_ior
81
+ * - KHR_materials_iridescence
82
+ * - KHR_materials_specular
83
+ * - KHR_materials_sheen
84
+ * - KHR_materials_transmission
85
+ * - KHR_materials_unlit
86
+ * - KHR_materials_volume
87
+ * - KHR_mesh_quantization
88
+ * - KHR_texture_transform
89
+ * - EXT_materials_bump
90
+ * - EXT_mesh_gpu_instancing
91
+ *
92
+ * The following glTF 2.0 extension is supported by an external user plugin:
93
+ *
94
+ * - [KHR_materials_variants]{@link https://github.com/takahirox/three-gltf-extensions}
95
+ *
96
+ * ```js
97
+ * const exporter = new GLTFExporter();
98
+ * const data = await exporter.parseAsync( scene, options );
99
+ * ```
100
+ */
65
101
  class GLTFExporter {
66
102
 
103
+ /**
104
+ * Constructs a new glTF exporter.
105
+ */
67
106
  constructor() {
68
107
 
108
+ /**
109
+ * A reference to a texture utils module.
110
+ *
111
+ * @type {?(WebGLTextureUtils|WebGPUTextureUtils)}
112
+ * @default null
113
+ */
69
114
  this.textureUtils = null;
70
115
 
71
116
  this.pluginCallbacks = [];
@@ -156,6 +201,14 @@ class GLTFExporter {
156
201
 
157
202
  }
158
203
 
204
+ /**
205
+ * Registers a plugin callback. This API is internally used to implement the various
206
+ * glTF extensions but can also used by third-party code to add additional logic
207
+ * to the exporter.
208
+ *
209
+ * @param {function(writer:GLTFWriter)} callback - The callback function to register.
210
+ * @return {GLTFExporter} A reference to this exporter.
211
+ */
159
212
  register( callback ) {
160
213
 
161
214
  if ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {
@@ -168,6 +221,12 @@ class GLTFExporter {
168
221
 
169
222
  }
170
223
 
224
+ /**
225
+ * Unregisters a plugin callback.
226
+ *
227
+ * @param {Function} callback - The callback function to unregister.
228
+ * @return {GLTFExporter} A reference to this exporter.
229
+ */
171
230
  unregister( callback ) {
172
231
 
173
232
  if ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {
@@ -180,6 +239,15 @@ class GLTFExporter {
180
239
 
181
240
  }
182
241
 
242
+ /**
243
+ * Sets the texture utils for this exporter. Only relevant when compressed textures have to be exported.
244
+ *
245
+ * Depending on whether you use {@link WebGLRenderer} or {@link WebGPURenderer}, you must inject the
246
+ * corresponding texture utils {@link WebGLTextureUtils} or {@link WebGPUTextureUtils}.
247
+ *
248
+ * @param {WebGLTextureUtils|WebGPUTextureUtils} utils - The texture utils.
249
+ * @return {GLTFExporter} A reference to this exporter.
250
+ */
183
251
  setTextureUtils( utils ) {
184
252
 
185
253
  this.textureUtils = utils;
@@ -189,12 +257,12 @@ class GLTFExporter {
189
257
  }
190
258
 
191
259
  /**
192
- * Parse scenes and generate GLTF output
260
+ * Parses the given scenes and generates the glTF output.
193
261
  *
194
- * @param {Scene|Array<Scene>} input Scene or Array of THREE.Scenes
195
- * @param {Function} onDone Callback on completed
196
- * @param {Function} onError Callback on errors
197
- * @param {Object} options options
262
+ * @param {Scene|Array<Scene>} input - A scene or an array of scenes.
263
+ * @param {GLTFExporter~OnDone} onDone - A callback function that is executed when the export has finished.
264
+ * @param {GLTFExporter~OnError} onError - A callback function that is executed when an error happens.
265
+ * @param {GLTFExporter~Options} options - options
198
266
  */
199
267
  parse( input, onDone, onError, options ) {
200
268
 
@@ -213,6 +281,13 @@ class GLTFExporter {
213
281
 
214
282
  }
215
283
 
284
+ /**
285
+ * Async version of {@link GLTFExporter#parse}.
286
+ *
287
+ * @param {Scene|Array<Scene>} input - A scene or an array of scenes.
288
+ * @param {GLTFExporter~Options} options - options.
289
+ * @return {Promise<ArrayBuffer|string>} A Promise that resolved with the exported glTF data.
290
+ */
216
291
  parseAsync( input, options ) {
217
292
 
218
293
  const scope = this;
@@ -304,8 +379,10 @@ const GLB_CHUNK_TYPE_BIN = 0x004E4942;
304
379
 
305
380
  /**
306
381
  * Compare two arrays
307
- * @param {Array} array1 Array 1 to compare
308
- * @param {Array} array2 Array 2 to compare
382
+ *
383
+ * @private
384
+ * @param {Array} array1 Array 1 to compare
385
+ * @param {Array} array2 Array 2 to compare
309
386
  * @return {boolean} Returns true if both arrays are equal
310
387
  */
311
388
  function equalArray( array1, array2 ) {
@@ -320,7 +397,9 @@ function equalArray( array1, array2 ) {
320
397
 
321
398
  /**
322
399
  * Converts a string to an ArrayBuffer.
323
- * @param {string} text
400
+ *
401
+ * @private
402
+ * @param {string} text
324
403
  * @return {ArrayBuffer}
325
404
  */
326
405
  function stringToArrayBuffer( text ) {
@@ -332,6 +411,7 @@ function stringToArrayBuffer( text ) {
332
411
  /**
333
412
  * Is identity matrix
334
413
  *
414
+ * @private
335
415
  * @param {Matrix4} matrix
336
416
  * @returns {boolean} Returns true, if parameter is identity matrix
337
417
  */
@@ -344,9 +424,10 @@ function isIdentityMatrix( matrix ) {
344
424
  /**
345
425
  * Get the min and max vectors from the given attribute
346
426
  *
347
- * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count
348
- * @param {number} start Start index
349
- * @param {number} count Range to cover
427
+ * @private
428
+ * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count
429
+ * @param {number} start Start index
430
+ * @param {number} count Range to cover
350
431
  * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)
351
432
  */
352
433
  function getMinMax( attribute, start, count ) {
@@ -400,6 +481,7 @@ function getMinMax( attribute, start, count ) {
400
481
  * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.
401
482
  * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment
402
483
  *
484
+ * @private
403
485
  * @param {number} bufferSize The size the original buffer. Should be an integer.
404
486
  * @returns {number} new buffer size with required padding as an integer.
405
487
  *
@@ -413,6 +495,7 @@ function getPaddedBufferSize( bufferSize ) {
413
495
  /**
414
496
  * Returns a buffer aligned to 4-byte boundary.
415
497
  *
498
+ * @private
416
499
  * @param {ArrayBuffer} arrayBuffer Buffer to pad
417
500
  * @param {number} [paddingByte=0] Should be an integer
418
501
  * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer
@@ -489,6 +572,8 @@ function getToBlobPromise( canvas, mimeType ) {
489
572
 
490
573
  /**
491
574
  * Writer
575
+ *
576
+ * @private
492
577
  */
493
578
  class GLTFWriter {
494
579
 
@@ -713,7 +798,7 @@ class GLTFWriter {
713
798
  /**
714
799
  * Returns ids for buffer attributes.
715
800
  *
716
- * @param {Object} attribute
801
+ * @param {Object} attribute
717
802
  * @param {boolean} [isRelativeCopy=false]
718
803
  * @return {number} An integer
719
804
  */
@@ -968,7 +1053,7 @@ class GLTFWriter {
968
1053
 
969
1054
  /**
970
1055
  * Process a buffer to append to the default one.
971
- * @param {ArrayBuffer} buffer
1056
+ * @param {ArrayBuffer} buffer
972
1057
  * @return {0}
973
1058
  */
974
1059
  processBuffer( buffer ) {
@@ -991,7 +1076,7 @@ class GLTFWriter {
991
1076
  * @param {number} componentType
992
1077
  * @param {number} start
993
1078
  * @param {number} count
994
- * @param {?number} target Target usage of the BufferView
1079
+ * @param {number} [target] Target usage of the BufferView
995
1080
  * @return {Object}
996
1081
  */
997
1082
  processBufferView( attribute, componentType, start, count, target ) {
@@ -1180,7 +1265,7 @@ class GLTFWriter {
1180
1265
  /**
1181
1266
  * Process attribute to generate an accessor
1182
1267
  * @param {BufferAttribute} attribute Attribute to process
1183
- * @param {?BufferGeometry} geometry Geometry used for truncated draw range
1268
+ * @param {?BufferGeometry} [geometry] Geometry used for truncated draw range
1184
1269
  * @param {number} [start=0]
1185
1270
  * @param {number} [count=Infinity]
1186
1271
  * @return {?number} Index of the processed accessor on the "accessors" array
@@ -1277,10 +1362,10 @@ class GLTFWriter {
1277
1362
 
1278
1363
  /**
1279
1364
  * Process image
1280
- * @param {Image} image to process
1281
- * @param {number} format Identifier of the format (RGBAFormat)
1282
- * @param {boolean} flipY before writing out the image
1283
- * @param {string} mimeType export format
1365
+ * @param {Image} image to process
1366
+ * @param {number} format Identifier of the format (RGBAFormat)
1367
+ * @param {boolean} flipY before writing out the image
1368
+ * @param {string} mimeType export format
1284
1369
  * @return {number} Index of the processed texture in the "images" array
1285
1370
  */
1286
1371
  processImage( image, format, flipY, mimeType = 'image/png' ) {
@@ -1381,25 +1466,7 @@ class GLTFWriter {
1381
1466
 
1382
1467
  } else {
1383
1468
 
1384
- if ( canvas.toDataURL !== undefined ) {
1385
-
1386
- imageDef.uri = canvas.toDataURL( mimeType );
1387
-
1388
- } else {
1389
-
1390
- pending.push(
1391
-
1392
- getToBlobPromise( canvas, mimeType )
1393
- .then( blob => new FileReader().readAsDataURL( blob ) )
1394
- .then( dataURL => {
1395
-
1396
- imageDef.uri = dataURL;
1397
-
1398
- } )
1399
-
1400
- );
1401
-
1402
- }
1469
+ imageDef.uri = ImageUtils.getDataURL( canvas, mimeType );
1403
1470
 
1404
1471
  }
1405
1472
 
@@ -1417,7 +1484,7 @@ class GLTFWriter {
1417
1484
 
1418
1485
  /**
1419
1486
  * Process sampler
1420
- * @param {Texture} map Texture to process
1487
+ * @param {Texture} map Texture to process
1421
1488
  * @return {number} Index of the processed texture in the "samplers" array
1422
1489
  */
1423
1490
  processSampler( map ) {
@@ -1439,7 +1506,7 @@ class GLTFWriter {
1439
1506
 
1440
1507
  /**
1441
1508
  * Process texture
1442
- * @param {Texture} map Map to process
1509
+ * @param {Texture} map Map to process
1443
1510
  * @return {Promise<number>} Index of the processed texture in the "textures" array
1444
1511
  */
1445
1512
  async processTextureAsync( map ) {
@@ -1485,7 +1552,7 @@ class GLTFWriter {
1485
1552
 
1486
1553
  /**
1487
1554
  * Process material
1488
- * @param {THREE.Material} material Material to process
1555
+ * @param {THREE.Material} material Material to process
1489
1556
  * @return {Promise<number|null>} Index of the processed material in the "materials" array
1490
1557
  */
1491
1558
  async processMaterialAsync( material ) {
@@ -1661,7 +1728,7 @@ class GLTFWriter {
1661
1728
 
1662
1729
  /**
1663
1730
  * Process mesh
1664
- * @param {THREE.Mesh} mesh Mesh to process
1731
+ * @param {THREE.Mesh} mesh Mesh to process
1665
1732
  * @return {Promise<number|null>} Index of the processed mesh in the "meshes" array
1666
1733
  */
1667
1734
  async processMeshAsync( mesh ) {
@@ -2066,7 +2133,7 @@ class GLTFWriter {
2066
2133
 
2067
2134
  /**
2068
2135
  * Process camera
2069
- * @param {THREE.Camera} camera Camera to process
2136
+ * @param {THREE.Camera} camera Camera to process
2070
2137
  * @return {number} Index of the processed mesh in the "camera" array
2071
2138
  */
2072
2139
  processCamera( camera ) {
@@ -2267,7 +2334,7 @@ class GLTFWriter {
2267
2334
 
2268
2335
  /**
2269
2336
  * Process Object3D node
2270
- * @param {THREE.Object3D} object Object3D to processNodeAsync
2337
+ * @param {THREE.Object3D} object Object3D to processNodeAsync
2271
2338
  * @return {Promise<number>} Index of the node in the nodes list
2272
2339
  */
2273
2340
  async processNodeAsync( object ) {
@@ -2375,7 +2442,7 @@ class GLTFWriter {
2375
2442
 
2376
2443
  /**
2377
2444
  * Process Scene
2378
- * @param {Scene} scene Scene to process
2445
+ * @param {Scene} scene Scene to process
2379
2446
  */
2380
2447
  async processSceneAsync( scene ) {
2381
2448
 
@@ -2419,7 +2486,7 @@ class GLTFWriter {
2419
2486
 
2420
2487
  /**
2421
2488
  * Creates a Scene to hold a list of objects and parse it
2422
- * @param {Array<THREE.Object3D>} objects List of objects to process
2489
+ * @param {Array<THREE.Object3D>} objects List of objects to process
2423
2490
  */
2424
2491
  async processObjectsAsync( objects ) {
2425
2492
 
@@ -2511,6 +2578,8 @@ class GLTFWriter {
2511
2578
  * Punctual Lights Extension
2512
2579
  *
2513
2580
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual
2581
+ *
2582
+ * @private
2514
2583
  */
2515
2584
  class GLTFLightExtension {
2516
2585
 
@@ -2606,6 +2675,8 @@ class GLTFLightExtension {
2606
2675
  * Unlit Materials Extension
2607
2676
  *
2608
2677
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit
2678
+ *
2679
+ * @private
2609
2680
  */
2610
2681
  class GLTFMaterialsUnlitExtension {
2611
2682
 
@@ -2639,6 +2710,8 @@ class GLTFMaterialsUnlitExtension {
2639
2710
  * Clearcoat Materials Extension
2640
2711
  *
2641
2712
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
2713
+ *
2714
+ * @private
2642
2715
  */
2643
2716
  class GLTFMaterialsClearcoatExtension {
2644
2717
 
@@ -2712,6 +2785,8 @@ class GLTFMaterialsClearcoatExtension {
2712
2785
  * Materials dispersion Extension
2713
2786
  *
2714
2787
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_dispersion
2788
+ *
2789
+ * @private
2715
2790
  */
2716
2791
  class GLTFMaterialsDispersionExtension {
2717
2792
 
@@ -2746,6 +2821,8 @@ class GLTFMaterialsDispersionExtension {
2746
2821
  * Iridescence Materials Extension
2747
2822
  *
2748
2823
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence
2824
+ *
2825
+ * @private
2749
2826
  */
2750
2827
  class GLTFMaterialsIridescenceExtension {
2751
2828
 
@@ -2806,6 +2883,8 @@ class GLTFMaterialsIridescenceExtension {
2806
2883
  * Transmission Materials Extension
2807
2884
  *
2808
2885
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission
2886
+ *
2887
+ * @private
2809
2888
  */
2810
2889
  class GLTFMaterialsTransmissionExtension {
2811
2890
 
@@ -2851,6 +2930,8 @@ class GLTFMaterialsTransmissionExtension {
2851
2930
  * Materials Volume Extension
2852
2931
  *
2853
2932
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume
2933
+ *
2934
+ * @private
2854
2935
  */
2855
2936
  class GLTFMaterialsVolumeExtension {
2856
2937
 
@@ -2904,6 +2985,8 @@ class GLTFMaterialsVolumeExtension {
2904
2985
  * Materials ior Extension
2905
2986
  *
2906
2987
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior
2988
+ *
2989
+ * @private
2907
2990
  */
2908
2991
  class GLTFMaterialsIorExtension {
2909
2992
 
@@ -2938,6 +3021,8 @@ class GLTFMaterialsIorExtension {
2938
3021
  * Materials specular Extension
2939
3022
  *
2940
3023
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular
3024
+ *
3025
+ * @private
2941
3026
  */
2942
3027
  class GLTFMaterialsSpecularExtension {
2943
3028
 
@@ -2997,6 +3082,8 @@ class GLTFMaterialsSpecularExtension {
2997
3082
  * Sheen Materials Extension
2998
3083
  *
2999
3084
  * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
3085
+ *
3086
+ * @private
3000
3087
  */
3001
3088
  class GLTFMaterialsSheenExtension {
3002
3089
 
@@ -3054,6 +3141,8 @@ class GLTFMaterialsSheenExtension {
3054
3141
  * Anisotropy Materials Extension
3055
3142
  *
3056
3143
  * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy
3144
+ *
3145
+ * @private
3057
3146
  */
3058
3147
  class GLTFMaterialsAnisotropyExtension {
3059
3148
 
@@ -3097,6 +3186,8 @@ class GLTFMaterialsAnisotropyExtension {
3097
3186
  * Materials Emissive Strength Extension
3098
3187
  *
3099
3188
  * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md
3189
+ *
3190
+ * @private
3100
3191
  */
3101
3192
  class GLTFMaterialsEmissiveStrengthExtension {
3102
3193
 
@@ -3132,6 +3223,8 @@ class GLTFMaterialsEmissiveStrengthExtension {
3132
3223
  * Materials bump Extension
3133
3224
  *
3134
3225
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump
3226
+ *
3227
+ * @private
3135
3228
  */
3136
3229
  class GLTFMaterialsBumpExtension {
3137
3230
 
@@ -3179,6 +3272,8 @@ class GLTFMaterialsBumpExtension {
3179
3272
  * GPU Instancing Extension
3180
3273
  *
3181
3274
  * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing
3275
+ *
3276
+ * @private
3182
3277
  */
3183
3278
  class GLTFMeshGpuInstancing {
3184
3279
 
@@ -3238,6 +3333,8 @@ class GLTFMeshGpuInstancing {
3238
3333
 
3239
3334
  /**
3240
3335
  * Static utility functions
3336
+ *
3337
+ * @private
3241
3338
  */
3242
3339
  GLTFExporter.Utils = {
3243
3340
 
@@ -3458,4 +3555,30 @@ GLTFExporter.Utils = {
3458
3555
 
3459
3556
  };
3460
3557
 
3558
+ /**
3559
+ * Export options of `GLTFExporter`.
3560
+ *
3561
+ * @typedef {Object} GLTFExporter~Options
3562
+ * @property {boolean} [trs=false] - Export position, rotation and scale instead of matrix per node.
3563
+ * @property {boolean} [onlyVisible=true] - Export only visible 3D objects.
3564
+ * @property {boolean} [binary=false] - Export in binary (.glb) format, returning an ArrayBuffer.
3565
+ * @property {number} [maxTextureSize=Infinity] - Restricts the image maximum size (both width and height) to the given value.
3566
+ * @property {Array<AnimationClip>} [animations=[]] - List of animations to be included in the export.
3567
+ * @property {boolean} [includeCustomExtensions=false] - Export custom glTF extensions defined on an object's `userData.gltfExtensions` property.
3568
+ **/
3569
+
3570
+ /**
3571
+ * onDone callback of `GLTFExporter`.
3572
+ *
3573
+ * @callback GLTFExporter~OnDone
3574
+ * @param {ArrayBuffer|string} result - The generated .gltf (JSON) or .glb (binary).
3575
+ */
3576
+
3577
+ /**
3578
+ * onError callback of `GLTFExporter`.
3579
+ *
3580
+ * @callback GLTFExporter~OnError
3581
+ * @param {Error} error - The error object.
3582
+ */
3583
+
3461
3584
  export { GLTFExporter };
@@ -127,8 +127,28 @@ const ERROR_FORMAT = 'THREE.KTX2Exporter: Supported formats are RGBAFormat, RGFo
127
127
  const ERROR_TYPE = 'THREE.KTX2Exporter: Supported types are FloatType, HalfFloatType, or UnsignedByteType."';
128
128
  const ERROR_COLOR_SPACE = 'THREE.KTX2Exporter: Supported color spaces are SRGBColorSpace (UnsignedByteType only), LinearSRGBColorSpace, or NoColorSpace.';
129
129
 
130
+ /**
131
+ * An exporter for KTX2.
132
+ *
133
+ * ```js
134
+ * const exporter = new KTX2Exporter();
135
+ * const result = await exporter.parse( dataTexture );
136
+ * ```
137
+ */
130
138
  export class KTX2Exporter {
131
139
 
140
+ /**
141
+ * This method has two variants.
142
+ *
143
+ * - When exporting a data texture, it receives one parameter. The data or 3D data texture.
144
+ * - When exporting a render target (e.g. a PMREM), it receives two parameters. The renderer and the
145
+ * render target.
146
+ *
147
+ * @async
148
+ * @param {(DataTexture|Data3DTexture|WebGPURenderer|WebGLRenderer)} arg1 - The data texture to export or a renderer.
149
+ * @param {RenderTarget} [arg2] - The render target that should be exported
150
+ * @return {Promise<Uint8Array>} A Promise that resolves with the exported KTX2.
151
+ */
132
152
  async parse( arg1, arg2 ) {
133
153
 
134
154
  let texture;
@@ -7,8 +7,26 @@ import {
7
7
  Vector3
8
8
  } from 'three';
9
9
 
10
+ /**
11
+ * An exporter for OBJ.
12
+ *
13
+ * `OBJExporter` is not able to export material data into MTL files so only geometry data are supported.
14
+ *
15
+ * ```js
16
+ * const exporter = new OBJExporter();
17
+ * const data = exporter.parse( scene );
18
+ * ```
19
+ */
10
20
  class OBJExporter {
11
21
 
22
+ /**
23
+ * Parses the given 3D object and generates the OBJ output.
24
+ *
25
+ * If the 3D object is composed of multiple children and geometry, they are merged into a single mesh in the file.
26
+ *
27
+ * @param {Object3D} object - The 3D object to export.
28
+ * @return {string} The exported OBJ.
29
+ */
12
30
  parse( object ) {
13
31
 
14
32
  let output = '';
@@ -7,22 +7,34 @@ import {
7
7
  } from 'three';
8
8
 
9
9
  /**
10
- * https://github.com/gkjohnson/ply-exporter-js
10
+ * An exporter for PLY.
11
11
  *
12
- * Usage:
13
- * const exporter = new PLYExporter();
12
+ * PLY (Polygon or Stanford Triangle Format) is a file format for efficient delivery and
13
+ * loading of simple, static 3D content in a dense format. Both binary and ascii formats are
14
+ * supported. PLY can store vertex positions, colors, normals and uv coordinates. No textures
15
+ * or texture references are saved.
14
16
  *
15
- * // second argument is a list of options
16
- * exporter.parse(mesh, data => console.log(data), { binary: true, excludeAttributes: [ 'color' ], littleEndian: true });
17
- *
18
- * Format Definition:
19
- * http://paulbourke.net/dataformats/ply/
17
+ * ```js
18
+ * const exporter = new PLYExporter();
19
+ * const data = exporter.parse( scene, options );
20
+ * ```
20
21
  */
21
-
22
22
  class PLYExporter {
23
23
 
24
+ /**
25
+ * Parses the given 3D object and generates the PLY output.
26
+ *
27
+ * If the 3D object is composed of multiple children and geometry, they are merged into a single mesh in the file.
28
+ *
29
+ * @param {Object3D} object - The 3D object to export.
30
+ * @param {PLYExporter~OnDone} onDone - A callback function that is executed when the export has finished.
31
+ * @param {PLYExporter~Options} options - The export options.
32
+ * @return {?string|ArrayBuffer} The exported PLY.
33
+ */
24
34
  parse( object, onDone, options = {} ) {
25
35
 
36
+ // reference https://github.com/gkjohnson/ply-exporter-js
37
+
26
38
  // Iterate over the valid meshes in the object
27
39
  function traverseMeshes( cb ) {
28
40
 
@@ -527,4 +539,22 @@ class PLYExporter {
527
539
 
528
540
  }
529
541
 
542
+ /**
543
+ * Export options of `PLYExporter`.
544
+ *
545
+ * @typedef {Object} PLYExporter~Options
546
+ * @property {boolean} [binary=false] - Whether to export in binary format or ASCII.
547
+ * @property {Array<string>} [excludeAttributes] - Which properties to explicitly exclude from
548
+ * the exported PLY file. Valid values are `'color'`, `'normal'`, `'uv'`, and `'index'`. If triangle
549
+ * indices are excluded, then a point cloud is exported.
550
+ * @property {boolean} [littleEndian=false] - Whether the binary export uses little or big endian.
551
+ **/
552
+
553
+ /**
554
+ * onDone callback of `PLYExporter`.
555
+ *
556
+ * @callback PLYExporter~OnDone
557
+ * @param {string|ArrayBuffer} result - The generated PLY ascii or binary.
558
+ */
559
+
530
560
  export { PLYExporter };
@@ -1,16 +1,29 @@
1
1
  import { Vector3 } from 'three';
2
2
 
3
3
  /**
4
- * Usage:
5
- * const exporter = new STLExporter();
4
+ * An exporter for STL.
6
5
  *
7
- * // second argument is a list of options
8
- * const data = exporter.parse( mesh, { binary: true } );
6
+ * STL files describe only the surface geometry of a three-dimensional object without
7
+ * any representation of color, texture or other common model attributes. The STL format
8
+ * specifies both ASCII and binary representations, with binary being more compact.
9
+ * STL files contain no scale information or indexes, and the units are arbitrary.
9
10
  *
11
+ * ```js
12
+ * const exporter = new STLExporter();
13
+ * const data = exporter.parse( mesh, { binary: true } );
14
+ * ```
10
15
  */
11
-
12
16
  class STLExporter {
13
17
 
18
+ /**
19
+ * Parses the given 3D object and generates the STL output.
20
+ *
21
+ * If the 3D object is composed of multiple children and geometry, they are merged into a single mesh in the file.
22
+ *
23
+ * @param {Object3D} scene - A scene, mesh or any other 3D object containing meshes to encode.
24
+ * @param {STLExporter~Options} options - The export options.
25
+ * @return {string|ArrayBuffer} The exported STL.
26
+ */
14
27
  parse( scene, options = {} ) {
15
28
 
16
29
  options = Object.assign( {
@@ -196,4 +209,11 @@ class STLExporter {
196
209
 
197
210
  }
198
211
 
212
+ /**
213
+ * Export options of `STLExporter`.
214
+ *
215
+ * @typedef {Object} STLExporter~Options
216
+ * @property {boolean} [binary=false] - Whether to export in binary format or ASCII.
217
+ **/
218
+
199
219
  export { STLExporter };