super-three 0.133.4 → 0.136.1

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 (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -514,9 +514,6 @@
514
514
 
515
515
  }
516
516
 
517
- function handleMouseUp() { // no-op
518
- }
519
-
520
517
  function handleMouseWheel( event ) {
521
518
 
522
519
  if ( event.deltaY < 0 ) {
@@ -696,9 +693,6 @@
696
693
  if ( scope.enableZoom ) handleTouchMoveDolly( event );
697
694
  if ( scope.enableRotate ) handleTouchMoveRotate( event );
698
695
 
699
- }
700
-
701
- function handleTouchEnd() { // no-op
702
696
  } //
703
697
  // event handlers - FSM: listen for events and reset state
704
698
  //
@@ -749,19 +743,7 @@
749
743
 
750
744
  function onPointerUp( event ) {
751
745
 
752
- if ( scope.enabled === false ) return;
753
-
754
- if ( event.pointerType === 'touch' ) {
755
-
756
- onTouchEnd();
757
-
758
- } else {
759
-
760
- onMouseUp( event );
761
-
762
- }
763
-
764
- removePointer( event ); //
746
+ removePointer( event );
765
747
 
766
748
  if ( pointers.length === 0 ) {
767
749
 
@@ -771,6 +753,9 @@
771
753
 
772
754
  }
773
755
 
756
+ scope.dispatchEvent( _endEvent );
757
+ state = STATE.NONE;
758
+
774
759
  }
775
760
 
776
761
  function onPointerCancel( event ) {
@@ -882,17 +867,9 @@
882
867
 
883
868
  }
884
869
 
885
- function onMouseUp( event ) {
886
-
887
- handleMouseUp( event );
888
- scope.dispatchEvent( _endEvent );
889
- state = STATE.NONE;
890
-
891
- }
892
-
893
870
  function onMouseWheel( event ) {
894
871
 
895
- if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE ) return;
872
+ if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;
896
873
  event.preventDefault();
897
874
  scope.dispatchEvent( _startEvent );
898
875
  handleMouseWheel( event );
@@ -1007,14 +984,6 @@
1007
984
 
1008
985
  }
1009
986
 
1010
- function onTouchEnd( event ) {
1011
-
1012
- handleTouchEnd( event );
1013
- scope.dispatchEvent( _endEvent );
1014
- state = STATE.NONE;
1015
-
1016
- }
1017
-
1018
987
  function onContextMenu( event ) {
1019
988
 
1020
989
  if ( scope.enabled === false ) return;
@@ -117,7 +117,8 @@
117
117
  const vector = new THREE.Vector2();
118
118
  return function getMouseOnCircle( pageX, pageY ) {
119
119
 
120
- vector.set( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ), ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width );
120
+ vector.set( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ), ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width // screen.width intentional
121
+ );
121
122
  return vector;
122
123
 
123
124
  };
@@ -194,7 +195,7 @@
194
195
 
195
196
  } else if ( scope.object.isOrthographicCamera ) {
196
197
 
197
- scope.object.zoom *= factor;
198
+ scope.object.zoom /= factor;
198
199
  scope.object.updateProjectionMatrix();
199
200
 
200
201
  } else {
@@ -532,6 +532,23 @@
532
532
 
533
533
  }
534
534
 
