super-three 0.147.1 → 0.154.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 (896) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +37190 -21678
  3. package/build/three.js +37182 -21669
  4. package/build/three.min.js +4 -2
  5. package/build/three.module.js +7656 -6548
  6. package/build/three.module.min.js +7 -0
  7. package/examples/jsm/animation/AnimationClipCreator.js +5 -3
  8. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  9. package/examples/jsm/capabilities/WebGPU.js +17 -5
  10. package/examples/jsm/controls/ArcballControls.js +1835 -1827
  11. package/examples/jsm/controls/FlyControls.js +25 -9
  12. package/examples/jsm/controls/MapControls.js +28 -0
  13. package/examples/jsm/controls/OrbitControls.js +25 -46
  14. package/examples/jsm/controls/PointerLockControls.js +70 -65
  15. package/examples/jsm/controls/TrackballControls.js +18 -4
  16. package/examples/jsm/controls/TransformControls.js +0 -1
  17. package/examples/jsm/csm/CSM.js +12 -6
  18. package/examples/jsm/csm/CSMShader.js +7 -6
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  20. package/examples/jsm/effects/AsciiEffect.js +3 -6
  21. package/examples/jsm/effects/OutlineEffect.js +2 -16
  22. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  24. package/examples/jsm/exporters/DRACOExporter.js +53 -11
  25. package/examples/jsm/exporters/EXRExporter.js +3 -9
  26. package/examples/jsm/exporters/GLTFExporter.js +597 -112
  27. package/examples/jsm/exporters/KTX2Exporter.js +34 -23
  28. package/examples/jsm/exporters/MMDExporter.js +1 -1
  29. package/examples/jsm/exporters/PLYExporter.js +8 -1
  30. package/examples/jsm/exporters/STLExporter.js +8 -4
  31. package/examples/jsm/exporters/USDZExporter.js +184 -124
  32. package/examples/jsm/geometries/ConvexGeometry.js +0 -6
  33. package/examples/jsm/geometries/ParametricGeometry.js +10 -0
  34. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  35. package/examples/jsm/helpers/ViewHelper.js +71 -57
  36. package/examples/jsm/interactive/HTMLMesh.js +16 -3
  37. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  38. package/examples/{js → jsm}/libs/basis/README.md +4 -4
  39. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  40. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  41. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  42. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  43. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  44. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  45. package/examples/jsm/libs/lil-gui.module.min.js +2 -2
  46. package/examples/jsm/libs/tween.module.js +803 -0
  47. package/examples/jsm/lights/IESSpotLight.js +25 -0
  48. package/examples/jsm/lights/LightProbeGenerator.js +11 -9
  49. package/examples/jsm/lines/LineMaterial.js +1 -1
  50. package/examples/jsm/lines/LineSegments2.js +12 -10
  51. package/examples/jsm/loaders/3DMLoader.js +9 -6
  52. package/examples/jsm/loaders/3MFLoader.js +17 -12
  53. package/examples/jsm/loaders/AMFLoader.js +7 -4
  54. package/examples/jsm/loaders/BVHLoader.js +2 -2
  55. package/examples/jsm/loaders/ColladaLoader.js +19 -17
  56. package/examples/jsm/loaders/DRACOLoader.js +69 -18
  57. package/examples/jsm/loaders/EXRLoader.js +23 -24
  58. package/examples/jsm/loaders/FBXLoader.js +41 -52
  59. package/examples/jsm/loaders/GCodeLoader.js +1 -2
  60. package/examples/jsm/loaders/GLTFLoader.js +452 -282
  61. package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
  62. package/examples/jsm/loaders/IESLoader.js +337 -0
  63. package/examples/jsm/loaders/KMZLoader.js +4 -4
  64. package/examples/jsm/loaders/KTX2Loader.js +145 -69
  65. package/examples/jsm/loaders/LDrawLoader.js +24 -25
  66. package/examples/jsm/loaders/LWOLoader.js +12 -29
  67. package/examples/jsm/loaders/LottieLoader.js +3 -1
  68. package/examples/jsm/loaders/MMDLoader.js +49 -18
  69. package/examples/jsm/loaders/MTLLoader.js +2 -2
  70. package/examples/jsm/loaders/MaterialXLoader.js +9 -3
  71. package/examples/jsm/loaders/NRRDLoader.js +33 -5
  72. package/examples/jsm/loaders/OBJLoader.js +1 -1
  73. package/examples/jsm/loaders/PCDLoader.js +26 -12
  74. package/examples/jsm/loaders/PDBLoader.js +7 -2
  75. package/examples/jsm/loaders/PLYLoader.js +261 -106
  76. package/examples/jsm/loaders/RGBELoader.js +3 -3
  77. package/examples/jsm/loaders/STLLoader.js +9 -5
  78. package/examples/jsm/loaders/SVGLoader.js +36 -27
  79. package/examples/jsm/loaders/TTFLoader.js +1 -8
  80. package/examples/jsm/loaders/TiltLoader.js +13 -7
  81. package/examples/jsm/loaders/USDZLoader.js +5 -5
  82. package/examples/jsm/loaders/VOXLoader.js +8 -2
  83. package/examples/jsm/loaders/VRMLLoader.js +60 -20
  84. package/examples/jsm/loaders/VTKLoader.js +19 -10
  85. package/examples/jsm/loaders/XYZLoader.js +9 -3
  86. package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
  87. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -5
  88. package/examples/jsm/math/Lut.js +5 -4
  89. package/examples/jsm/math/MeshSurfaceSampler.js +82 -43
  90. package/examples/jsm/misc/ConvexObjectBreaker.js +2 -8
  91. package/examples/jsm/misc/GPUComputationRenderer.js +6 -5
  92. package/examples/jsm/misc/MD2Character.js +2 -2
  93. package/examples/jsm/misc/MD2CharacterComplex.js +2 -2
  94. package/examples/jsm/misc/ProgressiveLightMap.js +12 -10
  95. package/examples/jsm/misc/RollerCoaster.js +7 -1
  96. package/examples/jsm/misc/Volume.js +20 -5
  97. package/examples/jsm/misc/VolumeSlice.js +3 -1
  98. package/examples/jsm/modifiers/CurveModifier.js +1 -0
  99. package/examples/jsm/modifiers/TessellateModifier.js +19 -19
  100. package/examples/jsm/nodes/Nodes.js +149 -335
  101. package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
  102. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  103. package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
  104. package/examples/jsm/nodes/accessors/CameraNode.js +36 -5
  105. package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
  106. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +64 -0
  107. package/examples/jsm/nodes/accessors/InstanceNode.js +39 -26
  108. package/examples/jsm/nodes/accessors/MaterialNode.js +164 -39
  109. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
  110. package/examples/jsm/nodes/accessors/ModelNode.js +13 -0
  111. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
  112. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  113. package/examples/jsm/nodes/accessors/NormalNode.js +36 -19
  114. package/examples/jsm/nodes/accessors/Object3DNode.js +40 -12
  115. package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
  116. package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
  117. package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
  118. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
  119. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  120. package/examples/jsm/nodes/accessors/SkinningNode.js +55 -71
  121. package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
  122. package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
  123. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  124. package/examples/jsm/nodes/accessors/TextureNode.js +143 -13
  125. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  126. package/examples/jsm/nodes/accessors/UVNode.js +7 -1
  127. package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
  128. package/examples/jsm/nodes/code/CodeNode.js +78 -0
  129. package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
  130. package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
  131. package/examples/jsm/nodes/{core → code}/FunctionNode.js +31 -9
  132. package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
  133. package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
  134. package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
  135. package/examples/jsm/nodes/core/AttributeNode.js +17 -9
  136. package/examples/jsm/nodes/core/BypassNode.js +11 -4
  137. package/examples/jsm/nodes/core/CacheNode.js +46 -0
  138. package/examples/jsm/nodes/core/ConstNode.js +3 -0
  139. package/examples/jsm/nodes/core/ContextNode.js +10 -1
  140. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  141. package/examples/jsm/nodes/core/InputNode.js +26 -5
  142. package/examples/jsm/nodes/core/LightingModel.js +17 -0
  143. package/examples/jsm/nodes/core/Node.js +128 -37
  144. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  145. package/examples/jsm/nodes/core/NodeBuilder.js +287 -118
  146. package/examples/jsm/nodes/core/NodeCache.js +26 -0
  147. package/examples/jsm/nodes/core/NodeFrame.js +56 -5
  148. package/examples/jsm/nodes/core/NodeUtils.js +115 -28
  149. package/examples/jsm/nodes/core/PropertyNode.js +23 -2
  150. package/examples/jsm/nodes/core/StackNode.js +99 -0
  151. package/examples/jsm/nodes/core/TempNode.js +11 -3
  152. package/examples/jsm/nodes/core/UniformNode.js +16 -1
  153. package/examples/jsm/nodes/core/VarNode.js +19 -29
  154. package/examples/jsm/nodes/core/VaryingNode.js +15 -2
  155. package/examples/jsm/nodes/core/constants.js +6 -0
  156. package/examples/jsm/nodes/display/BlendModeNode.js +33 -19
  157. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +36 -20
  158. package/examples/jsm/nodes/display/ColorSpaceNode.js +60 -47
  159. package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
  160. package/examples/jsm/nodes/display/NormalMapNode.js +33 -20
  161. package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
  162. package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
  163. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  164. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  165. package/examples/jsm/nodes/display/ViewportNode.js +27 -18
  166. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -0
  167. package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -0
  168. package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
  169. package/examples/jsm/nodes/fog/FogNode.js +12 -6
  170. package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
  171. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
  172. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +15 -16
  173. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +3 -3
  174. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  175. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +9 -7
  176. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +5 -5
  177. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  178. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +4 -6
  179. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -6
  180. package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
  181. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +155 -45
  182. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +5 -4
  183. package/examples/jsm/nodes/functions/material/getRoughness.js +6 -6
  184. package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
  185. package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
  186. package/examples/jsm/nodes/lighting/AONode.js +5 -3
  187. package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
  188. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
  189. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
  190. package/examples/jsm/nodes/lighting/EnvironmentNode.js +153 -38
  191. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
  192. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
  193. package/examples/jsm/nodes/lighting/LightNode.js +57 -0
  194. package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
  195. package/examples/jsm/nodes/lighting/LightingContextNode.js +41 -17
  196. package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
  197. package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
  198. package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
  199. package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
  200. package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
  201. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
  202. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -24
  203. package/examples/jsm/nodes/materials/Materials.js +11 -55
  204. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -26
  205. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +38 -0
  206. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -0
  207. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -6
  208. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +22 -110
  209. package/examples/jsm/nodes/materials/NodeMaterial.js +340 -67
  210. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -10
  211. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -32
  212. package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
  213. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  214. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -13
  215. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -3
  216. package/examples/jsm/nodes/math/CondNode.js +43 -17
  217. package/examples/jsm/nodes/math/MathNode.js +184 -73
  218. package/examples/jsm/nodes/math/OperatorNode.js +53 -3
  219. package/examples/jsm/nodes/procedural/CheckerNode.js +16 -8
  220. package/examples/jsm/nodes/shadernode/ShaderNode.js +206 -63
  221. package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
  222. package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
  223. package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
  224. package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
  225. package/examples/jsm/nodes/utils/JoinNode.js +4 -1
  226. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  227. package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
  228. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
  229. package/examples/jsm/nodes/utils/OscNode.js +21 -14
  230. package/examples/jsm/nodes/utils/PackingNode.js +55 -0
  231. package/examples/jsm/nodes/utils/RemapNode.js +13 -5
  232. package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
  233. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
  234. package/examples/jsm/nodes/utils/SplitNode.js +7 -5
  235. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
  236. package/examples/jsm/nodes/utils/TimerNode.js +16 -6
  237. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
  238. package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
  239. package/examples/jsm/objects/Lensflare.js +3 -4
  240. package/examples/jsm/objects/MarchingCubes.js +5 -1
  241. package/examples/jsm/objects/Reflector.js +8 -5
  242. package/examples/jsm/objects/Refractor.js +5 -5
  243. package/examples/jsm/objects/ShadowMesh.js +3 -3
  244. package/examples/jsm/objects/Sky.js +1 -1
  245. package/examples/jsm/objects/Water.js +2 -1
  246. package/examples/jsm/objects/Water2.js +1 -1
  247. package/examples/jsm/offscreen/scene.js +1 -0
  248. package/examples/jsm/physics/AmmoPhysics.js +27 -28
  249. package/examples/jsm/physics/RapierPhysics.js +199 -0
  250. package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
  251. package/examples/jsm/postprocessing/BloomPass.js +7 -4
  252. package/examples/jsm/postprocessing/BokehPass.js +3 -8
  253. package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
  254. package/examples/jsm/postprocessing/EffectComposer.js +7 -95
  255. package/examples/jsm/postprocessing/FilmPass.js +1 -2
  256. package/examples/jsm/postprocessing/GlitchPass.js +0 -2
  257. package/examples/jsm/postprocessing/HalftonePass.js +0 -6
  258. package/examples/jsm/postprocessing/OutlinePass.js +8 -10
  259. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  260. package/examples/jsm/postprocessing/Pass.js +2 -0
  261. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  262. package/examples/jsm/postprocessing/SAOPass.js +4 -26
  263. package/examples/jsm/postprocessing/SMAAPass.js +5 -8
  264. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -5
  265. package/examples/jsm/postprocessing/SSAOPass.js +4 -14
  266. package/examples/jsm/postprocessing/SSRPass.js +3 -7
  267. package/examples/jsm/postprocessing/SavePass.js +5 -4
  268. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  269. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  270. package/examples/jsm/postprocessing/TexturePass.js +2 -3
  271. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -21
  272. package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
  273. package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
  274. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
  275. package/examples/jsm/renderers/common/Attributes.js +75 -0
  276. package/examples/jsm/renderers/common/Backend.js +162 -0
  277. package/examples/jsm/renderers/common/Background.js +134 -0
  278. package/examples/jsm/renderers/common/Binding.js +11 -0
  279. package/examples/jsm/renderers/common/Bindings.js +169 -0
  280. package/examples/jsm/renderers/common/Buffer.js +38 -0
  281. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  282. package/examples/jsm/renderers/common/ChainMap.js +89 -0
  283. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  284. package/examples/jsm/renderers/common/Constants.js +14 -0
  285. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  286. package/examples/jsm/renderers/common/DataMap.js +54 -0
  287. package/examples/jsm/renderers/common/Geometries.js +215 -0
  288. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  289. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  290. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  291. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  292. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  293. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  294. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
  295. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  296. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  297. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  298. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  299. package/examples/jsm/renderers/common/RenderTarget.js +15 -0
  300. package/examples/jsm/renderers/common/Renderer.js +864 -0
  301. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  302. package/examples/jsm/renderers/common/Sampler.js +18 -0
  303. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  304. package/examples/jsm/renderers/common/Textures.js +206 -0
  305. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  306. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  307. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  308. package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
  309. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  310. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  311. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  312. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  313. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  314. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +58 -50
  315. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  316. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
  317. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +139 -92
  318. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  319. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  320. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  321. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  322. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
  323. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +141 -296
  324. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
  325. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +937 -0
  326. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  327. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  328. package/examples/jsm/shaders/BlendShader.js +1 -2
  329. package/examples/jsm/shaders/BokehShader2.js +3 -0
  330. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  331. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  332. package/examples/jsm/shaders/CopyShader.js +4 -2
  333. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  334. package/examples/jsm/shaders/ExposureShader.js +44 -0
  335. package/examples/jsm/shaders/FilmShader.js +2 -0
  336. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  337. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  338. package/examples/jsm/shaders/MMDToonShader.js +15 -4
  339. package/examples/jsm/shaders/OutputShader.js +61 -0
  340. package/examples/jsm/shaders/RGBShiftShader.js +4 -2
  341. package/examples/jsm/shaders/SepiaShader.js +2 -0
  342. package/examples/jsm/shaders/ToonShader.js +13 -5
  343. package/examples/jsm/shaders/VelocityShader.js +1 -1
  344. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  345. package/examples/jsm/shaders/VignetteShader.js +2 -0
  346. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  347. package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
  348. package/examples/jsm/utils/LDrawUtils.js +4 -4
  349. package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
  350. package/examples/jsm/utils/SceneUtils.js +8 -4
  351. package/examples/jsm/utils/SkeletonUtils.js +27 -210
  352. package/examples/jsm/utils/TextureUtils.js +86 -0
  353. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  354. package/examples/jsm/webxr/VRButton.js +1 -2
  355. package/examples/jsm/webxr/XRButton.js +198 -0
  356. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  357. package/examples/jsm/webxr/XRPlanes.js +100 -0
  358. package/package.json +35 -87
  359. package/src/Three.Legacy.js +0 -319
  360. package/src/Three.js +4 -3
  361. package/src/animation/AnimationUtils.js +13 -1
  362. package/src/animation/PropertyBinding.js +2 -2
  363. package/src/audio/Audio.js +7 -2
  364. package/src/audio/PositionalAudio.js +8 -0
  365. package/src/cameras/Camera.js +5 -0
  366. package/src/cameras/CubeCamera.js +76 -13
  367. package/src/cameras/OrthographicCamera.js +1 -1
  368. package/src/cameras/PerspectiveCamera.js +1 -1
  369. package/src/constants.js +22 -2
  370. package/src/core/BufferAttribute.js +146 -29
  371. package/src/core/BufferGeometry.js +2 -15
  372. package/src/core/GLBufferAttribute.js +2 -0
  373. package/src/core/InterleavedBufferAttribute.js +1 -1
  374. package/src/core/Object3D.js +37 -8
  375. package/src/extras/DataUtils.js +7 -1
  376. package/src/extras/ImageUtils.js +2 -2
  377. package/src/extras/PMREMGenerator.js +5 -5
  378. package/src/extras/core/Curve.js +1 -1
  379. package/src/extras/curves/LineCurve.js +6 -4
  380. package/src/extras/curves/LineCurve3.js +13 -0
  381. package/src/geometries/BoxGeometry.js +10 -0
  382. package/src/geometries/CircleGeometry.js +11 -1
  383. package/src/geometries/ConeGeometry.js +1 -1
  384. package/src/geometries/CylinderGeometry.js +11 -1
  385. package/src/geometries/EdgesGeometry.js +10 -0
  386. package/src/geometries/ExtrudeGeometry.js +11 -1
  387. package/src/geometries/LatheGeometry.js +10 -0
  388. package/src/geometries/PlaneGeometry.js +10 -0
  389. package/src/geometries/PolyhedronGeometry.js +10 -0
  390. package/src/geometries/RingGeometry.js +11 -1
  391. package/src/geometries/ShapeGeometry.js +10 -0
  392. package/src/geometries/SphereGeometry.js +12 -2
  393. package/src/geometries/TorusGeometry.js +11 -1
  394. package/src/geometries/TorusKnotGeometry.js +10 -0
  395. package/src/geometries/TubeGeometry.js +10 -0
  396. package/src/geometries/WireframeGeometry.js +10 -0
  397. package/src/helpers/Box3Helper.js +1 -2
  398. package/src/lights/DirectionalLight.js +1 -1
  399. package/src/lights/HemisphereLight.js +1 -1
  400. package/src/lights/SpotLight.js +1 -1
  401. package/src/loaders/AudioLoader.js +14 -8
  402. package/src/loaders/CubeTextureLoader.js +2 -0
  403. package/src/loaders/DataTextureLoader.js +5 -1
  404. package/src/loaders/Loader.js +2 -0
  405. package/src/loaders/MaterialLoader.js +9 -0
  406. package/src/loaders/ObjectLoader.js +10 -2
  407. package/src/materials/LineBasicMaterial.js +4 -0
  408. package/src/materials/Material.js +19 -4
  409. package/src/materials/MeshDistanceMaterial.js +0 -9
  410. package/src/materials/MeshPhysicalMaterial.js +32 -6
  411. package/src/materials/ShaderMaterial.js +6 -1
  412. package/src/math/Box2.js +3 -2
  413. package/src/math/Box3.js +49 -64
  414. package/src/math/Color.js +88 -66
  415. package/src/math/ColorManagement.js +75 -16
  416. package/src/math/Euler.js +2 -11
  417. package/src/math/Frustum.js +29 -5
  418. package/src/math/MathUtils.js +43 -1
  419. package/src/math/Matrix3.js +26 -6
  420. package/src/math/Matrix4.js +74 -19
  421. package/src/math/Plane.js +2 -2
  422. package/src/math/Quaternion.js +6 -0
  423. package/src/math/Ray.js +7 -7
  424. package/src/math/Triangle.js +37 -7
  425. package/src/math/Vector2.js +16 -0
  426. package/src/math/Vector3.js +10 -0
  427. package/src/math/interpolants/CubicInterpolant.js +1 -2
  428. package/src/objects/InstancedMesh.js +82 -1
  429. package/src/objects/Mesh.js +108 -76
  430. package/src/objects/Skeleton.js +1 -3
  431. package/src/objects/SkinnedMesh.js +123 -8
  432. package/src/objects/Sprite.js +1 -1
  433. package/src/renderers/WebGLCubeRenderTarget.js +12 -3
  434. package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
  435. package/src/renderers/WebGLRenderTarget.js +14 -2
  436. package/src/renderers/WebGLRenderer.js +1439 -1252
  437. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  438. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  439. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
  440. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  441. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  442. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
  443. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
  444. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
  445. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +38 -0
  447. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  451. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
  457. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -11
  458. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
  459. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
  460. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
  461. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +40 -10
  462. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
  463. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
  464. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  465. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
  466. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
  467. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
  468. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
  469. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
  470. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
  471. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  472. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
  473. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
  474. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
  475. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +135 -7
  476. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +117 -2
  477. package/src/renderers/shaders/ShaderChunk.js +10 -12
  478. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -9
  479. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  480. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  481. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  482. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  483. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  484. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +7 -2
  485. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +5 -6
  486. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -5
  487. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  488. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
  489. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -5
  490. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +20 -14
  491. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -5
  492. package/src/renderers/shaders/ShaderLib/points.glsl.js +17 -2
  493. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +6 -1
  494. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  495. package/src/renderers/shaders/ShaderLib.js +18 -4
  496. package/src/renderers/shaders/UniformsLib.js +27 -15
  497. package/src/renderers/shaders/UniformsUtils.js +12 -3
  498. package/src/renderers/webgl/WebGLBackground.js +23 -12
  499. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  500. package/src/renderers/webgl/WebGLCapabilities.js +1 -2
  501. package/src/renderers/webgl/WebGLClipping.js +7 -3
  502. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  503. package/src/renderers/webgl/WebGLInfo.js +0 -1
  504. package/src/renderers/webgl/WebGLLights.js +2 -2
  505. package/src/renderers/webgl/WebGLMaterials.js +123 -234
  506. package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
  507. package/src/renderers/webgl/WebGLObjects.js +23 -3
  508. package/src/renderers/webgl/WebGLProgram.js +154 -53
  509. package/src/renderers/webgl/WebGLPrograms.js +213 -130
  510. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  511. package/src/renderers/webgl/WebGLShadowMap.js +40 -27
  512. package/src/renderers/webgl/WebGLState.js +23 -9
  513. package/src/renderers/webgl/WebGLTextures.js +39 -19
  514. package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
  515. package/src/renderers/webgl/WebGLUtils.js +41 -29
  516. package/src/renderers/webvr/WebVRManager.js +12 -0
  517. package/src/renderers/webxr/WebXRController.js +3 -0
  518. package/src/renderers/webxr/WebXRManager.js +96 -134
  519. package/src/scenes/Scene.js +2 -18
  520. package/src/textures/CompressedTexture.js +2 -2
  521. package/src/textures/CubeTexture.js +2 -2
  522. package/src/textures/DataTexture.js +2 -2
  523. package/src/textures/DepthTexture.js +22 -0
  524. package/src/textures/FramebufferTexture.js +1 -3
  525. package/src/textures/Source.js +4 -0
  526. package/src/textures/Texture.js +42 -13
  527. package/src/utils.js +13 -1
  528. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  529. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  530. package/examples/fonts/open-sans/open-sans.css +0 -9
  531. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  532. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
  533. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  534. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  535. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  536. package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
  537. package/examples/js/animation/AnimationClipCreator.js +0 -89
  538. package/examples/js/animation/CCDIKSolver.js +0 -416
  539. package/examples/js/animation/MMDAnimationHelper.js +0 -1046
  540. package/examples/js/animation/MMDPhysics.js +0 -1174
  541. package/examples/js/cameras/CinematicCamera.js +0 -168
  542. package/examples/js/controls/ArcballControls.js +0 -2770
  543. package/examples/js/controls/DragControls.js +0 -205
  544. package/examples/js/controls/FirstPersonControls.js +0 -312
  545. package/examples/js/controls/FlyControls.js +0 -321
  546. package/examples/js/controls/OrbitControls.js +0 -1101
  547. package/examples/js/controls/PointerLockControls.js +0 -144
  548. package/examples/js/controls/TrackballControls.js +0 -729
  549. package/examples/js/controls/TransformControls.js +0 -1301
  550. package/examples/js/csm/CSM.js +0 -347
  551. package/examples/js/csm/CSMFrustum.js +0 -127
  552. package/examples/js/csm/CSMHelper.js +0 -165
  553. package/examples/js/csm/CSMShader.js +0 -253
  554. package/examples/js/curves/CurveExtras.js +0 -348
  555. package/examples/js/curves/NURBSCurve.js +0 -63
  556. package/examples/js/curves/NURBSSurface.js +0 -48
  557. package/examples/js/curves/NURBSUtils.js +0 -439
  558. package/examples/js/effects/AnaglyphEffect.js +0 -86
  559. package/examples/js/effects/AsciiEffect.js +0 -260
  560. package/examples/js/effects/OutlineEffect.js +0 -450
  561. package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
  562. package/examples/js/effects/PeppersGhostEffect.js +0 -139
  563. package/examples/js/effects/StereoEffect.js +0 -46
  564. package/examples/js/environments/DebugEnvironment.js +0 -53
  565. package/examples/js/environments/RoomEnvironment.js +0 -124
  566. package/examples/js/exporters/ColladaExporter.js +0 -487
  567. package/examples/js/exporters/DRACOExporter.js +0 -212
  568. package/examples/js/exporters/EXRExporter.js +0 -455
  569. package/examples/js/exporters/GLTFExporter.js +0 -2367
  570. package/examples/js/exporters/MMDExporter.js +0 -187
  571. package/examples/js/exporters/OBJExporter.js +0 -260
  572. package/examples/js/exporters/PLYExporter.js +0 -427
  573. package/examples/js/exporters/STLExporter.js +0 -188
  574. package/examples/js/exporters/USDZExporter.js +0 -608
  575. package/examples/js/geometries/BoxLineGeometry.js +0 -59
  576. package/examples/js/geometries/ConvexGeometry.js +0 -53
  577. package/examples/js/geometries/DecalGeometry.js +0 -324
  578. package/examples/js/geometries/LightningStrike.js +0 -861
  579. package/examples/js/geometries/ParametricGeometries.js +0 -216
  580. package/examples/js/geometries/ParametricGeometry.js +0 -121
  581. package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
  582. package/examples/js/geometries/TeapotGeometry.js +0 -335
  583. package/examples/js/geometries/TextGeometry.js +0 -53
  584. package/examples/js/helpers/LightProbeHelper.js +0 -48
  585. package/examples/js/helpers/OctreeHelper.js +0 -76
  586. package/examples/js/helpers/PositionalAudioHelper.js +0 -91
  587. package/examples/js/helpers/RectAreaLightHelper.js +0 -73
  588. package/examples/js/helpers/VertexNormalsHelper.js +0 -74
  589. package/examples/js/helpers/VertexTangentsHelper.js +0 -68
  590. package/examples/js/helpers/ViewHelper.js +0 -281
  591. package/examples/js/interactive/HTMLMesh.js +0 -497
  592. package/examples/js/interactive/InteractiveGroup.js +0 -95
  593. package/examples/js/interactive/SelectionBox.js +0 -195
  594. package/examples/js/interactive/SelectionHelper.js +0 -83
  595. package/examples/js/libs/chevrotain.min.js +0 -3
  596. package/examples/js/libs/draco/draco_decoder.js +0 -52
  597. package/examples/js/libs/draco/draco_decoder.wasm +0 -0
  598. package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
  599. package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
  600. package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
  601. package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
  602. package/examples/js/libs/fflate.min.js +0 -7
  603. package/examples/js/libs/ktx-parse.umd.js +0 -1
  604. package/examples/js/libs/meshopt_decoder.js +0 -188
  605. package/examples/js/libs/opentype.min.js +0 -1
  606. package/examples/js/libs/stats.min.js +0 -5
  607. package/examples/js/lights/LightProbeGenerator.js +0 -221
  608. package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
  609. package/examples/js/lines/Line2.js +0 -19
  610. package/examples/js/lines/LineGeometry.js +0 -69
  611. package/examples/js/lines/LineMaterial.js +0 -635
  612. package/examples/js/lines/LineSegments2.js +0 -313
  613. package/examples/js/lines/LineSegmentsGeometry.js +0 -198
  614. package/examples/js/lines/Wireframe.js +0 -47
  615. package/examples/js/lines/WireframeGeometry2.js +0 -20
  616. package/examples/js/loaders/3DMLoader.js +0 -1273
  617. package/examples/js/loaders/3MFLoader.js +0 -1306
  618. package/examples/js/loaders/AMFLoader.js +0 -504
  619. package/examples/js/loaders/BVHLoader.js +0 -395
  620. package/examples/js/loaders/BasisTextureLoader.js +0 -706
  621. package/examples/js/loaders/ColladaLoader.js +0 -3690
  622. package/examples/js/loaders/DDSLoader.js +0 -244
  623. package/examples/js/loaders/DRACOLoader.js +0 -511
  624. package/examples/js/loaders/EXRLoader.js +0 -2039
  625. package/examples/js/loaders/FBXLoader.js +0 -3681
  626. package/examples/js/loaders/FontLoader.js +0 -160
  627. package/examples/js/loaders/GCodeLoader.js +0 -255
  628. package/examples/js/loaders/GLTFLoader.js +0 -3862
  629. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
  630. package/examples/js/loaders/KMZLoader.js +0 -121
  631. package/examples/js/loaders/KTXLoader.js +0 -159
  632. package/examples/js/loaders/LDrawLoader.js +0 -2263
  633. package/examples/js/loaders/LUT3dlLoader.js +0 -135
  634. package/examples/js/loaders/LUTCubeLoader.js +0 -132
  635. package/examples/js/loaders/LWOLoader.js +0 -901
  636. package/examples/js/loaders/LogLuvLoader.js +0 -715
  637. package/examples/js/loaders/LottieLoader.js +0 -62
  638. package/examples/js/loaders/MD2Loader.js +0 -248
  639. package/examples/js/loaders/MDDLoader.js +0 -91
  640. package/examples/js/loaders/MMDLoader.js +0 -1915
  641. package/examples/js/loaders/MTLLoader.js +0 -472
  642. package/examples/js/loaders/NRRDLoader.js +0 -609
  643. package/examples/js/loaders/OBJLoader.js +0 -789
  644. package/examples/js/loaders/PCDLoader.js +0 -413
  645. package/examples/js/loaders/PDBLoader.js +0 -317
  646. package/examples/js/loaders/PLYLoader.js +0 -576
  647. package/examples/js/loaders/PRWMLoader.js +0 -249
  648. package/examples/js/loaders/PVRLoader.js +0 -218
  649. package/examples/js/loaders/RGBELoader.js +0 -442
  650. package/examples/js/loaders/RGBMLoader.js +0 -1354
  651. package/examples/js/loaders/STLLoader.js +0 -364
  652. package/examples/js/loaders/SVGLoader.js +0 -2783
  653. package/examples/js/loaders/TDSLoader.js +0 -992
  654. package/examples/js/loaders/TGALoader.js +0 -484
  655. package/examples/js/loaders/TIFFLoader.js +0 -30
  656. package/examples/js/loaders/TTFLoader.js +0 -203
  657. package/examples/js/loaders/TiltLoader.js +0 -459
  658. package/examples/js/loaders/VOXLoader.js +0 -240
  659. package/examples/js/loaders/VRMLLoader.js +0 -3140
  660. package/examples/js/loaders/VTKLoader.js +0 -1078
  661. package/examples/js/loaders/XYZLoader.js +0 -89
  662. package/examples/js/loaders/lwo/IFFParser.js +0 -1067
  663. package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
  664. package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
  665. package/examples/js/materials/MeshGouraudMaterial.js +0 -387
  666. package/examples/js/math/Capsule.js +0 -103
  667. package/examples/js/math/ColorConverter.js +0 -33
  668. package/examples/js/math/ConvexHull.js +0 -1154
  669. package/examples/js/math/ImprovedNoise.js +0 -66
  670. package/examples/js/math/Lut.js +0 -164
  671. package/examples/js/math/MeshSurfaceSampler.js +0 -171
  672. package/examples/js/math/OBB.js +0 -382
  673. package/examples/js/math/Octree.js +0 -410
  674. package/examples/js/math/SimplexNoise.js +0 -445
  675. package/examples/js/misc/ConvexObjectBreaker.js +0 -474
  676. package/examples/js/misc/GPUComputationRenderer.js +0 -393
  677. package/examples/js/misc/Gyroscope.js +0 -56
  678. package/examples/js/misc/MD2Character.js +0 -235
  679. package/examples/js/misc/MD2CharacterComplex.js +0 -513
  680. package/examples/js/misc/MorphAnimMesh.js +0 -63
  681. package/examples/js/misc/MorphBlendMesh.js +0 -265
  682. package/examples/js/misc/ProgressiveLightMap.js +0 -335
  683. package/examples/js/misc/RollerCoaster.js +0 -430
  684. package/examples/js/misc/TubePainter.js +0 -167
  685. package/examples/js/misc/Volume.js +0 -437
  686. package/examples/js/misc/VolumeSlice.js +0 -214
  687. package/examples/js/modifiers/CurveModifier.js +0 -309
  688. package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
  689. package/examples/js/modifiers/SimplifyModifier.js +0 -465
  690. package/examples/js/modifiers/TessellateModifier.js +0 -276
  691. package/examples/js/objects/GroundProjectedEnv.js +0 -181
  692. package/examples/js/objects/Lensflare.js +0 -356
  693. package/examples/js/objects/LightningStorm.js +0 -206
  694. package/examples/js/objects/MarchingCubes.js +0 -759
  695. package/examples/js/objects/Reflector.js +0 -216
  696. package/examples/js/objects/ReflectorForSSRPass.js +0 -315
  697. package/examples/js/objects/Refractor.js +0 -283
  698. package/examples/js/objects/ShadowMesh.js +0 -59
  699. package/examples/js/objects/Sky.js +0 -218
  700. package/examples/js/objects/Water.js +0 -292
  701. package/examples/js/objects/Water2.js +0 -307
  702. package/examples/js/physics/AmmoPhysics.js +0 -259
  703. package/examples/js/physics/OimoPhysics.js +0 -217
  704. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
  705. package/examples/js/postprocessing/AfterimagePass.js +0 -77
  706. package/examples/js/postprocessing/BloomPass.js +0 -135
  707. package/examples/js/postprocessing/BokehPass.js +0 -120
  708. package/examples/js/postprocessing/ClearPass.js +0 -39
  709. package/examples/js/postprocessing/CubeTexturePass.js +0 -60
  710. package/examples/js/postprocessing/DotScreenPass.js +0 -51
  711. package/examples/js/postprocessing/EffectComposer.js +0 -272
  712. package/examples/js/postprocessing/FilmPass.js +0 -52
  713. package/examples/js/postprocessing/GlitchPass.js +0 -104
  714. package/examples/js/postprocessing/HalftonePass.js +0 -75
  715. package/examples/js/postprocessing/LUTPass.js +0 -171
  716. package/examples/js/postprocessing/MaskPass.js +0 -95
  717. package/examples/js/postprocessing/OutlinePass.js +0 -598
  718. package/examples/js/postprocessing/Pass.js +0 -72
  719. package/examples/js/postprocessing/RenderPass.js +0 -70
  720. package/examples/js/postprocessing/RenderPixelatedPass.js +0 -215
  721. package/examples/js/postprocessing/SAOPass.js +0 -374
  722. package/examples/js/postprocessing/SMAAPass.js +0 -170
  723. package/examples/js/postprocessing/SSAARenderPass.js +0 -156
  724. package/examples/js/postprocessing/SSAOPass.js +0 -365
  725. package/examples/js/postprocessing/SSRPass.js +0 -567
  726. package/examples/js/postprocessing/SavePass.js +0 -59
  727. package/examples/js/postprocessing/ShaderPass.js +0 -64
  728. package/examples/js/postprocessing/TAARenderPass.js +0 -130
  729. package/examples/js/postprocessing/TexturePass.js +0 -49
  730. package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
  731. package/examples/js/renderers/CSS2DRenderer.js +0 -178
  732. package/examples/js/renderers/CSS3DRenderer.js +0 -237
  733. package/examples/js/renderers/Projector.js +0 -818
  734. package/examples/js/renderers/SVGRenderer.js +0 -491
  735. package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
  736. package/examples/js/shaders/AfterimageShader.js +0 -60
  737. package/examples/js/shaders/BasicShader.js +0 -27
  738. package/examples/js/shaders/BleachBypassShader.js +0 -62
  739. package/examples/js/shaders/BlendShader.js +0 -54
  740. package/examples/js/shaders/BokehShader.js +0 -156
  741. package/examples/js/shaders/BokehShader2.js +0 -419
  742. package/examples/js/shaders/BrightnessContrastShader.js +0 -58
  743. package/examples/js/shaders/ColorCorrectionShader.js +0 -52
  744. package/examples/js/shaders/ColorifyShader.js +0 -47
  745. package/examples/js/shaders/ConvolutionShader.js +0 -92
  746. package/examples/js/shaders/CopyShader.js +0 -45
  747. package/examples/js/shaders/DOFMipMapShader.js +0 -60
  748. package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
  749. package/examples/js/shaders/DigitalGlitch.js +0 -127
  750. package/examples/js/shaders/DotScreenShader.js +0 -72
  751. package/examples/js/shaders/FXAAShader.js +0 -284
  752. package/examples/js/shaders/FilmShader.js +0 -110
  753. package/examples/js/shaders/FocusShader.js +0 -95
  754. package/examples/js/shaders/FreiChenShader.js +0 -93
  755. package/examples/js/shaders/GammaCorrectionShader.js +0 -41
  756. package/examples/js/shaders/GodRaysShader.js +0 -284
  757. package/examples/js/shaders/HalftoneShader.js +0 -336
  758. package/examples/js/shaders/HorizontalBlurShader.js +0 -59
  759. package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
  760. package/examples/js/shaders/HueSaturationShader.js +0 -69
  761. package/examples/js/shaders/KaleidoShader.js +0 -60
  762. package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
  763. package/examples/js/shaders/LuminosityShader.js +0 -46
  764. package/examples/js/shaders/MMDToonShader.js +0 -94
  765. package/examples/js/shaders/MirrorShader.js +0 -56
  766. package/examples/js/shaders/NormalMapShader.js +0 -55
  767. package/examples/js/shaders/RGBShiftShader.js +0 -56
  768. package/examples/js/shaders/SAOShader.js +0 -209
  769. package/examples/js/shaders/SMAAShader.js +0 -454
  770. package/examples/js/shaders/SSAOShader.js +0 -295
  771. package/examples/js/shaders/SSRShader.js +0 -381
  772. package/examples/js/shaders/SepiaShader.js +0 -52
  773. package/examples/js/shaders/SobelOperatorShader.js +0 -88
  774. package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
  775. package/examples/js/shaders/TechnicolorShader.js +0 -43
  776. package/examples/js/shaders/ToneMapShader.js +0 -84
  777. package/examples/js/shaders/ToonShader.js +0 -335
  778. package/examples/js/shaders/TriangleBlurShader.js +0 -70
  779. package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
  780. package/examples/js/shaders/VelocityShader.js +0 -126
  781. package/examples/js/shaders/VerticalBlurShader.js +0 -59
  782. package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
  783. package/examples/js/shaders/VignetteShader.js +0 -53
  784. package/examples/js/shaders/VolumeShader.js +0 -296
  785. package/examples/js/shaders/WaterRefractionShader.js +0 -84
  786. package/examples/js/textures/FlakesTexture.js +0 -40
  787. package/examples/js/utils/BufferGeometryUtils.js +0 -1160
  788. package/examples/js/utils/CameraUtils.js +0 -71
  789. package/examples/js/utils/GPUStatsPanel.js +0 -125
  790. package/examples/js/utils/GeometryCompressionUtils.js +0 -549
  791. package/examples/js/utils/GeometryUtils.js +0 -168
  792. package/examples/js/utils/LDrawUtils.js +0 -179
  793. package/examples/js/utils/PackedPhongMaterial.js +0 -109
  794. package/examples/js/utils/SceneUtils.js +0 -214
  795. package/examples/js/utils/ShadowMapViewer.js +0 -183
  796. package/examples/js/utils/SkeletonUtils.js +0 -493
  797. package/examples/js/utils/UVsDebug.js +0 -143
  798. package/examples/js/utils/WorkerPool.js +0 -105
  799. package/examples/jsm/exporters/ColladaExporter.js +0 -713
  800. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  801. package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
  802. package/examples/jsm/libs/OimoPhysics/index.js +0 -43
  803. package/examples/jsm/libs/flow.module.js +0 -4552
  804. package/examples/jsm/libs/tween.module.min.js +0 -3
  805. package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
  806. package/examples/jsm/loaders/IFCLoader.js +0 -2431
  807. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  808. package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
  809. package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
  810. package/examples/jsm/node-editor/NodeEditor.js +0 -857
  811. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
  812. package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
  813. package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
  814. package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
  815. package/examples/jsm/node-editor/core/BaseNode.js +0 -96
  816. package/examples/jsm/node-editor/core/DataFile.js +0 -59
  817. package/examples/jsm/node-editor/core/FileEditor.js +0 -20
  818. package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
  819. package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
  820. package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
  821. package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
  822. package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
  823. package/examples/jsm/node-editor/examples/matcap.json +0 -1
  824. package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
  825. package/examples/jsm/node-editor/examples/rim.json +0 -1
  826. package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
  827. package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
  828. package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
  829. package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
  830. package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
  831. package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
  832. package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
  833. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
  834. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
  835. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
  836. package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
  837. package/examples/jsm/node-editor/math/DotEditor.js +0 -35
  838. package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
  839. package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
  840. package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
  841. package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
  842. package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
  843. package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
  844. package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
  845. package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
  846. package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
  847. package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
  848. package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
  849. package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
  850. package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
  851. package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
  852. package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
  853. package/examples/jsm/nodes/core/CodeNode.js +0 -50
  854. package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
  855. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -21
  856. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
  857. package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
  858. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
  859. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
  860. package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
  861. package/examples/jsm/objects/LightningStorm.js +0 -245
  862. package/examples/jsm/physics/OimoPhysics.js +0 -231
  863. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
  864. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
  865. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
  866. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  867. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
  868. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  869. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  870. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
  871. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
  872. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  873. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
  874. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
  875. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
  876. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
  877. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  878. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  879. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
  880. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
  881. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  882. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
  883. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
  884. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  885. package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
  886. package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
  887. package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
  888. /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
  889. /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
  890. /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
  891. /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
  892. /package/examples/{js → jsm}/libs/draco/README.md +0 -0
  893. /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
  894. /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
  895. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  896. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -60,8 +60,9 @@ import {
60
60
  Vector2,
61
61
  Vector3,
62
62
  VectorKeyframeTrack,
63
- sRGBEncoding
63
+ SRGBColorSpace
64
64
  } from 'three';
