super-three 0.147.1 → 0.154.0

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