@needle-tools/three 0.146.9 → 0.153.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 (865) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +39486 -20286
  3. package/build/three.js +39471 -20270
  4. package/build/three.min.js +3 -2
  5. package/build/three.module.js +6717 -5427
  6. package/build/three.module.min.js +6 -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 +1828 -1821
  11. package/examples/jsm/controls/MapControls.js +28 -0
  12. package/examples/jsm/controls/OrbitControls.js +25 -46
  13. package/examples/jsm/controls/PointerLockControls.js +70 -65
  14. package/examples/jsm/controls/TrackballControls.js +18 -4
  15. package/examples/jsm/controls/TransformControls.js +0 -1
  16. package/examples/jsm/csm/CSM.js +11 -5
  17. package/examples/jsm/csm/CSMShader.js +7 -6
  18. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  19. package/examples/jsm/effects/AsciiEffect.js +3 -6
  20. package/examples/jsm/effects/OutlineEffect.js +1 -15
  21. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  22. package/examples/jsm/exporters/DRACOExporter.js +53 -11
  23. package/examples/jsm/exporters/EXRExporter.js +3 -9
  24. package/examples/jsm/exporters/GLTFExporter.js +561 -154
  25. package/examples/jsm/exporters/KTX2Exporter.js +34 -23
  26. package/examples/jsm/exporters/MMDExporter.js +1 -1
  27. package/examples/jsm/exporters/PLYExporter.js +8 -1
  28. package/examples/jsm/exporters/STLExporter.js +8 -4
  29. package/examples/jsm/exporters/USDZExporter.js +305 -792
  30. package/examples/jsm/geometries/ConvexGeometry.js +0 -6
  31. package/examples/jsm/geometries/ParametricGeometry.js +10 -0
  32. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  33. package/examples/jsm/helpers/ViewHelper.js +71 -57
  34. package/examples/jsm/interactive/HTMLMesh.js +16 -3
  35. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  36. package/examples/{js → jsm}/libs/basis/README.md +4 -4
  37. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  38. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  39. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  40. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  41. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  42. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  43. package/examples/jsm/libs/lil-gui.module.min.js +2 -2
  44. package/examples/jsm/libs/tween.module.js +803 -0
  45. package/examples/jsm/lights/IESSpotLight.js +25 -0
  46. package/examples/jsm/lights/LightProbeGenerator.js +11 -9
  47. package/examples/jsm/lines/LineSegments2.js +16 -10
  48. package/examples/jsm/loaders/3DMLoader.js +8 -5
  49. package/examples/jsm/loaders/3MFLoader.js +12 -11
  50. package/examples/jsm/loaders/AMFLoader.js +2 -3
  51. package/examples/jsm/loaders/BVHLoader.js +2 -2
  52. package/examples/jsm/loaders/ColladaLoader.js +15 -16
  53. package/examples/jsm/loaders/DRACOLoader.js +69 -18
  54. package/examples/jsm/loaders/EXRLoader.js +23 -24
  55. package/examples/jsm/loaders/FBXLoader.js +34 -50
  56. package/examples/jsm/loaders/GCodeLoader.js +1 -2
  57. package/examples/jsm/loaders/GLTFLoader.js +417 -895
  58. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +684 -0
  59. package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
  60. package/examples/jsm/loaders/IESLoader.js +337 -0
  61. package/examples/jsm/loaders/KMZLoader.js +4 -4
  62. package/examples/jsm/loaders/KTX2Loader.js +145 -69
  63. package/examples/jsm/loaders/LDrawLoader.js +20 -18
  64. package/examples/jsm/loaders/LWOLoader.js +12 -29
  65. package/examples/jsm/loaders/LottieLoader.js +3 -1
  66. package/examples/jsm/loaders/MMDLoader.js +49 -18
  67. package/examples/jsm/loaders/MTLLoader.js +2 -2
  68. package/examples/jsm/loaders/MaterialXLoader.js +9 -3
  69. package/examples/jsm/loaders/NRRDLoader.js +33 -5
  70. package/examples/jsm/loaders/OBJLoader.js +1 -1
  71. package/examples/jsm/loaders/PCDLoader.js +26 -12
  72. package/examples/jsm/loaders/PDBLoader.js +7 -2
  73. package/examples/jsm/loaders/PLYLoader.js +254 -109
  74. package/examples/jsm/loaders/RGBELoader.js +3 -3
  75. package/examples/jsm/loaders/STLLoader.js +9 -5
  76. package/examples/jsm/loaders/SVGLoader.js +36 -27
  77. package/examples/jsm/loaders/TTFLoader.js +1 -8
  78. package/examples/jsm/loaders/TiltLoader.js +13 -7
  79. package/examples/jsm/loaders/USDZLoader.js +6 -6
  80. package/examples/jsm/loaders/VOXLoader.js +8 -2
  81. package/examples/jsm/loaders/VRMLLoader.js +44 -16
  82. package/examples/jsm/loaders/VTKLoader.js +19 -10
  83. package/examples/jsm/loaders/XYZLoader.js +9 -3
  84. package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
  85. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -3
  86. package/examples/jsm/math/ConvexHull.js +3 -3
  87. package/examples/jsm/math/Lut.js +5 -4
  88. package/examples/jsm/math/MeshSurfaceSampler.js +7 -9
  89. package/examples/jsm/math/Octree.js +1 -1
  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 +144 -335
  101. package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
  102. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +86 -0
  103. package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
  104. package/examples/jsm/nodes/accessors/CameraNode.js +12 -2
  105. package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
  106. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +58 -0
  107. package/examples/jsm/nodes/accessors/InstanceNode.js +41 -26
  108. package/examples/jsm/nodes/accessors/MaterialNode.js +155 -38
  109. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
  110. package/examples/jsm/nodes/accessors/ModelNode.js +11 -0
  111. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
  112. package/examples/jsm/nodes/accessors/NormalNode.js +35 -19
  113. package/examples/jsm/nodes/accessors/Object3DNode.js +32 -12
  114. package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
  115. package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
  116. package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
  117. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
  118. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -40
  119. package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
  120. package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
  121. package/examples/jsm/nodes/accessors/TextureNode.js +80 -12
  122. package/examples/jsm/nodes/accessors/UVNode.js +6 -0
  123. package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
  124. package/examples/jsm/nodes/code/CodeNode.js +75 -0
  125. package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
  126. package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
  127. package/examples/jsm/nodes/{core → code}/FunctionNode.js +8 -7
  128. package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
  129. package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
  130. package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
  131. package/examples/jsm/nodes/core/AttributeNode.js +17 -9
  132. package/examples/jsm/nodes/core/BypassNode.js +9 -2
  133. package/examples/jsm/nodes/core/CacheNode.js +46 -0
  134. package/examples/jsm/nodes/core/ConstNode.js +3 -0
  135. package/examples/jsm/nodes/core/ContextNode.js +8 -1
  136. package/examples/jsm/nodes/core/InputNode.js +26 -5
  137. package/examples/jsm/nodes/core/InstanceIndexNode.js +26 -2
  138. package/examples/jsm/nodes/core/LightingModel.js +16 -0
  139. package/examples/jsm/nodes/core/Node.js +129 -35
  140. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  141. package/examples/jsm/nodes/core/NodeBuilder.js +271 -121
  142. package/examples/jsm/nodes/core/NodeCache.js +26 -0
  143. package/examples/jsm/nodes/core/NodeFrame.js +56 -5
  144. package/examples/jsm/nodes/core/NodeUtils.js +115 -28
  145. package/examples/jsm/nodes/core/PropertyNode.js +19 -2
  146. package/examples/jsm/nodes/core/StackNode.js +99 -0
  147. package/examples/jsm/nodes/core/TempNode.js +11 -3
  148. package/examples/jsm/nodes/core/UniformNode.js +16 -1
  149. package/examples/jsm/nodes/core/VarNode.js +21 -29
  150. package/examples/jsm/nodes/core/VaryingNode.js +15 -2
  151. package/examples/jsm/nodes/core/constants.js +6 -0
  152. package/examples/jsm/nodes/display/BlendModeNode.js +25 -11
  153. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +30 -14
  154. package/examples/jsm/nodes/display/ColorSpaceNode.js +39 -27
  155. package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
  156. package/examples/jsm/nodes/display/NormalMapNode.js +31 -18
  157. package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
  158. package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
  159. package/examples/jsm/nodes/display/ViewportNode.js +27 -18
  160. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +30 -0
  161. package/examples/jsm/nodes/display/ViewportTextureNode.js +67 -0
  162. package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
  163. package/examples/jsm/nodes/fog/FogNode.js +12 -6
  164. package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
  165. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
  166. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -13
  167. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  168. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -6
  169. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +4 -4
  170. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +3 -3
  171. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +7 -5
  172. package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
  173. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +35 -36
  174. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +4 -3
  175. package/examples/jsm/nodes/functions/material/getRoughness.js +4 -4
  176. package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
  177. package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
  178. package/examples/jsm/nodes/lighting/AONode.js +5 -3
  179. package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
  180. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
  181. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
  182. package/examples/jsm/nodes/lighting/EnvironmentNode.js +121 -35
  183. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
  184. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
  185. package/examples/jsm/nodes/lighting/LightNode.js +57 -0
  186. package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
  187. package/examples/jsm/nodes/lighting/LightingContextNode.js +30 -8
  188. package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
  189. package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
  190. package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
  191. package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
  192. package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
  193. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
  194. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -9
  195. package/examples/jsm/nodes/materials/Materials.js +11 -55
  196. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -11
  197. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +48 -0
  198. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +74 -0
  199. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  200. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +21 -96
  201. package/examples/jsm/nodes/materials/NodeMaterial.js +284 -62
  202. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -1
  203. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -25
  204. package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
  205. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +1 -1
  206. package/examples/jsm/nodes/materialx/lib/mx_noise.js +2 -1
  207. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +2 -1
  208. package/examples/jsm/nodes/math/CondNode.js +43 -17
  209. package/examples/jsm/nodes/math/MathNode.js +178 -73
  210. package/examples/jsm/nodes/math/OperatorNode.js +52 -2
  211. package/examples/jsm/nodes/procedural/CheckerNode.js +14 -6
  212. package/examples/jsm/nodes/shadernode/ShaderNode.js +186 -63
  213. package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
  214. package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
  215. package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
  216. package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
  217. package/examples/jsm/nodes/utils/JoinNode.js +4 -1
  218. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  219. package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
  220. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
  221. package/examples/jsm/nodes/utils/OscNode.js +21 -14
  222. package/examples/jsm/nodes/utils/PackingNode.js +55 -0
  223. package/examples/jsm/nodes/utils/RemapNode.js +13 -5
  224. package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
  225. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
  226. package/examples/jsm/nodes/utils/SplitNode.js +7 -5
  227. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
  228. package/examples/jsm/nodes/utils/TimerNode.js +16 -6
  229. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
  230. package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
  231. package/examples/jsm/objects/Lensflare.js +3 -4
  232. package/examples/jsm/objects/MarchingCubes.js +5 -1
  233. package/examples/jsm/objects/Reflector.js +7 -4
  234. package/examples/jsm/objects/Refractor.js +4 -4
  235. package/examples/jsm/objects/ShadowMesh.js +3 -3
  236. package/examples/jsm/objects/Water.js +2 -1
  237. package/examples/jsm/physics/AmmoPhysics.js +27 -28
  238. package/examples/jsm/physics/RapierPhysics.js +199 -0
  239. package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
  240. package/examples/jsm/postprocessing/BloomPass.js +7 -4
  241. package/examples/jsm/postprocessing/BokehPass.js +3 -8
  242. package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
  243. package/examples/jsm/postprocessing/EffectComposer.js +5 -95
  244. package/examples/jsm/postprocessing/FilmPass.js +1 -2
  245. package/examples/jsm/postprocessing/GlitchPass.js +0 -2
  246. package/examples/jsm/postprocessing/HalftonePass.js +0 -6
  247. package/examples/jsm/postprocessing/OutlinePass.js +7 -7
  248. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  249. package/examples/jsm/postprocessing/Pass.js +2 -0
  250. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  251. package/examples/jsm/postprocessing/SAOPass.js +4 -26
  252. package/examples/jsm/postprocessing/SMAAPass.js +5 -8
  253. package/examples/jsm/postprocessing/SSAARenderPass.js +15 -6
  254. package/examples/jsm/postprocessing/SSAOPass.js +4 -14
  255. package/examples/jsm/postprocessing/SSRPass.js +3 -7
  256. package/examples/jsm/postprocessing/SavePass.js +2 -3
  257. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  258. package/examples/jsm/postprocessing/TAARenderPass.js +3 -2
  259. package/examples/jsm/postprocessing/TexturePass.js +0 -2
  260. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -11
  261. package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
  262. package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
  263. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
  264. package/examples/jsm/renderers/common/Attributes.js +75 -0
  265. package/examples/jsm/renderers/common/Backend.js +160 -0
  266. package/examples/jsm/renderers/common/Background.js +133 -0
  267. package/examples/jsm/renderers/common/Binding.js +11 -0
  268. package/examples/jsm/renderers/common/Bindings.js +169 -0
  269. package/examples/jsm/renderers/common/Buffer.js +38 -0
  270. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  271. package/examples/jsm/renderers/common/ChainMap.js +89 -0
  272. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  273. package/examples/jsm/renderers/common/Constants.js +14 -0
  274. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  275. package/examples/jsm/renderers/common/DataMap.js +54 -0
  276. package/examples/jsm/renderers/common/Geometries.js +215 -0
  277. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  278. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  279. package/examples/jsm/renderers/common/Pipelines.js +309 -0
  280. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  281. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  282. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  283. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
  284. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  285. package/examples/jsm/renderers/common/RenderObject.js +95 -0
  286. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  287. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  288. package/examples/jsm/renderers/common/RenderTarget.js +15 -0
  289. package/examples/jsm/renderers/common/Renderer.js +822 -0
  290. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  291. package/examples/jsm/renderers/common/Sampler.js +18 -0
  292. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  293. package/examples/jsm/renderers/common/Textures.js +206 -0
  294. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  295. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  296. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  297. package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
  298. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  299. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  300. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  301. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  302. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +35 -31
  303. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +765 -0
  304. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
  305. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +117 -90
  306. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  307. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  308. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +251 -0
  309. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  310. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
  311. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +135 -285
  312. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
  313. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +855 -0
  314. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +88 -0
  315. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  316. package/examples/jsm/shaders/BokehShader2.js +3 -0
  317. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  318. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  319. package/examples/jsm/shaders/CopyShader.js +2 -0
  320. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  321. package/examples/jsm/shaders/ExposureShader.js +44 -0
  322. package/examples/jsm/shaders/FilmShader.js +2 -0
  323. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  324. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  325. package/examples/jsm/shaders/MMDToonShader.js +15 -4
  326. package/examples/jsm/shaders/OutputShader.js +61 -0
  327. package/examples/jsm/shaders/RGBShiftShader.js +4 -2
  328. package/examples/jsm/shaders/SepiaShader.js +2 -0
  329. package/examples/jsm/shaders/ToonShader.js +13 -5
  330. package/examples/jsm/shaders/VelocityShader.js +1 -1
  331. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  332. package/examples/jsm/shaders/VignetteShader.js +2 -0
  333. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  334. package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
  335. package/examples/jsm/utils/LDrawUtils.js +4 -4
  336. package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
  337. package/examples/jsm/utils/SceneUtils.js +8 -4
  338. package/examples/jsm/utils/SkeletonUtils.js +27 -210
  339. package/examples/jsm/utils/TextureUtils.js +41 -40
  340. package/examples/jsm/webxr/VRButton.js +1 -2
  341. package/examples/jsm/webxr/XRButton.js +198 -0
  342. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  343. package/examples/jsm/webxr/XRPlanes.js +100 -0
  344. package/package.json +34 -87
  345. package/src/Three.Legacy.js +19 -110
  346. package/src/Three.js +4 -3
  347. package/src/animation/AnimationUtils.js +13 -1
  348. package/src/audio/Audio.js +7 -2
  349. package/src/audio/PositionalAudio.js +8 -0
  350. package/src/cameras/Camera.js +5 -0
  351. package/src/cameras/CubeCamera.js +76 -13
  352. package/src/cameras/OrthographicCamera.js +1 -1
  353. package/src/cameras/PerspectiveCamera.js +1 -1
  354. package/src/constants.js +22 -2
  355. package/src/core/BufferAttribute.js +150 -9
  356. package/src/core/BufferGeometry.js +4 -10
  357. package/src/core/GLBufferAttribute.js +2 -0
  358. package/src/core/InterleavedBufferAttribute.js +5 -5
  359. package/src/core/Object3D.js +37 -8
  360. package/src/extras/DataUtils.js +7 -1
  361. package/src/extras/ImageUtils.js +2 -2
  362. package/src/extras/PMREMGenerator.js +5 -5
  363. package/src/extras/core/Curve.js +1 -1
  364. package/src/extras/curves/LineCurve.js +6 -4
  365. package/src/extras/curves/LineCurve3.js +13 -0
  366. package/src/geometries/BoxGeometry.js +10 -0
  367. package/src/geometries/CircleGeometry.js +11 -1
  368. package/src/geometries/ConeGeometry.js +1 -1
  369. package/src/geometries/CylinderGeometry.js +11 -1
  370. package/src/geometries/EdgesGeometry.js +10 -0
  371. package/src/geometries/ExtrudeGeometry.js +11 -1
  372. package/src/geometries/LatheGeometry.js +10 -0
  373. package/src/geometries/PlaneGeometry.js +10 -0
  374. package/src/geometries/PolyhedronGeometry.js +11 -1
  375. package/src/geometries/RingGeometry.js +11 -1
  376. package/src/geometries/ShapeGeometry.js +11 -1
  377. package/src/geometries/SphereGeometry.js +12 -2
  378. package/src/geometries/TorusGeometry.js +11 -1
  379. package/src/geometries/TorusKnotGeometry.js +10 -0
  380. package/src/geometries/TubeGeometry.js +10 -0
  381. package/src/geometries/WireframeGeometry.js +10 -0
  382. package/src/helpers/Box3Helper.js +1 -2
  383. package/src/lights/DirectionalLight.js +1 -1
  384. package/src/lights/HemisphereLight.js +1 -1
  385. package/src/lights/SpotLight.js +1 -1
  386. package/src/loaders/AudioLoader.js +14 -8
  387. package/src/loaders/CubeTextureLoader.js +2 -0
  388. package/src/loaders/DataTextureLoader.js +5 -1
  389. package/src/loaders/MaterialLoader.js +8 -0
  390. package/src/loaders/ObjectLoader.js +10 -2
  391. package/src/materials/LineBasicMaterial.js +4 -0
  392. package/src/materials/Material.js +16 -4
  393. package/src/materials/MeshDistanceMaterial.js +0 -9
  394. package/src/materials/MeshPhysicalMaterial.js +32 -6
  395. package/src/materials/ShaderMaterial.js +6 -1
  396. package/src/math/Box2.js +3 -2
  397. package/src/math/Box3.js +49 -64
  398. package/src/math/Color.js +88 -66
  399. package/src/math/ColorManagement.js +75 -16
  400. package/src/math/Euler.js +2 -11
  401. package/src/math/Frustum.js +29 -5
  402. package/src/math/MathUtils.js +43 -1
  403. package/src/math/Matrix3.js +26 -6
  404. package/src/math/Matrix4.js +74 -19
  405. package/src/math/Plane.js +2 -2
  406. package/src/math/Quaternion.js +6 -0
  407. package/src/math/Ray.js +7 -7
  408. package/src/math/Triangle.js +37 -7
  409. package/src/math/Vector2.js +16 -0
  410. package/src/math/Vector3.js +10 -0
  411. package/src/math/interpolants/CubicInterpolant.js +1 -2
  412. package/src/objects/InstancedMesh.js +82 -1
  413. package/src/objects/Mesh.js +108 -76
  414. package/src/objects/Skeleton.js +1 -1
  415. package/src/objects/SkinnedMesh.js +123 -8
  416. package/src/objects/Sprite.js +1 -1
  417. package/src/renderers/WebGLCubeRenderTarget.js +12 -3
  418. package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
  419. package/src/renderers/WebGLRenderTarget.js +14 -2
  420. package/src/renderers/WebGLRenderer.js +1433 -1236
  421. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
  422. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  423. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
  424. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
  425. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
  426. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
  427. package/src/renderers/shaders/ShaderChunk/common.glsl.js +32 -0
  428. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
  429. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
  430. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
  431. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  432. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  433. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  434. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
  435. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
  436. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
  437. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
  438. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -10
  439. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
  440. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
  441. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
  442. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +32 -10
  443. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
  444. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
  445. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -2
  446. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
  447. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
  449. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
  450. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
  451. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
  454. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
  456. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +134 -6
  457. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +116 -1
  458. package/src/renderers/shaders/ShaderChunk.js +0 -6
  459. package/src/renderers/shaders/ShaderLib/background.glsl.js +0 -8
  460. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +5 -0
  461. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -4
  462. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -3
  463. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
  464. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -3
  465. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +16 -12
  466. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -3
  467. package/src/renderers/shaders/ShaderLib/points.glsl.js +13 -0
  468. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +5 -0
  469. package/src/renderers/shaders/ShaderLib.js +18 -4
  470. package/src/renderers/shaders/UniformsLib.js +27 -15
  471. package/src/renderers/shaders/UniformsUtils.js +12 -3
  472. package/src/renderers/webgl/WebGLBackground.js +23 -12
  473. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  474. package/src/renderers/webgl/WebGLCapabilities.js +1 -2
  475. package/src/renderers/webgl/WebGLClipping.js +7 -3
  476. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  477. package/src/renderers/webgl/WebGLInfo.js +0 -1
  478. package/src/renderers/webgl/WebGLLights.js +2 -2
  479. package/src/renderers/webgl/WebGLMaterials.js +123 -234
  480. package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
  481. package/src/renderers/webgl/WebGLProgram.js +130 -48
  482. package/src/renderers/webgl/WebGLPrograms.js +210 -130
  483. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  484. package/src/renderers/webgl/WebGLShadowMap.js +40 -27
  485. package/src/renderers/webgl/WebGLState.js +23 -9
  486. package/src/renderers/webgl/WebGLTextures.js +39 -19
  487. package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
  488. package/src/renderers/webgl/WebGLUtils.js +41 -29
  489. package/src/renderers/webxr/WebXRController.js +3 -0
  490. package/src/renderers/webxr/WebXRManager.js +85 -141
  491. package/src/scenes/Scene.js +4 -6
  492. package/src/textures/CompressedTexture.js +2 -2
  493. package/src/textures/CubeTexture.js +2 -2
  494. package/src/textures/DataTexture.js +2 -2
  495. package/src/textures/DepthTexture.js +22 -0
  496. package/src/textures/FramebufferTexture.js +1 -3
  497. package/src/textures/Source.js +4 -0
  498. package/src/textures/Texture.js +43 -13
  499. package/src/utils.js +13 -1
  500. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  501. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  502. package/examples/fonts/open-sans/open-sans.css +0 -9
  503. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  504. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
  505. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  506. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  507. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  508. package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
  509. package/examples/js/animation/AnimationClipCreator.js +0 -89
  510. package/examples/js/animation/CCDIKSolver.js +0 -416
  511. package/examples/js/animation/MMDAnimationHelper.js +0 -1046
  512. package/examples/js/animation/MMDPhysics.js +0 -1174
  513. package/examples/js/cameras/CinematicCamera.js +0 -168
  514. package/examples/js/controls/ArcballControls.js +0 -2770
  515. package/examples/js/controls/DragControls.js +0 -205
  516. package/examples/js/controls/FirstPersonControls.js +0 -312
  517. package/examples/js/controls/FlyControls.js +0 -321
  518. package/examples/js/controls/OrbitControls.js +0 -1065
  519. package/examples/js/controls/PointerLockControls.js +0 -144
  520. package/examples/js/controls/TrackballControls.js +0 -729
  521. package/examples/js/controls/TransformControls.js +0 -1301
  522. package/examples/js/csm/CSM.js +0 -347
  523. package/examples/js/csm/CSMFrustum.js +0 -127
  524. package/examples/js/csm/CSMHelper.js +0 -165
  525. package/examples/js/csm/CSMShader.js +0 -253
  526. package/examples/js/curves/CurveExtras.js +0 -348
  527. package/examples/js/curves/NURBSCurve.js +0 -63
  528. package/examples/js/curves/NURBSSurface.js +0 -48
  529. package/examples/js/curves/NURBSUtils.js +0 -439
  530. package/examples/js/effects/AnaglyphEffect.js +0 -86
  531. package/examples/js/effects/AsciiEffect.js +0 -260
  532. package/examples/js/effects/OutlineEffect.js +0 -450
  533. package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
  534. package/examples/js/effects/PeppersGhostEffect.js +0 -139
  535. package/examples/js/effects/StereoEffect.js +0 -46
  536. package/examples/js/environments/DebugEnvironment.js +0 -53
  537. package/examples/js/environments/RoomEnvironment.js +0 -124
  538. package/examples/js/exporters/ColladaExporter.js +0 -487
  539. package/examples/js/exporters/DRACOExporter.js +0 -212
  540. package/examples/js/exporters/EXRExporter.js +0 -455
  541. package/examples/js/exporters/GLTFExporter.js +0 -2425
  542. package/examples/js/exporters/MMDExporter.js +0 -187
  543. package/examples/js/exporters/OBJExporter.js +0 -260
  544. package/examples/js/exporters/PLYExporter.js +0 -427
  545. package/examples/js/exporters/STLExporter.js +0 -188
  546. package/examples/js/exporters/USDZExporter.js +0 -608
  547. package/examples/js/geometries/BoxLineGeometry.js +0 -59
  548. package/examples/js/geometries/ConvexGeometry.js +0 -53
  549. package/examples/js/geometries/DecalGeometry.js +0 -324
  550. package/examples/js/geometries/LightningStrike.js +0 -861
  551. package/examples/js/geometries/ParametricGeometries.js +0 -216
  552. package/examples/js/geometries/ParametricGeometry.js +0 -121
  553. package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
  554. package/examples/js/geometries/TeapotGeometry.js +0 -335
  555. package/examples/js/geometries/TextGeometry.js +0 -53
  556. package/examples/js/helpers/LightProbeHelper.js +0 -48
  557. package/examples/js/helpers/OctreeHelper.js +0 -76
  558. package/examples/js/helpers/PositionalAudioHelper.js +0 -91
  559. package/examples/js/helpers/RectAreaLightHelper.js +0 -73
  560. package/examples/js/helpers/VertexNormalsHelper.js +0 -74
  561. package/examples/js/helpers/VertexTangentsHelper.js +0 -68
  562. package/examples/js/helpers/ViewHelper.js +0 -281
  563. package/examples/js/interactive/HTMLMesh.js +0 -497
  564. package/examples/js/interactive/InteractiveGroup.js +0 -95
  565. package/examples/js/interactive/SelectionBox.js +0 -195
  566. package/examples/js/interactive/SelectionHelper.js +0 -83
  567. package/examples/js/libs/chevrotain.min.js +0 -3
  568. package/examples/js/libs/draco/draco_decoder.js +0 -52
  569. package/examples/js/libs/draco/draco_decoder.wasm +0 -0
  570. package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
  571. package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
  572. package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
  573. package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
  574. package/examples/js/libs/fflate.min.js +0 -7
  575. package/examples/js/libs/ktx-parse.umd.js +0 -1
  576. package/examples/js/libs/meshopt_decoder.js +0 -188
  577. package/examples/js/libs/opentype.min.js +0 -1
  578. package/examples/js/libs/stats.min.js +0 -5
  579. package/examples/js/lights/LightProbeGenerator.js +0 -221
  580. package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
  581. package/examples/js/lines/Line2.js +0 -19
  582. package/examples/js/lines/LineGeometry.js +0 -69
  583. package/examples/js/lines/LineMaterial.js +0 -635
  584. package/examples/js/lines/LineSegments2.js +0 -311
  585. package/examples/js/lines/LineSegmentsGeometry.js +0 -198
  586. package/examples/js/lines/Wireframe.js +0 -47
  587. package/examples/js/lines/WireframeGeometry2.js +0 -20
  588. package/examples/js/loaders/3DMLoader.js +0 -1273
  589. package/examples/js/loaders/3MFLoader.js +0 -1306
  590. package/examples/js/loaders/AMFLoader.js +0 -504
  591. package/examples/js/loaders/BVHLoader.js +0 -395
  592. package/examples/js/loaders/BasisTextureLoader.js +0 -706
  593. package/examples/js/loaders/ColladaLoader.js +0 -3663
  594. package/examples/js/loaders/DDSLoader.js +0 -244
  595. package/examples/js/loaders/DRACOLoader.js +0 -511
  596. package/examples/js/loaders/EXRLoader.js +0 -2039
  597. package/examples/js/loaders/FBXLoader.js +0 -3680
  598. package/examples/js/loaders/FontLoader.js +0 -160
  599. package/examples/js/loaders/GCodeLoader.js +0 -255
  600. package/examples/js/loaders/GLTFLoader.js +0 -4108
  601. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
  602. package/examples/js/loaders/KMZLoader.js +0 -121
  603. package/examples/js/loaders/KTXLoader.js +0 -159
  604. package/examples/js/loaders/LDrawLoader.js +0 -2263
  605. package/examples/js/loaders/LUT3dlLoader.js +0 -135
  606. package/examples/js/loaders/LUTCubeLoader.js +0 -132
  607. package/examples/js/loaders/LWOLoader.js +0 -901
  608. package/examples/js/loaders/LogLuvLoader.js +0 -715
  609. package/examples/js/loaders/LottieLoader.js +0 -62
  610. package/examples/js/loaders/MD2Loader.js +0 -248
  611. package/examples/js/loaders/MDDLoader.js +0 -91
  612. package/examples/js/loaders/MMDLoader.js +0 -1915
  613. package/examples/js/loaders/MTLLoader.js +0 -472
  614. package/examples/js/loaders/MaterialXLoader.js +0 -392
  615. package/examples/js/loaders/NRRDLoader.js +0 -609
  616. package/examples/js/loaders/OBJLoader.js +0 -789
  617. package/examples/js/loaders/PCDLoader.js +0 -413
  618. package/examples/js/loaders/PDBLoader.js +0 -317
  619. package/examples/js/loaders/PLYLoader.js +0 -532
  620. package/examples/js/loaders/PRWMLoader.js +0 -249
  621. package/examples/js/loaders/PVRLoader.js +0 -218
  622. package/examples/js/loaders/RGBELoader.js +0 -442
  623. package/examples/js/loaders/RGBMLoader.js +0 -1354
  624. package/examples/js/loaders/STLLoader.js +0 -364
  625. package/examples/js/loaders/SVGLoader.js +0 -2783
  626. package/examples/js/loaders/TDSLoader.js +0 -992
  627. package/examples/js/loaders/TGALoader.js +0 -484
  628. package/examples/js/loaders/TIFFLoader.js +0 -30
  629. package/examples/js/loaders/TTFLoader.js +0 -203
  630. package/examples/js/loaders/TiltLoader.js +0 -459
  631. package/examples/js/loaders/VOXLoader.js +0 -240
  632. package/examples/js/loaders/VRMLLoader.js +0 -3140
  633. package/examples/js/loaders/VTKLoader.js +0 -1078
  634. package/examples/js/loaders/XYZLoader.js +0 -89
  635. package/examples/js/loaders/lwo/IFFParser.js +0 -1067
  636. package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
  637. package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
  638. package/examples/js/materials/MeshGouraudMaterial.js +0 -387
  639. package/examples/js/math/Capsule.js +0 -103
  640. package/examples/js/math/ColorConverter.js +0 -33
  641. package/examples/js/math/ConvexHull.js +0 -1154
  642. package/examples/js/math/ImprovedNoise.js +0 -66
  643. package/examples/js/math/Lut.js +0 -164
  644. package/examples/js/math/MeshSurfaceSampler.js +0 -171
  645. package/examples/js/math/OBB.js +0 -382
  646. package/examples/js/math/Octree.js +0 -410
  647. package/examples/js/math/SimplexNoise.js +0 -445
  648. package/examples/js/misc/ConvexObjectBreaker.js +0 -474
  649. package/examples/js/misc/GPUComputationRenderer.js +0 -393
  650. package/examples/js/misc/Gyroscope.js +0 -56
  651. package/examples/js/misc/MD2Character.js +0 -235
  652. package/examples/js/misc/MD2CharacterComplex.js +0 -513
  653. package/examples/js/misc/MorphAnimMesh.js +0 -63
  654. package/examples/js/misc/MorphBlendMesh.js +0 -265
  655. package/examples/js/misc/ProgressiveLightMap.js +0 -335
  656. package/examples/js/misc/RollerCoaster.js +0 -430
  657. package/examples/js/misc/TubePainter.js +0 -167
  658. package/examples/js/misc/Volume.js +0 -437
  659. package/examples/js/misc/VolumeSlice.js +0 -214
  660. package/examples/js/modifiers/CurveModifier.js +0 -309
  661. package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
  662. package/examples/js/modifiers/SimplifyModifier.js +0 -465
  663. package/examples/js/modifiers/TessellateModifier.js +0 -276
  664. package/examples/js/objects/GroundProjectedEnv.js +0 -181
  665. package/examples/js/objects/Lensflare.js +0 -356
  666. package/examples/js/objects/LightningStorm.js +0 -206
  667. package/examples/js/objects/MarchingCubes.js +0 -759
  668. package/examples/js/objects/Reflector.js +0 -216
  669. package/examples/js/objects/ReflectorForSSRPass.js +0 -315
  670. package/examples/js/objects/Refractor.js +0 -283
  671. package/examples/js/objects/ShadowMesh.js +0 -59
  672. package/examples/js/objects/Sky.js +0 -218
  673. package/examples/js/objects/Water.js +0 -292
  674. package/examples/js/objects/Water2.js +0 -307
  675. package/examples/js/physics/AmmoPhysics.js +0 -259
  676. package/examples/js/physics/OimoPhysics.js +0 -217
  677. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
  678. package/examples/js/postprocessing/AfterimagePass.js +0 -77
  679. package/examples/js/postprocessing/BloomPass.js +0 -135
  680. package/examples/js/postprocessing/BokehPass.js +0 -120
  681. package/examples/js/postprocessing/ClearPass.js +0 -39
  682. package/examples/js/postprocessing/CubeTexturePass.js +0 -60
  683. package/examples/js/postprocessing/DotScreenPass.js +0 -51
  684. package/examples/js/postprocessing/EffectComposer.js +0 -272
  685. package/examples/js/postprocessing/FilmPass.js +0 -52
  686. package/examples/js/postprocessing/GlitchPass.js +0 -104
  687. package/examples/js/postprocessing/HalftonePass.js +0 -75
  688. package/examples/js/postprocessing/LUTPass.js +0 -171
  689. package/examples/js/postprocessing/MaskPass.js +0 -95
  690. package/examples/js/postprocessing/OutlinePass.js +0 -598
  691. package/examples/js/postprocessing/Pass.js +0 -72
  692. package/examples/js/postprocessing/RenderPass.js +0 -70
  693. package/examples/js/postprocessing/SAOPass.js +0 -374
  694. package/examples/js/postprocessing/SMAAPass.js +0 -170
  695. package/examples/js/postprocessing/SSAARenderPass.js +0 -156
  696. package/examples/js/postprocessing/SSAOPass.js +0 -365
  697. package/examples/js/postprocessing/SSRPass.js +0 -567
  698. package/examples/js/postprocessing/SavePass.js +0 -59
  699. package/examples/js/postprocessing/ShaderPass.js +0 -64
  700. package/examples/js/postprocessing/TAARenderPass.js +0 -130
  701. package/examples/js/postprocessing/TexturePass.js +0 -49
  702. package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
  703. package/examples/js/renderers/CSS2DRenderer.js +0 -178
  704. package/examples/js/renderers/CSS3DRenderer.js +0 -237
  705. package/examples/js/renderers/Projector.js +0 -818
  706. package/examples/js/renderers/SVGRenderer.js +0 -491
  707. package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
  708. package/examples/js/shaders/AfterimageShader.js +0 -60
  709. package/examples/js/shaders/BasicShader.js +0 -27
  710. package/examples/js/shaders/BleachBypassShader.js +0 -62
  711. package/examples/js/shaders/BlendShader.js +0 -54
  712. package/examples/js/shaders/BokehShader.js +0 -156
  713. package/examples/js/shaders/BokehShader2.js +0 -419
  714. package/examples/js/shaders/BrightnessContrastShader.js +0 -58
  715. package/examples/js/shaders/ColorCorrectionShader.js +0 -52
  716. package/examples/js/shaders/ColorifyShader.js +0 -47
  717. package/examples/js/shaders/ConvolutionShader.js +0 -92
  718. package/examples/js/shaders/CopyShader.js +0 -45
  719. package/examples/js/shaders/DOFMipMapShader.js +0 -60
  720. package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
  721. package/examples/js/shaders/DigitalGlitch.js +0 -127
  722. package/examples/js/shaders/DotScreenShader.js +0 -72
  723. package/examples/js/shaders/FXAAShader.js +0 -284
  724. package/examples/js/shaders/FilmShader.js +0 -110
  725. package/examples/js/shaders/FocusShader.js +0 -95
  726. package/examples/js/shaders/FreiChenShader.js +0 -93
  727. package/examples/js/shaders/GammaCorrectionShader.js +0 -41
  728. package/examples/js/shaders/GodRaysShader.js +0 -284
  729. package/examples/js/shaders/HalftoneShader.js +0 -336
  730. package/examples/js/shaders/HorizontalBlurShader.js +0 -59
  731. package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
  732. package/examples/js/shaders/HueSaturationShader.js +0 -69
  733. package/examples/js/shaders/KaleidoShader.js +0 -60
  734. package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
  735. package/examples/js/shaders/LuminosityShader.js +0 -46
  736. package/examples/js/shaders/MMDToonShader.js +0 -96
  737. package/examples/js/shaders/MirrorShader.js +0 -56
  738. package/examples/js/shaders/NormalMapShader.js +0 -55
  739. package/examples/js/shaders/RGBShiftShader.js +0 -56
  740. package/examples/js/shaders/SAOShader.js +0 -209
  741. package/examples/js/shaders/SMAAShader.js +0 -454
  742. package/examples/js/shaders/SSAOShader.js +0 -295
  743. package/examples/js/shaders/SSRShader.js +0 -381
  744. package/examples/js/shaders/SepiaShader.js +0 -52
  745. package/examples/js/shaders/SobelOperatorShader.js +0 -88
  746. package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
  747. package/examples/js/shaders/TechnicolorShader.js +0 -43
  748. package/examples/js/shaders/ToneMapShader.js +0 -84
  749. package/examples/js/shaders/ToonShader.js +0 -335
  750. package/examples/js/shaders/TriangleBlurShader.js +0 -70
  751. package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
  752. package/examples/js/shaders/VelocityShader.js +0 -126
  753. package/examples/js/shaders/VerticalBlurShader.js +0 -59
  754. package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
  755. package/examples/js/shaders/VignetteShader.js +0 -53
  756. package/examples/js/shaders/VolumeShader.js +0 -296
  757. package/examples/js/shaders/WaterRefractionShader.js +0 -84
  758. package/examples/js/textures/FlakesTexture.js +0 -40
  759. package/examples/js/utils/BufferGeometryUtils.js +0 -1160
  760. package/examples/js/utils/CameraUtils.js +0 -71
  761. package/examples/js/utils/GPUStatsPanel.js +0 -125
  762. package/examples/js/utils/GeometryCompressionUtils.js +0 -549
  763. package/examples/js/utils/GeometryUtils.js +0 -168
  764. package/examples/js/utils/LDrawUtils.js +0 -179
  765. package/examples/js/utils/PackedPhongMaterial.js +0 -109
  766. package/examples/js/utils/SceneUtils.js +0 -214
  767. package/examples/js/utils/ShadowMapViewer.js +0 -183
  768. package/examples/js/utils/SkeletonUtils.js +0 -493
  769. package/examples/js/utils/UVsDebug.js +0 -143
  770. package/examples/js/utils/WorkerPool.js +0 -105
  771. package/examples/jsm/exporters/ColladaExporter.js +0 -713
  772. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  773. package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
  774. package/examples/jsm/libs/OimoPhysics/index.js +0 -43
  775. package/examples/jsm/libs/flow.module.js +0 -4552
  776. package/examples/jsm/libs/tween.module.min.js +0 -3
  777. package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
  778. package/examples/jsm/loaders/IFCLoader.js +0 -2431
  779. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  780. package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
  781. package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
  782. package/examples/jsm/node-editor/NodeEditor.js +0 -857
  783. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
  784. package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
  785. package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
  786. package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
  787. package/examples/jsm/node-editor/core/BaseNode.js +0 -96
  788. package/examples/jsm/node-editor/core/DataFile.js +0 -59
  789. package/examples/jsm/node-editor/core/FileEditor.js +0 -20
  790. package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
  791. package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
  792. package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
  793. package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
  794. package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
  795. package/examples/jsm/node-editor/examples/matcap.json +0 -1
  796. package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
  797. package/examples/jsm/node-editor/examples/rim.json +0 -1
  798. package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
  799. package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
  800. package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
  801. package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
  802. package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
  803. package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
  804. package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
  805. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
  806. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
  807. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
  808. package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
  809. package/examples/jsm/node-editor/math/DotEditor.js +0 -35
  810. package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
  811. package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
  812. package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
  813. package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
  814. package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
  815. package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
  816. package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
  817. package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
  818. package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
  819. package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
  820. package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
  821. package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
  822. package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
  823. package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
  824. package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
  825. package/examples/jsm/nodes/core/CodeNode.js +0 -50
  826. package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
  827. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
  828. package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
  829. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
  830. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
  831. package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
  832. package/examples/jsm/objects/LightningStorm.js +0 -245
  833. package/examples/jsm/physics/OimoPhysics.js +0 -231
  834. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
  835. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
  836. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
  837. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  838. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
  839. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  840. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  841. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
  842. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
  843. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  844. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
  845. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
  846. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
  847. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
  848. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  849. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  850. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
  851. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
  852. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  853. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
  854. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
  855. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  856. package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
  857. package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
  858. package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
  859. /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
  860. /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
  861. /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
  862. /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
  863. /package/examples/{js → jsm}/libs/draco/README.md +0 -0
  864. /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
  865. /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  BufferAttribute,
