@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -3,10 +3,10 @@ import {
3
3
  DataUtils,
4
4
  FloatType,
5
5
  HalfFloatType,
6
- NoColorSpace,
7
6
  LinearFilter,
8
7
  LinearSRGBColorSpace,
9
8
  RedFormat,
9
+ RGFormat,
10
10
  RGBAFormat
11
11
  } from 'three';
12
12
  import * as fflate from '../libs/fflate.module.js';
@@ -92,6 +92,7 @@ import * as fflate from '../libs/fflate.module.js';
92
92
  * ```
93
93
  *
94
94
  * @augments DataTextureLoader
95
+ * @three_import import { EXRLoader } from 'three/addons/loaders/EXRLoader.js';
95
96
  */
96
97
  class EXRLoader extends DataTextureLoader {
97
98
 
@@ -112,6 +113,14 @@ class EXRLoader extends DataTextureLoader {
112
113
  */
113
114
  this.type = HalfFloatType;
114
115
 
116
+ /**
117
+ * Texture output format.
118
+ *
119
+ * @type {(RGBAFormat|RGFormat|RedFormat)}
120
+ * @default RGBAFormat
121
+ */
122
+ this.outputFormat = RGBAFormat;
123
+
115
124
  }
116
125
 
117
126
  /**
@@ -1021,6 +1030,81 @@ class EXRLoader extends DataTextureLoader {
1021
1030
 
1022
1031
  }
1023
1032
 
1033
+ function lossyDctChannelDecode( channelIndex, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer ) {
1034
+
1035
+ const dataView = new DataView( outBuffer.buffer );
1036
+ const cd = channelData[ channelIndex ];
1037
+ const width = cd.width;
1038
+ const height = cd.height;
1039
+
1040
+ const numBlocksX = Math.ceil( width / 8.0 );
1041
+ const numBlocksY = Math.ceil( height / 8.0 );
1042
+ const numFullBlocksX = Math.floor( width / 8.0 );
1043
+ const leftoverX = width - ( numBlocksX - 1 ) * 8;
1044
+ const leftoverY = height - ( numBlocksY - 1 ) * 8;
1045
+
1046
+ const currAcComp = { value: 0 };
1047
+ let currDcComp = 0;
1048
+ const dctData = new Float32Array( 64 );
1049
+ const halfZigBlock = new Uint16Array( 64 );
1050
+ const rowBlock = new Uint16Array( numBlocksX * 64 );
1051
+
1052
+ for ( let blocky = 0; blocky < numBlocksY; ++ blocky ) {
1053
+
1054
+ let maxY = 8;
1055
+
1056
+ if ( blocky == numBlocksY - 1 ) maxY = leftoverY;
1057
+
1058
+ for ( let blockx = 0; blockx < numBlocksX; ++ blockx ) {
1059
+
1060
+ halfZigBlock.fill( 0 );
1061
+ halfZigBlock[ 0 ] = dcBuffer[ currDcComp ++ ];
1062
+ unRleAC( currAcComp, acBuffer, halfZigBlock );
1063
+ unZigZag( halfZigBlock, dctData );
1064
+ dctInverse( dctData );
1065
+ convertToHalf( dctData, rowBlock, blockx * 64 );
1066
+
1067
+ }
1068
+
1069
+ // Write decoded data to output buffer
1070
+ for ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {
1071
+
1072
+ let offset = rowPtrs[ channelIndex ][ y ];
1073
+
1074
+ for ( let blockx = 0; blockx < numFullBlocksX; ++ blockx ) {
1075
+
1076
+ const src = blockx * 64 + ( ( y & 0x7 ) * 8 );
1077
+
1078
+ for ( let x = 0; x < 8; ++ x ) {
1079
+
1080
+ dataView.setUint16( offset + x * INT16_SIZE * cd.type, rowBlock[ src + x ], true );
1081
+
1082
+ }
1083
+
1084
+ offset += 8 * INT16_SIZE * cd.type;
1085
+
1086
+ }
1087
+
1088
+ if ( numBlocksX != numFullBlocksX ) {
1089
+
1090
+ const src = numFullBlocksX * 64 + ( ( y & 0x7 ) * 8 );
1091
+
1092
+ for ( let x = 0; x < leftoverX; ++ x ) {
1093
+
1094
+ dataView.setUint16( offset + x * INT16_SIZE * cd.type, rowBlock[ src + x ], true );
1095
+
1096
+ }
1097
+
1098
+ }
1099
+
1100
+ }
1101
+
1102
+ }
1103
+
1104
+ cd.decoded = true;
1105
+
1106
+ }
1107
+
1024
1108
  function unRleAC( currAcComp, acBuffer, halfZigBlock ) {
1025
1109
 
1026
1110
  let acValue;
@@ -1633,8 +1717,12 @@ class EXRLoader extends DataTextureLoader {
1633
1717
 
1634
1718
  }
1635
1719
 
1636
- // Lossy DCT decode RGB channels
1637
- lossyDctDecode( cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );
1720
+ // Decode lossy DCT data if we have a valid color space conversion set with the first RGB channel present
1721
+ if ( cscSet.idx[ 0 ] !== undefined && channelData[ cscSet.idx[ 0 ] ] ) {
1722
+
1723
+ lossyDctDecode( cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );
1724
+
1725
+ }
1638
1726
 
1639
1727
  // Decode other channels
1640
1728
  for ( let i = 0; i < channelData.length; ++ i ) {
@@ -1672,7 +1760,11 @@ class EXRLoader extends DataTextureLoader {
1672
1760
 
1673
1761
  break;
1674
1762
 
1675
- case LOSSY_DCT: // skip
1763
+ case LOSSY_DCT:
1764
+
1765
+ lossyDctChannelDecode( i, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );
1766
+
1767
+ break;
1676
1768
 
1677
1769
  default:
1678
1770
  throw new Error( 'EXRLoader.parse: unsupported channel compression' );
@@ -2290,7 +2382,7 @@ class EXRLoader extends DataTextureLoader {
2290
2382
 
2291
2383
  }
2292
2384
 
2293
- function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {
2385
+ function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType, outputFormat ) {
2294
2386
 
2295
2387
  const EXRDecoder = {
2296
2388
  size: 0,
@@ -2301,6 +2393,7 @@ class EXRLoader extends DataTextureLoader {
2301
2393
  height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
2302
2394
  inputChannels: EXRHeader.channels,
2303
2395
  channelByteOffsets: {},
2396
+ shouldExpand: false,
2304
2397
  scanOrder: null,
2305
2398
  totalBytes: null,
2306
2399
  columns: null,
@@ -2378,17 +2471,16 @@ class EXRLoader extends DataTextureLoader {
2378
2471
 
2379
2472
  // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2380
2473
  let fillAlpha = false;
2474
+ let invalidOutput = false;
2381
2475
 
2476
+ // Validate if input texture contain supported channels
2382
2477
  if ( channels.R && channels.G && channels.B ) {
2383
2478
 
2384
- fillAlpha = ! channels.A;
2385
2479
  EXRDecoder.outputChannels = 4;
2386
- EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
2387
2480
 
2388
2481
  } else if ( channels.Y ) {
2389
2482
 
2390
2483
  EXRDecoder.outputChannels = 1;
2391
- EXRDecoder.decodeChannels = { Y: 0 };
2392
2484
 
2393
2485
  } else {
2394
2486
 
@@ -2396,6 +2488,83 @@ class EXRLoader extends DataTextureLoader {
2396
2488
 
2397
2489
  }
2398
2490
 
2491
+ // Setup output texture configuration
2492
+ switch ( EXRDecoder.outputChannels ) {
2493
+
2494
+ case 4:
2495
+
2496
+ if ( outputFormat == RGBAFormat ) {
2497
+
2498
+ fillAlpha = ! channels.A;
2499
+ EXRDecoder.format = RGBAFormat;
2500
+ EXRDecoder.colorSpace = LinearSRGBColorSpace;
2501
+ EXRDecoder.outputChannels = 4;
2502
+ EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
2503
+
2504
+ } else if ( outputFormat == RGFormat ) {
2505
+
2506
+ EXRDecoder.format = RGFormat;
2507
+ EXRDecoder.colorSpace = LinearSRGBColorSpace;
2508
+ EXRDecoder.outputChannels = 2;
2509
+ EXRDecoder.decodeChannels = { R: 0, G: 1 };
2510
+
2511
+ } else if ( outputFormat == RedFormat ) {
2512
+
2513
+ EXRDecoder.format = RedFormat;
2514
+ EXRDecoder.colorSpace = LinearSRGBColorSpace;
2515
+ EXRDecoder.outputChannels = 1;
2516
+ EXRDecoder.decodeChannels = { R: 0 };
2517
+
2518
+ } else {
2519
+
2520
+ invalidOutput = true;
2521
+
2522
+ }
2523
+
2524
+ break;
2525
+
2526
+ case 1:
2527
+
2528
+ if ( outputFormat == RGBAFormat ) {
2529
+
2530
+ fillAlpha = true;
2531
+ EXRDecoder.format = RGBAFormat;
2532
+ EXRDecoder.colorSpace = LinearSRGBColorSpace;
2533
+ EXRDecoder.outputChannels = 4;
2534
+ EXRDecoder.shouldExpand = true;
2535
+ EXRDecoder.decodeChannels = { Y: 0 };
2536
+
2537
+ } else if ( outputFormat == RGFormat ) {
2538
+
2539
+ EXRDecoder.format = RGFormat;
2540
+ EXRDecoder.colorSpace = LinearSRGBColorSpace;
2541
+ EXRDecoder.outputChannels = 2;
2542
+ EXRDecoder.shouldExpand = true;
2543
+ EXRDecoder.decodeChannels = { Y: 0 };
2544
+
2545
+ } else if ( outputFormat == RedFormat ) {
2546
+
2547
+ EXRDecoder.format = RedFormat;
2548
+ EXRDecoder.colorSpace = LinearSRGBColorSpace;
2549
+ EXRDecoder.outputChannels = 1;
2550
+ EXRDecoder.decodeChannels = { Y: 0 };
2551
+
2552
+ } else {
2553
+
2554
+ invalidOutput = true;
2555
+
2556
+ }
2557
+
2558
+ break;
2559
+
2560
+ default:
2561
+
2562
+ invalidOutput = true;
2563
+
2564
+ }
2565
+
2566
+ if (invalidOutput) throw new Error( 'EXRLoader.parse: invalid output format for specified file.' );
2567
+
2399
2568
  if ( EXRDecoder.type == 1 ) {
2400
2569
 
2401
2570
  // half
@@ -2485,18 +2654,6 @@ class EXRLoader extends DataTextureLoader {
2485
2654
 
2486
2655
  }
2487
2656
 
2488
- if ( EXRDecoder.outputChannels == 4 ) {
2489
-
2490
- EXRDecoder.format = RGBAFormat;
2491
- EXRDecoder.colorSpace = LinearSRGBColorSpace;
2492
-
2493
- } else {
2494
-
2495
- EXRDecoder.format = RedFormat;
2496
- EXRDecoder.colorSpace = NoColorSpace;
2497
-
2498
- }
2499
-
2500
2657
  if ( EXRHeader.spec.singleTile ) {
2501
2658
 
2502
2659
  EXRDecoder.blockHeight = EXRHeader.tiles.ySize;
@@ -2542,11 +2699,30 @@ class EXRLoader extends DataTextureLoader {
2542
2699
  const EXRHeader = parseHeader( bufferDataView, buffer, offset );
2543
2700
 
2544
2701
  // get input compression information and prepare decoding.
2545
- const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2702
+ const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type, this.outputFormat );
2546
2703
 
2547
2704
  // parse input data
2548
2705
  EXRDecoder.decode();
2549
2706
 
2707
+ // output texture post-processing
2708
+ if ( EXRDecoder.shouldExpand ) {
2709
+
2710
+ const byteArray = EXRDecoder.byteArray;
2711
+
2712
+ if ( this.outputFormat == RGBAFormat ) {
2713
+
2714
+ for ( let i = 0; i < byteArray.length; i += 4 )
2715
+ byteArray [i + 2 ] = ( byteArray [ i + 1 ] = byteArray[ i ] );
2716
+
2717
+ } else if ( this.outputFormat == RGFormat ) {
2718
+
2719
+ for ( let i = 0; i < byteArray.length; i += 2 )
2720
+ byteArray [ i + 1 ] = byteArray[ i ] ;
2721
+
2722
+ }
2723
+
2724
+ }
2725
+
2550
2726
  return {
2551
2727
  header: EXRHeader,
2552
2728
  width: EXRDecoder.width,
@@ -2563,7 +2739,7 @@ class EXRLoader extends DataTextureLoader {
2563
2739
  * Sets the texture type.
2564
2740
  *
2565
2741
  * @param {(HalfFloatType|FloatType)} value - The texture type to set.
2566
- * @return {RGBMLoader} A reference to this loader.
2742
+ * @return {EXRLoader} A reference to this loader.
2567
2743
  */
2568
2744
  setDataType( value ) {
2569
2745
 
@@ -2572,6 +2748,19 @@ class EXRLoader extends DataTextureLoader {
2572
2748
 
2573
2749
  }
2574
2750
 
2751
+ /**
2752
+ * Sets texture output format. Defaults to `RGBAFormat`.
2753
+ *
2754
+ * @param {(RGBAFormat|RGFormat|RedFormat)} value - Texture output format.
2755
+ * @return {EXRLoader} A reference to this loader.
2756
+ */
2757
+ setOutputFormat( value ) {
2758
+
2759
+ this.outputFormat = value;
2760
+ return this;
2761
+
2762
+ }
2763
+
2575
2764
  load( url, onLoad, onProgress, onError ) {
2576
2765
 
2577
2766
  function onLoadCallback( texture, texData ) {
@@ -73,6 +73,7 @@ let sceneGraph;
73
73
  * ```
