@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
@@ -30,12 +30,38 @@ import { EXRLoader } from '../loaders/EXRLoader.js';
30
30
 
31
31
  const _taskCache = new WeakMap();
32
32
 
33
+ /**
34
+ * A loader for Rhinoceros 3D files and objects.
35
+ *
36
+ * Rhinoceros is a 3D modeler used to create, edit, analyze, document, render,
37
+ * animate, and translate NURBS curves, surfaces, breps, extrusions, point clouds,
38
+ * as well as polygon meshes and SubD objects. `rhino3dm.js` is compiled to WebAssembly
39
+ * from the open source geometry library `openNURBS`. The loader currently uses
40
+ * `rhino3dm.js 8.4.0`.
41
+ *
42
+ * ```js
43
+ * const loader = new Rhino3dmLoader();
44
+ * loader.setLibraryPath( 'https://cdn.jsdelivr.net/npm/rhino3dm@8.0.1' );
45
+ *
46
+ * const object = await loader.loadAsync( 'models/3dm/Rhino_Logo.3dm' );
47
+ * scene.add( object );
48
+ * ```
49
+ *
50
+ * @augments Loader
51
+ */
33
52
  class Rhino3dmLoader extends Loader {
34
53
 
54
+ /**
55
+ * Constructs a new Rhino 3DM loader.
56
+ *
57
+ * @param {LoadingManager} [manager] - The loading manager.
58
+ */
35
59
  constructor( manager ) {
36
60
 
37
61
  super( manager );
38
62
 
63
+ // internals
64
+
39
65
  this.libraryPath = '';
40
66
  this.libraryPending = null;
41
67
  this.libraryBinary = null;
@@ -54,6 +80,12 @@ class Rhino3dmLoader extends Loader {
54
80
 
55
81
  }
56
82
 
83
+ /**
84
+ * Path to a folder containing the JS and WASM libraries.
85
+ *
86
+ * @param {string} path - The library path to set.
87
+ * @return {Rhino3dmLoader} A reference to this loader.
88
+ */
57
89
  setLibraryPath( path ) {
58
90
 
59
91
  this.libraryPath = path;
@@ -62,6 +94,14 @@ class Rhino3dmLoader extends Loader {
62
94
 
63
95
  }
64
96
 
97
+ /**
98
+ * Sets the maximum number of Web Workers to be used during decoding.
99
+ * A lower limit may be preferable if workers are also for other
100
+ * tasks in the application.
101
+ *
102
+ * @param {number} workerLimit - The worker limit.
103
+ * @return {Rhino3dmLoader} A reference to this loader.
104
+ */
65
105
  setWorkerLimit( workerLimit ) {
66
106
 
67
107
  this.workerLimit = workerLimit;
@@ -70,6 +110,15 @@ class Rhino3dmLoader extends Loader {
70
110
 
71
111
  }
72
112
 
113
+ /**
114
+ * Starts loading from the given URL and passes the loaded 3DM asset
115
+ * to the `onLoad()` callback.
116
+ *
117
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
118
+ * @param {function(Object3D)} onLoad - Executed when the loading process has been finished.
119
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
120
+ * @param {onErrorCallback} onError - Executed when errors occur.
121
+ */
73
122
  load( url, onLoad, onProgress, onError ) {
74
123
 
75
124
  const loader = new FileLoader( this.manager );
@@ -105,12 +154,22 @@ class Rhino3dmLoader extends Loader {
105
154
 
106
155
  }
107
156
 
157
+ /**
158
+ * Prints debug messages to the browser console.
159
+ */
108
160
  debug() {
109
161
 
110
162
  console.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );
111
163
 
112
164
  }
113
165
 
166
+ /**
167
+ * Decodes the 3DM asset data with a Web Worker.
168
+ *
169
+ * @param {ArrayBuffer} buffer - The raw 3DM asset data as an array buffer.
170
+ * @param {string} url - The asset URL.
171
+ * @return {Promise<Object3D>} A Promise that resolved with the decoded 3D object.
172
+ */
114
173
  decodeObjects( buffer, url ) {
115
174
 
116
175
  let worker;
@@ -170,6 +229,14 @@ class Rhino3dmLoader extends Loader {
170
229
 
171
230
  }
172
231
 
232
+ /**
233
+ * Parses the given 3DM data and passes the loaded 3DM asset
234
+ * to the `onLoad()` callback.
235
+ *
236
+ * @param {ArrayBuffer} data - The raw 3DM asset data as an array buffer.
237
+ * @param {function(Object3D)} onLoad - Executed when the loading process has been finished.
238
+ * @param {onErrorCallback} onError - Executed when errors occur.
239
+ */
173
240
  parse( data, onLoad, onError ) {
174
241
 
175
242
  this.decodeObjects( data, '' )
@@ -962,6 +1029,10 @@ class Rhino3dmLoader extends Loader {
962
1029
 
963
1030
  }
964
1031
 
1032
+ /**
1033
+ * Frees internal resources. This method should be called
1034
+ * when the loader is no longer required.
1035
+ */
965
1036
  dispose() {
966
1037
 
967
1038
  for ( let i = 0; i < this.workerPool.length; ++ i ) {
@@ -972,8 +1043,6 @@ class Rhino3dmLoader extends Loader {
972
1043
 
973
1044
  this.workerPool.length = 0;
974
1045
 
975
- return this;
976
-
977
1046
  }
978
1047
 
979
1048
  }
@@ -24,8 +24,7 @@ import * as fflate from '../libs/fflate.module.js';
24
24
  const COLOR_SPACE_3MF = SRGBColorSpace;
25
25
 
26
26
  /**
27
- *
28
- * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/
27
+ * A loader for the [3D Manufacturing Format (3MF)]{@link https://3mf.io/specification/} format.
29
28
  *
30
29
  * The following features from the core specification are supported:
31
30
  *
@@ -39,18 +38,46 @@ const COLOR_SPACE_3MF = SRGBColorSpace;
39
38
  * - Texture 2D Groups
40
39
  * - Color Groups (Vertex Colors)
41
40
  * - Metallic Display Properties (PBR)
41
+ *
42
+ * ```js
43
+ * const loader = new ThreeMFLoader();
44
+ *
45
+ * const object = await loader.loadAsync( './models/3mf/truck.3mf' );
46
+ * object.rotation.set( - Math.PI / 2, 0, 0 ); // z-up conversion
47
+ * scene.add( object );
48
+ * ```
49
+ *
50
+ * @augments Loader
42
51
  */
43
-
44
52
  class ThreeMFLoader extends Loader {
45
53
 
54
+ /**
55
+ * Constructs a new 3MF loader.
56
+ *
57
+ * @param {LoadingManager} [manager] - The loading manager.
58
+ */
46
59
  constructor( manager ) {
47
60
 
48
61
  super( manager );
49
62
 
63
+ /**
64
+ * An array of available extensions.
65
+ *
66
+ * @type {Array<Object>}
67
+ */
50
68
  this.availableExtensions = [];
51
69
 
52
70
  }
53
71
 
72
+ /**
73
+ * Starts loading from the given URL and passes the loaded 3MF asset
74
+ * to the `onLoad()` callback.
75
+ *
76
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
77
+ * @param {function(Group)} onLoad - Executed when the loading process has been finished.
78
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
79
+ * @param {onErrorCallback} onError - Executed when errors occur.
80
+ */
54
81
  load( url, onLoad, onProgress, onError ) {
55
82
 
56
83
  const scope = this;
@@ -85,6 +112,12 @@ class ThreeMFLoader extends Loader {
85
112
 
86
113
  }
87
114
 
115
+ /**
116
+ * Parses the given 3MF data and returns the resulting group.
117
+ *
118
+ * @param {ArrayBuffer} data - The raw 3MF asset data as an array buffer.
119
+ * @return {Group} A group representing the parsed asset.
120
+ */
88
121
  parse( data ) {
89
122
 
90
123
  const scope = this;
@@ -1571,6 +1604,11 @@ class ThreeMFLoader extends Loader {
1571
1604
 
1572
1605
  }
1573
1606
 
1607
+ /**
1608
+ * Adds a 3MF extension.
1609
+ *
1610
+ * @param {Object} extension - The extension to add.
1611
+ */
1574
1612
  addExtension( extension ) {
1575
1613
 
1576
1614
  this.availableExtensions.push( extension );
@@ -11,29 +11,42 @@ import {
11
11
  import * as fflate from '../libs/fflate.module.js';
12
12
 
13
13
  /**
14
- * Description: Early release of an AMF Loader following the pattern of the
15
- * example loaders in the three.js project.
14
+ * A loader for the AMF format.
16
15
  *
17
- * Usage:
18
- * const loader = new AMFLoader();
19
- * loader.load('/path/to/project.amf', function(objecttree) {
20
- * scene.add(objecttree);
21
- * });
16
+ * The loader supports materials, color and ZIP compressed files.
17
+ * No constellation support (yet).
22
18
  *
23
- * Materials now supported, material colors supported
24
- * Zip support, requires fflate
25
- * No constellation support (yet)!
19
+ * ```js
20
+ * const loader = new AMFLoader();
26
21
  *
22
+ * const object = await loader.loadAsync( './models/amf/rook.amf' );
23
+ * scene.add( object );
24
+ * ```
25
+ *
26
+ * @augments Loader
27
27
  */
28
-
29
28
  class AMFLoader extends Loader {
30
29
 
30
+ /**
31
+ * Constructs a new AMF loader.
32
+ *
33
+ * @param {LoadingManager} [manager] - The loading manager.
34
+ */
31
35
  constructor( manager ) {
32
36
 
33
37
  super( manager );
34
38
 
35
39
  }
36
40
 
41
+ /**
42
+ * Starts loading from the given URL and passes the loaded AMF asset
43
+ * to the `onLoad()` callback.
44
+ *
45
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
46
+ * @param {function(Group)} onLoad - Executed when the loading process has been finished.
47
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
48
+ * @param {onErrorCallback} onError - Executed when errors occur.
49
+ */
37
50
  load( url, onLoad, onProgress, onError ) {
38
51
 
39
52
  const scope = this;
@@ -69,6 +82,12 @@ class AMFLoader extends Loader {
69
82
 
70
83
  }
71
84
 
85
+ /**
86
+ * Parses the given AMF data and returns the resulting group.
87
+ *
88
+ * @param {ArrayBuffer} data - The raw AMF asset data as an array buffer.
89
+ * @return {Group} A group representing the parsed asset.
90
+ */
72
91
  parse( data ) {
73
92
 
74
93
  function loadDocument( data ) {
@@ -236,7 +255,7 @@ class AMFLoader extends Loader {
236
255
 
237
256
  function loadMeshVolume( node ) {
238
257
 
239
- const volume = { name: '', triangles: [], materialid: null };
258
+ const volume = { name: '', triangles: [], materialId: null };
240
259
 
241
260
  let currVolumeNode = node.firstElementChild;
242
261
 
@@ -11,23 +11,65 @@ import {
11
11
  } from 'three';
12
12
 
13
13
  /**
14
- * Description: reads BVH files and outputs a single Skeleton and an AnimationClip
14
+ * A loader for the BVH format.
15
15
  *
16
- * Currently only supports bvh files containing a single root.
16
+ * Imports BVH files and outputs a single {@link Skeleton} and {@link AnimationClip}.
17
+ * The loader only supports BVH files containing a single root right now.
17
18
  *
19
+ * ```js
20
+ * const loader = new BVHLoader();
21
+ * const result = await loader.loadAsync( 'models/bvh/pirouette.bvh' );
22
+ *
23
+ * // visualize skeleton
24
+ * const skeletonHelper = new THREE.SkeletonHelper( result.skeleton.bones[ 0 ] );
25
+ * scene.add( result.skeleton.bones[ 0 ] );
26
+ * scene.add( skeletonHelper );
27
+ *
28
+ * // play animation clip
29
+ * mixer = new THREE.AnimationMixer( result.skeleton.bones[ 0 ] );
30
+ * mixer.clipAction( result.clip ).play();
31
+ * ```
32
+ *
33
+ * @augments Loader
18
34
  */
19
-
20
35
  class BVHLoader extends Loader {
21
36
 
37
+ /**
38
+ * Constructs a new BVH loader.
39
+ *
40
+ * @param {LoadingManager} [manager] - The loading manager.
41
+ */
22
42
  constructor( manager ) {
23
43
 
24
44
  super( manager );
25
45
 
46
+ /**
47
+ * Whether to animate bone positions or not.
48
+ *
49
+ * @type {boolean}
50
+ * @default true
51
+ */
26
52
  this.animateBonePositions = true;
53
+
54
+ /**
55
+ * Whether to animate bone rotations or not.
56
+ *
57
+ * @type {boolean}
58
+ * @default true
59
+ */
27
60
  this.animateBoneRotations = true;
28
61
 
29
62
  }
30
63
 
64
+ /**
65
+ * Starts loading from the given URL and passes the loaded BVH asset
66
+ * to the `onLoad()` callback.
67
+ *
68
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
69
+ * @param {function({skeleton:Skeleton,clip:AnimationClip})} onLoad - Executed when the loading process has been finished.
70
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
71
+ * @param {onErrorCallback} onError - Executed when errors occur.
72
+ */
31
73
  load( url, onLoad, onProgress, onError ) {
32
74
 
33
75
  const scope = this;
@@ -62,15 +104,19 @@ class BVHLoader extends Loader {
62
104
 
63
105
  }
64
106
 
107
+ /**
108
+ * Parses the given BVH data and returns the resulting data.
109
+ *
110
+ * @param {string} text - The raw BVH data as a string.
111
+ * @return {{skeleton:Skeleton,clip:AnimationClip}} An object representing the parsed asset.
112
+ */
65
113
  parse( text ) {
66
114
 
67
- /*
68
- reads a string array (lines) from a BVH file
69
- and outputs a skeleton structure including motion data
115
+ // reads a string array (lines) from a BVH file
116
+ // and outputs a skeleton structure including motion data
70
117
 
71
- returns thee root node:
72
- { name: '', channels: [], children: [] }
73
- */
118
+ // returns thee root node:
119
+ // { name: '', channels: [], children: [] }
74
120
  function readBvh( lines ) {
75
121
 
76
122
  // read model structure
@@ -338,11 +384,11 @@ class BVHLoader extends Loader {
338
384
  }
339
385
 
340
386
  /*
341
- builds a AnimationClip from the keyframe data saved in each bone.
387
+ builds an AnimationClip from the keyframe data saved in each bone.
342
388
 
343
389
  bone: bvh root node
344
390
 
345
- returns: a AnimationClip containing position and quaternion tracks
391
+ returns: an AnimationClip containing position and quaternion tracks
346
392
  */
347
393
  function toTHREEAnimation( bones ) {
348
394
 
@@ -41,8 +41,35 @@ import {
41
41
  } from 'three';
42
42
  import { TGALoader } from '../loaders/TGALoader.js';
43
43
 
44
+ /**
45
+ * A loader for the Collada format.
46
+ *
47
+ * The Collada format is very complex so this loader only supports a subset of what
48
+ * is defined in the [official specification]{@link https://www.khronos.org/files/collada_spec_1_5.pdf}.
49
+ *
50
+ * Assets with a Z-UP coordinate system are transformed it into Y-UP by a simple rotation.
51
+ * The vertex data are not converted.
52
+ *
53
+ * ```js
54
+ * const loader = new ColladaLoader();
55
+ *
56
+ * const result = await loader.loadAsync( './models/collada/elf/elf.dae' );
57
+ * scene.add( result.scene );
58
+ * ```
59
+ *
60
+ * @augments Loader
61
+ */
44
62
  class ColladaLoader extends Loader {
45
63
 
64
+ /**
65
+ * Starts loading from the given URL and passes the loaded Collada asset
66
+ * to the `onLoad()` callback.
67
+ *
68
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
69
+ * @param {function({scene:Group,animations:Array<AnimationClip>,kinematics:Object})} onLoad - Executed when the loading process has been finished.
70
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
71
+ * @param {onErrorCallback} onError - Executed when errors occur.
72
+ */
46
73
  load( url, onLoad, onProgress, onError ) {
47
74
 
48
75
  const scope = this;
@@ -79,6 +106,14 @@ class ColladaLoader extends Loader {
79
106
 
80
107
  }
81
108
 
109
+ /**
110
+ * Parses the given Collada data and returns a result oject holding the parsed scene,
111
+ * an array of animation clips and kinematics.
112
+ *
113
+ * @param {string} text - The raw Collada data as a string.
114
+ * @param {string} path - The asset path.
115
+ * @return {{scene:Group,animations:Array<AnimationClip>,kinematics:Object}} An object representing the parsed asset.
116
+ */
82
117
  parse( text, path ) {
83
118
 
84
119
  function getElementsByTagName( xml, name ) {
@@ -9,14 +9,38 @@ import {
9
9
  RGB_BPTC_UNSIGNED_Format
10
10
  } from 'three';
11
11
 
12
+ /**
13
+ * A loader for the S3TC texture compression format.
14
+ *
15
+ * ```js
16
+ * const loader = new DDSLoader();
17
+ *
18
+ * const map = loader.load( 'textures/compressed/disturb_dxt1_nomip.dds' );
19
+ * map.colorSpace = THREE.SRGBColorSpace; // only for color textures
20
+ * ```
21
+ *
22
+ * @augments CompressedTextureLoader
23
+ */
12
24
  class DDSLoader extends CompressedTextureLoader {
13
25
 
26
+ /**
27
+ * Constructs a new DDS loader.
28
+ *
29
+ * @param {LoadingManager} [manager] - The loading manager.
30
+ */
14
31
  constructor( manager ) {
15
32
 
16
33
  super( manager );
17
34
 
18
35
  }
19
36
 
37
+ /**
38
+ * Parses the given S3TC texture data.
39
+ *
40
+ * @param {ArrayBuffer} buffer - The raw texture data.
41
+ * @param {boolean} loadMipmaps - Whether to load mipmaps or not.
42
+ * @return {CompressedTextureLoader~TexData} An object representing the parsed texture data.
43
+ */
20
44
  parse( buffer, loadMipmaps ) {
21
45
 
22
46
  const dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 };
@@ -11,8 +11,44 @@ import {
11
11
 
12
12
  const _taskCache = new WeakMap();
13
13
 
14
+ /**
15
+ * A loader for the Draco format.
16
+ *
17
+ * [Draco]{@link https://google.github.io/draco/} is an open source library for compressing
18
+ * and decompressing 3D meshes and point clouds. Compressed geometry can be significantly smaller,
19
+ * at the cost of additional decoding time on the client device.
20
+ *
21
+ * Standalone Draco files have a `.drc` extension, and contain vertex positions, normals, colors,
22
+ * and other attributes. Draco files do not contain materials, textures, animation, or node hierarchies –
23
+ * to use these features, embed Draco geometry inside of a glTF file. A normal glTF file can be converted
24
+ * to a Draco-compressed glTF file using [glTF-Pipeline]{@link https://github.com/CesiumGS/gltf-pipeline}.
25
+ * When using Draco with glTF, an instance of `DRACOLoader` will be used internally by {@link GLTFLoader}.
26
+ *
27
+ * It is recommended to create one DRACOLoader instance and reuse it to avoid loading and creating
28
+ * multiple decoder instances.
29
+ *
30
+ * `DRACOLoader` will automatically use either the JS or the WASM decoding library, based on
31
+ * browser capabilities.
32
+ *
33
+ * ```js
34
+ * const loader = new DRACOLoader();
35
+ * loader.setDecoderPath( '/examples/jsm/libs/draco/' );
36
+ *
37
+ * const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );
38
+ * geometry.computeVertexNormals(); // optional
39
+ *
40
+ * dracoLoader.dispose();
41
+ * ```
42
+ *
43
+ * @augments Loader
44
+ */
14
45
  class DRACOLoader extends Loader {
15
46
 
47
+ /**
48
+ * Constructs a new Draco loader.
49
+ *
50
+ * @param {LoadingManager} [manager] - The loading manager.
51
+ */
16
52
  constructor( manager ) {
17
53
 
18
54
  super( manager );
@@ -42,6 +78,12 @@ class DRACOLoader extends Loader {
42
78
 
43
79
  }
44
80
 
81
+ /**
82
+ * Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.
83
+ *
84
+ * @param {string} path - The decoder path.
85
+ * @return {DRACOLoader} A reference to this loader.
86
+ */
45
87
  setDecoderPath( path ) {
46
88
 
47
89
  this.decoderPath = path;
@@ -50,6 +92,12 @@ class DRACOLoader extends Loader {
50
92
 
51
93
  }
52
94
 
95
+ /**
96
+ * Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.
97
+ *
98
+ * @param {{type:('js'|'wasm')}} config - The decoder config.
99
+ * @return {DRACOLoader} A reference to this loader.
100
+ */
53
101
  setDecoderConfig( config ) {
54
102
 
55
103
  this.decoderConfig = config;
@@ -58,6 +106,13 @@ class DRACOLoader extends Loader {
58
106
 
59
107
  }
60
108
 
109
+ /**
110
+ * Sets the maximum number of Web Workers to be used during decoding.
111
+ * A lower limit may be preferable if workers are also for other tasks in the application.
112
+ *
113
+ * @param {number} workerLimit - The worker limit.
114
+ * @return {DRACOLoader} A reference to this loader.
115
+ */
61
116
  setWorkerLimit( workerLimit ) {
62
117
 
63
118
  this.workerLimit = workerLimit;
@@ -66,6 +121,15 @@ class DRACOLoader extends Loader {
66
121
 
67
122
  }
68
123
 
124
+ /**
125
+ * Starts loading from the given URL and passes the loaded Draco asset
126
+ * to the `onLoad()` callback.
127
+ *
128
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
129
+ * @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.
130
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
131
+ * @param {onErrorCallback} onError - Executed when errors occur.
132
+ */
69
133
  load( url, onLoad, onProgress, onError ) {
70
134
 
71
135
  const loader = new FileLoader( this.manager );
@@ -83,13 +147,21 @@ class DRACOLoader extends Loader {
83
147
 
84
148
  }
85
149
 
86
-
150
+ /**
151
+ * Parses the given Draco data.
152
+ *
153
+ * @param {ArrayBuffer} buffer - The raw Draco data as an array buffer.
154
+ * @param {function(BufferGeometry)} onLoad - Executed when the loading/parsing process has been finished.
155
+ * @param {onErrorCallback} onError - Executed when errors occur.
156
+ */
87
157
  parse( buffer, onLoad, onError = ()=>{} ) {
88
158
 
89
159
  this.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );
90
160
 
91
161
  }
92
162
 
163
+ //
164
+
93
165
  decodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {
94
166
 
95
167
  const taskConfig = {
@@ -11,13 +11,8 @@ import {
11
11
  } from 'three';
12
12
  import * as fflate from '../libs/fflate.module.js';
13
13
 
14
- /**
15
- * OpenEXR loader currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.
16
- * Supports reading as UnsignedByte, HalfFloat and Float type data texture.
17
- *
18
- * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita
19
- * implementation, so I have preserved their copyright notices.
20
- */
14
+ // Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita
15
+ // implementation, so I have preserved their copyright notices.
21
16
 
22
17
  // /*
23
18
  // Copyright (c) 2014 - 2017, Syoyo Fujita
@@ -84,16 +79,47 @@ import * as fflate from '../libs/fflate.module.js';
84
79
 
85
80
  // // End of OpenEXR license -------------------------------------------------
86
81
 
82
+
83
+ /**
84
+ * A loader for the OpenEXR texture format.
85
+ *
86
+ * `EXRLoader` currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.
87
+ * Supports reading as UnsignedByte, HalfFloat and Float type data texture.
88
+ *
89
+ * ```js
90
+ * const loader = new EXRLoader();
91
+ * const texture = await loader.loadAsync( 'textures/memorial.exr' );
92
+ * ```
93
+ *
94
+ * @augments DataTextureLoader
95
+ */
87
96
  class EXRLoader extends DataTextureLoader {
88
97
 
98
+ /**
99
+ * Constructs a new EXR loader.
100
+ *
101
+ * @param {LoadingManager} [manager] - The loading manager.
102
+ */
89
103
  constructor( manager ) {
90
104
 
91
105
  super( manager );
92
106
 
107
+ /**
108
+ * The texture type.
109
+ *
110
+ * @type {(HalfFloatType|FloatType)}
111
+ * @default HalfFloatType
112
+ */
93
113
  this.type = HalfFloatType;
94
114
 
95
115
  }
96
116
 
117
+ /**
118
+ * Parses the given EXR texture data.
119
+ *
120
+ * @param {ArrayBuffer} buffer - The raw texture data.
121
+ * @return {DataTextureLoader~TexData} An object representing the parsed texture data.
122
+ */
97
123
  parse( buffer ) {
98
124
 
99
125
  const USHORT_RANGE = ( 1 << 16 );
@@ -2229,7 +2255,7 @@ class EXRLoader extends DataTextureLoader {
2229
2255
 
2230
2256
  const attributeName = parseNullTerminatedString( buffer, offset );
2231
2257
 
2232
- if ( attributeName == 0 ) {
2258
+ if ( attributeName === '' ) {
2233
2259
 
2234
2260
  keepReading = false;
2235
2261
 
@@ -2533,6 +2559,12 @@ class EXRLoader extends DataTextureLoader {
2533
2559
 
2534
2560
  }
2535
2561
 
2562
+ /**
2563
+ * Sets the texture type.
2564
+ *
2565
+ * @param {(HalfFloatType|FloatType)} value - The texture type to set.
2566
+ * @return {RGBMLoader} A reference to this loader.
2567
+ */
2536
2568
  setDataType( value ) {
2537
2569
 
2538
2570
  this.type = value;