535
+ reset() {
536
+
537
+ if ( ! this.enabled ) return;
538
+
539
+ if ( this.dragging ) {
540
+
541
+ this.object.position.copy( this._positionStart );
542
+ this.object.quaternion.copy( this._quaternionStart );
543
+ this.object.scale.copy( this._scaleStart );
544
+ this.dispatchEvent( _changeEvent );
545
+ this.dispatchEvent( _objectChangeEvent );
546
+ this.pointStart.copy( this.pointEnd );
547
+
548
+ }
549
+
550
+ }
551
+
535
552
  getRaycaster() {
536
553
 
537
554
  return _raycaster;
@@ -632,7 +649,13 @@
632
649
  function onPointerDown( event ) {
633
650
 
634
651
  if ( ! this.enabled ) return;
635
- this.domElement.setPointerCapture( event.pointerId );
652
+
653
+ if ( ! document.pointerLockElement ) {
654
+
655
+ this.domElement.setPointerCapture( event.pointerId );
656
+
657
+ }
658
+
636
659
  this.domElement.addEventListener( 'pointermove', this._onPointerMove );
637
660
  this.pointerHover( this._getPointer( event ) );
638
661
  this.pointerDown( this._getPointer( event ) );
@@ -2,7 +2,7 @@
2
2
 
3
3
  const _cameraToLightMatrix = new THREE.Matrix4();
4
4
 
5
- const _lightSpaceFrustum = new THREE.Frustum();
5
+ const _lightSpaceFrustum = new THREE.CSMFrustum();
6
6
 
7
7
  const _center = new THREE.Vector3();
8
8
 
@@ -29,7 +29,7 @@
29
29
  this.lightMargin = data.lightMargin || 200;
30
30
  this.customSplitsCallback = data.customSplitsCallback;
31
31
  this.fade = false;
32
- this.mainFrustum = new THREE.Frustum();
32
+ this.mainFrustum = new THREE.CSMFrustum();
33
33
  this.frustums = [];
34
34
  this.breaks = [];
35
35
  this.lights = [];
@@ -0,0 +1,133 @@
1
+ ( function () {
2
+
3
+ const inverseProjectionMatrix = new THREE.Matrix4();
4
+
5
+ class CSMFrustum {
6
+
7
+ constructor( data ) {
8
+
9
+ data = data || {};
10
+ this.vertices = {
11
+ near: [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ],
12
+ far: [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ]
13
+ };
14
+
15
+ if ( data.projectionMatrix !== undefined ) {
16
+
17
+ this.setFromProjectionMatrix( data.projectionMatrix, data.maxFar || 10000 );
18
+
19
+ }
20
+
21
+ }
22
+
23
+ setFromProjectionMatrix( projectionMatrix, maxFar ) {
24
+
25
+ const isOrthographic = projectionMatrix.elements[ 2 * 4 + 3 ] === 0;
26
+ inverseProjectionMatrix.copy( projectionMatrix ).invert(); // 3 --- 0 vertices.near/far order
27
+ // | |
28
+ // 2 --- 1
29
+ // clip space spans from [-1, 1]
30
+
31
+ this.vertices.near[ 0 ].set( 1, 1, - 1 );
32
+ this.vertices.near[ 1 ].set( 1, - 1, - 1 );
33
+ this.vertices.near[ 2 ].set( - 1, - 1, - 1 );
34
+ this.vertices.near[ 3 ].set( - 1, 1, - 1 );
35
+ this.vertices.near.forEach( function ( v ) {
36
+
37
+ v.applyMatrix4( inverseProjectionMatrix );
38
+
39
+ } );
40
+ this.vertices.far[ 0 ].set( 1, 1, 1 );
41
+ this.vertices.far[ 1 ].set( 1, - 1, 1 );
42
+ this.vertices.far[ 2 ].set( - 1, - 1, 1 );
43
+ this.vertices.far[ 3 ].set( - 1, 1, 1 );
44
+ this.vertices.far.forEach( function ( v ) {
45
+
46
+ v.applyMatrix4( inverseProjectionMatrix );
47
+ const absZ = Math.abs( v.z );
48
+
49
+ if ( isOrthographic ) {
50
+
51
+ v.z *= Math.min( maxFar / absZ, 1.0 );
52
+
53
+ } else {
54
+
55
+ v.multiplyScalar( Math.min( maxFar / absZ, 1.0 ) );
56
+
57
+ }
58
+
59
+ } );
60
+ return this.vertices;
61
+
62
+ }
63
+
64
+ split( breaks, target ) {
65
+
66
+ while ( breaks.length > target.length ) {
67
+
68
+ target.push( new CSMFrustum() );
69
+
70
+ }
71
+
72
+ target.length = breaks.length;
73
+
74
+ for ( let i = 0; i < breaks.length; i ++ ) {
75
+
76
+ const cascade = target[ i ];
77
+
78
+ if ( i === 0 ) {
79
+
80
+ for ( let j = 0; j < 4; j ++ ) {
81
+
82
+ cascade.vertices.near[ j ].copy( this.vertices.near[ j ] );
83
+
84
+ }
85
+
86
+ } else {
87
+
88
+ for ( let j = 0; j < 4; j ++ ) {
89
+
90
+ cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i - 1 ] );
91
+
92
+ }
93
+
94
+ }
95
+
96
+ if ( i === breaks.length - 1 ) {
97
+
98
+ for ( let j = 0; j < 4; j ++ ) {
99
+
100
+ cascade.vertices.far[ j ].copy( this.vertices.far[ j ] );
101
+
102
+ }
103
+
104
+ } else {
105
+
106
+ for ( let j = 0; j < 4; j ++ ) {
107
+
108
+ cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i ] );
109
+
110
+ }
111
+
112
+ }
113
+
114
+ }
115
+
116
+ }
117
+
118
+ toSpace( cameraMatrix, target ) {
119
+
120
+ for ( var i = 0; i < 4; i ++ ) {
121
+
122
+ target.vertices.near[ i ].copy( this.vertices.near[ i ] ).applyMatrix4( cameraMatrix );
123
+ target.vertices.far[ i ].copy( this.vertices.far[ i ] ).applyMatrix4( cameraMatrix );
124
+
125
+ }
126
+
127
+ }
128
+
129
+ }
130
+
131
+ THREE.CSMFrustum = CSMFrustum;
132
+
133
+ } )();
@@ -5,9 +5,7 @@
5
5
  *
