three-stdlib 2.16.0 → 2.16.2

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 (1219) hide show
  1. package/BufferGeometryUtils-1a7a235c.js +655 -0
  2. package/BufferGeometryUtils-971dfde3.js +1 -0
  3. package/Nodes-4f766d71.js +471 -0
  4. package/Nodes-9aa16d74.js +1 -0
  5. package/animation/AnimationClipCreator.cjs.js +1 -0
  6. package/animation/AnimationClipCreator.js +52 -32
  7. package/animation/CCDIKSolver.cjs.js +1 -0
  8. package/animation/CCDIKSolver.js +143 -64
  9. package/animation/MMDAnimationHelper.cjs.js +1 -0
  10. package/animation/MMDAnimationHelper.js +341 -150
  11. package/animation/MMDPhysics.cjs.js +1 -0
  12. package/animation/MMDPhysics.js +361 -154
  13. package/cameras/CinematicCamera.cjs.js +1 -0
  14. package/cameras/CinematicCamera.js +77 -67
  15. package/controls/ArcballControls.cjs.js +1 -0
  16. package/controls/ArcballControls.js +1449 -544
  17. package/controls/DeviceOrientationControls.cjs.js +1 -0
  18. package/controls/DeviceOrientationControls.js +97 -52
  19. package/controls/DragControls.cjs.js +1 -0
  20. package/controls/DragControls.js +187 -85
  21. package/controls/FirstPersonControls.cjs.js +1 -0
  22. package/controls/FirstPersonControls.js +193 -123
  23. package/controls/FlyControls.cjs.js +1 -0
  24. package/controls/FlyControls.d.ts +5 -4
  25. package/controls/FlyControls.js +160 -90
  26. package/controls/OrbitControls.cjs.js +1 -0
  27. package/controls/OrbitControls.js +481 -232
  28. package/controls/PointerLockControls.cjs.js +1 -0
  29. package/controls/PointerLockControls.js +99 -63
  30. package/controls/TrackballControls.cjs.js +1 -0
  31. package/controls/TrackballControls.js +383 -211
  32. package/controls/TransformControls.cjs.js +1 -0
  33. package/controls/TransformControls.js +782 -575
  34. package/controls/experimental/CameraControls.cjs.js +1 -0
  35. package/controls/experimental/CameraControls.js +609 -329
  36. package/csm/CSM.cjs.js +1 -0
  37. package/csm/CSM.js +108 -47
  38. package/csm/CSMFrustum.cjs.js +1 -0
  39. package/csm/CSMFrustum.js +29 -14
  40. package/csm/CSMHelper.cjs.js +1 -0
  41. package/csm/CSMHelper.js +34 -20
  42. package/csm/CSMShader.cjs.js +1 -0
  43. package/csm/CSMShader.js +11 -7
  44. package/curves/CurveExtras.cjs.js +1 -0
  45. package/curves/CurveExtras.js +115 -73
  46. package/curves/NURBSCurve.cjs.js +1 -0
  47. package/curves/NURBSCurve.js +43 -15
  48. package/curves/NURBSSurface.cjs.js +1 -0
  49. package/curves/NURBSSurface.js +27 -11
  50. package/curves/NURBSUtils.cjs.js +1 -0
  51. package/curves/NURBSUtils.js +203 -54
  52. package/custom.d.cjs.js +1 -0
  53. package/{shaders/types.mjs → custom.d.js} +0 -0
  54. package/deprecated/Geometry.cjs.js +1 -0
  55. package/deprecated/Geometry.js +486 -191
  56. package/effects/AnaglyphEffect.cjs.js +1 -0
  57. package/effects/AnaglyphEffect.js +60 -95
  58. package/effects/AsciiEffect.cjs.js +1 -0
  59. package/effects/AsciiEffect.js +110 -80
  60. package/effects/OutlineEffect.cjs.js +1 -0
  61. package/effects/OutlineEffect.js +204 -121
  62. package/effects/ParallaxBarrierEffect.cjs.js +1 -0
  63. package/effects/ParallaxBarrierEffect.js +38 -39
  64. package/effects/PeppersGhostEffect.cjs.js +1 -0
  65. package/effects/PeppersGhostEffect.js +68 -19
  66. package/effects/StereoEffect.cjs.js +1 -0
  67. package/effects/StereoEffect.js +16 -12
  68. package/environments/RoomEnvironment.cjs.js +1 -0
  69. package/environments/RoomEnvironment.js +47 -52
  70. package/exporters/ColladaExporter.cjs.js +1 -0
  71. package/exporters/ColladaExporter.js +241 -115
  72. package/exporters/DRACOExporter.cjs.js +1 -0
  73. package/exporters/DRACOExporter.js +121 -67
  74. package/exporters/GLTFExporter.cjs.js +1 -0
  75. package/exporters/GLTFExporter.js +1014 -463
  76. package/exporters/MMDExporter.cjs.js +1 -0
  77. package/exporters/MMDExporter.js +102 -44
  78. package/exporters/OBJExporter.cjs.js +1 -0
  79. package/exporters/OBJExporter.js +140 -78
  80. package/exporters/PLYExporter.cjs.js +1 -0
  81. package/exporters/PLYExporter.js +154 -93
  82. package/exporters/STLExporter.cjs.js +1 -0
  83. package/exporters/STLExporter.js +81 -30
  84. package/exporters/USDZExporter.cjs.js +1 -0
  85. package/exporters/USDZExporter.js +144 -84
  86. package/geometries/BoxLineGeometry.cjs.js +1 -0
  87. package/geometries/BoxLineGeometry.js +14 -7
  88. package/geometries/ConvexGeometry.cjs.js +1 -0
  89. package/geometries/ConvexGeometry.js +23 -14
  90. package/geometries/DecalGeometry.cjs.js +1 -0
  91. package/geometries/DecalGeometry.js +162 -108
  92. package/geometries/LightningStrike.cjs.js +1 -0
  93. package/geometries/LightningStrike.js +294 -101
  94. package/geometries/ParametricGeometries.cjs.js +1 -0
  95. package/geometries/ParametricGeometries.js +76 -26
  96. package/geometries/ParametricGeometry.cjs.js +1 -0
  97. package/geometries/ParametricGeometry.js +48 -24
  98. package/geometries/RoundedBoxGeometry.cjs.js +1 -0
  99. package/geometries/RoundedBoxGeometry.js +64 -33
  100. package/geometries/TeapotGeometry.cjs.js +1 -0
  101. package/geometries/TeapotGeometry.js +174 -1434
  102. package/geometries/TextGeometry.cjs.js +1 -0
  103. package/geometries/TextGeometry.js +17 -9
  104. package/helpers/LightProbeHelper.cjs.js +1 -0
  105. package/helpers/LightProbeHelper.js +21 -53
  106. package/helpers/PositionalAudioHelper.cjs.js +1 -0
  107. package/helpers/PositionalAudioHelper.js +30 -23
  108. package/helpers/RectAreaLightHelper.cjs.js +1 -0
  109. package/helpers/RectAreaLightHelper.js +33 -17
  110. package/helpers/VertexNormalsHelper.cjs.js +1 -0
  111. package/helpers/VertexNormalsHelper.js +41 -20
  112. package/helpers/VertexTangentsHelper.cjs.js +1 -0
  113. package/helpers/VertexTangentsHelper.js +36 -18
  114. package/index.cjs.js +1 -0
  115. package/index.js +333 -969
  116. package/interactive/InteractiveGroup.cjs.js +1 -0
  117. package/interactive/InteractiveGroup.d.ts +5 -0
  118. package/interactive/InteractiveGroup.js +87 -0
  119. package/interactive/SelectionBox.cjs.js +1 -0
  120. package/interactive/SelectionBox.js +46 -31
  121. package/interactive/SelectionHelper.cjs.js +1 -0
  122. package/interactive/SelectionHelper.js +21 -16
  123. package/libs/MeshoptDecoder.cjs.js +1 -0
  124. package/libs/MeshoptDecoder.js +58 -147
  125. package/libs/MotionControllers.cjs.js +1 -0
  126. package/libs/MotionControllers.js +208 -66
  127. package/lights/LightProbeGenerator.cjs.js +1 -0
  128. package/lights/LightProbeGenerator.js +96 -40
  129. package/lights/RectAreaLightUniformsLib.cjs.js +1 -0
  130. package/lights/RectAreaLightUniformsLib.js +9 -32842
  131. package/lines/Line2.cjs.js +1 -0
  132. package/lines/Line2.js +12 -9
  133. package/lines/LineGeometry.cjs.js +1 -0
  134. package/lines/LineGeometry.js +19 -7
  135. package/lines/LineMaterial.cjs.js +1 -0
  136. package/lines/LineMaterial.js +89 -51
  137. package/lines/LineSegments2.cjs.js +1 -0
  138. package/lines/LineSegments2.js +165 -56
  139. package/lines/LineSegmentsGeometry.cjs.js +1 -0
  140. package/lines/LineSegmentsGeometry.js +71 -29
  141. package/lines/Wireframe.cjs.js +1 -0
  142. package/lines/Wireframe.js +29 -15
  143. package/lines/WireframeGeometry2.cjs.js +1 -0
  144. package/lines/WireframeGeometry2.js +9 -8
  145. package/loaders/3DMLoader.cjs.js +1 -0
  146. package/loaders/3DMLoader.js +469 -234
  147. package/loaders/3MFLoader.cjs.js +1 -0
  148. package/loaders/3MFLoader.js +555 -340
  149. package/loaders/AMFLoader.cjs.js +1 -0
  150. package/loaders/AMFLoader.js +219 -114
  151. package/loaders/AssimpLoader.cjs.js +1 -0
  152. package/loaders/AssimpLoader.js +725 -328
  153. package/loaders/BVHLoader.cjs.js +1 -0
  154. package/loaders/BVHLoader.js +200 -94
  155. package/loaders/BasisTextureLoader.cjs.js +1 -0
  156. package/loaders/BasisTextureLoader.js +357 -229
  157. package/loaders/ColladaLoader.cjs.js +1 -0
  158. package/loaders/ColladaLoader.js +1522 -932
  159. package/loaders/DDSLoader.cjs.js +1 -0
  160. package/loaders/DDSLoader.js +108 -42
  161. package/loaders/DRACOLoader.cjs.js +1 -0
  162. package/loaders/DRACOLoader.js +210 -103
  163. package/loaders/EXRLoader.cjs.js +1 -0
  164. package/loaders/EXRLoader.js +809 -461
  165. package/loaders/FBXLoader.cjs.js +1 -0
  166. package/loaders/FBXLoader.js +1397 -842
  167. package/loaders/FontLoader.cjs.js +1 -0
  168. package/loaders/FontLoader.js +66 -33
  169. package/loaders/GCodeLoader.cjs.js +1 -0
  170. package/loaders/GCodeLoader.js +111 -63
  171. package/loaders/GLTFLoader.cjs.js +1 -0
  172. package/loaders/GLTFLoader.js +1484 -771
  173. package/loaders/HDRCubeTextureLoader.cjs.js +1 -0
  174. package/loaders/HDRCubeTextureLoader.js +50 -45
  175. package/loaders/KMZLoader.cjs.js +1 -0
  176. package/loaders/KMZLoader.js +55 -42
  177. package/loaders/KTX2Loader.cjs.js +1 -0
  178. package/loaders/KTX2Loader.js +362 -229
  179. package/loaders/KTXLoader.cjs.js +1 -0
  180. package/loaders/KTXLoader.js +99 -37
  181. package/loaders/LDrawLoader.cjs.js +1 -0
  182. package/loaders/LDrawLoader.js +746 -313
  183. package/loaders/LUT3dlLoader.cjs.js +1 -0
  184. package/loaders/LUT3dlLoader.js +62 -50
  185. package/loaders/LUTCubeLoader.cjs.js +1 -0
  186. package/loaders/LUTCubeLoader.js +56 -45
  187. package/loaders/LWOLoader.cjs.js +1 -0
  188. package/loaders/LWOLoader.js +339 -227
  189. package/loaders/LottieLoader.cjs.js +1 -0
  190. package/loaders/LottieLoader.js +38 -36
  191. package/loaders/MD2Loader.cjs.js +1 -0
  192. package/loaders/MD2Loader.js +91 -248
  193. package/loaders/MDDLoader.cjs.js +1 -0
  194. package/loaders/MDDLoader.js +45 -25
  195. package/loaders/MMDLoader.cjs.js +1 -0
  196. package/loaders/MMDLoader.js +795 -359
  197. package/loaders/MTLLoader.cjs.js +1 -0
  198. package/loaders/MTLLoader.js +201 -91
  199. package/loaders/NRRDLoader.cjs.js +1 -0
  200. package/loaders/NRRDLoader.js +263 -182
  201. package/loaders/NodeMaterialLoader.cjs.js +1 -0
  202. package/loaders/NodeMaterialLoader.js +14 -121
  203. package/loaders/OBJLoader.cjs.js +1 -0
  204. package/loaders/OBJLoader.js +283 -161
  205. package/loaders/PCDLoader.cjs.js +1 -0
  206. package/loaders/PCDLoader.js +164 -145
  207. package/loaders/PDBLoader.cjs.js +1 -0
  208. package/loaders/PDBLoader.js +63 -45
  209. package/loaders/PLYLoader.cjs.js +1 -0
  210. package/loaders/PLYLoader.js +203 -106
  211. package/loaders/PRWMLoader.cjs.js +1 -0
  212. package/loaders/PRWMLoader.js +110 -73
  213. package/loaders/PVRLoader.cjs.js +1 -0
  214. package/loaders/PVRLoader.js +93 -32
  215. package/loaders/RGBELoader.cjs.js +1 -0
  216. package/loaders/RGBELoader.js +233 -96
  217. package/loaders/RGBMLoader.cjs.js +1 -0
  218. package/loaders/RGBMLoader.js +514 -344
  219. package/loaders/STLLoader.cjs.js +1 -0
  220. package/loaders/STLLoader.js +165 -59
  221. package/loaders/SVGLoader.cjs.js +1 -0
  222. package/loaders/SVGLoader.js +851 -481
  223. package/loaders/TDSLoader.cjs.js +1 -0
  224. package/loaders/TDSLoader.js +527 -137
  225. package/loaders/TGALoader.cjs.js +1 -0
  226. package/loaders/TGALoader.js +205 -94
  227. package/loaders/TTFLoader.cjs.js +1 -0
  228. package/loaders/TTFLoader.js +79 -58
  229. package/loaders/TiltLoader.cjs.js +1 -0
  230. package/loaders/TiltLoader.js +167 -129
  231. package/loaders/VOXLoader.cjs.js +1 -0
  232. package/loaders/VOXLoader.js +84 -320
  233. package/loaders/VRMLLoader.cjs.js +1 -0
  234. package/loaders/VRMLLoader.js +1268 -786
  235. package/loaders/VRMLoader.cjs.js +1 -0
  236. package/loaders/VRMLoader.js +31 -23
  237. package/loaders/VTKLoader.cjs.js +1 -0
  238. package/loaders/VTKLoader.js +407 -219
  239. package/loaders/XLoader.cjs.js +1 -0
  240. package/loaders/XLoader.js +1259 -1083
  241. package/loaders/XYZLoader.cjs.js +1 -0
  242. package/loaders/XYZLoader.js +34 -28
  243. package/loaders/lwo/IFFParser.cjs.js +1 -0
  244. package/loaders/lwo/IFFParser.js +492 -238
  245. package/loaders/lwo/LWO2Parser.cjs.js +1 -0
  246. package/loaders/lwo/LWO2Parser.js +279 -176
  247. package/loaders/lwo/LWO3Parser.cjs.js +1 -0
  248. package/loaders/lwo/LWO3Parser.js +247 -160
  249. package/math/Capsule.cjs.js +1 -0
  250. package/math/Capsule.js +43 -56
  251. package/math/ColorConverter.cjs.js +1 -0
  252. package/math/ColorConverter.js +32 -18
  253. package/math/ConvexHull.cjs.js +1 -0
  254. package/math/ConvexHull.js +357 -97
  255. package/math/ImprovedNoise.cjs.js +1 -0
  256. package/math/ImprovedNoise.js +32 -282
  257. package/math/Lut.cjs.js +1 -0
  258. package/math/Lut.js +35 -51
  259. package/math/MeshSurfaceSampler.cjs.js +1 -0
  260. package/math/MeshSurfaceSampler.js +68 -25
  261. package/math/OBB.cjs.js +1 -0
  262. package/math/OBB.js +152 -91
  263. package/math/Octree.cjs.js +1 -0
  264. package/math/Octree.js +139 -76
  265. package/math/SimplexNoise.cjs.js +1 -0
  266. package/math/SimplexNoise.js +238 -217
  267. package/misc/ConvexObjectBreaker.cjs.js +1 -0
  268. package/misc/ConvexObjectBreaker.js +185 -79
  269. package/misc/GPUComputationRenderer.cjs.js +1 -0
  270. package/misc/GPUComputationRenderer.js +194 -69
  271. package/misc/Gyroscope.cjs.js +1 -0
  272. package/misc/Gyroscope.js +22 -16
  273. package/misc/MD2Character.cjs.js +1 -0
  274. package/misc/MD2Character.js +74 -52
  275. package/misc/MD2CharacterComplex.cjs.js +1 -0
  276. package/misc/MD2CharacterComplex.js +163 -112
  277. package/misc/MorphAnimMesh.cjs.js +1 -0
  278. package/misc/MorphAnimMesh.js +28 -20
  279. package/misc/MorphBlendMesh.cjs.js +1 -0
  280. package/misc/MorphBlendMesh.js +69 -45
  281. package/misc/ProgressiveLightmap.cjs.js +1 -0
  282. package/misc/ProgressiveLightmap.js +187 -70
  283. package/misc/RollerCoaster.cjs.js +1 -0
  284. package/misc/RollerCoaster.js +135 -106
  285. package/misc/TubePainter.cjs.js +1 -0
  286. package/misc/TubePainter.js +92 -74
  287. package/misc/Volume.cjs.js +1 -0
  288. package/misc/Volume.js +270 -108
  289. package/misc/VolumeSlice.cjs.js +1 -0
  290. package/misc/VolumeSlice.js +122 -34
  291. package/misc/WebGL.cjs.js +1 -0
  292. package/misc/WebGL.js +34 -37
  293. package/modifiers/CurveModifier.cjs.js +1 -0
  294. package/modifiers/CurveModifier.js +151 -46
  295. package/modifiers/EdgeSplitModifier.cjs.js +1 -0
  296. package/modifiers/EdgeSplitModifier.js +90 -46
  297. package/modifiers/SimplifyModifier.cjs.js +1 -0
  298. package/modifiers/SimplifyModifier.js +202 -77
  299. package/modifiers/TessellateModifier.cjs.js +1 -0
  300. package/modifiers/TessellateModifier.js +90 -65
  301. package/nodes/Nodes.cjs.js +1 -0
  302. package/nodes/Nodes.js +140 -274
  303. package/nodes/ShaderNode.cjs.js +1 -0
  304. package/nodes/ShaderNode.js +196 -296
  305. package/nodes/accessors/BufferNode.cjs.js +1 -0
  306. package/nodes/accessors/BufferNode.js +8 -4
  307. package/nodes/accessors/CameraNode.cjs.js +1 -0
  308. package/nodes/accessors/CameraNode.js +25 -20
  309. package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
  310. package/nodes/accessors/CubeTextureNode.js +26 -14
  311. package/nodes/accessors/MaterialNode.cjs.js +1 -0
  312. package/nodes/accessors/MaterialNode.js +53 -43
  313. package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
  314. package/nodes/accessors/MaterialReferenceNode.js +6 -3
  315. package/nodes/accessors/ModelNode.cjs.js +1 -0
  316. package/nodes/accessors/ModelNode.js +5 -3
  317. package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  318. package/nodes/accessors/ModelViewProjectionNode.js +13 -14
  319. package/nodes/accessors/NormalNode.cjs.js +1 -0
  320. package/nodes/accessors/NormalNode.js +39 -40
  321. package/nodes/accessors/Object3DNode.cjs.js +1 -0
  322. package/nodes/accessors/Object3DNode.js +50 -40
  323. package/nodes/accessors/PointUVNode.cjs.js +1 -0
  324. package/nodes/accessors/PointUVNode.js +9 -5
  325. package/nodes/accessors/PositionNode.cjs.js +1 -0
  326. package/nodes/accessors/PositionNode.js +41 -42
  327. package/nodes/accessors/ReferenceNode.cjs.js +1 -0
  328. package/nodes/accessors/ReferenceNode.js +17 -10
  329. package/nodes/accessors/ReflectNode.cjs.js +1 -0
  330. package/nodes/accessors/ReflectNode.js +26 -23
  331. package/nodes/accessors/SkinningNode.cjs.js +1 -0
  332. package/nodes/accessors/SkinningNode.js +48 -46
  333. package/nodes/accessors/TextureNode.cjs.js +1 -0
  334. package/nodes/accessors/TextureNode.js +29 -14
  335. package/nodes/accessors/UVNode.cjs.js +1 -0
  336. package/nodes/accessors/UVNode.js +11 -5
  337. package/nodes/core/ArrayUniformNode.cjs.js +1 -0
  338. package/nodes/core/ArrayUniformNode.js +7 -3
  339. package/nodes/core/AttributeNode.cjs.js +1 -0
  340. package/nodes/core/AttributeNode.js +12 -5
  341. package/nodes/core/BypassNode.cjs.js +1 -0
  342. package/nodes/core/BypassNode.js +12 -5
  343. package/nodes/core/CodeNode.cjs.js +1 -0
  344. package/nodes/core/CodeNode.js +12 -4
  345. package/nodes/core/ConstNode.cjs.js +1 -0
  346. package/nodes/core/ConstNode.js +7 -3
  347. package/nodes/core/ContextNode.cjs.js +1 -0
  348. package/nodes/core/ContextNode.js +8 -3
  349. package/nodes/core/ExpressionNode.cjs.js +1 -0
  350. package/nodes/core/ExpressionNode.js +9 -5
  351. package/nodes/core/FunctionCallNode.cjs.js +1 -0
  352. package/nodes/core/FunctionCallNode.js +15 -6
  353. package/nodes/core/FunctionNode.cjs.js +1 -0
  354. package/nodes/core/FunctionNode.js +25 -10
  355. package/nodes/core/InputNode.cjs.js +1 -0
  356. package/nodes/core/InputNode.js +23 -12
  357. package/nodes/core/Node.cjs.js +1 -0
  358. package/nodes/core/Node.js +75 -35
  359. package/nodes/core/NodeAttribute.cjs.js +1 -0
  360. package/nodes/core/NodeAttribute.js +4 -2
  361. package/nodes/core/NodeBuilder.cjs.js +1 -0
  362. package/nodes/core/NodeBuilder.js +224 -110
  363. package/nodes/core/NodeCode.cjs.js +1 -0
  364. package/nodes/core/NodeCode.js +7 -4
  365. package/nodes/core/NodeFrame.cjs.js +1 -0
  366. package/nodes/core/NodeFrame.js +12 -9
  367. package/nodes/core/NodeFunction.cjs.js +1 -0
  368. package/nodes/core/NodeFunction.js +17 -0
  369. package/nodes/core/NodeFunctionInput.cjs.js +1 -0
  370. package/nodes/core/NodeFunctionInput.js +5 -3
  371. package/nodes/core/NodeKeywords.cjs.js +1 -0
  372. package/nodes/core/NodeKeywords.js +16 -5
  373. package/nodes/core/NodeParser.cjs.js +1 -0
  374. package/nodes/core/NodeParser.js +8 -0
  375. package/nodes/core/NodeUniform.cjs.js +1 -0
  376. package/nodes/core/NodeUniform.js +7 -3
  377. package/nodes/core/NodeUtils.cjs.js +1 -0
  378. package/nodes/core/NodeUtils.js +43 -39
  379. package/nodes/core/NodeVar.cjs.js +1 -0
  380. package/nodes/core/NodeVar.js +4 -2
  381. package/nodes/core/NodeVary.cjs.js +1 -0
  382. package/nodes/core/NodeVary.js +4 -2
  383. package/nodes/core/PropertyNode.cjs.js +1 -0
  384. package/nodes/core/PropertyNode.js +10 -4
  385. package/nodes/core/TempNode.cjs.js +1 -0
  386. package/nodes/core/TempNode.js +11 -5
  387. package/nodes/core/UniformNode.cjs.js +1 -0
  388. package/nodes/core/UniformNode.js +10 -4
  389. package/nodes/core/VarNode.cjs.js +1 -0
  390. package/nodes/core/VarNode.js +11 -3
  391. package/nodes/core/VaryNode.cjs.js +1 -0
  392. package/nodes/core/VaryNode.js +15 -6
  393. package/nodes/core/constants.cjs.js +1 -0
  394. package/nodes/core/constants.js +7 -20
  395. package/nodes/display/ColorSpaceNode.cjs.js +1 -0
  396. package/nodes/display/ColorSpaceNode.js +38 -34
  397. package/nodes/display/NormalMapNode.cjs.js +1 -0
  398. package/nodes/display/NormalMapNode.js +53 -35
  399. package/nodes/fog/FogNode.cjs.js +1 -0
  400. package/nodes/fog/FogNode.js +9 -5
  401. package/nodes/fog/FogRangeNode.cjs.js +1 -0
  402. package/nodes/fog/FogRangeNode.js +9 -5
  403. package/nodes/functions/BSDFs.cjs.js +1 -0
  404. package/nodes/functions/BSDFs.js +118 -61
  405. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
  406. package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
  407. package/nodes/lights/LightContextNode.cjs.js +1 -0
  408. package/nodes/lights/LightContextNode.js +23 -14
  409. package/nodes/lights/LightNode.cjs.js +1 -0
  410. package/nodes/lights/LightNode.js +31 -27
  411. package/nodes/lights/LightsNode.cjs.js +1 -0
  412. package/nodes/lights/LightsNode.js +28 -9
  413. package/nodes/loaders/NodeLoader.cjs.js +1 -0
  414. package/nodes/loaders/NodeLoader.js +42 -27
  415. package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
  416. package/nodes/loaders/NodeMaterialLoader.js +10 -4
  417. package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
  418. package/nodes/loaders/NodeObjectLoader.js +19 -9
  419. package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
  420. package/nodes/materials/LineBasicNodeMaterial.js +10 -5
  421. package/nodes/materials/Materials.cjs.js +1 -0
  422. package/nodes/materials/Materials.js +17 -14
  423. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
  424. package/nodes/materials/MeshBasicNodeMaterial.js +10 -5
  425. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -0
  426. package/nodes/materials/MeshStandardNodeMaterial.js +8 -5
  427. package/nodes/materials/NodeMaterial.cjs.js +1 -0
  428. package/nodes/materials/NodeMaterial.js +36 -20
  429. package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
  430. package/nodes/materials/PointsNodeMaterial.js +10 -5
  431. package/nodes/math/CondNode.cjs.js +1 -0
  432. package/nodes/math/CondNode.js +23 -11
  433. package/nodes/math/MathNode.cjs.js +1 -0
  434. package/nodes/math/MathNode.js +142 -98
  435. package/nodes/math/OperatorNode.cjs.js +1 -0
  436. package/nodes/math/OperatorNode.js +46 -24
  437. package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
  438. package/nodes/parsers/GLSLNodeFunction.js +101 -0
  439. package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
  440. package/nodes/parsers/GLSLNodeParser.js +13 -0
  441. package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
  442. package/nodes/parsers/WGSLNodeFunction.js +71 -0
  443. package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
  444. package/nodes/parsers/WGSLNodeParser.js +13 -0
  445. package/nodes/procedural/CheckerNode.cjs.js +1 -0
  446. package/nodes/procedural/CheckerNode.js +19 -13
  447. package/nodes/utils/ArrayElementNode.cjs.js +1 -0
  448. package/nodes/utils/ArrayElementNode.js +8 -4
  449. package/nodes/utils/ConvertNode.cjs.js +1 -0
  450. package/nodes/utils/ConvertNode.js +8 -3
  451. package/nodes/utils/JoinNode.cjs.js +1 -0
  452. package/nodes/utils/JoinNode.js +11 -7
  453. package/nodes/utils/MatcapUVNode.cjs.js +1 -0
  454. package/nodes/utils/MatcapUVNode.js +11 -8
  455. package/nodes/utils/OscNode.cjs.js +1 -0
  456. package/nodes/utils/OscNode.js +33 -27
  457. package/nodes/utils/SplitNode.cjs.js +1 -0
  458. package/nodes/utils/SplitNode.js +20 -6
  459. package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
  460. package/nodes/utils/SpriteSheetUVNode.js +23 -23
  461. package/nodes/utils/TimerNode.cjs.js +1 -0
  462. package/nodes/utils/TimerNode.js +24 -20
  463. package/objects/GroundProjectedEnv.cjs.js +1 -0
  464. package/objects/GroundProjectedEnv.js +37 -22
  465. package/objects/Lensflare.cjs.js +1 -0
  466. package/objects/Lensflare.js +156 -86
  467. package/objects/LightningStorm.cjs.js +1 -0
  468. package/objects/LightningStorm.js +102 -38
  469. package/objects/MarchingCubes.cjs.js +1 -0
  470. package/objects/MarchingCubes.js +303 -150
  471. package/objects/Reflector.cjs.js +1 -0
  472. package/objects/Reflector.js +72 -50
  473. package/objects/ReflectorForSSRPass.cjs.js +1 -0
  474. package/objects/ReflectorForSSRPass.js +131 -80
  475. package/objects/ReflectorRTT.cjs.js +1 -0
  476. package/objects/ReflectorRTT.js +7 -6
  477. package/objects/Refractor.cjs.js +1 -0
  478. package/objects/Refractor.js +106 -64
  479. package/objects/ShadowMesh.cjs.js +1 -0
  480. package/objects/ShadowMesh.js +17 -8
  481. package/objects/Sky.cjs.js +1 -0
  482. package/objects/Sky.js +80 -119
  483. package/objects/Water.cjs.js +1 -0
  484. package/objects/Water.js +127 -83
  485. package/objects/Water2.cjs.js +1 -0
  486. package/objects/Water2.js +108 -72
  487. package/offscreen/jank.cjs.js +1 -0
  488. package/offscreen/jank.js +14 -10
  489. package/offscreen/offscreen.cjs.js +1 -0
  490. package/offscreen/offscreen.js +5 -4
  491. package/offscreen/scene.cjs.js +1 -0
  492. package/offscreen/scene.js +48 -45
  493. package/package.json +3 -3
  494. package/physics/AmmoPhysics.cjs.js +1 -0
  495. package/physics/AmmoPhysics.js +71 -30
  496. package/postprocessing/AdaptiveToneMappingPass.cjs.js +1 -0
  497. package/postprocessing/AdaptiveToneMappingPass.js +123 -97
  498. package/postprocessing/AfterimagePass.cjs.js +1 -0
  499. package/postprocessing/AfterimagePass.js +49 -28
  500. package/postprocessing/BloomPass.cjs.js +1 -0
  501. package/postprocessing/BloomPass.js +69 -43
  502. package/postprocessing/BokehPass.cjs.js +1 -0
  503. package/postprocessing/BokehPass.js +69 -39
  504. package/postprocessing/ClearPass.cjs.js +1 -0
  505. package/postprocessing/ClearPass.js +25 -10
  506. package/postprocessing/CubeTexturePass.cjs.js +1 -0
  507. package/postprocessing/CubeTexturePass.js +27 -28
  508. package/postprocessing/DotScreenPass.cjs.js +1 -0
  509. package/postprocessing/DotScreenPass.js +32 -24
  510. package/postprocessing/EffectComposer.cjs.js +1 -0
  511. package/postprocessing/EffectComposer.js +86 -39
  512. package/postprocessing/FilmPass.cjs.js +1 -0
  513. package/postprocessing/FilmPass.js +30 -25
  514. package/postprocessing/GlitchPass.cjs.js +1 -0
  515. package/postprocessing/GlitchPass.js +61 -38
  516. package/postprocessing/HalftonePass.cjs.js +1 -0
  517. package/postprocessing/HalftonePass.js +39 -19
  518. package/postprocessing/LUTPass.cjs.js +1 -0
  519. package/postprocessing/LUTPass.js +38 -13
  520. package/postprocessing/MaskPass.cjs.js +1 -0
  521. package/postprocessing/MaskPass.js +38 -19
  522. package/postprocessing/OutlinePass.cjs.js +1 -0
  523. package/postprocessing/OutlinePass.js +277 -135
  524. package/postprocessing/Pass.cjs.js +1 -0
  525. package/postprocessing/Pass.js +44 -20
  526. package/postprocessing/RenderPass.cjs.js +1 -0
  527. package/postprocessing/RenderPass.js +36 -13
  528. package/postprocessing/RenderPixelatedPass.cjs.js +1 -0
  529. package/postprocessing/RenderPixelatedPass.js +58 -44
  530. package/postprocessing/SAOPass.cjs.js +1 -0
  531. package/postprocessing/SAOPass.js +189 -154
  532. package/postprocessing/SMAAPass.cjs.js +1 -0
  533. package/postprocessing/SMAAPass.js +84 -64
  534. package/postprocessing/SSAARenderPass.cjs.js +1 -0
  535. package/postprocessing/SSAARenderPass.js +69 -121
  536. package/postprocessing/SSAOPass.cjs.js +1 -0
  537. package/postprocessing/SSAOPass.js +172 -123
  538. package/postprocessing/SSRPass.cjs.js +1 -0
  539. package/postprocessing/SSRPass.js +280 -211
  540. package/postprocessing/SavePass.cjs.js +1 -0
  541. package/postprocessing/SavePass.js +25 -20
  542. package/postprocessing/ShaderPass.cjs.js +1 -0
  543. package/postprocessing/ShaderPass.js +30 -14
  544. package/postprocessing/TAARenderPass.cjs.js +1 -0
  545. package/postprocessing/TAARenderPass.js +61 -42
  546. package/postprocessing/TexturePass.cjs.js +1 -0
  547. package/postprocessing/TexturePass.js +22 -21
  548. package/postprocessing/UnrealBloomPass.cjs.js +1 -0
  549. package/postprocessing/UnrealBloomPass.js +213 -105
  550. package/renderers/CSS2DRenderer.cjs.js +1 -0
  551. package/renderers/CSS2DRenderer.js +56 -44
  552. package/renderers/CSS3DRenderer.cjs.js +1 -0
  553. package/renderers/CSS3DRenderer.js +86 -53
  554. package/renderers/Projector.cjs.js +1 -0
  555. package/renderers/Projector.js +274 -107
  556. package/renderers/SVGRenderer.cjs.js +1 -0
  557. package/renderers/SVGRenderer.js +182 -72
  558. package/renderers/nodes/accessors/CameraNode.cjs.js +1 -0
  559. package/renderers/nodes/accessors/CameraNode.js +40 -29
  560. package/renderers/nodes/accessors/ModelNode.cjs.js +1 -0
  561. package/renderers/nodes/accessors/ModelNode.js +37 -28
  562. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  563. package/renderers/nodes/accessors/ModelViewProjectionNode.js +23 -10
  564. package/renderers/nodes/accessors/NormalNode.cjs.js +1 -0
  565. package/renderers/nodes/accessors/NormalNode.js +45 -35
  566. package/renderers/nodes/accessors/PositionNode.cjs.js +1 -0
  567. package/renderers/nodes/accessors/PositionNode.js +19 -18
  568. package/renderers/nodes/accessors/UVNode.cjs.js +1 -0
  569. package/renderers/nodes/accessors/UVNode.js +10 -5
  570. package/renderers/nodes/core/AttributeNode.cjs.js +1 -0
  571. package/renderers/nodes/core/AttributeNode.js +14 -5
  572. package/renderers/nodes/core/InputNode.cjs.js +1 -0
  573. package/renderers/nodes/core/InputNode.js +14 -4
  574. package/renderers/nodes/core/Node.cjs.js +1 -0
  575. package/renderers/nodes/core/Node.js +17 -7
  576. package/renderers/nodes/core/NodeAttribute.cjs.js +1 -0
  577. package/renderers/nodes/core/NodeAttribute.js +6 -3
  578. package/renderers/nodes/core/NodeBuilder.cjs.js +1 -0
  579. package/renderers/nodes/core/NodeBuilder.js +154 -87
  580. package/renderers/nodes/core/NodeFrame.cjs.js +1 -0
  581. package/renderers/nodes/core/NodeFrame.js +12 -9
  582. package/renderers/nodes/core/NodeSlot.cjs.js +1 -0
  583. package/renderers/nodes/core/NodeSlot.js +3 -2
  584. package/renderers/nodes/core/NodeUniform.cjs.js +1 -0
  585. package/renderers/nodes/core/NodeUniform.js +9 -4
  586. package/renderers/nodes/core/NodeVary.cjs.js +1 -0
  587. package/renderers/nodes/core/NodeVary.js +7 -4
  588. package/renderers/nodes/core/VaryNode.cjs.js +1 -0
  589. package/renderers/nodes/core/VaryNode.js +12 -6
  590. package/renderers/nodes/core/constants.cjs.js +1 -0
  591. package/renderers/nodes/core/constants.js +13 -16
  592. package/renderers/nodes/inputs/ColorNode.cjs.js +1 -0
  593. package/renderers/nodes/inputs/ColorNode.js +11 -5
  594. package/renderers/nodes/inputs/FloatNode.cjs.js +1 -0
  595. package/renderers/nodes/inputs/FloatNode.js +11 -5
  596. package/renderers/nodes/inputs/Matrix3Node.cjs.js +1 -0
  597. package/renderers/nodes/inputs/Matrix3Node.js +13 -7
  598. package/renderers/nodes/inputs/Matrix4Node.cjs.js +1 -0
  599. package/renderers/nodes/inputs/Matrix4Node.js +13 -7
  600. package/renderers/nodes/inputs/TextureNode.cjs.js +1 -0
  601. package/renderers/nodes/inputs/TextureNode.js +15 -7
  602. package/renderers/nodes/inputs/Vector2Node.cjs.js +1 -0
  603. package/renderers/nodes/inputs/Vector2Node.js +11 -5
  604. package/renderers/nodes/inputs/Vector3Node.cjs.js +1 -0
  605. package/renderers/nodes/inputs/Vector3Node.js +13 -7
  606. package/renderers/nodes/inputs/Vector4Node.cjs.js +1 -0
  607. package/renderers/nodes/inputs/Vector4Node.js +13 -7
  608. package/renderers/nodes/math/MathNode.cjs.js +1 -0
  609. package/renderers/nodes/math/MathNode.js +30 -20
  610. package/renderers/nodes/math/OperatorNode.cjs.js +1 -0
  611. package/renderers/nodes/math/OperatorNode.js +20 -4
  612. package/renderers/nodes/utils/SwitchNode.cjs.js +1 -0
  613. package/renderers/nodes/utils/SwitchNode.js +9 -4
  614. package/renderers/nodes/utils/TimerNode.cjs.js +1 -0
  615. package/renderers/nodes/utils/TimerNode.js +10 -5
  616. package/renderers/webgpu/WebGPU.cjs.js +1 -0
  617. package/renderers/webgpu/WebGPU.js +16 -14
  618. package/renderers/webgpu/WebGPUAttributes.cjs.js +1 -0
  619. package/renderers/webgpu/WebGPUAttributes.js +23 -16
  620. package/renderers/webgpu/WebGPUBackground.cjs.js +1 -0
  621. package/renderers/webgpu/WebGPUBackground.js +30 -13
  622. package/renderers/webgpu/WebGPUBinding.cjs.js +1 -0
  623. package/renderers/webgpu/WebGPUBinding.js +7 -4
  624. package/renderers/webgpu/WebGPUBindings.cjs.js +1 -0
  625. package/renderers/webgpu/WebGPUBindings.js +57 -21
  626. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +1 -0
  627. package/renderers/webgpu/WebGPUComputePipelines.js +25 -14
  628. package/renderers/webgpu/WebGPUGeometries.cjs.js +1 -0
  629. package/renderers/webgpu/WebGPUGeometries.js +15 -5
  630. package/renderers/webgpu/WebGPUInfo.cjs.js +1 -0
  631. package/renderers/webgpu/WebGPUInfo.js +8 -3
  632. package/renderers/webgpu/WebGPUObjects.cjs.js +1 -0
  633. package/renderers/webgpu/WebGPUObjects.js +10 -5
  634. package/renderers/webgpu/WebGPUProperties.cjs.js +1 -0
  635. package/renderers/webgpu/WebGPUProperties.js +11 -5
  636. package/renderers/webgpu/WebGPURenderLists.cjs.js +1 -0
  637. package/renderers/webgpu/WebGPURenderLists.js +36 -20
  638. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +1 -0
  639. package/renderers/webgpu/WebGPURenderPipelines.js +387 -260
  640. package/renderers/webgpu/WebGPURenderer.cjs.js +1 -0
  641. package/renderers/webgpu/WebGPURenderer.js +262 -124
  642. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +1 -0
  643. package/renderers/webgpu/WebGPUSampledTexture.js +31 -18
  644. package/renderers/webgpu/WebGPUSampler.cjs.js +1 -0
  645. package/renderers/webgpu/WebGPUSampler.js +12 -7
  646. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +1 -0
  647. package/renderers/webgpu/WebGPUStorageBuffer.js +12 -7
  648. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +1 -0
  649. package/renderers/webgpu/WebGPUTextureRenderer.js +11 -5
  650. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +1 -0
  651. package/renderers/webgpu/WebGPUTextureUtils.js +40 -29
  652. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -0
  653. package/renderers/webgpu/WebGPUTextures.js +333 -186
  654. package/renderers/webgpu/WebGPUUniform.cjs.js +1 -0
  655. package/renderers/webgpu/WebGPUUniform.js +51 -25
  656. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +1 -0
  657. package/renderers/webgpu/WebGPUUniformsGroup.js +72 -32
  658. package/renderers/webgpu/constants.cjs.js +1 -0
  659. package/renderers/webgpu/constants.js +181 -190
  660. package/renderers/webgpu/nodes/ShaderLib.cjs.js +1 -0
  661. package/renderers/webgpu/nodes/ShaderLib.js +2 -2
  662. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +1 -0
  663. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +124 -53
  664. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +1 -0
  665. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +31 -17
  666. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +1 -0
  667. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +9 -8
  668. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +1 -0
  669. package/renderers/webgpu/nodes/WebGPUNodes.js +45 -7
  670. package/shaders/ACESFilmicToneMappingShader.cjs.js +1 -0
  671. package/shaders/ACESFilmicToneMappingShader.js +24 -44
  672. package/shaders/AfterimageShader.cjs.js +1 -0
  673. package/shaders/AfterimageShader.js +18 -28
  674. package/shaders/BasicShader.cjs.js +1 -0
  675. package/shaders/BasicShader.js +7 -9
  676. package/shaders/BleachBypassShader.cjs.js +1 -0
  677. package/shaders/BleachBypassShader.js +15 -31
  678. package/shaders/BlendShader.cjs.js +1 -0
  679. package/shaders/BlendShader.js +19 -26
  680. package/shaders/BokehShader.cjs.js +1 -0
  681. package/shaders/BokehShader.js +36 -98
  682. package/shaders/BokehShader2.cjs.js +1 -0
  683. package/shaders/BokehShader2.js +90 -261
  684. package/shaders/BrightnessContrastShader.cjs.js +1 -0
  685. package/shaders/BrightnessContrastShader.js +19 -28
  686. package/shaders/ColorCorrectionShader.cjs.js +1 -0
  687. package/shaders/ColorCorrectionShader.js +22 -26
  688. package/shaders/ColorifyShader.cjs.js +1 -0
  689. package/shaders/ColorifyShader.js +16 -24
  690. package/shaders/ConvolutionShader.cjs.js +1 -0
  691. package/shaders/ConvolutionShader.js +36 -40
  692. package/shaders/CopyShader.cjs.js +1 -0
  693. package/shaders/CopyShader.js +13 -21
  694. package/shaders/DOFMipMapShader.cjs.js +1 -0
  695. package/shaders/DOFMipMapShader.js +21 -28
  696. package/shaders/DepthLimitedBlurShader.cjs.js +1 -0
  697. package/shaders/DepthLimitedBlurShader.js +40 -85
  698. package/shaders/DigitalGlitch.cjs.js +1 -0
  699. package/shaders/DigitalGlitch.js +46 -74
  700. package/shaders/DotScreenShader.cjs.js +1 -0
  701. package/shaders/DotScreenShader.js +27 -35
  702. package/shaders/FXAAShader.cjs.js +1 -0
  703. package/shaders/FXAAShader.js +19 -1094
  704. package/shaders/FilmShader.cjs.js +1 -0
  705. package/shaders/FilmShader.js +52 -38
  706. package/shaders/FocusShader.cjs.js +1 -0
  707. package/shaders/FocusShader.js +24 -51
  708. package/shaders/FreiChenShader.cjs.js +1 -0
  709. package/shaders/FreiChenShader.js +24 -57
  710. package/shaders/FresnelShader.cjs.js +1 -0
  711. package/shaders/FresnelShader.js +22 -43
  712. package/shaders/GammaCorrectionShader.cjs.js +1 -0
  713. package/shaders/GammaCorrectionShader.js +11 -19
  714. package/shaders/GodRaysShader.cjs.js +1 -0
  715. package/shaders/GodRaysShader.js +94 -103
  716. package/shaders/HalftoneShader.cjs.js +1 -0
  717. package/shaders/HalftoneShader.js +65 -208
  718. package/shaders/HorizontalBlurShader.cjs.js +1 -0
  719. package/shaders/HorizontalBlurShader.js +23 -7
  720. package/shaders/HorizontalTiltShiftShader.cjs.js +1 -0
  721. package/shaders/HorizontalTiltShiftShader.js +21 -33
  722. package/shaders/HueSaturationShader.cjs.js +1 -0
  723. package/shaders/HueSaturationShader.js +21 -37
  724. package/shaders/KaleidoShader.cjs.js +1 -0
  725. package/shaders/KaleidoShader.js +22 -30
  726. package/shaders/LuminosityHighPassShader.cjs.js +1 -0
  727. package/shaders/LuminosityHighPassShader.js +27 -33
  728. package/shaders/LuminosityShader.cjs.js +1 -0
  729. package/shaders/LuminosityShader.js +11 -21
  730. package/shaders/MirrorShader.cjs.js +1 -0
  731. package/shaders/MirrorShader.js +16 -31
  732. package/shaders/NormalMapShader.cjs.js +1 -0
  733. package/shaders/NormalMapShader.js +23 -27
  734. package/shaders/ParallaxShader.cjs.js +1 -0
  735. package/shaders/ParallaxShader.js +48 -107
  736. package/shaders/PixelShader.cjs.js +1 -0
  737. package/shaders/PixelShader.js +16 -24
  738. package/shaders/RGBShiftShader.cjs.js +1 -0
  739. package/shaders/RGBShiftShader.js +22 -26
  740. package/shaders/SAOShader.cjs.js +1 -0
  741. package/shaders/SAOShader.js +48 -132
  742. package/shaders/SMAAShader.cjs.js +1 -0
  743. package/shaders/SMAAShader.js +135 -256
  744. package/shaders/SSAOShader.cjs.js +1 -0
  745. package/shaders/SSAOShader.js +81 -153
  746. package/shaders/SSRShader.cjs.js +1 -0
  747. package/shaders/SSRShader.js +87 -32
  748. package/shaders/SepiaShader.cjs.js +1 -0
  749. package/shaders/SepiaShader.js +15 -25
  750. package/shaders/SobelOperatorShader.cjs.js +1 -0
  751. package/shaders/SobelOperatorShader.js +29 -40
  752. package/shaders/SubsurfaceScatteringShader.cjs.js +1 -0
  753. package/shaders/SubsurfaceScatteringShader.js +39 -53
  754. package/shaders/TechnicolorShader.cjs.js +1 -0
  755. package/shaders/TechnicolorShader.js +13 -20
  756. package/shaders/ToneMapShader.cjs.js +1 -0
  757. package/shaders/ToneMapShader.js +28 -44
  758. package/shaders/ToonShader.cjs.js +1 -0
  759. package/shaders/ToonShader.js +96 -172
  760. package/shaders/TriangleBlurShader.cjs.js +1 -0
  761. package/shaders/TriangleBlurShader.js +23 -32
  762. package/shaders/UnpackDepthRGBAShader.cjs.js +1 -0
  763. package/shaders/UnpackDepthRGBAShader.js +14 -22
  764. package/shaders/VerticalBlurShader.cjs.js +1 -0
  765. package/shaders/VerticalBlurShader.js +23 -7
  766. package/shaders/VerticalTiltShiftShader.cjs.js +1 -0
  767. package/shaders/VerticalTiltShiftShader.js +21 -33
  768. package/shaders/VignetteShader.cjs.js +1 -0
  769. package/shaders/VignetteShader.js +28 -24
  770. package/shaders/VolumeShader.cjs.js +1 -0
  771. package/shaders/VolumeShader.js +77 -174
  772. package/shaders/WaterRefractionShader.cjs.js +1 -0
  773. package/shaders/WaterRefractionShader.js +6 -38
  774. package/shaders/types.cjs.js +1 -0
  775. package/shaders/types.js +1 -1
  776. package/textures/FlakesTexture.cjs.js +1 -0
  777. package/textures/FlakesTexture.js +10 -8
  778. package/types/helpers.cjs.js +1 -0
  779. package/types/helpers.js +2 -3
  780. package/types/shared.cjs.js +1 -0
  781. package/types/shared.js +1 -0
  782. package/types/utils.cjs.js +1 -0
  783. package/types/utils.js +1 -0
  784. package/utils/BufferGeometryUtils.cjs.js +1 -0
  785. package/utils/BufferGeometryUtils.js +325 -251
  786. package/utils/GeometryCompressionUtils.cjs.js +1 -0
  787. package/utils/GeometryCompressionUtils.js +239 -241
  788. package/utils/GeometryUtils.cjs.js +1 -0
  789. package/utils/GeometryUtils.js +94 -41
  790. package/utils/LDrawUtils.cjs.js +1 -0
  791. package/utils/LDrawUtils.d.ts +5 -0
  792. package/utils/LDrawUtils.js +144 -0
  793. package/utils/RoughnessMipmapper.cjs.js +1 -0
  794. package/utils/RoughnessMipmapper.js +82 -38
  795. package/utils/SceneUtils.cjs.js +1 -0
  796. package/utils/SceneUtils.js +20 -15
  797. package/utils/ShadowMapViewer.cjs.js +1 -0
  798. package/utils/ShadowMapViewer.js +95 -49
  799. package/utils/SkeletonUtils.cjs.js +1 -0
  800. package/utils/SkeletonUtils.js +165 -74
  801. package/utils/UVsDebug.cjs.js +1 -0
  802. package/utils/UVsDebug.js +62 -32
  803. package/utils/WorkerPool.cjs.js +1 -0
  804. package/utils/WorkerPool.js +33 -13
  805. package/webxr/ARButton.cjs.js +1 -0
  806. package/webxr/ARButton.js +98 -72
  807. package/webxr/OculusHandModel.cjs.js +1 -0
  808. package/webxr/OculusHandModel.js +37 -18
  809. package/webxr/OculusHandPointerModel.cjs.js +1 -0
  810. package/webxr/OculusHandPointerModel.js +80 -58
  811. package/webxr/Text2D.cjs.js +1 -0
  812. package/webxr/Text2D.js +19 -37
  813. package/webxr/VRButton.cjs.js +1 -0
  814. package/webxr/VRButton.js +90 -59
  815. package/webxr/XRControllerModelFactory.cjs.js +1 -0
  816. package/webxr/XRControllerModelFactory.js +116 -58
  817. package/webxr/XREstimatedLight.cjs.js +1 -0
  818. package/webxr/XREstimatedLight.js +66 -39
  819. package/webxr/XRHandMeshModel.cjs.js +1 -0
  820. package/webxr/XRHandMeshModel.js +29 -40
  821. package/webxr/XRHandModelFactory.cjs.js +1 -0
  822. package/webxr/XRHandModelFactory.js +31 -28
  823. package/webxr/XRHandPrimitiveModel.cjs.js +1 -0
  824. package/webxr/XRHandPrimitiveModel.js +27 -41
  825. package/animation/AnimationClipCreator.mjs +0 -57
  826. package/animation/CCDIKSolver.mjs +0 -223
  827. package/animation/MMDAnimationHelper.mjs +0 -514
  828. package/animation/MMDPhysics.mjs +0 -769
  829. package/cameras/CinematicCamera.mjs +0 -129
  830. package/controls/ArcballControls.mjs +0 -1737
  831. package/controls/DeviceOrientationControls.mjs +0 -74
  832. package/controls/DragControls.mjs +0 -172
  833. package/controls/FirstPersonControls.mjs +0 -220
  834. package/controls/FlyControls.mjs +0 -239
  835. package/controls/OrbitControls.mjs +0 -731
  836. package/controls/PointerLockControls.mjs +0 -88
  837. package/controls/TrackballControls.mjs +0 -481
  838. package/controls/TransformControls.mjs +0 -1068
  839. package/controls/experimental/CameraControls.mjs +0 -673
  840. package/csm/CSM.mjs +0 -244
  841. package/csm/CSMFrustum.mjs +0 -75
  842. package/csm/CSMHelper.mjs +0 -114
  843. package/csm/CSMShader.mjs +0 -251
  844. package/curves/CurveExtras.mjs +0 -224
  845. package/curves/NURBSCurve.mjs +0 -35
  846. package/curves/NURBSSurface.mjs +0 -28
  847. package/curves/NURBSUtils.mjs +0 -226
  848. package/deprecated/Geometry.mjs +0 -966
  849. package/effects/AnaglyphEffect.mjs +0 -120
  850. package/effects/AsciiEffect.mjs +0 -173
  851. package/effects/OutlineEffect.mjs +0 -295
  852. package/effects/ParallaxBarrierEffect.mjs +0 -64
  853. package/effects/PeppersGhostEffect.mjs +0 -85
  854. package/effects/StereoEffect.mjs +0 -32
  855. package/environments/RoomEnvironment.mjs +0 -78
  856. package/exporters/ColladaExporter.mjs +0 -299
  857. package/exporters/DRACOExporter.mjs +0 -132
  858. package/exporters/GLTFExporter.mjs +0 -1381
  859. package/exporters/MMDExporter.mjs +0 -102
  860. package/exporters/OBJExporter.mjs +0 -166
  861. package/exporters/PLYExporter.mjs +0 -278
  862. package/exporters/STLExporter.mjs +0 -129
  863. package/exporters/USDZExporter.mjs +0 -328
  864. package/geometries/BoxLineGeometry.mjs +0 -45
  865. package/geometries/ConvexGeometry.mjs +0 -29
  866. package/geometries/DecalGeometry.mjs +0 -184
  867. package/geometries/LightningStrike.mjs +0 -547
  868. package/geometries/ParametricGeometries.mjs +0 -129
  869. package/geometries/ParametricGeometry.mjs +0 -63
  870. package/geometries/RoundedBoxGeometry.mjs +0 -91
  871. package/geometries/TeapotGeometry.mjs +0 -1557
  872. package/geometries/TextGeometry.mjs +0 -23
  873. package/helpers/LightProbeHelper.mjs +0 -72
  874. package/helpers/PositionalAudioHelper.mjs +0 -68
  875. package/helpers/RectAreaLightHelper.mjs +0 -44
  876. package/helpers/VertexNormalsHelper.mjs +0 -54
  877. package/helpers/VertexTangentsHelper.mjs +0 -45
  878. package/index.mjs +0 -969
  879. package/interactive/SelectionBox.mjs +0 -137
  880. package/interactive/SelectionHelper.mjs +0 -54
  881. package/libs/MeshoptDecoder.mjs +0 -210
  882. package/libs/MotionControllers.mjs +0 -261
  883. package/lights/LightProbeGenerator.mjs +0 -145
  884. package/lights/RectAreaLightUniformsLib.mjs +0 -32842
  885. package/lines/Line2.mjs +0 -13
  886. package/lines/LineGeometry.mjs +0 -44
  887. package/lines/LineMaterial.mjs +0 -539
  888. package/lines/LineSegments2.mjs +0 -202
  889. package/lines/LineSegmentsGeometry.mjs +0 -124
  890. package/lines/Wireframe.mjs +0 -31
  891. package/lines/WireframeGeometry2.mjs +0 -13
  892. package/loaders/3DMLoader.mjs +0 -802
  893. package/loaders/3MFLoader.mjs +0 -837
  894. package/loaders/AMFLoader.mjs +0 -284
  895. package/loaders/AssimpLoader.mjs +0 -1396
  896. package/loaders/BVHLoader.mjs +0 -207
  897. package/loaders/BasisTextureLoader.mjs +0 -474
  898. package/loaders/ColladaLoader.mjs +0 -2403
  899. package/loaders/DDSLoader.mjs +0 -148
  900. package/loaders/DRACOLoader.mjs +0 -340
  901. package/loaders/EXRLoader.mjs +0 -1351
  902. package/loaders/FBXLoader.mjs +0 -2362
  903. package/loaders/FontLoader.mjs +0 -111
  904. package/loaders/GCodeLoader.mjs +0 -141
  905. package/loaders/GLTFLoader.mjs +0 -2316
  906. package/loaders/HDRCubeTextureLoader.mjs +0 -77
  907. package/loaders/KMZLoader.mjs +0 -75
  908. package/loaders/KTX2Loader.mjs +0 -427
  909. package/loaders/KTXLoader.mjs +0 -87
  910. package/loaders/LDrawLoader.mjs +0 -1409
  911. package/loaders/LUT3dlLoader.mjs +0 -100
  912. package/loaders/LUTCubeLoader.mjs +0 -104
  913. package/loaders/LWOLoader.mjs +0 -625
  914. package/loaders/LottieLoader.mjs +0 -47
  915. package/loaders/MD2Loader.mjs +0 -359
  916. package/loaders/MDDLoader.mjs +0 -58
  917. package/loaders/MMDLoader.mjs +0 -998
  918. package/loaders/MTLLoader.mjs +0 -280
  919. package/loaders/NRRDLoader.mjs +0 -401
  920. package/loaders/NodeMaterialLoader.mjs +0 -146
  921. package/loaders/OBJLoader.mjs +0 -487
  922. package/loaders/PCDLoader.mjs +0 -248
  923. package/loaders/PDBLoader.mjs +0 -246
  924. package/loaders/PLYLoader.mjs +0 -317
  925. package/loaders/PRWMLoader.mjs +0 -160
  926. package/loaders/PVRLoader.mjs +0 -131
  927. package/loaders/RGBELoader.mjs +0 -244
  928. package/loaders/RGBMLoader.mjs +0 -998
  929. package/loaders/STLLoader.mjs +0 -190
  930. package/loaders/SVGLoader.mjs +0 -1709
  931. package/loaders/TDSLoader.mjs +0 -480
  932. package/loaders/TGALoader.mjs +0 -285
  933. package/loaders/TTFLoader.mjs +0 -131
  934. package/loaders/TiltLoader.mjs +0 -373
  935. package/loaders/VOXLoader.mjs +0 -431
  936. package/loaders/VRMLLoader.mjs +0 -2093
  937. package/loaders/VRMLoader.mjs +0 -38
  938. package/loaders/VTKLoader.mjs +0 -646
  939. package/loaders/XLoader.mjs +0 -1258
  940. package/loaders/XYZLoader.mjs +0 -60
  941. package/loaders/lwo/IFFParser.mjs +0 -697
  942. package/loaders/lwo/LWO2Parser.mjs +0 -327
  943. package/loaders/lwo/LWO3Parser.mjs +0 -298
  944. package/math/Capsule.mjs +0 -100
  945. package/math/ColorConverter.mjs +0 -51
  946. package/math/ConvexHull.mjs +0 -574
  947. package/math/ImprovedNoise.mjs +0 -302
  948. package/math/Lut.mjs +0 -135
  949. package/math/MeshSurfaceSampler.mjs +0 -107
  950. package/math/OBB.mjs +0 -235
  951. package/math/Octree.mjs +0 -278
  952. package/math/SimplexNoise.mjs +0 -425
  953. package/misc/ConvexObjectBreaker.mjs +0 -292
  954. package/misc/GPUComputationRenderer.mjs +0 -171
  955. package/misc/Gyroscope.mjs +0 -35
  956. package/misc/MD2Character.mjs +0 -162
  957. package/misc/MD2CharacterComplex.mjs +0 -328
  958. package/misc/MorphAnimMesh.mjs +0 -40
  959. package/misc/MorphBlendMesh.mjs +0 -179
  960. package/misc/ProgressiveLightmap.mjs +0 -166
  961. package/misc/RollerCoaster.mjs +0 -346
  962. package/misc/TubePainter.mjs +0 -123
  963. package/misc/Volume.mjs +0 -244
  964. package/misc/VolumeSlice.mjs +0 -106
  965. package/misc/WebGL.mjs +0 -74
  966. package/modifiers/CurveModifier.mjs +0 -182
  967. package/modifiers/EdgeSplitModifier.mjs +0 -162
  968. package/modifiers/SimplifyModifier.mjs +0 -282
  969. package/modifiers/TessellateModifier.mjs +0 -206
  970. package/nodes/Nodes.mjs +0 -400
  971. package/nodes/ShaderNode.mjs +0 -408
  972. package/nodes/accessors/BufferNode.mjs +0 -15
  973. package/nodes/accessors/CameraNode.mjs +0 -44
  974. package/nodes/accessors/CubeTextureNode.mjs +0 -42
  975. package/nodes/accessors/MaterialNode.mjs +0 -71
  976. package/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  977. package/nodes/accessors/ModelNode.mjs +0 -9
  978. package/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  979. package/nodes/accessors/NormalNode.mjs +0 -62
  980. package/nodes/accessors/Object3DNode.mjs +0 -76
  981. package/nodes/accessors/PointUVNode.mjs +0 -13
  982. package/nodes/accessors/PositionNode.mjs +0 -65
  983. package/nodes/accessors/ReferenceNode.mjs +0 -37
  984. package/nodes/accessors/ReflectNode.mjs +0 -43
  985. package/nodes/accessors/SkinningNode.mjs +0 -58
  986. package/nodes/accessors/TextureNode.mjs +0 -54
  987. package/nodes/accessors/UVNode.mjs +0 -23
  988. package/nodes/core/ArrayUniformNode.mjs +0 -14
  989. package/nodes/core/AttributeNode.mjs +0 -30
  990. package/nodes/core/BypassNode.mjs +0 -22
  991. package/nodes/core/CodeNode.mjs +0 -28
  992. package/nodes/core/ConstNode.mjs +0 -14
  993. package/nodes/core/ContextNode.mjs +0 -22
  994. package/nodes/core/ExpressionNode.mjs +0 -19
  995. package/nodes/core/FunctionCallNode.mjs +0 -37
  996. package/nodes/core/FunctionNode.mjs +0 -56
  997. package/nodes/core/InputNode.mjs +0 -38
  998. package/nodes/core/Node.mjs +0 -139
  999. package/nodes/core/NodeAttribute.mjs +0 -10
  1000. package/nodes/core/NodeBuilder.mjs +0 -395
  1001. package/nodes/core/NodeCode.mjs +0 -11
  1002. package/nodes/core/NodeFrame.mjs +0 -35
  1003. package/nodes/core/NodeFunctionInput.mjs +0 -13
  1004. package/nodes/core/NodeKeywords.mjs +0 -44
  1005. package/nodes/core/NodeUniform.mjs +0 -18
  1006. package/nodes/core/NodeUtils.mjs +0 -57
  1007. package/nodes/core/NodeVar.mjs +0 -10
  1008. package/nodes/core/NodeVary.mjs +0 -10
  1009. package/nodes/core/PropertyNode.mjs +0 -21
  1010. package/nodes/core/TempNode.mjs +0 -25
  1011. package/nodes/core/UniformNode.mjs +0 -23
  1012. package/nodes/core/VarNode.mjs +0 -31
  1013. package/nodes/core/VaryNode.mjs +0 -30
  1014. package/nodes/core/constants.mjs +0 -24
  1015. package/nodes/display/ColorSpaceNode.mjs +0 -63
  1016. package/nodes/display/NormalMapNode.mjs +0 -54
  1017. package/nodes/fog/FogNode.mjs +0 -15
  1018. package/nodes/fog/FogRangeNode.mjs +0 -17
  1019. package/nodes/functions/BSDFs.mjs +0 -64
  1020. package/nodes/lights/LightContextNode.mjs +0 -35
  1021. package/nodes/lights/LightNode.mjs +0 -58
  1022. package/nodes/lights/LightsNode.mjs +0 -59
  1023. package/nodes/loaders/NodeLoader.mjs +0 -66
  1024. package/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  1025. package/nodes/loaders/NodeObjectLoader.mjs +0 -40
  1026. package/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  1027. package/nodes/materials/Materials.mjs +0 -28
  1028. package/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  1029. package/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  1030. package/nodes/materials/NodeMaterial.mjs +0 -64
  1031. package/nodes/materials/PointsNodeMaterial.mjs +0 -30
  1032. package/nodes/math/CondNode.mjs +0 -38
  1033. package/nodes/math/MathNode.mjs +0 -163
  1034. package/nodes/math/OperatorNode.mjs +0 -103
  1035. package/nodes/procedural/CheckerNode.mjs +0 -21
  1036. package/nodes/utils/ArrayElementNode.mjs +0 -19
  1037. package/nodes/utils/ConvertNode.mjs +0 -25
  1038. package/nodes/utils/JoinNode.mjs +0 -26
  1039. package/nodes/utils/MatcapUVNode.mjs +0 -16
  1040. package/nodes/utils/OscNode.mjs +0 -50
  1041. package/nodes/utils/SplitNode.mjs +0 -45
  1042. package/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  1043. package/nodes/utils/TimerNode.mjs +0 -44
  1044. package/objects/GroundProjectedEnv.mjs +0 -130
  1045. package/objects/Lensflare.mjs +0 -262
  1046. package/objects/LightningStorm.mjs +0 -110
  1047. package/objects/MarchingCubes.mjs +0 -457
  1048. package/objects/Reflector.mjs +0 -166
  1049. package/objects/ReflectorForSSRPass.mjs +0 -247
  1050. package/objects/ReflectorRTT.mjs +0 -10
  1051. package/objects/Refractor.mjs +0 -178
  1052. package/objects/ShadowMesh.mjs +0 -41
  1053. package/objects/Sky.mjs +0 -124
  1054. package/objects/Water.mjs +0 -235
  1055. package/objects/Water2.mjs +0 -252
  1056. package/offscreen/jank.mjs +0 -27
  1057. package/offscreen/offscreen.mjs +0 -5
  1058. package/offscreen/scene.mjs +0 -52
  1059. package/physics/AmmoPhysics.mjs +0 -165
  1060. package/postprocessing/AdaptiveToneMappingPass.mjs +0 -221
  1061. package/postprocessing/AfterimagePass.mjs +0 -55
  1062. package/postprocessing/BloomPass.mjs +0 -90
  1063. package/postprocessing/BokehPass.mjs +0 -76
  1064. package/postprocessing/ClearPass.mjs +0 -27
  1065. package/postprocessing/CubeTexturePass.mjs +0 -49
  1066. package/postprocessing/DotScreenPass.mjs +0 -40
  1067. package/postprocessing/EffectComposer.mjs +0 -139
  1068. package/postprocessing/FilmPass.mjs +0 -42
  1069. package/postprocessing/GlitchPass.mjs +0 -75
  1070. package/postprocessing/HalftonePass.mjs +0 -44
  1071. package/postprocessing/LUTPass.mjs +0 -136
  1072. package/postprocessing/MaskPass.mjs +0 -60
  1073. package/postprocessing/OutlinePass.mjs +0 -438
  1074. package/postprocessing/Pass.mjs +0 -37
  1075. package/postprocessing/RenderPass.mjs +0 -48
  1076. package/postprocessing/RenderPixelatedPass.mjs +0 -199
  1077. package/postprocessing/SAOPass.mjs +0 -282
  1078. package/postprocessing/SMAAPass.mjs +0 -112
  1079. package/postprocessing/SSAARenderPass.mjs +0 -170
  1080. package/postprocessing/SSAOPass.mjs +0 -265
  1081. package/postprocessing/SSRPass.mjs +0 -432
  1082. package/postprocessing/SavePass.mjs +0 -37
  1083. package/postprocessing/ShaderPass.mjs +0 -39
  1084. package/postprocessing/TAARenderPass.mjs +0 -88
  1085. package/postprocessing/TexturePass.mjs +0 -39
  1086. package/postprocessing/UnrealBloomPass.mjs +0 -220
  1087. package/renderers/CSS2DRenderer.mjs +0 -112
  1088. package/renderers/CSS3DRenderer.mjs +0 -133
  1089. package/renderers/Projector.mjs +0 -511
  1090. package/renderers/SVGRenderer.mjs +0 -306
  1091. package/renderers/nodes/accessors/CameraNode.mjs +0 -63
  1092. package/renderers/nodes/accessors/ModelNode.mjs +0 -61
  1093. package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  1094. package/renderers/nodes/accessors/NormalNode.mjs +0 -61
  1095. package/renderers/nodes/accessors/PositionNode.mjs +0 -30
  1096. package/renderers/nodes/accessors/UVNode.mjs +0 -13
  1097. package/renderers/nodes/core/AttributeNode.mjs +0 -35
  1098. package/renderers/nodes/core/InputNode.mjs +0 -31
  1099. package/renderers/nodes/core/Node.mjs +0 -34
  1100. package/renderers/nodes/core/NodeAttribute.mjs +0 -10
  1101. package/renderers/nodes/core/NodeBuilder.mjs +0 -243
  1102. package/renderers/nodes/core/NodeFrame.mjs +0 -35
  1103. package/renderers/nodes/core/NodeSlot.mjs +0 -10
  1104. package/renderers/nodes/core/NodeUniform.mjs +0 -18
  1105. package/renderers/nodes/core/NodeVary.mjs +0 -11
  1106. package/renderers/nodes/core/VaryNode.mjs +0 -22
  1107. package/renderers/nodes/core/constants.mjs +0 -22
  1108. package/renderers/nodes/inputs/ColorNode.mjs +0 -11
  1109. package/renderers/nodes/inputs/FloatNode.mjs +0 -11
  1110. package/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  1111. package/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  1112. package/renderers/nodes/inputs/TextureNode.mjs +0 -20
  1113. package/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  1114. package/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  1115. package/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  1116. package/renderers/nodes/math/MathNode.mjs +0 -55
  1117. package/renderers/nodes/math/OperatorNode.mjs +0 -42
  1118. package/renderers/nodes/utils/SwitchNode.mjs +0 -20
  1119. package/renderers/nodes/utils/TimerNode.mjs +0 -14
  1120. package/renderers/webgpu/WebGPU.mjs +0 -24
  1121. package/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  1122. package/renderers/webgpu/WebGPUBackground.mjs +0 -61
  1123. package/renderers/webgpu/WebGPUBinding.mjs +0 -14
  1124. package/renderers/webgpu/WebGPUBindings.mjs +0 -155
  1125. package/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  1126. package/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  1127. package/renderers/webgpu/WebGPUInfo.mjs +0 -46
  1128. package/renderers/webgpu/WebGPUObjects.mjs +0 -25
  1129. package/renderers/webgpu/WebGPUProperties.mjs +0 -22
  1130. package/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  1131. package/renderers/webgpu/WebGPURenderPipelines.mjs +0 -545
  1132. package/renderers/webgpu/WebGPURenderer.mjs +0 -574
  1133. package/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  1134. package/renderers/webgpu/WebGPUSampler.mjs +0 -15
  1135. package/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  1136. package/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  1137. package/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  1138. package/renderers/webgpu/WebGPUTextures.mjs +0 -484
  1139. package/renderers/webgpu/WebGPUUniform.mjs +0 -81
  1140. package/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  1141. package/renderers/webgpu/constants.mjs +0 -230
  1142. package/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  1143. package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  1144. package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  1145. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  1146. package/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
  1147. package/shaders/ACESFilmicToneMappingShader.mjs +0 -48
  1148. package/shaders/AfterimageShader.mjs +0 -32
  1149. package/shaders/BasicShader.mjs +0 -12
  1150. package/shaders/BleachBypassShader.mjs +0 -35
  1151. package/shaders/BlendShader.mjs +0 -30
  1152. package/shaders/BokehShader.mjs +0 -106
  1153. package/shaders/BokehShader2.mjs +0 -269
  1154. package/shaders/BrightnessContrastShader.mjs +0 -32
  1155. package/shaders/ColorCorrectionShader.mjs +0 -30
  1156. package/shaders/ColorifyShader.mjs +0 -28
  1157. package/shaders/ConvolutionShader.mjs +0 -55
  1158. package/shaders/CopyShader.mjs +0 -25
  1159. package/shaders/DOFMipMapShader.mjs +0 -32
  1160. package/shaders/DepthLimitedBlurShader.mjs +0 -114
  1161. package/shaders/DigitalGlitch.mjs +0 -78
  1162. package/shaders/DotScreenShader.mjs +0 -39
  1163. package/shaders/FXAAShader.mjs +0 -1098
  1164. package/shaders/FilmShader.mjs +0 -42
  1165. package/shaders/FocusShader.mjs +0 -55
  1166. package/shaders/FreiChenShader.mjs +0 -61
  1167. package/shaders/FresnelShader.mjs +0 -47
  1168. package/shaders/GammaCorrectionShader.mjs +0 -23
  1169. package/shaders/GodRaysShader.mjs +0 -146
  1170. package/shaders/HalftoneShader.mjs +0 -212
  1171. package/shaders/HorizontalBlurShader.mjs +0 -43
  1172. package/shaders/HorizontalTiltShiftShader.mjs +0 -37
  1173. package/shaders/HueSaturationShader.mjs +0 -41
  1174. package/shaders/KaleidoShader.mjs +0 -34
  1175. package/shaders/LuminosityHighPassShader.mjs +0 -37
  1176. package/shaders/LuminosityShader.mjs +0 -25
  1177. package/shaders/MirrorShader.mjs +0 -35
  1178. package/shaders/NormalMapShader.mjs +0 -31
  1179. package/shaders/ParallaxShader.mjs +0 -113
  1180. package/shaders/PixelShader.mjs +0 -28
  1181. package/shaders/RGBShiftShader.mjs +0 -30
  1182. package/shaders/SAOShader.mjs +0 -144
  1183. package/shaders/SMAAShader.mjs +0 -272
  1184. package/shaders/SSAOShader.mjs +0 -172
  1185. package/shaders/SSRShader.mjs +0 -324
  1186. package/shaders/SepiaShader.mjs +0 -29
  1187. package/shaders/SobelOperatorShader.mjs +0 -44
  1188. package/shaders/SubsurfaceScatteringShader.mjs +0 -59
  1189. package/shaders/TechnicolorShader.mjs +0 -24
  1190. package/shaders/ToneMapShader.mjs +0 -48
  1191. package/shaders/ToonShader.mjs +0 -188
  1192. package/shaders/TriangleBlurShader.mjs +0 -36
  1193. package/shaders/UnpackDepthRGBAShader.mjs +0 -26
  1194. package/shaders/VerticalBlurShader.mjs +0 -44
  1195. package/shaders/VerticalTiltShiftShader.mjs +0 -37
  1196. package/shaders/VignetteShader.mjs +0 -28
  1197. package/shaders/VolumeShader.mjs +0 -178
  1198. package/shaders/WaterRefractionShader.mjs +0 -57
  1199. package/textures/FlakesTexture.mjs +0 -30
  1200. package/types/helpers.mjs +0 -4
  1201. package/utils/BufferGeometryUtils.mjs +0 -570
  1202. package/utils/GeometryCompressionUtils.mjs +0 -547
  1203. package/utils/GeometryUtils.mjs +0 -108
  1204. package/utils/RoughnessMipmapper.mjs +0 -213
  1205. package/utils/SceneUtils.mjs +0 -36
  1206. package/utils/ShadowMapViewer.mjs +0 -114
  1207. package/utils/SkeletonUtils.mjs +0 -292
  1208. package/utils/UVsDebug.mjs +0 -85
  1209. package/utils/WorkerPool.mjs +0 -62
  1210. package/webxr/ARButton.mjs +0 -119
  1211. package/webxr/OculusHandModel.mjs +0 -71
  1212. package/webxr/OculusHandPointerModel.mjs +0 -207
  1213. package/webxr/Text2D.mjs +0 -31
  1214. package/webxr/VRButton.mjs +0 -105
  1215. package/webxr/XRControllerModelFactory.mjs +0 -146
  1216. package/webxr/XREstimatedLight.mjs +0 -126
  1217. package/webxr/XRHandMeshModel.mjs +0 -73
  1218. package/webxr/XRHandModelFactory.mjs +0 -61
  1219. package/webxr/XRHandPrimitiveModel.mjs +0 -68