3
3
  ClampToEdgeWrapping,
4
+ Color,
4
5
  DoubleSide,
5
6
  InterpolateDiscrete,
6
7
  InterpolateLinear,
7
- LinearEncoding,
8
+ NoColorSpace,
8
9
  LinearFilter,
9
10
  LinearMipmapLinearFilter,
10
11
  LinearMipmapNearestFilter,
@@ -19,12 +20,48 @@ import {
19
20
  RepeatWrapping,
20
21
  Scene,
21
22
  Source,
22
- sRGBEncoding,
23
+ SRGBColorSpace,
23
24
  CompressedTexture,
24
25
  Vector3
25
26
  } from 'three';
26
27
  import { decompress } from './../utils/TextureUtils.js';
27
28
 
29
+
30
+ /**
31
+ * The KHR_mesh_quantization extension allows these extra attribute component types
32
+ *
33
+ * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes
34
+ */
35
+ const KHR_mesh_quantization_ExtraAttrTypes = {
36
+ POSITION: [
37
+ 'byte',
38
+ 'byte normalized',
39
+ 'unsigned byte',
40
+ 'unsigned byte normalized',
41
+ 'short',
42
+ 'short normalized',
43
+ 'unsigned short',
44
+ 'unsigned short normalized',
45
+ ],
46
+ NORMAL: [
47
+ 'byte normalized',
48
+ 'short normalized',
49
+ ],
50
+ TANGENT: [
51
+ 'byte normalized',
52
+ 'short normalized',
53
+ ],
54
+ TEXCOORD: [
55
+ 'byte',
56
+ 'byte normalized',
57
+ 'unsigned byte',
58
+ 'short',
59
+ 'short normalized',
60
+ 'unsigned short',
61
+ ],
62
+ };
63
+
64
+
28
65
  class GLTFExporter {
29
66
 
30
67
  constructor() {
@@ -55,6 +92,18 @@ class GLTFExporter {
55
92
 
56
93
  } );
57
94
 
95
+ this.register( function ( writer ) {
96
+
97
+ return new GLTFMaterialsIorExtension( writer );
98
+
99
+ } );
100
+
101
+ this.register( function ( writer ) {
102
+
103
+ return new GLTFMaterialsSpecularExtension( writer );
104
+
105
+ } );
106
+
58
107
  this.register( function ( writer ) {
59
108
 
60
109
  return new GLTFMaterialsClearcoatExtension( writer );
@@ -67,6 +116,24 @@ class GLTFExporter {
67
116
 
68
117
  } );
69
118
 
119
+ this.register( function ( writer ) {
120
+
121
+ return new GLTFMaterialsSheenExtension( writer );
122
+
123
+ } );
124
+
125
+ this.register( function ( writer ) {
126
+
127
+ return new GLTFMaterialsAnisotropyExtension( writer );
128
+
129
+ } );
130
+
131
+ this.register( function ( writer ) {
132
+
133
+ return new GLTFMaterialsEmissiveStrengthExtension( writer );
134
+
135
+ } );
136
+
70
137
  }
71
138
 
72
139
  register( callback ) {
@@ -147,8 +214,10 @@ const WEBGL_CONSTANTS = {
147
214
  UNSIGNED_BYTE: 0x1401,
148
215
  SHORT: 0x1402,
149
216
  UNSIGNED_SHORT: 0x1403,
150
- FLOAT: 0x1406,
217
+ INT: 0x1404,
151
218
  UNSIGNED_INT: 0x1405,
219
+ FLOAT: 0x1406,
220
+
152
221
  ARRAY_BUFFER: 0x8892,
153
222
  ELEMENT_ARRAY_BUFFER: 0x8893,
154
223
 
@@ -164,6 +233,8 @@ const WEBGL_CONSTANTS = {
164
233
  REPEAT: 10497
165
234
  };
166
235
 
236
+ const KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';
237
+
167
238
  const THREE_TO_WEBGL = {};
168
239
 
169
240
  THREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;
@@ -184,6 +255,8 @@ const PATH_PROPERTIES = {
184
255
  morphTargetInfluences: 'weights'
185
256
  };
186
257
 
258
+ const DEFAULT_SPECULAR_COLOR = new Color();
259
+
187
260
  // GLB constants
188
261
  // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
189
262
 
@@ -273,6 +346,12 @@ function getMinMax( attribute, start, count ) {
273
346
  else if ( a === 2 ) value = attribute.getZ( i );
274
347
  else if ( a === 3 ) value = attribute.getW( i );
275
348
 
349
+ if ( attribute.normalized === true ) {
350
+
351
+ value = MathUtils.normalize( value, attribute.array );
352
+
353
+ }
354
+
276
355
  }
277
356
 
278
357
  output.min[ a ] = Math.min( output.min[ a ], value );
@@ -394,7 +473,9 @@ class GLTFWriter {
394
473
  this.buffers = [];
395
474
  this.nodeMap = new Map();
396
475
  this.skins = [];
476
+
397
477
  this.extensionsUsed = {};
478
+ this.extensionsRequired = {};
398
479
 
399
480
  this.uids = new Map();
400
481
  this.uid = 0;
@@ -429,9 +510,9 @@ class GLTFWriter {
429
510
  * @param {Function} onDone Callback on completed
430
511
  * @param {Object} options options
431
512
  */
432
- async write( input, onDone, options ) {
513
+ async write( input, onDone, options = {} ) {
433
514
 
434
- this.options = Object.assign( {}, {
515
+ this.options = Object.assign( {
435
516
  // default options
436
517
  binary: false,
437
518
  trs: false,
@@ -456,15 +537,19 @@ class GLTFWriter {
456
537
  const buffers = writer.buffers;
457
538
  const json = writer.json;
458
539
  options = writer.options;
540
+
459
541
  const extensionsUsed = writer.extensionsUsed;
542
+ const extensionsRequired = writer.extensionsRequired;
460
543
 
461
544
  // Merge buffers.
462
545
  const blob = new Blob( buffers, { type: 'application/octet-stream' } );
463
546
 
464
547
  // Declare extensions.
465
548
  const extensionsUsedList = Object.keys( extensionsUsed );
549
+ const extensionsRequiredList = Object.keys( extensionsRequired );
466
550
 
467
551
  if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;
552
+ if ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;
468
553
 
469
554
  // Update bytelength of the single buffer.
470
555
  if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
@@ -539,6 +624,7 @@ class GLTFWriter {
539
624
 
540
625
  }
541
626
 
627
+
542
628
  }
543
629
 
544
630
  /**
@@ -721,11 +807,9 @@ class GLTFWriter {
721
807
 
722
808
  if ( metalnessMap === roughnessMap ) return metalnessMap;
723
809
 
724
- // if ( occlusion === roughness && roughness === metalness ) return material.aoMap;
725
-
726
810
  function getEncodingConversion( map ) {
727
811
 
728
- if ( map.encoding === sRGBEncoding ) {
812
+ if ( map.colorSpace === SRGBColorSpace ) {
729
813
 
730
814
  return function SRGBToLinear( c ) {
731
815
 
@@ -745,27 +829,23 @@ class GLTFWriter {
745
829
 
746
830
  console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
747
831
 
748
- if ( typeof CompressedTexture !== 'undefined' ) {
749
-
750
- if ( metalnessMap instanceof CompressedTexture ) {
751
-
752
- metalnessMap = decompress( metalnessMap );
832
+ if ( metalnessMap instanceof CompressedTexture ) {
753
833
 
754
- }
834
+ metalnessMap = decompress( metalnessMap );
755
835
 
756
- if ( roughnessMap instanceof CompressedTexture ) {
836
+ }
757
837
 
758
- roughnessMap = decompress( roughnessMap );
838
+ if ( roughnessMap instanceof CompressedTexture ) {
759
839
 
760
- }
840
+ roughnessMap = decompress( roughnessMap );
761
841
 
762
842
  }
763
843
 
764
- const metalness = metalnessMap?.image;
765
- const roughness = roughnessMap?.image;
844
+ const metalness = metalnessMap ? metalnessMap.image : null;
845
+ const roughness = roughnessMap ? roughnessMap.image : null;
766
846
 
767
- const width = Math.max( metalness?.width || 0, roughness?.width || 0 );
768
- const height = Math.max( metalness?.height || 0, roughness?.height || 0 );
847
+ const width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );
848
+ const height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );
769
849
 
770
850
  const canvas = getCanvas();
771
851
  canvas.width = width;
@@ -816,7 +896,14 @@ class GLTFWriter {
816
896
  const texture = reference.clone();
817
897
 
818
898
  texture.source = new Source( canvas );
819
- texture.encoding = LinearEncoding;
899
+ texture.colorSpace = NoColorSpace;
900
+ texture.channel = ( metalnessMap || roughnessMap ).channel;
901
+
902
+ if ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {
903
+
904
+ console.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );
905
+
906
+ }
820
907
 
821
908
  return texture;
822
909
 
@@ -860,17 +947,25 @@ class GLTFWriter {
860
947
 
861
948
  let componentSize;
862
949
 
863
- if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE || componentType === WEBGL_CONSTANTS.BYTE ) {
950
+ switch ( componentType ) {
864
951
 
865
- componentSize = 1;
952
+ case WEBGL_CONSTANTS.BYTE:
953
+ case WEBGL_CONSTANTS.UNSIGNED_BYTE:
866
954
 
867
- } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {
955
+ componentSize = 1;
868
956
 
869
- componentSize = 2;
957
+ break;
870
958
 
871
- } else {
959
+ case WEBGL_CONSTANTS.SHORT:
960
+ case WEBGL_CONSTANTS.UNSIGNED_SHORT:
872
961
 
873
- componentSize = 4;
962
+ componentSize = 2;
963
+
964
+ break;
965
+
966
+ default:
967
+
968
+ componentSize = 4;
874
969
 
875
970
  }
876
971
 
@@ -897,31 +992,41 @@ class GLTFWriter {
897
992
  else if ( a === 2 ) value = attribute.getZ( i );
898
993
  else if ( a === 3 ) value = attribute.getW( i );
899
994
 
995
+ if ( attribute.normalized === true ) {
996
+
997
+ value = MathUtils.normalize( value, attribute.array );
998
+
999
+ }
1000
+
900
1001
  }
901
1002
 
902
1003
  if ( componentType === WEBGL_CONSTANTS.FLOAT ) {
903
1004
 
904
1005
  dataView.setFloat32( offset, value, true );
905
1006
 
1007
+ } else if ( componentType === WEBGL_CONSTANTS.INT ) {
1008
+
1009
+ dataView.setInt32( offset, value, true );
1010
+
906
1011
  } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {
907
1012
 
908
1013
  dataView.setUint32( offset, value, true );
909
1014
 
910
- } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {
1015
+ } else if ( componentType === WEBGL_CONSTANTS.SHORT ) {
911
1016
 
912
- dataView.setUint16( offset, value, true );
1017
+ dataView.setInt16( offset, value, true );
913
1018
 
914
- } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {
1019
+ } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {
915
1020
 
916
- dataView.setUint8( offset, value );
1021
+ dataView.setUint16( offset, value, true );
917
1022
 
918
1023
  } else if ( componentType === WEBGL_CONSTANTS.BYTE ) {
919
1024
 
920
1025
  dataView.setInt8( offset, value );
921
1026
 
922
- } else if ( componentType === WEBGL_CONSTANTS.SHORT ) {
1027
+ } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {
923
1028
 
924
- dataView.setInt16( offset, value );
1029
+ dataView.setUint8( offset, value );
925
1030
 
926
1031
  }
927
1032
 
@@ -1017,40 +1122,45 @@ class GLTFWriter {
1017
1122
  2: 'VEC2',
1018
1123
  3: 'VEC3',
1019
1124
  4: 'VEC4',
1125
+ 9: 'MAT3',
1020
1126
  16: 'MAT4'
1021
1127
 
1022
1128
  };
1023
1129
 
1024
1130
  let componentType;
1025
1131
 
1026
- // Detect the component type of the attribute array (float, uint or ushort)
1132
+ // Detect the component type of the attribute array
1027
1133
  if ( attribute.array.constructor === Float32Array ) {
1028
1134
 
1029
1135
  componentType = WEBGL_CONSTANTS.FLOAT;
1030
1136
 
1137
+ } else if ( attribute.array.constructor === Int32Array ) {
1138
+
1139
+ componentType = WEBGL_CONSTANTS.INT;
1140
+
1031
1141
  } else if ( attribute.array.constructor === Uint32Array ) {
1032
1142
 
1033
1143
  componentType = WEBGL_CONSTANTS.UNSIGNED_INT;
1034
1144
 
1035
- } else if ( attribute.array.constructor === Uint16Array ) {
1145
+ } else if ( attribute.array.constructor === Int16Array ) {
1036
1146
 
1037
- componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;
1147
+ componentType = WEBGL_CONSTANTS.SHORT;
1038
1148
 
1039
- } else if ( attribute.array.constructor === Uint8Array ) {
1149
+ } else if ( attribute.array.constructor === Uint16Array ) {
1040
1150
 
1041
- componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
1151
+ componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;
1042
1152
 
1043
1153
  } else if ( attribute.array.constructor === Int8Array ) {
1044
1154
 
1045
1155
  componentType = WEBGL_CONSTANTS.BYTE;
1046
1156
 
1047
- } else if ( attribute.array.constructor === Int16Array ) {
1157
+ } else if ( attribute.array.constructor === Uint8Array ) {
1048
1158
 
1049
- componentType = WEBGL_CONSTANTS.SHORT;
1159
+ componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
1050
1160
 
1051
1161
  } else {
1052
1162
 
1053
- throw new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor );
1163
+ throw new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor.name );
1054
1164
 
1055
1165
  }
1056
1166
 
@@ -1102,55 +1212,45 @@ class GLTFWriter {
1102
1212
  */
1103
1213
  processImage( image, format, flipY, mimeType = 'image/png' ) {
1104
1214
 
1105
- const writer = this;
1106
- const cache = writer.cache;
1107
- const json = writer.json;
1108
- const options = writer.options;
1109
- const pending = writer.pending;
1215
+ if ( image !== null ) {
1110
1216
 
1111
- if ( ! cache.images.has( image ) ) cache.images.set( image, {} );
1217
+ const writer = this;
1218
+ const cache = writer.cache;
1219
+ const json = writer.json;
1220
+ const options = writer.options;
1221
+ const pending = writer.pending;
1112
1222
 
1113
- const cachedImages = cache.images.get( image );
1223
+ if ( ! cache.images.has( image ) ) cache.images.set( image, {} );
1114
1224
 
1115
- const key = mimeType + ':flipY/' + flipY.toString();
1225
+ const cachedImages = cache.images.get( image );
1116
1226
 
1117
- if ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];
1227
+ const key = mimeType + ':flipY/' + flipY.toString();
1118
1228
 
1119
- if ( ! json.images ) json.images = [];
1229
+ if ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];
1120
1230
 
1121
- const imageDef = { mimeType: mimeType };
1231
+ if ( ! json.images ) json.images = [];
1122
1232
 
1123
- const canvas = getCanvas();
1233
+ const imageDef = { mimeType: mimeType };
1124
1234
 
1125
- canvas.width = Math.min( image.width, options.maxTextureSize );
1126
- canvas.height = Math.min( image.height, options.maxTextureSize );
1235
+ const canvas = getCanvas();
1127
1236
 
1128
- const ctx = canvas.getContext( '2d' );
1237
+ canvas.width = Math.min( image.width, options.maxTextureSize );
1238
+ canvas.height = Math.min( image.height, options.maxTextureSize );
1129
1239
 
1130
- if ( flipY === true ) {
1240
+ const ctx = canvas.getContext( '2d' );
1131
1241
 
1132
- ctx.translate( 0, canvas.height );
1133
- ctx.scale( 1, - 1 );
1242
+ if ( flipY === true ) {
1134
1243
 
1135
- }
1136
-
1137
- if ( image.data !== undefined ) { // THREE.DataTexture
1138
-
1139
- if ( format !== RGBAFormat ) {
1140
-
1141
- console.error( 'GLTFExporter: Only RGBAFormat is supported.' );
1244
+ ctx.translate( 0, canvas.height );
1245
+ ctx.scale( 1, - 1 );
1142
1246
 
1143
1247
  }
1144
1248
 
1145
- if ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {
1146
-
1147
- ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
1148
-
1149
- } else {
1249
+ if ( image.data !== undefined ) { // THREE.DataTexture
1150
1250
 
1151
1251
  if ( format !== RGBAFormat ) {
1152
1252
 
1153
- console.error( 'GLTFExporter: Only RGBAFormat is supported.', image );
1253
+ console.error( 'GLTFExporter: Only RGBAFormat is supported.', format );
1154
1254
 
1155
1255
  }
1156
1256
 
@@ -1173,69 +1273,60 @@ class GLTFWriter {
1173
1273
 
1174
1274
  ctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );
1175
1275
 
1176
- }
1177
-
1178
- const data = new Uint8ClampedArray( image.height * image.width * 4 );
1179
-
1180
- for ( let i = 0; i < data.length; i += 4 ) {
1276
+ } else {
1181
1277
 
1182
- data[ i + 0 ] = image.data[ i + 0 ];
1183
- data[ i + 1 ] = image.data[ i + 1 ];
1184
- data[ i + 2 ] = image.data[ i + 2 ];
1185
- data[ i + 3 ] = image.data[ i + 3 ];
1278
+ ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
1186
1279
 
1187
1280
  }
1188
1281
 
1189
- ctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );
1282
+ if ( options.binary === true ) {
1190
1283
 
1191
- } else {
1284
+ pending.push(
1192
1285
 
1193
- ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
1286
+ getToBlobPromise( canvas, mimeType )
1287
+ .then( blob => writer.processBufferViewImage( blob ) )
1288
+ .then( bufferViewIndex => {
1194
1289
 
1195
- }
1290
+ imageDef.bufferView = bufferViewIndex;
1196
1291
 
1197
- if ( options.binary === true ) {
1292
+ } )
1198
1293
 
1199
- pending.push(
1294
+ );
1200
1295
 
1201
- getToBlobPromise( canvas, mimeType )
1202
- .then( blob => writer.processBufferViewImage( blob ) )
1203
- .then( bufferViewIndex => {
1296
+ } else {
1204
1297
 
1205
- imageDef.bufferView = bufferViewIndex;
1298
+ if ( canvas.toDataURL !== undefined ) {
1206
1299
 
1207
- } )
1300
+ imageDef.uri = canvas.toDataURL( mimeType );
1208
1301
 
1209
- );
1302
+ } else {
1210
1303
 
1211
- } else {
1304
+ pending.push(
1212
1305
 
1213
- if ( canvas.toDataURL !== undefined ) {
1306
+ getToBlobPromise( canvas, mimeType )
1307
+ .then( blob => new FileReader().readAsDataURL( blob ) )
1308
+ .then( dataURL => {
1214
1309
 
1215
- imageDef.uri = canvas.toDataURL( mimeType );
1310
+ imageDef.uri = dataURL;
1216
1311
 
1217
- } else {
1312
+ } )
1218
1313
 
1219
- pending.push(
1314
+ );
1220
1315
 
1221
- getToBlobPromise( canvas, mimeType )
1222
- .then( blob => new FileReader().readAsDataURL( blob ) )
1223
- .then( dataURL => {
1316
+ }
1224
1317
 
1225
- imageDef.uri = dataURL;
1318
+ }
1226
1319
 
1227
- } )
1320
+ const index = json.images.push( imageDef ) - 1;
1321
+ cachedImages[ key ] = index;
1322
+ return index;
1228
1323
 
1229
- );
1324
+ } else {
1230
1325
 
1231
- }
1326
+ throw new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );
1232
1327
 
1233
1328
  }
1234
1329
 
1235
- const index = json.images.push( imageDef ) - 1;
1236
- cachedImages[ key ] = index;
1237
- return index;
1238
-
1239
1330
  }
1240
1331
 
1241
1332
  /**
@@ -1276,32 +1367,27 @@ class GLTFWriter {
1276
1367
 
1277
1368
  if ( ! json.textures ) json.textures = [];
1278
1369
 
1279
-
1280
- let modifiedMap = map;
1281
-
1282
1370
  // make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture
1283
- if ( typeof CompressedTexture !== 'undefined' && map instanceof CompressedTexture ) {
1371
+ if ( map instanceof CompressedTexture ) {
1284
1372
 
1285
- modifiedMap = decompress( map, options.maxTextureSize );
1286
- // remove from cache, as the underlaying canvas is always the same between decompressed textures
1287
- cache.images.delete( modifiedMap.image );
1373
+ map = decompress( map, options.maxTextureSize );
1288
1374
 
1289
1375
  }
1290
1376
 
1291
- let mimeType = modifiedMap.userData.mimeType;
1377
+ let mimeType = map.userData.mimeType;
1292
1378
 
1293
1379
  if ( mimeType === 'image/webp' ) mimeType = 'image/png';
1294
1380
 
1295
1381
  const textureDef = {
1296
1382
  sampler: this.processSampler( map ),
1297
- source: this.processImage( modifiedMap.image, modifiedMap.format, modifiedMap.flipY, mimeType )
1383
+ source: this.processImage( map.image, map.format, map.flipY, mimeType )
1298
1384
  };
1299
1385
 
1300
1386
  if ( map.name ) textureDef.name = map.name;
1301
1387
 
1302
1388
  this._invokeAll( function ( ext ) {
1303
1389
 
1304
- ext.writeTexture && ext.writeTexture( modifiedMap, textureDef );
1390
+ ext.writeTexture && ext.writeTexture( map, textureDef );
1305
1391
 
1306
1392
  } );
1307
1393
 
@@ -1369,16 +1455,22 @@ class GLTFWriter {
1369
1455
 
1370
1456
  const metalRoughTexture = this.buildMetalRoughTexture( metalnessMap, roughnessMap );
1371
1457
 
1372
- const metalRoughMapDef = { index: this.processTexture( metalRoughTexture ) };
1458
+ const metalRoughMapDef = {
1459
+ index: this.processTexture( metalRoughTexture ),
1460
+ channel: metalRoughTexture.channel
1461
+ };
1373
1462
  this.applyTextureTransform( metalRoughMapDef, metalRoughTexture );
1374
1463
  materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
1375
1464
 
1376
1465
  }
1377
1466
 
1378
- // pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture
1379
- if ( material.map?.image ) {
1467
+ // pbrMetallicRoughness.baseColorTexture
1468
+ if ( material.map ) {
1380
1469
 
1381
- const baseColorMapDef = { index: this.processTexture( material.map ) };
1470
+ const baseColorMapDef = {
1471
+ index: this.processTexture( material.map ),
1472
+ texCoord: material.map.channel
1473
+ };
1382
1474
  this.applyTextureTransform( baseColorMapDef, material.map );
1383
1475
  materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;
1384
1476
 
@@ -1386,28 +1478,22 @@ class GLTFWriter {
1386
1478
 
1387
1479
  if ( material.emissive ) {
1388
1480
 
1389
- // note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.
1390
- const emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );
1481
+ const emissive = material.emissive;
1391
1482
  const maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );
1392
1483
 
1393
- if ( maxEmissiveComponent > 1 ) {
1394
-
1395
- emissive.multiplyScalar( 1 / maxEmissiveComponent );
1396
-
1397
- console.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );
1398
-
1399
- }
1400
-
1401
1484
  if ( maxEmissiveComponent > 0 ) {
1402
1485
 
1403
- materialDef.emissiveFactor = emissive.toArray();
1486
+ materialDef.emissiveFactor = material.emissive.toArray();
1404
1487
 
1405
1488
  }
1406
1489
 
1407
1490
  // emissiveTexture
1408
1491
  if ( material.emissiveMap?.image ) {
1409
1492
 
1410
- const emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };
1493
+ const emissiveMapDef = {
1494
+ index: this.processTexture( material.emissiveMap ),
1495
+ texCoord: material.emissiveMap.channel
1496
+ };
1411
1497
  this.applyTextureTransform( emissiveMapDef, material.emissiveMap );
1412
1498
  materialDef.emissiveTexture = emissiveMapDef;
1413
1499
 
@@ -1418,7 +1504,10 @@ class GLTFWriter {
1418
1504
  // normalTexture
1419
1505
  if ( material.normalMap?.image ) {
1420
1506
 
1421
- const normalMapDef = { index: this.processTexture( material.normalMap ) };
1507
+ const normalMapDef = {
1508
+ index: this.processTexture( material.normalMap ),
1509
+ texCoord: material.normalMap.channel
1510
+ };
1422
1511
 
1423
1512
  if ( material.normalScale && material.normalScale.x !== 1 ) {
1424
1513
 
@@ -1438,7 +1527,7 @@ class GLTFWriter {
1438
1527
 
1439
1528
  const occlusionMapDef = {
1440
1529
  index: this.processTexture( material.aoMap ),
1441
- texCoord: 1
1530
+ texCoord: material.aoMap.channel
1442
1531
  };
1443
1532
 
1444
1533
  if ( material.aoMapIntensity !== 1.0 ) {
@@ -1551,7 +1640,7 @@ class GLTFWriter {
1551
1640
  // Conversion between attributes names in threejs and gltf spec
1552
1641
  const nameConversion = {
1553
1642
  uv: 'TEXCOORD_0',
1554
- uv2: 'TEXCOORD_1',
1643
+ uv1: 'TEXCOORD_1',
1555
1644
  color: 'COLOR_0',
1556
1645
  skinWeight: 'WEIGHTS_0',
1557
1646
  skinIndex: 'JOINTS_0'
@@ -1610,6 +1699,12 @@ class GLTFWriter {
1610
1699
 
1611
1700
  if ( accessor !== null ) {
1612
1701
 
1702
+ if ( ! attributeName.startsWith( '_' ) ) {
1703
+
1704
+ this.detectMeshQuantization( attributeName, attribute );
1705
+
1706
+ }
1707
+
1613
1708
  attributes[ attributeName ] = accessor;
1614
1709
  cache.attributes.set( this.getUID( attribute ), accessor );
1615
1710
 
@@ -1686,12 +1781,14 @@ class GLTFWriter {
1686
1781
 
1687
1782
  for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {
1688
1783
 
1689
- relativeAttribute.setXYZ(
1690
- j,
1691
- attribute.getX( j ) - baseAttribute.getX( j ),
1692
- attribute.getY( j ) - baseAttribute.getY( j ),
1693
- attribute.getZ( j ) - baseAttribute.getZ( j )
1694
- );
1784
+ for ( let a = 0; a < attribute.itemSize; a ++ ) {
1785
+
1786
+ if ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );
1787
+ if ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );
1788
+ if ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );
1789
+ if ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );
1790
+
1791
+ }
1695
1792
 
1696
1793
  }
1697
1794
 
@@ -1788,6 +1885,68 @@ class GLTFWriter {
1788
1885
 
1789
1886
  }
1790
1887
 
1888
+ /**
1889
+ * If a vertex attribute with a
1890
+ * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)
1891
+ * is used, it is checked whether it is a valid data type according to the
1892
+ * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)
1893
+ * extension.
1894
+ * In this case the extension is automatically added to the list of used extensions.
1895
+ *
1896
+ * @param {string} attributeName
1897
+ * @param {THREE.BufferAttribute} attribute
1898
+ */
1899
+ detectMeshQuantization( attributeName, attribute ) {
1900
+
1901
+ if ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;
1902
+
1903
+ let attrType = undefined;
1904
+
1905
+ switch ( attribute.array.constructor ) {
1906
+
1907
+ case Int8Array:
1908
+
1909
+ attrType = 'byte';
1910
+
1911
+ break;
1912
+
1913
+ case Uint8Array:
1914
+
1915
+ attrType = 'unsigned byte';
1916
+
1917
+ break;
1918
+
1919
+ case Int16Array:
1920
+
1921
+ attrType = 'short';
1922
+
1923
+ break;
1924
+
1925
+ case Uint16Array:
1926
+
1927
+ attrType = 'unsigned short';
1928
+
1929
+ break;
1930
+
1931
+ default:
1932
+
1933
+ return;
1934
+
1935
+ }
1936
+
1937
+ if ( attribute.normalized ) attrType += ' normalized';
1938
+
1939
+ const attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];
1940
+
1941
+ if ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {
1942
+
1943
+ this.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;
1944
+ this.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;
1945
+
1946
+ }
1947
+
1948
+ }
1949
+
1791
1950
  /**
1792
1951
  * Process camera
1793
1952
  * @param {THREE.Camera} camera Camera to process
@@ -2371,7 +2530,7 @@ class GLTFMaterialsClearcoatExtension {
2371
2530
 
2372
2531
  writeMaterial( material, materialDef ) {
2373
2532
 
2374
- if ( ! material.isMeshPhysicalMaterial ) return;
2533
+ if ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;
2375
2534
 
2376
2535
  const writer = this.writer;
2377
2536
  const extensionsUsed = writer.extensionsUsed;
@@ -2382,7 +2541,10 @@ class GLTFMaterialsClearcoatExtension {
2382
2541
 
2383
2542
  if ( material.clearcoatMap ) {
2384
2543
 
2385
- const clearcoatMapDef = { index: writer.processTexture( material.clearcoatMap ) };
2544
+ const clearcoatMapDef = {
2545
+ index: writer.processTexture( material.clearcoatMap ),
2546
+ texCoord: material.clearcoatMap.channel
2547
+ };
2386
2548
  writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
2387
2549
  extensionDef.clearcoatTexture = clearcoatMapDef;
2388
2550
 
@@ -2392,7 +2554,10 @@ class GLTFMaterialsClearcoatExtension {
2392
2554
 
2393
2555
  if ( material.clearcoatRoughnessMap ) {
2394
2556
 
2395
- const clearcoatRoughnessMapDef = { index: writer.processTexture( material.clearcoatRoughnessMap ) };
2557
+ const clearcoatRoughnessMapDef = {
2558
+ index: writer.processTexture( material.clearcoatRoughnessMap ),
2559
+ texCoord: material.clearcoatRoughnessMap.channel
2560
+ };
2396
2561
  writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
2397
2562
  extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;
2398
2563
 
@@ -2400,7 +2565,10 @@ class GLTFMaterialsClearcoatExtension {
2400
2565
 
2401
2566
  if ( material.clearcoatNormalMap ) {
2402
2567
 
2403
- const clearcoatNormalMapDef = { index: writer.processTexture( material.clearcoatNormalMap ) };
2568
+ const clearcoatNormalMapDef = {
2569
+ index: writer.processTexture( material.clearcoatNormalMap ),
2570
+ texCoord: material.clearcoatNormalMap.channel
2571
+ };
2404
2572
  writer.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );
2405
2573
  extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;
2406
2574
 
@@ -2432,7 +2600,7 @@ class GLTFMaterialsIridescenceExtension {
2432
2600
 
2433
2601
  writeMaterial( material, materialDef ) {
2434
2602
 
2435
- if ( ! material.isMeshPhysicalMaterial ) return;
2603
+ if ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;
2436
2604
 
2437
2605
  const writer = this.writer;
2438
2606
  const extensionsUsed = writer.extensionsUsed;
@@ -2443,7 +2611,10 @@ class GLTFMaterialsIridescenceExtension {
2443
2611
 
2444
2612
  if ( material.iridescenceMap ) {
2445
2613
 
2446
- const iridescenceMapDef = { index: writer.processTexture( material.iridescenceMap ) };
2614
+ const iridescenceMapDef = {
2615
+ index: writer.processTexture( material.iridescenceMap ),
2616
+ texCoord: material.iridescenceMap.channel
2617
+ };
2447
2618
  writer.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );
2448
2619
  extensionDef.iridescenceTexture = iridescenceMapDef;
2449
2620
 
@@ -2455,7 +2626,10 @@ class GLTFMaterialsIridescenceExtension {
2455
2626
 
2456
2627
  if ( material.iridescenceThicknessMap ) {
2457
2628
 
2458
- const iridescenceThicknessMapDef = { index: writer.processTexture( material.iridescenceThicknessMap ) };
2629
+ const iridescenceThicknessMapDef = {
2630
+ index: writer.processTexture( material.iridescenceThicknessMap ),
2631
+ texCoord: material.iridescenceThicknessMap.channel
2632
+ };
2459
2633
  writer.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );
2460
2634
  extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;
2461
2635
 
@@ -2497,7 +2671,10 @@ class GLTFMaterialsTransmissionExtension {
2497
2671
 
2498
2672
  if ( material.transmissionMap ) {
2499
2673
 
2500
- const transmissionMapDef = { index: writer.processTexture( material.transmissionMap ) };
2674
+ const transmissionMapDef = {
2675
+ index: writer.processTexture( material.transmissionMap ),
2676
+ texCoord: material.transmissionMap.channel
2677
+ };
2501
2678
  writer.applyTextureTransform( transmissionMapDef, material.transmissionMap );
2502
2679
  extensionDef.transmissionTexture = transmissionMapDef;
2503
2680
 
@@ -2539,7 +2716,10 @@ class GLTFMaterialsVolumeExtension {
2539
2716
 
2540
2717
  if ( material.thicknessMap ) {
2541
2718
 
2542
- const thicknessMapDef = { index: writer.processTexture( material.thicknessMap ) };
2719
+ const thicknessMapDef = {
2720
+ index: writer.processTexture( material.thicknessMap ),
2721
+ texCoord: material.thicknessMap.channel
2722
+ };
2543
2723
  writer.applyTextureTransform( thicknessMapDef, material.thicknessMap );
2544
2724
  extensionDef.thicknessTexture = thicknessMapDef;
2545
2725
 
@@ -2557,6 +2737,233 @@ class GLTFMaterialsVolumeExtension {
2557
2737
 
2558
2738
  }
2559
2739
 
2740
+ /**
2741
+ * Materials ior Extension
2742
+ *
2743
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior
2744
+ */
2745
+ class GLTFMaterialsIorExtension {
2746
+
2747
+ constructor( writer ) {
2748
+
2749
+ this.writer = writer;
2750
+ this.name = 'KHR_materials_ior';
2751
+
2752
+ }
2753
+
2754
+ writeMaterial( material, materialDef ) {
2755
+
2756
+ if ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;
2757
+
2758
+ const writer = this.writer;
2759
+ const extensionsUsed = writer.extensionsUsed;
2760
+
2761
+ const extensionDef = {};
2762
+
2763
+ extensionDef.ior = material.ior;
2764
+
2765
+ materialDef.extensions = materialDef.extensions || {};
2766
+ materialDef.extensions[ this.name ] = extensionDef;
2767
+
2768
+ extensionsUsed[ this.name ] = true;
2769
+
2770
+ }
2771
+
2772
+ }
2773
+
2774
+ /**
2775
+ * Materials specular Extension
2776
+ *
2777
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular
2778
+ */
2779
+ class GLTFMaterialsSpecularExtension {
2780
+
2781
+ constructor( writer ) {
2782
+
2783
+ this.writer = writer;
2784
+ this.name = 'KHR_materials_specular';
2785
+
2786
+ }
2787
+
2788
+ writeMaterial( material, materialDef ) {
2789
+
2790
+ if ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&
2791
+ material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&
2792
+ ! material.specularIntensityMap && ! material.specularColorTexture ) ) return;
2793
+
2794
+ const writer = this.writer;
2795
+ const extensionsUsed = writer.extensionsUsed;
2796
+
2797
+ const extensionDef = {};
2798
+
2799
+ if ( material.specularIntensityMap ) {
2800
+
2801
+ const specularIntensityMapDef = {
2802
+ index: writer.processTexture( material.specularIntensityMap ),
2803
+ texCoord: material.specularIntensityMap.channel
2804
+ };
2805
+ writer.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );
2806
+ extensionDef.specularTexture = specularIntensityMapDef;
2807
+
2808
+ }
2809
+
2810
+ if ( material.specularColorMap ) {
2811
+
2812
+ const specularColorMapDef = {
2813
+ index: writer.processTexture( material.specularColorMap ),
2814
+ texCoord: material.specularColorMap.channel
2815
+ };
2816
+ writer.applyTextureTransform( specularColorMapDef, material.specularColorMap );
2817
+ extensionDef.specularColorTexture = specularColorMapDef;
2818
+
2819
+ }
2820
+
2821
+ extensionDef.specularFactor = material.specularIntensity;
2822
+ extensionDef.specularColorFactor = material.specularColor.toArray();
2823
+
2824
+ materialDef.extensions = materialDef.extensions || {};
2825
+ materialDef.extensions[ this.name ] = extensionDef;
2826
+
2827
+ extensionsUsed[ this.name ] = true;
2828
+
2829
+ }
2830
+
2831
+ }
2832
+
2833
+ /**
2834
+ * Sheen Materials Extension
2835
+ *
2836
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
2837
+ */
2838
+ class GLTFMaterialsSheenExtension {
2839
+
2840
+ constructor( writer ) {
2841
+
2842
+ this.writer = writer;
2843
+ this.name = 'KHR_materials_sheen';
2844
+
2845
+ }
2846
+
2847
+ writeMaterial( material, materialDef ) {
2848
+
2849
+ if ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;
2850
+
2851
+ const writer = this.writer;
2852
+ const extensionsUsed = writer.extensionsUsed;
2853
+
2854
+ const extensionDef = {};
2855
+
2856
+ if ( material.sheenRoughnessMap ) {
2857
+
2858
+ const sheenRoughnessMapDef = {
2859
+ index: writer.processTexture( material.sheenRoughnessMap ),
2860
+ texCoord: material.sheenRoughnessMap.channel
2861
+ };
2862
+ writer.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );
2863
+ extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;
2864
+
2865
+ }
2866
+
2867
+ if ( material.sheenColorMap ) {
2868
+
2869
+ const sheenColorMapDef = {
2870
+ index: writer.processTexture( material.sheenColorMap ),
2871
+ texCoord: material.sheenColorMap.channel
2872
+ };
2873
+ writer.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );
2874
+ extensionDef.sheenColorTexture = sheenColorMapDef;
2875
+
2876
+ }
2877
+
2878
+ extensionDef.sheenRoughnessFactor = material.sheenRoughness;
2879
+ extensionDef.sheenColorFactor = material.sheenColor.toArray();
2880
+
2881
+ materialDef.extensions = materialDef.extensions || {};
2882
+ materialDef.extensions[ this.name ] = extensionDef;
2883
+
2884
+ extensionsUsed[ this.name ] = true;
2885
+
2886
+ }
2887
+
2888
+ }
2889
+
2890
+ /**
2891
+ * Anisotropy Materials Extension
2892
+ *
2893
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy
2894
+ */
2895
+ class GLTFMaterialsAnisotropyExtension {
2896
+
2897
+ constructor( writer ) {
2898
+
2899
+ this.writer = writer;
2900
+ this.name = 'KHR_materials_anisotropy';
2901
+
2902
+ }
2903
+
2904
+ writeMaterial( material, materialDef ) {
2905
+
2906
+ if ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;
2907
+
2908
+ const writer = this.writer;
2909
+ const extensionsUsed = writer.extensionsUsed;
2910
+
2911
+ const extensionDef = {};
2912
+
2913
+ if ( material.anisotropyMap ) {
2914
+
2915
+ const anisotropyMapDef = { index: writer.processTexture( material.anisotropyMap ) };
2916
+ writer.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );
2917
+ extensionDef.anisotropyTexture = anisotropyMapDef;
2918
+
2919
+ }
2920
+
2921
+ extensionDef.anisotropyStrength = material.anisotropy;
2922
+ extensionDef.anisotropyRotation = material.anisotropyRotation;
2923
+
2924
+ materialDef.extensions = materialDef.extensions || {};
2925
+ materialDef.extensions[ this.name ] = extensionDef;
2926
+
2927
+ extensionsUsed[ this.name ] = true;
2928
+
2929
+ }
2930
+
2931
+ }
2932
+
2933
+ /**
2934
+ * Materials Emissive Strength Extension
2935
+ *
2936
+ * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md
2937
+ */
2938
+ class GLTFMaterialsEmissiveStrengthExtension {
2939
+
2940
+ constructor( writer ) {
2941
+
2942
+ this.writer = writer;
2943
+ this.name = 'KHR_materials_emissive_strength';
2944
+
2945
+ }
2946
+
2947
+ writeMaterial( material, materialDef ) {
2948
+
2949
+ if ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;
2950
+
2951
+ const writer = this.writer;
2952
+ const extensionsUsed = writer.extensionsUsed;
2953
+
2954
+ const extensionDef = {};
2955
+
2956
+ extensionDef.emissiveStrength = material.emissiveIntensity;
2957
+
2958
+ materialDef.extensions = materialDef.extensions || {};
2959
+ materialDef.extensions[ this.name ] = extensionDef;
2960
+
2961
+ extensionsUsed[ this.name ] = true;
2962
+
2963
+ }
2964
+
2965
+ }
2966
+
2560
2967
  /**
2561
2968
  * Static utility functions
2562
2969
  */