6
6
  * Formulas collected from various sources
7
7
  * http://mathworld.wolfram.com/HeartCurve.html
8
- * http://mathdl.maa.org/images/upload_library/23/stemkoski/knots/page6.html
9
8
  * http://en.wikipedia.org/wiki/Viviani%27s_curve
10
- * http://mathdl.maa.org/images/upload_library/23/stemkoski/knots/page4.html
11
9
  * http://www.mi.sanu.ac.rs/vismath/taylorapril2011/Taylor.pdf
12
10
  * https://prideout.net/blog/old/blog/index.html@p=44.html
13
11
  */
@@ -1,8 +1,7 @@
1
1
  ( function () {
2
2
 
3
3
  /**
4
- * Ascii generation is based on http://www.nihilogic.dk/labs/jsascii/
5
- * Maybe more about this later with a blog post at http://lab4games.net/zz85/blog
4
+ * Ascii generation is based on https://github.com/hassadee/jsascii/blob/master/jsascii.js
6
5
  *
7
6
  * 16 April 2012 - @blurspline
8
7
  */
@@ -50,13 +49,7 @@
50
49
 
51
50
  };
52
51
 
53
- this.domElement = domElement; // Throw in ascii library from http://www.nihilogic.dk/labs/jsascii/jsascii.js
54
-
55
- /*
56
- * jsAscii 0.1
57
- * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
58
- * MIT License [http://www.nihilogic.dk/licenses/mit-license.txt]
59
- */
52
+ this.domElement = domElement; // Throw in ascii library from https://github.com/hassadee/jsascii/blob/master/jsascii.js (MIT License)
60
53
 
61
54
  function initAsciiSize() {
62
55
 
@@ -30,6 +30,11 @@
30
30
  return new GLTFMaterialsVolumeExtension( writer );
31
31
 
32
32
  } );
33
+ this.register( function ( writer ) {
34
+
35
+ return new GLTFMaterialsClearcoatExtension( writer );
36
+
37
+ } );
33
38
 
34
39
  }
35
40
 
@@ -60,11 +65,19 @@
60
65
  * Parse scenes and generate GLTF output
61
66
  * @param {Scene or [THREE.Scenes]} input THREE.Scene or Array of THREE.Scenes
62
67
  * @param {Function} onDone Callback on completed
68
+ * @param {Function} onError Callback on errors
63
69
  * @param {Object} options options
64
70
  */
65
71
 
66
72
 
67
- parse( input, onDone, options ) {
73
+ parse( input, onDone, onError, options ) {
74
+
75
+ if ( typeof onError === 'object' ) {
76
+
77
+ console.warn( 'THREE.GLTFExporter: parse() expects options as the fourth argument now.' );
78
+ options = onError;
79
+
80
+ }
68
81
 
69
82
  const writer = new GLTFWriter();
70
83
  const plugins = [];
@@ -76,7 +89,18 @@
76
89
  }
77
90
 
78
91
  writer.setPlugins( plugins );
79
- writer.write( input, onDone, options );
92
+ writer.write( input, onDone, options ).catch( onError );
93
+
94
+ }
95
+
96
+ parseAsync( input, options ) {
97
+
98
+ const scope = this;
99
+ return new Promise( function ( resolve, reject ) {
100
+
101
+ scope.parse( input, resolve, reject, options );
102
+
103
+ } );
80
104
 
81
105
  }
82
106
 
@@ -337,7 +361,7 @@
337
361
  */
338
362
 
339
363
 
