three-stdlib 2.15.2 → 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1218) 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 +275 -207
  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.js +152 -82
  25. package/controls/OrbitControls.cjs.js +1 -0
  26. package/controls/OrbitControls.js +481 -232
  27. package/controls/PointerLockControls.cjs.js +1 -0
  28. package/controls/PointerLockControls.js +99 -63
  29. package/controls/TrackballControls.cjs.js +1 -0
  30. package/controls/TrackballControls.js +383 -211
  31. package/controls/TransformControls.cjs.js +1 -0
  32. package/controls/TransformControls.js +782 -575
  33. package/controls/experimental/CameraControls.cjs.js +1 -0
  34. package/controls/experimental/CameraControls.js +609 -329
  35. package/csm/CSM.cjs.js +1 -0
  36. package/csm/CSM.js +108 -47
  37. package/csm/CSMFrustum.cjs.js +1 -0
  38. package/csm/CSMFrustum.js +29 -14
  39. package/csm/CSMHelper.cjs.js +1 -0
  40. package/csm/CSMHelper.js +34 -20
  41. package/csm/CSMShader.cjs.js +1 -0
  42. package/csm/CSMShader.js +11 -7
  43. package/curves/CurveExtras.cjs.js +1 -0
  44. package/curves/CurveExtras.js +115 -73
  45. package/curves/NURBSCurve.cjs.js +1 -0
  46. package/curves/NURBSCurve.js +43 -15
  47. package/curves/NURBSSurface.cjs.js +1 -0
  48. package/curves/NURBSSurface.js +27 -11
  49. package/curves/NURBSUtils.cjs.js +1 -0
  50. package/curves/NURBSUtils.js +203 -54
  51. package/custom.d.cjs.js +1 -0
  52. package/{shaders/types.mjs → custom.d.js} +0 -0
  53. package/deprecated/Geometry.cjs.js +1 -0
  54. package/deprecated/Geometry.js +486 -191
  55. package/effects/AnaglyphEffect.cjs.js +1 -0
  56. package/effects/AnaglyphEffect.js +60 -95
  57. package/effects/AsciiEffect.cjs.js +1 -0
  58. package/effects/AsciiEffect.js +110 -80
  59. package/effects/OutlineEffect.cjs.js +1 -0
  60. package/effects/OutlineEffect.js +204 -121
  61. package/effects/ParallaxBarrierEffect.cjs.js +1 -0
  62. package/effects/ParallaxBarrierEffect.js +38 -39
  63. package/effects/PeppersGhostEffect.cjs.js +1 -0
  64. package/effects/PeppersGhostEffect.js +68 -19
  65. package/effects/StereoEffect.cjs.js +1 -0
  66. package/effects/StereoEffect.js +16 -12
  67. package/environments/RoomEnvironment.cjs.js +1 -0
  68. package/environments/RoomEnvironment.js +47 -52
  69. package/exporters/ColladaExporter.cjs.js +1 -0
  70. package/exporters/ColladaExporter.js +241 -115
  71. package/exporters/DRACOExporter.cjs.js +1 -0
  72. package/exporters/DRACOExporter.js +121 -67
  73. package/exporters/GLTFExporter.cjs.js +1 -0
  74. package/exporters/GLTFExporter.js +1014 -463
  75. package/exporters/MMDExporter.cjs.js +1 -0
  76. package/exporters/MMDExporter.js +102 -44
  77. package/exporters/OBJExporter.cjs.js +1 -0
  78. package/exporters/OBJExporter.js +140 -78
  79. package/exporters/PLYExporter.cjs.js +1 -0
  80. package/exporters/PLYExporter.js +154 -93
  81. package/exporters/STLExporter.cjs.js +1 -0
  82. package/exporters/STLExporter.js +81 -30
  83. package/exporters/USDZExporter.cjs.js +1 -0
  84. package/exporters/USDZExporter.js +144 -84
  85. package/geometries/BoxLineGeometry.cjs.js +1 -0
  86. package/geometries/BoxLineGeometry.js +14 -7
  87. package/geometries/ConvexGeometry.cjs.js +1 -0
  88. package/geometries/ConvexGeometry.js +23 -14
  89. package/geometries/DecalGeometry.cjs.js +1 -0
  90. package/geometries/DecalGeometry.js +162 -108
  91. package/geometries/LightningStrike.cjs.js +1 -0
  92. package/geometries/LightningStrike.js +294 -101
  93. package/geometries/ParametricGeometries.cjs.js +1 -0
  94. package/geometries/ParametricGeometries.js +76 -26
  95. package/geometries/ParametricGeometry.cjs.js +1 -0
  96. package/geometries/ParametricGeometry.js +48 -24
  97. package/geometries/RoundedBoxGeometry.cjs.js +1 -0
  98. package/geometries/RoundedBoxGeometry.js +64 -33
  99. package/geometries/TeapotGeometry.cjs.js +1 -0
  100. package/geometries/TeapotGeometry.js +174 -1434
  101. package/geometries/TextGeometry.cjs.js +1 -0
  102. package/geometries/TextGeometry.js +17 -9
  103. package/helpers/LightProbeHelper.cjs.js +1 -0
  104. package/helpers/LightProbeHelper.js +21 -53
  105. package/helpers/PositionalAudioHelper.cjs.js +1 -0
  106. package/helpers/PositionalAudioHelper.js +30 -23
  107. package/helpers/RectAreaLightHelper.cjs.js +1 -0
  108. package/helpers/RectAreaLightHelper.js +33 -17
  109. package/helpers/VertexNormalsHelper.cjs.js +1 -0
  110. package/helpers/VertexNormalsHelper.js +41 -20
  111. package/helpers/VertexTangentsHelper.cjs.js +1 -0
  112. package/helpers/VertexTangentsHelper.js +36 -18
  113. package/index.cjs.js +1 -0
  114. package/index.js +333 -968
  115. package/interactive/InteractiveGroup.cjs.js +1 -0
  116. package/interactive/InteractiveGroup.d.ts +5 -0
  117. package/interactive/InteractiveGroup.js +87 -0
  118. package/interactive/SelectionBox.cjs.js +1 -0
  119. package/interactive/SelectionBox.js +46 -31
  120. package/interactive/SelectionHelper.cjs.js +1 -0
  121. package/interactive/SelectionHelper.js +21 -16
  122. package/libs/MeshoptDecoder.cjs.js +1 -0
  123. package/libs/MeshoptDecoder.js +58 -147
  124. package/libs/MotionControllers.cjs.js +1 -0
  125. package/libs/MotionControllers.js +208 -66
  126. package/lights/LightProbeGenerator.cjs.js +1 -0
  127. package/lights/LightProbeGenerator.js +96 -40
  128. package/lights/RectAreaLightUniformsLib.cjs.js +1 -0
  129. package/lights/RectAreaLightUniformsLib.js +9 -32842
  130. package/lines/Line2.cjs.js +1 -0
  131. package/lines/Line2.js +12 -9
  132. package/lines/LineGeometry.cjs.js +1 -0
  133. package/lines/LineGeometry.js +19 -7
  134. package/lines/LineMaterial.cjs.js +1 -0
  135. package/lines/LineMaterial.js +89 -51
  136. package/lines/LineSegments2.cjs.js +1 -0
  137. package/lines/LineSegments2.js +165 -56
  138. package/lines/LineSegmentsGeometry.cjs.js +1 -0
  139. package/lines/LineSegmentsGeometry.js +71 -29
  140. package/lines/Wireframe.cjs.js +1 -0
  141. package/lines/Wireframe.js +29 -15
  142. package/lines/WireframeGeometry2.cjs.js +1 -0
  143. package/lines/WireframeGeometry2.js +9 -8
  144. package/loaders/3DMLoader.cjs.js +1 -0
  145. package/loaders/3DMLoader.js +469 -234
  146. package/loaders/3MFLoader.cjs.js +1 -0
  147. package/loaders/3MFLoader.js +555 -340
  148. package/loaders/AMFLoader.cjs.js +1 -0
  149. package/loaders/AMFLoader.js +219 -114
  150. package/loaders/AssimpLoader.cjs.js +1 -0
  151. package/loaders/AssimpLoader.js +725 -328
  152. package/loaders/BVHLoader.cjs.js +1 -0
  153. package/loaders/BVHLoader.js +200 -94
  154. package/loaders/BasisTextureLoader.cjs.js +1 -0
  155. package/loaders/BasisTextureLoader.js +357 -229
  156. package/loaders/ColladaLoader.cjs.js +1 -0
  157. package/loaders/ColladaLoader.js +1522 -932
  158. package/loaders/DDSLoader.cjs.js +1 -0
  159. package/loaders/DDSLoader.js +108 -42
  160. package/loaders/DRACOLoader.cjs.js +1 -0
  161. package/loaders/DRACOLoader.js +210 -103
  162. package/loaders/EXRLoader.cjs.js +1 -0
  163. package/loaders/EXRLoader.js +809 -461
  164. package/loaders/FBXLoader.cjs.js +1 -0
  165. package/loaders/FBXLoader.js +1397 -842
  166. package/loaders/FontLoader.cjs.js +1 -0
  167. package/loaders/FontLoader.js +66 -33
  168. package/loaders/GCodeLoader.cjs.js +1 -0
  169. package/loaders/GCodeLoader.js +111 -63
  170. package/loaders/GLTFLoader.cjs.js +1 -0
  171. package/loaders/GLTFLoader.js +1484 -771
  172. package/loaders/HDRCubeTextureLoader.cjs.js +1 -0
  173. package/loaders/HDRCubeTextureLoader.js +50 -45
  174. package/loaders/KMZLoader.cjs.js +1 -0
  175. package/loaders/KMZLoader.js +55 -42
  176. package/loaders/KTX2Loader.cjs.js +1 -0
  177. package/loaders/KTX2Loader.js +362 -229
  178. package/loaders/KTXLoader.cjs.js +1 -0
  179. package/loaders/KTXLoader.js +99 -37
  180. package/loaders/LDrawLoader.cjs.js +1 -0
  181. package/loaders/LDrawLoader.js +746 -313
  182. package/loaders/LUT3dlLoader.cjs.js +1 -0
  183. package/loaders/LUT3dlLoader.js +62 -50
  184. package/loaders/LUTCubeLoader.cjs.js +1 -0
  185. package/loaders/LUTCubeLoader.js +56 -45
  186. package/loaders/LWOLoader.cjs.js +1 -0
  187. package/loaders/LWOLoader.js +339 -227
  188. package/loaders/LottieLoader.cjs.js +1 -0
  189. package/loaders/LottieLoader.js +38 -36
  190. package/loaders/MD2Loader.cjs.js +1 -0
  191. package/loaders/MD2Loader.js +91 -248
  192. package/loaders/MDDLoader.cjs.js +1 -0
  193. package/loaders/MDDLoader.js +45 -25
  194. package/loaders/MMDLoader.cjs.js +1 -0
  195. package/loaders/MMDLoader.js +795 -359
  196. package/loaders/MTLLoader.cjs.js +1 -0
  197. package/loaders/MTLLoader.js +201 -91
  198. package/loaders/NRRDLoader.cjs.js +1 -0
  199. package/loaders/NRRDLoader.js +263 -182
  200. package/loaders/NodeMaterialLoader.cjs.js +1 -0
  201. package/loaders/NodeMaterialLoader.js +14 -121
  202. package/loaders/OBJLoader.cjs.js +1 -0
  203. package/loaders/OBJLoader.js +283 -161
  204. package/loaders/PCDLoader.cjs.js +1 -0
  205. package/loaders/PCDLoader.js +164 -145
  206. package/loaders/PDBLoader.cjs.js +1 -0
  207. package/loaders/PDBLoader.js +63 -45
  208. package/loaders/PLYLoader.cjs.js +1 -0
  209. package/loaders/PLYLoader.js +203 -106
  210. package/loaders/PRWMLoader.cjs.js +1 -0
  211. package/loaders/PRWMLoader.js +110 -73
  212. package/loaders/PVRLoader.cjs.js +1 -0
  213. package/loaders/PVRLoader.js +93 -32
  214. package/loaders/RGBELoader.cjs.js +1 -0
  215. package/loaders/RGBELoader.js +233 -96
  216. package/loaders/RGBMLoader.cjs.js +1 -0
  217. package/loaders/RGBMLoader.js +514 -344
  218. package/loaders/STLLoader.cjs.js +1 -0
  219. package/loaders/STLLoader.js +165 -59
  220. package/loaders/SVGLoader.cjs.js +1 -0
  221. package/loaders/SVGLoader.js +851 -481
  222. package/loaders/TDSLoader.cjs.js +1 -0
  223. package/loaders/TDSLoader.js +527 -137
  224. package/loaders/TGALoader.cjs.js +1 -0
  225. package/loaders/TGALoader.js +205 -94
  226. package/loaders/TTFLoader.cjs.js +1 -0
  227. package/loaders/TTFLoader.js +79 -58
  228. package/loaders/TiltLoader.cjs.js +1 -0
  229. package/loaders/TiltLoader.js +167 -129
  230. package/loaders/VOXLoader.cjs.js +1 -0
  231. package/loaders/VOXLoader.js +84 -320
  232. package/loaders/VRMLLoader.cjs.js +1 -0
  233. package/loaders/VRMLLoader.js +1268 -786
  234. package/loaders/VRMLoader.cjs.js +1 -0
  235. package/loaders/VRMLoader.js +31 -23
  236. package/loaders/VTKLoader.cjs.js +1 -0
  237. package/loaders/VTKLoader.js +407 -219
  238. package/loaders/XLoader.cjs.js +1 -0
  239. package/loaders/XLoader.js +1259 -1083
  240. package/loaders/XYZLoader.cjs.js +1 -0
  241. package/loaders/XYZLoader.js +34 -28
  242. package/loaders/lwo/IFFParser.cjs.js +1 -0
  243. package/loaders/lwo/IFFParser.js +492 -238
  244. package/loaders/lwo/LWO2Parser.cjs.js +1 -0
  245. package/loaders/lwo/LWO2Parser.js +279 -176
  246. package/loaders/lwo/LWO3Parser.cjs.js +1 -0
  247. package/loaders/lwo/LWO3Parser.js +247 -160
  248. package/math/Capsule.cjs.js +1 -0
  249. package/math/Capsule.js +43 -56
  250. package/math/ColorConverter.cjs.js +1 -0
  251. package/math/ColorConverter.js +32 -18
  252. package/math/ConvexHull.cjs.js +1 -0
  253. package/math/ConvexHull.js +357 -97
  254. package/math/ImprovedNoise.cjs.js +1 -0
  255. package/math/ImprovedNoise.js +32 -282
  256. package/math/Lut.cjs.js +1 -0
  257. package/math/Lut.js +35 -51
  258. package/math/MeshSurfaceSampler.cjs.js +1 -0
  259. package/math/MeshSurfaceSampler.js +68 -25
  260. package/math/OBB.cjs.js +1 -0
  261. package/math/OBB.js +152 -91
  262. package/math/Octree.cjs.js +1 -0
  263. package/math/Octree.js +139 -76
  264. package/math/SimplexNoise.cjs.js +1 -0
  265. package/math/SimplexNoise.js +238 -217
  266. package/misc/ConvexObjectBreaker.cjs.js +1 -0
  267. package/misc/ConvexObjectBreaker.js +185 -79
  268. package/misc/GPUComputationRenderer.cjs.js +1 -0
  269. package/misc/GPUComputationRenderer.js +194 -69
  270. package/misc/Gyroscope.cjs.js +1 -0
  271. package/misc/Gyroscope.js +22 -16
  272. package/misc/MD2Character.cjs.js +1 -0
  273. package/misc/MD2Character.js +74 -52
  274. package/misc/MD2CharacterComplex.cjs.js +1 -0
  275. package/misc/MD2CharacterComplex.js +163 -112
  276. package/misc/MorphAnimMesh.cjs.js +1 -0
  277. package/misc/MorphAnimMesh.js +28 -20
  278. package/misc/MorphBlendMesh.cjs.js +1 -0
  279. package/misc/MorphBlendMesh.js +69 -45
  280. package/misc/ProgressiveLightmap.cjs.js +1 -0
  281. package/misc/ProgressiveLightmap.js +187 -70
  282. package/misc/RollerCoaster.cjs.js +1 -0
  283. package/misc/RollerCoaster.js +135 -106
  284. package/misc/TubePainter.cjs.js +1 -0
  285. package/misc/TubePainter.js +92 -74
  286. package/misc/Volume.cjs.js +1 -0
  287. package/misc/Volume.js +270 -108
  288. package/misc/VolumeSlice.cjs.js +1 -0
  289. package/misc/VolumeSlice.js +122 -34
  290. package/misc/WebGL.cjs.js +1 -0
  291. package/misc/WebGL.js +34 -37
  292. package/modifiers/CurveModifier.cjs.js +1 -0
  293. package/modifiers/CurveModifier.js +151 -46
  294. package/modifiers/EdgeSplitModifier.cjs.js +1 -0
  295. package/modifiers/EdgeSplitModifier.js +90 -46
  296. package/modifiers/SimplifyModifier.cjs.js +1 -0
  297. package/modifiers/SimplifyModifier.js +202 -77
  298. package/modifiers/TessellateModifier.cjs.js +1 -0
  299. package/modifiers/TessellateModifier.js +90 -65
  300. package/nodes/Nodes.cjs.js +1 -0
  301. package/nodes/Nodes.js +140 -274
  302. package/nodes/ShaderNode.cjs.js +1 -0
  303. package/nodes/ShaderNode.js +196 -296
  304. package/nodes/accessors/BufferNode.cjs.js +1 -0
  305. package/nodes/accessors/BufferNode.js +8 -4
  306. package/nodes/accessors/CameraNode.cjs.js +1 -0
  307. package/nodes/accessors/CameraNode.js +25 -20
  308. package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
  309. package/nodes/accessors/CubeTextureNode.js +26 -14
  310. package/nodes/accessors/MaterialNode.cjs.js +1 -0
  311. package/nodes/accessors/MaterialNode.js +53 -43
  312. package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
  313. package/nodes/accessors/MaterialReferenceNode.js +6 -3
  314. package/nodes/accessors/ModelNode.cjs.js +1 -0
  315. package/nodes/accessors/ModelNode.js +5 -3
  316. package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  317. package/nodes/accessors/ModelViewProjectionNode.js +13 -14
  318. package/nodes/accessors/NormalNode.cjs.js +1 -0
  319. package/nodes/accessors/NormalNode.js +39 -40
  320. package/nodes/accessors/Object3DNode.cjs.js +1 -0
  321. package/nodes/accessors/Object3DNode.js +50 -40
  322. package/nodes/accessors/PointUVNode.cjs.js +1 -0
  323. package/nodes/accessors/PointUVNode.js +9 -5
  324. package/nodes/accessors/PositionNode.cjs.js +1 -0
  325. package/nodes/accessors/PositionNode.js +41 -42
  326. package/nodes/accessors/ReferenceNode.cjs.js +1 -0
  327. package/nodes/accessors/ReferenceNode.js +17 -10
  328. package/nodes/accessors/ReflectNode.cjs.js +1 -0
  329. package/nodes/accessors/ReflectNode.js +26 -23
  330. package/nodes/accessors/SkinningNode.cjs.js +1 -0
  331. package/nodes/accessors/SkinningNode.js +48 -46
  332. package/nodes/accessors/TextureNode.cjs.js +1 -0
  333. package/nodes/accessors/TextureNode.js +29 -14
  334. package/nodes/accessors/UVNode.cjs.js +1 -0
  335. package/nodes/accessors/UVNode.js +11 -5
  336. package/nodes/core/ArrayUniformNode.cjs.js +1 -0
  337. package/nodes/core/ArrayUniformNode.js +7 -3
  338. package/nodes/core/AttributeNode.cjs.js +1 -0
  339. package/nodes/core/AttributeNode.js +12 -5
  340. package/nodes/core/BypassNode.cjs.js +1 -0
  341. package/nodes/core/BypassNode.js +12 -5
  342. package/nodes/core/CodeNode.cjs.js +1 -0
  343. package/nodes/core/CodeNode.js +12 -4
  344. package/nodes/core/ConstNode.cjs.js +1 -0
  345. package/nodes/core/ConstNode.js +7 -3
  346. package/nodes/core/ContextNode.cjs.js +1 -0
  347. package/nodes/core/ContextNode.js +8 -3
  348. package/nodes/core/ExpressionNode.cjs.js +1 -0
  349. package/nodes/core/ExpressionNode.js +9 -5
  350. package/nodes/core/FunctionCallNode.cjs.js +1 -0
  351. package/nodes/core/FunctionCallNode.js +15 -6
  352. package/nodes/core/FunctionNode.cjs.js +1 -0
  353. package/nodes/core/FunctionNode.js +25 -10
  354. package/nodes/core/InputNode.cjs.js +1 -0
  355. package/nodes/core/InputNode.js +23 -12
  356. package/nodes/core/Node.cjs.js +1 -0
  357. package/nodes/core/Node.js +75 -35
  358. package/nodes/core/NodeAttribute.cjs.js +1 -0
  359. package/nodes/core/NodeAttribute.js +4 -2
  360. package/nodes/core/NodeBuilder.cjs.js +1 -0
  361. package/nodes/core/NodeBuilder.js +224 -110
  362. package/nodes/core/NodeCode.cjs.js +1 -0
  363. package/nodes/core/NodeCode.js +7 -4
  364. package/nodes/core/NodeFrame.cjs.js +1 -0
  365. package/nodes/core/NodeFrame.js +12 -9
  366. package/nodes/core/NodeFunction.cjs.js +1 -0
  367. package/nodes/core/NodeFunction.js +17 -0
  368. package/nodes/core/NodeFunctionInput.cjs.js +1 -0
  369. package/nodes/core/NodeFunctionInput.js +5 -3
  370. package/nodes/core/NodeKeywords.cjs.js +1 -0
  371. package/nodes/core/NodeKeywords.js +16 -5
  372. package/nodes/core/NodeParser.cjs.js +1 -0
  373. package/nodes/core/NodeParser.js +8 -0
  374. package/nodes/core/NodeUniform.cjs.js +1 -0
  375. package/nodes/core/NodeUniform.js +7 -3
  376. package/nodes/core/NodeUtils.cjs.js +1 -0
  377. package/nodes/core/NodeUtils.js +43 -39
  378. package/nodes/core/NodeVar.cjs.js +1 -0
  379. package/nodes/core/NodeVar.js +4 -2
  380. package/nodes/core/NodeVary.cjs.js +1 -0
  381. package/nodes/core/NodeVary.js +4 -2
  382. package/nodes/core/PropertyNode.cjs.js +1 -0
  383. package/nodes/core/PropertyNode.js +10 -4
  384. package/nodes/core/TempNode.cjs.js +1 -0
  385. package/nodes/core/TempNode.js +11 -5
  386. package/nodes/core/UniformNode.cjs.js +1 -0
  387. package/nodes/core/UniformNode.js +10 -4
  388. package/nodes/core/VarNode.cjs.js +1 -0
  389. package/nodes/core/VarNode.js +11 -3
  390. package/nodes/core/VaryNode.cjs.js +1 -0
  391. package/nodes/core/VaryNode.js +15 -6
  392. package/nodes/core/constants.cjs.js +1 -0
  393. package/nodes/core/constants.js +7 -20
  394. package/nodes/display/ColorSpaceNode.cjs.js +1 -0
  395. package/nodes/display/ColorSpaceNode.js +38 -34
  396. package/nodes/display/NormalMapNode.cjs.js +1 -0
  397. package/nodes/display/NormalMapNode.js +53 -35
  398. package/nodes/fog/FogNode.cjs.js +1 -0
  399. package/nodes/fog/FogNode.js +9 -5
  400. package/nodes/fog/FogRangeNode.cjs.js +1 -0
  401. package/nodes/fog/FogRangeNode.js +9 -5
  402. package/nodes/functions/BSDFs.cjs.js +1 -0
  403. package/nodes/functions/BSDFs.js +118 -61
  404. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
  405. package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
  406. package/nodes/lights/LightContextNode.cjs.js +1 -0
  407. package/nodes/lights/LightContextNode.js +23 -14
  408. package/nodes/lights/LightNode.cjs.js +1 -0
  409. package/nodes/lights/LightNode.js +31 -27
  410. package/nodes/lights/LightsNode.cjs.js +1 -0
  411. package/nodes/lights/LightsNode.js +28 -9
  412. package/nodes/loaders/NodeLoader.cjs.js +1 -0
  413. package/nodes/loaders/NodeLoader.js +42 -27
  414. package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
  415. package/nodes/loaders/NodeMaterialLoader.js +10 -4
  416. package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
  417. package/nodes/loaders/NodeObjectLoader.js +19 -9
  418. package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
  419. package/nodes/materials/LineBasicNodeMaterial.js +10 -5
  420. package/nodes/materials/Materials.cjs.js +1 -0
  421. package/nodes/materials/Materials.js +17 -14
  422. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
  423. package/nodes/materials/MeshBasicNodeMaterial.js +10 -5
  424. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -0
  425. package/nodes/materials/MeshStandardNodeMaterial.js +8 -5
  426. package/nodes/materials/NodeMaterial.cjs.js +1 -0
  427. package/nodes/materials/NodeMaterial.js +36 -20
  428. package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
  429. package/nodes/materials/PointsNodeMaterial.js +10 -5
  430. package/nodes/math/CondNode.cjs.js +1 -0
  431. package/nodes/math/CondNode.js +23 -11
  432. package/nodes/math/MathNode.cjs.js +1 -0
  433. package/nodes/math/MathNode.js +142 -98
  434. package/nodes/math/OperatorNode.cjs.js +1 -0
  435. package/nodes/math/OperatorNode.js +46 -24
  436. package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
  437. package/nodes/parsers/GLSLNodeFunction.js +101 -0
  438. package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
  439. package/nodes/parsers/GLSLNodeParser.js +13 -0
  440. package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
  441. package/nodes/parsers/WGSLNodeFunction.js +71 -0
  442. package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
  443. package/nodes/parsers/WGSLNodeParser.js +13 -0
  444. package/nodes/procedural/CheckerNode.cjs.js +1 -0
  445. package/nodes/procedural/CheckerNode.js +19 -13
  446. package/nodes/utils/ArrayElementNode.cjs.js +1 -0
  447. package/nodes/utils/ArrayElementNode.js +8 -4
  448. package/nodes/utils/ConvertNode.cjs.js +1 -0
  449. package/nodes/utils/ConvertNode.js +8 -3
  450. package/nodes/utils/JoinNode.cjs.js +1 -0
  451. package/nodes/utils/JoinNode.js +11 -7
  452. package/nodes/utils/MatcapUVNode.cjs.js +1 -0
  453. package/nodes/utils/MatcapUVNode.js +11 -8
  454. package/nodes/utils/OscNode.cjs.js +1 -0
  455. package/nodes/utils/OscNode.js +33 -27
  456. package/nodes/utils/SplitNode.cjs.js +1 -0
  457. package/nodes/utils/SplitNode.js +20 -6
  458. package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
  459. package/nodes/utils/SpriteSheetUVNode.js +23 -23
  460. package/nodes/utils/TimerNode.cjs.js +1 -0
  461. package/nodes/utils/TimerNode.js +24 -20
  462. package/objects/GroundProjectedEnv.cjs.js +1 -0
  463. package/objects/GroundProjectedEnv.js +37 -22
  464. package/objects/Lensflare.cjs.js +1 -0
  465. package/objects/Lensflare.js +156 -86
  466. package/objects/LightningStorm.cjs.js +1 -0
  467. package/objects/LightningStorm.js +102 -38
  468. package/objects/MarchingCubes.cjs.js +1 -0
  469. package/objects/MarchingCubes.js +303 -150
  470. package/objects/Reflector.cjs.js +1 -0
  471. package/objects/Reflector.js +72 -50
  472. package/objects/ReflectorForSSRPass.cjs.js +1 -0
  473. package/objects/ReflectorForSSRPass.js +131 -80
  474. package/objects/ReflectorRTT.cjs.js +1 -0
  475. package/objects/ReflectorRTT.js +7 -6
  476. package/objects/Refractor.cjs.js +1 -0
  477. package/objects/Refractor.js +106 -64
  478. package/objects/ShadowMesh.cjs.js +1 -0
  479. package/objects/ShadowMesh.js +17 -8
  480. package/objects/Sky.cjs.js +1 -0
  481. package/objects/Sky.js +80 -119
  482. package/objects/Water.cjs.js +1 -0
  483. package/objects/Water.js +127 -83
  484. package/objects/Water2.cjs.js +1 -0
  485. package/objects/Water2.js +108 -72
  486. package/offscreen/jank.cjs.js +1 -0
  487. package/offscreen/jank.js +14 -10
  488. package/offscreen/offscreen.cjs.js +1 -0
  489. package/offscreen/offscreen.js +5 -4
  490. package/offscreen/scene.cjs.js +1 -0
  491. package/offscreen/scene.js +48 -45
  492. package/package.json +3 -3
  493. package/physics/AmmoPhysics.cjs.js +1 -0
  494. package/physics/AmmoPhysics.js +71 -30
  495. package/postprocessing/AdaptiveToneMappingPass.cjs.js +1 -0
  496. package/postprocessing/AdaptiveToneMappingPass.js +123 -97
  497. package/postprocessing/AfterimagePass.cjs.js +1 -0
  498. package/postprocessing/AfterimagePass.js +49 -28
  499. package/postprocessing/BloomPass.cjs.js +1 -0
  500. package/postprocessing/BloomPass.js +69 -43
  501. package/postprocessing/BokehPass.cjs.js +1 -0
  502. package/postprocessing/BokehPass.js +69 -39
  503. package/postprocessing/ClearPass.cjs.js +1 -0
  504. package/postprocessing/ClearPass.js +25 -10
  505. package/postprocessing/CubeTexturePass.cjs.js +1 -0
  506. package/postprocessing/CubeTexturePass.js +27 -28
  507. package/postprocessing/DotScreenPass.cjs.js +1 -0
  508. package/postprocessing/DotScreenPass.js +32 -24
  509. package/postprocessing/EffectComposer.cjs.js +1 -0
  510. package/postprocessing/EffectComposer.js +86 -39
  511. package/postprocessing/FilmPass.cjs.js +1 -0
  512. package/postprocessing/FilmPass.js +30 -25
  513. package/postprocessing/GlitchPass.cjs.js +1 -0
  514. package/postprocessing/GlitchPass.js +61 -38
  515. package/postprocessing/HalftonePass.cjs.js +1 -0
  516. package/postprocessing/HalftonePass.js +39 -19
  517. package/postprocessing/LUTPass.cjs.js +1 -0
  518. package/postprocessing/LUTPass.js +38 -13
  519. package/postprocessing/MaskPass.cjs.js +1 -0
  520. package/postprocessing/MaskPass.js +38 -19
  521. package/postprocessing/OutlinePass.cjs.js +1 -0
  522. package/postprocessing/OutlinePass.js +277 -135
  523. package/postprocessing/Pass.cjs.js +1 -0
  524. package/postprocessing/Pass.js +44 -20
  525. package/postprocessing/RenderPass.cjs.js +1 -0
  526. package/postprocessing/RenderPass.js +36 -13
  527. package/postprocessing/RenderPixelatedPass.cjs.js +1 -0
  528. package/postprocessing/RenderPixelatedPass.js +58 -44
  529. package/postprocessing/SAOPass.cjs.js +1 -0
  530. package/postprocessing/SAOPass.js +189 -154
  531. package/postprocessing/SMAAPass.cjs.js +1 -0
  532. package/postprocessing/SMAAPass.js +84 -64
  533. package/postprocessing/SSAARenderPass.cjs.js +1 -0
  534. package/postprocessing/SSAARenderPass.js +69 -121
  535. package/postprocessing/SSAOPass.cjs.js +1 -0
  536. package/postprocessing/SSAOPass.js +172 -123
  537. package/postprocessing/SSRPass.cjs.js +1 -0
  538. package/postprocessing/SSRPass.js +280 -211
  539. package/postprocessing/SavePass.cjs.js +1 -0
  540. package/postprocessing/SavePass.js +25 -20
  541. package/postprocessing/ShaderPass.cjs.js +1 -0
  542. package/postprocessing/ShaderPass.js +30 -14
  543. package/postprocessing/TAARenderPass.cjs.js +1 -0
  544. package/postprocessing/TAARenderPass.js +61 -42
  545. package/postprocessing/TexturePass.cjs.js +1 -0
  546. package/postprocessing/TexturePass.js +22 -21
  547. package/postprocessing/UnrealBloomPass.cjs.js +1 -0
  548. package/postprocessing/UnrealBloomPass.js +213 -105
  549. package/renderers/CSS2DRenderer.cjs.js +1 -0
  550. package/renderers/CSS2DRenderer.js +56 -44
  551. package/renderers/CSS3DRenderer.cjs.js +1 -0
  552. package/renderers/CSS3DRenderer.js +86 -53
  553. package/renderers/Projector.cjs.js +1 -0
  554. package/renderers/Projector.js +274 -107
  555. package/renderers/SVGRenderer.cjs.js +1 -0
  556. package/renderers/SVGRenderer.js +182 -72
  557. package/renderers/nodes/accessors/CameraNode.cjs.js +1 -0
  558. package/renderers/nodes/accessors/CameraNode.js +40 -29
  559. package/renderers/nodes/accessors/ModelNode.cjs.js +1 -0
  560. package/renderers/nodes/accessors/ModelNode.js +37 -28
  561. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  562. package/renderers/nodes/accessors/ModelViewProjectionNode.js +23 -10
  563. package/renderers/nodes/accessors/NormalNode.cjs.js +1 -0
  564. package/renderers/nodes/accessors/NormalNode.js +45 -35
  565. package/renderers/nodes/accessors/PositionNode.cjs.js +1 -0
  566. package/renderers/nodes/accessors/PositionNode.js +19 -18
  567. package/renderers/nodes/accessors/UVNode.cjs.js +1 -0
  568. package/renderers/nodes/accessors/UVNode.js +10 -5
  569. package/renderers/nodes/core/AttributeNode.cjs.js +1 -0
  570. package/renderers/nodes/core/AttributeNode.js +14 -5
  571. package/renderers/nodes/core/InputNode.cjs.js +1 -0
  572. package/renderers/nodes/core/InputNode.js +14 -4
  573. package/renderers/nodes/core/Node.cjs.js +1 -0
  574. package/renderers/nodes/core/Node.js +17 -7
  575. package/renderers/nodes/core/NodeAttribute.cjs.js +1 -0
  576. package/renderers/nodes/core/NodeAttribute.js +6 -3
  577. package/renderers/nodes/core/NodeBuilder.cjs.js +1 -0
  578. package/renderers/nodes/core/NodeBuilder.js +154 -87
  579. package/renderers/nodes/core/NodeFrame.cjs.js +1 -0
  580. package/renderers/nodes/core/NodeFrame.js +12 -9
  581. package/renderers/nodes/core/NodeSlot.cjs.js +1 -0
  582. package/renderers/nodes/core/NodeSlot.js +3 -2
  583. package/renderers/nodes/core/NodeUniform.cjs.js +1 -0
  584. package/renderers/nodes/core/NodeUniform.js +9 -4
  585. package/renderers/nodes/core/NodeVary.cjs.js +1 -0
  586. package/renderers/nodes/core/NodeVary.js +7 -4
  587. package/renderers/nodes/core/VaryNode.cjs.js +1 -0
  588. package/renderers/nodes/core/VaryNode.js +12 -6
  589. package/renderers/nodes/core/constants.cjs.js +1 -0
  590. package/renderers/nodes/core/constants.js +13 -16
  591. package/renderers/nodes/inputs/ColorNode.cjs.js +1 -0
  592. package/renderers/nodes/inputs/ColorNode.js +11 -5
  593. package/renderers/nodes/inputs/FloatNode.cjs.js +1 -0
  594. package/renderers/nodes/inputs/FloatNode.js +11 -5
  595. package/renderers/nodes/inputs/Matrix3Node.cjs.js +1 -0
  596. package/renderers/nodes/inputs/Matrix3Node.js +13 -7
  597. package/renderers/nodes/inputs/Matrix4Node.cjs.js +1 -0
  598. package/renderers/nodes/inputs/Matrix4Node.js +13 -7
  599. package/renderers/nodes/inputs/TextureNode.cjs.js +1 -0
  600. package/renderers/nodes/inputs/TextureNode.js +15 -7
  601. package/renderers/nodes/inputs/Vector2Node.cjs.js +1 -0
  602. package/renderers/nodes/inputs/Vector2Node.js +11 -5
  603. package/renderers/nodes/inputs/Vector3Node.cjs.js +1 -0
  604. package/renderers/nodes/inputs/Vector3Node.js +13 -7
  605. package/renderers/nodes/inputs/Vector4Node.cjs.js +1 -0
  606. package/renderers/nodes/inputs/Vector4Node.js +13 -7
  607. package/renderers/nodes/math/MathNode.cjs.js +1 -0
  608. package/renderers/nodes/math/MathNode.js +30 -20
  609. package/renderers/nodes/math/OperatorNode.cjs.js +1 -0
  610. package/renderers/nodes/math/OperatorNode.js +20 -4
  611. package/renderers/nodes/utils/SwitchNode.cjs.js +1 -0
  612. package/renderers/nodes/utils/SwitchNode.js +9 -4
  613. package/renderers/nodes/utils/TimerNode.cjs.js +1 -0
  614. package/renderers/nodes/utils/TimerNode.js +10 -5
  615. package/renderers/webgpu/WebGPU.cjs.js +1 -0
  616. package/renderers/webgpu/WebGPU.js +16 -14
  617. package/renderers/webgpu/WebGPUAttributes.cjs.js +1 -0
  618. package/renderers/webgpu/WebGPUAttributes.js +23 -16
  619. package/renderers/webgpu/WebGPUBackground.cjs.js +1 -0
  620. package/renderers/webgpu/WebGPUBackground.js +30 -13
  621. package/renderers/webgpu/WebGPUBinding.cjs.js +1 -0
  622. package/renderers/webgpu/WebGPUBinding.js +7 -4
  623. package/renderers/webgpu/WebGPUBindings.cjs.js +1 -0
  624. package/renderers/webgpu/WebGPUBindings.js +57 -21
  625. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +1 -0
  626. package/renderers/webgpu/WebGPUComputePipelines.js +25 -14
  627. package/renderers/webgpu/WebGPUGeometries.cjs.js +1 -0
  628. package/renderers/webgpu/WebGPUGeometries.js +15 -5
  629. package/renderers/webgpu/WebGPUInfo.cjs.js +1 -0
  630. package/renderers/webgpu/WebGPUInfo.js +8 -3
  631. package/renderers/webgpu/WebGPUObjects.cjs.js +1 -0
  632. package/renderers/webgpu/WebGPUObjects.js +10 -5
  633. package/renderers/webgpu/WebGPUProperties.cjs.js +1 -0
  634. package/renderers/webgpu/WebGPUProperties.js +11 -5
  635. package/renderers/webgpu/WebGPURenderLists.cjs.js +1 -0
  636. package/renderers/webgpu/WebGPURenderLists.js +36 -20
  637. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +1 -0
  638. package/renderers/webgpu/WebGPURenderPipelines.js +387 -260
  639. package/renderers/webgpu/WebGPURenderer.cjs.js +1 -0
  640. package/renderers/webgpu/WebGPURenderer.js +262 -124
  641. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +1 -0
  642. package/renderers/webgpu/WebGPUSampledTexture.js +31 -18
  643. package/renderers/webgpu/WebGPUSampler.cjs.js +1 -0
  644. package/renderers/webgpu/WebGPUSampler.js +12 -7
  645. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +1 -0
  646. package/renderers/webgpu/WebGPUStorageBuffer.js +12 -7
  647. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +1 -0
  648. package/renderers/webgpu/WebGPUTextureRenderer.js +11 -5
  649. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +1 -0
  650. package/renderers/webgpu/WebGPUTextureUtils.js +40 -29
  651. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -0
  652. package/renderers/webgpu/WebGPUTextures.js +333 -186
  653. package/renderers/webgpu/WebGPUUniform.cjs.js +1 -0
  654. package/renderers/webgpu/WebGPUUniform.js +51 -25
  655. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +1 -0
  656. package/renderers/webgpu/WebGPUUniformsGroup.js +72 -32
  657. package/renderers/webgpu/constants.cjs.js +1 -0
  658. package/renderers/webgpu/constants.js +181 -190
  659. package/renderers/webgpu/nodes/ShaderLib.cjs.js +1 -0
  660. package/renderers/webgpu/nodes/ShaderLib.js +2 -2
  661. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +1 -0
  662. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +124 -53
  663. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +1 -0
  664. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +31 -17
  665. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +1 -0
  666. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +9 -8
  667. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +1 -0
  668. package/renderers/webgpu/nodes/WebGPUNodes.js +45 -7
  669. package/shaders/ACESFilmicToneMappingShader.cjs.js +1 -0
  670. package/shaders/ACESFilmicToneMappingShader.js +24 -44
  671. package/shaders/AfterimageShader.cjs.js +1 -0
  672. package/shaders/AfterimageShader.js +18 -28
  673. package/shaders/BasicShader.cjs.js +1 -0
  674. package/shaders/BasicShader.js +7 -9
  675. package/shaders/BleachBypassShader.cjs.js +1 -0
  676. package/shaders/BleachBypassShader.js +15 -31
  677. package/shaders/BlendShader.cjs.js +1 -0
  678. package/shaders/BlendShader.js +19 -26
  679. package/shaders/BokehShader.cjs.js +1 -0
  680. package/shaders/BokehShader.js +36 -98
  681. package/shaders/BokehShader2.cjs.js +1 -0
  682. package/shaders/BokehShader2.js +90 -261
  683. package/shaders/BrightnessContrastShader.cjs.js +1 -0
  684. package/shaders/BrightnessContrastShader.js +19 -28
  685. package/shaders/ColorCorrectionShader.cjs.js +1 -0
  686. package/shaders/ColorCorrectionShader.js +22 -26
  687. package/shaders/ColorifyShader.cjs.js +1 -0
  688. package/shaders/ColorifyShader.js +16 -24
  689. package/shaders/ConvolutionShader.cjs.js +1 -0
  690. package/shaders/ConvolutionShader.js +36 -40
  691. package/shaders/CopyShader.cjs.js +1 -0
  692. package/shaders/CopyShader.js +13 -21
  693. package/shaders/DOFMipMapShader.cjs.js +1 -0
  694. package/shaders/DOFMipMapShader.js +21 -28
  695. package/shaders/DepthLimitedBlurShader.cjs.js +1 -0
  696. package/shaders/DepthLimitedBlurShader.js +40 -85
  697. package/shaders/DigitalGlitch.cjs.js +1 -0
  698. package/shaders/DigitalGlitch.js +46 -74
  699. package/shaders/DotScreenShader.cjs.js +1 -0
  700. package/shaders/DotScreenShader.js +27 -35
  701. package/shaders/FXAAShader.cjs.js +1 -0
  702. package/shaders/FXAAShader.js +19 -1094
  703. package/shaders/FilmShader.cjs.js +1 -0
  704. package/shaders/FilmShader.js +52 -38
  705. package/shaders/FocusShader.cjs.js +1 -0
  706. package/shaders/FocusShader.js +24 -51
  707. package/shaders/FreiChenShader.cjs.js +1 -0
  708. package/shaders/FreiChenShader.js +24 -57
  709. package/shaders/FresnelShader.cjs.js +1 -0
  710. package/shaders/FresnelShader.js +22 -43
  711. package/shaders/GammaCorrectionShader.cjs.js +1 -0
  712. package/shaders/GammaCorrectionShader.js +11 -19
  713. package/shaders/GodRaysShader.cjs.js +1 -0
  714. package/shaders/GodRaysShader.js +94 -103
  715. package/shaders/HalftoneShader.cjs.js +1 -0
  716. package/shaders/HalftoneShader.js +65 -208
  717. package/shaders/HorizontalBlurShader.cjs.js +1 -0
  718. package/shaders/HorizontalBlurShader.js +23 -7
  719. package/shaders/HorizontalTiltShiftShader.cjs.js +1 -0
  720. package/shaders/HorizontalTiltShiftShader.js +21 -33
  721. package/shaders/HueSaturationShader.cjs.js +1 -0
  722. package/shaders/HueSaturationShader.js +21 -37
  723. package/shaders/KaleidoShader.cjs.js +1 -0
  724. package/shaders/KaleidoShader.js +22 -30
  725. package/shaders/LuminosityHighPassShader.cjs.js +1 -0
  726. package/shaders/LuminosityHighPassShader.js +27 -33
  727. package/shaders/LuminosityShader.cjs.js +1 -0
  728. package/shaders/LuminosityShader.js +11 -21
  729. package/shaders/MirrorShader.cjs.js +1 -0
  730. package/shaders/MirrorShader.js +16 -31
  731. package/shaders/NormalMapShader.cjs.js +1 -0
  732. package/shaders/NormalMapShader.js +23 -27
  733. package/shaders/ParallaxShader.cjs.js +1 -0
  734. package/shaders/ParallaxShader.js +48 -107
  735. package/shaders/PixelShader.cjs.js +1 -0
  736. package/shaders/PixelShader.js +16 -24
  737. package/shaders/RGBShiftShader.cjs.js +1 -0
  738. package/shaders/RGBShiftShader.js +22 -26
  739. package/shaders/SAOShader.cjs.js +1 -0
  740. package/shaders/SAOShader.js +48 -132
  741. package/shaders/SMAAShader.cjs.js +1 -0
  742. package/shaders/SMAAShader.js +135 -256
  743. package/shaders/SSAOShader.cjs.js +1 -0
  744. package/shaders/SSAOShader.js +81 -153
  745. package/shaders/SSRShader.cjs.js +1 -0
  746. package/shaders/SSRShader.js +87 -32
  747. package/shaders/SepiaShader.cjs.js +1 -0
  748. package/shaders/SepiaShader.js +15 -25
  749. package/shaders/SobelOperatorShader.cjs.js +1 -0
  750. package/shaders/SobelOperatorShader.js +29 -40
  751. package/shaders/SubsurfaceScatteringShader.cjs.js +1 -0
  752. package/shaders/SubsurfaceScatteringShader.js +39 -53
  753. package/shaders/TechnicolorShader.cjs.js +1 -0
  754. package/shaders/TechnicolorShader.js +13 -20
  755. package/shaders/ToneMapShader.cjs.js +1 -0
  756. package/shaders/ToneMapShader.js +28 -44
  757. package/shaders/ToonShader.cjs.js +1 -0
  758. package/shaders/ToonShader.js +96 -172
  759. package/shaders/TriangleBlurShader.cjs.js +1 -0
  760. package/shaders/TriangleBlurShader.js +23 -32
  761. package/shaders/UnpackDepthRGBAShader.cjs.js +1 -0
  762. package/shaders/UnpackDepthRGBAShader.js +14 -22
  763. package/shaders/VerticalBlurShader.cjs.js +1 -0
  764. package/shaders/VerticalBlurShader.js +23 -7
  765. package/shaders/VerticalTiltShiftShader.cjs.js +1 -0
  766. package/shaders/VerticalTiltShiftShader.js +21 -33
  767. package/shaders/VignetteShader.cjs.js +1 -0
  768. package/shaders/VignetteShader.js +28 -24
  769. package/shaders/VolumeShader.cjs.js +1 -0
  770. package/shaders/VolumeShader.js +77 -174
  771. package/shaders/WaterRefractionShader.cjs.js +1 -0
  772. package/shaders/WaterRefractionShader.js +6 -38
  773. package/shaders/types.cjs.js +1 -0
  774. package/shaders/types.js +1 -1
  775. package/textures/FlakesTexture.cjs.js +1 -0
  776. package/textures/FlakesTexture.js +10 -8
  777. package/types/helpers.cjs.js +1 -0
  778. package/types/helpers.js +2 -3
  779. package/types/shared.cjs.js +1 -0
  780. package/types/shared.js +1 -0
  781. package/types/utils.cjs.js +1 -0
  782. package/types/utils.js +1 -0
  783. package/utils/BufferGeometryUtils.cjs.js +1 -0
  784. package/utils/BufferGeometryUtils.js +325 -251
  785. package/utils/GeometryCompressionUtils.cjs.js +1 -0
  786. package/utils/GeometryCompressionUtils.js +239 -241
  787. package/utils/GeometryUtils.cjs.js +1 -0
  788. package/utils/GeometryUtils.js +94 -41
  789. package/utils/LDrawUtils.cjs.js +1 -0
  790. package/utils/LDrawUtils.d.ts +5 -0
  791. package/utils/LDrawUtils.js +144 -0
  792. package/utils/RoughnessMipmapper.cjs.js +1 -0
  793. package/utils/RoughnessMipmapper.js +82 -38
  794. package/utils/SceneUtils.cjs.js +1 -0
  795. package/utils/SceneUtils.js +20 -15
  796. package/utils/ShadowMapViewer.cjs.js +1 -0
  797. package/utils/ShadowMapViewer.js +95 -49
  798. package/utils/SkeletonUtils.cjs.js +1 -0
  799. package/utils/SkeletonUtils.js +165 -74
  800. package/utils/UVsDebug.cjs.js +1 -0
  801. package/utils/UVsDebug.js +62 -32
  802. package/utils/WorkerPool.cjs.js +1 -0
  803. package/utils/WorkerPool.js +33 -13
  804. package/webxr/ARButton.cjs.js +1 -0
  805. package/webxr/ARButton.js +98 -72
  806. package/webxr/OculusHandModel.cjs.js +1 -0
  807. package/webxr/OculusHandModel.js +37 -18
  808. package/webxr/OculusHandPointerModel.cjs.js +1 -0
  809. package/webxr/OculusHandPointerModel.js +80 -58
  810. package/webxr/Text2D.cjs.js +1 -0
  811. package/webxr/Text2D.js +19 -37
  812. package/webxr/VRButton.cjs.js +1 -0
  813. package/webxr/VRButton.js +90 -59
  814. package/webxr/XRControllerModelFactory.cjs.js +1 -0
  815. package/webxr/XRControllerModelFactory.js +116 -58
  816. package/webxr/XREstimatedLight.cjs.js +1 -0
  817. package/webxr/XREstimatedLight.js +66 -39
  818. package/webxr/XRHandMeshModel.cjs.js +1 -0
  819. package/webxr/XRHandMeshModel.js +29 -40
  820. package/webxr/XRHandModelFactory.cjs.js +1 -0
  821. package/webxr/XRHandModelFactory.js +31 -28
  822. package/webxr/XRHandPrimitiveModel.cjs.js +1 -0
  823. package/webxr/XRHandPrimitiveModel.js +27 -41
  824. package/animation/AnimationClipCreator.mjs +0 -57
  825. package/animation/CCDIKSolver.mjs +0 -234
  826. package/animation/MMDAnimationHelper.mjs +0 -514
  827. package/animation/MMDPhysics.mjs +0 -769
  828. package/cameras/CinematicCamera.mjs +0 -129
  829. package/controls/ArcballControls.mjs +0 -1737
  830. package/controls/DeviceOrientationControls.mjs +0 -74
  831. package/controls/DragControls.mjs +0 -172
  832. package/controls/FirstPersonControls.mjs +0 -220
  833. package/controls/FlyControls.mjs +0 -239
  834. package/controls/OrbitControls.mjs +0 -731
  835. package/controls/PointerLockControls.mjs +0 -88
  836. package/controls/TrackballControls.mjs +0 -481
  837. package/controls/TransformControls.mjs +0 -1068
  838. package/controls/experimental/CameraControls.mjs +0 -673
  839. package/csm/CSM.mjs +0 -244
  840. package/csm/CSMFrustum.mjs +0 -75
  841. package/csm/CSMHelper.mjs +0 -114
  842. package/csm/CSMShader.mjs +0 -251
  843. package/curves/CurveExtras.mjs +0 -224
  844. package/curves/NURBSCurve.mjs +0 -35
  845. package/curves/NURBSSurface.mjs +0 -28
  846. package/curves/NURBSUtils.mjs +0 -226
  847. package/deprecated/Geometry.mjs +0 -966
  848. package/effects/AnaglyphEffect.mjs +0 -120
  849. package/effects/AsciiEffect.mjs +0 -173
  850. package/effects/OutlineEffect.mjs +0 -295
  851. package/effects/ParallaxBarrierEffect.mjs +0 -64
  852. package/effects/PeppersGhostEffect.mjs +0 -85
  853. package/effects/StereoEffect.mjs +0 -32
  854. package/environments/RoomEnvironment.mjs +0 -78
  855. package/exporters/ColladaExporter.mjs +0 -299
  856. package/exporters/DRACOExporter.mjs +0 -132
  857. package/exporters/GLTFExporter.mjs +0 -1381
  858. package/exporters/MMDExporter.mjs +0 -102
  859. package/exporters/OBJExporter.mjs +0 -166
  860. package/exporters/PLYExporter.mjs +0 -278
  861. package/exporters/STLExporter.mjs +0 -129
  862. package/exporters/USDZExporter.mjs +0 -328
  863. package/geometries/BoxLineGeometry.mjs +0 -45
  864. package/geometries/ConvexGeometry.mjs +0 -29
  865. package/geometries/DecalGeometry.mjs +0 -184
  866. package/geometries/LightningStrike.mjs +0 -547
  867. package/geometries/ParametricGeometries.mjs +0 -129
  868. package/geometries/ParametricGeometry.mjs +0 -63
  869. package/geometries/RoundedBoxGeometry.mjs +0 -91
  870. package/geometries/TeapotGeometry.mjs +0 -1557
  871. package/geometries/TextGeometry.mjs +0 -23
  872. package/helpers/LightProbeHelper.mjs +0 -72
  873. package/helpers/PositionalAudioHelper.mjs +0 -68
  874. package/helpers/RectAreaLightHelper.mjs +0 -44
  875. package/helpers/VertexNormalsHelper.mjs +0 -54
  876. package/helpers/VertexTangentsHelper.mjs +0 -45
  877. package/index.mjs +0 -968
  878. package/interactive/SelectionBox.mjs +0 -137
  879. package/interactive/SelectionHelper.mjs +0 -54
  880. package/libs/MeshoptDecoder.mjs +0 -210
  881. package/libs/MotionControllers.mjs +0 -261
  882. package/lights/LightProbeGenerator.mjs +0 -145
  883. package/lights/RectAreaLightUniformsLib.mjs +0 -32842
  884. package/lines/Line2.mjs +0 -13
  885. package/lines/LineGeometry.mjs +0 -44
  886. package/lines/LineMaterial.mjs +0 -539
  887. package/lines/LineSegments2.mjs +0 -202
  888. package/lines/LineSegmentsGeometry.mjs +0 -124
  889. package/lines/Wireframe.mjs +0 -31
  890. package/lines/WireframeGeometry2.mjs +0 -13
  891. package/loaders/3DMLoader.mjs +0 -802
  892. package/loaders/3MFLoader.mjs +0 -837
  893. package/loaders/AMFLoader.mjs +0 -284
  894. package/loaders/AssimpLoader.mjs +0 -1396
  895. package/loaders/BVHLoader.mjs +0 -207
  896. package/loaders/BasisTextureLoader.mjs +0 -474
  897. package/loaders/ColladaLoader.mjs +0 -2403
  898. package/loaders/DDSLoader.mjs +0 -148
  899. package/loaders/DRACOLoader.mjs +0 -340
  900. package/loaders/EXRLoader.mjs +0 -1351
  901. package/loaders/FBXLoader.mjs +0 -2362
  902. package/loaders/FontLoader.mjs +0 -111
  903. package/loaders/GCodeLoader.mjs +0 -141
  904. package/loaders/GLTFLoader.mjs +0 -2316
  905. package/loaders/HDRCubeTextureLoader.mjs +0 -77
  906. package/loaders/KMZLoader.mjs +0 -75
  907. package/loaders/KTX2Loader.mjs +0 -427
  908. package/loaders/KTXLoader.mjs +0 -87
  909. package/loaders/LDrawLoader.mjs +0 -1409
  910. package/loaders/LUT3dlLoader.mjs +0 -100
  911. package/loaders/LUTCubeLoader.mjs +0 -104
  912. package/loaders/LWOLoader.mjs +0 -625
  913. package/loaders/LottieLoader.mjs +0 -47
  914. package/loaders/MD2Loader.mjs +0 -359
  915. package/loaders/MDDLoader.mjs +0 -58
  916. package/loaders/MMDLoader.mjs +0 -998
  917. package/loaders/MTLLoader.mjs +0 -280
  918. package/loaders/NRRDLoader.mjs +0 -401
  919. package/loaders/NodeMaterialLoader.mjs +0 -146
  920. package/loaders/OBJLoader.mjs +0 -487
  921. package/loaders/PCDLoader.mjs +0 -248
  922. package/loaders/PDBLoader.mjs +0 -246
  923. package/loaders/PLYLoader.mjs +0 -317
  924. package/loaders/PRWMLoader.mjs +0 -160
  925. package/loaders/PVRLoader.mjs +0 -131
  926. package/loaders/RGBELoader.mjs +0 -244
  927. package/loaders/RGBMLoader.mjs +0 -998
  928. package/loaders/STLLoader.mjs +0 -190
  929. package/loaders/SVGLoader.mjs +0 -1709
  930. package/loaders/TDSLoader.mjs +0 -480
  931. package/loaders/TGALoader.mjs +0 -285
  932. package/loaders/TTFLoader.mjs +0 -131
  933. package/loaders/TiltLoader.mjs +0 -373
  934. package/loaders/VOXLoader.mjs +0 -431
  935. package/loaders/VRMLLoader.mjs +0 -2093
  936. package/loaders/VRMLoader.mjs +0 -38
  937. package/loaders/VTKLoader.mjs +0 -646
  938. package/loaders/XLoader.mjs +0 -1258
  939. package/loaders/XYZLoader.mjs +0 -60
  940. package/loaders/lwo/IFFParser.mjs +0 -697
  941. package/loaders/lwo/LWO2Parser.mjs +0 -327
  942. package/loaders/lwo/LWO3Parser.mjs +0 -298
  943. package/math/Capsule.mjs +0 -100
  944. package/math/ColorConverter.mjs +0 -51
  945. package/math/ConvexHull.mjs +0 -574
  946. package/math/ImprovedNoise.mjs +0 -302
  947. package/math/Lut.mjs +0 -135
  948. package/math/MeshSurfaceSampler.mjs +0 -107
  949. package/math/OBB.mjs +0 -235
  950. package/math/Octree.mjs +0 -278
  951. package/math/SimplexNoise.mjs +0 -425
  952. package/misc/ConvexObjectBreaker.mjs +0 -292
  953. package/misc/GPUComputationRenderer.mjs +0 -171
  954. package/misc/Gyroscope.mjs +0 -35
  955. package/misc/MD2Character.mjs +0 -162
  956. package/misc/MD2CharacterComplex.mjs +0 -328
  957. package/misc/MorphAnimMesh.mjs +0 -40
  958. package/misc/MorphBlendMesh.mjs +0 -179
  959. package/misc/ProgressiveLightmap.mjs +0 -166
  960. package/misc/RollerCoaster.mjs +0 -346
  961. package/misc/TubePainter.mjs +0 -123
  962. package/misc/Volume.mjs +0 -244
  963. package/misc/VolumeSlice.mjs +0 -106
  964. package/misc/WebGL.mjs +0 -74
  965. package/modifiers/CurveModifier.mjs +0 -182
  966. package/modifiers/EdgeSplitModifier.mjs +0 -162
  967. package/modifiers/SimplifyModifier.mjs +0 -282
  968. package/modifiers/TessellateModifier.mjs +0 -206
  969. package/nodes/Nodes.mjs +0 -400
  970. package/nodes/ShaderNode.mjs +0 -408
  971. package/nodes/accessors/BufferNode.mjs +0 -15
  972. package/nodes/accessors/CameraNode.mjs +0 -44
  973. package/nodes/accessors/CubeTextureNode.mjs +0 -42
  974. package/nodes/accessors/MaterialNode.mjs +0 -71
  975. package/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  976. package/nodes/accessors/ModelNode.mjs +0 -9
  977. package/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  978. package/nodes/accessors/NormalNode.mjs +0 -62
  979. package/nodes/accessors/Object3DNode.mjs +0 -76
  980. package/nodes/accessors/PointUVNode.mjs +0 -13
  981. package/nodes/accessors/PositionNode.mjs +0 -65
  982. package/nodes/accessors/ReferenceNode.mjs +0 -37
  983. package/nodes/accessors/ReflectNode.mjs +0 -43
  984. package/nodes/accessors/SkinningNode.mjs +0 -58
  985. package/nodes/accessors/TextureNode.mjs +0 -54
  986. package/nodes/accessors/UVNode.mjs +0 -23
  987. package/nodes/core/ArrayUniformNode.mjs +0 -14
  988. package/nodes/core/AttributeNode.mjs +0 -30
  989. package/nodes/core/BypassNode.mjs +0 -22
  990. package/nodes/core/CodeNode.mjs +0 -28
  991. package/nodes/core/ConstNode.mjs +0 -14
  992. package/nodes/core/ContextNode.mjs +0 -22
  993. package/nodes/core/ExpressionNode.mjs +0 -19
  994. package/nodes/core/FunctionCallNode.mjs +0 -37
  995. package/nodes/core/FunctionNode.mjs +0 -56
  996. package/nodes/core/InputNode.mjs +0 -38
  997. package/nodes/core/Node.mjs +0 -139
  998. package/nodes/core/NodeAttribute.mjs +0 -10
  999. package/nodes/core/NodeBuilder.mjs +0 -395
  1000. package/nodes/core/NodeCode.mjs +0 -11
  1001. package/nodes/core/NodeFrame.mjs +0 -35
  1002. package/nodes/core/NodeFunctionInput.mjs +0 -13
  1003. package/nodes/core/NodeKeywords.mjs +0 -44
  1004. package/nodes/core/NodeUniform.mjs +0 -18
  1005. package/nodes/core/NodeUtils.mjs +0 -57
  1006. package/nodes/core/NodeVar.mjs +0 -10
  1007. package/nodes/core/NodeVary.mjs +0 -10
  1008. package/nodes/core/PropertyNode.mjs +0 -21
  1009. package/nodes/core/TempNode.mjs +0 -25
  1010. package/nodes/core/UniformNode.mjs +0 -23
  1011. package/nodes/core/VarNode.mjs +0 -31
  1012. package/nodes/core/VaryNode.mjs +0 -30
  1013. package/nodes/core/constants.mjs +0 -24
  1014. package/nodes/display/ColorSpaceNode.mjs +0 -63
  1015. package/nodes/display/NormalMapNode.mjs +0 -54
  1016. package/nodes/fog/FogNode.mjs +0 -15
  1017. package/nodes/fog/FogRangeNode.mjs +0 -17
  1018. package/nodes/functions/BSDFs.mjs +0 -64
  1019. package/nodes/lights/LightContextNode.mjs +0 -35
  1020. package/nodes/lights/LightNode.mjs +0 -58
  1021. package/nodes/lights/LightsNode.mjs +0 -59
  1022. package/nodes/loaders/NodeLoader.mjs +0 -66
  1023. package/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  1024. package/nodes/loaders/NodeObjectLoader.mjs +0 -40
  1025. package/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  1026. package/nodes/materials/Materials.mjs +0 -28
  1027. package/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  1028. package/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  1029. package/nodes/materials/NodeMaterial.mjs +0 -64
  1030. package/nodes/materials/PointsNodeMaterial.mjs +0 -30
  1031. package/nodes/math/CondNode.mjs +0 -38
  1032. package/nodes/math/MathNode.mjs +0 -163
  1033. package/nodes/math/OperatorNode.mjs +0 -103
  1034. package/nodes/procedural/CheckerNode.mjs +0 -21
  1035. package/nodes/utils/ArrayElementNode.mjs +0 -19
  1036. package/nodes/utils/ConvertNode.mjs +0 -25
  1037. package/nodes/utils/JoinNode.mjs +0 -26
  1038. package/nodes/utils/MatcapUVNode.mjs +0 -16
  1039. package/nodes/utils/OscNode.mjs +0 -50
  1040. package/nodes/utils/SplitNode.mjs +0 -45
  1041. package/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  1042. package/nodes/utils/TimerNode.mjs +0 -44
  1043. package/objects/GroundProjectedEnv.mjs +0 -130
  1044. package/objects/Lensflare.mjs +0 -262
  1045. package/objects/LightningStorm.mjs +0 -110
  1046. package/objects/MarchingCubes.mjs +0 -457
  1047. package/objects/Reflector.mjs +0 -166
  1048. package/objects/ReflectorForSSRPass.mjs +0 -247
  1049. package/objects/ReflectorRTT.mjs +0 -10
  1050. package/objects/Refractor.mjs +0 -178
  1051. package/objects/ShadowMesh.mjs +0 -41
  1052. package/objects/Sky.mjs +0 -124
  1053. package/objects/Water.mjs +0 -235
  1054. package/objects/Water2.mjs +0 -252
  1055. package/offscreen/jank.mjs +0 -27
  1056. package/offscreen/offscreen.mjs +0 -5
  1057. package/offscreen/scene.mjs +0 -52
  1058. package/physics/AmmoPhysics.mjs +0 -165
  1059. package/postprocessing/AdaptiveToneMappingPass.mjs +0 -221
  1060. package/postprocessing/AfterimagePass.mjs +0 -55
  1061. package/postprocessing/BloomPass.mjs +0 -90
  1062. package/postprocessing/BokehPass.mjs +0 -76
  1063. package/postprocessing/ClearPass.mjs +0 -27
  1064. package/postprocessing/CubeTexturePass.mjs +0 -49
  1065. package/postprocessing/DotScreenPass.mjs +0 -40
  1066. package/postprocessing/EffectComposer.mjs +0 -139
  1067. package/postprocessing/FilmPass.mjs +0 -42
  1068. package/postprocessing/GlitchPass.mjs +0 -75
  1069. package/postprocessing/HalftonePass.mjs +0 -44
  1070. package/postprocessing/LUTPass.mjs +0 -136
  1071. package/postprocessing/MaskPass.mjs +0 -60
  1072. package/postprocessing/OutlinePass.mjs +0 -438
  1073. package/postprocessing/Pass.mjs +0 -37
  1074. package/postprocessing/RenderPass.mjs +0 -48
  1075. package/postprocessing/RenderPixelatedPass.mjs +0 -199
  1076. package/postprocessing/SAOPass.mjs +0 -282
  1077. package/postprocessing/SMAAPass.mjs +0 -112
  1078. package/postprocessing/SSAARenderPass.mjs +0 -170
  1079. package/postprocessing/SSAOPass.mjs +0 -265
  1080. package/postprocessing/SSRPass.mjs +0 -432
  1081. package/postprocessing/SavePass.mjs +0 -37
  1082. package/postprocessing/ShaderPass.mjs +0 -39
  1083. package/postprocessing/TAARenderPass.mjs +0 -88
  1084. package/postprocessing/TexturePass.mjs +0 -39
  1085. package/postprocessing/UnrealBloomPass.mjs +0 -220
  1086. package/renderers/CSS2DRenderer.mjs +0 -112
  1087. package/renderers/CSS3DRenderer.mjs +0 -133
  1088. package/renderers/Projector.mjs +0 -511
  1089. package/renderers/SVGRenderer.mjs +0 -306
  1090. package/renderers/nodes/accessors/CameraNode.mjs +0 -63
  1091. package/renderers/nodes/accessors/ModelNode.mjs +0 -61
  1092. package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  1093. package/renderers/nodes/accessors/NormalNode.mjs +0 -61
  1094. package/renderers/nodes/accessors/PositionNode.mjs +0 -30
  1095. package/renderers/nodes/accessors/UVNode.mjs +0 -13
  1096. package/renderers/nodes/core/AttributeNode.mjs +0 -35
  1097. package/renderers/nodes/core/InputNode.mjs +0 -31
  1098. package/renderers/nodes/core/Node.mjs +0 -34
  1099. package/renderers/nodes/core/NodeAttribute.mjs +0 -10
  1100. package/renderers/nodes/core/NodeBuilder.mjs +0 -243
  1101. package/renderers/nodes/core/NodeFrame.mjs +0 -35
  1102. package/renderers/nodes/core/NodeSlot.mjs +0 -10
  1103. package/renderers/nodes/core/NodeUniform.mjs +0 -18
  1104. package/renderers/nodes/core/NodeVary.mjs +0 -11
  1105. package/renderers/nodes/core/VaryNode.mjs +0 -22
  1106. package/renderers/nodes/core/constants.mjs +0 -22
  1107. package/renderers/nodes/inputs/ColorNode.mjs +0 -11
  1108. package/renderers/nodes/inputs/FloatNode.mjs +0 -11
  1109. package/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  1110. package/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  1111. package/renderers/nodes/inputs/TextureNode.mjs +0 -20
  1112. package/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  1113. package/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  1114. package/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  1115. package/renderers/nodes/math/MathNode.mjs +0 -55
  1116. package/renderers/nodes/math/OperatorNode.mjs +0 -42
  1117. package/renderers/nodes/utils/SwitchNode.mjs +0 -20
  1118. package/renderers/nodes/utils/TimerNode.mjs +0 -14
  1119. package/renderers/webgpu/WebGPU.mjs +0 -24
  1120. package/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  1121. package/renderers/webgpu/WebGPUBackground.mjs +0 -61
  1122. package/renderers/webgpu/WebGPUBinding.mjs +0 -14
  1123. package/renderers/webgpu/WebGPUBindings.mjs +0 -155
  1124. package/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  1125. package/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  1126. package/renderers/webgpu/WebGPUInfo.mjs +0 -46
  1127. package/renderers/webgpu/WebGPUObjects.mjs +0 -25
  1128. package/renderers/webgpu/WebGPUProperties.mjs +0 -22
  1129. package/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  1130. package/renderers/webgpu/WebGPURenderPipelines.mjs +0 -545
  1131. package/renderers/webgpu/WebGPURenderer.mjs +0 -574
  1132. package/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  1133. package/renderers/webgpu/WebGPUSampler.mjs +0 -15
  1134. package/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  1135. package/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  1136. package/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  1137. package/renderers/webgpu/WebGPUTextures.mjs +0 -484
  1138. package/renderers/webgpu/WebGPUUniform.mjs +0 -81
  1139. package/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  1140. package/renderers/webgpu/constants.mjs +0 -230
  1141. package/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  1142. package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  1143. package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  1144. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  1145. package/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
  1146. package/shaders/ACESFilmicToneMappingShader.mjs +0 -48
  1147. package/shaders/AfterimageShader.mjs +0 -32
  1148. package/shaders/BasicShader.mjs +0 -12
  1149. package/shaders/BleachBypassShader.mjs +0 -35
  1150. package/shaders/BlendShader.mjs +0 -30
  1151. package/shaders/BokehShader.mjs +0 -106
  1152. package/shaders/BokehShader2.mjs +0 -269
  1153. package/shaders/BrightnessContrastShader.mjs +0 -32
  1154. package/shaders/ColorCorrectionShader.mjs +0 -30
  1155. package/shaders/ColorifyShader.mjs +0 -28
  1156. package/shaders/ConvolutionShader.mjs +0 -55
  1157. package/shaders/CopyShader.mjs +0 -25
  1158. package/shaders/DOFMipMapShader.mjs +0 -32
  1159. package/shaders/DepthLimitedBlurShader.mjs +0 -114
  1160. package/shaders/DigitalGlitch.mjs +0 -78
  1161. package/shaders/DotScreenShader.mjs +0 -39
  1162. package/shaders/FXAAShader.mjs +0 -1098
  1163. package/shaders/FilmShader.mjs +0 -42
  1164. package/shaders/FocusShader.mjs +0 -55
  1165. package/shaders/FreiChenShader.mjs +0 -61
  1166. package/shaders/FresnelShader.mjs +0 -47
  1167. package/shaders/GammaCorrectionShader.mjs +0 -23
  1168. package/shaders/GodRaysShader.mjs +0 -146
  1169. package/shaders/HalftoneShader.mjs +0 -212
  1170. package/shaders/HorizontalBlurShader.mjs +0 -43
  1171. package/shaders/HorizontalTiltShiftShader.mjs +0 -37
  1172. package/shaders/HueSaturationShader.mjs +0 -41
  1173. package/shaders/KaleidoShader.mjs +0 -34
  1174. package/shaders/LuminosityHighPassShader.mjs +0 -37
  1175. package/shaders/LuminosityShader.mjs +0 -25
  1176. package/shaders/MirrorShader.mjs +0 -35
  1177. package/shaders/NormalMapShader.mjs +0 -31
  1178. package/shaders/ParallaxShader.mjs +0 -113
  1179. package/shaders/PixelShader.mjs +0 -28
  1180. package/shaders/RGBShiftShader.mjs +0 -30
  1181. package/shaders/SAOShader.mjs +0 -144
  1182. package/shaders/SMAAShader.mjs +0 -272
  1183. package/shaders/SSAOShader.mjs +0 -172
  1184. package/shaders/SSRShader.mjs +0 -324
  1185. package/shaders/SepiaShader.mjs +0 -29
  1186. package/shaders/SobelOperatorShader.mjs +0 -44
  1187. package/shaders/SubsurfaceScatteringShader.mjs +0 -59
  1188. package/shaders/TechnicolorShader.mjs +0 -24
  1189. package/shaders/ToneMapShader.mjs +0 -48
  1190. package/shaders/ToonShader.mjs +0 -188
  1191. package/shaders/TriangleBlurShader.mjs +0 -36
  1192. package/shaders/UnpackDepthRGBAShader.mjs +0 -26
  1193. package/shaders/VerticalBlurShader.mjs +0 -44
  1194. package/shaders/VerticalTiltShiftShader.mjs +0 -37
  1195. package/shaders/VignetteShader.mjs +0 -28
  1196. package/shaders/VolumeShader.mjs +0 -178
  1197. package/shaders/WaterRefractionShader.mjs +0 -57
  1198. package/textures/FlakesTexture.mjs +0 -30
  1199. package/types/helpers.mjs +0 -4
  1200. package/utils/BufferGeometryUtils.mjs +0 -570
  1201. package/utils/GeometryCompressionUtils.mjs +0 -547
  1202. package/utils/GeometryUtils.mjs +0 -108
  1203. package/utils/RoughnessMipmapper.mjs +0 -213
  1204. package/utils/SceneUtils.mjs +0 -36
  1205. package/utils/ShadowMapViewer.mjs +0 -114
  1206. package/utils/SkeletonUtils.mjs +0 -292
  1207. package/utils/UVsDebug.mjs +0 -85
  1208. package/utils/WorkerPool.mjs +0 -62
  1209. package/webxr/ARButton.mjs +0 -119
  1210. package/webxr/OculusHandModel.mjs +0 -71
  1211. package/webxr/OculusHandPointerModel.mjs +0 -207
  1212. package/webxr/Text2D.mjs +0 -31
  1213. package/webxr/VRButton.mjs +0 -105
  1214. package/webxr/XRControllerModelFactory.mjs +0 -146
  1215. package/webxr/XREstimatedLight.mjs +0 -126
  1216. package/webxr/XRHandMeshModel.mjs +0 -73
  1217. package/webxr/XRHandModelFactory.mjs +0 -61
  1218. 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 };