super-three 0.147.1 → 0.152.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 (757) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +36410 -21120
  3. package/build/three.js +36999 -21708
  4. package/build/three.min.js +3 -2
  5. package/build/three.module.js +6386 -5509
  6. package/build/three.module.min.js +6 -0
  7. package/examples/jsm/animation/AnimationClipCreator.js +5 -3
  8. package/examples/jsm/capabilities/WebGPU.js +2 -4
  9. package/examples/jsm/controls/ArcballControls.js +1828 -1821
  10. package/examples/jsm/controls/MapControls.js +28 -0
  11. package/examples/jsm/controls/OrbitControls.js +20 -45
  12. package/examples/jsm/controls/PointerLockControls.js +70 -65
  13. package/examples/jsm/controls/TrackballControls.js +18 -4
  14. package/examples/jsm/controls/TransformControls.js +0 -1
  15. package/examples/jsm/csm/CSM.js +11 -3
  16. package/examples/jsm/csm/CSMShader.js +7 -6
  17. package/examples/jsm/effects/AsciiEffect.js +3 -6
  18. package/examples/jsm/effects/OutlineEffect.js +1 -15
  19. package/examples/jsm/exporters/ColladaExporter.js +26 -14
  20. package/examples/jsm/exporters/DRACOExporter.js +53 -11
  21. package/examples/jsm/exporters/EXRExporter.js +3 -9
  22. package/examples/jsm/exporters/GLTFExporter.js +524 -111
  23. package/examples/jsm/exporters/KTX2Exporter.js +34 -23
  24. package/examples/jsm/exporters/MMDExporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +8 -1
  26. package/examples/jsm/exporters/STLExporter.js +8 -4
  27. package/examples/jsm/exporters/USDZExporter.js +22 -3
  28. package/examples/jsm/geometries/ConvexGeometry.js +0 -6
  29. package/examples/jsm/geometries/ParametricGeometry.js +10 -0
  30. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  31. package/examples/jsm/helpers/ViewHelper.js +70 -56
  32. package/examples/jsm/interactive/HTMLMesh.js +16 -3
  33. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  34. package/examples/{js → jsm}/libs/basis/README.md +4 -4
  35. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  36. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  37. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  38. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  39. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  40. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  41. package/examples/jsm/libs/lil-gui.module.min.js +2 -2
  42. package/examples/jsm/libs/tween.module.js +803 -0
  43. package/examples/jsm/lights/IESSpotLight.js +25 -0
  44. package/examples/jsm/lights/LightProbeGenerator.js +11 -9
  45. package/examples/jsm/lines/LineSegments2.js +12 -10
  46. package/examples/jsm/loaders/3DMLoader.js +8 -5
  47. package/examples/jsm/loaders/3MFLoader.js +12 -11
  48. package/examples/jsm/loaders/AMFLoader.js +2 -3
  49. package/examples/jsm/loaders/BVHLoader.js +2 -2
  50. package/examples/jsm/loaders/ColladaLoader.js +15 -16
  51. package/examples/jsm/loaders/DRACOLoader.js +67 -18
  52. package/examples/jsm/loaders/EXRLoader.js +23 -24
  53. package/examples/jsm/loaders/FBXLoader.js +32 -50
  54. package/examples/jsm/loaders/GCodeLoader.js +1 -2
  55. package/examples/jsm/loaders/GLTFLoader.js +249 -215
  56. package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
  57. package/examples/jsm/loaders/IESLoader.js +337 -0
  58. package/examples/jsm/loaders/KMZLoader.js +4 -4
  59. package/examples/jsm/loaders/KTX2Loader.js +41 -24
  60. package/examples/jsm/loaders/LDrawLoader.js +20 -18
  61. package/examples/jsm/loaders/LWOLoader.js +12 -29
  62. package/examples/jsm/loaders/LottieLoader.js +3 -1
  63. package/examples/jsm/loaders/MMDLoader.js +17 -13
  64. package/examples/jsm/loaders/MTLLoader.js +2 -2
  65. package/examples/jsm/loaders/MaterialXLoader.js +9 -3
  66. package/examples/jsm/loaders/NRRDLoader.js +33 -5
  67. package/examples/jsm/loaders/OBJLoader.js +1 -1
  68. package/examples/jsm/loaders/PCDLoader.js +1 -2
  69. package/examples/jsm/loaders/PLYLoader.js +238 -105
  70. package/examples/jsm/loaders/RGBELoader.js +3 -3
  71. package/examples/jsm/loaders/STLLoader.js +1 -2
  72. package/examples/jsm/loaders/SVGLoader.js +36 -27
  73. package/examples/jsm/loaders/TTFLoader.js +1 -8
  74. package/examples/jsm/loaders/TiltLoader.js +13 -7
  75. package/examples/jsm/loaders/USDZLoader.js +5 -5
  76. package/examples/jsm/loaders/VOXLoader.js +8 -2
  77. package/examples/jsm/loaders/VRMLLoader.js +5 -13
  78. package/examples/jsm/loaders/VTKLoader.js +7 -6
  79. package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
  80. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -3
  81. package/examples/jsm/math/MeshSurfaceSampler.js +0 -6
  82. package/examples/jsm/misc/ConvexObjectBreaker.js +2 -8
  83. package/examples/jsm/misc/GPUComputationRenderer.js +5 -5
  84. package/examples/jsm/misc/MD2Character.js +2 -2
  85. package/examples/jsm/misc/MD2CharacterComplex.js +2 -2
  86. package/examples/jsm/misc/ProgressiveLightMap.js +12 -10
  87. package/examples/jsm/misc/RollerCoaster.js +7 -1
  88. package/examples/jsm/misc/Volume.js +20 -5
  89. package/examples/jsm/modifiers/CurveModifier.js +1 -0
  90. package/examples/jsm/modifiers/TessellateModifier.js +19 -19
  91. package/examples/jsm/nodes/Nodes.js +143 -335
  92. package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
  93. package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
  94. package/examples/jsm/nodes/accessors/CameraNode.js +12 -2
  95. package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
  96. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +58 -0
  97. package/examples/jsm/nodes/accessors/InstanceNode.js +17 -21
  98. package/examples/jsm/nodes/accessors/MaterialNode.js +155 -38
  99. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
  100. package/examples/jsm/nodes/accessors/ModelNode.js +11 -0
  101. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -8
  102. package/examples/jsm/nodes/accessors/NormalNode.js +35 -19
  103. package/examples/jsm/nodes/accessors/Object3DNode.js +32 -12
  104. package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
  105. package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
  106. package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
  107. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
  108. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -40
  109. package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
  110. package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
  111. package/examples/jsm/nodes/accessors/TextureNode.js +80 -12
  112. package/examples/jsm/nodes/accessors/UVNode.js +6 -0
  113. package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
  114. package/examples/jsm/nodes/{core → code}/CodeNode.js +27 -2
  115. package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
  116. package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
  117. package/examples/jsm/nodes/{core → code}/FunctionNode.js +8 -7
  118. package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
  119. package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
  120. package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
  121. package/examples/jsm/nodes/core/AttributeNode.js +16 -8
  122. package/examples/jsm/nodes/core/BypassNode.js +9 -2
  123. package/examples/jsm/nodes/core/CacheNode.js +46 -0
  124. package/examples/jsm/nodes/core/ConstNode.js +3 -0
  125. package/examples/jsm/nodes/core/ContextNode.js +8 -1
  126. package/examples/jsm/nodes/core/InputNode.js +26 -5
  127. package/examples/jsm/nodes/core/InstanceIndexNode.js +6 -1
  128. package/examples/jsm/nodes/core/LightingModel.js +16 -0
  129. package/examples/jsm/nodes/core/Node.js +128 -34
  130. package/examples/jsm/nodes/core/NodeBuilder.js +209 -118
  131. package/examples/jsm/nodes/core/NodeCache.js +26 -0
  132. package/examples/jsm/nodes/core/NodeFrame.js +56 -5
  133. package/examples/jsm/nodes/core/NodeUtils.js +105 -28
  134. package/examples/jsm/nodes/core/PropertyNode.js +19 -2
  135. package/examples/jsm/nodes/core/StackNode.js +92 -0
  136. package/examples/jsm/nodes/core/TempNode.js +11 -3
  137. package/examples/jsm/nodes/core/UniformNode.js +15 -0
  138. package/examples/jsm/nodes/core/VarNode.js +21 -29
  139. package/examples/jsm/nodes/core/VaryingNode.js +15 -2
  140. package/examples/jsm/nodes/core/constants.js +6 -0
  141. package/examples/jsm/nodes/display/BlendModeNode.js +25 -11
  142. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +30 -14
  143. package/examples/jsm/nodes/display/ColorSpaceNode.js +39 -27
  144. package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
  145. package/examples/jsm/nodes/display/NormalMapNode.js +31 -18
  146. package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
  147. package/examples/jsm/nodes/display/ToneMappingNode.js +92 -11
  148. package/examples/jsm/nodes/display/ViewportNode.js +27 -18
  149. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +30 -0
  150. package/examples/jsm/nodes/display/ViewportTextureNode.js +61 -0
  151. package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
  152. package/examples/jsm/nodes/fog/FogNode.js +12 -6
  153. package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
  154. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
  155. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -13
  156. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  157. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -6
  158. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +4 -4
  159. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +3 -3
  160. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +7 -5
  161. package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
  162. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +33 -36
  163. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +4 -3
  164. package/examples/jsm/nodes/functions/material/getRoughness.js +4 -4
  165. package/examples/jsm/nodes/geometry/RangeNode.js +32 -19
  166. package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
  167. package/examples/jsm/nodes/lighting/AONode.js +5 -3
  168. package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
  169. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +112 -6
  170. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
  171. package/examples/jsm/nodes/lighting/EnvironmentNode.js +104 -34
  172. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
  173. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
  174. package/examples/jsm/nodes/lighting/LightNode.js +57 -0
  175. package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
  176. package/examples/jsm/nodes/lighting/LightingContextNode.js +30 -8
  177. package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
  178. package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
  179. package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
  180. package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
  181. package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
  182. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
  183. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -9
  184. package/examples/jsm/nodes/materials/Materials.js +11 -55
  185. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -11
  186. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +48 -0
  187. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +74 -0
  188. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  189. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +21 -96
  190. package/examples/jsm/nodes/materials/NodeMaterial.js +244 -61
  191. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -1
  192. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -25
  193. package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
  194. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +1 -1
  195. package/examples/jsm/nodes/materialx/lib/mx_noise.js +2 -1
  196. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +2 -1
  197. package/examples/jsm/nodes/math/CondNode.js +43 -17
  198. package/examples/jsm/nodes/math/MathNode.js +178 -73
  199. package/examples/jsm/nodes/math/OperatorNode.js +52 -2
  200. package/examples/jsm/nodes/procedural/CheckerNode.js +14 -6
  201. package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -42
  202. package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
  203. package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
  204. package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
  205. package/examples/jsm/nodes/utils/EquirectUVNode.js +11 -4
  206. package/examples/jsm/nodes/utils/JoinNode.js +4 -1
  207. package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
  208. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
  209. package/examples/jsm/nodes/utils/OscNode.js +21 -14
  210. package/examples/jsm/nodes/utils/PackingNode.js +55 -0
  211. package/examples/jsm/nodes/utils/RemapNode.js +13 -5
  212. package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
  213. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
  214. package/examples/jsm/nodes/utils/SplitNode.js +7 -5
  215. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
  216. package/examples/jsm/nodes/utils/TimerNode.js +16 -6
  217. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
  218. package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
  219. package/examples/jsm/objects/Reflector.js +4 -4
  220. package/examples/jsm/objects/Refractor.js +4 -4
  221. package/examples/jsm/objects/ShadowMesh.js +3 -3
  222. package/examples/jsm/physics/AmmoPhysics.js +27 -28
  223. package/examples/jsm/physics/{OimoPhysics.js → RapierPhysics.js} +59 -51
  224. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -8
  225. package/examples/jsm/postprocessing/AfterimagePass.js +0 -2
  226. package/examples/jsm/postprocessing/BloomPass.js +0 -2
  227. package/examples/jsm/postprocessing/BokehPass.js +0 -6
  228. package/examples/jsm/postprocessing/DotScreenPass.js +0 -2
  229. package/examples/jsm/postprocessing/EffectComposer.js +3 -94
  230. package/examples/jsm/postprocessing/FilmPass.js +0 -2
  231. package/examples/jsm/postprocessing/GlitchPass.js +0 -2
  232. package/examples/jsm/postprocessing/HalftonePass.js +0 -6
  233. package/examples/jsm/postprocessing/OutlinePass.js +0 -1
  234. package/examples/jsm/postprocessing/Pass.js +2 -0
  235. package/examples/jsm/postprocessing/SAOPass.js +0 -24
  236. package/examples/jsm/postprocessing/SMAAPass.js +0 -6
  237. package/examples/jsm/postprocessing/SSAARenderPass.js +13 -5
  238. package/examples/jsm/postprocessing/SSAOPass.js +0 -12
  239. package/examples/jsm/postprocessing/SSRPass.js +0 -6
  240. package/examples/jsm/postprocessing/SavePass.js +0 -2
  241. package/examples/jsm/postprocessing/TexturePass.js +0 -2
  242. package/examples/jsm/postprocessing/UnrealBloomPass.js +0 -8
  243. package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
  244. package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
  245. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +35 -31
  246. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +2 -2
  247. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +14 -4
  248. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +72 -55
  249. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +34 -19
  250. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +1 -1
  251. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +158 -26
  252. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +1 -1
  253. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +6 -0
  254. package/examples/jsm/renderers/webgpu/WebGPURenderLists.js +30 -14
  255. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +40 -0
  256. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +50 -0
  257. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +49 -111
  258. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +40 -62
  259. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +14 -26
  260. package/examples/jsm/renderers/webgpu/WebGPURenderTarget.js +15 -0
  261. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +244 -100
  262. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +3 -1
  263. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +2 -4
  264. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +2 -0
  265. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +366 -110
  266. package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +1 -1
  267. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +13 -6
  268. package/examples/jsm/renderers/webgpu/WebGPUWeakMap.js +83 -0
  269. package/examples/jsm/renderers/webgpu/constants.js +68 -6
  270. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +74 -57
  271. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +241 -22
  272. package/examples/jsm/shaders/MMDToonShader.js +15 -4
  273. package/examples/jsm/shaders/RGBShiftShader.js +2 -2
  274. package/examples/jsm/shaders/VelocityShader.js +1 -1
  275. package/examples/jsm/utils/BufferGeometryUtils.js +37 -35
  276. package/examples/jsm/utils/LDrawUtils.js +4 -4
  277. package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
  278. package/examples/jsm/utils/SceneUtils.js +8 -4
  279. package/examples/jsm/utils/SkeletonUtils.js +27 -210
  280. package/examples/jsm/webxr/VRButton.js +1 -2
  281. package/examples/jsm/webxr/XRButton.js +198 -0
  282. package/package.json +33 -87
  283. package/src/Three.Legacy.js +19 -110
  284. package/src/Three.js +4 -3
  285. package/src/animation/AnimationUtils.js +13 -1
  286. package/src/animation/PropertyBinding.js +2 -2
  287. package/src/audio/Audio.js +7 -2
  288. package/src/constants.js +10 -2
  289. package/src/core/BufferAttribute.js +147 -8
  290. package/src/core/BufferGeometry.js +3 -9
  291. package/src/core/GLBufferAttribute.js +2 -0
  292. package/src/core/InterleavedBufferAttribute.js +1 -1
  293. package/src/core/Object3D.js +36 -7
  294. package/src/extras/DataUtils.js +7 -1
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +5 -5
  297. package/src/extras/curves/LineCurve.js +6 -4
  298. package/src/extras/curves/LineCurve3.js +13 -0
  299. package/src/geometries/BoxGeometry.js +10 -0
  300. package/src/geometries/CircleGeometry.js +11 -1
  301. package/src/geometries/ConeGeometry.js +1 -1
  302. package/src/geometries/CylinderGeometry.js +11 -1
  303. package/src/geometries/EdgesGeometry.js +10 -0
  304. package/src/geometries/ExtrudeGeometry.js +11 -1
  305. package/src/geometries/LatheGeometry.js +10 -0
  306. package/src/geometries/PlaneGeometry.js +10 -0
  307. package/src/geometries/PolyhedronGeometry.js +10 -0
  308. package/src/geometries/RingGeometry.js +11 -1
  309. package/src/geometries/ShapeGeometry.js +10 -0
  310. package/src/geometries/SphereGeometry.js +12 -2
  311. package/src/geometries/TorusGeometry.js +11 -1
  312. package/src/geometries/TorusKnotGeometry.js +10 -0
  313. package/src/geometries/TubeGeometry.js +10 -0
  314. package/src/geometries/WireframeGeometry.js +10 -0
  315. package/src/helpers/Box3Helper.js +1 -2
  316. package/src/lights/DirectionalLight.js +1 -1
  317. package/src/lights/HemisphereLight.js +1 -1
  318. package/src/lights/SpotLight.js +1 -1
  319. package/src/loaders/AudioLoader.js +14 -8
  320. package/src/loaders/DataTextureLoader.js +5 -1
  321. package/src/loaders/MaterialLoader.js +4 -0
  322. package/src/loaders/ObjectLoader.js +9 -2
  323. package/src/materials/LineBasicMaterial.js +4 -0
  324. package/src/materials/Material.js +6 -3
  325. package/src/materials/MeshDistanceMaterial.js +0 -9
  326. package/src/materials/ShaderMaterial.js +6 -1
  327. package/src/math/Box2.js +3 -2
  328. package/src/math/Box3.js +49 -64
  329. package/src/math/Color.js +72 -55
  330. package/src/math/ColorManagement.js +75 -16
  331. package/src/math/Euler.js +2 -11
  332. package/src/math/Frustum.js +13 -3
  333. package/src/math/MathUtils.js +27 -1
  334. package/src/math/Plane.js +2 -2
  335. package/src/math/Quaternion.js +6 -0
  336. package/src/math/Ray.js +7 -7
  337. package/src/math/Triangle.js +37 -7
  338. package/src/math/Vector2.js +16 -0
  339. package/src/math/Vector3.js +10 -0
  340. package/src/math/interpolants/CubicInterpolant.js +1 -2
  341. package/src/objects/InstancedMesh.js +79 -1
  342. package/src/objects/Mesh.js +101 -73
  343. package/src/objects/SkinnedMesh.js +95 -8
  344. package/src/objects/Sprite.js +1 -1
  345. package/src/renderers/WebGLCubeRenderTarget.js +12 -3
  346. package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
  347. package/src/renderers/WebGLRenderTarget.js +14 -2
  348. package/src/renderers/WebGLRenderer.js +1340 -1258
  349. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
  350. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  351. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
  352. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
  353. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
  354. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
  355. package/src/renderers/shaders/ShaderChunk/common.glsl.js +32 -0
  356. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
  357. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
  358. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  361. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  362. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
  363. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +13 -13
  364. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +256 -10
  365. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -11
  366. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
  367. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
  368. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
  369. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +32 -10
  370. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
  371. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
  373. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
  375. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
  376. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
  377. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
  378. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  379. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +91 -11
  380. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +108 -1
  381. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +128 -6
  382. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +111 -1
  383. package/src/renderers/shaders/ShaderChunk.js +0 -6
  384. package/src/renderers/shaders/ShaderLib/background.glsl.js +0 -8
  385. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +5 -0
  386. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -4
  387. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -3
  388. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
  389. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -3
  390. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -12
  391. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -3
  392. package/src/renderers/shaders/ShaderLib/points.glsl.js +13 -0
  393. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +5 -0
  394. package/src/renderers/shaders/ShaderLib.js +15 -4
  395. package/src/renderers/shaders/UniformsLib.js +25 -15
  396. package/src/renderers/shaders/UniformsUtils.js +12 -3
  397. package/src/renderers/webgl/WebGLBackground.js +23 -12
  398. package/src/renderers/webgl/WebGLCapabilities.js +1 -2
  399. package/src/renderers/webgl/WebGLClipping.js +7 -3
  400. package/src/renderers/webgl/WebGLLights.js +2 -2
  401. package/src/renderers/webgl/WebGLMaterials.js +105 -234
  402. package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
  403. package/src/renderers/webgl/WebGLProgram.js +111 -48
  404. package/src/renderers/webgl/WebGLPrograms.js +200 -129
  405. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  406. package/src/renderers/webgl/WebGLShadowMap.js +40 -27
  407. package/src/renderers/webgl/WebGLState.js +23 -9
  408. package/src/renderers/webgl/WebGLTextures.js +21 -19
  409. package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
  410. package/src/renderers/webgl/WebGLUtils.js +41 -29
  411. package/src/renderers/webxr/WebXRController.js +3 -0
  412. package/src/renderers/webxr/WebXRManager.js +69 -47
  413. package/src/scenes/Scene.js +4 -6
  414. package/src/textures/CompressedTexture.js +2 -2
  415. package/src/textures/CubeTexture.js +2 -2
  416. package/src/textures/DataTexture.js +2 -2
  417. package/src/textures/Texture.js +41 -12
  418. package/src/utils.js +13 -1
  419. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  420. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  421. package/examples/fonts/open-sans/open-sans.css +0 -9
  422. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  423. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
  424. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  425. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  426. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  427. package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
  428. package/examples/js/animation/AnimationClipCreator.js +0 -89
  429. package/examples/js/animation/CCDIKSolver.js +0 -416
  430. package/examples/js/animation/MMDAnimationHelper.js +0 -1046
  431. package/examples/js/animation/MMDPhysics.js +0 -1174
  432. package/examples/js/cameras/CinematicCamera.js +0 -168
  433. package/examples/js/controls/ArcballControls.js +0 -2770
  434. package/examples/js/controls/DragControls.js +0 -205
  435. package/examples/js/controls/FirstPersonControls.js +0 -312
  436. package/examples/js/controls/FlyControls.js +0 -321
  437. package/examples/js/controls/OrbitControls.js +0 -1101
  438. package/examples/js/controls/PointerLockControls.js +0 -144
  439. package/examples/js/controls/TrackballControls.js +0 -729
  440. package/examples/js/controls/TransformControls.js +0 -1301
  441. package/examples/js/csm/CSM.js +0 -347
  442. package/examples/js/csm/CSMFrustum.js +0 -127
  443. package/examples/js/csm/CSMHelper.js +0 -165
  444. package/examples/js/csm/CSMShader.js +0 -253
  445. package/examples/js/curves/CurveExtras.js +0 -348
  446. package/examples/js/curves/NURBSCurve.js +0 -63
  447. package/examples/js/curves/NURBSSurface.js +0 -48
  448. package/examples/js/curves/NURBSUtils.js +0 -439
  449. package/examples/js/effects/AnaglyphEffect.js +0 -86
  450. package/examples/js/effects/AsciiEffect.js +0 -260
  451. package/examples/js/effects/OutlineEffect.js +0 -450
  452. package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
  453. package/examples/js/effects/PeppersGhostEffect.js +0 -139
  454. package/examples/js/effects/StereoEffect.js +0 -46
  455. package/examples/js/environments/DebugEnvironment.js +0 -53
  456. package/examples/js/environments/RoomEnvironment.js +0 -124
  457. package/examples/js/exporters/ColladaExporter.js +0 -487
  458. package/examples/js/exporters/DRACOExporter.js +0 -212
  459. package/examples/js/exporters/EXRExporter.js +0 -455
  460. package/examples/js/exporters/GLTFExporter.js +0 -2367
  461. package/examples/js/exporters/MMDExporter.js +0 -187
  462. package/examples/js/exporters/OBJExporter.js +0 -260
  463. package/examples/js/exporters/PLYExporter.js +0 -427
  464. package/examples/js/exporters/STLExporter.js +0 -188
  465. package/examples/js/exporters/USDZExporter.js +0 -608
  466. package/examples/js/geometries/BoxLineGeometry.js +0 -59
  467. package/examples/js/geometries/ConvexGeometry.js +0 -53
  468. package/examples/js/geometries/DecalGeometry.js +0 -324
  469. package/examples/js/geometries/LightningStrike.js +0 -861
  470. package/examples/js/geometries/ParametricGeometries.js +0 -216
  471. package/examples/js/geometries/ParametricGeometry.js +0 -121
  472. package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
  473. package/examples/js/geometries/TeapotGeometry.js +0 -335
  474. package/examples/js/geometries/TextGeometry.js +0 -53
  475. package/examples/js/helpers/LightProbeHelper.js +0 -48
  476. package/examples/js/helpers/OctreeHelper.js +0 -76
  477. package/examples/js/helpers/PositionalAudioHelper.js +0 -91
  478. package/examples/js/helpers/RectAreaLightHelper.js +0 -73
  479. package/examples/js/helpers/VertexNormalsHelper.js +0 -74
  480. package/examples/js/helpers/VertexTangentsHelper.js +0 -68
  481. package/examples/js/helpers/ViewHelper.js +0 -281
  482. package/examples/js/interactive/HTMLMesh.js +0 -497
  483. package/examples/js/interactive/InteractiveGroup.js +0 -95
  484. package/examples/js/interactive/SelectionBox.js +0 -195
  485. package/examples/js/interactive/SelectionHelper.js +0 -83
  486. package/examples/js/libs/chevrotain.min.js +0 -3
  487. package/examples/js/libs/draco/draco_decoder.js +0 -52
  488. package/examples/js/libs/draco/draco_decoder.wasm +0 -0
  489. package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
  490. package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
  491. package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
  492. package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
  493. package/examples/js/libs/fflate.min.js +0 -7
  494. package/examples/js/libs/ktx-parse.umd.js +0 -1
  495. package/examples/js/libs/meshopt_decoder.js +0 -188
  496. package/examples/js/libs/opentype.min.js +0 -1
  497. package/examples/js/libs/stats.min.js +0 -5
  498. package/examples/js/lights/LightProbeGenerator.js +0 -221
  499. package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
  500. package/examples/js/lines/Line2.js +0 -19
  501. package/examples/js/lines/LineGeometry.js +0 -69
  502. package/examples/js/lines/LineMaterial.js +0 -635
  503. package/examples/js/lines/LineSegments2.js +0 -313
  504. package/examples/js/lines/LineSegmentsGeometry.js +0 -198
  505. package/examples/js/lines/Wireframe.js +0 -47
  506. package/examples/js/lines/WireframeGeometry2.js +0 -20
  507. package/examples/js/loaders/3DMLoader.js +0 -1273
  508. package/examples/js/loaders/3MFLoader.js +0 -1306
  509. package/examples/js/loaders/AMFLoader.js +0 -504
  510. package/examples/js/loaders/BVHLoader.js +0 -395
  511. package/examples/js/loaders/BasisTextureLoader.js +0 -706
  512. package/examples/js/loaders/ColladaLoader.js +0 -3690
  513. package/examples/js/loaders/DDSLoader.js +0 -244
  514. package/examples/js/loaders/DRACOLoader.js +0 -511
  515. package/examples/js/loaders/EXRLoader.js +0 -2039
  516. package/examples/js/loaders/FBXLoader.js +0 -3681
  517. package/examples/js/loaders/FontLoader.js +0 -160
  518. package/examples/js/loaders/GCodeLoader.js +0 -255
  519. package/examples/js/loaders/GLTFLoader.js +0 -3862
  520. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
  521. package/examples/js/loaders/KMZLoader.js +0 -121
  522. package/examples/js/loaders/KTXLoader.js +0 -159
  523. package/examples/js/loaders/LDrawLoader.js +0 -2263
  524. package/examples/js/loaders/LUT3dlLoader.js +0 -135
  525. package/examples/js/loaders/LUTCubeLoader.js +0 -132
  526. package/examples/js/loaders/LWOLoader.js +0 -901
  527. package/examples/js/loaders/LogLuvLoader.js +0 -715
  528. package/examples/js/loaders/LottieLoader.js +0 -62
  529. package/examples/js/loaders/MD2Loader.js +0 -248
  530. package/examples/js/loaders/MDDLoader.js +0 -91
  531. package/examples/js/loaders/MMDLoader.js +0 -1915
  532. package/examples/js/loaders/MTLLoader.js +0 -472
  533. package/examples/js/loaders/NRRDLoader.js +0 -609
  534. package/examples/js/loaders/OBJLoader.js +0 -789
  535. package/examples/js/loaders/PCDLoader.js +0 -413
  536. package/examples/js/loaders/PDBLoader.js +0 -317
  537. package/examples/js/loaders/PLYLoader.js +0 -576
  538. package/examples/js/loaders/PRWMLoader.js +0 -249
  539. package/examples/js/loaders/PVRLoader.js +0 -218
  540. package/examples/js/loaders/RGBELoader.js +0 -442
  541. package/examples/js/loaders/RGBMLoader.js +0 -1354
  542. package/examples/js/loaders/STLLoader.js +0 -364
  543. package/examples/js/loaders/SVGLoader.js +0 -2783
  544. package/examples/js/loaders/TDSLoader.js +0 -992
  545. package/examples/js/loaders/TGALoader.js +0 -484
  546. package/examples/js/loaders/TIFFLoader.js +0 -30
  547. package/examples/js/loaders/TTFLoader.js +0 -203
  548. package/examples/js/loaders/TiltLoader.js +0 -459
  549. package/examples/js/loaders/VOXLoader.js +0 -240
  550. package/examples/js/loaders/VRMLLoader.js +0 -3140
  551. package/examples/js/loaders/VTKLoader.js +0 -1078
  552. package/examples/js/loaders/XYZLoader.js +0 -89
  553. package/examples/js/loaders/lwo/IFFParser.js +0 -1067
  554. package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
  555. package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
  556. package/examples/js/materials/MeshGouraudMaterial.js +0 -387
  557. package/examples/js/math/Capsule.js +0 -103
  558. package/examples/js/math/ColorConverter.js +0 -33
  559. package/examples/js/math/ConvexHull.js +0 -1154
  560. package/examples/js/math/ImprovedNoise.js +0 -66
  561. package/examples/js/math/Lut.js +0 -164
  562. package/examples/js/math/MeshSurfaceSampler.js +0 -171
  563. package/examples/js/math/OBB.js +0 -382
  564. package/examples/js/math/Octree.js +0 -410
  565. package/examples/js/math/SimplexNoise.js +0 -445
  566. package/examples/js/misc/ConvexObjectBreaker.js +0 -474
  567. package/examples/js/misc/GPUComputationRenderer.js +0 -393
  568. package/examples/js/misc/Gyroscope.js +0 -56
  569. package/examples/js/misc/MD2Character.js +0 -235
  570. package/examples/js/misc/MD2CharacterComplex.js +0 -513
  571. package/examples/js/misc/MorphAnimMesh.js +0 -63
  572. package/examples/js/misc/MorphBlendMesh.js +0 -265
  573. package/examples/js/misc/ProgressiveLightMap.js +0 -335
  574. package/examples/js/misc/RollerCoaster.js +0 -430
  575. package/examples/js/misc/TubePainter.js +0 -167
  576. package/examples/js/misc/Volume.js +0 -437
  577. package/examples/js/misc/VolumeSlice.js +0 -214
  578. package/examples/js/modifiers/CurveModifier.js +0 -309
  579. package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
  580. package/examples/js/modifiers/SimplifyModifier.js +0 -465
  581. package/examples/js/modifiers/TessellateModifier.js +0 -276
  582. package/examples/js/objects/GroundProjectedEnv.js +0 -181
  583. package/examples/js/objects/Lensflare.js +0 -356
  584. package/examples/js/objects/LightningStorm.js +0 -206
  585. package/examples/js/objects/MarchingCubes.js +0 -759
  586. package/examples/js/objects/Reflector.js +0 -216
  587. package/examples/js/objects/ReflectorForSSRPass.js +0 -315
  588. package/examples/js/objects/Refractor.js +0 -283
  589. package/examples/js/objects/ShadowMesh.js +0 -59
  590. package/examples/js/objects/Sky.js +0 -218
  591. package/examples/js/objects/Water.js +0 -292
  592. package/examples/js/objects/Water2.js +0 -307
  593. package/examples/js/physics/AmmoPhysics.js +0 -259
  594. package/examples/js/physics/OimoPhysics.js +0 -217
  595. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
  596. package/examples/js/postprocessing/AfterimagePass.js +0 -77
  597. package/examples/js/postprocessing/BloomPass.js +0 -135
  598. package/examples/js/postprocessing/BokehPass.js +0 -120
  599. package/examples/js/postprocessing/ClearPass.js +0 -39
  600. package/examples/js/postprocessing/CubeTexturePass.js +0 -60
  601. package/examples/js/postprocessing/DotScreenPass.js +0 -51
  602. package/examples/js/postprocessing/EffectComposer.js +0 -272
  603. package/examples/js/postprocessing/FilmPass.js +0 -52
  604. package/examples/js/postprocessing/GlitchPass.js +0 -104
  605. package/examples/js/postprocessing/HalftonePass.js +0 -75
  606. package/examples/js/postprocessing/LUTPass.js +0 -171
  607. package/examples/js/postprocessing/MaskPass.js +0 -95
  608. package/examples/js/postprocessing/OutlinePass.js +0 -598
  609. package/examples/js/postprocessing/Pass.js +0 -72
  610. package/examples/js/postprocessing/RenderPass.js +0 -70
  611. package/examples/js/postprocessing/RenderPixelatedPass.js +0 -215
  612. package/examples/js/postprocessing/SAOPass.js +0 -374
  613. package/examples/js/postprocessing/SMAAPass.js +0 -170
  614. package/examples/js/postprocessing/SSAARenderPass.js +0 -156
  615. package/examples/js/postprocessing/SSAOPass.js +0 -365
  616. package/examples/js/postprocessing/SSRPass.js +0 -567
  617. package/examples/js/postprocessing/SavePass.js +0 -59
  618. package/examples/js/postprocessing/ShaderPass.js +0 -64
  619. package/examples/js/postprocessing/TAARenderPass.js +0 -130
  620. package/examples/js/postprocessing/TexturePass.js +0 -49
  621. package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
  622. package/examples/js/renderers/CSS2DRenderer.js +0 -178
  623. package/examples/js/renderers/CSS3DRenderer.js +0 -237
  624. package/examples/js/renderers/Projector.js +0 -818
  625. package/examples/js/renderers/SVGRenderer.js +0 -491
  626. package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
  627. package/examples/js/shaders/AfterimageShader.js +0 -60
  628. package/examples/js/shaders/BasicShader.js +0 -27
  629. package/examples/js/shaders/BleachBypassShader.js +0 -62
  630. package/examples/js/shaders/BlendShader.js +0 -54
  631. package/examples/js/shaders/BokehShader.js +0 -156
  632. package/examples/js/shaders/BokehShader2.js +0 -419
  633. package/examples/js/shaders/BrightnessContrastShader.js +0 -58
  634. package/examples/js/shaders/ColorCorrectionShader.js +0 -52
  635. package/examples/js/shaders/ColorifyShader.js +0 -47
  636. package/examples/js/shaders/ConvolutionShader.js +0 -92
  637. package/examples/js/shaders/CopyShader.js +0 -45
  638. package/examples/js/shaders/DOFMipMapShader.js +0 -60
  639. package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
  640. package/examples/js/shaders/DigitalGlitch.js +0 -127
  641. package/examples/js/shaders/DotScreenShader.js +0 -72
  642. package/examples/js/shaders/FXAAShader.js +0 -284
  643. package/examples/js/shaders/FilmShader.js +0 -110
  644. package/examples/js/shaders/FocusShader.js +0 -95
  645. package/examples/js/shaders/FreiChenShader.js +0 -93
  646. package/examples/js/shaders/GammaCorrectionShader.js +0 -41
  647. package/examples/js/shaders/GodRaysShader.js +0 -284
  648. package/examples/js/shaders/HalftoneShader.js +0 -336
  649. package/examples/js/shaders/HorizontalBlurShader.js +0 -59
  650. package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
  651. package/examples/js/shaders/HueSaturationShader.js +0 -69
  652. package/examples/js/shaders/KaleidoShader.js +0 -60
  653. package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
  654. package/examples/js/shaders/LuminosityShader.js +0 -46
  655. package/examples/js/shaders/MMDToonShader.js +0 -94
  656. package/examples/js/shaders/MirrorShader.js +0 -56
  657. package/examples/js/shaders/NormalMapShader.js +0 -55
  658. package/examples/js/shaders/RGBShiftShader.js +0 -56
  659. package/examples/js/shaders/SAOShader.js +0 -209
  660. package/examples/js/shaders/SMAAShader.js +0 -454
  661. package/examples/js/shaders/SSAOShader.js +0 -295
  662. package/examples/js/shaders/SSRShader.js +0 -381
  663. package/examples/js/shaders/SepiaShader.js +0 -52
  664. package/examples/js/shaders/SobelOperatorShader.js +0 -88
  665. package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
  666. package/examples/js/shaders/TechnicolorShader.js +0 -43
  667. package/examples/js/shaders/ToneMapShader.js +0 -84
  668. package/examples/js/shaders/ToonShader.js +0 -335
  669. package/examples/js/shaders/TriangleBlurShader.js +0 -70
  670. package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
  671. package/examples/js/shaders/VelocityShader.js +0 -126
  672. package/examples/js/shaders/VerticalBlurShader.js +0 -59
  673. package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
  674. package/examples/js/shaders/VignetteShader.js +0 -53
  675. package/examples/js/shaders/VolumeShader.js +0 -296
  676. package/examples/js/shaders/WaterRefractionShader.js +0 -84
  677. package/examples/js/textures/FlakesTexture.js +0 -40
  678. package/examples/js/utils/BufferGeometryUtils.js +0 -1160
  679. package/examples/js/utils/CameraUtils.js +0 -71
  680. package/examples/js/utils/GPUStatsPanel.js +0 -125
  681. package/examples/js/utils/GeometryCompressionUtils.js +0 -549
  682. package/examples/js/utils/GeometryUtils.js +0 -168
  683. package/examples/js/utils/LDrawUtils.js +0 -179
  684. package/examples/js/utils/PackedPhongMaterial.js +0 -109
  685. package/examples/js/utils/SceneUtils.js +0 -214
  686. package/examples/js/utils/ShadowMapViewer.js +0 -183
  687. package/examples/js/utils/SkeletonUtils.js +0 -493
  688. package/examples/js/utils/UVsDebug.js +0 -143
  689. package/examples/js/utils/WorkerPool.js +0 -105
  690. package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
  691. package/examples/jsm/libs/OimoPhysics/index.js +0 -43
  692. package/examples/jsm/libs/flow.module.js +0 -4552
  693. package/examples/jsm/libs/tween.module.min.js +0 -3
  694. package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
  695. package/examples/jsm/loaders/IFCLoader.js +0 -2431
  696. package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
  697. package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
  698. package/examples/jsm/node-editor/NodeEditor.js +0 -857
  699. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
  700. package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
  701. package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
  702. package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
  703. package/examples/jsm/node-editor/core/BaseNode.js +0 -96
  704. package/examples/jsm/node-editor/core/DataFile.js +0 -59
  705. package/examples/jsm/node-editor/core/FileEditor.js +0 -20
  706. package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
  707. package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
  708. package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
  709. package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
  710. package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
  711. package/examples/jsm/node-editor/examples/matcap.json +0 -1
  712. package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
  713. package/examples/jsm/node-editor/examples/rim.json +0 -1
  714. package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
  715. package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
  716. package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
  717. package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
  718. package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
  719. package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
  720. package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
  721. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
  722. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
  723. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
  724. package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
  725. package/examples/jsm/node-editor/math/DotEditor.js +0 -35
  726. package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
  727. package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
  728. package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
  729. package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
  730. package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
  731. package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
  732. package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
  733. package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
  734. package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
  735. package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
  736. package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
  737. package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
  738. package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
  739. package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
  740. package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
  741. package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
  742. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
  743. package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
  744. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
  745. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
  746. package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
  747. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
  748. package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
  749. package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
  750. package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
  751. /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
  752. /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
  753. /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
  754. /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
  755. /package/examples/{js → jsm}/libs/draco/README.md +0 -0
  756. /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
  757. /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  BufferAttribute,