65
+ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
65
66
 
66
67
  class GLTFLoader extends Loader {
67
68
 
@@ -93,6 +94,12 @@ class GLTFLoader extends Loader {
93
94
 
94
95
  } );
95
96
 
97
+ this.register( function ( parser ) {
98
+
99
+ return new GLTFTextureAVIFExtension( parser );
100
+
101
+ } );
102
+
96
103
  this.register( function ( parser ) {
97
104
 
98
105
  return new GLTFMaterialsSheenExtension( parser );
@@ -135,6 +142,12 @@ class GLTFLoader extends Loader {
135
142
 
136
143
  } );
137
144
 
145
+ this.register( function ( parser ) {
146
+
147
+ return new GLTFMaterialsAnisotropyExtension( parser );
148
+
149
+ } );
150
+
138
151
  this.register( function ( parser ) {
139
152
 
140
153
  return new GLTFLightsExtension( parser );
@@ -286,6 +299,7 @@ class GLTFLoader extends Loader {
286
299
  let json;
287
300
  const extensions = {};
288
301
  const plugins = {};
302
+ const textDecoder = new TextDecoder();
289
303
 
290
304
  if ( typeof data === 'string' ) {
291
305
 
@@ -293,7 +307,7 @@ class GLTFLoader extends Loader {
293
307
 
294
308
  } else if ( data instanceof ArrayBuffer ) {
295
309
 
296
- const magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );
310
+ const magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );
297
311
 
298
312
  if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {
299
313
 
@@ -312,7 +326,7 @@ class GLTFLoader extends Loader {
312
326
 
313
327
  } else {
314
328
 
315
- json = JSON.parse( LoaderUtils.decodeText( new Uint8Array( data ) ) );
329
+ json = JSON.parse( textDecoder.decode( data ) );
316
330
 
317
331
  }
318
332
 
@@ -464,6 +478,7 @@ const EXTENSIONS = {
464
478
  KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
465
479
  KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
466
480
  KHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',
481
+ KHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',
467
482
  KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
468
483
  KHR_MATERIALS_VOLUME: 'KHR_materials_volume',
469
484
  KHR_TEXTURE_BASISU: 'KHR_texture_basisu',
@@ -471,6 +486,7 @@ const EXTENSIONS = {
471
486
  KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',
472
487
  KHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',
473
488
  EXT_TEXTURE_WEBP: 'EXT_texture_webp',
489
+ EXT_TEXTURE_AVIF: 'EXT_texture_avif',
474
490
  EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
475
491
  EXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'
476
492
  };
@@ -584,7 +600,7 @@ class GLTFLightsExtension {
584
600
 
585
601
  }
586
602
 
587
- getDependency( type, index ) {
603
+ getDependency( type, index ) {
588
604
 
589
605
  if ( type !== 'light' ) return;
590
606
 
@@ -654,7 +670,7 @@ class GLTFMaterialsUnlitExtension {
654
670
 
655
671
  if ( metallicRoughness.baseColorTexture !== undefined ) {
656
672
 
657
- pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, sRGBEncoding ) );
673
+ pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );
658
674
 
659
675
  }
660
676
 
@@ -935,7 +951,7 @@ class GLTFMaterialsSheenExtension {
935
951
 
936
952
  if ( extension.sheenColorTexture !== undefined ) {
937
953
 
938
- pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, sRGBEncoding ) );
954
+ pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );
939
955
 
940
956
  }
941
957
 
@@ -1168,7 +1184,71 @@ class GLTFMaterialsSpecularExtension {
1168
1184
 
1169
1185
  if ( extension.specularColorTexture !== undefined ) {
1170
1186
 
1171
- pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, sRGBEncoding ) );
1187
+ pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );
1188
+
1189
+ }
1190
+
1191
+ return Promise.all( pending );
1192
+
1193
+ }
1194
+
1195
+ }
1196
+
1197
+ /**
1198
+ * Materials anisotropy Extension
1199
+ *
1200
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy
1201
+ */
1202
+ class GLTFMaterialsAnisotropyExtension {
1203
+
1204
+ constructor( parser ) {
1205
+
1206
+ this.parser = parser;
1207
+ this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;
1208
+
1209
+ }
1210
+
1211
+ getMaterialType( materialIndex ) {
1212
+
1213
+ const parser = this.parser;
1214
+ const materialDef = parser.json.materials[ materialIndex ];
1215
+
1216
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1217
+
1218
+ return MeshPhysicalMaterial;
1219
+
1220
+ }
1221
+
1222
+ extendMaterialParams( materialIndex, materialParams ) {
1223
+
1224
+ const parser = this.parser;
1225
+ const materialDef = parser.json.materials[ materialIndex ];
1226
+
1227
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1228
+
1229
+ return Promise.resolve();
1230
+
1231
+ }
1232
+
1233
+ const pending = [];
1234
+
1235
+ const extension = materialDef.extensions[ this.name ];
1236
+
1237
+ if ( extension.anisotropyStrength !== undefined ) {
1238
+
1239
+ materialParams.anisotropy = extension.anisotropyStrength;
1240
+
1241
+ }
1242
+
1243
+ if ( extension.anisotropyRotation !== undefined ) {
1244
+
1245
+ materialParams.anisotropyRotation = extension.anisotropyRotation;
1246
+
1247
+ }
1248
+
1249
+ if ( extension.anisotropyTexture !== undefined ) {
1250
+
1251
+ pending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
1172
1252
 
1173
1253
  }
1174
1254
 
@@ -1314,6 +1394,89 @@ class GLTFTextureWebPExtension {
1314
1394
 
1315
1395
  }
1316
1396
 
1397
+ /**
1398
+ * AVIF Texture Extension
1399
+ *
1400
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif
1401
+ */
1402
+ class GLTFTextureAVIFExtension {
1403
+
1404
+ constructor( parser ) {
1405
+
1406
+ this.parser = parser;
1407
+ this.name = EXTENSIONS.EXT_TEXTURE_AVIF;
1408
+ this.isSupported = null;
1409
+
1410
+ }
1411
+
1412
+ loadTexture( textureIndex ) {
1413
+
1414
+ const name = this.name;
1415
+ const parser = this.parser;
1416
+ const json = parser.json;
1417
+
1418
+ const textureDef = json.textures[ textureIndex ];
1419
+
1420
+ if ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {
1421
+
1422
+ return null;
1423
+
1424
+ }
1425
+
1426
+ const extension = textureDef.extensions[ name ];
1427
+ const source = json.images[ extension.source ];
1428
+
1429
+ let loader = parser.textureLoader;
1430
+ if ( source.uri ) {
1431
+
1432
+ const handler = parser.options.manager.getHandler( source.uri );
1433
+ if ( handler !== null ) loader = handler;
1434
+
1435
+ }
1436
+
1437
+ return this.detectSupport().then( function ( isSupported ) {
1438
+
1439
+ if ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );
1440
+
1441
+ if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {
1442
+
1443
+ throw new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );
1444
+
1445
+ }
1446
+
1447
+ // Fall back to PNG or JPEG.
1448
+ return parser.loadTexture( textureIndex );
1449
+
1450
+ } );
1451
+
1452
+ }
1453
+
1454
+ detectSupport() {
1455
+
1456
+ if ( ! this.isSupported ) {
1457
+
1458
+ this.isSupported = new Promise( function ( resolve ) {
1459
+
1460
+ const image = new Image();
1461
+
1462
+ // Lossy test image.
1463
+ image.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';
1464
+ image.onload = image.onerror = function () {
1465
+
1466
+ resolve( image.height === 1 );
1467
+
1468
+ };
1469
+
1470
+ } );
1471
+
1472
+ }
1473
+
1474
+ return this.isSupported;
1475
+
1476
+ }
1477
+
1478
+ }
1479
+
1317
1480
  /**
1318
1481
  * meshopt BufferView Compression Extension
1319
1482
  *
@@ -1526,8 +1689,6 @@ class GLTFMeshGpuInstancing {
1526
1689
  // Just in case
1527
1690
  Object3D.prototype.copy.call( instancedMesh, mesh );
1528
1691
 
1529
- // https://github.com/mrdoob/three.js/issues/18334
1530
- instancedMesh.frustumCulled = false;
1531
1692
  this.parser.assignFinalMaterial( instancedMesh );
1532
1693
 
1533
1694
  instancedMeshes.push( instancedMesh );
@@ -1566,9 +1727,10 @@ class GLTFBinaryExtension {
1566
1727
  this.body = null;
1567
1728
 
1568
1729
  const headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );
1730
+ const textDecoder = new TextDecoder();
1569
1731
 
1570
1732
  this.header = {
1571
- magic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),
1733
+ magic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),
1572
1734
  version: headerView.getUint32( 4, true ),
1573
1735
  length: headerView.getUint32( 8, true )
1574
1736
  };
@@ -1598,7 +1760,7 @@ class GLTFBinaryExtension {
1598
1760
  if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {
1599
1761
 
1600
1762
  const contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );
1601
- this.content = LoaderUtils.decodeText( contentArray );
1763
+ this.content = textDecoder.decode( contentArray );
1602
1764
 
1603
1765
  } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {
1604
1766
 
@@ -1721,13 +1883,10 @@ class GLTFTextureTransformExtension {
1721
1883
 
1722
1884
  extendTexture( texture, transform ) {
1723
1885
 
1724
- if ( transform.texCoord !== undefined ) {
1725
-
1726
- console.warn( 'THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.' );
1727
-
1728
- }
1729
-
1730
- if ( transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined ) {
1886
+ if ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )
1887
+ && transform.offset === undefined
1888
+ && transform.rotation === undefined
1889
+ && transform.scale === undefined ) {
1731
1890
 
1732
1891
  // See https://github.com/mrdoob/three.js/issues/21819.
1733
1892
  return texture;
@@ -1736,6 +1895,12 @@ class GLTFTextureTransformExtension {
1736
1895
 
1737
1896
  texture = texture.clone();
1738
1897
 
1898
+ if ( transform.texCoord !== undefined ) {
1899
+
1900
+ texture.channel = transform.texCoord;
1901
+
1902
+ }
1903
+
1739
1904
  if ( transform.offset !== undefined ) {
1740
1905
 
1741
1906
  texture.offset.fromArray( transform.offset );
@@ -1937,7 +2102,9 @@ const ATTRIBUTES = {
1937
2102
  NORMAL: 'normal',
1938
2103
  TANGENT: 'tangent',
1939
2104
  TEXCOORD_0: 'uv',
1940
- TEXCOORD_1: 'uv2',
2105
+ TEXCOORD_1: 'uv1',
2106
+ TEXCOORD_2: 'uv2',
2107
+ TEXCOORD_3: 'uv3',
1941
2108
  COLOR_0: 'color',
1942
2109
  WEIGHTS_0: 'skinWeight',
1943
2110
  JOINTS_0: 'skinIndex',
@@ -2159,9 +2326,10 @@ function updateMorphTargets( mesh, meshDef ) {
2159
2326
 
2160
2327
  function createPrimitiveKey( primitiveDef ) {
2161
2328
 
2162
- const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
2163
2329
  let geometryKey;
2164
2330
 
2331
+ const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
2332
+
2165
2333
  if ( dracoExtension ) {
2166
2334
 
2167
2335
  geometryKey = 'draco:' + dracoExtension.bufferView
@@ -2174,6 +2342,16 @@ function createPrimitiveKey( primitiveDef ) {
2174
2342
 
2175
2343
  }
2176
2344
 
2345
+ if ( primitiveDef.targets !== undefined ) {
2346
+
2347
+ for ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {
2348
+
2349
+ geometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );
2350
+
2351
+ }
2352
+
2353
+ }
2354
+
2177
2355
  return geometryKey;
2178
2356
 
2179
2357
  }
@@ -2229,6 +2407,8 @@ function getImageURIMimeType( uri ) {
2229
2407
 
2230
2408
  }
2231
2409
 
2410
+ const _identityMatrix = new Matrix4();
2411
+
2232
2412
  /* GLTF PARSER */