340
- write( input, onDone, options ) {
364
+ async write( input, onDone, options ) {
341
365
 
342
366
  this.options = Object.assign( {}, {
343
367
  // default options
@@ -359,86 +383,83 @@
359
383
  }
360
384
 
361
385
  this.processInput( input );
386
+ await Promise.all( this.pending );
362
387
  const writer = this;
363
- Promise.all( this.pending ).then( function () {
364
-
365
- const buffers = writer.buffers;
366
- const json = writer.json;
367
- const options = writer.options;
368
- const extensionsUsed = writer.extensionsUsed; // Merge buffers.
369
-
370
- const blob = new Blob( buffers, {
371
- type: 'application/octet-stream'
372
- } ); // Declare extensions.
373
-
374
- const extensionsUsedList = Object.keys( extensionsUsed );
375
- if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList; // Update bytelength of the single buffer.
376
-
377
- if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
378
-
379
- if ( options.binary === true ) {
380
-
381
- // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
382
- const reader = new window.FileReader();
383
- reader.readAsArrayBuffer( blob );
388
+ const buffers = writer.buffers;
389
+ const json = writer.json;
390
+ options = writer.options;
391
+ const extensionsUsed = writer.extensionsUsed; // Merge buffers.
384
392
 
385
- reader.onloadend = function () {
393
+ const blob = new Blob( buffers, {
394
+ type: 'application/octet-stream'
395
+ } ); // Declare extensions.
386
396
 
387
- // Binary chunk.
388
- const binaryChunk = getPaddedArrayBuffer( reader.result );
389
- const binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
390
- binaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );
391
- binaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true ); // JSON chunk.
397
+ const extensionsUsedList = Object.keys( extensionsUsed );
398
+ if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList; // Update bytelength of the single buffer.
392
399
 
393
- const jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );
394
- const jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
395
- jsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );
396
- jsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true ); // GLB header.
400
+ if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
397
401
 
398
- const header = new ArrayBuffer( GLB_HEADER_BYTES );
399
- const headerView = new DataView( header );
400
- headerView.setUint32( 0, GLB_HEADER_MAGIC, true );
401
- headerView.setUint32( 4, GLB_VERSION, true );
402
- const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
403
- headerView.setUint32( 8, totalByteLength, true );
404
- const glbBlob = new Blob( [ header, jsonChunkPrefix, jsonChunk, binaryChunkPrefix, binaryChunk ], {
405
- type: 'application/octet-stream'
406
- } );
407
- const glbReader = new window.FileReader();
408
- glbReader.readAsArrayBuffer( glbBlob );
402
+ if ( options.binary === true ) {
409
403
 
410
- glbReader.onloadend = function () {
404
+ // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
405
+ const reader = new window.FileReader();
406
+ reader.readAsArrayBuffer( blob );
411
407
 
412
- onDone( glbReader.result );
408
+ reader.onloadend = function () {
413
409
 
414
- };
410
+ // Binary chunk.
411
+ const binaryChunk = getPaddedArrayBuffer( reader.result );
412
+ const binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
413
+ binaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );
414
+ binaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true ); // JSON chunk.
415
+
416
+ const jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );
417
+ const jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
418
+ jsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );
419
+ jsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true ); // GLB header.
420
+
421
+ const header = new ArrayBuffer( GLB_HEADER_BYTES );
422
+ const headerView = new DataView( header );
423
+ headerView.setUint32( 0, GLB_HEADER_MAGIC, true );
424
+ headerView.setUint32( 4, GLB_VERSION, true );
425
+ const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
426
+ headerView.setUint32( 8, totalByteLength, true );
427
+ const glbBlob = new Blob( [ header, jsonChunkPrefix, jsonChunk, binaryChunkPrefix, binaryChunk ], {
428
+ type: 'application/octet-stream'
429
+ } );
430
+ const glbReader = new window.FileReader();
431
+ glbReader.readAsArrayBuffer( glbBlob );
432
+
433
+ glbReader.onloadend = function () {
434
+
435
+ onDone( glbReader.result );
415
436
 
416
437
  };
417
438
 
418
- } else {
439
+ };
419
440
 