3
3
  ClampToEdgeWrapping,
4
+ Color,
4
5
  DoubleSide,
5
6
  InterpolateDiscrete,
6
7
  InterpolateLinear,
7
- LinearEncoding,
8
+ NoColorSpace,
8
9
  LinearFilter,
9
10
  LinearMipmapLinearFilter,
10
11
  LinearMipmapNearestFilter,
@@ -19,10 +20,46 @@ import {
19
20
  RepeatWrapping,
20
21
  Scene,
21
22
  Source,
22
- sRGBEncoding,
23
+ SRGBColorSpace,
23
24
  Vector3
24
25
  } from 'three';
25
26
 
27
+
28
+ /**
29
+ * The KHR_mesh_quantization extension allows these extra attribute component types
30
+ *
31
+ * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes
32
+ */
33
+ const KHR_mesh_quantization_ExtraAttrTypes = {
34
+ POSITION: [
35
+ 'byte',
36
+ 'byte normalized',
37
+ 'unsigned byte',
38
+ 'unsigned byte normalized',
39
+ 'short',
40
+ 'short normalized',
41
+ 'unsigned short',
42
+ 'unsigned short normalized',
43
+ ],
44
+ NORMAL: [
45
+ 'byte normalized',
46
+ 'short normalized',
47
+ ],
48
+ TANGENT: [
49
+ 'byte normalized',
50
+ 'short normalized',
51
+ ],
52
+ TEXCOORD: [
53
+ 'byte',
54
+ 'byte normalized',
55
+ 'unsigned byte',
56
+ 'short',
57
+ 'short normalized',
58
+ 'unsigned short',
59
+ ],
60
+ };
61
+
62
+
26
63
  class GLTFExporter {
27
64
 
28
65
  constructor() {
@@ -53,6 +90,18 @@ class GLTFExporter {
53
90
 
54
91
  } );
55
92
 
93
+ this.register( function ( writer ) {
94
+
95
+ return new GLTFMaterialsIorExtension( writer );
96
+
97
+ } );
98
+
99
+ this.register( function ( writer ) {
100
+
101
+ return new GLTFMaterialsSpecularExtension( writer );
102
+
103
+ } );
104
+
56
105
  this.register( function ( writer ) {
57
106
 
58
107
  return new GLTFMaterialsClearcoatExtension( writer );
@@ -65,6 +114,18 @@ class GLTFExporter {
65
114
 
66
115
  } );
67
116
 
117
+ this.register( function ( writer ) {
118
+
119
+ return new GLTFMaterialsSheenExtension( writer );
120
+
121
+ } );
122
+
123
+ this.register( function ( writer ) {
124
+
125
+ return new GLTFMaterialsEmissiveStrengthExtension( writer );
126
+
127
+ } );
128
+
68
129
  }
69
130
 
70
131
  register( callback ) {
@@ -141,10 +202,14 @@ const WEBGL_CONSTANTS = {
141
202
  TRIANGLE_STRIP: 0x0005,
142
203
  TRIANGLE_FAN: 0x0006,
143
204
 
205
+ BYTE: 0x1400,
144
206
  UNSIGNED_BYTE: 0x1401,
207
+ SHORT: 0x1402,
145
208
  UNSIGNED_SHORT: 0x1403,
146
- FLOAT: 0x1406,
209
+ INT: 0x1404,
147
210
  UNSIGNED_INT: 0x1405,
211
+ FLOAT: 0x1406,
212
+
148
213
  ARRAY_BUFFER: 0x8892,
149
214
  ELEMENT_ARRAY_BUFFER: 0x8893,
150
215
 
@@ -160,6 +225,8 @@ const WEBGL_CONSTANTS = {
160
225
  REPEAT: 10497
161
226
  };
162
227
 
228
+ const KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';
229
+
163
230
  const THREE_TO_WEBGL = {};
164
231
 
165
232
  THREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;
@@ -180,6 +247,8 @@ const PATH_PROPERTIES = {
180
247
  morphTargetInfluences: 'weights'
181
248
  };
182
249
 
250
+ const DEFAULT_SPECULAR_COLOR = new Color();
251
+
183
252
  // GLB constants
184
253
  // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
185
254
 
@@ -269,6 +338,12 @@ function getMinMax( attribute, start, count ) {
269
338
  else if ( a === 2 ) value = attribute.getZ( i );
270
339
  else if ( a === 3 ) value = attribute.getW( i );
271
340
 
341
+ if ( attribute.normalized === true ) {
342
+
343
+ value = MathUtils.normalize( value, attribute.array );
344
+
345
+ }
346
+
272
347
  }
273
348
 
274
349
  output.min[ a ] = Math.min( output.min[ a ], value );
@@ -390,7 +465,9 @@ class GLTFWriter {
390
465
  this.buffers = [];
391
466
  this.nodeMap = new Map();
392
467
  this.skins = [];
468
+
393
469
  this.extensionsUsed = {};
470
+ this.extensionsRequired = {};
394
471
 
395
472
  this.uids = new Map();
396
473
  this.uid = 0;
@@ -425,9 +502,9 @@ class GLTFWriter {
425
502
  * @param {Function} onDone Callback on completed
426
503
  * @param {Object} options options
427
504
  */
428
- async write( input, onDone, options ) {
505
+ async write( input, onDone, options = {} ) {
429
506
 
430
- this.options = Object.assign( {}, {
507
+ this.options = Object.assign( {
431
508
  // default options
432
509
  binary: false,
433
510
  trs: false,
@@ -452,15 +529,19 @@ class GLTFWriter {
452
529
  const buffers = writer.buffers;
453
530
  const json = writer.json;
454
531
  options = writer.options;
532
+
455
533
  const extensionsUsed = writer.extensionsUsed;
534
+ const extensionsRequired = writer.extensionsRequired;
456
535
 
457
536
  // Merge buffers.
458
537
  const blob = new Blob( buffers, { type: 'application/octet-stream' } );
459
538
 
460
539
  // Declare extensions.
461
540
  const extensionsUsedList = Object.keys( extensionsUsed );
541
+ const extensionsRequiredList = Object.keys( extensionsRequired );
462
542
 
463
543
  if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;
544
+ if ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;
464
545
 
465
546
  // Update bytelength of the single buffer.
466
547
  if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
@@ -720,7 +801,7 @@ class GLTFWriter {
720
801
 
721
802
  function getEncodingConversion( map ) {
722
803
 
723
- if ( map.encoding === sRGBEncoding ) {
804
+ if ( map.colorSpace === SRGBColorSpace ) {
724
805
 
725
806
  return function SRGBToLinear( c ) {
726
807
 
@@ -740,11 +821,11 @@ class GLTFWriter {
740
821
 
741
822
  console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
742
823
 
743
- const metalness = metalnessMap?.image;
744
- const roughness = roughnessMap?.image;
824
+ const metalness = metalnessMap ? metalnessMap.image : null;
825
+ const roughness = roughnessMap ? roughnessMap.image : null;
745
826
 
746
- const width = Math.max( metalness?.width || 0, roughness?.width || 0 );
747
- const height = Math.max( metalness?.height || 0, roughness?.height || 0 );
827
+ const width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );
828
+ const height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );
748
829
 
749
830
  const canvas = getCanvas();
750
831
  canvas.width = width;
@@ -795,7 +876,14 @@ class GLTFWriter {
795
876
  const texture = reference.clone();
796
877
 
797
878
  texture.source = new Source( canvas );
798
- texture.encoding = LinearEncoding;
879
+ texture.colorSpace = NoColorSpace;
880
+ texture.channel = ( metalnessMap || roughnessMap ).channel;
881
+
882
+ if ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {
883
+
884
+ console.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );
885
+
886
+ }
799
887
 
800
888
  return texture;
801
889
 
@@ -839,17 +927,25 @@ class GLTFWriter {
839
927
 
840
928
  let componentSize;
841
929
 
842
- if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {
930
+ switch ( componentType ) {
843
931
 
844
- componentSize = 1;
932
+ case WEBGL_CONSTANTS.BYTE:
933
+ case WEBGL_CONSTANTS.UNSIGNED_BYTE:
845
934
 
846
- } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {
935
+ componentSize = 1;
847
936
 
848
- componentSize = 2;
937
+ break;
849
938
 
850
- } else {
939
+ case WEBGL_CONSTANTS.SHORT:
940
+ case WEBGL_CONSTANTS.UNSIGNED_SHORT:
941
+
942
+ componentSize = 2;
943
+
944
+ break;
851
945
 
852
- componentSize = 4;
946
+ default:
947
+
948
+ componentSize = 4;
853
949
 
854
950
  }
855
951
 
@@ -876,20 +972,38 @@ class GLTFWriter {
876
972
  else if ( a === 2 ) value = attribute.getZ( i );
877
973
  else if ( a === 3 ) value = attribute.getW( i );
878
974
 
975
+ if ( attribute.normalized === true ) {
976
+
977
+ value = MathUtils.normalize( value, attribute.array );
978
+
979
+ }
980
+
879
981
  }
880
982
 
881
983
  if ( componentType === WEBGL_CONSTANTS.FLOAT ) {
882
984
 
883
985
  dataView.setFloat32( offset, value, true );
884
986
 
987
+ } else if ( componentType === WEBGL_CONSTANTS.INT ) {
988
+
989
+ dataView.setInt32( offset, value, true );
990
+
885
991
  } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {
886
992
 
887
993
  dataView.setUint32( offset, value, true );
888
994
 
995
+ } else if ( componentType === WEBGL_CONSTANTS.SHORT ) {
996
+
997
+ dataView.setInt16( offset, value, true );
998
+
889
999
  } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {
890
1000
 
891
1001
  dataView.setUint16( offset, value, true );
892
1002
 
1003
+ } else if ( componentType === WEBGL_CONSTANTS.BYTE ) {
1004
+
1005
+ dataView.setInt8( offset, value );
1006
+
893
1007
  } else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {
894
1008
 
895
1009
  dataView.setUint8( offset, value );
@@ -988,25 +1102,38 @@ class GLTFWriter {
988
1102
  2: 'VEC2',
989
1103
  3: 'VEC3',
990
1104
  4: 'VEC4',
1105
+ 9: 'MAT3',
991
1106
  16: 'MAT4'
992
1107
 
993
1108
  };
994
1109
 
995
1110
  let componentType;
996
1111
 
997
- // Detect the component type of the attribute array (float, uint or ushort)
1112
+ // Detect the component type of the attribute array
998
1113
  if ( attribute.array.constructor === Float32Array ) {
999
1114
 
1000
1115
  componentType = WEBGL_CONSTANTS.FLOAT;
1001
1116
 
1117
+ } else if ( attribute.array.constructor === Int32Array ) {
1118
+
1119
+ componentType = WEBGL_CONSTANTS.INT;
1120
+
1002
1121
  } else if ( attribute.array.constructor === Uint32Array ) {
1003
1122
 
1004
1123
  componentType = WEBGL_CONSTANTS.UNSIGNED_INT;
1005
1124
 
1125
+ } else if ( attribute.array.constructor === Int16Array ) {
1126
+
1127
+ componentType = WEBGL_CONSTANTS.SHORT;
1128
+
1006
1129
  } else if ( attribute.array.constructor === Uint16Array ) {
1007
1130
 
1008
1131
  componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;
1009
1132
 
1133
+ } else if ( attribute.array.constructor === Int8Array ) {
1134
+
1135
+ componentType = WEBGL_CONSTANTS.BYTE;
1136
+
1010
1137
  } else if ( attribute.array.constructor === Uint8Array ) {
1011
1138
 
1012
1139
  componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
@@ -1065,112 +1192,120 @@ class GLTFWriter {
1065
1192
  */
1066
1193
  processImage( image, format, flipY, mimeType = 'image/png' ) {
1067
1194
 
1068
- const writer = this;
1069
- const cache = writer.cache;
1070
- const json = writer.json;
1071
- const options = writer.options;
1072
- const pending = writer.pending;
1195
+ if ( image !== null ) {
1073
1196
 
1074
- if ( ! cache.images.has( image ) ) cache.images.set( image, {} );
1197
+ const writer = this;
1198
+ const cache = writer.cache;
1199
+ const json = writer.json;
1200
+ const options = writer.options;
1201
+ const pending = writer.pending;
1075
1202
 
1076
- const cachedImages = cache.images.get( image );
1203
+ if ( ! cache.images.has( image ) ) cache.images.set( image, {} );
1077
1204
 
1078
- const key = mimeType + ':flipY/' + flipY.toString();
1205
+ const cachedImages = cache.images.get( image );
1079
1206
 
1080
- if ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];
1207
+ const key = mimeType + ':flipY/' + flipY.toString();
1081
1208
 
1082
- if ( ! json.images ) json.images = [];
1209
+ if ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];
1083
1210
 
1084
- const imageDef = { mimeType: mimeType };
1211
+ if ( ! json.images ) json.images = [];
1085
1212
 
1086
- const canvas = getCanvas();
1213
+ const imageDef = { mimeType: mimeType };
1087
1214
 
1088
- canvas.width = Math.min( image.width, options.maxTextureSize );
1089
- canvas.height = Math.min( image.height, options.maxTextureSize );
1215
+ const canvas = getCanvas();
1090
1216
 
1091
- const ctx = canvas.getContext( '2d' );
1217
+ canvas.width = Math.min( image.width, options.maxTextureSize );
1218
+ canvas.height = Math.min( image.height, options.maxTextureSize );
1092
1219
 
1093
- if ( flipY === true ) {
1220
+ const ctx = canvas.getContext( '2d' );
1094
1221
 
1095
- ctx.translate( 0, canvas.height );
1096
- ctx.scale( 1, - 1 );
1222
+ if ( flipY === true ) {
1097
1223
 
1098
- }
1224
+ ctx.translate( 0, canvas.height );
1225
+ ctx.scale( 1, - 1 );
1226
+
1227
+ }
1099
1228
 
1100
- if ( image.data !== undefined ) { // THREE.DataTexture
1229
+ if ( image.data !== undefined ) { // THREE.DataTexture
1101
1230
 
1102
- if ( format !== RGBAFormat ) {
1231
+ if ( format !== RGBAFormat ) {
1103
1232
 
1104
- console.error( 'GLTFExporter: Only RGBAFormat is supported.' );
1233
+ console.error( 'GLTFExporter: Only RGBAFormat is supported.' );
1105
1234
 
1106
- }
1235
+ }
1107
1236
 
1108
- if ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {
1237
+ if ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {
1109
1238
 
1110
- console.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );
1239
+ console.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );
1111
1240
 
1112
- }
1241
+ }
1113
1242
 
1114
- const data = new Uint8ClampedArray( image.height * image.width * 4 );
1243
+ const data = new Uint8ClampedArray( image.height * image.width * 4 );
1115
1244
 
1116
- for ( let i = 0; i < data.length; i += 4 ) {
1245
+ for ( let i = 0; i < data.length; i += 4 ) {
1117
1246
 
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 ];
1247
+ data[ i + 0 ] = image.data[ i + 0 ];
1248
+ data[ i + 1 ] = image.data[ i + 1 ];
1249
+ data[ i + 2 ] = image.data[ i + 2 ];
1250
+ data[ i + 3 ] = image.data[ i + 3 ];
1122
1251
 
1123
- }
1252
+ }
1124
1253
 
1125
- ctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );
1254
+ ctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );
1126
1255
 
1127
- } else {
1256
+ } else {
1128
1257
 
1129
- ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
1258
+ ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
1130
1259
 
1131
- }
1260
+ }
1132
1261
 
1133
- if ( options.binary === true ) {
1262
+ if ( options.binary === true ) {
1134
1263
 
1135
- pending.push(
1264
+ pending.push(
1136
1265
 
1137
- getToBlobPromise( canvas, mimeType )
1138
- .then( blob => writer.processBufferViewImage( blob ) )
1139
- .then( bufferViewIndex => {
1266
+ getToBlobPromise( canvas, mimeType )
1267
+ .then( blob => writer.processBufferViewImage( blob ) )
1268
+ .then( bufferViewIndex => {
1140
1269
 
1141
- imageDef.bufferView = bufferViewIndex;
1270
+ imageDef.bufferView = bufferViewIndex;
1142
1271
 
1143
- } )
1272
+ } )
1144
1273
 
1145
- );
1274
+ );
1146
1275
 
1147
- } else {
1276
+ } else {
1148
1277
 
1149
- if ( canvas.toDataURL !== undefined ) {
1278
+ if ( canvas.toDataURL !== undefined ) {
1150
1279
 
1151
- imageDef.uri = canvas.toDataURL( mimeType );
1280
+ imageDef.uri = canvas.toDataURL( mimeType );
1152
1281
 
1153
- } else {
1282
+ } else {
1154
1283
 
1155
- pending.push(
1284
+ pending.push(
1156
1285
 
1157
- getToBlobPromise( canvas, mimeType )
1158
- .then( blob => new FileReader().readAsDataURL( blob ) )
1159
- .then( dataURL => {
1286
+ getToBlobPromise( canvas, mimeType )
1287
+ .then( blob => new FileReader().readAsDataURL( blob ) )
1288
+ .then( dataURL => {
1160
1289
 
1161
- imageDef.uri = dataURL;
1290
+ imageDef.uri = dataURL;
1162
1291
 
1163
- } )
1292
+ } )
1164
1293
 
1165
- );
1294
+ );
1295
+
1296
+ }
1166
1297
 
1167
1298
  }
1168
1299
 
1169
- }
1300
+ const index = json.images.push( imageDef ) - 1;
1301
+ cachedImages[ key ] = index;
1302
+ return index;
1170
1303
 
1171
- const index = json.images.push( imageDef ) - 1;
1172
- cachedImages[ key ] = index;
1173
- return index;
1304
+ } else {
1305
+
1306
+ throw new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );
1307
+
1308
+ }
1174
1309
 
1175
1310
  }
1176
1311
 
@@ -1289,16 +1424,22 @@ class GLTFWriter {
1289
1424
 
1290
1425
  const metalRoughTexture = this.buildMetalRoughTexture( material.metalnessMap, material.roughnessMap );
1291
1426
 
1292
- const metalRoughMapDef = { index: this.processTexture( metalRoughTexture ) };
1427
+ const metalRoughMapDef = {
1428
+ index: this.processTexture( metalRoughTexture ),
1429
+ channel: metalRoughTexture.channel
1430
+ };
1293
1431
  this.applyTextureTransform( metalRoughMapDef, metalRoughTexture );
1294
1432
  materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
1295
1433
 
1296
1434
  }
1297
1435
 
1298
- // pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture
1436
+ // pbrMetallicRoughness.baseColorTexture
1299
1437
  if ( material.map ) {
1300
1438
 
1301
- const baseColorMapDef = { index: this.processTexture( material.map ) };
1439
+ const baseColorMapDef = {
1440
+ index: this.processTexture( material.map ),
1441
+ texCoord: material.map.channel
1442
+ };
1302
1443
  this.applyTextureTransform( baseColorMapDef, material.map );
1303
1444
  materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;
1304
1445
 
@@ -1306,28 +1447,22 @@ class GLTFWriter {
1306
1447
 
1307
1448
  if ( material.emissive ) {
1308
1449
 
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 );
1450
+ const emissive = material.emissive;
1311
1451
  const maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );
1312
1452
 
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
1453
  if ( maxEmissiveComponent > 0 ) {
1322
1454
 
1323
- materialDef.emissiveFactor = emissive.toArray();
1455
+ materialDef.emissiveFactor = material.emissive.toArray();
1324
1456
 
1325
1457
  }
1326
1458
 
1327
1459
  // emissiveTexture
1328
1460
  if ( material.emissiveMap ) {
1329
1461
 
1330
- const emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };
1462
+ const emissiveMapDef = {
1463
+ index: this.processTexture( material.emissiveMap ),
1464
+ texCoord: material.emissiveMap.channel
1465
+ };
1331
1466
  this.applyTextureTransform( emissiveMapDef, material.emissiveMap );
1332
1467
  materialDef.emissiveTexture = emissiveMapDef;
1333
1468
 
@@ -1338,7 +1473,10 @@ class GLTFWriter {
1338
1473
  // normalTexture
1339
1474
  if ( material.normalMap ) {
1340
1475
 
1341
- const normalMapDef = { index: this.processTexture( material.normalMap ) };
1476
+ const normalMapDef = {
1477
+ index: this.processTexture( material.normalMap ),
1478
+ texCoord: material.normalMap.channel
1479
+ };
1342
1480
 
1343
1481
  if ( material.normalScale && material.normalScale.x !== 1 ) {
1344
1482
 
@@ -1358,7 +1496,7 @@ class GLTFWriter {
1358
1496
 
1359
1497
  const occlusionMapDef = {
1360
1498
  index: this.processTexture( material.aoMap ),
1361
- texCoord: 1
1499
+ texCoord: material.aoMap.channel
1362
1500
  };
1363
1501
 
1364
1502
  if ( material.aoMapIntensity !== 1.0 ) {
@@ -1471,7 +1609,7 @@ class GLTFWriter {
1471
1609
  // Conversion between attributes names in threejs and gltf spec
1472
1610
  const nameConversion = {
1473
1611
  uv: 'TEXCOORD_0',
1474
- uv2: 'TEXCOORD_1',
1612
+ uv1: 'TEXCOORD_1',
1475
1613
  color: 'COLOR_0',
1476
1614
  skinWeight: 'WEIGHTS_0',
1477
1615
  skinIndex: 'JOINTS_0'
@@ -1530,6 +1668,12 @@ class GLTFWriter {
1530
1668
 
1531
1669
  if ( accessor !== null ) {
1532
1670
 
1671
+ if ( ! attributeName.startsWith( '_' ) ) {
1672
+
1673
+ this.detectMeshQuantization( attributeName, attribute );
1674
+
1675
+ }
1676
+
1533
1677
  attributes[ attributeName ] = accessor;
1534
1678
  cache.attributes.set( this.getUID( attribute ), accessor );
1535
1679
 
@@ -1606,12 +1750,14 @@ class GLTFWriter {
1606
1750
 
1607
1751
  for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {
1608
1752
 
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
- );
1753
+ for ( let a = 0; a < attribute.itemSize; a ++ ) {
1754
+
1755
+ if ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );
1756
+ if ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );
1757
+ if ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );
1758
+ if ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );
1759
+
1760
+ }
1615
1761
 
1616
1762
  }
1617
1763
 
@@ -1708,6 +1854,68 @@ class GLTFWriter {
1708
1854
 
1709
1855
  }
1710
1856
 
1857
+ /**
1858
+ * If a vertex attribute with a
1859
+ * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)
1860
+ * is used, it is checked whether it is a valid data type according to the
1861
+ * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)
1862
+ * extension.
1863
+ * In this case the extension is automatically added to the list of used extensions.
1864
+ *
1865
+ * @param {string} attributeName
1866
+ * @param {THREE.BufferAttribute} attribute
1867
+ */
1868
+ detectMeshQuantization( attributeName, attribute ) {
1869
+
1870
+ if ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;
1871
+
1872
+ let attrType = undefined;
1873
+
1874
+ switch ( attribute.array.constructor ) {
1875
+
1876
+ case Int8Array:
1877
+
1878
+ attrType = 'byte';
1879
+
1880
+ break;
1881
+
1882
+ case Uint8Array:
1883
+
1884
+ attrType = 'unsigned byte';
1885
+
1886
+ break;
1887
+
1888
+ case Int16Array:
1889
+
1890
+ attrType = 'short';
1891
+
1892
+ break;
1893
+
1894
+ case Uint16Array:
1895
+
1896
+ attrType = 'unsigned short';
1897
+
1898
+ break;
1899
+
1900
+ default:
1901
+
1902
+ return;
1903
+
1904
+ }
1905
+
1906
+ if ( attribute.normalized ) attrType += ' normalized';
1907
+
1908
+ const attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];
1909
+
1910
+ if ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {
1911
+
1912
+ this.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;
1913
+ this.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;
1914
+
1915
+ }
1916
+
1917
+ }
1918
+
1711
1919
  /**
1712
1920
  * Process camera
1713
1921
  * @param {THREE.Camera} camera Camera to process
@@ -2291,7 +2499,7 @@ class GLTFMaterialsClearcoatExtension {
2291
2499
 
2292
2500
  writeMaterial( material, materialDef ) {
2293
2501
 
2294
- if ( ! material.isMeshPhysicalMaterial ) return;
2502
+ if ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;
2295
2503
 
2296
2504
  const writer = this.writer;
2297
2505
  const extensionsUsed = writer.extensionsUsed;
@@ -2302,7 +2510,10 @@ class GLTFMaterialsClearcoatExtension {
2302
2510
 
2303
2511
  if ( material.clearcoatMap ) {
2304
2512
 
2305
- const clearcoatMapDef = { index: writer.processTexture( material.clearcoatMap ) };
2513
+ const clearcoatMapDef = {
2514
+ index: writer.processTexture( material.clearcoatMap ),
2515
+ texCoord: material.clearcoatMap.channel
2516
+ };
2306
2517
  writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
2307
2518
  extensionDef.clearcoatTexture = clearcoatMapDef;
2308
2519
 
@@ -2312,7 +2523,10 @@ class GLTFMaterialsClearcoatExtension {
2312
2523
 
2313
2524
  if ( material.clearcoatRoughnessMap ) {
2314
2525
 
2315
- const clearcoatRoughnessMapDef = { index: writer.processTexture( material.clearcoatRoughnessMap ) };
2526
+ const clearcoatRoughnessMapDef = {
2527
+ index: writer.processTexture( material.clearcoatRoughnessMap ),
2528
+ texCoord: material.clearcoatRoughnessMap.channel
2529
+ };
2316
2530
  writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
2317
2531
  extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;
2318
2532
 
@@ -2320,7 +2534,10 @@ class GLTFMaterialsClearcoatExtension {
2320
2534
 
2321
2535
  if ( material.clearcoatNormalMap ) {
2322
2536
 
2323
- const clearcoatNormalMapDef = { index: writer.processTexture( material.clearcoatNormalMap ) };
2537
+ const clearcoatNormalMapDef = {
2538
+ index: writer.processTexture( material.clearcoatNormalMap ),
2539
+ texCoord: material.clearcoatNormalMap.channel
2540
+ };
2324
2541
  writer.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );
2325
2542
  extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;
2326
2543
 
@@ -2352,7 +2569,7 @@ class GLTFMaterialsIridescenceExtension {
2352
2569
 
2353
2570
  writeMaterial( material, materialDef ) {
2354
2571
 
2355
- if ( ! material.isMeshPhysicalMaterial ) return;
2572
+ if ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;
2356
2573
 
2357
2574
  const writer = this.writer;
2358
2575
  const extensionsUsed = writer.extensionsUsed;
@@ -2363,7 +2580,10 @@ class GLTFMaterialsIridescenceExtension {
2363
2580
 
2364
2581
  if ( material.iridescenceMap ) {
2365
2582
 
2366
- const iridescenceMapDef = { index: writer.processTexture( material.iridescenceMap ) };
2583
+ const iridescenceMapDef = {
2584
+ index: writer.processTexture( material.iridescenceMap ),
2585
+ texCoord: material.iridescenceMap.channel
2586
+ };
2367
2587
  writer.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );
2368
2588
  extensionDef.iridescenceTexture = iridescenceMapDef;
2369
2589
 
@@ -2375,7 +2595,10 @@ class GLTFMaterialsIridescenceExtension {
2375
2595
 
2376
2596
  if ( material.iridescenceThicknessMap ) {
2377
2597
 
2378
- const iridescenceThicknessMapDef = { index: writer.processTexture( material.iridescenceThicknessMap ) };
2598
+ const iridescenceThicknessMapDef = {
2599
+ index: writer.processTexture( material.iridescenceThicknessMap ),
2600
+ texCoord: material.iridescenceThicknessMap.channel
2601
+ };
2379
2602
  writer.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );
2380
2603
  extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;
2381
2604
 
@@ -2417,7 +2640,10 @@ class GLTFMaterialsTransmissionExtension {
2417
2640
 
2418
2641
  if ( material.transmissionMap ) {
2419
2642
 
2420
- const transmissionMapDef = { index: writer.processTexture( material.transmissionMap ) };
2643
+ const transmissionMapDef = {
2644
+ index: writer.processTexture( material.transmissionMap ),
2645
+ texCoord: material.transmissionMap.channel
2646
+ };
2421
2647
  writer.applyTextureTransform( transmissionMapDef, material.transmissionMap );
2422
2648
  extensionDef.transmissionTexture = transmissionMapDef;
2423
2649
 
@@ -2459,7 +2685,10 @@ class GLTFMaterialsVolumeExtension {
2459
2685
 
2460
2686
  if ( material.thicknessMap ) {
2461
2687
 
2462
- const thicknessMapDef = { index: writer.processTexture( material.thicknessMap ) };
2688
+ const thicknessMapDef = {
2689
+ index: writer.processTexture( material.thicknessMap ),
2690
+ texCoord: material.thicknessMap.channel
2691
+ };
2463
2692
  writer.applyTextureTransform( thicknessMapDef, material.thicknessMap );
2464
2693
  extensionDef.thicknessTexture = thicknessMapDef;
2465
2694
 
@@ -2477,6 +2706,190 @@ class GLTFMaterialsVolumeExtension {
2477
2706
 
2478
2707
  }
2479
2708
 
2709
+ /**
2710
+ * Materials ior Extension
2711
+ *
2712
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior
2713
+ */
2714
+ class GLTFMaterialsIorExtension {
2715
+
2716
+ constructor( writer ) {
2717
+
2718
+ this.writer = writer;
2719
+ this.name = 'KHR_materials_ior';
2720
+
2721
+ }
2722
+
2723
+ writeMaterial( material, materialDef ) {
2724
+
2725
+ if ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;
2726
+
2727
+ const writer = this.writer;
2728
+ const extensionsUsed = writer.extensionsUsed;
2729
+
2730
+ const extensionDef = {};
2731
+
2732
+ extensionDef.ior = material.ior;
2733
+
2734
+ materialDef.extensions = materialDef.extensions || {};
2735
+ materialDef.extensions[ this.name ] = extensionDef;
2736
+
2737
+ extensionsUsed[ this.name ] = true;
2738
+
2739
+ }
2740
+
2741
+ }
2742
+
2743
+ /**
2744
+ * Materials specular Extension
2745
+ *
2746
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular
2747
+ */
2748
+ class GLTFMaterialsSpecularExtension {
2749
+
2750
+ constructor( writer ) {
2751
+
2752
+ this.writer = writer;
2753
+ this.name = 'KHR_materials_specular';
2754
+
2755
+ }
2756
+
2757
+ writeMaterial( material, materialDef ) {
2758
+
2759
+ if ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&
2760
+ material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&
2761
+ ! material.specularIntensityMap && ! material.specularColorTexture ) ) return;
2762
+
2763
+ const writer = this.writer;
2764
+ const extensionsUsed = writer.extensionsUsed;
2765
+
2766
+ const extensionDef = {};
2767
+
2768
+ if ( material.specularIntensityMap ) {
2769
+
2770
+ const specularIntensityMapDef = {
2771
+ index: writer.processTexture( material.specularIntensityMap ),
2772
+ texCoord: material.specularIntensityMap.channel
2773
+ };
2774
+ writer.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );
2775
+ extensionDef.specularTexture = specularIntensityMapDef;
2776
+
2777
+ }
2778
+
2779
+ if ( material.specularColorMap ) {
2780
+
2781
+ const specularColorMapDef = {
2782
+ index: writer.processTexture( material.specularColorMap ),
2783
+ texCoord: material.specularColorMap.channel
2784
+ };
2785
+ writer.applyTextureTransform( specularColorMapDef, material.specularColorMap );
2786
+ extensionDef.specularColorTexture = specularColorMapDef;
2787
+
2788
+ }
2789
+
2790
+ extensionDef.specularFactor = material.specularIntensity;
2791
+ extensionDef.specularColorFactor = material.specularColor.toArray();
2792
+
2793
+ materialDef.extensions = materialDef.extensions || {};
2794
+ materialDef.extensions[ this.name ] = extensionDef;
2795
+
2796
+ extensionsUsed[ this.name ] = true;
2797
+
2798
+ }
2799
+
2800
+ }
2801
+
2802
+ /**
2803
+ * Sheen Materials Extension
2804
+ *
2805
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
2806
+ */
2807
+ class GLTFMaterialsSheenExtension {
2808
+
2809
+ constructor( writer ) {
2810
+
2811
+ this.writer = writer;
2812
+ this.name = 'KHR_materials_sheen';
2813
+
2814
+ }
2815
+
2816
+ writeMaterial( material, materialDef ) {
2817
+
2818
+ if ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;
2819
+
2820
+ const writer = this.writer;
2821
+ const extensionsUsed = writer.extensionsUsed;
2822
+
2823
+ const extensionDef = {};
2824
+
2825
+ if ( material.sheenRoughnessMap ) {
2826
+
2827
+ const sheenRoughnessMapDef = {
2828
+ index: writer.processTexture( material.sheenRoughnessMap ),
2829
+ texCoord: material.sheenRoughnessMap.channel
2830
+ };
2831
+ writer.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );
2832
+ extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;
2833
+
2834
+ }
2835
+
2836
+ if ( material.sheenColorMap ) {
2837
+
2838
+ const sheenColorMapDef = {
2839
+ index: writer.processTexture( material.sheenColorMap ),
2840
+ texCoord: material.sheenColorMap.channel
2841
+ };
2842
+ writer.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );
2843
+ extensionDef.sheenColorTexture = sheenColorMapDef;
2844
+
2845
+ }
2846
+
2847
+ extensionDef.sheenRoughnessFactor = material.sheenRoughness;
2848
+ extensionDef.sheenColorFactor = material.sheenColor.toArray();
2849
+
2850
+ materialDef.extensions = materialDef.extensions || {};
2851
+ materialDef.extensions[ this.name ] = extensionDef;
2852
+
2853
+ extensionsUsed[ this.name ] = true;
2854
+
2855
+ }
2856
+
2857
+ }
2858
+
2859
+ /**
2860
+ * Materials Emissive Strength Extension
2861
+ *
2862
+ * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md
2863
+ */
2864
+ class GLTFMaterialsEmissiveStrengthExtension {
2865
+
2866
+ constructor( writer ) {
2867
+
2868
+ this.writer = writer;
2869
+ this.name = 'KHR_materials_emissive_strength';
2870
+
2871
+ }
2872
+
2873
+ writeMaterial( material, materialDef ) {
2874
+
2875
+ if ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;
2876
+
2877
+ const writer = this.writer;
2878
+ const extensionsUsed = writer.extensionsUsed;
2879
+
2880
+ const extensionDef = {};
2881
+
2882
+ extensionDef.emissiveStrength = material.emissiveIntensity;
2883
+
2884
+ materialDef.extensions = materialDef.extensions || {};
2885
+ materialDef.extensions[ this.name ] = extensionDef;
2886
+
2887
+ extensionsUsed[ this.name ] = true;
2888
+
2889
+ }
2890
+
2891
+ }
2892
+
2480
2893
  /**
2481
2894
  * Static utility functions
2482
2895
  */