@plastic-software/three 0.174.0 → 0.175.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,40 +1,70 @@
1
- // https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf
2
-
3
1
  import {
4
2
  ClampToEdgeWrapping,
5
3
  Data3DTexture,
6
4
  FileLoader,
7
- FloatType,
8
5
  LinearFilter,
9
6
  Loader,
10
7
  UnsignedByteType,
11
8
  Vector3,
12
9
  } from 'three';
13
10
 
11
+ /**
12
+ * A loader for the Cube LUT format.
13
+ *
14
+ * References:
15
+ * - [Cube LUT Specification]{@link https://web.archive.org/web/20220220033515/https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf}
16
+ *
17
+ * ```js
18
+ * const loader = new LUTCubeLoader();
19
+ * const map = loader.loadAsync( 'luts/Bourbon 64.CUBE' );
20
+ * ```
21
+ *
22
+ * @augments Loader
23
+ */
14
24
  export class LUTCubeLoader extends Loader {
15
25
 
26
+ /**
27
+ * Constructs a new Cube LUT loader.
28
+ *
29
+ * @param {LoadingManager} [manager] - The loading manager.
30
+ */
16
31
  constructor( manager ) {
17
32
 
18
33
  super( manager );
19
34
 
35
+ /**
36
+ * The texture type.
37
+ *
38
+ * @type {(UnsignedByteType|FloatType)}
39
+ * @default UnsignedByteType
40
+ */
20
41
  this.type = UnsignedByteType;
21
42
 
22
43
  }
23
44
 
45
+ /**
46
+ * Sets the texture type.
47
+ *
48
+ * @param {(UnsignedByteType|FloatType)} type - The texture type to set.
49
+ * @return {LUTCubeLoader} A reference to this loader.
50
+ */
24
51
  setType( type ) {
25
52
 
26
- if ( type !== UnsignedByteType && type !== FloatType ) {
27
-
28
- throw new Error( 'LUTCubeLoader: Unsupported type' );
29
-
30
- }
31
-
32
53
  this.type = type;
33
54
 
34
55
  return this;
35
56
 
36
57
  }
37
58
 
59
+ /**
60
+ * Starts loading from the given URL and passes the loaded Cube LUT asset
61
+ * to the `onLoad()` callback.
62
+ *
63
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
64
+ * @param {function({title:string,size:number,domainMin:Vector3,domainMax:Vector3,texture3D:Data3DTexture})} onLoad - Executed when the loading process has been finished.
65
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
66
+ * @param {onErrorCallback} onError - Executed when errors occur.
67
+ */
38
68
  load( url, onLoad, onProgress, onError ) {
39
69
 
40
70
  const loader = new FileLoader( this.manager );
@@ -66,6 +96,12 @@ export class LUTCubeLoader extends Loader {
66
96
 
67
97
  }
68
98
 
99
+ /**
100
+ * Parses the given Cube LUT data and returns the resulting 3D data texture.
101
+ *
102
+ * @param {string} input - The raw Cube LUT data as a string.
103
+ * @return {{title:string,size:number,domainMin:Vector3,domainMax:Vector3,texture3D:Data3DTexture}} The parsed Cube LUT.
104
+ */
69
105
  parse( input ) {
70
106
 
71
107
  const regExpTitle = /TITLE +"([^"]*)"/;
@@ -8,19 +8,50 @@ import {
8
8
  LinearFilter,
9
9
  } from 'three';
10
10
 
11
+ /**
12
+ * A loader for loading LUT images.
13
+ *
14
+ * ```js
15
+ * const loader = new LUTImageLoader();
16
+ * const map = loader.loadAsync( 'luts/NeutralLUT.png' );
17
+ * ```
18
+ *
19
+ * @augments Loader
20
+ */
11
21
  export class LUTImageLoader extends Loader {
12
22
 
13
- constructor( flipVertical = false ) {
14
-
15
- //The NeutralLUT.png has green at the bottom for Unreal ang green at the top for Unity URP Color Lookup
16
- //post-processing. If you're using lut image strips from a Unity pipeline then pass true to the constructor
17
-
18
- super();
19
-
20
- this.flip = flipVertical;
23
+ /**
24
+ * Constructs a new LUT loader.
25
+ *
26
+ * @param {LoadingManager} [manager] - The loading manager.
27
+ */
28
+ constructor( manager ) {
29
+
30
+ super( manager );
31
+
32
+ /**
33
+ * Whether to vertically flip the LUT or not.
34
+ *
35
+ * Depending on the LUT's origin, the texture has green at the bottom (e.g. for Unreal)
36
+ * or green at the top (e.g. for Unity URP Color Lookup). If you're using lut image strips
37
+ * from a Unity pipeline, then set this property to `true`.
38
+ *
39
+ * @type {boolean}
40
+ * @default false
41
+ */
42
+ this.flip = false;
21
43
 
22
44
  }
23
45
 
46
+ /**
47
+ * Starts loading from the given URL and passes the loaded LUT
48
+ * to the `onLoad()` callback.
49
+ *
50
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
51
+ * @param {function({size:number,texture3D:Data3DTexture})} onLoad - Executed when the loading process has been finished.
52
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
53
+ * @param {onErrorCallback} onError - Executed when errors occur.
54
+ */
24
55
  load( url, onLoad, onProgress, onError ) {
25
56
 
26
57
  const loader = new TextureLoader( this.manager );
@@ -36,11 +67,11 @@ export class LUTImageLoader extends Loader {
36
67
 
37
68
  if ( texture.image.width < texture.image.height ) {
38
69
 
39
- imageData = this.getImageData( texture );
70
+ imageData = this._getImageData( texture );
40
71
 
41
72
  } else {
42
73
 
43
- imageData = this.horz2Vert( texture );
74
+ imageData = this._horz2Vert( texture );
44
75
 
45
76
  }
46
77
 
@@ -66,7 +97,42 @@ export class LUTImageLoader extends Loader {
66
97
 
67
98
  }
68
99
 
69
- getImageData( texture ) {
100
+ /**
101
+ * Parses the given LUT data and returns the resulting 3D data texture.
102
+ *
103
+ * @param {Uint8ClampedArray} dataArray - The raw LUT data.
104
+ * @param {number} size - The LUT size.
105
+ * @return {{size:number,texture3D:Data3DTexture}} An object representing the parsed LUT.
106
+ */
107
+ parse( dataArray, size ) {
108
+
109
+ const data = new Uint8Array( dataArray );
110
+
111
+ const texture3D = new Data3DTexture();
112
+ texture3D.image.data = data;
113
+ texture3D.image.width = size;
114
+ texture3D.image.height = size;
115
+ texture3D.image.depth = size;
116
+ texture3D.format = RGBAFormat;
117
+ texture3D.type = UnsignedByteType;
118
+ texture3D.magFilter = LinearFilter;
119
+ texture3D.minFilter = LinearFilter;
120
+ texture3D.wrapS = ClampToEdgeWrapping;
121
+ texture3D.wrapT = ClampToEdgeWrapping;
122
+ texture3D.wrapR = ClampToEdgeWrapping;
123
+ texture3D.generateMipmaps = false;
124
+ texture3D.needsUpdate = true;
125
+
126
+ return {
127
+ size,
128
+ texture3D,
129
+ };
130
+
131
+ }
132
+
133
+ // internal
134
+
135
+ _getImageData( texture ) {
70
136
 
71
137
  const width = texture.image.width;
72
138
  const height = texture.image.height;
@@ -90,7 +156,7 @@ export class LUTImageLoader extends Loader {
90
156
 
91
157
  }
92
158
 
93
- horz2Vert( texture ) {
159
+ _horz2Vert( texture ) {
94
160
 
95
161
  const width = texture.image.height;
96
162
  const height = texture.image.width;
@@ -120,30 +186,4 @@ export class LUTImageLoader extends Loader {
120
186
 
121
187
  }
122
188
 
123
- parse( dataArray, size ) {
124
-
125
- const data = new Uint8Array( dataArray );
126
-
127
- const texture3D = new Data3DTexture();
128
- texture3D.image.data = data;
129
- texture3D.image.width = size;
130
- texture3D.image.height = size;
131
- texture3D.image.depth = size;
132
- texture3D.format = RGBAFormat;
133
- texture3D.type = UnsignedByteType;
134
- texture3D.magFilter = LinearFilter;
135
- texture3D.minFilter = LinearFilter;
136
- texture3D.wrapS = ClampToEdgeWrapping;
137
- texture3D.wrapT = ClampToEdgeWrapping;
138
- texture3D.wrapR = ClampToEdgeWrapping;
139
- texture3D.generateMipmaps = false;
140
- texture3D.needsUpdate = true;
141
-
142
- return {
143
- size,
144
- texture3D,
145
- };
146
-
147
- }
148
-
149
189
  }
@@ -43,16 +43,47 @@ import { IFFParser } from './lwo/IFFParser.js';
43
43
 
44
44
  let _lwoTree;
45
45
 
46
+ /**
47
+ * A loader for the LWO format.
48
+ *
49
+ * LWO3 and LWO2 formats are supported.
50
+ *
51
+ * References:
52
+ * - [LWO3 format specification]{@link https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html}
53
+ * - [LWO2 format specification]{@link https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html}
54
+ *
55
+ * ```js
56
+ * const loader = new LWOLoader();
57
+ * const lwoData = await loader.loadAsync( 'models/lwo/Objects/LWO3/Demo.lwo' );
58
+ *
59
+ * const mesh = object.meshes[ 0 ];
60
+ * scene.add( mesh );
61
+ * ```
62
+ *
63
+ * @augments Loader
64
+ */
46
65
  class LWOLoader extends Loader {
47
66
 
48
- constructor( manager, parameters = {} ) {
67
+ /**
68
+ * Constructs a new LWO loader.
69
+ *
70
+ * @param {LoadingManager} [manager] - The loading manager.
71
+ */
72
+ constructor( manager ) {
49
73
 
50
74
  super( manager );
51
75
 
52
- this.resourcePath = ( parameters.resourcePath !== undefined ) ? parameters.resourcePath : '';
53
-
54
76
  }
55
77
 
78
+ /**
79
+ * Starts loading from the given URL and passes the loaded LWO asset
80
+ * to the `onLoad()` callback.
81
+ *
82
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
83
+ * @param {function({meshes:Array<Mesh>,materials:Array<Material>})} onLoad - Executed when the loading process has been finished.
84
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
85
+ * @param {onErrorCallback} onError - Executed when errors occur.
86
+ */
56
87
  load( url, onLoad, onProgress, onError ) {
57
88
 
58
89
  const scope = this;
@@ -96,6 +127,14 @@ class LWOLoader extends Loader {
96
127
 
97
128
  }
98
129
 
130
+ /**
131
+ * Parses the given LWO data and returns the resulting meshes and materials.
132
+ *
133
+ * @param {ArrayBuffer} iffBuffer - The raw LWO data as an array buffer.
134
+ * @param {string} path - The URL base path.
135
+ * @param {string} modelName - The model name.
136
+ * @return {{meshes:Array<Mesh>,materials:Array<Material>}} An object holding the parse meshes and materials.
137
+ */
99
138
  parse( iffBuffer, path, modelName ) {
100
139
 
101
140
  _lwoTree = new IFFParser().parse( iffBuffer );
@@ -312,7 +351,7 @@ class MaterialParser {
312
351
 
313
352
  const maps = this.parseTextureNodes( connections.maps );
314
353
 
315
- this.parseAttributeImageMaps( connections.attributes, textures, maps, materialData.maps );
354
+ this.parseAttributeImageMaps( connections.attributes, textures, maps );
316
355
 
317
356
  const attributes = this.parseAttributes( connections.attributes, maps );
318
357
 
@@ -496,7 +535,7 @@ class MaterialParser {
496
535
 
497
536
  const mapData = attribute.maps[ 0 ];
498
537
 
499
- const path = this.getTexturePathByIndex( mapData.imageIndex, textures );
538
+ const path = this.getTexturePathByIndex( mapData.imageIndex );
500
539
  if ( ! path ) return;
501
540
 
502
541
  const texture = this.loadTexture( path );
@@ -783,8 +822,8 @@ class GeometryParser {
783
822
 
784
823
  geometry.computeVertexNormals();
785
824
 
786
- this.parseUVs( geometry, layer, indices );
787
- this.parseMorphTargets( geometry, layer, indices );
825
+ this.parseUVs( geometry, layer );
826
+ this.parseMorphTargets( geometry, layer );
788
827
 
789
828
  // TODO: z may need to be reversed to account for coordinate system change
790
829
  geometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );
@@ -8,14 +8,51 @@ import {
8
8
 
9
9
  import lottie from '../libs/lottie_canvas.module.js';
10
10
 
11
+ /**
12
+ * A loader for the Lottie texture animation format.
13
+ *
14
+ * The loader returns an instance of {@link CanvasTexture} to represent
15
+ * the animated texture. Two additional properties are added to each texture:
16
+ * - `animation`: The return value of `lottie.loadAnimation()` which is an object
17
+ * with an API for controlling the animation's playback.
18
+ * - `image`: The image container.
19
+ *
20
+ * ```js
21
+ * const loader = new LottieLoader();
22
+ * loader.setQuality( 2 );
23
+ * const texture = await loader.loadAsync( 'textures/lottie/24017-lottie-logo-animation.json' );
24
+ *
25
+ * const geometry = new THREE.BoxGeometry();
26
+ * const material = new THREE.MeshBasicMaterial( { map: texture } );
27
+ * const mesh = new THREE.Mesh( geometry, material );
28
+ * scene.add( mesh );
29
+ * ```
30
+ *
31
+ * @augments Loader
32
+ */
11
33
  class LottieLoader extends Loader {
12
34
 
35
+ /**
36
+ * Sets the texture quality.
37
+ *
38
+ * @param {number} value - The texture quality.
39
+ */
13
40
  setQuality( value ) {
14
41
 
15
42
  this._quality = value;
16
43
 
17
44
  }
18
45
 
46
+ /**
47
+ * Starts loading from the given URL and passes the loaded Lottie asset
48
+ * to the `onLoad()` callback.
49
+ *
50
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
51
+ * @param {function(CanvasTexture)} onLoad - Executed when the loading process has been finished.
52
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
53
+ * @param {onErrorCallback} onError - Executed when errors occur.
54
+ * @returns {CanvasTexture} The Lottie texture.
55
+ */
19
56
  load( url, onLoad, onProgress, onError ) {
20
57
 
21
58
  const quality = this._quality || 1;
@@ -91,14 +91,43 @@ const _normalData = [
91
91
  [ - 0.587785, - 0.425325, - 0.688191 ], [ - 0.688191, - 0.587785, - 0.425325 ]
92
92
  ];
93
93
 
94
+ /**
95
+ * A loader for the MD2 format.
96
+ *
97
+ * The loader represents the animations of the MD2 asset as an array of animation
98
+ * clips and stores them in the `animations` property of the geometry.
99
+ *
100
+ * ```js
101
+ * const loader = new MD2Loader();
102
+ * const geometry = await loader.loadAsync( './models/md2/ogro/ogro.md2' );
103
+ *
104
+ * const animations = geometry.animations;
105
+ * ```
106
+ *
107
+ * @augments Loader
108
+ */
94
109
  class MD2Loader extends Loader {
95
110
 
111
+ /**
112
+ * Constructs a new MD2 loader.
113
+ *
114
+ * @param {LoadingManager} [manager] - The loading manager.
115
+ */
96
116
  constructor( manager ) {
97
117
 
98
118
  super( manager );
99
119
 
100
120
  }
101
121
 
122
+ /**
123
+ * Starts loading from the given URL and passes the loaded MD2 asset
124
+ * to the `onLoad()` callback.
125
+ *
126
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
127
+ * @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.
128
+ * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.
129
+ * @param {onErrorCallback} [onError] - Executed when errors occur.
130
+ */
102
131
  load( url, onLoad, onProgress, onError ) {
103
132
 
104
133
  const scope = this;
@@ -134,6 +163,12 @@ class MD2Loader extends Loader {
134
163
 
135
164
  }
136
165
 
166
+ /**
167
+ * Parses the given MD2 data and returns a geometry.
168
+ *
169
+ * @param {ArrayBuffer} buffer - The raw MD2 data as an array buffer.
170
+ * @return {BufferGeometry} The parsed geometry data.
171
+ */
137
172
  parse( buffer ) {
138
173
 
139
174
  const data = new DataView( buffer );
@@ -388,7 +423,7 @@ class MD2Loader extends Loader {
388
423
  geometry.morphAttributes.normal = morphNormals;
389
424
  geometry.morphTargetsRelative = false;
390
425
 
391
- geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10 );
426
+ geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10, false );
392
427
 
393
428
  return geometry;
394
429
 
@@ -1,15 +1,3 @@
1
- /**
2
- * MDD is a special format that stores a position for every vertex in a model for every frame in an animation.
3
- * Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.
4
- *
5
- * MDD stores its data in binary format (big endian) in the following way:
6
- *
7
- * number of frames (a single uint32)
8
- * number of vertices (a single uint32)
9
- * time values for each frame (sequence of float32)
10
- * vertex data for each frame (sequence of float32)
11
- */
12
-
13
1
  import {
14
2
  AnimationClip,
15
3
  BufferAttribute,
@@ -18,14 +6,63 @@ import {
18
6
  NumberKeyframeTrack
19
7
  } from 'three';
20
8
 
9
+ /**
10
+ * A loader for the MDD format.
11
+ *
12
+ * MDD stores a position for every vertex in a model for every frame in an animation.
13
+ * Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.
14
+ *
15
+ * MDD stores its data in binary format (big endian) in the following way:
16
+ *
17
+ * - number of frames (a single uint32)
18
+ * - number of vertices (a single uint32)
19
+ * - time values for each frame (sequence of float32)
20
+ * - vertex data for each frame (sequence of float32)
21
+ *
22
+ * ```js
23
+ * const loader = new MDDLoader();
24
+ * const result = await loader.loadAsync( 'models/mdd/cube.mdd' );
25
+ *
26
+ * const morphTargets = result.morphTargets;
27
+ * const clip = result.clip;
28
+ * // clip.optimize(); // optional
29
+ *
30
+ * const geometry = new THREE.BoxGeometry();
31
+ * geometry.morphAttributes.position = morphTargets; // apply morph targets (vertex data must match)
32
+ *
33
+ * const material = new THREE.MeshBasicMaterial();
34
+ *
35
+ * const mesh = new THREE.Mesh( geometry, material );
36
+ * scene.add( mesh );
37
+ *
38
+ * const mixer = new THREE.AnimationMixer( mesh );
39
+ * mixer.clipAction( clip ).play();
40
+ * ```
41
+ *
42
+ * @augments Loader
43
+ */
21
44
  class MDDLoader extends Loader {
22
45
 
46
+ /**
47
+ * Constructs a new MDD loader.
48
+ *
49
+ * @param {LoadingManager} [manager] - The loading manager.
50
+ */
23
51
  constructor( manager ) {
24
52
 
25
53
  super( manager );
26
54
 
27
55
  }
28
56
 
57
+ /**
58
+ * Starts loading from the given URL and passes the loaded MDD asset
59
+ * to the `onLoad()` callback.
60
+ *
61
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
62
+ * @param {function({clip:AnimationClip, morphTargets:Array<BufferAttribute>})} onLoad - Executed when the loading process has been finished.
63
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
64
+ * @param {onErrorCallback} onError - Executed when errors occur.
65
+ */
29
66
  load( url, onLoad, onProgress, onError ) {
30
67
 
31
68
  const scope = this;
@@ -41,6 +78,13 @@ class MDDLoader extends Loader {
41
78
 
42
79
  }
43
80
 
81
+ /**
82
+ * Parses the given MDD data and returns an object holding the animation clip and the respective
83
+ * morph targets.
84
+ *
85
+ * @param {ArrayBuffer} data - The raw XYZ data as an array buffer.
86
+ * @return {{clip:AnimationClip, morphTargets:Array<BufferAttribute>}} The result object.
87
+ */
44
88
  parse( data ) {
45
89
 
46
90
  const view = new DataView( data );
@@ -14,9 +14,22 @@ import {
14
14
  } from 'three';
15
15
 
16
16
  /**
17
- * Loads a Wavefront .mtl file specifying materials
17
+ * A loader for the MTL format.
18
+ *
19
+ * The Material Template Library format (MTL) or .MTL File Format is a companion file format
20
+ * to OBJ that describes surface shading (material) properties of objects within one or more
21
+ * OBJ files.
22
+ *
23
+ * ```js
24
+ * const loader = new MTLLoader();
25
+ * const materials = await loader.loadAsync( 'models/obj/male02/male02.mtl' );
26
+ *
27
+ * const objLoader = new OBJLoader();
28
+ * objLoader.setMaterials( materials );
29
+ * ```
30
+ *
31
+ * @augments Loader
18
32
  */
19
-
20
33
  class MTLLoader extends Loader {
21
34
 
22
35
  constructor( manager ) {
@@ -26,17 +39,13 @@ class MTLLoader extends Loader {
26
39
  }
27
40
 
28
41
  /**
29
- * Loads and parses a MTL asset from a URL.
30
- *
31
- * @param {string} url - URL to the MTL file.
32
- * @param {Function} [onLoad] - Callback invoked with the loaded object.
33
- * @param {Function} [onProgress] - Callback for download progress.
34
- * @param {Function} [onError] - Callback for download errors.
42
+ * Starts loading from the given URL and passes the loaded MTL asset
43
+ * to the `onLoad()` callback.
35
44
  *
36
- * @see {@link FileLoader#setPath} {@link FileLoader#setResourcePath}
37
- *
38
- * @note In order for relative texture references to resolve correctly
39
- * you must call setResourcePath() explicitly prior to load.
45
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
46
+ * @param {function(MaterialCreator)} 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.
40
49
  */
41
50
  load( url, onLoad, onProgress, onError ) {
42
51
 
@@ -74,6 +83,12 @@ class MTLLoader extends Loader {
74
83
 
75
84
  }
76
85
 
86
+ /**
87
+ * Sets the material options.
88
+ *
89
+ * @param {MTLLoader~MaterialOptions} value - The material options.
90
+ * @return {MTLLoader} A reference to this loader.
91
+ */
77
92
  setMaterialOptions( value ) {
78
93
 
79
94
  this.materialOptions = value;
@@ -82,16 +97,11 @@ class MTLLoader extends Loader {
82
97
  }
83
98
 
84
99
  /**
85
- * Parses a MTL file.
86
- *
87
- * @param {string} text - Content of MTL file
88
- * @param {string} path
89
- * @return {MaterialCreator}
90
- *
91
- * @see {@link FileLoader#setPath} {@link FileLoader#setResourcePath}
100
+ * Parses the given MTL data and returns the resulting material creator.
92
101
  *
93
- * @note In order for relative texture references to resolve correctly
94
- * you must call setResourcePath() explicitly prior to parse.
102
+ * @param {string} text - The raw MTL data as a string.
103
+ * @param {string} path - The URL base path.
104
+ * @return {MaterialCreator} The material creator.
95
105
  */
96
106
  parse( text, path ) {
97
107
 
@@ -155,18 +165,13 @@ class MTLLoader extends Loader {
155
165
  }
156
166
 
157
167
  /**
158
- * Create a new MTLLoader.MaterialCreator
159
- * @param baseUrl - Url relative to which textures are loaded
160
- * @param options - Set of options on how to construct the materials
161
- * side: Which side to apply the material
162
- * FrontSide (default), THREE.BackSide, THREE.DoubleSide
163
- * wrap: What type of wrapping to apply for textures
164
- * RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping
165
- * normalizeRGB: RGBs need to be normalized to 0-1 from 0-255
166
- * Default: false, assumed to be already normalized
167
- * ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's
168
- * Default: false
169
- * @constructor
168
+ * Material options of `MTLLoader`.
169
+ *
170
+ * @typedef {Object} MTLLoader~MaterialOptions
171
+ * @property {(FrontSide|BackSide|DoubleSide)} [side=FrontSide] - Which side to apply the material.
172
+ * @property {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)} [wrap=RepeatWrapping] - What type of wrapping to apply for textures.
173
+ * @property {boolean} [normalizeRGB=false] - Whether RGB colors should be normalized to `0-1` from `0-255`.
174
+ * @property {boolean} [ignoreZeroRGBs=false] - Ignore values of RGBs (Ka,Kd,Ks) that are all 0's.
170
175
  */
171
176
 
172
177
  class MaterialCreator {