@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
@@ -11,12 +11,38 @@ import {
11
11
  DataUtils
12
12
  } from 'three';
13
13
 
14
+ /**
15
+ * A loader for the IES format.
16
+ *
17
+ * The loaded texture should be assigned to {@link IESSpotLight#map}.
18
+ *
19
+ * ```js
20
+ * const loader = new IESLoader();
21
+ * const texture = await loader.loadAsync( 'ies/007cfb11e343e2f42e3b476be4ab684e.ies' );
22
+ *
23
+ * const spotLight = new THREE.IESSpotLight( 0xff0000, 500 );
24
+ * spotLight.iesMap = texture;
25
+ * ```
26
+ *
27
+ * @augments Loader
28
+ */
14
29
  class IESLoader extends Loader {
15
30
 
31
+ /**
32
+ * Constructs a new IES loader.
33
+ *
34
+ * @param {LoadingManager} [manager] - The loading manager.
35
+ */
16
36
  constructor( manager ) {
17
37
 
18
38
  super( manager );
19
39
 
40
+ /**
41
+ * The texture type.
42
+ *
43
+ * @type {(HalfFloatType|FloatType)}
44
+ * @default HalfFloatType
45
+ */
20
46
  this.type = HalfFloatType;
21
47
 
22
48
  }
@@ -112,6 +138,15 @@ class IESLoader extends Loader {
112
138
 
113
139
  }
114
140
 
141
+ /**
142
+ * Starts loading from the given URL and passes the loaded IES texture
143
+ * to the `onLoad()` callback.
144
+ *
145
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
146
+ * @param {function(DataTexture)} onLoad - Executed when the loading process has been finished.
147
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
148
+ * @param {onErrorCallback} onError - Executed when errors occur.
149
+ */
115
150
  load( url, onLoad, onProgress, onError ) {
116
151
 
117
152
  const loader = new FileLoader( this.manager );
@@ -129,6 +164,12 @@ class IESLoader extends Loader {
129
164
 
130
165
  }
131
166
 
167
+ /**
168
+ * Parses the given IES data.
169
+ *
170
+ * @param {string} text - The raw IES data.
171
+ * @return {DataTexture} THE IES data as a texture.
172
+ */
132
173
  parse( text ) {
133
174
 
134
175
  const type = this.type;
@@ -7,14 +7,40 @@ import {
7
7
  import { ColladaLoader } from '../loaders/ColladaLoader.js';
8
8
  import * as fflate from '../libs/fflate.module.js';
9
9
 
10
+ /**
11
+ * A loader for the KMZ format.
12
+ *
13
+ * ```js
14
+ * const loader = new KMZLoader();
15
+ * const kmz = await loader.loadAsync( './models/kmz/Box.kmz' );
16
+ *
17
+ * scene.add( kmz.scene );
18
+ * ```
19
+ *
20
+ * @augments Loader
21
+ */
10
22
  class KMZLoader extends Loader {
11
23
 
24
+ /**
25
+ * Constructs a new KMZ loader.
26
+ *
27
+ * @param {LoadingManager} [manager] - The loading manager.
28
+ */
12
29
  constructor( manager ) {
13
30
 
14
31
  super( manager );
15
32
 
16
33
  }
17
34
 
35
+ /**
36
+ * Starts loading from the given URL and passes the loaded KMZ asset
37
+ * to the `onLoad()` callback.
38
+ *
39
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
40
+ * @param {function({scene:Group})} onLoad - Executed when the loading process has been finished.
41
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
42
+ * @param {onErrorCallback} onError - Executed when errors occur.
43
+ */
18
44
  load( url, onLoad, onProgress, onError ) {
19
45
 
20
46
  const scope = this;
@@ -50,6 +76,12 @@ class KMZLoader extends Loader {
50
76
 
51
77
  }
52
78
 
79
+ /**
80
+ * Parses the given KMZ data and returns an object holding the scene.
81
+ *
82
+ * @param {ArrayBuffer} data - The raw KMZ data as an array buffer.
83
+ * @return {{scene:Group}} The parsed KMZ asset.
84
+ */
53
85
  parse( data ) {
54
86
 
55
87
  function findFile( url ) {
@@ -1,17 +1,3 @@
1
- /**
2
- * Loader for KTX 2.0 GPU Texture containers.
3
- *
4
- * KTX 2.0 is a container format for various GPU texture formats. The loader
5
- * supports Basis Universal GPU textures, which can be quickly transcoded to
6
- * a wide variety of GPU texture compression formats, as well as some
7
- * uncompressed DataTexture and Data3DTexture formats.
8
- *
9
- * References:
10
- * - KTX: http://github.khronos.org/KTX-Specification/
11
- * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor
12
- * - BasisU HDR: https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0
13
- */
14
-
15
1
  import {
16
2
  CompressedTexture,
17
3
  CompressedArrayTexture,
@@ -79,8 +65,39 @@ let _activeLoaders = 0;
79
65
 
80
66
  let _zstd;
81
67
 
68
+ /**
69
+ * A loader for KTX 2.0 GPU Texture containers.
70
+ *
71
+ * KTX 2.0 is a container format for various GPU texture formats. The loader supports Basis Universal GPU textures,
72
+ * which can be quickly transcoded to a wide variety of GPU texture compression formats. While KTX 2.0 also allows
73
+ * other hardware-specific formats, this loader does not yet parse them.
74
+ *
75
+ * This loader parses the KTX 2.0 container and transcodes to a supported GPU compressed texture format.
76
+ * The required WASM transcoder and JS wrapper are available from the `examples/jsm/libs/basis` directory.
77
+ *
78
+ * This loader relies on Web Assembly which is not supported in older browsers.
79
+ *
80
+ * References:
81
+ * - [KTX specification]{@link http://github.khronos.org/KTX-Specification/}
82
+ * - [DFD]{@link https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor}
83
+ * - [BasisU HDR]{@link https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0}
84
+ *
85
+ * ```js
86
+ * const loader = new KTX2Loader();
87
+ * loader.setTranscoderPath( 'examples/jsm/libs/basis/' );
88
+ * loader.detectSupport( renderer );
89
+ * const texture = loader.loadAsync( 'diffuse.ktx2' );
90
+ * ```
91
+ *
92
+ * @augments Loader
93
+ */
82
94
  class KTX2Loader extends Loader {
83
95
 
96
+ /**
97
+ * Constructs a new KTX2 loader.
98
+ *
99
+ * @param {LoadingManager} [manager] - The loading manager.
100
+ */
84
101
  constructor( manager ) {
85
102
 
86
103
  super( manager );
@@ -106,6 +123,14 @@ class KTX2Loader extends Loader {
106
123
 
107
124
  }
108
125
 
126
+ /**
127
+ * Sets the transcoder path.
128
+ *
129
+ * The WASM transcoder and JS wrapper are available from the `examples/jsm/libs/basis` directory.
130
+ *
131
+ * @param {string} path - The transcoder path to set.
132
+ * @return {KTX2Loader} A reference to this loader.
133
+ */
109
134
  setTranscoderPath( path ) {
110
135
 
111
136
  this.transcoderPath = path;
@@ -114,14 +139,28 @@ class KTX2Loader extends Loader {
114
139
 
115
140
  }
116
141
 
117
- setWorkerLimit( num ) {
142
+ /**
143
+ * Sets the maximum number of Web Workers to be allocated by this instance.
144
+ *
145
+ * @param {number} workerLimit - The worker limit.
146
+ * @return {KTX2Loader} A reference to this loader.
147
+ */
148
+ setWorkerLimit( workerLimit ) {
118
149
 
119
- this.workerPool.setWorkerLimit( num );
150
+ this.workerPool.setWorkerLimit( workerLimit );
120
151
 
121
152
  return this;
122
153
 
123
154
  }
124
155
 
156
+
157
+ /**
158
+ * Async version of {@link KTX2Loader#detectSupport}.
159
+ *
160
+ * @async
161
+ * @param {WebGPURenderer|WebGLRenderer} renderer - The renderer.
162
+ * @return {Promise} A Promise that resolves when the support has been detected.
163
+ */
125
164
  async detectSupportAsync( renderer ) {
126
165
 
127
166
  this.workerConfig = {
@@ -138,6 +177,13 @@ class KTX2Loader extends Loader {
138
177
 
139
178
  }
140
179
 
180
+ /**
181
+ * Detects hardware support for available compressed texture formats, to determine
182
+ * the output format for the transcoder. Must be called before loading a texture.
183
+ *
184
+ * @param {WebGPURenderer|WebGLRenderer} renderer - The renderer.
185
+ * @return {KTX2Loader} A reference to this loader.
186
+ */
141
187
  detectSupport( renderer ) {
142
188
 
143
189
  if ( renderer.isWebGPURenderer === true ) {
@@ -172,6 +218,8 @@ class KTX2Loader extends Loader {
172
218
 
173
219
  }
174
220
 
221
+ // TODO: Make this method private
222
+
175
223
  init() {
176
224
 
177
225
  if ( ! this.transcoderPending ) {
@@ -243,6 +291,15 @@ class KTX2Loader extends Loader {
243
291
 
244
292
  }
245
293
 
294
+ /**
295
+ * Starts loading from the given URL and passes the loaded KTX2 texture
296
+ * to the `onLoad()` callback.
297
+ *
298
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
299
+ * @param {function(CompressedTexture)} onLoad - Executed when the loading process has been finished.
300
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
301
+ * @param {onErrorCallback} onError - Executed when errors occur.
302
+ */
246
303
  load( url, onLoad, onProgress, onError ) {
247
304
 
248
305
  if ( this.workerConfig === null ) {
@@ -264,6 +321,14 @@ class KTX2Loader extends Loader {
264
321
 
265
322
  }
266
323
 
324
+ /**
325
+ * Parses the given KTX2 data.
326
+ *
327
+ * @param {ArrayBuffer} buffer - The raw KTX2 data as an array buffer.
328
+ * @param {function(CompressedTexture)} onLoad - Executed when the loading/parsing process has been finished.
329
+ * @param {onErrorCallback} onError - Executed when errors occur.
330
+ * @returns {Promise} A Promise that resolves when the parsing has been finished.
331
+ */
267
332
  parse( buffer, onLoad, onError ) {
268
333
 
269
334
  if ( this.workerConfig === null ) {
@@ -323,6 +388,7 @@ class KTX2Loader extends Loader {
323
388
  }
324
389
 
325
390
  /**
391
+ * @private
326
392
  * @param {ArrayBuffer} buffer
327
393
  * @param {?Object} config
328
394
  * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
@@ -364,6 +430,10 @@ class KTX2Loader extends Loader {
364
430
 
365
431
  }
366
432
 
433
+ /**
434
+ * Frees internal resources. This method should be called
435
+ * when the loader is no longer required.
436
+ */
367
437
  dispose() {
368
438
 
369
439
  this.workerPool.dispose();
@@ -371,8 +441,6 @@ class KTX2Loader extends Loader {
371
441
 
372
442
  _activeLoaders --;
373
443
 
374
- return this;
375
-
376
444
  }
377
445
 
378
446
  }
@@ -3,21 +3,41 @@ import {
3
3
  } from 'three';
4
4
 
5
5
  /**
6
- * for description see https://www.khronos.org/opengles/sdk/tools/KTX/
7
- * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
6
+ * A loader for the KTX texture compression format.
8
7
  *
9
- * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts
8
+ * References:
9
+ * - [The KTX File Format and Tools]{@link https://www.khronos.org/opengles/sdk/tools/KTX/}
10
+ * - [Babylon.JS khronosTextureContainer.ts]{@link https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts}
11
+ *
12
+ * ```js
13
+ * const loader = new KTXLoader();
14
+ *
15
+ * const map = loader.load( 'textures/compressed/lensflare_ASTC8x8.ktx' )
16
+ * map.colorSpace = THREE.SRGBColorSpace; // only for color textures
17
+ * ```
18
+ *
19
+ * @augments CompressedTextureLoader
10
20
  */
11
-
12
-
13
21
  class KTXLoader extends CompressedTextureLoader {
14
22
 
23
+ /**
24
+ * Constructs a new KTX loader.
25
+ *
26
+ * @param {LoadingManager} [manager] - The loading manager.
27
+ */
15
28
  constructor( manager ) {
16
29
 
17
30
  super( manager );
18
31
 
19
32
  }
20
33
 
34
+ /**
35
+ * Parses the given KTX texture data.
36
+ *
37
+ * @param {ArrayBuffer} buffer - The raw texture data.
38
+ * @param {boolean} loadMipmaps - Whether to load mipmaps or not.
39
+ * @return {CompressedTextureLoader~TexData} An object representing the parsed texture data.
40
+ */
21
41
  parse( buffer, loadMipmaps ) {
22
42
 
23
43
  const ktx = new KhronosTextureContainer( buffer, 1 );
@@ -35,7 +55,6 @@ class KTXLoader extends CompressedTextureLoader {
35
55
 
36
56
  }
37
57
 
38
-
39
58
  const HEADER_LEN = 12 + ( 13 * 4 ); // identifier + header elements (not including key value meta-data pairs)
40
59
  // load types
41
60
  const COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()
@@ -46,6 +65,7 @@ const COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()
46
65
  class KhronosTextureContainer {
47
66
 
48
67
  /**
68
+ * @private
49
69
  * @param {ArrayBuffer} arrayBuffer - contents of the KTX container file
50
70
  * @param {number} facesExpected - should be either 1 or 6, based whether a cube texture or or
51
71
  * @param {boolean} threeDExpected - provision for indicating that data should be a 3D texture, not implemented
@@ -1746,10 +1746,44 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
1746
1746
 
1747
1747
  }
1748
1748
 
1749
- //
1750
-
1749
+ /**
1750
+ * A loader for the LDraw format.
1751
+ *
1752
+ * [LDraw]{@link https://ldraw.org/} (LEGO Draw) is an [open format specification]{@link https://ldraw.org/article/218.html}
1753
+ * for describing LEGO and other construction set 3D models.
1754
+ *
1755
+ * An LDraw asset (a text file usually with extension .ldr, .dat or .txt) can describe just a single construction
1756
+ * piece, or an entire model. In the case of a model the LDraw file can reference other LDraw files, which are
1757
+ * loaded from a library path set with `setPartsLibraryPath`. You usually download the LDraw official parts library,
1758
+ * extract to a folder and point setPartsLibraryPath to it.
1759
+ *
1760
+ * Library parts will be loaded by trial and error in subfolders 'parts', 'p' and 'models'. These file accesses
1761
+ * are not optimal for web environment, so a script tool has been made to pack an LDraw file with all its dependencies
1762
+ * into a single file, which loads much faster. See section 'Packing LDraw models'. The LDrawLoader example loads
1763
+ * several packed files. The official parts library is not included due to its large size.
1764
+ *
1765
+ * `LDrawLoader` supports the following extensions:
1766
+ * - !COLOUR: Color and surface finish declarations.
1767
+ * - BFC: Back Face Culling specification.
1768
+ * - !CATEGORY: Model/part category declarations.
1769
+ * - !KEYWORDS: Model/part keywords declarations.
1770
+ *
1771
+ * ```js
1772
+ * const loader = new LDrawLoader();
1773
+ * loader.setConditionalLineMaterial( LDrawConditionalLineMaterial ); // the type of line material depends on the used renderer
1774
+ * const object = await loader.loadAsync( 'models/ldraw/officialLibrary/models/car.ldr_Packed.mpd' );
1775
+ * scene.add( object );
1776
+ * ```
1777
+ *
1778
+ * @augments Loader
1779
+ */
1751
1780
  class LDrawLoader extends Loader {
1752
1781
 
1782
+ /**
1783
+ * Constructs a new LDraw loader.
1784
+ *
1785
+ * @param {LoadingManager} [manager] - The loading manager.
1786
+ */
1753
1787
  constructor( manager ) {
1754
1788
 
1755
1789
  super( manager );
@@ -1784,6 +1818,14 @@ class LDrawLoader extends Loader {
1784
1818
 
1785
1819
  }
1786
1820
 
1821
+ /**
1822
+ * This method must be called prior to `load()` unless the model to load does not reference
1823
+ * library parts (usually it will be a model with all its parts packed in a single file).
1824
+ *
1825
+ * @param {string} path - Path to library parts files to load referenced parts from.
1826
+ * This is different from Loader.setPath, which indicates the path to load the main asset from.
1827
+ * @return {LDrawLoader} A reference to this loader.
1828
+ */
1787
1829
  setPartsLibraryPath( path ) {
1788
1830
 
1789
1831
  this.partsLibraryPath = path;
@@ -1791,6 +1833,14 @@ class LDrawLoader extends Loader {
1791
1833
 
1792
1834
  }
1793
1835
 
1836
+ /**
1837
+ * Sets the conditional line material type which depends on the used renderer.
1838
+ * Use {@link LDrawConditionalLineMaterial} when using `WebGLRenderer` and
1839
+ * {@link LDrawConditionalLineNodeMaterial} when using `WebGPURenderer`.
1840
+ *
1841
+ * @param {(LDrawConditionalLineMaterial.constructor|LDrawConditionalLineNodeMaterial.constructor)} type - The conditional line material type.
1842
+ * @return {LDrawLoader} A reference to this loader.
1843
+ */
1794
1844
  setConditionalLineMaterial( type ) {
1795
1845
 
1796
1846
  this.ConditionalLineMaterial = type;
@@ -1799,6 +1849,17 @@ class LDrawLoader extends Loader {
1799
1849
 
1800
1850
  }
1801
1851
 
1852
+ /**
1853
+ * This async method preloads materials from a single LDraw file. In the official
1854
+ * parts library there is a special file which is loaded always the first (LDConfig.ldr)
1855
+ * and contains all the standard color codes. This method is intended to be used with
1856
+ * not packed files, for example in an editor where materials are preloaded and parts
1857
+ * are loaded on demand.
1858
+ *
1859
+ * @async
1860
+ * @param {string} url - Path of the LDraw materials asset.
1861
+ * @return {Promise} A Promise that resolves when the preload has finished.
1862
+ */
1802
1863
  async preloadMaterials( url ) {
1803
1864
 
1804
1865
  const fileLoader = new FileLoader( this.manager );
@@ -1827,6 +1888,15 @@ class LDrawLoader extends Loader {
1827
1888
 
1828
1889
  }
1829
1890
 
1891
+ /**
1892
+ * Starts loading from the given URL and passes the loaded LDraw asset
1893
+ * to the `onLoad()` callback.
1894
+ *
1895
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
1896
+ * @param {function(Group)} onLoad - Executed when the loading process has been finished.
1897
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
1898
+ * @param {onErrorCallback} onError - Executed when errors occur.
1899
+ */
1830
1900
  load( url, onLoad, onProgress, onError ) {
1831
1901
 
1832
1902
  const fileLoader = new FileLoader( this.manager );
@@ -1839,7 +1909,7 @@ class LDrawLoader extends Loader {
1839
1909
  this.setMaterials( [] );
1840
1910
 
1841
1911
  this.partsCache
1842
- .parseModel( text, this.materialLibrary )
1912
+ .parseModel( text )
1843
1913
  .then( group => {
1844
1914
 
1845
1915
  this.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );
@@ -1854,10 +1924,17 @@ class LDrawLoader extends Loader {
1854
1924
 
1855
1925
  }
1856
1926
 
1927
+ /**
1928
+ * Parses the given LDraw data and returns the resulting group.
1929
+ *
1930
+ * @param {string} text - The raw VRML data as a string.
1931
+ * @param {function(Group)} onLoad - Executed when the loading/parsing process has been finished.
1932
+ * @param {onErrorCallback} onError - Executed when errors occur.
1933
+ */
1857
1934
  parse( text, onLoad, onError ) {
1858
1935
 
1859
1936
  this.partsCache
1860
- .parseModel( text, this.materialLibrary )
1937
+ .parseModel( text )
1861
1938
  .then( group => {
1862
1939
 
1863
1940
  this.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );
@@ -1888,6 +1965,14 @@ class LDrawLoader extends Loader {
1888
1965
 
1889
1966
  }
1890
1967
 
1968
+ /**
1969
+ * Sets a map which maps referenced library filenames to new filenames.
1970
+ * If a fileMap is not specified (the default), library parts will be accessed by trial and
1971
+ * error in subfolders 'parts', 'p' and 'models'.
1972
+ *
1973
+ * @param {Object<string,string>} fileMap - The file map to set.
1974
+ * @return {LDrawLoader} A reference to this loader.
1975
+ */
1891
1976
  setFileMap( fileMap ) {
1892
1977
 
1893
1978
  this.fileMap = fileMap;
@@ -1912,6 +1997,12 @@ class LDrawLoader extends Loader {
1912
1997
 
1913
1998
  }
1914
1999
 
2000
+ /**
2001
+ * Returns a material for the given color code.
2002
+ *
2003
+ * @param {string} colorCode - The color code.
2004
+ * @return {?Material} The material. Returns `null` if no material has been found.
2005
+ */
1915
2006
  getMaterial( colorCode ) {
1916
2007
 
1917
2008
  if ( colorCode.startsWith( '0x2' ) ) {
@@ -2027,12 +2118,31 @@ class LDrawLoader extends Loader {
2027
2118
 
2028
2119
  }
2029
2120
 
2121
+ /**
2122
+ * Returns the Material for the main LDraw color.
2123
+ *
2124
+ * For an already loaded LDraw asset, returns the Material associated with the main color code.
2125
+ * This method can be useful to modify the main material of a model or part that exposes it.
2126
+ *
2127
+ * The main color code is the standard way to color an LDraw part. It is '16' for triangles and
2128
+ * '24' for edges. Usually a complete model will not expose the main color (that is, no part
2129
+ * uses the code '16' at the top level, because they are assigned other specific colors) An LDraw
2130
+ * part file on the other hand will expose the code '16' to be colored, and can have additional
2131
+ * fixed colors.
2132
+ *
2133
+ * @return {?Material} The material. Returns `null` if no material has been found.
2134
+ */
2030
2135
  getMainMaterial() {
2031
2136
 
2032
2137
  return this.getMaterial( MAIN_COLOUR_CODE );
2033
2138
 
2034
2139
  }
2035
2140
 
2141
+ /**
2142
+ * Returns the material for the edges main LDraw color.
2143
+ *
2144
+ * @return {?Material} The material. Returns `null` if no material has been found.
2145
+ */
2036
2146
  getMainEdgeMaterial() {
2037
2147
 
2038
2148
  const mat = this.getMaterial( MAIN_EDGE_COLOUR_CODE );
@@ -2151,7 +2261,7 @@ class LDrawLoader extends Loader {
2151
2261
 
2152
2262
  if ( ! parseLuminance( lineParser.getToken() ) ) {
2153
2263
 
2154
- throw new Error( 'LDrawLoader: Invalid luminance value in material definition' + LineParser.getLineNumberString() + '.' );
2264
+ throw new Error( 'LDrawLoader: Invalid luminance value in material definition' + lineParser.getLineNumberString() + '.' );
2155
2265
 
2156
2266
  }
2157
2267
 
@@ -1,41 +1,71 @@
1
- // http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492
2
- // https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258
3
-
4
1
  import {
5
2
  ClampToEdgeWrapping,
6
3
  Data3DTexture,
7
4
  FileLoader,
8
- FloatType,
9
5
  LinearFilter,
10
6
  Loader,
11
7
  RGBAFormat,
12
8
  UnsignedByteType,
13
9
  } from 'three';
14
10
 
11
+ /**
12
+ * A loader for the 3DL LUT format.
13
+ *
14
+ * References:
15
+ * - [3D LUTs]{@link http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492}
16
+ * - [Format Spec for .3dl]{@link https://community.foundry.com/discuss/topic/103636/format-spec-for-3dl?mode=Post&postID=895258}
17
+ *
18
+ * ```js
19
+ * const loader = new LUT3dlLoader();
20
+ * const map = loader.loadAsync( 'luts/Presetpro-Cinematic.3dl' );
21
+ * ```
22
+ *
23
+ * @augments Loader
24
+ */
15
25
  export class LUT3dlLoader extends Loader {
16
26
 
27
+ /**
28
+ * Constructs a new 3DL LUT loader.
29
+ *
30
+ * @param {LoadingManager} [manager] - The loading manager.
31
+ */
17
32
  constructor( manager ) {
18
33
 
19
34
  super( manager );
20
35
 
36
+ /**
37
+ * The texture type.
38
+ *
39
+ * @type {(UnsignedByteType|FloatType)}
40
+ * @default UnsignedByteType
41
+ */
21
42
  this.type = UnsignedByteType;
22
43
 
23
44
  }
24
45
 
46
+ /**
47
+ * Sets the texture type.
48
+ *
49
+ * @param {(UnsignedByteType|FloatType)} type - The texture type to set.
50
+ * @return {LUT3dlLoader} A reference to this loader.
51
+ */
25
52
  setType( type ) {
26
53
 
27
- if ( type !== UnsignedByteType && type !== FloatType ) {
28
-
29
- throw new Error( 'LUT3dlLoader: Unsupported type' );
30
-
31
- }
32
-
33
54
  this.type = type;
34
55
 
35
56
  return this;
36
57
 
37
58
  }
38
59
 
60
+ /**
61
+ * Starts loading from the given URL and passes the loaded 3DL LUT asset
62
+ * to the `onLoad()` callback.
63
+ *
64
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
65
+ * @param {function({size:number,texture3D:Data3DTexture})} onLoad - Executed when the loading process has been finished.
66
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
67
+ * @param {onErrorCallback} onError - Executed when errors occur.
68
+ */
39
69
  load( url, onLoad, onProgress, onError ) {
40
70
 
41
71
  const loader = new FileLoader( this.manager );
@@ -67,6 +97,12 @@ export class LUT3dlLoader extends Loader {
67
97
 
68
98
  }
69
99
 
100
+ /**
101
+ * Parses the given 3DL LUT data and returns the resulting 3D data texture.
102
+ *
103
+ * @param {string} input - The raw 3DL LUT data as a string.
104
+ * @return {{size:number,texture3D:Data3DTexture}} The parsed 3DL LUT.
105
+ */
70
106
  parse( input ) {
71
107
 
72
108
  const regExpGridInfo = /^[\d ]+$/m;