@@ -1,64 +1,93 @@
1
- "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const THREE = require("three");
1
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
+ import { PropertyBinding, InterpolateLinear, Vector3, RGBAFormat, ShaderMaterial, MeshStandardMaterial, MeshBasicMaterial, MeshPhysicalMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshToonMaterial, MeshLambertMaterial, DoubleSide, LineSegments, LineLoop, Line, Points, MeshDepthMaterial, InterleavedBufferAttribute, BufferAttribute, Object3D, Material, OrthographicCamera, PerspectiveCamera, MathUtils, InterpolateDiscrete, SkinnedMesh, Matrix4, Mesh, Camera, Scene, DirectionalLight, PointLight, SpotLight, NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter, LinearFilter, LinearMipmapNearestFilter, LinearMipmapLinearFilter, ClampToEdgeWrapping, RepeatWrapping, MirroredRepeatWrapping } from 'three';
3
+
4
4
  class GLTFExporter {
5
5
  constructor() {
6
+ _defineProperty(this, "pluginCallbacks", void 0);
7
+
6
8
  this.pluginCallbacks = [];
7
- this.register(function(writer) {
9
+ this.register(function (writer) {
8
10
  return new GLTFLightExtension(writer);
9
11
  });
10
- this.register(function(writer) {
12
+ this.register(function (writer) {
11
13
  return new GLTFMaterialsUnlitExtension(writer);
12
14
  });
13
- this.register(function(writer) {
15
+ this.register(function (writer) {
14
16
  return new GLTFMaterialsPBRSpecularGlossiness(writer);
15
17
  });
16
- this.register(function(writer) {
18
+ this.register(function (writer) {
17
19
  return new GLTFMaterialsTransmissionExtension(writer);
18
20
  });
19
- this.register(function(writer) {
21
+ this.register(function (writer) {
20
22
  return new GLTFMaterialsVolumeExtension(writer);
21
23
  });
22
24
  }
25
+
23
26
  register(callback) {
24
27
  if (this.pluginCallbacks.indexOf(callback) === -1) {
25
28
  this.pluginCallbacks.push(callback);
26
29
  }
30
+
27
31
  return this;
28
32
  }
33
+
29
34
  unregister(callback) {
30
35
  if (this.pluginCallbacks.indexOf(callback) !== -1) {
31
36
  this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);
32
37
  }
38
+
33
39
  return this;
34
40
  }
41
+
35
42
  parse(input, onDone, options) {
36
43
  const writer = new GLTFWriter();
37
44
  const plugins = [];
45
+
38
46
  for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) {
39
47
  plugins.push(this.pluginCallbacks[i](writer));
40
48
  }
49
+
41
50
  writer.setPlugins(plugins);
42
51
  writer.write(input, onDone, options);
43
52
  }
44
- }
45
- GLTFExporter.Utils = {
46
- insertKeyframe: function(track, time) {
47
- const tolerance = 1e-3;
48
- const valueSize = track.getValueSize();
49
- const times = new track.TimeBufferType(track.times.length + 1);
53
+ /**
54
+ * Static utility functions
55
+ */
56
+
57
+
58
+ } //------------------------------------------------------------------------------
59
+ // Constants
60
+ //------------------------------------------------------------------------------
61
+
62
+
63
+ _defineProperty(GLTFExporter, "Utils", {
64
+ insertKeyframe: function (track, time) {
65
+ const tolerance = 0.001; // 1ms
66
+
67
+ const valueSize = track.getValueSize(); // @ts-expect-error
68
+
69
+ const times = new track.TimeBufferType(track.times.length + 1); // @ts-expect-error
70
+
50
71
  const values = new track.ValueBufferType(track.values.length + valueSize);
72
+ /**
73
+ * NOTE: createInterpolant does not exist in the type, but it does exist as a property of the class
74
+ * https://github.com/mrdoob/three.js/blob/77480d339d737b7505b335101ffd3cf29a30738d/src/animation/KeyframeTrack.js#L117
75
+ */
76
+ // @ts-expect-error
77
+
51
78
  const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize));
52
79
  let index;
80
+
53
81
  if (track.times.length === 0) {
54
82
  times[0] = time;
83
+
55
84
  for (let i = 0; i < valueSize; i++) {
56
85
  values[i] = 0;
57
86
  }
87
+
58
88
  index = 0;
59
89
  } else if (time < track.times[0]) {
60
- if (Math.abs(track.times[0] - time) < tolerance)
61
- return 0;
90
+ if (Math.abs(track.times[0] - time) < tolerance) return 0;
62
91
  times[0] = time;
63
92
  times.set(track.times, 1);
64
93
  values.set(interpolant.evaluate(time), 0);
@@ -68,6 +97,7 @@ GLTFExporter.Utils = {
68
97
  if (Math.abs(track.times[track.times.length - 1] - time) < tolerance) {
69
98
  return track.times.length - 1;
70
99
  }
100
+
71
101
  times[times.length - 1] = time;
72
102
  times.set(track.times, 0);
73
103
  values.set(track.values, 0);
@@ -75,8 +105,8 @@ GLTFExporter.Utils = {
75
105
  index = times.length - 1;
76
106
  } else {
77
107
  for (let i = 0; i < track.times.length; i++) {
78
- if (Math.abs(track.times[i] - time) < tolerance)
79
- return i;
108
+ if (Math.abs(track.times[i] - time) < tolerance) return i;
109
+
80
110
  if (track.times[i] < time && track.times[i + 1] > time) {
81
111
  times.set(track.times.slice(0, i + 1), 0);
82
112
  times[i + 1] = time;
@@ -89,183 +119,264 @@ GLTFExporter.Utils = {
89
119
  }
90
120
  }
91
121
  }
122
+
92
123
  track.times = times;
93
124
  track.values = values;
94
125
  return index;
95
126
  },
96
- mergeMorphTargetTracks: function(clip, root) {
127
+ mergeMorphTargetTracks: function (clip, root) {
97
128
  const tracks = [];
98
129
  const mergedTracks = {};
99
130
  const sourceTracks = clip.tracks;
131
+
100
132
  for (let i = 0; i < sourceTracks.length; ++i) {
101
133
  let sourceTrack = sourceTracks[i];
102
- const sourceTrackBinding = THREE.PropertyBinding.parseTrackName(sourceTrack.name);
103
- const sourceTrackNode = THREE.PropertyBinding.findNode(root, sourceTrackBinding.nodeName);
104
- if (sourceTrackBinding.propertyName !== "morphTargetInfluences" || sourceTrackBinding.propertyIndex === void 0) {
134
+ const sourceTrackBinding = PropertyBinding.parseTrackName(sourceTrack.name);
135
+ const sourceTrackNode = PropertyBinding.findNode(root, sourceTrackBinding.nodeName);
136
+
137
+ if (sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined) {
138
+ // Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.
105
139
  tracks.push(sourceTrack);
106
140
  continue;
107
141
  }
108
- if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) {
142
+
143
+ if ( // @ts-expect-error
144
+ sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && // @ts-expect-error
145
+ sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) {
146
+ // @ts-expect-error
109
147
  if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {
110
- throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");
148
+ // This should never happen, because glTF morph target animations
149
+ // affect all targets already.
150
+ throw new Error('THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.');
111
151
  }
112
- console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.");
152
+
153
+ console.warn('THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.');
113
154
  sourceTrack = sourceTrack.clone();
114
- sourceTrack.setInterpolation(THREE.InterpolateLinear);
155
+ sourceTrack.setInterpolation(InterpolateLinear);
115
156
  }
157
+
116
158
  const targetCount = sourceTrackNode.morphTargetInfluences.length;
117
159
  const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex];
118
- if (targetIndex === void 0) {
119
- throw new Error("THREE.GLTFExporter: Morph target name not found: " + sourceTrackBinding.propertyIndex);
160
+
161
+ if (targetIndex === undefined) {
162
+ throw new Error('THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex);
120
163
  }
121
- let mergedTrack;
122
- if (mergedTracks[sourceTrackNode.uuid] === void 0) {
123
- mergedTrack = sourceTrack.clone();
164
+
165
+ let mergedTrack; // If this is the first time we've seen this object, create a new
166
+ // track to store merged keyframe data for each morph target.
167
+
168
+ if (mergedTracks[sourceTrackNode.uuid] === undefined) {
169
+ mergedTrack = sourceTrack.clone(); // @ts-expect-error
170
+
124
171
  const values = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length);
172
+
125
173
  for (let j = 0; j < mergedTrack.times.length; j++) {
126
174
  values[j * targetCount + targetIndex] = mergedTrack.values[j];
127
- }
128
- mergedTrack.name = (sourceTrackBinding.nodeName || "") + ".morphTargetInfluences";
175
+ } // We need to take into consideration the intended target node
176
+ // of our original un-merged morphTarget animation.
177
+
178
+
179
+ mergedTrack.name = (sourceTrackBinding.nodeName || '') + '.morphTargetInfluences';
129
180
  mergedTrack.values = values;
130
181
  mergedTracks[sourceTrackNode.uuid] = mergedTrack;
131
182
  tracks.push(mergedTrack);
132
183
  continue;
133
- }
184
+ } // @ts-expect-error
185
+
186
+
134
187
  const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1));
135
- mergedTrack = mergedTracks[sourceTrackNode.uuid];
188
+ mergedTrack = mergedTracks[sourceTrackNode.uuid]; // For every existing keyframe of the merged track, write a (possibly
189
+ // interpolated) value from the source track.
190
+
136
191
  for (let j = 0; j < mergedTrack.times.length; j++) {
137
192
  mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]);
138
- }
193
+ } // For every existing keyframe of the source track, write a (possibly
194
+ // new) keyframe to the merged track. Values from the previous loop may
195
+ // be written again, but keyframes are de-duplicated.
196
+
197
+
139
198
  for (let j = 0; j < sourceTrack.times.length; j++) {
140
199
  const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]);
141
200
  mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j];
142
201
  }
143
202
  }
203
+
144
204
  clip.tracks = tracks;
145
205
  return clip;
146
206
  }
147
- };
207
+ });
208
+
148
209
  const WEBGL_CONSTANTS = {
149
- POINTS: 0,
150
- LINES: 1,
151
- LINE_LOOP: 2,
152
- LINE_STRIP: 3,
153
- TRIANGLES: 4,
154
- TRIANGLE_STRIP: 5,
155
- TRIANGLE_FAN: 6,
156
- UNSIGNED_BYTE: 5121,
157
- UNSIGNED_SHORT: 5123,
158
- FLOAT: 5126,
159
- UNSIGNED_INT: 5125,
160
- ARRAY_BUFFER: 34962,
161
- ELEMENT_ARRAY_BUFFER: 34963,
162
- NEAREST: 9728,
163
- LINEAR: 9729,
164
- NEAREST_MIPMAP_NEAREST: 9984,
165
- LINEAR_MIPMAP_NEAREST: 9985,
166
- NEAREST_MIPMAP_LINEAR: 9986,
167
- LINEAR_MIPMAP_LINEAR: 9987,
210
+ POINTS: 0x0000,
211
+ LINES: 0x0001,
212
+ LINE_LOOP: 0x0002,
213
+ LINE_STRIP: 0x0003,
214
+ TRIANGLES: 0x0004,
215
+ TRIANGLE_STRIP: 0x0005,
216
+ TRIANGLE_FAN: 0x0006,
217
+ UNSIGNED_BYTE: 0x1401,
218
+ UNSIGNED_SHORT: 0x1403,
219
+ FLOAT: 0x1406,
220
+ UNSIGNED_INT: 0x1405,
221
+ ARRAY_BUFFER: 0x8892,
222
+ ELEMENT_ARRAY_BUFFER: 0x8893,
223
+ NEAREST: 0x2600,
224
+ LINEAR: 0x2601,
225
+ NEAREST_MIPMAP_NEAREST: 0x2700,
226
+ LINEAR_MIPMAP_NEAREST: 0x2701,
227
+ NEAREST_MIPMAP_LINEAR: 0x2702,
228
+ LINEAR_MIPMAP_LINEAR: 0x2703,
168
229
  CLAMP_TO_EDGE: 33071,
169
230
  MIRRORED_REPEAT: 33648,
170
231
  REPEAT: 10497
171
232
  };
172
233
  const THREE_TO_WEBGL = {};
173
- THREE_TO_WEBGL[THREE.NearestFilter] = WEBGL_CONSTANTS.NEAREST;
174
- THREE_TO_WEBGL[THREE.NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;
175
- THREE_TO_WEBGL[THREE.NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;
176
- THREE_TO_WEBGL[THREE.LinearFilter] = WEBGL_CONSTANTS.LINEAR;
177
- THREE_TO_WEBGL[THREE.LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;
178
- THREE_TO_WEBGL[THREE.LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;
179
- THREE_TO_WEBGL[THREE.ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;
180
- THREE_TO_WEBGL[THREE.RepeatWrapping] = WEBGL_CONSTANTS.REPEAT;
181
- THREE_TO_WEBGL[THREE.MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT;
234
+ THREE_TO_WEBGL[NearestFilter] = WEBGL_CONSTANTS.NEAREST;
235
+ THREE_TO_WEBGL[NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;
236
+ THREE_TO_WEBGL[NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;
237
+ THREE_TO_WEBGL[LinearFilter] = WEBGL_CONSTANTS.LINEAR;
238
+ THREE_TO_WEBGL[LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;
239
+ THREE_TO_WEBGL[LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;
240
+ THREE_TO_WEBGL[ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;
241
+ THREE_TO_WEBGL[RepeatWrapping] = WEBGL_CONSTANTS.REPEAT;
242
+ THREE_TO_WEBGL[MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT;
182
243
  const PATH_PROPERTIES = {
183
- scale: "scale",
184
- position: "translation",
185
- quaternion: "rotation",
186
- morphTargetInfluences: "weights"
187
- };
244
+ scale: 'scale',
245
+ position: 'translation',
246
+ quaternion: 'rotation',
247
+ morphTargetInfluences: 'weights'
248
+ }; // GLB constants
249
+ // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
250
+
188
251
  const GLB_HEADER_BYTES = 12;
189
- const GLB_HEADER_MAGIC = 1179937895;
252
+ const GLB_HEADER_MAGIC = 0x46546c67;
190
253
  const GLB_VERSION = 2;
191
254
  const GLB_CHUNK_PREFIX_BYTES = 8;
192
- const GLB_CHUNK_TYPE_JSON = 1313821514;
193
- const GLB_CHUNK_TYPE_BIN = 5130562;
255
+ const GLB_CHUNK_TYPE_JSON = 0x4e4f534a;
256
+ const GLB_CHUNK_TYPE_BIN = 0x004e4942;
257
+ /**
258
+ * Writer
259
+ */
260
+
194
261
  class GLTFWriter {
195
262
  constructor() {
263
+ _defineProperty(this, "plugins", void 0);
264
+
265
+ _defineProperty(this, "options", void 0);
266
+
267
+ _defineProperty(this, "pending", void 0);
268
+
269
+ _defineProperty(this, "buffers", void 0);
270
+
271
+ _defineProperty(this, "byteOffset", void 0);
272
+
273
+ _defineProperty(this, "nodeMap", void 0);
274
+
275
+ _defineProperty(this, "skins", void 0);
276
+
277
+ _defineProperty(this, "extensionsUsed", void 0);
278
+
279
+ _defineProperty(this, "uids", void 0);
280
+
281
+ _defineProperty(this, "uid", void 0);
282
+
283
+ _defineProperty(this, "json", void 0);
284
+
285
+ _defineProperty(this, "cache", void 0);
286
+
287
+ _defineProperty(this, "cachedCanvas", void 0);
288
+
196
289
  this.plugins = [];
197
290
  this.options = {};
198
291
  this.pending = [];
199
292
  this.buffers = [];
200
293
  this.byteOffset = 0;
201
- this.nodeMap = /* @__PURE__ */ new Map();
294
+ this.nodeMap = new Map();
202
295
  this.skins = [];
203
296
  this.extensionsUsed = {};
204
- this.uids = /* @__PURE__ */ new Map();
297
+ this.uids = new Map();
205
298
  this.uid = 0;
206
299
  this.json = {
207
300
  asset: {
208
- version: "2.0",
209
- generator: "THREE.GLTFExporter"
301
+ version: '2.0',
302
+ generator: 'THREE.GLTFExporter'
210
303
  }
211
304
  };
212
305
  this.cache = {
213
- meshes: /* @__PURE__ */ new Map(),
214
- attributes: /* @__PURE__ */ new Map(),
215
- attributesNormalized: /* @__PURE__ */ new Map(),
216
- materials: /* @__PURE__ */ new Map(),
217
- textures: /* @__PURE__ */ new Map(),
218
- images: /* @__PURE__ */ new Map()
306
+ meshes: new Map(),
307
+ attributes: new Map(),
308
+ attributesNormalized: new Map(),
309
+ materials: new Map(),
310
+ textures: new Map(),
311
+ images: new Map()
219
312
  };
220
313
  this.cachedCanvas = null;
221
314
  }
315
+
222
316
  setPlugins(plugins) {
223
317
  this.plugins = plugins;
224
318
  }
319
+ /**
320
+ * Parse scenes and generate GLTF output
321
+ * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
322
+ * @param {Function} onDone Callback on completed
323
+ * @param {Object} options options
324
+ */
325
+
326
+
225
327
  write(input, onDone, options) {
226
- this.options = Object.assign(
227
- {},
228
- {
229
- binary: false,
230
- trs: false,
231
- onlyVisible: true,
232
- truncateDrawRange: true,
233
- embedImages: true,
234
- maxTextureSize: Infinity,
235
- animations: [],
236
- includeCustomExtensions: false
237
- },
238
- options
239
- );
240
- if (this.options.animations !== void 0 && this.options.animations.length > 0) {
328
+ this.options = Object.assign({}, {
329
+ // default options
330
+ binary: false,
331
+ trs: false,
332
+ onlyVisible: true,
333
+ truncateDrawRange: true,
334
+ embedImages: true,
335
+ maxTextureSize: Infinity,
336
+ animations: [],
337
+ includeCustomExtensions: false
338
+ }, options);
339
+
340
+ if (this.options.animations !== undefined && this.options.animations.length > 0) {
341
+ // Only TRS properties, and not matrices, may be targeted by animation.
241
342
  this.options.trs = true;
242
343
  }
344
+
243
345
  this.processInput(input);
244
346
  const writer = this;
245
347
  Promise.all(this.pending).then(() => {
246
348
  const buffers = writer.buffers;
247
349
  const json = writer.json;
248
- const options2 = writer.options;
249
- const extensionsUsed = writer.extensionsUsed;
250
- const blob = new Blob(buffers, { type: "application/octet-stream" });
350
+ const options = writer.options;
351
+ const extensionsUsed = writer.extensionsUsed; // Merge buffers.
352
+
353
+ const blob = new Blob(buffers, {
354
+ type: 'application/octet-stream'
355
+ }); // Declare extensions.
356
+
251
357
  const extensionsUsedList = Object.keys(extensionsUsed);
252
- if (extensionsUsedList.length > 0)
253
- json.extensionsUsed = extensionsUsedList;
254
- if (json.buffers && json.buffers.length > 0)
255
- json.buffers[0].byteLength = blob.size;
256
- if (options2.binary) {
358
+ if (extensionsUsedList.length > 0) json.extensionsUsed = extensionsUsedList; // Update bytelength of the single buffer.
359
+
360
+ if (json.buffers && json.buffers.length > 0) json.buffers[0].byteLength = blob.size;
361
+
362
+ if (options.binary) {
363
+ // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
257
364
  const reader = new window.FileReader();
258
365
  reader.readAsArrayBuffer(blob);
366
+
259
367
  reader.onloadend = () => {
260
- if (reader.result !== null && typeof reader.result !== "string") {
368
+ if (reader.result !== null && typeof reader.result !== 'string') {
369
+ // Binary chunk.
261
370
  const binaryChunk = this.getPaddedArrayBuffer(reader.result);
262
371
  const binaryChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));
263
372
  binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true);
264
- binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true);
265
- const jsonChunk = this.getPaddedArrayBuffer(this.stringToArrayBuffer(JSON.stringify(json)), 32);
373
+ binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true); // JSON chunk.
374
+
375
+ const jsonChunk = this.getPaddedArrayBuffer(this.stringToArrayBuffer(JSON.stringify(json)), 0x20);
266
376
  const jsonChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));
267
377
  jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true);
268
- jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true);
378
+ jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true); // GLB header.
379
+
269
380
  const header = new ArrayBuffer(GLB_HEADER_BYTES);
270
381
  const headerView = new DataView(header);
271
382
  headerView.setUint32(0, GLB_HEADER_MAGIC, true);
@@ -273,12 +384,13 @@ class GLTFWriter {
273
384
  const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
274
385
  headerView.setUint32(8, totalByteLength, true);
275
386
  const glbBlob = new Blob([header, jsonChunkPrefix, jsonChunk, binaryChunkPrefix, binaryChunk], {
276
- type: "application/octet-stream"
387
+ type: 'application/octet-stream'
277
388
  });
278
389
  const glbReader = new window.FileReader();
279
390
  glbReader.readAsArrayBuffer(glbBlob);
280
- glbReader.onloadend = function() {
281
- if (glbReader.result !== null && typeof glbReader.result !== "string") {
391
+
392
+ glbReader.onloadend = function () {
393
+ if (glbReader.result !== null && typeof glbReader.result !== 'string') {
282
394
  onDone(glbReader.result);
283
395
  }
284
396
  };
@@ -288,9 +400,11 @@ class GLTFWriter {
288
400
  if (json.buffers && json.buffers.length > 0) {
289
401
  const reader = new window.FileReader();
290
402
  reader.readAsDataURL(blob);
291
- reader.onloadend = function() {
403
+
404
+ reader.onloadend = function () {
292
405
  const base64data = reader.result;
293
- if (json.buffers !== void 0 && base64data !== null) {
406
+
407
+ if (json.buffers !== undefined && base64data !== null) {
294
408
  json.buffers[0].uri = base64data;
295
409
  onDone(json);
296
410
  }
@@ -301,100 +415,171 @@ class GLTFWriter {
301
415
  }
302
416
  });
303
417
  }
418
+ /**
419
+ * Serializes a userData.
420
+ *
421
+ * @param {THREE.Object3D|THREE.Material} object
422
+ * @param {Object} objectDef
423
+ */
424
+
425
+
304
426
  serializeUserData(object, objectDef) {
305
- if (Object.keys(object.userData).length === 0)
306
- return;
427
+ if (Object.keys(object.userData).length === 0) return;
307
428
  const options = this.options;
308
429
  const extensionsUsed = this.extensionsUsed;
430
+
309
431
  try {
310
432
  const json = JSON.parse(JSON.stringify(object.userData));
433
+
311
434
  if (options.includeCustomExtensions && json.gltfExtensions) {
312
- if (objectDef.extensions === void 0)
313
- objectDef.extensions = {};
435
+ if (objectDef.extensions === undefined) objectDef.extensions = {};
436
+
314
437
  for (const extensionName in json.gltfExtensions) {
315
438
  objectDef.extensions[extensionName] = json.gltfExtensions[extensionName];
316
439
  extensionsUsed[extensionName] = true;
317
440
  }
441
+
318
442
  delete json.gltfExtensions;
319
443
  }
320
- if (Object.keys(json).length > 0)
321
- objectDef.extras = json;
444
+
445
+ if (Object.keys(json).length > 0) objectDef.extras = json;
322
446
  } catch (error) {
323
447
  if (error instanceof Error) {
324
- console.warn(
325
- "THREE.GLTFExporter: userData of '" + object.name + "' won't be serialized because of JSON.stringify error - " + error.message
326
- );
448
+ console.warn("THREE.GLTFExporter: userData of '" + object.name + "' " + "won't be serialized because of JSON.stringify error - " + error.message);
327
449
  }
328
450
  }
329
451
  }
452
+ /**
453
+ * Assign and return a temporal unique id for an object
454
+ * especially which doesn't have .uuid
455
+ * @param {Object} object
456
+ * @return {Integer}
457
+ */
458
+
459
+
330
460
  getUID(object) {
331
- if (!this.uids.has(object))
332
- this.uids.set(object, this.uid++);
461
+ if (!this.uids.has(object)) this.uids.set(object, this.uid++);
333
462
  return this.uids.get(object);
334
463
  }
464
+ /**
465
+ * Checks if normal attribute values are normalized.
466
+ *
467
+ * @param {BufferAttribute} normal
468
+ * @returns {Boolean}
469
+ */
470
+
471
+
335
472
  isNormalizedNormalAttribute(normal) {
336
473
  const cache = this.cache;
337
- if (cache.attributesNormalized.has(normal))
338
- return false;
339
- const v = new THREE.Vector3();
474
+ if (cache.attributesNormalized.has(normal)) return false;
475
+ const v = new Vector3();
476
+
340
477
  for (let i = 0, il = normal.count; i < il; i++) {
341
- if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4)
342
- return false;
478
+ // 0.0005 is from glTF-validator
479
+ if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1.0) > 0.0005) return false;
343
480
  }
481
+
344
482
  return true;
345
483
  }
484
+ /**
485
+ * Creates normalized normal buffer attribute.
486
+ *
487
+ * @param {BufferAttribute} normal
488
+ * @returns {BufferAttribute}
489
+ *
490
+ */
491
+
492
+
346
493
  createNormalizedNormalAttribute(normal) {
347
494
  const cache = this.cache;
348
- if (cache.attributesNormalized.has(normal))
349
- return cache.attributesNormalized.get(normal);
495
+ if (cache.attributesNormalized.has(normal)) return cache.attributesNormalized.get(normal);
350
496
  const attribute = normal.clone();
351
- const v = new THREE.Vector3();
497
+ const v = new Vector3();
498
+
352
499
  for (let i = 0, il = attribute.count; i < il; i++) {
353
500
  v.fromBufferAttribute(attribute, i);
501
+
354
502
  if (v.x === 0 && v.y === 0 && v.z === 0) {
355
- v.setX(1);
503
+ // if values can't be normalized set (1, 0, 0)
504
+ v.setX(1.0);
356
505
  } else {
357
506
  v.normalize();
358
507
  }
508
+
359
509
  attribute.setXYZ(i, v.x, v.y, v.z);
360
510
  }
511
+
361
512
  cache.attributesNormalized.set(normal, attribute);
362
513
  return attribute;
363
514
  }
515
+ /**
516
+ * Applies a texture transform, if present, to the map definition. Requires
517
+ * the KHR_texture_transform extension.
518
+ *
519
+ * @param {Object} mapDef
520
+ * @param {THREE.Texture} texture
521
+ */
522
+
523
+
364
524
  applyTextureTransform(mapDef, texture) {
365
525
  let didTransform = false;
366
526
  const transformDef = {};
527
+
367
528
  if (texture.offset.x !== 0 || texture.offset.y !== 0) {
368
529
  transformDef.offset = texture.offset.toArray();
369
530
  didTransform = true;
370
531
  }
532
+
371
533
  if (texture.rotation !== 0) {
372
534
  transformDef.rotation = texture.rotation;
373
535
  didTransform = true;
374
536
  }
537
+
375
538
  if (texture.repeat.x !== 1 || texture.repeat.y !== 1) {
376
539
  transformDef.scale = texture.repeat.toArray();
377
540
  didTransform = true;
378
541
  }
542
+
379
543
  if (didTransform) {
380
544
  mapDef.extensions = mapDef.extensions || {};
381
- mapDef.extensions["KHR_texture_transform"] = transformDef;
382
- this.extensionsUsed["KHR_texture_transform"] = true;
545
+ mapDef.extensions['KHR_texture_transform'] = transformDef;
546
+ this.extensionsUsed['KHR_texture_transform'] = true;
383
547
  }
384
548
  }
549
+ /**
550
+ * Process a buffer to append to the default one.
551
+ * @param {ArrayBuffer} buffer
552
+ * @return {Integer}
553
+ */
554
+
555
+
385
556
  processBuffer(buffer) {
386
557
  const json = this.json;
387
558
  const buffers = this.buffers;
388
- if (!json.buffers)
389
- json.buffers = [{ byteLength: 0 }];
559
+ if (!json.buffers) json.buffers = [{
560
+ byteLength: 0
561
+ }]; // All buffers are merged before export.
562
+
390
563
  buffers.push(buffer);
391
564
  return 0;
392
565
  }
566
+ /**
567
+ * Process and generate a BufferView
568
+ * @param {BufferAttribute} attribute
569
+ * @param {number} componentType
570
+ * @param {number} start
571
+ * @param {number} count
572
+ * @param {number} target (Optional) Target usage of the BufferView
573
+ * @return {Object}
574
+ */
575
+
576
+
393
577
  processBufferView(attribute, componentType, start, count, target) {
394
578
  const json = this.json;
395
- if (!json.bufferViews)
396
- json.bufferViews = [];
579
+ if (!json.bufferViews) json.bufferViews = []; // Create a new dataview and dump the attribute's array into it
580
+
397
581
  let componentSize;
582
+
398
583
  if (componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE) {
399
584
  componentSize = 1;
400
585
  } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT) {
@@ -402,25 +587,23 @@ class GLTFWriter {
402
587
  } else {
403
588
  componentSize = 4;
404
589
  }
590
+
405
591
  const byteLength = this.getPaddedBufferSize(count * attribute.itemSize * componentSize);
406
592
  const dataView = new DataView(new ArrayBuffer(byteLength));
407
593
  let offset = 0;
594
+
408
595
  for (let i = start; i < start + count; i++) {
409
596
  for (let a = 0; a < attribute.itemSize; a++) {
410
597
  let value;
598
+
411
599
  if (attribute.itemSize > 4) {
600
+ // no support for interleaved data for itemSize > 4
412
601
  value = attribute.array[i * attribute.itemSize + a];
413
602
  } else {
414
- if (a === 0)
415
- value = attribute.getX(i);
416
- else if (a === 1)
417
- value = attribute.getY(i);
418
- else if (a === 2)
419
- value = attribute.getZ(i);
420
- else if (a === 3)
421
- value = attribute.getW(i);
603
+ if (a === 0) value = attribute.getX(i);else if (a === 1) value = attribute.getY(i);else if (a === 2) value = attribute.getZ(i);else if (a === 3) value = attribute.getW(i);
422
604
  }
423
- if (value !== void 0) {
605
+
606
+ if (value !== undefined) {
424
607
  if (componentType === WEBGL_CONSTANTS.FLOAT) {
425
608
  dataView.setFloat32(offset, value, true);
426
609
  } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_INT) {
@@ -431,37 +614,49 @@ class GLTFWriter {
431
614
  dataView.setUint8(offset, value);
432
615
  }
433
616
  }
617
+
434
618
  offset += componentSize;
435
619
  }
436
620
  }
621
+
437
622
  const bufferViewDef = {
438
623
  buffer: this.processBuffer(dataView.buffer),
439
624
  byteOffset: this.byteOffset,
440
- byteLength
625
+ byteLength: byteLength
441
626
  };
442
- if (target !== void 0)
443
- bufferViewDef.target = target;
627
+ if (target !== undefined) bufferViewDef.target = target;
628
+
444
629
  if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) {
630
+ // Only define byteStride for vertex attributes.
445
631
  bufferViewDef.byteStride = attribute.itemSize * componentSize;
446
632
  }
633
+
447
634
  this.byteOffset += byteLength;
448
- json.bufferViews.push(bufferViewDef);
635
+ json.bufferViews.push(bufferViewDef); // @TODO Merge bufferViews where possible.
636
+
449
637
  const output = {
450
638
  id: json.bufferViews.length - 1,
451
639
  byteLength: 0
452
640
  };
453
641
  return output;
454
642
  }
643
+ /**
644
+ * Process and generate a BufferView from an image Blob.
645
+ * @param {Blob} blob
646
+ * @return {Promise<Integer>}
647
+ */
648
+
649
+
455
650
  processBufferViewImage(blob) {
456
651
  const writer = this;
457
652
  const json = writer.json;
458
- if (!json.bufferViews)
459
- json.bufferViews = [];
460
- return new Promise((resolve) => {
653
+ if (!json.bufferViews) json.bufferViews = [];
654
+ return new Promise(resolve => {
461
655
  const reader = new window.FileReader();
462
656
  reader.readAsArrayBuffer(blob);
657
+
463
658
  reader.onloadend = () => {
464
- if (reader.result !== null && typeof reader.result !== "string" && json.bufferViews !== void 0) {
659
+ if (reader.result !== null && typeof reader.result !== 'string' && json.bufferViews !== undefined) {
465
660
  const buffer = this.getPaddedArrayBuffer(reader.result);
466
661
  const bufferViewDef = {
467
662
  buffer: writer.processBuffer(buffer),
@@ -474,17 +669,28 @@ class GLTFWriter {
474
669
  };
475
670
  });
476
671
  }
672
+ /**
673
+ * Process attribute to generate an accessor
674
+ * @param {BufferAttribute} attribute Attribute to process
675
+ * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range
676
+ * @param {Integer} start (Optional)
677
+ * @param {Integer} count (Optional)
678
+ * @return {Integer|null} Index of the processed accessor on the "accessors" array
679
+ */
680
+
681
+
477
682
  processAccessor(attribute, geometry, start, count) {
478
683
  const options = this.options;
479
684
  const json = this.json;
480
685
  const types = {
481
- 1: "SCALAR",
482
- 2: "VEC2",
483
- 3: "VEC3",
484
- 4: "VEC4",
485
- 16: "MAT4"
686
+ 1: 'SCALAR',
687
+ 2: 'VEC2',
688
+ 3: 'VEC3',
689
+ 4: 'VEC4',
690
+ 16: 'MAT4'
486
691
  };
487
- let componentType;
692
+ let componentType; // Detect the component type of the attribute array (float, uint or ushort)
693
+
488
694
  if (attribute.array.constructor === Float32Array) {
489
695
  componentType = WEBGL_CONSTANTS.FLOAT;
490
696
  } else if (attribute.array.constructor === Uint32Array) {
@@ -494,80 +700,95 @@ class GLTFWriter {
494
700
  } else if (attribute.array.constructor === Uint8Array) {
495
701
  componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
496
702
  } else {
497
- throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type.");
703
+ throw new Error('THREE.GLTFExporter: Unsupported bufferAttribute component type.');
498
704
  }
499
- if (start === void 0)
500
- start = 0;
501
- if (count === void 0)
502
- count = attribute.count;
503
- if (options.truncateDrawRange && geometry !== void 0 && geometry.index === null) {
705
+
706
+ if (start === undefined) start = 0;
707
+ if (count === undefined) count = attribute.count; // @TODO Indexed buffer geometry with drawRange not supported yet
708
+
709
+ if (options.truncateDrawRange && geometry !== undefined && geometry.index === null) {
504
710
  const end = start + count;
505
711
  const end2 = geometry.drawRange.count === Infinity ? attribute.count : geometry.drawRange.start + geometry.drawRange.count;
506
712
  start = Math.max(start, geometry.drawRange.start);
507
713
  count = Math.min(end, end2) - start;
508
- if (count < 0)
509
- count = 0;
510
- }
511
- if (count === 0)
512
- return null;
714
+ if (count < 0) count = 0;
715
+ } // Skip creating an accessor if the attribute doesn't have data to export
716
+
717
+
718
+ if (count === 0) return null;
513
719
  const minMax = this.getMinMax(attribute, start, count);
514
- let bufferViewTarget;
515
- if (geometry !== void 0) {
720
+ let bufferViewTarget; // If geometry isn't provided, don't infer the target usage of the bufferView. For
721
+ // animation samplers, target must not be set.
722
+
723
+ if (geometry !== undefined) {
516
724
  bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;
517
725
  }
518
- if (bufferViewTarget !== void 0) {
726
+
727
+ if (bufferViewTarget !== undefined) {
519
728
  const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget);
520
729
  const accessorDef = {
521
730
  bufferView: bufferView.id,
522
731
  byteOffset: bufferView.byteOffset,
523
- componentType,
524
- count,
732
+ componentType: componentType,
733
+ count: count,
525
734
  max: minMax.max,
526
735
  min: minMax.min,
527
736
  type: types[attribute.itemSize]
528
737
  };
529
- if (attribute.normalized)
530
- accessorDef.normalized = true;
531
- if (!json.accessors)
532
- json.accessors = [];
738
+ if (attribute.normalized) accessorDef.normalized = true;
739
+ if (!json.accessors) json.accessors = [];
533
740
  return json.accessors.push(accessorDef) - 1;
534
741
  }
535
742
  }
743
+ /**
744
+ * Process image
745
+ * @param {Image} image to process
746
+ * @param {Integer} format of the image (RGBAFormat)
747
+ * @param {Boolean} flipY before writing out the image
748
+ * @return {Integer} Index of the processed texture in the "images" array
749
+ */
750
+
751
+
536
752
  processImage(image, format, flipY) {
537
753
  const writer = this;
538
754
  const cache = writer.cache;
539
755
  const json = writer.json;
540
756
  const options = writer.options;
541
757
  const pending = writer.pending;
542
- if (!cache.images.has(image))
543
- cache.images.set(image, {});
758
+ if (!cache.images.has(image)) cache.images.set(image, {});
544
759
  const cachedImages = cache.images.get(image);
545
- const mimeType = format === THREE.RGBAFormat ? "image/png" : "image/jpeg";
546
- const key = mimeType + ":flipY/" + flipY.toString();
547
- if (cachedImages !== void 0 && cachedImages[key] !== void 0)
548
- return cachedImages[key];
549
- if (!json.images)
550
- json.images = [];
551
- const imageDef = { mimeType };
552
- if (options.embedImages && options.maxTextureSize !== void 0) {
553
- const canvas = this.cachedCanvas = this.cachedCanvas || document.createElement("canvas");
760
+ const mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';
761
+ const key = mimeType + ':flipY/' + flipY.toString();
762
+ if (cachedImages !== undefined && cachedImages[key] !== undefined) return cachedImages[key];
763
+ if (!json.images) json.images = [];
764
+ const imageDef = {
765
+ mimeType: mimeType
766
+ };
767
+
768
+ if (options.embedImages && options.maxTextureSize !== undefined) {
769
+ const canvas = this.cachedCanvas = this.cachedCanvas || document.createElement('canvas');
554
770
  canvas.width = Math.min(image.width, options.maxTextureSize);
555
771
  canvas.height = Math.min(image.height, options.maxTextureSize);
556
- const ctx = canvas.getContext("2d");
772
+ const ctx = canvas.getContext('2d');
773
+
557
774
  if (flipY) {
558
- ctx == null ? void 0 : ctx.translate(0, canvas.height);
559
- ctx == null ? void 0 : ctx.scale(1, -1);
775
+ ctx === null || ctx === void 0 ? void 0 : ctx.translate(0, canvas.height);
776
+ ctx === null || ctx === void 0 ? void 0 : ctx.scale(1, -1);
560
777
  }
561
- if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) {
562
- ctx == null ? void 0 : ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
778
+
779
+ if (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {
780
+ ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
563
781
  } else {
564
- if (format !== THREE.RGBAFormat) {
565
- console.error("GLTFExporter: Only RGBA format is supported.");
782
+ if (format !== RGBAFormat) {
783
+ console.error('GLTFExporter: Only RGBA format is supported.');
566
784
  }
785
+
567
786
  if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) {
568
- console.warn("GLTFExporter: Image size is bigger than maxTextureSize", image);
787
+ console.warn('GLTFExporter: Image size is bigger than maxTextureSize', image);
569
788
  }
789
+
570
790
  const data = new Uint8ClampedArray(image.height * image.width * 4);
791
+
571
792
  if (image instanceof ImageData) {
572
793
  for (let i = 0; i < data.length; i += 4) {
573
794
  data[i + 0] = image.data[i + 0];
@@ -576,36 +797,43 @@ class GLTFWriter {
576
797
  data[i + 3] = image.data[i + 3];
577
798
  }
578
799
  }
579
- ctx == null ? void 0 : ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0);
800
+
801
+ ctx === null || ctx === void 0 ? void 0 : ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0);
580
802
  }
803
+
581
804
  if (options.binary) {
582
- pending.push(
583
- new Promise(function(resolve) {
584
- canvas.toBlob(function(blob) {
585
- if (blob !== null) {
586
- writer.processBufferViewImage(blob).then(function(bufferViewIndex) {
587
- imageDef.bufferView = bufferViewIndex;
588
- resolve();
589
- });
590
- }
591
- }, mimeType);
592
- })
593
- );
805
+ pending.push(new Promise(function (resolve) {
806
+ canvas.toBlob(function (blob) {
807
+ if (blob !== null) {
808
+ writer.processBufferViewImage(blob).then(function (bufferViewIndex) {
809
+ imageDef.bufferView = bufferViewIndex; // @ts-expect-error
810
+
811
+ resolve();
812
+ });
813
+ }
814
+ }, mimeType);
815
+ }));
594
816
  } else {
595
817
  imageDef.uri = canvas.toDataURL(mimeType);
596
818
  }
597
819
  } else if (image instanceof Image) {
598
820
  imageDef.uri = image.src;
599
821
  }
822
+
600
823
  const index = json.images.push(imageDef) - 1;
601
- if (cachedImages !== void 0)
602
- cachedImages[key] = index;
824
+ if (cachedImages !== undefined) cachedImages[key] = index;
603
825
  return index;
604
826
  }
827
+ /**
828
+ * Process sampler
829
+ * @param {Texture} map Texture to process
830
+ * @return {Integer} Index of the processed texture in the "samplers" array
831
+ */
832
+
833
+
605
834
  processSampler(map) {
606
835
  const json = this.json;
607
- if (!json.samplers)
608
- json.samplers = [];
836
+ if (!json.samplers) json.samplers = [];
609
837
  const samplerDef = {
610
838
  magFilter: THREE_TO_WEBGL[map.magFilter],
611
839
  minFilter: THREE_TO_WEBGL[map.minFilter],
@@ -614,129 +842,189 @@ class GLTFWriter {
614
842
  };
615
843
  return json.samplers.push(samplerDef) - 1;
616
844
  }
845
+ /**
846
+ * Process texture
847
+ * @param {Texture} map Map to process
848
+ * @return {Integer} Index of the processed texture in the "textures" array
849
+ */
850
+
851
+
617
852
  processTexture(map) {
618
853
  const cache = this.cache;
619
854
  const json = this.json;
620
- if (cache.textures.has(map))
621
- return cache.textures.get(map);
622
- if (!json.textures)
623
- json.textures = [];
855
+ if (cache.textures.has(map)) return cache.textures.get(map);
856
+ if (!json.textures) json.textures = [];
624
857
  const textureDef = {
625
858
  sampler: this.processSampler(map),
626
859
  source: this.processImage(map.image, map.format, map.flipY)
627
860
  };
628
- if (map.name)
629
- textureDef.name = map.name;
630
- this._invokeAll(function(ext) {
861
+ if (map.name) textureDef.name = map.name;
862
+
863
+ this._invokeAll(function (ext) {
631
864
  ext.writeTexture && ext.writeTexture(map, textureDef);
632
865
  });
866
+
633
867
  const index = json.textures.push(textureDef) - 1;
634
868
  cache.textures.set(map, index);
635
869
  return index;
636
870
  }
871
+ /**
872
+ * Process material
873
+ * @param {THREE.Material} material Material to process
874
+ * @return {Integer|null} Index of the processed material in the "materials" array
875
+ */
876
+
877
+
637
878
  processMaterial(material) {
638
879
  const cache = this.cache;
639
880
  const json = this.json;
640
- if (cache.materials.has(material))
641
- return cache.materials.get(material);
642
- if (material instanceof THREE.ShaderMaterial && material.isShaderMaterial) {
643
- console.warn("GLTFExporter: THREE.ShaderMaterial not supported.");
881
+ if (cache.materials.has(material)) return cache.materials.get(material);
882
+
883
+ if (material instanceof ShaderMaterial && material.isShaderMaterial) {
884
+ console.warn('GLTFExporter: THREE.ShaderMaterial not supported.');
644
885
  return null;
645
886
  }
646
- if (!json.materials)
647
- json.materials = [];
648
- const materialDef = { pbrMetallicRoughness: {} };
649
- if (!(material instanceof THREE.MeshStandardMaterial && material.isMeshStandardMaterial && material instanceof THREE.MeshBasicMaterial && material.isMeshBasicMaterial)) {
650
- console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");
651
- }
652
- if (material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshPhysicalMaterial) {
887
+
888
+ if (!json.materials) json.materials = []; // @QUESTION Should we avoid including any attribute that has the default value?
889
+
890
+ const materialDef = {
891
+ pbrMetallicRoughness: {}
892
+ };
893
+
894
+ if (!(material instanceof MeshStandardMaterial && material.isMeshStandardMaterial && material instanceof MeshBasicMaterial && // @ts-expect-error
895
+ material.isMeshBasicMaterial)) {
896
+ console.warn('GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.');
897
+ }
898
+
899
+ if (material instanceof MeshStandardMaterial || material instanceof MeshPhysicalMaterial) {
900
+ // pbrMetallicRoughness.baseColorFactor
653
901
  const color = material.color.toArray().concat([material.opacity]);
902
+
654
903
  if (!this.equalArray(color, [1, 1, 1, 1])) {
655
904
  materialDef.pbrMetallicRoughness.baseColorFactor = color;
656
905
  }
657
906
  }
658
- if (material instanceof THREE.MeshStandardMaterial && material.isMeshStandardMaterial) {
907
+
908
+ if (material instanceof MeshStandardMaterial && material.isMeshStandardMaterial) {
659
909
  materialDef.pbrMetallicRoughness.metallicFactor = material.metalness;
660
910
  materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;
661
911
  } else {
662
912
  materialDef.pbrMetallicRoughness.metallicFactor = 0.5;
663
913
  materialDef.pbrMetallicRoughness.roughnessFactor = 0.5;
664
- }
665
- if (material instanceof THREE.MeshStandardMaterial && material.metalnessMap || material instanceof THREE.MeshStandardMaterial && material.roughnessMap) {
914
+ } // pbrMetallicRoughness.metallicRoughnessTexture
915
+
916
+
917
+ if (material instanceof MeshStandardMaterial && material.metalnessMap || material instanceof MeshStandardMaterial && material.roughnessMap) {
666
918
  if (material.metalnessMap === material.roughnessMap && material.metalnessMap !== null) {
667
- const metalRoughMapDef = { index: this.processTexture(material.metalnessMap) };
919
+ const metalRoughMapDef = {
920
+ index: this.processTexture(material.metalnessMap)
921
+ };
668
922
  this.applyTextureTransform(metalRoughMapDef, material.metalnessMap);
669
923
  materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
670
924
  } else {
671
- console.warn(
672
- "THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture."
673
- );
925
+ console.warn('THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.');
674
926
  }
675
- }
676
- if ((material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshPhysicalMaterial) && material.map) {
677
- const baseColorMapDef = { index: this.processTexture(material.map) };
927
+ } // pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture
928
+
929
+
930
+ if ((material instanceof MeshStandardMaterial || material instanceof MeshPhysicalMaterial) && material.map) {
931
+ const baseColorMapDef = {
932
+ index: this.processTexture(material.map)
933
+ };
678
934
  this.applyTextureTransform(baseColorMapDef, material.map);
679
935
  materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;
680
936
  }
681
- if ((material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshPhysicalMaterial) && material.emissive) {
937
+
938
+ if ((material instanceof MeshStandardMaterial || material instanceof MeshPhysicalMaterial) && material.emissive) {
939
+ // note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.
682
940
  const emissive = material.emissive.clone().multiplyScalar(material.emissiveIntensity);
683
941
  const maxEmissiveComponent = Math.max(emissive.r, emissive.g, emissive.b);
942
+
684
943
  if (maxEmissiveComponent > 1) {
685
944
  emissive.multiplyScalar(1 / maxEmissiveComponent);
686
- console.warn("THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited");
945
+ console.warn('THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited');
687
946
  }
947
+
688
948
  if (maxEmissiveComponent > 0) {
689
949
  materialDef.emissiveFactor = emissive.toArray();
690
- }
950
+ } // emissiveTexture
951
+
952
+
691
953
  if (material.emissiveMap) {
692
- const emissiveMapDef = { index: this.processTexture(material.emissiveMap) };
954
+ const emissiveMapDef = {
955
+ index: this.processTexture(material.emissiveMap)
956
+ };
693
957
  this.applyTextureTransform(emissiveMapDef, material.emissiveMap);
694
958
  materialDef.emissiveTexture = emissiveMapDef;
695
959
  }
696
- }
697
- if ((material instanceof THREE.MeshMatcapMaterial || material instanceof THREE.MeshNormalMaterial || material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshToonMaterial) && material.normalMap) {
698
- const normalMapDef = { index: this.processTexture(material.normalMap) };
960
+ } // normalTexture
961
+
962
+
963
+ if ((material instanceof MeshMatcapMaterial || material instanceof MeshNormalMaterial || material instanceof MeshPhongMaterial || material instanceof MeshStandardMaterial || material instanceof MeshToonMaterial) && material.normalMap) {
964
+ const normalMapDef = {
965
+ index: this.processTexture(material.normalMap)
966
+ };
967
+
699
968
  if (material.normalScale && material.normalScale.x !== 1) {
969
+ // glTF normal scale is univariate. Ignore `y`, which may be flipped.
970
+ // Context: https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
700
971
  normalMapDef.scale = material.normalScale.x;
701
972
  }
973
+
702
974
  this.applyTextureTransform(normalMapDef, material.normalMap);
703
975
  materialDef.normalTexture = normalMapDef;
704
- }
705
- if ((material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshToonMaterial) && material.aoMap) {
976
+ } // occlusionTexture
977
+
978
+
979
+ if ((material instanceof MeshBasicMaterial || material instanceof MeshLambertMaterial || material instanceof MeshPhongMaterial || material instanceof MeshStandardMaterial || material instanceof MeshToonMaterial) && material.aoMap) {
706
980
  const occlusionMapDef = {
707
981
  index: this.processTexture(material.aoMap),
708
982
  texCoord: 1
709
983
  };
710
- if (material.aoMapIntensity !== 1) {
984
+
985
+ if (material.aoMapIntensity !== 1.0) {
711
986
  occlusionMapDef.strength = material.aoMapIntensity;
712
987
  }
988
+
713
989
  this.applyTextureTransform(occlusionMapDef, material.aoMap);
714
990
  materialDef.occlusionTexture = occlusionMapDef;
715
- }
991
+ } // alphaMode
992
+
993
+
716
994
  if (material.transparent) {
717
- materialDef.alphaMode = "BLEND";
995
+ materialDef.alphaMode = 'BLEND';
718
996
  } else {
719
- if (material.alphaTest > 0) {
720
- materialDef.alphaMode = "MASK";
997
+ if (material.alphaTest > 0.0) {
998
+ materialDef.alphaMode = 'MASK';
721
999
  materialDef.alphaCutoff = material.alphaTest;
722
1000
  }
723
- }
724
- if (material.side === THREE.DoubleSide)
725
- materialDef.doubleSided = true;
726
- if (material.name !== "")
727
- materialDef.name = material.name;
1001
+ } // doubleSided
1002
+
1003
+
1004
+ if (material.side === DoubleSide) materialDef.doubleSided = true;
1005
+ if (material.name !== '') materialDef.name = material.name;
728
1006
  this.serializeUserData(material, materialDef);
729
- this._invokeAll(function(ext) {
1007
+
1008
+ this._invokeAll(function (ext) {
730
1009
  ext.writeMaterial && ext.writeMaterial(material, materialDef);
731
1010
  });
1011
+
732
1012
  const index = json.materials.push(materialDef) - 1;
733
1013
  cache.materials.set(material, index);
734
1014
  return index;
735
1015
  }
1016
+ /**
1017
+ * Process mesh
1018
+ * @param {THREE.Mesh} mesh Mesh to process
1019
+ * @return {Integer|null} Index of the processed mesh in the "meshes" array
1020
+ */
1021
+
1022
+
736
1023
  processMesh(mesh) {
737
1024
  const cache = this.cache;
738
1025
  const json = this.json;
739
1026
  const meshCacheKeyParts = [mesh.geometry.uuid];
1027
+
740
1028
  if (Array.isArray(mesh.material)) {
741
1029
  for (let i = 0, l = mesh.material.length; i < l; i++) {
742
1030
  meshCacheKeyParts.push(mesh.material[i].uuid);
@@ -744,245 +1032,325 @@ class GLTFWriter {
744
1032
  } else {
745
1033
  meshCacheKeyParts.push(mesh.material.uuid);
746
1034
  }
747
- const meshCacheKey = meshCacheKeyParts.join(":");
748
- if (cache.meshes.has(meshCacheKey))
749
- return cache.meshes.get(meshCacheKey);
1035
+
1036
+ const meshCacheKey = meshCacheKeyParts.join(':');
1037
+ if (cache.meshes.has(meshCacheKey)) return cache.meshes.get(meshCacheKey);
750
1038
  const geometry = mesh.geometry;
751
- let mode;
752
- if (mesh instanceof THREE.LineSegments && mesh.isLineSegments) {
1039
+ let mode; // Use the correct mode
1040
+
1041
+ if (mesh instanceof LineSegments && mesh.isLineSegments) {
753
1042
  mode = WEBGL_CONSTANTS.LINES;
754
- } else if (mesh instanceof THREE.LineLoop && mesh.isLineLoop) {
1043
+ } else if (mesh instanceof LineLoop && mesh.isLineLoop) {
755
1044
  mode = WEBGL_CONSTANTS.LINE_LOOP;
756
- } else if (mesh instanceof THREE.Line && mesh.isLine) {
1045
+ } else if (mesh instanceof Line && mesh.isLine) {
757
1046
  mode = WEBGL_CONSTANTS.LINE_STRIP;
758
- } else if (mesh instanceof THREE.Points && mesh.isPoints) {
1047
+ } else if (mesh instanceof Points && mesh.isPoints) {
759
1048
  mode = WEBGL_CONSTANTS.POINTS;
760
1049
  } else {
761
- mode = (mesh.material instanceof THREE.MeshBasicMaterial || mesh.material instanceof THREE.MeshDepthMaterial || mesh.material instanceof THREE.MeshLambertMaterial || mesh.material instanceof THREE.MeshNormalMaterial || mesh.material instanceof THREE.MeshPhongMaterial || mesh.material instanceof THREE.MeshStandardMaterial || mesh.material instanceof THREE.MeshToonMaterial || mesh.material instanceof THREE.ShaderMaterial) && mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;
1050
+ mode = (mesh.material instanceof MeshBasicMaterial || mesh.material instanceof MeshDepthMaterial || mesh.material instanceof MeshLambertMaterial || mesh.material instanceof MeshNormalMaterial || mesh.material instanceof MeshPhongMaterial || mesh.material instanceof MeshStandardMaterial || mesh.material instanceof MeshToonMaterial || mesh.material instanceof ShaderMaterial) && mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;
762
1051
  }
1052
+
763
1053
  if (!geometry.isBufferGeometry) {
764
- throw new Error("THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.");
1054
+ throw new Error('THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.');
765
1055
  }
1056
+
766
1057
  const meshDef = {};
767
1058
  const attributes = {};
768
1059
  const primitives = [];
769
- const targets = [];
1060
+ const targets = []; // Conversion between attributes names in threejs and gltf spec
1061
+
770
1062
  const nameConversion = {
771
- uv: "TEXCOORD_0",
772
- uv2: "TEXCOORD_1",
773
- color: "COLOR_0",
774
- skinWeight: "WEIGHTS_0",
775
- skinIndex: "JOINTS_0"
1063
+ uv: 'TEXCOORD_0',
1064
+ uv2: 'TEXCOORD_1',
1065
+ color: 'COLOR_0',
1066
+ skinWeight: 'WEIGHTS_0',
1067
+ skinIndex: 'JOINTS_0'
776
1068
  };
777
- const originalNormal = geometry.getAttribute("normal");
778
- if (originalNormal !== void 0 && !(originalNormal instanceof THREE.InterleavedBufferAttribute) && !this.isNormalizedNormalAttribute(originalNormal)) {
779
- console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.");
780
- geometry.setAttribute("normal", this.createNormalizedNormalAttribute(originalNormal));
781
- }
1069
+ const originalNormal = geometry.getAttribute('normal');
1070
+
1071
+ if (originalNormal !== undefined && !(originalNormal instanceof InterleavedBufferAttribute) && !this.isNormalizedNormalAttribute(originalNormal)) {
1072
+ console.warn('THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.');
1073
+ geometry.setAttribute('normal', this.createNormalizedNormalAttribute(originalNormal));
1074
+ } // @QUESTION Detect if .vertexColors = true?
1075
+ // For every attribute create an accessor
1076
+
1077
+
782
1078
  let modifiedAttribute = null;
1079
+
783
1080
  for (let attributeName in geometry.attributes) {
784
- if (attributeName.substr(0, 5) === "morph")
785
- continue;
1081
+ // Ignore morph target attributes, which are exported later.
1082
+ if (attributeName.substr(0, 5) === 'morph') continue;
786
1083
  const attribute = geometry.attributes[attributeName];
787
- attributeName = nameConversion[attributeName] || attributeName.toUpperCase();
1084
+ attributeName = nameConversion[attributeName] || attributeName.toUpperCase(); // Prefix all geometry attributes except the ones specifically
1085
+ // listed in the spec; non-spec attributes are considered custom.
1086
+
788
1087
  const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/;
789
- if (!validVertexAttributes.test(attributeName))
790
- attributeName = "_" + attributeName;
1088
+ if (!validVertexAttributes.test(attributeName)) attributeName = '_' + attributeName;
1089
+
791
1090
  if (cache.attributes.has(this.getUID(attribute))) {
792
1091
  attributes[attributeName] = cache.attributes.get(this.getUID(attribute));
793
1092
  continue;
794
- }
1093
+ } // JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.
1094
+
1095
+
795
1096
  modifiedAttribute = null;
796
1097
  const array = attribute.array;
797
- if (attributeName === "JOINTS_0" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) {
1098
+
1099
+ if (attributeName === 'JOINTS_0' && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) {
798
1100
  console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.');
799
- modifiedAttribute = new THREE.BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized);
1101
+ modifiedAttribute = new BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized);
800
1102
  }
1103
+
801
1104
  const accessor = modifiedAttribute !== null && this.processAccessor(modifiedAttribute || attribute, geometry);
1105
+
802
1106
  if (accessor) {
803
1107
  attributes[attributeName] = accessor;
804
1108
  cache.attributes.set(this.getUID(attribute), accessor);
805
1109
  }
806
1110
  }
807
- if (originalNormal !== void 0)
808
- geometry.setAttribute("normal", originalNormal);
809
- if (Object.keys(attributes).length === 0)
810
- return null;
811
- if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) {
1111
+
1112
+ if (originalNormal !== undefined) geometry.setAttribute('normal', originalNormal); // Skip if no exportable attributes found
1113
+
1114
+ if (Object.keys(attributes).length === 0) return null; // Morph targets
1115
+
1116
+ if (mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0) {
812
1117
  const weights = [];
813
1118
  const targetNames = [];
814
1119
  const reverseDictionary = {};
815
- if (mesh.morphTargetDictionary !== void 0) {
1120
+
1121
+ if (mesh.morphTargetDictionary !== undefined) {
816
1122
  for (const key in mesh.morphTargetDictionary) {
817
1123
  reverseDictionary[mesh.morphTargetDictionary[key]] = key;
818
1124
  }
819
1125
  }
1126
+
820
1127
  for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) {
821
1128
  const target = {};
822
1129
  let warned = false;
1130
+
823
1131
  for (const attributeName in geometry.morphAttributes) {
824
- if (attributeName !== "position" && attributeName !== "normal") {
1132
+ // glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.
1133
+ // Three.js doesn't support TANGENT yet.
1134
+ if (attributeName !== 'position' && attributeName !== 'normal') {
825
1135
  if (!warned) {
826
- console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported.");
1136
+ console.warn('GLTFExporter: Only POSITION and NORMAL morph are supported.');
827
1137
  warned = true;
828
1138
  }
1139
+
829
1140
  continue;
830
1141
  }
1142
+
831
1143
  const attribute = geometry.morphAttributes[attributeName][i];
832
- const gltfAttributeName = attributeName.toUpperCase();
1144
+ const gltfAttributeName = attributeName.toUpperCase(); // Three.js morph attribute has absolute values while the one of glTF has relative values.
1145
+ //
1146
+ // glTF 2.0 Specification:
1147
+ // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets
1148
+
833
1149
  const baseAttribute = geometry.attributes[attributeName];
1150
+
834
1151
  if (cache.attributes.has(this.getUID(attribute))) {
835
1152
  target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute));
836
1153
  continue;
837
- }
1154
+ } // Clones attribute not to override
1155
+
1156
+
838
1157
  const relativeAttribute = attribute.clone();
1158
+
839
1159
  if (!geometry.morphTargetsRelative) {
840
1160
  for (let j = 0, jl = attribute.count; j < jl; j++) {
841
- relativeAttribute.setXYZ(
842
- j,
843
- attribute.getX(j) - baseAttribute.getX(j),
844
- attribute.getY(j) - baseAttribute.getY(j),
845
- attribute.getZ(j) - baseAttribute.getZ(j)
846
- );
1161
+ relativeAttribute.setXYZ(j, attribute.getX(j) - baseAttribute.getX(j), attribute.getY(j) - baseAttribute.getY(j), attribute.getZ(j) - baseAttribute.getZ(j));
847
1162
  }
848
1163
  }
1164
+
849
1165
  const accessor = this.processAccessor(relativeAttribute, geometry);
850
- if (accessor != void 0) {
1166
+
1167
+ if (accessor != undefined) {
851
1168
  target[gltfAttributeName] = accessor;
852
1169
  }
1170
+
853
1171
  cache.attributes.set(this.getUID(baseAttribute), target[gltfAttributeName]);
854
1172
  }
1173
+
855
1174
  targets.push(target);
856
1175
  weights.push(mesh.morphTargetInfluences[i]);
857
- if (mesh.morphTargetDictionary !== void 0)
858
- targetNames.push(reverseDictionary[i]);
1176
+ if (mesh.morphTargetDictionary !== undefined) targetNames.push(reverseDictionary[i]);
859
1177
  }
1178
+
860
1179
  meshDef.weights = weights;
1180
+
861
1181
  if (targetNames.length > 0) {
862
1182
  meshDef.extras = {};
863
1183
  meshDef.extras.targetNames = targetNames;
864
1184
  }
865
1185
  }
1186
+
866
1187
  const isMultiMaterial = Array.isArray(mesh.material);
867
- if (isMultiMaterial && geometry.groups.length === 0)
868
- return null;
1188
+ if (isMultiMaterial && geometry.groups.length === 0) return null;
869
1189
  const materials = isMultiMaterial ? mesh.material : [mesh.material];
870
- const groups = isMultiMaterial ? geometry.groups : [{ materialIndex: 0, start: void 0, count: void 0 }];
1190
+ const groups = isMultiMaterial ? geometry.groups : [{
1191
+ materialIndex: 0,
1192
+ start: undefined,
1193
+ count: undefined
1194
+ }];
1195
+
871
1196
  for (let i = 0, il = groups.length; i < il; i++) {
872
1197
  const primitive = {
873
- mode,
874
- attributes
1198
+ mode: mode,
1199
+ attributes: attributes
875
1200
  };
876
- if (geometry instanceof THREE.Object3D || geometry instanceof THREE.Material) {
1201
+
1202
+ if (geometry instanceof Object3D || geometry instanceof Material) {
877
1203
  this.serializeUserData(geometry, primitive);
878
1204
  }
879
- if (targets.length > 0)
880
- primitive.targets = targets;
1205
+
1206
+ if (targets.length > 0) primitive.targets = targets;
1207
+
881
1208
  if (geometry.index !== null) {
882
1209
  let cacheKey = this.getUID(geometry.index);
883
- if (groups[i].start !== void 0 || groups[i].count !== void 0) {
1210
+
1211
+ if (groups[i].start !== undefined || groups[i].count !== undefined) {
1212
+ // @ts-expect-error
884
1213
  cacheKey += `:${groups[i].start}:${groups[i].count}`;
885
1214
  }
1215
+
886
1216
  if (cache.attributes.has(cacheKey)) {
887
1217
  primitive.indices = cache.attributes.get(cacheKey);
888
1218
  } else {
889
1219
  primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count);
890
1220
  cache.attributes.set(cacheKey, primitive.indices);
891
1221
  }
892
- if (primitive.indices === null)
893
- delete primitive.indices;
1222
+
1223
+ if (primitive.indices === null) delete primitive.indices;
894
1224
  }
1225
+
895
1226
  const materialIndex = groups[i].materialIndex;
896
- if (materialIndex !== void 0 && Array.isArray(materials)) {
1227
+
1228
+ if (materialIndex !== undefined && Array.isArray(materials)) {
897
1229
  const targetMaterials = materials[materialIndex];
1230
+
898
1231
  if (!Array.isArray(targetMaterials)) {
899
1232
  const material = this.processMaterial(targetMaterials);
900
- if (material !== null)
901
- primitive.material = material;
1233
+ if (material !== null) primitive.material = material;
902
1234
  primitives.push(primitive);
903
1235
  }
904
1236
  }
905
1237
  }
1238
+
906
1239
  meshDef.primitives = primitives;
907
- if (!json.meshes)
908
- json.meshes = [];
909
- this._invokeAll(function(ext) {
1240
+ if (!json.meshes) json.meshes = [];
1241
+
1242
+ this._invokeAll(function (ext) {
910
1243
  ext.writeMesh && ext.writeMesh(mesh, meshDef);
911
1244
  });
1245
+
912
1246
  const index = json.meshes.push(meshDef) - 1;
913
1247
  cache.meshes.set(meshCacheKey, index);
914
1248
  return index;
915
1249
  }
1250
+ /**
1251
+ * Process camera
1252
+ * @param {THREE.Camera} camera Camera to process
1253
+ * @return {Integer} Index of the processed mesh in the "camera" array
1254
+ */
1255
+
1256
+
916
1257
  processCamera(camera) {
917
1258
  const json = this.json;
918
- if (!json.cameras)
919
- json.cameras = [];
920
- const isOrtho = camera instanceof THREE.OrthographicCamera && camera.isOrthographicCamera;
1259
+ if (!json.cameras) json.cameras = [];
1260
+ const isOrtho = camera instanceof OrthographicCamera && camera.isOrthographicCamera;
921
1261
  const cameraDef = {
922
- type: isOrtho ? "orthographic" : "perspective"
1262
+ type: isOrtho ? 'orthographic' : 'perspective'
923
1263
  };
924
- if (camera instanceof THREE.OrthographicCamera && isOrtho) {
1264
+
1265
+ if (camera instanceof OrthographicCamera && isOrtho) {
925
1266
  cameraDef.orthographic = {
926
1267
  xmag: camera.right * 2,
927
1268
  ymag: camera.top * 2,
928
- zfar: camera.far <= 0 ? 1e-3 : camera.far,
1269
+ zfar: camera.far <= 0 ? 0.001 : camera.far,
929
1270
  znear: camera.near < 0 ? 0 : camera.near
930
1271
  };
931
- } else if (camera instanceof THREE.PerspectiveCamera) {
1272
+ } else if (camera instanceof PerspectiveCamera) {
932
1273
  cameraDef.perspective = {
933
1274
  aspectRatio: camera.aspect,
934
- yfov: THREE.MathUtils.degToRad(camera.fov),
935
- zfar: camera.far <= 0 ? 1e-3 : camera.far,
1275
+ yfov: MathUtils.degToRad(camera.fov),
1276
+ zfar: camera.far <= 0 ? 0.001 : camera.far,
936
1277
  znear: camera.near < 0 ? 0 : camera.near
937
1278
  };
938
- }
939
- if (camera.name !== "")
940
- cameraDef.name = camera.type;
1279
+ } // Question: Is saving "type" as name intentional?
1280
+
1281
+
1282
+ if (camera.name !== '') cameraDef.name = camera.type;
941
1283
  return json.cameras.push(cameraDef) - 1;
942
1284
  }
1285
+ /**
1286
+ * Creates glTF animation entry from AnimationClip object.
1287
+ *
1288
+ * Status:
1289
+ * - Only properties listed in PATH_PROPERTIES may be animated.
1290
+ *
1291
+ * @param {THREE.AnimationClip} clip
1292
+ * @param {THREE.Object3D} root
1293
+ * @return {number|null}
1294
+ */
1295
+
1296
+
943
1297
  processAnimation(clip, root) {
944
1298
  const json = this.json;
945
1299
  const nodeMap = this.nodeMap;
946
- if (!json.animations)
947
- json.animations = [];
1300
+ if (!json.animations) json.animations = [];
948
1301
  clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root);
949
1302
  const tracks = clip.tracks;
950
1303
  const channels = [];
951
1304
  const samplers = [];
1305
+
952
1306
  for (let i = 0; i < tracks.length; ++i) {
953
1307
  const track = tracks[i];
954
- const trackBinding = THREE.PropertyBinding.parseTrackName(track.name);
955
- let trackNode = THREE.PropertyBinding.findNode(root, trackBinding.nodeName);
1308
+ const trackBinding = PropertyBinding.parseTrackName(track.name);
1309
+ let trackNode = PropertyBinding.findNode(root, trackBinding.nodeName);
956
1310
  const trackProperty = PATH_PROPERTIES[trackBinding.propertyName];
957
- if (trackBinding.objectName === "bones") {
1311
+
1312
+ if (trackBinding.objectName === 'bones') {
958
1313
  if (trackNode.isSkinnedMesh) {
959
1314
  trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex);
960
1315
  } else {
961
- trackNode = void 0;
1316
+ trackNode = undefined;
962
1317
  }
963
1318
  }
1319
+
964
1320
  if (!trackNode || !trackProperty) {
965
1321
  console.warn('THREE.GLTFExporter: Could not export animation track "%s".', track.name);
966
1322
  return null;
967
1323
  }
1324
+
968
1325
  const inputItemSize = 1;
969
1326
  let outputItemSize = track.values.length / track.times.length;
1327
+
970
1328
  if (trackProperty === PATH_PROPERTIES.morphTargetInfluences) {
971
1329
  outputItemSize /= trackNode.morphTargetInfluences.length;
972
1330
  }
973
- let interpolation;
1331
+
1332
+ let interpolation; // @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE
1333
+ // Detecting glTF cubic spline interpolant by checking factory method's special property
1334
+ // GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return
1335
+ // valid value from .getInterpolation().
1336
+ // @ts-expect-error
1337
+
974
1338
  if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {
975
- interpolation = "CUBICSPLINE";
1339
+ interpolation = 'CUBICSPLINE'; // itemSize of CUBICSPLINE keyframe is 9
1340
+ // (VEC3 * 3: inTangent, splineVertex, and outTangent)
1341
+ // but needs to be stored as VEC3 so dividing by 3 here.
1342
+
976
1343
  outputItemSize /= 3;
977
- } else if (track.getInterpolation() === THREE.InterpolateDiscrete) {
978
- interpolation = "STEP";
1344
+ } else if (track.getInterpolation() === InterpolateDiscrete) {
1345
+ interpolation = 'STEP';
979
1346
  } else {
980
- interpolation = "LINEAR";
1347
+ interpolation = 'LINEAR';
981
1348
  }
1349
+
982
1350
  samplers.push({
983
- input: this.processAccessor(new THREE.BufferAttribute(track.times, inputItemSize)),
984
- output: this.processAccessor(new THREE.BufferAttribute(track.values, outputItemSize)),
985
- interpolation
1351
+ input: this.processAccessor(new BufferAttribute(track.times, inputItemSize)),
1352
+ output: this.processAccessor(new BufferAttribute(track.values, outputItemSize)),
1353
+ interpolation: interpolation
986
1354
  });
987
1355
  channels.push({
988
1356
  sampler: samplers.length - 1,
@@ -992,37 +1360,44 @@ class GLTFWriter {
992
1360
  }
993
1361
  });
994
1362
  }
1363
+
995
1364
  json.animations.push({
996
- name: clip.name || "clip_" + json.animations.length,
997
- samplers,
998
- channels
1365
+ name: clip.name || 'clip_' + json.animations.length,
1366
+ samplers: samplers,
1367
+ channels: channels
999
1368
  });
1000
1369
  return json.animations.length - 1;
1001
1370
  }
1371
+ /**
1372
+ * @param {THREE.Object3D} object
1373
+ * @return {number|null}
1374
+ */
1375
+
1376
+
1002
1377
  processSkin(object) {
1003
1378
  const json = this.json;
1004
1379
  const nodeMap = this.nodeMap;
1005
- if (json.nodes !== void 0 && object instanceof THREE.SkinnedMesh) {
1380
+
1381
+ if (json.nodes !== undefined && object instanceof SkinnedMesh) {
1006
1382
  const node = json.nodes[nodeMap.get(object)];
1007
1383
  const skeleton = object.skeleton;
1008
- if (skeleton === void 0)
1009
- return null;
1384
+ if (skeleton === undefined) return null;
1010
1385
  const rootJoint = object.skeleton.bones[0];
1011
- if (rootJoint === void 0)
1012
- return null;
1386
+ if (rootJoint === undefined) return null;
1013
1387
  const joints = [];
1014
1388
  const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16);
1015
- const temporaryBoneInverse = new THREE.Matrix4();
1389
+ const temporaryBoneInverse = new Matrix4();
1390
+
1016
1391
  for (let i = 0; i < skeleton.bones.length; ++i) {
1017
1392
  joints.push(nodeMap.get(skeleton.bones[i]));
1018
1393
  temporaryBoneInverse.copy(skeleton.boneInverses[i]);
1019
1394
  temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16);
1020
1395
  }
1021
- if (json.skins === void 0)
1022
- json.skins = [];
1396
+
1397
+ if (json.skins === undefined) json.skins = [];
1023
1398
  json.skins.push({
1024
- inverseBindMatrices: this.processAccessor(new THREE.BufferAttribute(inverseBindMatrices, 16)),
1025
- joints,
1399
+ inverseBindMatrices: this.processAccessor(new BufferAttribute(inverseBindMatrices, 16)),
1400
+ joints: joints,
1026
1401
  skeleton: nodeMap.get(rootJoint)
1027
1402
  });
1028
1403
  const skinIndex = node.skin = json.skins.length - 1;
@@ -1031,23 +1406,33 @@ class GLTFWriter {
1031
1406
  return null;
1032
1407
  }
1033
1408
  }
1409
+ /**
1410
+ * Process Object3D node
1411
+ * @param {THREE.Object3D} node Object3D to processNode
1412
+ * @return {Integer} Index of the node in the nodes list
1413
+ */
1414
+
1415
+
1034
1416
  processNode(object) {
1035
1417
  const json = this.json;
1036
1418
  const options = this.options;
1037
1419
  const nodeMap = this.nodeMap;
1038
- if (!json.nodes)
1039
- json.nodes = [];
1420
+ if (!json.nodes) json.nodes = [];
1040
1421
  const nodeDef = {};
1422
+
1041
1423
  if (options.trs) {
1042
1424
  const rotation = object.quaternion.toArray();
1043
1425
  const position = object.position.toArray();
1044
1426
  const scale = object.scale.toArray();
1427
+
1045
1428
  if (!this.equalArray(rotation, [0, 0, 0, 1])) {
1046
1429
  nodeDef.rotation = rotation;
1047
1430
  }
1431
+
1048
1432
  if (!this.equalArray(position, [0, 0, 0])) {
1049
1433
  nodeDef.translation = position;
1050
1434
  }
1435
+
1051
1436
  if (!this.equalArray(scale, [1, 1, 1])) {
1052
1437
  nodeDef.scale = scale;
1053
1438
  }
@@ -1055,315 +1440,477 @@ class GLTFWriter {
1055
1440
  if (object.matrixAutoUpdate) {
1056
1441
  object.updateMatrix();
1057
1442
  }
1443
+
1058
1444
  if (!this.isIdentityMatrix(object.matrix)) {
1059
1445
  nodeDef.matrix = object.matrix.elements;
1060
1446
  }
1061
- }
1062
- if (object.name !== "")
1063
- nodeDef.name = String(object.name);
1447
+ } // We don't export empty strings name because it represents no-name in Three.js.
1448
+
1449
+
1450
+ if (object.name !== '') nodeDef.name = String(object.name);
1064
1451
  this.serializeUserData(object, nodeDef);
1065
- if ((object instanceof THREE.Mesh && object.isMesh || object instanceof THREE.Line && object.isLine || object instanceof THREE.Points && object.isPoints) && object instanceof THREE.Mesh) {
1452
+
1453
+ if ((object instanceof Mesh && object.isMesh || object instanceof Line && object.isLine || object instanceof Points && object.isPoints) && object instanceof Mesh) {
1066
1454
  const meshIndex = this.processMesh(object);
1067
- if (meshIndex !== null)
1068
- nodeDef.mesh = meshIndex;
1069
- } else if (object instanceof THREE.Camera && object.isCamera) {
1455
+ if (meshIndex !== null) nodeDef.mesh = meshIndex;
1456
+ } else if (object instanceof Camera && object.isCamera) {
1070
1457
  nodeDef.camera = this.processCamera(object);
1071
1458
  }
1072
- if (object instanceof THREE.SkinnedMesh && object.isSkinnedMesh)
1073
- this.skins.push(object);
1459
+
1460
+ if (object instanceof SkinnedMesh && object.isSkinnedMesh) this.skins.push(object);
1461
+
1074
1462
  if (object.children.length > 0) {
1075
1463
  const children = [];
1464
+
1076
1465
  for (let i = 0, l = object.children.length; i < l; i++) {
1077
1466
  const child = object.children[i];
1467
+
1078
1468
  if (child.visible || !options.onlyVisible) {
1079
- const nodeIndex2 = this.processNode(child);
1080
- if (nodeIndex2 !== null)
1081
- children.push(nodeIndex2);
1469
+ const nodeIndex = this.processNode(child);
1470
+ if (nodeIndex !== null) children.push(nodeIndex);
1082
1471
  }
1083
1472
  }
1084
- if (children.length > 0)
1085
- nodeDef.children = children;
1473
+
1474
+ if (children.length > 0) nodeDef.children = children;
1086
1475
  }
1087
- this._invokeAll(function(ext) {
1476
+
1477
+ this._invokeAll(function (ext) {
1088
1478
  ext.writeNode && ext.writeNode(object, nodeDef);
1089
1479
  });
1480
+
1090
1481
  const nodeIndex = json.nodes.push(nodeDef) - 1;
1091
1482
  nodeMap.set(object, nodeIndex);
1092
1483
  return nodeIndex;
1093
1484
  }
1485
+ /**
1486
+ * Process Scene
1487
+ * @param {Scene} node Scene to process
1488
+ */
1489
+
1490
+
1094
1491
  processScene(scene) {
1095
1492
  const json = this.json;
1096
1493
  const options = this.options;
1494
+
1097
1495
  if (!json.scenes) {
1098
1496
  json.scenes = [];
1099
1497
  json.scene = 0;
1100
1498
  }
1499
+
1101
1500
  const sceneDef = {};
1102
- if (scene.name !== "")
1103
- sceneDef.name = scene.name;
1501
+ if (scene.name !== '') sceneDef.name = scene.name;
1104
1502
  json.scenes.push(sceneDef);
1105
1503
  const nodes = [];
1504
+
1106
1505
  for (let i = 0, l = scene.children.length; i < l; i++) {
1107
1506
  const child = scene.children[i];
1507
+
1108
1508
  if (child.visible || !options.onlyVisible) {
1109
1509
  const nodeIndex = this.processNode(child);
1110
- if (nodeIndex !== null)
1111
- nodes.push(nodeIndex);
1510
+ if (nodeIndex !== null) nodes.push(nodeIndex);
1112
1511
  }
1113
1512
  }
1114
- if (nodes.length > 0)
1115
- sceneDef.nodes = nodes;
1513
+
1514
+ if (nodes.length > 0) sceneDef.nodes = nodes;
1116
1515
  this.serializeUserData(scene, sceneDef);
1117
1516
  }
1517
+
1118
1518
  processObjects(objects) {
1119
- const scene = new THREE.Scene();
1120
- scene.name = "AuxScene";
1519
+ const scene = new Scene();
1520
+ scene.name = 'AuxScene';
1521
+
1121
1522
  for (let i = 0; i < objects.length; i++) {
1523
+ // We push directly to children instead of calling `add` to prevent
1524
+ // modify the .parent and break its original scene and hierarchy
1122
1525
  scene.children.push(objects[i]);
1123
1526
  }
1527
+
1124
1528
  this.processScene(scene);
1125
1529
  }
1530
+ /**
1531
+ * @param {THREE.Object3D|Array<THREE.Object3D>} input
1532
+ */
1533
+
1534
+
1126
1535
  processInput(input) {
1127
1536
  const options = this.options;
1128
1537
  input = input instanceof Array ? input : [input];
1129
- this._invokeAll(function(ext) {
1538
+
1539
+ this._invokeAll(function (ext) {
1130
1540
  ext.beforeParse && ext.beforeParse(input);
1131
1541
  });
1542
+
1132
1543
  const objectsWithoutScene = [];
1544
+
1133
1545
  for (let i = 0; i < input.length; i++) {
1134
1546
  const inputScene = input[i];
1135
- if (inputScene instanceof THREE.Scene) {
1547
+
1548
+ if (inputScene instanceof Scene) {
1136
1549
  this.processScene(inputScene);
1137
1550
  } else {
1138
1551
  objectsWithoutScene.push(input[i]);
1139
1552
  }
1140
1553
  }
1141
- if (objectsWithoutScene.length > 0)
1142
- this.processObjects(objectsWithoutScene);
1554
+
1555
+ if (objectsWithoutScene.length > 0) this.processObjects(objectsWithoutScene);
1556
+
1143
1557
  for (let i = 0; i < this.skins.length; ++i) {
1144
1558
  this.processSkin(this.skins[i]);
1145
1559
  }
1146
- for (let i = 0; options.animations !== void 0 && i < options.animations.length; ++i) {
1560
+
1561
+ for (let i = 0; options.animations !== undefined && i < options.animations.length; ++i) {
1147
1562
  this.processAnimation(options.animations[i], input[0]);
1148
1563
  }
1149
- this._invokeAll(function(ext) {
1564
+
1565
+ this._invokeAll(function (ext) {
1150
1566
  ext.afterParse && ext.afterParse(input);
1151
1567
  });
1152
1568
  }
1569
+
1153
1570
  _invokeAll(func) {
1154
1571
  for (let i = 0, il = this.plugins.length; i < il; i++) {
1155
1572
  func(this.plugins[i]);
1156
1573
  }
1157
- }
1574
+ } //------------------------------------------------------------------------------
1575
+ // Utility functions
1576
+ //------------------------------------------------------------------------------
1577
+
1578
+ /**
1579
+ * Compare two arrays
1580
+ * @param {Array} array1 Array 1 to compare
1581
+ * @param {Array} array2 Array 2 to compare
1582
+ * @return {Boolean} Returns true if both arrays are equal
1583
+ */
1584
+
1585
+
1158
1586
  equalArray(array1, array2) {
1159
- return array1.length === array2.length && array1.every(function(element, index) {
1587
+ return array1.length === array2.length && array1.every(function (element, index) {
1160
1588
  return element === array2[index];
1161
1589
  });
1162
1590
  }
1591
+ /**
1592
+ * Converts a string to an ArrayBuffer.
1593
+ * @param {string} text
1594
+ * @return {ArrayBuffer}
1595
+ */
1596
+
1597
+
1163
1598
  stringToArrayBuffer(text) {
1164
- if (window.TextEncoder !== void 0) {
1599
+ if (window.TextEncoder !== undefined) {
1165
1600
  return new TextEncoder().encode(text).buffer;
1166
1601
  }
1602
+
1167
1603
  const array = new Uint8Array(new ArrayBuffer(text.length));
1604
+
1168
1605
  for (let i = 0, il = text.length; i < il; i++) {
1169
- const value = text.charCodeAt(i);
1170
- array[i] = value > 255 ? 32 : value;
1606
+ const value = text.charCodeAt(i); // Replacing multi-byte character with space(0x20).
1607
+
1608
+ array[i] = value > 0xff ? 0x20 : value;
1171
1609
  }
1610
+
1172
1611
  return array.buffer;
1173
1612
  }
1613
+
1174
1614
  isIdentityMatrix(matrix) {
1175
1615
  return this.equalArray(matrix.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
1176
1616
  }
1617
+
1177
1618
  getMinMax(attribute, start, count) {
1178
1619
  const output = {
1179
1620
  min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY),
1180
1621
  max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY)
1181
1622
  };
1623
+
1182
1624
  for (let i = start; i < start + count; i++) {
1183
1625
  for (let a = 0; a < attribute.itemSize; a++) {
1184
1626
  let value;
1627
+
1185
1628
  if (attribute.itemSize > 4) {
1629
+ // no support for interleaved data for itemSize > 4
1186
1630
  value = attribute.array[i * attribute.itemSize + a];
1187
1631
  } else {
1188
- if (a === 0)
1189
- value = attribute.getX(i);
1190
- else if (a === 1)
1191
- value = attribute.getY(i);
1192
- else if (a === 2)
1193
- value = attribute.getZ(i);
1194
- else if (a === 3)
1195
- value = attribute.getW(i);
1632
+ if (a === 0) value = attribute.getX(i);else if (a === 1) value = attribute.getY(i);else if (a === 2) value = attribute.getZ(i);else if (a === 3) value = attribute.getW(i);
1196
1633
  }
1197
- if (value !== void 0) {
1634
+
1635
+ if (value !== undefined) {
1198
1636
  output.min[a] = Math.min(output.min[a], value);
1199
1637
  output.max[a] = Math.max(output.max[a], value);
1200
1638
  }
1201
1639
  }
1202
1640
  }
1641
+
1203
1642
  return output;
1204
1643
  }
1644
+ /**
1645
+ * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.
1646
+ * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment
1647
+ */
1648
+
1649
+
1205
1650
  getPaddedBufferSize(bufferSize) {
1206
1651
  return Math.ceil(bufferSize / 4) * 4;
1207
1652
  }
1653
+ /**
1654
+ * Returns a buffer aligned to 4-byte boundary.
1655
+ *
1656
+ * @param {ArrayBuffer} arrayBuffer Buffer to pad
1657
+ * @param {Integer} paddingByte (Optional)
1658
+ * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer
1659
+ */
1660
+
1661
+
1208
1662
  getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) {
1209
1663
  const paddedLength = this.getPaddedBufferSize(arrayBuffer.byteLength);
1664
+
1210
1665
  if (paddedLength !== arrayBuffer.byteLength) {
1211
1666
  const array = new Uint8Array(paddedLength);
1212
1667
  array.set(new Uint8Array(arrayBuffer));
1668
+
1213
1669
  if (paddingByte !== 0) {
1214
1670
  for (let i = arrayBuffer.byteLength; i < paddedLength; i++) {
1215
1671
  array[i] = paddingByte;
1216
1672
  }
1217
1673
  }
1674
+
1218
1675
  return array.buffer;
1219
1676
  }
1677
+
1220
1678
  return arrayBuffer;
1221
1679
  }
1680
+
1222
1681
  }
1682
+ /**
1683
+ * Punctual Lights Extension
1684
+ *
1685
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual
1686
+ */
1687
+
1688
+
1223
1689
  class GLTFLightExtension {
1224
1690
  constructor(writer) {
1691
+ _defineProperty(this, "writer", void 0);
1692
+
1693
+ _defineProperty(this, "name", void 0);
1694
+
1225
1695
  this.writer = writer;
1226
- this.name = "KHR_lights_punctual";
1696
+ this.name = 'KHR_lights_punctual';
1227
1697
  }
1698
+
1228
1699
  writeNode(light, nodeDef) {
1229
- if (!light.isLight)
1230
- return;
1231
- if (!(light instanceof THREE.DirectionalLight && light.isDirectionalLight) && !(light instanceof THREE.PointLight && light.isPointLight) && !(light instanceof THREE.SpotLight && light.isSpotLight)) {
1232
- console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", light);
1700
+ if (!light.isLight) return;
1701
+
1702
+ if (!(light instanceof DirectionalLight && light.isDirectionalLight) && // @ts-expect-error
1703
+ !(light instanceof PointLight && light.isPointLight) && !(light instanceof SpotLight && light.isSpotLight)) {
1704
+ console.warn('THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light);
1233
1705
  return;
1234
1706
  }
1707
+
1235
1708
  const writer = this.writer;
1236
1709
  const json = writer.json;
1237
1710
  const extensionsUsed = writer.extensionsUsed;
1238
1711
  const lightDef = {};
1239
- if (light.name)
1240
- lightDef.name = light.name;
1712
+ if (light.name) lightDef.name = light.name;
1241
1713
  lightDef.color = light.color.toArray();
1242
1714
  lightDef.intensity = light.intensity;
1243
- if (light instanceof THREE.DirectionalLight && light.isDirectionalLight) {
1244
- lightDef.type = "directional";
1245
- } else if (light instanceof THREE.PointLight && light.isPointLight) {
1246
- lightDef.type = "point";
1247
- if (light.distance > 0)
1248
- lightDef.range = light.distance;
1249
- } else if (light instanceof THREE.SpotLight && light.isSpotLight) {
1250
- lightDef.type = "spot";
1251
- if (light.distance > 0)
1252
- lightDef.range = light.distance;
1715
+
1716
+ if (light instanceof DirectionalLight && light.isDirectionalLight) {
1717
+ lightDef.type = 'directional';
1718
+ } else if (light instanceof PointLight && // @ts-expect-error
1719
+ light.isPointLight) {
1720
+ lightDef.type = 'point';
1721
+ if (light.distance > 0) lightDef.range = light.distance;
1722
+ } else if (light instanceof SpotLight && light.isSpotLight) {
1723
+ lightDef.type = 'spot';
1724
+ if (light.distance > 0) lightDef.range = light.distance;
1253
1725
  lightDef.spot = {};
1254
- lightDef.spot.innerConeAngle = (light.penumbra - 1) * light.angle * -1;
1726
+ lightDef.spot.innerConeAngle = (light.penumbra - 1.0) * light.angle * -1.0;
1255
1727
  lightDef.spot.outerConeAngle = light.angle;
1256
1728
  }
1257
- if (!(light instanceof THREE.DirectionalLight) && light.decay !== void 0 && light.decay !== 2) {
1258
- console.warn(
1259
- "THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."
1260
- );
1729
+
1730
+ if (!(light instanceof DirectionalLight) && light.decay !== undefined && light.decay !== 2) {
1731
+ console.warn('THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, ' + 'and expects light.decay=2.');
1261
1732
  }
1262
- if (!(light instanceof THREE.PointLight) && light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) {
1263
- console.warn(
1264
- "THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."
1265
- );
1733
+
1734
+ if (!(light instanceof PointLight) && light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) {
1735
+ console.warn('THREE.GLTFExporter: Light direction may be lost. For best results, ' + 'make light.target a child of the light with position 0,0,-1.');
1266
1736
  }
1737
+
1267
1738
  if (!extensionsUsed[this.name]) {
1268
1739
  json.extensions = json.extensions || {};
1269
- json.extensions[this.name] = { lights: [] };
1740
+ json.extensions[this.name] = {
1741
+ lights: []
1742
+ };
1270
1743
  extensionsUsed[this.name] = true;
1271
1744
  }
1272
- if (json.extensions !== void 0) {
1745
+
1746
+ if (json.extensions !== undefined) {
1273
1747
  const lights = json.extensions[this.name].lights;
1274
1748
  lights.push(lightDef);
1275
1749
  nodeDef.extensions = nodeDef.extensions || {};
1276
- nodeDef.extensions[this.name] = { light: lights.length - 1 };
1750
+ nodeDef.extensions[this.name] = {
1751
+ light: lights.length - 1
1752
+ };
1277
1753
  }
1278
1754
  }
1755
+
1279
1756
  }
1757
+ /**
1758
+ * Unlit Materials Extension
1759
+ *
1760
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit
1761
+ */
1762
+
1763
+
1280
1764
  class GLTFMaterialsUnlitExtension {
1281
1765
  constructor(writer) {
1766
+ _defineProperty(this, "writer", void 0);
1767
+
1768
+ _defineProperty(this, "name", void 0);
1769
+
1282
1770
  this.writer = writer;
1283
- this.name = "KHR_materials_unlit";
1771
+ this.name = 'KHR_materials_unlit';
1284
1772
  }
1773
+
1285
1774
  writeMaterial(material, materialDef) {
1286
- if (!(material instanceof THREE.MeshBasicMaterial && material.isMeshBasicMaterial)) {
1775
+ if (!(material instanceof MeshBasicMaterial && // @ts-expect-error
1776
+ material.isMeshBasicMaterial)) {
1287
1777
  return;
1288
1778
  }
1779
+
1289
1780
  const writer = this.writer;
1290
1781
  const extensionsUsed = writer.extensionsUsed;
1291
1782
  materialDef.extensions = materialDef.extensions || {};
1292
1783
  materialDef.extensions[this.name] = {};
1293
1784
  extensionsUsed[this.name] = true;
1294
- materialDef.pbrMetallicRoughness.metallicFactor = 0;
1785
+ materialDef.pbrMetallicRoughness.metallicFactor = 0.0;
1295
1786
  materialDef.pbrMetallicRoughness.roughnessFactor = 0.9;
1296
1787
  }
1788
+
1297
1789
  }
1790
+ /**
1791
+ * Specular-Glossiness Extension
1792
+ *
1793
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
1794
+ */
1795
+
1796
+
1298
1797
  class GLTFMaterialsPBRSpecularGlossiness {
1299
1798
  constructor(writer) {
1799
+ _defineProperty(this, "writer", void 0);
1800
+
1801
+ _defineProperty(this, "name", void 0);
1802
+
1300
1803
  this.writer = writer;
1301
- this.name = "KHR_materials_pbrSpecularGlossiness";
1804
+ this.name = 'KHR_materials_pbrSpecularGlossiness';
1302
1805
  }
1806
+
1303
1807
  writeMaterial(material, materialDef) {
1304
- if (!material.isGLTFSpecularGlossinessMaterial)
1305
- return;
1808
+ // @ts-expect-error
1809
+ if (!material.isGLTFSpecularGlossinessMaterial) return;
1306
1810
  const writer = this.writer;
1307
1811
  const extensionsUsed = writer.extensionsUsed;
1308
1812
  const extensionDef = {};
1813
+
1309
1814
  if (materialDef.pbrMetallicRoughness.baseColorFactor) {
1310
1815
  extensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;
1311
1816
  }
1312
- if (material instanceof THREE.MeshPhongMaterial) {
1817
+
1818
+ if (material instanceof MeshPhongMaterial) {
1313
1819
  const specularFactor = [1, 1, 1];
1314
1820
  material.specular.toArray(specularFactor, 0);
1315
1821
  extensionDef.specularFactor = specularFactor;
1316
- extensionDef.glossinessFactor = material.glossiness;
1822
+ extensionDef.glossinessFactor = // @ts-expect-error
1823
+ material.glossiness;
1317
1824
  }
1825
+
1318
1826
  if (materialDef.pbrMetallicRoughness.baseColorTexture) {
1319
1827
  extensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;
1320
1828
  }
1321
- if ((material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshPhongMaterial) && material.specularMap) {
1322
- const specularMapDef = { index: writer.processTexture(material.specularMap) };
1829
+
1830
+ if ((material instanceof MeshBasicMaterial || material instanceof MeshLambertMaterial || material instanceof MeshPhongMaterial) && material.specularMap) {
1831
+ const specularMapDef = {
1832
+ index: writer.processTexture(material.specularMap)
1833
+ };
1323
1834
  writer.applyTextureTransform(specularMapDef, material.specularMap);
1324
1835
  extensionDef.specularGlossinessTexture = specularMapDef;
1325
1836
  }
1837
+
1326
1838
  materialDef.extensions = materialDef.extensions || {};
1327
1839
  materialDef.extensions[this.name] = extensionDef;
1328
1840
  extensionsUsed[this.name] = true;
1329
1841
  }
1842
+
1330
1843
  }
1844
+ /**
1845
+ * Transmission Materials Extension
1846
+ *
1847
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission
1848
+ */
1849
+
1850
+
1331
1851
  class GLTFMaterialsTransmissionExtension {
1332
1852
  constructor(writer) {
1853
+ _defineProperty(this, "writer", void 0);
1854
+
1855
+ _defineProperty(this, "name", void 0);
1856
+
1333
1857
  this.writer = writer;
1334
- this.name = "KHR_materials_transmission";
1858
+ this.name = 'KHR_materials_transmission';
1335
1859
  }
1860
+
1336
1861
  writeMaterial(material, materialDef) {
1337
- if (!(material instanceof THREE.MeshPhysicalMaterial && material.isMeshPhysicalMaterial) || material.transmission === 0) {
1862
+ if (!(material instanceof MeshPhysicalMaterial && // @ts-expect-error
1863
+ material.isMeshPhysicalMaterial) || material.transmission === 0) {
1338
1864
  return;
1339
1865
  }
1866
+
1340
1867
  const writer = this.writer;
1341
1868
  const extensionsUsed = writer.extensionsUsed;
1342
1869
  const extensionDef = {};
1343
1870
  extensionDef.transmissionFactor = material.transmission;
1871
+
1344
1872
  if (material.transmissionMap) {
1345
- const transmissionMapDef = { index: writer.processTexture(material.transmissionMap) };
1873
+ const transmissionMapDef = {
1874
+ index: writer.processTexture(material.transmissionMap)
1875
+ };
1346
1876
  writer.applyTextureTransform(transmissionMapDef, material.transmissionMap);
1347
1877
  extensionDef.transmissionTexture = transmissionMapDef;
1348
1878
  }
1879
+
1349
1880
  materialDef.extensions = materialDef.extensions || {};
1350
1881
  materialDef.extensions[this.name] = extensionDef;
1351
1882
  extensionsUsed[this.name] = true;
1352
1883
  }
1884
+
1353
1885
  }
1886
+ /**
1887
+ * Materials Volume Extension
1888
+ *
1889
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume
1890
+ */
1891
+
1892
+
1354
1893
  class GLTFMaterialsVolumeExtension {
1355
1894
  constructor(writer) {
1895
+ _defineProperty(this, "writer", void 0);
1896
+
1897
+ _defineProperty(this, "name", void 0);
1898
+
1356
1899
  this.writer = writer;
1357
- this.name = "KHR_materials_volume";
1900
+ this.name = 'KHR_materials_volume';
1358
1901
  }
1902
+
1359
1903
  writeMaterial(material, materialDef) {
1360
- if (!(material instanceof THREE.MeshPhysicalMaterial && material.isMeshPhysicalMaterial) || material.thickness === 0) {
1904
+ if (!(material instanceof MeshPhysicalMaterial && // @ts-expect-error
1905
+ material.isMeshPhysicalMaterial) || material.thickness === 0) {
1361
1906
  return;
1362
1907
  }
1908
+
1363
1909
  const writer = this.writer;
1364
1910
  const extensionsUsed = writer.extensionsUsed;
1365
1911
  const extensionDef = {};
1366
1912
  extensionDef.thickness = material.thickness;
1913
+
1367
1914
  if (material.thicknessMap) {
1368
1915
  const thicknessMapDef = {
1369
1916
  index: writer.processTexture(material.thicknessMap)
@@ -1371,11 +1918,15 @@ class GLTFMaterialsVolumeExtension {
1371
1918
  writer.applyTextureTransform(thicknessMapDef, material.thicknessMap);
1372
1919
  extensionDef.thicknessTexture = thicknessMapDef;
1373
1920
  }
1921
+
1374
1922
  extensionDef.attenuationDistance = material.attenuationDistance;
1375
- extensionDef.attenuationColor = material.attenuationTint.toArray();
1923
+ extensionDef.attenuationColor = //@ts-expect-error
1924
+ material.attenuationTint.toArray();
1376
1925
  materialDef.extensions = materialDef.extensions || {};
1377
1926
  materialDef.extensions[this.name] = extensionDef;
1378
1927
  extensionsUsed[this.name] = true;
1379
1928
  }
1929
+
1380
1930
  }
1381
- exports.GLTFExporter = GLTFExporter;
1931
+
1932
+ export { GLTFExporter };