420
- if ( json.buffers && json.buffers.length > 0 ) {
441
+ } else {
421
442
 
422
- const reader = new window.FileReader();
423
- reader.readAsDataURL( blob );
443
+ if ( json.buffers && json.buffers.length > 0 ) {
424
444
 
425
- reader.onloadend = function () {
445
+ const reader = new window.FileReader();
446
+ reader.readAsDataURL( blob );
426
447
 
427
- const base64data = reader.result;
428
- json.buffers[ 0 ].uri = base64data;
429
- onDone( json );
448
+ reader.onloadend = function () {
430
449
 
431
- };
450
+ const base64data = reader.result;
451
+ json.buffers[ 0 ].uri = base64data;
452
+ onDone( json );
432
453
 
433
- } else {
454
+ };
434
455
 
435
- onDone( json );
456
+ } else {
436
457
 
437
- }
458
+ onDone( json );
438
459
 
439
460
  }
440
461
 
441
- } );
462
+ }
442
463
 
443
464
  }
444
465
  /**
@@ -2013,7 +2034,7 @@
2013
2034
  /**
2014
2035
  * Specular-Glossiness Extension
2015
2036
  *
2016
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
2037
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
2017
2038
  */
2018
2039
 
2019
2040
 
@@ -2066,6 +2087,69 @@
2066
2087
 
2067
2088
  }
2068
2089
 
2090
+ }
2091
+ /**
2092
+ * Clearcoat Materials Extension
2093
+ *
2094
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
2095
+ */
2096
+
2097
+
2098
+ class GLTFMaterialsClearcoatExtension {
2099
+
2100
+ constructor( writer ) {
2101
+
2102
+ this.writer = writer;
2103
+ this.name = 'KHR_materials_clearcoat';
2104
+
2105
+ }
2106
+
2107
+ writeMaterial( material, materialDef ) {
2108
+
2109
+ if ( ! material.isMeshPhysicalMaterial ) return;
2110
+ const writer = this.writer;
2111
+ const extensionsUsed = writer.extensionsUsed;
2112
+ const extensionDef = {};
2113
+ extensionDef.clearcoatFactor = material.clearcoat;
2114
+
2115
+ if ( material.clearcoatMap ) {
2116
+
2117
+ const clearcoatMapDef = {
2118
+ index: writer.processTexture( material.clearcoatMap )
2119
+ };
2120
+ writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
2121
+ extensionDef.clearcoatTexture = clearcoatMapDef;
2122
+
2123
+ }
2124
+
2125
+ extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;
2126
+
2127
+ if ( material.clearcoatRoughnessMap ) {
2128
+
2129
+ const clearcoatRoughnessMapDef = {
2130
+ index: writer.processTexture( material.clearcoatRoughnessMap )
2131
+ };
2132
+ writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
2133
+ extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;
2134
+
2135
+ }
2136
+
2137
+ if ( material.clearcoatNormalMap ) {
2138
+
2139
+ const clearcoatNormalMapDef = {
2140
+ index: writer.processTexture( material.clearcoatNormalMap )
2141
+ };
2142
+ writer.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );
2143
+ extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;
2144
+
2145
+ }
2146
+
2147
+ materialDef.extensions = materialDef.extensions || {};
2148
+ materialDef.extensions[ this.name ] = extensionDef;
2149
+ extensionsUsed[ this.name ] = true;
2150
+
2151
+ }
2152
+
2069
2153
  }
2070
2154
  /**
2071
2155
  * Transmission Materials Extension
@@ -2126,7 +2210,7 @@
2126
2210
 
2127
2211
  writeMaterial( material, materialDef ) {
2128
2212
 
2129
- if ( ! material.isMeshPhysicalMaterial || material.thickness === 0 ) return;
2213
+ if ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;
2130
2214
  const writer = this.writer;
2131
2215
  const extensionsUsed = writer.extensionsUsed;
2132
2216
  const extensionDef = {};
@@ -2143,7 +2227,7 @@
2143
2227
  }
2144
2228
 
2145
2229
  extensionDef.attenuationDistance = material.attenuationDistance;
2146
- extensionDef.attenuationColor = material.attenuationTint.toArray();
2230
+ extensionDef.attenuationColor = material.attenuationColor.toArray();
2147
2231
  materialDef.extensions = materialDef.extensions || {};
2148
2232
  materialDef.extensions[ this.name ] = extensionDef;
2149
2233
  extensionsUsed[ this.name ] = true;
@@ -161,7 +161,7 @@
161
161
 
162
162
  if ( value === undefined ) {
163
163
 
164
- throw 'cannot convert charcode 0x' + code.toString( 16 );
164
+ throw new Error( 'cannot convert charcode 0x' + code.toString( 16 ) );
165
165
 
166
166
  } else if ( value > 0xff ) {
167
167