74
74
  *
75
75
  * @augments Loader
76
+ * @three_import import { FBXLoader } from 'three/addons/loaders/FBXLoader.js';
76
77
  */
77
78
  class FBXLoader extends Loader {
78
79
 
@@ -137,7 +138,7 @@ class FBXLoader extends Loader {
137
138
  /**
138
139
  * Parses the given FBX data and returns the resulting group.
139
140
  *
140
- * @param {Array} FBXBuffer - The raw FBX data as an array buffer.
141
+ * @param {ArrayBuffer} FBXBuffer - The raw FBX data as an array buffer.
141
142
  * @param {string} path - The URL base path.
142
143
  * @return {Group} An object representing the parsed asset.
143
144
  */
@@ -347,6 +348,11 @@ class FBXTreeParser {
347
348
  type = 'image/tga';
348
349
  break;
349
350
 
351
+ case 'webp':
352
+
353
+ type = 'image/webp';
354
+ break;
355
+
350
356
  default:
351
357
 
352
358
  console.warn( 'FBXLoader: Image type "' + extension + '" is not supported.' );
@@ -436,21 +442,10 @@ class FBXTreeParser {
436
442
  // load a texture specified as a blob or data URI, or via an external URL using TextureLoader
437
443
  loadTexture( textureNode, images ) {
438
444
 
439
- const nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );
440
-
441
445
  const extension = textureNode.FileName.split( '.' ).pop().toLowerCase();
442
446
 
443
- const loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;
444
-
445
- if ( ! loader ) {
446
-
447
- console.warn(
448
- `FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,
449
- textureNode.RelativeFilename
450
- );
451
- return new Texture();
452
-
453
- }
447
+ let loader = this.manager.getHandler( `.${extension}` );
448
+ if ( loader === null ) loader = this.textureLoader;
454
449
 
455
450
  const loaderPath = loader.path;
456
451
 
@@ -476,6 +471,13 @@ class FBXTreeParser {
476
471
 
477
472
  }
478
473
 
474
+ if ( fileName === undefined ) {
475
+
476
+ console.warn( 'FBXLoader: Undefined filename, creating placeholder texture.' );
477
+ return new Texture();
478
+
479
+ }
480
+
479
481
  const texture = loader.load( fileName );
480
482
 
481
483
  // revert to initial path
@@ -567,12 +569,12 @@ class FBXTreeParser {
567
569
 
568
570
  if ( materialNode.Diffuse ) {
569
571
 
570
- parameters.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Diffuse.value ), SRGBColorSpace );
572
+ parameters.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Diffuse.value ), SRGBColorSpace );
571
573
 
572
574
  } else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {
573
575
 
574
576
  // The blender exporter exports diffuse here instead of in materialNode.Diffuse
575
- parameters.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.DiffuseColor.value ), SRGBColorSpace );
577
+ parameters.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.DiffuseColor.value ), SRGBColorSpace );
576
578
 
577
579
  }
578
580
 
@@ -584,12 +586,12 @@ class FBXTreeParser {
584
586
 
585
587
  if ( materialNode.Emissive ) {
586
588
 
587
- parameters.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Emissive.value ), SRGBColorSpace );
589
+ parameters.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Emissive.value ), SRGBColorSpace );
588
590
 
589
591
  } else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {
590
592
 
591
593
  // The blender exporter exports emissive color here instead of in materialNode.Emissive
592
- parameters.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.EmissiveColor.value ), SRGBColorSpace );
594
+ parameters.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.EmissiveColor.value ), SRGBColorSpace );
593
595
 
594
596
  }
595
597
 
@@ -635,12 +637,12 @@ class FBXTreeParser {
635
637
 
636
638
  if ( materialNode.Specular ) {
637
639
 
638
- parameters.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Specular.value ), SRGBColorSpace );
640
+ parameters.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Specular.value ), SRGBColorSpace );
639
641
 
640
642
  } else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {
641
643
 
642
644
  // The blender exporter exports specular color here instead of in materialNode.Specular
643
- parameters.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.SpecularColor.value ), SRGBColorSpace );
645
+ parameters.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.SpecularColor.value ), SRGBColorSpace );
644
646
 
645
647
  }
646
648
 
@@ -1191,7 +1193,7 @@ class FBXTreeParser {
1191
1193
 
1192
1194
  if ( lightAttribute.Color !== undefined ) {
1193
1195
 
1194
- color = ColorManagement.toWorkingColorSpace( new Color().fromArray( lightAttribute.Color.value ), SRGBColorSpace );
1196
+ color = ColorManagement.colorSpaceToWorking( new Color().fromArray( lightAttribute.Color.value ), SRGBColorSpace );
1195
1197
 
1196
1198
  }
1197
1199
 
@@ -1782,7 +1784,7 @@ class GeometryParser {
1782
1784
  geoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];
1783
1785
  geoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];
1784
1786
 
1785
- if ( geoNode.LayerElementColor ) {
1787
+ if ( geoNode.LayerElementColor && geoNode.LayerElementColor[ 0 ].Colors ) {
1786
1788
 
1787
1789
  geoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );
1788
1790
 
@@ -2389,7 +2391,7 @@ class GeometryParser {
2389
2391
  for ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {
2390
2392
 
2391
2393
  c.fromArray( buffer, i );
2392
- ColorManagement.toWorkingColorSpace( c, SRGBColorSpace );
2394
+ ColorManagement.colorSpaceToWorking( c, SRGBColorSpace );
2393
2395
  c.toArray( buffer, i );
2394
2396
 
2395
2397
  }
@@ -15,6 +15,7 @@ import {
15
15
  * ```
16
16
  *
17
17
  * @augments Loader
18
+ * @three_import import { FontLoader } from 'three/addons/loaders/FontLoader.js';
18
19
  */
19
20
  class FontLoader extends Loader {
20
21
 
@@ -20,6 +20,7 @@ import {
20
20
  * ```
21
21
  *
22
22
  * @augments Loader
23
+ * @three_import import { GCodeLoader } from 'three/addons/loaders/GCodeLoader.js';
23
24
  */
24
25
  class GCodeLoader extends Loader {
25
26
 
@@ -115,6 +115,7 @@ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
115
115
  * ```
116
116
  *
117
117
  * @augments Loader
118
+ * @three_import import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
118
119
  */
119
120
  class GLTFLoader extends Loader {
120
121
 
@@ -1580,7 +1581,6 @@ class GLTFTextureWebPExtension {
1580
1581
 
1581
1582
  this.parser = parser;
1582
1583
  this.name = EXTENSIONS.EXT_TEXTURE_WEBP;
1583
- this.isSupported = null;
1584
1584
 
1585
1585
  }
1586
1586
 
@@ -1609,46 +1609,7 @@ class GLTFTextureWebPExtension {
1609
1609
 
1610
1610
  }
1611
1611
 
1612
- return this.detectSupport().then( function ( isSupported ) {
1613
-
1614
- if ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );
1615
-
1616
- if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {
1617
-
1618
- throw new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );
1619
-
1620
- }
1621
-
1622
- // Fall back to PNG or JPEG.
1623
- return parser.loadTexture( textureIndex );
1624
-
1625
- } );
1626
-
1627
- }
1628
-
1629
- detectSupport() {
1630
-
1631
- if ( ! this.isSupported ) {
1632
-
1633
- this.isSupported = new Promise( function ( resolve ) {
1634
-
1635
- const image = new Image();
1636
-
1637
- // Lossy test image. Support for lossy images doesn't guarantee support for all
1638
- // WebP images, unfortunately.
1639
- image.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';
1640
-
1641
- image.onload = image.onerror = function () {
1642
-
1643
- resolve( image.height === 1 );
1644
-
1645
- };
1646
-
1647
- } );
1648
-
1649
- }
1650
-
1651
- return this.isSupported;
1612
+ return parser.loadTextureImage( textureIndex, extension.source, loader );
1652
1613
 
1653
1614
  }
1654
1615
 
@@ -1667,7 +1628,6 @@ class GLTFTextureAVIFExtension {
1667
1628
 
1668
1629
  this.parser = parser;
1669
1630
  this.name = EXTENSIONS.EXT_TEXTURE_AVIF;
1670
- this.isSupported = null;
1671
1631
 
1672
1632
  }
1673
1633
 
@@ -1696,44 +1656,7 @@ class GLTFTextureAVIFExtension {
1696
1656
 
1697
1657
  }
1698
1658
 
1699
- return this.detectSupport().then( function ( isSupported ) {
1700
-
1701
- if ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );
1702
-
1703
- if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {
1704
-
1705
- throw new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );
1706
-
1707
- }
1708
-
1709
- // Fall back to PNG or JPEG.
1710
- return parser.loadTexture( textureIndex );
1711
-
1712
- } );
1713
-
1714
- }
1715
-
1716
- detectSupport() {
1717
-
1718
- if ( ! this.isSupported ) {
1719
-
1720
- this.isSupported = new Promise( function ( resolve ) {
1721
-
1722
- const image = new Image();
1723
-
1724
- // Lossy test image.
1725
- image.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';
1726
- image.onload = image.onerror = function () {
1727
-
1728
- resolve( image.height === 1 );
1729
-
1730
- };
1731
-
1732
- } );
1733
-
1734
- }
1735
-
1736
- return this.isSupported;
1659
+ return parser.loadTextureImage( textureIndex, extension.source, loader );
1737
1660
 
1738
1661
  }
1739
1662
 
@@ -2294,7 +2217,7 @@ class GLTFCubicSplineInterpolant extends Interpolant {
2294
2217
 
2295
2218
  }
2296
2219
 
2297
- const _q = new Quaternion();
2220
+ const _quaternion = new Quaternion();
2298
2221
 
2299
2222
  class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
2300
2223
 
@@ -2302,7 +2225,7 @@ class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
2302
2225
 
2303
2226
  const result = super.interpolate_( i1, t0, t, t1 );
2304
2227
 
2305
- _q.fromArray( result ).normalize().toArray( result );
2228
+ _quaternion.fromArray( result ).normalize().toArray( result );
2306
2229
 
2307
2230
  return result;
2308
2231
 
@@ -4528,6 +4451,11 @@ class GLTFParser {
4528
4451
 
4529
4452
  parser.associations.set( node, {} );
4530
4453
 
4454
+ } else if ( nodeDef.mesh !== undefined && parser.meshCache.refs[ nodeDef.mesh ] > 1 ) {
4455
+
4456
+ const mapping = parser.associations.get( node );
4457
+ parser.associations.set( node, { ...mapping } );
4458
+
4531
4459
  }
4532
4460
 
4533
4461
  parser.associations.get( node ).nodes = nodeIndex;
@@ -23,6 +23,7 @@ import { RGBELoader } from '../loaders/RGBELoader.js';
23
23
  * ```
24
24
  *
25
25
  * @augments Loader
26
+ * @three_import import { HDRCubeTextureLoader } from 'three/addons/loaders/HDRCubeTextureLoader.js';
26
27
  */
27
28
  class HDRCubeTextureLoader extends Loader {
28
29
 
@@ -25,6 +25,7 @@ import {
25
25
  * ```
26
26
  *
27
27
  * @augments Loader
28
+ * @three_import import { IESLoader } from 'three/addons/loaders/IESLoader.js';
28
29
  */
29
30
  class IESLoader extends Loader {
30
31
 
@@ -18,6 +18,7 @@ import * as fflate from '../libs/fflate.module.js';
18
18
  * ```
19
19
  *
20
20
  * @augments Loader
21
+ * @three_import import { KMZLoader } from 'three/addons/loaders/KMZLoader.js';
21
22
  */
22
23
  class KMZLoader extends Loader {
23
24