super-three 0.179.0 → 0.184.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 (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -66,11 +66,12 @@ import {
66
66
  InstancedBufferAttribute
67
67
  } from 'three';
68
68
  import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
69
+ import { clone } from '../utils/SkeletonUtils.js';
69
70
 
70
71
  /**
71
72
  * A loader for the glTF 2.0 format.
72
73
  *
73
- * [glTF]{@link https://www.khronos.org/gltf/} (GL Transmission Format) is an [open format specification]{@link https://github.com/KhronosGroup/glTF/tree/main/specification/2.0}
74
+ * [glTF](https://www.khronos.org/gltf/) (GL Transmission Format) is an [open format specification]{@link https://github.com/KhronosGroup/glTF/tree/main/specification/2.0)
74
75
  * for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf) or binary (.glb)
75
76
  * format. External files store textures (.jpg, .png) and additional binary data (.bin). A glTF asset may deliver
76
77
  * one or more scenes, including meshes, materials, textures, skins, skeletons, morph targets, animations, lights,
@@ -82,8 +83,11 @@ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
82
83
  *
83
84
  * `GLTFLoader` supports the following glTF 2.0 extensions:
84
85
  * - KHR_draco_mesh_compression
86
+ * - KHR_lights_punctual
87
+ * - KHR_materials_anisotropy
85
88
  * - KHR_materials_clearcoat
86
89
  * - KHR_materials_dispersion
90
+ * - KHR_materials_emissive_strength
87
91
  * - KHR_materials_ior
88
92
  * - KHR_materials_specular
89
93
  * - KHR_materials_transmission
@@ -91,16 +95,20 @@ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
91
95
  * - KHR_materials_unlit
92
96
  * - KHR_materials_volume
93
97
  * - KHR_mesh_quantization
94
- * - KHR_lights_punctual
98
+ * - KHR_meshopt_compression
95
99
  * - KHR_texture_basisu
96
100
  * - KHR_texture_transform
97
- * - EXT_texture_webp
101
+ * - EXT_materials_bump
98
102
  * - EXT_meshopt_compression
99
103
  * - EXT_mesh_gpu_instancing
104
+ * - EXT_texture_avif
105
+ * - EXT_texture_webp
100
106
  *
101
107
  * The following glTF 2.0 extension is supported by an external user plugin:
102
- * - [KHR_materials_variants]{@link https://github.com/takahirox/three-gltf-extensions}
103
- * - [MSFT_texture_dds]{@link https://github.com/takahirox/three-gltf-extensions}
108
+ * - [KHR_materials_variants](https://github.com/takahirox/three-gltf-extensions)
109
+ * - [MSFT_texture_dds](https://github.com/takahirox/three-gltf-extensions)
110
+ * - [KHR_animation_pointer](https://github.com/needle-tools/three-animation-pointer)
111
+ * - [NEEDLE_progressive](https://github.com/needle-tools/gltf-progressive)
104
112
  *
105
113
  * ```js
106
114
  * const loader = new GLTFLoader();
@@ -226,7 +234,13 @@ class GLTFLoader extends Loader {
226
234
 
227
235
  this.register( function ( parser ) {
228
236
 
229
- return new GLTFMeshoptCompression( parser );
237
+ return new GLTFMeshoptCompression( parser, EXTENSIONS.EXT_MESHOPT_COMPRESSION );
238
+
239
+ } );
240
+
241
+ this.register( function ( parser ) {
242
+
243
+ return new GLTFMeshoptCompression( parser, EXTENSIONS.KHR_MESHOPT_COMPRESSION );
230
244
 
231
245
  } );
232
246
 
@@ -405,7 +419,7 @@ class GLTFLoader extends Loader {
405
419
  }
406
420
 
407
421
  /**
408
- * Parses the given FBX data and returns the resulting group.
422
+ * Parses the given glTF data and returns the resulting group.
409
423
  *
410
424
  * @param {string|ArrayBuffer} data - The raw glTF data.
411
425
  * @param {string} path - The URL base path.
@@ -597,6 +611,20 @@ function GLTFRegistry() {
597
611
  /********** EXTENSIONS ***********/
598
612
  /*********************************/
599
613
 
614
+ function getMaterialExtension( parser, materialIndex, extensionName ) {
615
+
616
+ const materialDef = parser.json.materials[ materialIndex ];
617
+
618
+ if ( materialDef.extensions && materialDef.extensions[ extensionName ] ) {
619
+
620
+ return materialDef.extensions[ extensionName ];
621
+
622
+ }
623
+
624
+ return null;
625
+
626
+ }
627
+
600
628
  const EXTENSIONS = {
601
629
  KHR_BINARY_GLTF: 'KHR_binary_glTF',
602
630
  KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
@@ -619,6 +647,7 @@ const EXTENSIONS = {
619
647
  EXT_TEXTURE_WEBP: 'EXT_texture_webp',
620
648
  EXT_TEXTURE_AVIF: 'EXT_texture_avif',
621
649
  EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
650
+ KHR_MESHOPT_COMPRESSION: 'KHR_meshopt_compression',
622
651
  EXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'
623
652
  };
624
653
 
@@ -833,20 +862,13 @@ class GLTFMaterialsEmissiveStrengthExtension {
833
862
 
834
863
  extendMaterialParams( materialIndex, materialParams ) {
835
864
 
836
- const parser = this.parser;
837
- const materialDef = parser.json.materials[ materialIndex ];
838
-
839
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
865
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
840
866
 
841
- return Promise.resolve();
867
+ if ( extension === null ) return Promise.resolve();
842
868
 
843
- }
844
-
845
- const emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;
869
+ if ( extension.emissiveStrength !== undefined ) {
846
870
 
847
- if ( emissiveStrength !== undefined ) {
848
-
849
- materialParams.emissiveIntensity = emissiveStrength;
871
+ materialParams.emissiveIntensity = extension.emissiveStrength;
850
872
 
851
873
  }
852
874
 
@@ -874,30 +896,20 @@ class GLTFMaterialsClearcoatExtension {
874
896
 
875
897
  getMaterialType( materialIndex ) {
876
898
 
877
- const parser = this.parser;
878
- const materialDef = parser.json.materials[ materialIndex ];
899
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
879
900
 
880
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
881
-
882
- return MeshPhysicalMaterial;
901
+ return extension !== null ? MeshPhysicalMaterial : null;
883
902
 
884
903
  }
885
904
 
886
905
  extendMaterialParams( materialIndex, materialParams ) {
887
906
 
888
- const parser = this.parser;
889
- const materialDef = parser.json.materials[ materialIndex ];
890
-
891
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
907
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
892
908
 
893
- return Promise.resolve();
894
-
895
- }
909
+ if ( extension === null ) return Promise.resolve();
896
910
 
897
911
  const pending = [];
898
912
 
899
- const extension = materialDef.extensions[ this.name ];
900
-
901
913
  if ( extension.clearcoatFactor !== undefined ) {
902
914
 
903
915
  materialParams.clearcoat = extension.clearcoatFactor;
@@ -906,7 +918,7 @@ class GLTFMaterialsClearcoatExtension {
906
918
 
907
919
  if ( extension.clearcoatTexture !== undefined ) {
908
920
 
909
- pending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );
921
+ pending.push( this.parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );
910
922
 
911
923
  }
912
924
 
@@ -918,13 +930,13 @@ class GLTFMaterialsClearcoatExtension {
918
930
 
919
931
  if ( extension.clearcoatRoughnessTexture !== undefined ) {
920
932
 
921
- pending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );
933
+ pending.push( this.parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );
922
934
 
923
935
  }
924
936
 
925
937
  if ( extension.clearcoatNormalTexture !== undefined ) {
926
938
 
927
- pending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );
939
+ pending.push( this.parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );
928
940
 
929
941
  if ( extension.clearcoatNormalTexture.scale !== undefined ) {
930
942
 
@@ -960,27 +972,17 @@ class GLTFMaterialsDispersionExtension {
960
972
 
961
973
  getMaterialType( materialIndex ) {
962
974
 
963
- const parser = this.parser;
964
- const materialDef = parser.json.materials[ materialIndex ];
965
-
966
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
975
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
967
976
 
968
- return MeshPhysicalMaterial;
977
+ return extension !== null ? MeshPhysicalMaterial : null;
969
978
 
970
979
  }
971
980
 
972
981
  extendMaterialParams( materialIndex, materialParams ) {
973
982
 
974
- const parser = this.parser;
975
- const materialDef = parser.json.materials[ materialIndex ];
976
-
977
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
978
-
979
- return Promise.resolve();
983
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
980
984
 
981
- }
982
-
983
- const extension = materialDef.extensions[ this.name ];
985
+ if ( extension === null ) return Promise.resolve();
984
986
 
985
987
  materialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;
986
988
 
@@ -1008,30 +1010,20 @@ class GLTFMaterialsIridescenceExtension {
1008
1010
 
1009
1011
  getMaterialType( materialIndex ) {
1010
1012
 
1011
- const parser = this.parser;
1012
- const materialDef = parser.json.materials[ materialIndex ];
1013
-
1014
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1013
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1015
1014
 
1016
- return MeshPhysicalMaterial;
1015
+ return extension !== null ? MeshPhysicalMaterial : null;
1017
1016
 
1018
1017
  }
1019
1018
 
1020
1019
  extendMaterialParams( materialIndex, materialParams ) {
1021
1020
 
1022
- const parser = this.parser;
1023
- const materialDef = parser.json.materials[ materialIndex ];
1024
-
1025
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1021
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1026
1022
 
1027
- return Promise.resolve();
1028
-
1029
- }
1023
+ if ( extension === null ) return Promise.resolve();
1030
1024
 
1031
1025
  const pending = [];
1032
1026
 
1033
- const extension = materialDef.extensions[ this.name ];
1034
-
1035
1027
  if ( extension.iridescenceFactor !== undefined ) {
1036
1028
 
1037
1029
  materialParams.iridescence = extension.iridescenceFactor;
@@ -1040,7 +1032,7 @@ class GLTFMaterialsIridescenceExtension {
1040
1032
 
1041
1033
  if ( extension.iridescenceTexture !== undefined ) {
1042
1034
 
1043
- pending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );
1035
+ pending.push( this.parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );
1044
1036
 
1045
1037
  }
1046
1038
 
@@ -1070,7 +1062,7 @@ class GLTFMaterialsIridescenceExtension {
1070
1062
 
1071
1063
  if ( extension.iridescenceThicknessTexture !== undefined ) {
1072
1064
 
1073
- pending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );
1065
+ pending.push( this.parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );
1074
1066
 
1075
1067
  }
1076
1068
 
@@ -1098,25 +1090,17 @@ class GLTFMaterialsSheenExtension {
1098
1090
 
1099
1091
  getMaterialType( materialIndex ) {
1100
1092
 
1101
- const parser = this.parser;
1102
- const materialDef = parser.json.materials[ materialIndex ];
1103
-
1104
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1093
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1105
1094
 
1106
- return MeshPhysicalMaterial;
1095
+ return extension !== null ? MeshPhysicalMaterial : null;
1107
1096
 
1108
1097
  }
1109
1098
 
1110
1099
  extendMaterialParams( materialIndex, materialParams ) {
1111
1100
 
1112
- const parser = this.parser;
1113
- const materialDef = parser.json.materials[ materialIndex ];
1101
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1114
1102
 
1115
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1116
-
1117
- return Promise.resolve();
1118
-
1119
- }
1103
+ if ( extension === null ) return Promise.resolve();
1120
1104
 
1121
1105
  const pending = [];
1122
1106
 
@@ -1124,8 +1108,6 @@ class GLTFMaterialsSheenExtension {
1124
1108
  materialParams.sheenRoughness = 0;
1125
1109
  materialParams.sheen = 1;
1126
1110
 
1127
- const extension = materialDef.extensions[ this.name ];
1128
-
1129
1111
  if ( extension.sheenColorFactor !== undefined ) {
1130
1112
 
1131
1113
  const colorFactor = extension.sheenColorFactor;
@@ -1141,13 +1123,13 @@ class GLTFMaterialsSheenExtension {
1141
1123
 
1142
1124
  if ( extension.sheenColorTexture !== undefined ) {
1143
1125
 
1144
- pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );
1126
+ pending.push( this.parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );
1145
1127
 
1146
1128
  }
1147
1129
 
1148
1130
  if ( extension.sheenRoughnessTexture !== undefined ) {
1149
1131
 
1150
- pending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
1132
+ pending.push( this.parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
1151
1133
 
1152
1134
  }
1153
1135
 
@@ -1176,30 +1158,20 @@ class GLTFMaterialsTransmissionExtension {
1176
1158
 
1177
1159
  getMaterialType( materialIndex ) {
1178
1160
 
1179
- const parser = this.parser;
1180
- const materialDef = parser.json.materials[ materialIndex ];
1181
-
1182
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1161
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1183
1162
 
1184
- return MeshPhysicalMaterial;
1163
+ return extension !== null ? MeshPhysicalMaterial : null;
1185
1164
 
1186
1165
  }
1187
1166
 
1188
1167
  extendMaterialParams( materialIndex, materialParams ) {
1189
1168
 
1190
- const parser = this.parser;
1191
- const materialDef = parser.json.materials[ materialIndex ];
1192
-
1193
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1169
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1194
1170
 
1195
- return Promise.resolve();
1196
-
1197
- }
1171
+ if ( extension === null ) return Promise.resolve();
1198
1172
 
1199
1173
  const pending = [];
1200
1174
 
1201
- const extension = materialDef.extensions[ this.name ];
1202
-
1203
1175
  if ( extension.transmissionFactor !== undefined ) {
1204
1176
 
1205
1177
  materialParams.transmission = extension.transmissionFactor;
@@ -1208,7 +1180,7 @@ class GLTFMaterialsTransmissionExtension {
1208
1180
 
1209
1181
  if ( extension.transmissionTexture !== undefined ) {
1210
1182
 
1211
- pending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );
1183
+ pending.push( this.parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );
1212
1184
 
1213
1185
  }
1214
1186
 
@@ -1236,35 +1208,25 @@ class GLTFMaterialsVolumeExtension {
1236
1208
 
1237
1209
  getMaterialType( materialIndex ) {
1238
1210
 
1239
- const parser = this.parser;
1240
- const materialDef = parser.json.materials[ materialIndex ];
1211
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1241
1212
 
1242
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1243
-
1244
- return MeshPhysicalMaterial;
1213
+ return extension !== null ? MeshPhysicalMaterial : null;
1245
1214
 
1246
1215
  }
1247
1216
 
1248
1217
  extendMaterialParams( materialIndex, materialParams ) {
1249
1218
 
1250
- const parser = this.parser;
1251
- const materialDef = parser.json.materials[ materialIndex ];
1252
-
1253
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1219
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1254
1220
 
1255
- return Promise.resolve();
1256
-
1257
- }
1221
+ if ( extension === null ) return Promise.resolve();
1258
1222
 
1259
1223
  const pending = [];
1260
1224
 
1261
- const extension = materialDef.extensions[ this.name ];
1262
-
1263
1225
  materialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;
1264
1226
 
1265
1227
  if ( extension.thicknessTexture !== undefined ) {
1266
1228
 
1267
- pending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );
1229
+ pending.push( this.parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );
1268
1230
 
1269
1231
  }
1270
1232
 
@@ -1297,30 +1259,22 @@ class GLTFMaterialsIorExtension {
1297
1259
 
1298
1260
  getMaterialType( materialIndex ) {
1299
1261
 
1300
- const parser = this.parser;
1301
- const materialDef = parser.json.materials[ materialIndex ];
1302
-
1303
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1262
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1304
1263
 
1305
- return MeshPhysicalMaterial;
1264
+ return extension !== null ? MeshPhysicalMaterial : null;
1306
1265
 
1307
1266
  }
1308
1267
 
1309
1268
  extendMaterialParams( materialIndex, materialParams ) {
1310
1269
 
1311
- const parser = this.parser;
1312
- const materialDef = parser.json.materials[ materialIndex ];
1313
-
1314
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1315
-
1316
- return Promise.resolve();
1270
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1317
1271
 
1318
- }
1319
-
1320
- const extension = materialDef.extensions[ this.name ];
1272
+ if ( extension === null ) return Promise.resolve();
1321
1273
 
1322
1274
  materialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;
1323
1275
 
1276
+ if ( materialParams.ior === 0 ) materialParams.ior = 1000; // see #26167
1277
+
1324
1278
  return Promise.resolve();
1325
1279
 
1326
1280
  }
@@ -1345,35 +1299,25 @@ class GLTFMaterialsSpecularExtension {
1345
1299
 
1346
1300
  getMaterialType( materialIndex ) {
1347
1301
 
1348
- const parser = this.parser;
1349
- const materialDef = parser.json.materials[ materialIndex ];
1350
-
1351
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1302
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1352
1303
 
1353
- return MeshPhysicalMaterial;
1304
+ return extension !== null ? MeshPhysicalMaterial : null;
1354
1305
 
1355
1306
  }
1356
1307
 
1357
1308
  extendMaterialParams( materialIndex, materialParams ) {
1358
1309
 
1359
- const parser = this.parser;
1360
- const materialDef = parser.json.materials[ materialIndex ];
1361
-
1362
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1310
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1363
1311
 
1364
- return Promise.resolve();
1365
-
1366
- }
1312
+ if ( extension === null ) return Promise.resolve();
1367
1313
 
1368
1314
  const pending = [];
1369
1315
 
1370
- const extension = materialDef.extensions[ this.name ];
1371
-
1372
1316
  materialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;
1373
1317
 
1374
1318
  if ( extension.specularTexture !== undefined ) {
1375
1319
 
1376
- pending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );
1320
+ pending.push( this.parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );
1377
1321
 
1378
1322
  }
1379
1323
 
@@ -1382,7 +1326,7 @@ class GLTFMaterialsSpecularExtension {
1382
1326
 
1383
1327
  if ( extension.specularColorTexture !== undefined ) {
1384
1328
 
1385
- pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );
1329
+ pending.push( this.parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );
1386
1330
 
1387
1331
  }
1388
1332
 
@@ -1411,35 +1355,25 @@ class GLTFMaterialsBumpExtension {
1411
1355
 
1412
1356
  getMaterialType( materialIndex ) {
1413
1357
 
1414
- const parser = this.parser;
1415
- const materialDef = parser.json.materials[ materialIndex ];
1416
-
1417
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1358
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1418
1359
 
1419
- return MeshPhysicalMaterial;
1360
+ return extension !== null ? MeshPhysicalMaterial : null;
1420
1361
 
1421
1362
  }
1422
1363
 
1423
1364
  extendMaterialParams( materialIndex, materialParams ) {
1424
1365
 
1425
- const parser = this.parser;
1426
- const materialDef = parser.json.materials[ materialIndex ];
1427
-
1428
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1366
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1429
1367
 
1430
- return Promise.resolve();
1431
-
1432
- }
1368
+ if ( extension === null ) return Promise.resolve();
1433
1369
 
1434
1370
  const pending = [];
1435
1371
 
1436
- const extension = materialDef.extensions[ this.name ];
1437
-
1438
1372
  materialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;
1439
1373
 
1440
1374
  if ( extension.bumpTexture !== undefined ) {
1441
1375
 
1442
- pending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );
1376
+ pending.push( this.parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );
1443
1377
 
1444
1378
  }
1445
1379
 
@@ -1467,30 +1401,20 @@ class GLTFMaterialsAnisotropyExtension {
1467
1401
 
1468
1402
  getMaterialType( materialIndex ) {
1469
1403
 
1470
- const parser = this.parser;
1471
- const materialDef = parser.json.materials[ materialIndex ];
1472
-
1473
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1404
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1474
1405
 
1475
- return MeshPhysicalMaterial;
1406
+ return extension !== null ? MeshPhysicalMaterial : null;
1476
1407
 
1477
1408
  }
1478
1409
 
1479
1410
  extendMaterialParams( materialIndex, materialParams ) {
1480
1411
 
1481
- const parser = this.parser;
1482
- const materialDef = parser.json.materials[ materialIndex ];
1412
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
1483
1413
 
1484
- if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1485
-
1486
- return Promise.resolve();
1487
-
1488
- }
1414
+ if ( extension === null ) return Promise.resolve();
1489
1415
 
1490
1416
  const pending = [];
1491
1417
 
1492
- const extension = materialDef.extensions[ this.name ];
1493
-
1494
1418
  if ( extension.anisotropyStrength !== undefined ) {
1495
1419
 
1496
1420
  materialParams.anisotropy = extension.anisotropyStrength;
@@ -1505,7 +1429,7 @@ class GLTFMaterialsAnisotropyExtension {
1505
1429
 
1506
1430
  if ( extension.anisotropyTexture !== undefined ) {
1507
1431
 
1508
- pending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
1432
+ pending.push( this.parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
1509
1433
 
1510
1434
  }
1511
1435
 
@@ -1671,9 +1595,9 @@ class GLTFTextureAVIFExtension {
1671
1595
  */
1672
1596
  class GLTFMeshoptCompression {
1673
1597
 
1674
- constructor( parser ) {
1598
+ constructor( parser, name ) {
1675
1599
 
1676
- this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;
1600
+ this.name = name;
1677
1601
  this.parser = parser;
1678
1602
 
1679
1603
  }
@@ -2376,7 +2300,7 @@ function addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {
2376
2300
  /**
2377
2301
  *
2378
2302
  * @private
2379
- * @param {Object3D|Material|BufferGeometry|Object} object
2303
+ * @param {Object3D|Material|BufferGeometry|Object|AnimationClip} object
2380
2304
  * @param {GLTF.definition} gltfDef
2381
2305
  */
2382
2306
  function assignExtrasToUserData( object, gltfDef ) {
@@ -2660,7 +2584,7 @@ class GLTFParser {
2660
2584
  let isFirefox = false;
2661
2585
  let firefoxVersion = - 1;
2662
2586
 
2663
- if ( typeof navigator !== 'undefined' ) {
2587
+ if ( typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined' ) {
2664
2588
 
2665
2589
  const userAgent = navigator.userAgent;
2666
2590
 
@@ -2943,7 +2867,7 @@ class GLTFParser {
2943
2867
  * @private
2944
2868
  * @param {string} type
2945
2869
  * @param {number} index
2946
- * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}
2870
+ * @return {Promise<Object3D|Material|Texture|AnimationClip|ArrayBuffer|Object>}
2947
2871
  */
2948
2872
  getDependency( type, index ) {
2949
2873
 
@@ -3283,7 +3207,7 @@ class GLTFParser {
3283
3207
  *
3284
3208
  * @private
3285
3209
  * @param {number} textureIndex
3286
- * @return {Promise<THREE.Texture|null>}
3210
+ * @return {Promise<?Texture>}
3287
3211
  */
3288
3212
  loadTexture( textureIndex ) {
3289
3213
 
@@ -4020,7 +3944,7 @@ class GLTFParser {
4020
3944
  *
4021
3945
  * @private
4022
3946
  * @param {number} cameraIndex
4023
- * @return {Promise<THREE.Camera>}
3947
+ * @return {Promise<Camera>|undefined}
4024
3948
  */
4025
3949
  loadCamera( cameraIndex ) {
4026
3950
 
@@ -4213,7 +4137,11 @@ class GLTFParser {
4213
4137
 
4214
4138
  }
4215
4139
 
4216
- return new AnimationClip( animationName, undefined, tracks );
4140
+ const animation = new AnimationClip( animationName, undefined, tracks );
4141
+
4142
+ assignExtrasToUserData( animation, animationDef );
4143
+
4144
+ return animation;
4217
4145
 
4218
4146
  } );
4219
4147
 
@@ -4313,6 +4241,28 @@ class GLTFParser {
4313
4241
 
4314
4242
  }
4315
4243
 
4244
+ // Reconstruct pivot from container pattern created by GLTFExporter
4245
+ // The container has position+pivot, rotation, scale; child has -pivot offset and mesh
4246
+ if ( node.userData.pivot !== undefined && children.length > 0 ) {
4247
+
4248
+ const pivot = node.userData.pivot;
4249
+ const pivotChild = children[ 0 ];
4250
+
4251
+ // Set pivot on container and adjust transforms
4252
+ node.pivot = new Vector3().fromArray( pivot );
4253
+
4254
+ // Adjust container position: stored as position + pivot, so subtract pivot
4255
+ node.position.x -= pivot[ 0 ];
4256
+ node.position.y -= pivot[ 1 ];
4257
+ node.position.z -= pivot[ 2 ];
4258
+
4259
+ // Remove the child's -pivot offset since pivot now handles it
4260
+ pivotChild.position.set( 0, 0, 0 );
4261
+
4262
+ delete node.userData.pivot;
4263
+
4264
+ }
4265
+
4316
4266
  return node;
4317
4267
 
4318
4268
  } );
@@ -4504,7 +4454,20 @@ class GLTFParser {
4504
4454
 
4505
4455
  for ( let i = 0, il = nodes.length; i < il; i ++ ) {
4506
4456
 
4507
- scene.add( nodes[ i ] );
4457
+ const node = nodes[ i ];
4458
+
4459
+ // If the node already has a parent, it means it's being reused across multiple scenes.
4460
+ // Clone it to avoid the second scene's add() removing it from the first scene.
4461
+ // See: https://github.com/mrdoob/three.js/issues/27993
4462
+ if ( node.parent !== null ) {
4463
+
4464
+ scene.add( clone( node ) );
4465
+
4466
+ } else {
4467
+
4468
+ scene.add( node );
4469
+
4470
+ }
4508
4471
 
4509
4472
  }
4510
4473
 
@@ -4555,17 +4518,28 @@ class GLTFParser {
4555
4518
  const targetName = node.name ? node.name : node.uuid;
4556
4519
  const targetNames = [];
4557
4520
 
4521
+ function collectMorphTargets( object ) {
4522
+
4523
+ if ( object.morphTargetInfluences ) {
4524
+
4525
+ targetNames.push( object.name ? object.name : object.uuid );
4526
+
4527
+ }
4528
+
4529
+ }
4530
+
4531
+
4558
4532
  if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
4559
4533
 
4560
- node.traverse( function ( object ) {
4534
+ collectMorphTargets( node );
4561
4535
 
4562
- if ( object.morphTargetInfluences ) {
4536
+ // for multi-primitive meshes, the node is a Group containing the sub-meshes
4563
4537
 
4564
- targetNames.push( object.name ? object.name : object.uuid );
4538
+ if ( node.isGroup ) {
4565
4539
 
4566
- }
4540
+ node.children.forEach( collectMorphTargets );
4567
4541
 
4568
- } );
4542
+ }
4569
4543
 
4570
4544
  } else {
4571
4545