2233
2413
 
2234
2414
  class GLTFParser {
@@ -2249,6 +2429,9 @@ class GLTFParser {
2249
2429
  // BufferGeometry caching
2250
2430
  this.primitiveCache = {};
2251
2431
 
2432
+ // Node cache
2433
+ this.nodeCache = {};
2434
+
2252
2435
  // Object3D instance caches
2253
2436
  this.meshCache = { refs: {}, uses: {} };
2254
2437
  this.cameraCache = { refs: {}, uses: {} };
@@ -2262,7 +2445,7 @@ class GLTFParser {
2262
2445
 
2263
2446
  // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the
2264
2447
  // expensive work of uploading a texture to the GPU off the main thread.
2265
-
2448
+
2266
2449
  let isSafari = false;
2267
2450
  let isFirefox = false;
2268
2451
  let firefoxVersion = - 1;
@@ -2319,6 +2502,7 @@ class GLTFParser {
2319
2502
 
2320
2503
  // Clear the loader cache
2321
2504
  this.cache.removeAll();
2505
+ this.nodeCache = {};
2322
2506
 
2323
2507
  // Mark the special nodes/meshes in json for efficient parse
2324
2508
  this._invokeAll( function ( ext ) {
@@ -2538,7 +2722,11 @@ class GLTFParser {
2538
2722
  break;
2539
2723
 
2540
2724
  case 'node':
2541
- dependency = this.loadNode( index );
2725
+ dependency = this._invokeOne( function ( ext ) {
2726
+
2727
+ return ext.loadNode && ext.loadNode( index );
2728
+
2729
+ } );
2542
2730
  break;
2543
2731
 
2544
2732
  case 'mesh':
@@ -2889,6 +3077,12 @@ class GLTFParser {
2889
3077
 
2890
3078
  texture.name = textureDef.name || sourceDef.name || '';
2891
3079
 
3080
+ if ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {
3081
+
3082
+ texture.name = sourceDef.uri;
3083
+
3084
+ }
3085
+
2892
3086
  const samplers = json.samplers || {};
2893
3087
  const sampler = samplers[ textureDef.sampler ] || {};
2894
3088
 
@@ -3007,7 +3201,7 @@ class GLTFParser {
3007
3201
  * @param {Object} mapDef
3008
3202
  * @return {Promise<Texture>}
3009
3203
  */
3010
- assignTexture( materialParams, mapName, mapDef, encoding ) {
3204
+ assignTexture( materialParams, mapName, mapDef, colorSpace ) {
3011
3205
 
3012
3206
  const parser = this;
3013
3207
 
@@ -3015,11 +3209,10 @@ class GLTFParser {
3015
3209
 
3016
3210
  if ( ! texture ) return null;
3017
3211
 
3018
- // Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured
3019
- // However, we will copy UV set 0 to UV set 1 on demand for aoMap
3020
- if ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {
3212
+ if ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {
3021
3213
 
3022
- console.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );
3214
+ texture = texture.clone();
3215
+ texture.channel = mapDef.texCoord;
3023
3216
 
3024
3217
  }
3025
3218
 
@@ -3037,9 +3230,9 @@ class GLTFParser {
3037
3230
 
3038
3231
  }
3039
3232
 
3040
- if ( encoding !== undefined ) {
3233
+ if ( colorSpace !== undefined ) {
3041
3234
 
3042
- texture.encoding = encoding;
3235
+ texture.colorSpace = colorSpace;
3043
3236
 
3044
3237
  }
3045
3238
 
@@ -3099,6 +3292,7 @@ class GLTFParser {
3099
3292
  lineMaterial = new LineBasicMaterial();
3100
3293
  Material.prototype.copy.call( lineMaterial, material );
3101
3294
  lineMaterial.color.copy( material.color );
3295
+ lineMaterial.map = material.map;
3102
3296
 
3103
3297
  this.cache.add( cacheKey, lineMaterial );
3104
3298
 
@@ -3144,14 +3338,6 @@ class GLTFParser {
3144
3338
 
3145
3339
  }
3146
3340
 
3147
- // workarounds for mesh and geometry
3148
-
3149
- if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {
3150
-
3151
- geometry.setAttribute( 'uv2', geometry.attributes.uv );
3152
-
3153
- }
3154
-
3155
3341
  mesh.material = material;
3156
3342
 
3157
3343
  }
@@ -3207,7 +3393,7 @@ class GLTFParser {
3207
3393
 
3208
3394
  if ( metallicRoughness.baseColorTexture !== undefined ) {
3209
3395
 
3210
- pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, sRGBEncoding ) );
3396
+ pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );
3211
3397
 
3212
3398
  }
3213
3399
 
@@ -3298,7 +3484,7 @@ class GLTFParser {
3298
3484
 
3299
3485
  if ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {
3300
3486
 
3301
- pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, sRGBEncoding ) );
3487
+ pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );
3302
3488
 
3303
3489
  }
3304
3490
 
@@ -3325,17 +3511,17 @@ class GLTFParser {
3325
3511
 
3326
3512
  const sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );
3327
3513
 
3328
- let name = sanitizedName;
3514
+ if ( sanitizedName in this.nodeNamesUsed ) {
3329
3515
 
3330
- for ( let i = 1; this.nodeNamesUsed[ name ]; ++ i ) {
3516
+ return sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );
3331
3517
 
3332
- name = sanitizedName + '_' + i;
3518
+ } else {
3333
3519
 
3334
- }
3520
+ this.nodeNamesUsed[ sanitizedName ] = 0;
3335
3521
 
3336
- this.nodeNamesUsed[ name ] = true;
3522
+ return sanitizedName;
3337
3523
 
3338
- return name;
3524
+ }
3339
3525
 
3340
3526
  }
3341
3527
 
@@ -3465,10 +3651,9 @@ class GLTFParser {
3465
3651
  ? new SkinnedMesh( geometry, material )
3466
3652
  : new Mesh( geometry, material );
3467
3653
 
3468
- if ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {
3654
+ if ( mesh.isSkinnedMesh === true ) {
3469
3655
 
3470
- // we normalize floating point skin weight array to fix malformed assets (see #15319)
3471
- // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
3656
+ // normalize skin weights to fix malformed assets (see #15319)
3472
3657
  mesh.normalizeSkinWeights();
3473
3658
 
3474
3659
  }
@@ -3534,12 +3719,16 @@ class GLTFParser {
3534
3719
 
3535
3720
  if ( meshes.length === 1 ) {
3536
3721
 
3722
+ if ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );
3723
+
3537
3724
  return meshes[ 0 ];
3538
3725
 
3539
3726
  }
3540
3727
 
3541
3728
  const group = new Group();
3542
3729
 
3730
+ if ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );
3731
+
3543
3732
  parser.associations.set( group, { meshes: meshIndex } );
3544
3733
 
3545
3734
  for ( let i = 0, il = meshes.length; i < il; i ++ ) {
@@ -3603,7 +3792,7 @@ class GLTFParser {
3603
3792
 
3604
3793
  for ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {
3605
3794
 
3606
- pending.push( this.getDependency( 'node', skinDef.joints[ i ] ) );
3795
+ pending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );
3607
3796
 
3608
3797
  }
3609
3798
 
@@ -3622,6 +3811,9 @@ class GLTFParser {
3622
3811
  const inverseBindMatrices = results.pop();
3623
3812
  const jointNodes = results;
3624
3813
 
3814
+ // Note that bones (joint nodes) may or may not be in the
3815
+ // scene graph at this time.
3816
+
3625
3817
  const bones = [];
3626
3818
  const boneInverses = [];
3627
3819
 
@@ -3665,8 +3857,10 @@ class GLTFParser {
3665
3857
  loadAnimation( animationIndex ) {
3666
3858
 
3667
3859
  const json = this.json;
3860
+ const parser = this;
3668
3861
 
3669
3862
  const animationDef = json.animations[ animationIndex ];
3863
+ const animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;
3670
3864
 
3671
3865
  const pendingNodes = [];
3672
3866
  const pendingInputAccessors = [];
@@ -3683,6 +3877,8 @@ class GLTFParser {
3683
3877
  const input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;
3684
3878
  const output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;
3685
3879
 
3880
+ if ( target.node === undefined ) continue;
3881
+
3686
3882
  pendingNodes.push( this.getDependency( 'node', name ) );
3687
3883
  pendingInputAccessors.push( this.getDependency( 'accessor', input ) );
3688
3884
  pendingOutputAccessors.push( this.getDependency( 'accessor', output ) );
@@ -3719,110 +3915,28 @@ class GLTFParser {
3719
3915
 
3720
3916
  if ( node === undefined ) continue;
3721
3917
 
3722
- node.updateMatrix();
3723
-
3724
- let TypedKeyframeTrack;
3725
-
3726
- switch ( PATH_PROPERTIES[ target.path ] ) {
3727
-
3728
- case PATH_PROPERTIES.weights:
3729
-
3730
- TypedKeyframeTrack = NumberKeyframeTrack;
3731
- break;
3918
+ if ( node.updateMatrix ) {
3732
3919
 
3733
- case PATH_PROPERTIES.rotation:
3734
-
3735
- TypedKeyframeTrack = QuaternionKeyframeTrack;
3736
- break;
3737
-
3738
- case PATH_PROPERTIES.position:
3739
- case PATH_PROPERTIES.scale:
3740
- default:
3741
-
3742
- TypedKeyframeTrack = VectorKeyframeTrack;
3743
- break;
3920
+ node.updateMatrix();
3921
+ node.matrixAutoUpdate = true;
3744
3922
 
3745
3923
  }
3746
3924
 
3747
- const targetName = node.name ? node.name : node.uuid;
3748
-
3749
- const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;
3750
-
3751
- const targetNames = [];
3925
+ const createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );
3752
3926
 
3753
- if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
3927
+ if ( createdTracks ) {
3754
3928
 
3755
- node.traverse( function ( object ) {
3929
+ for ( let k = 0; k < createdTracks.length; k ++ ) {
3756
3930
 
3757
- if ( object.morphTargetInfluences ) {
3758
-
3759
- targetNames.push( object.name ? object.name : object.uuid );
3760
-
3761
- }
3762
-
3763
- } );
3764
-
3765
- } else {
3766
-
3767
- targetNames.push( targetName );
3768
-
3769
- }
3770
-
3771
- let outputArray = outputAccessor.array;
3772
-
3773
- if ( outputAccessor.normalized ) {
3774
-
3775
- const scale = getNormalizedComponentScale( outputArray.constructor );
3776
- const scaled = new Float32Array( outputArray.length );
3777
-
3778
- for ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {
3779
-
3780
- scaled[ j ] = outputArray[ j ] * scale;
3931
+ tracks.push( createdTracks[ k ] );
3781
3932
 
3782
3933
  }
3783
3934
 
3784
- outputArray = scaled;
3785
-
3786
- }
3787
-
3788
- for ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {
3789
-
3790
- const track = new TypedKeyframeTrack(
3791
- targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
3792
- inputAccessor.array,
3793
- outputArray,
3794
- interpolation
3795
- );
3796
-
3797
- // Override interpolation with custom factory method.
3798
- if ( sampler.interpolation === 'CUBICSPLINE' ) {
3799
-
3800
- track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
3801
-
3802
- // A CUBICSPLINE keyframe in glTF has three output values for each input value,
3803
- // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
3804
- // must be divided by three to get the interpolant's sampleSize argument.
3805
-
3806
- const interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
3807
-
3808
- return new interpolantType( this.times, this.values, this.getValueSize() / 3, result );
3809
-
3810
- };
3811
-
3812
- // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
3813
- track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
3814
-
3815
- }
3816
-
3817
- tracks.push( track );
3818
-
3819
3935
  }
3820
3936
 
3821
3937
  }
3822
3938
 
3823
- const name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;
3824
-
3825
- return new AnimationClip( name, undefined, tracks );
3939
+ return new AnimationClip( animationName, undefined, tracks );
3826
3940
 
3827
3941
  } );
3828
3942
 
@@ -3871,53 +3985,118 @@ class GLTFParser {
3871
3985
  loadNode( nodeIndex ) {
3872
3986
 
3873
3987
  const json = this.json;
3874
- const extensions = this.extensions;
3875
3988
  const parser = this;
3876
3989
 
3877
3990
  const nodeDef = json.nodes[ nodeIndex ];
3878
3991
 
3879
- // reserve node's name before its dependencies, so the root has the intended name.
3880
- const nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';
3992
+ const nodePending = parser._loadNodeShallow( nodeIndex );
3881
3993
 
3882
- return ( function () {
3994
+ const childPending = [];
3995
+ const childrenDef = nodeDef.children || [];
3883
3996
 
3884
- const pending = [];
3997
+ for ( let i = 0, il = childrenDef.length; i < il; i ++ ) {
3885
3998
 
3886
- const meshPromise = parser._invokeOne( function ( ext ) {
3999
+ childPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );
3887
4000
 
3888
- return ext.createNodeMesh && ext.createNodeMesh( nodeIndex );
4001
+ }
3889
4002
 
3890
- } );
4003
+ const skeletonPending = nodeDef.skin === undefined
4004
+ ? Promise.resolve( null )
4005
+ : parser.getDependency( 'skin', nodeDef.skin );
3891
4006
 
3892
- if ( meshPromise ) {
4007
+ return Promise.all( [
4008
+ nodePending,
4009
+ Promise.all( childPending ),
4010
+ skeletonPending
4011
+ ] ).then( function ( results ) {
3893
4012
 
3894
- pending.push( meshPromise );
4013
+ const node = results[ 0 ];
4014
+ const children = results[ 1 ];
4015
+ const skeleton = results[ 2 ];
3895
4016
 
3896
- }
4017
+ if ( skeleton !== null ) {
3897
4018
 
3898
- if ( nodeDef.camera !== undefined ) {
4019
+ // This full traverse should be fine because
4020
+ // child glTF nodes have not been added to this node yet.
4021
+ node.traverse( function ( mesh ) {
3899
4022
 
3900
- pending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {
4023
+ if ( ! mesh.isSkinnedMesh ) return;
3901
4024
 
3902
- return parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );
4025
+ mesh.bind( skeleton, _identityMatrix );
3903
4026
 
3904
- } ) );
4027
+ } );
3905
4028
 
3906
4029
  }
3907
4030
 
3908
- parser._invokeAll( function ( ext ) {
4031
+ for ( let i = 0, il = children.length; i < il; i ++ ) {
3909
4032
 
3910
- return ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );
4033
+ node.add( children[ i ] );
3911
4034
 
3912
- } ).forEach( function ( promise ) {
4035
+ }
3913
4036
 
3914
- pending.push( promise );
4037
+ return node;
3915
4038
 
3916
- } );
4039
+ } );
4040
+
4041
+ }
4042
+
4043
+ // ._loadNodeShallow() parses a single node.
4044
+ // skin and child nodes are created and added in .loadNode() (no '_' prefix).
4045
+ _loadNodeShallow( nodeIndex ) {
3917
4046
 
3918
- return Promise.all( pending );
4047
+ const json = this.json;
4048
+ const extensions = this.extensions;
4049
+ const parser = this;
3919
4050
 
3920
- }() ).then( function ( objects ) {
4051
+ // This method is called from .loadNode() and .loadSkin().
4052
+ // Cache a node to avoid duplication.
4053
+
4054
+ if ( this.nodeCache[ nodeIndex ] !== undefined ) {
4055
+
4056
+ return this.nodeCache[ nodeIndex ];
4057
+
4058
+ }
4059
+
4060
+ const nodeDef = json.nodes[ nodeIndex ];
4061
+
4062
+ // reserve node's name before its dependencies, so the root has the intended name.
4063
+ const nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';
4064
+
4065
+ const pending = [];
4066
+
4067
+ const meshPromise = parser._invokeOne( function ( ext ) {
4068
+
4069
+ return ext.createNodeMesh && ext.createNodeMesh( nodeIndex );
4070
+
4071
+ } );
4072
+
4073
+ if ( meshPromise ) {
4074
+
4075
+ pending.push( meshPromise );
4076
+
4077
+ }
4078
+
4079
+ if ( nodeDef.camera !== undefined ) {
4080
+
4081
+ pending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {
4082
+
4083
+ return parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );
4084
+
4085
+ } ) );
4086
+
4087
+ }
4088
+
4089
+ parser._invokeAll( function ( ext ) {
4090
+
4091
+ return ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );
4092
+
4093
+ } ).forEach( function ( promise ) {
4094
+
4095
+ pending.push( promise );
4096
+
4097
+ } );
4098
+
4099
+ this.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {
3921
4100
 
3922
4101
  let node;
3923
4102
 
@@ -4001,6 +4180,8 @@ class GLTFParser {
4001
4180
 
4002
4181
  } );
4003
4182
 
4183
+ return this.nodeCache[ nodeIndex ];
4184
+
4004
4185
  }
4005
4186
 
4006
4187
  /**
@@ -4010,7 +4191,6 @@ class GLTFParser {
4010
4191
  */
4011
4192
  loadScene( sceneIndex ) {
4012
4193
 
4013
- const json = this.json;
4014
4194
  const extensions = this.extensions;
4015
4195
  const sceneDef = this.json.scenes[ sceneIndex ];
4016
4196
  const parser = this;
@@ -4030,11 +4210,17 @@ class GLTFParser {
4030
4210
 
4031
4211
  for ( let i = 0, il = nodeIds.length; i < il; i ++ ) {
4032
4212
 
4033
- pending.push( buildNodeHierarchy( nodeIds[ i ], scene, json, parser ) );
4213
+ pending.push( parser.getDependency( 'node', nodeIds[ i ] ) );
4034
4214
 
4035
4215
  }
4036
4216
 
4037
- return Promise.all( pending ).then( function () {
4217
+ return Promise.all( pending ).then( function ( nodes ) {
4218
+
4219
+ for ( let i = 0, il = nodes.length; i < il; i ++ ) {
4220
+
4221
+ scene.add( nodes[ i ] );
4222
+
4223
+ }
4038
4224
 
4039
4225
  // Removes dangling associations, associations that reference a node that
4040
4226
  // didn't make it into the scene.
@@ -4076,56 +4262,134 @@ class GLTFParser {
4076
4262
 
4077
4263
  }
4078
4264
 
4079
- }
4080
-
4081
- function buildNodeHierarchy( nodeId, parentObject, json, parser ) {
4265
+ _createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {
4082
4266
 
4083
- const nodeDef = json.nodes[ nodeId ];
4267
+ const tracks = [];
4084
4268
 
4085
- return parser.getDependency( 'node', nodeId ).then( function ( node ) {
4269
+ const targetName = node.name ? node.name : node.uuid;
4086
4270
 
4087
- if ( nodeDef.skin === undefined ) return node;
4271
+ const targetNames = [];
4088
4272
 
4089
- // build skeleton here as well
4273
+ if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
4090
4274
 
4091
- return parser.getDependency( 'skin', nodeDef.skin ).then( function ( skeleton ) {
4275
+ node.traverse( function ( object ) {
4092
4276
 
4093
- node.traverse( function ( mesh ) {
4277
+ if ( object.morphTargetInfluences ) {
4094
4278
 
4095
- if ( ! mesh.isSkinnedMesh ) return;
4279
+ targetNames.push( object.name ? object.name : object.uuid );
4096
4280
 
4097
- mesh.bind( skeleton, mesh.matrixWorld );
4281
+ }
4098
4282
 
4099
4283
  } );
4100
4284
 
4101
- return node;
4285
+ } else {
4102
4286
 
4103
- } );
4287
+ targetNames.push( targetName );
4104
4288
 
4105
- } ).then( function ( node ) {
4289
+ }
4106
4290
 
4107
- // build node hierachy
4291
+ let TypedKeyframeTrack;
4108
4292
 
4109
- parentObject.add( node );
4293
+ switch ( PATH_PROPERTIES[ target.path ] ) {
4110
4294
 
4111
- const pending = [];
4295
+ case PATH_PROPERTIES.weights:
4296
+
4297
+ TypedKeyframeTrack = NumberKeyframeTrack;
4298
+ break;
4112
4299
 
4113
- if ( nodeDef.children ) {
4300
+ case PATH_PROPERTIES.rotation:
4114
4301
 
4115
- const children = nodeDef.children;
4302
+ TypedKeyframeTrack = QuaternionKeyframeTrack;
4303
+ break;
4116
4304
 
4117
- for ( let i = 0, il = children.length; i < il; i ++ ) {
4305
+ case PATH_PROPERTIES.position:
4306
+ case PATH_PROPERTIES.scale:
4307
+ default:
4308
+ switch ( outputAccessor.itemSize ) {
4309
+
4310
+ case 1:
4311
+ TypedKeyframeTrack = NumberKeyframeTrack;
4312
+ break;
4313
+ case 2:
4314
+ case 3:
4315
+ TypedKeyframeTrack = VectorKeyframeTrack;
4316
+ break;
4317
+
4318
+ }
4319
+
4320
+ break;
4321
+
4322
+ }
4323
+
4324
+ const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;
4118
4325
 
4119
- const child = children[ i ];
4120
- pending.push( buildNodeHierarchy( child, node, json, parser ) );
4326
+ const outputArray = this._getArrayFromAccessor( outputAccessor );
4327
+
4328
+ for ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {
4329
+
4330
+ const track = new TypedKeyframeTrack(
4331
+ targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
4332
+ inputAccessor.array,
4333
+ outputArray,
4334
+ interpolation
4335
+ );
4336
+
4337
+ // Override interpolation with custom factory method.
4338
+ if ( interpolation === 'CUBICSPLINE' ) {
4339
+
4340
+ this._createCubicSplineTrackInterpolant( track );
4121
4341
 
4122
4342
  }
4123
4343
 
4344
+ tracks.push( track );
4345
+
4124
4346
  }
4125
4347
 
4126
- return Promise.all( pending );
4348
+ return tracks;
4127
4349
 
4128
- } );
4350
+ }
4351
+
4352
+ _getArrayFromAccessor( accessor ) {
4353
+
4354
+ let outputArray = accessor.array;
4355
+
4356
+ if ( accessor.normalized ) {
4357
+
4358
+ const scale = getNormalizedComponentScale( outputArray.constructor );
4359
+ const scaled = new Float32Array( outputArray.length );
4360
+
4361
+ for ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {
4362
+
4363
+ scaled[ j ] = outputArray[ j ] * scale;
4364
+
4365
+ }
4366
+
4367
+ outputArray = scaled;
4368
+
4369
+ }
4370
+
4371
+ return outputArray;
4372
+
4373
+ }
4374
+
4375
+ _createCubicSplineTrackInterpolant( track ) {
4376
+
4377
+ track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
4378
+
4379
+ // A CUBICSPLINE keyframe in glTF has three output values for each input value,
4380
+ // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
4381
+ // must be divided by three to get the interpolant's sampleSize argument.
4382
+
4383
+ const interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
4384
+
4385
+ return new interpolantType( this.times, this.values, this.getValueSize() / 3, result );
4386
+
4387
+ };
4388
+
4389
+ // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
4390
+ track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
4391
+
4392
+ }
4129
4393
 
4130
4394
  }
4131
4395
 
@@ -4304,98 +4568,4 @@ function addPrimitiveAttributes( geometry, primitiveDef, parser ) {
4304
4568
 
4305
4569
  }
4306
4570
 
4307
- /**
4308
- * @param {BufferGeometry} geometry
4309
- * @param {Number} drawMode
4310
- * @return {BufferGeometry}
4311
- */
4312
- function toTrianglesDrawMode( geometry, drawMode ) {
4313
-
4314
- let index = geometry.getIndex();
4315
-
4316
- // generate index if not present
4317
-
4318
- if ( index === null ) {
4319
-
4320
- const indices = [];
4321
-
4322
- const position = geometry.getAttribute( 'position' );
4323
-
4324
- if ( position !== undefined ) {
4325
-
4326
- for ( let i = 0; i < position.count; i ++ ) {
4327
-
4328
- indices.push( i );
4329
-
4330
- }
4331
-
4332
- geometry.setIndex( indices );
4333
- index = geometry.getIndex();
4334
-
4335
- } else {
4336
-
4337
- console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );
4338
- return geometry;
4339
-
4340
- }
4341
-
4342
- }
4343
-
4344
- //
4345
-
4346
- const numberOfTriangles = index.count - 2;
4347
- const newIndices = [];
4348
-
4349
- if ( drawMode === TriangleFanDrawMode ) {
4350
-
4351
- // gl.TRIANGLE_FAN
4352
-
4353
- for ( let i = 1; i <= numberOfTriangles; i ++ ) {
4354
-
4355
- newIndices.push( index.getX( 0 ) );
4356
- newIndices.push( index.getX( i ) );
4357
- newIndices.push( index.getX( i + 1 ) );
4358
-
4359
- }
4360
-
4361
- } else {
4362
-
4363
- // gl.TRIANGLE_STRIP
4364
-
4365
- for ( let i = 0; i < numberOfTriangles; i ++ ) {
4366
-
4367
- if ( i % 2 === 0 ) {
4368
-
4369
- newIndices.push( index.getX( i ) );
4370
- newIndices.push( index.getX( i + 1 ) );
4371
- newIndices.push( index.getX( i + 2 ) );
4372
-
4373
-
4374
- } else {
4375
-
4376
- newIndices.push( index.getX( i + 2 ) );
4377
- newIndices.push( index.getX( i + 1 ) );
4378
- newIndices.push( index.getX( i ) );
4379
-
4380
- }
4381
-
4382
- }
4383
-
4384
- }
4385
-
4386
- if ( ( newIndices.length / 3 ) !== numberOfTriangles ) {
4387
-
4388
- console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );
4389
-
4390
- }
4391
-
4392
- // build final geometry
4393
-
4394
- const newGeometry = geometry.clone();
4395
- newGeometry.setIndex( newIndices );
4396
-
4397
- return newGeometry;
4398
-
4399
- }
4400
-
4401
4571
  export { GLTFLoader };