three-stdlib 2.22.5 → 2.22.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1091) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +0 -2
  3. package/package.json +34 -14
  4. package/BufferGeometryUtils-903f7ecb.js +0 -1
  5. package/BufferGeometryUtils-f2288d1c.js +0 -740
  6. package/Nodes-2106b101.js +0 -352
  7. package/Nodes-8947ba9a.js +0 -1
  8. package/_polyfill/CompressedArrayTexture.cjs.js +0 -1
  9. package/_polyfill/CompressedArrayTexture.js +0 -13
  10. package/_polyfill/Data3DTexture.cjs.js +0 -1
  11. package/_polyfill/Data3DTexture.js +0 -23
  12. package/animation/AnimationClipCreator.cjs.js +0 -1
  13. package/animation/AnimationClipCreator.d.ts +0 -12
  14. package/animation/AnimationClipCreator.js +0 -77
  15. package/animation/CCDIKSolver.cjs.js +0 -1
  16. package/animation/CCDIKSolver.d.ts +0 -25
  17. package/animation/CCDIKSolver.js +0 -304
  18. package/animation/MMDAnimationHelper.cjs.js +0 -1
  19. package/animation/MMDAnimationHelper.d.ts +0 -103
  20. package/animation/MMDAnimationHelper.js +0 -705
  21. package/animation/MMDPhysics.cjs.js +0 -1
  22. package/animation/MMDPhysics.d.ts +0 -119
  23. package/animation/MMDPhysics.js +0 -976
  24. package/cameras/CinematicCamera.cjs.js +0 -1
  25. package/cameras/CinematicCamera.d.ts +0 -41
  26. package/cameras/CinematicCamera.js +0 -139
  27. package/controls/ArcballControls.cjs.js +0 -1
  28. package/controls/ArcballControls.d.ts +0 -161
  29. package/controls/ArcballControls.js +0 -2642
  30. package/controls/DeviceOrientationControls.cjs.js +0 -1
  31. package/controls/DeviceOrientationControls.d.ts +0 -24
  32. package/controls/DeviceOrientationControls.js +0 -119
  33. package/controls/DragControls.cjs.js +0 -1
  34. package/controls/DragControls.d.ts +0 -34
  35. package/controls/DragControls.js +0 -274
  36. package/controls/FirstPersonControls.cjs.js +0 -1
  37. package/controls/FirstPersonControls.d.ts +0 -48
  38. package/controls/FirstPersonControls.js +0 -290
  39. package/controls/FlyControls.cjs.js +0 -1
  40. package/controls/FlyControls.d.ts +0 -32
  41. package/controls/FlyControls.js +0 -309
  42. package/controls/OrbitControls.cjs.js +0 -1
  43. package/controls/OrbitControls.d.ts +0 -63
  44. package/controls/OrbitControls.js +0 -980
  45. package/controls/PointerLockControls.cjs.js +0 -1
  46. package/controls/PointerLockControls.d.ts +0 -24
  47. package/controls/PointerLockControls.js +0 -135
  48. package/controls/TrackballControls.cjs.js +0 -1
  49. package/controls/TrackballControls.d.ts +0 -95
  50. package/controls/TrackballControls.js +0 -653
  51. package/controls/TransformControls.cjs.js +0 -1
  52. package/controls/TransformControls.d.ts +0 -151
  53. package/controls/TransformControls.js +0 -1275
  54. package/controls/experimental/CameraControls.cjs.js +0 -1
  55. package/controls/experimental/CameraControls.d.ts +0 -170
  56. package/controls/experimental/CameraControls.js +0 -953
  57. package/csm/CSM.cjs.js +0 -1
  58. package/csm/CSM.d.ts +0 -61
  59. package/csm/CSM.js +0 -305
  60. package/csm/CSMFrustum.cjs.js +0 -1
  61. package/csm/CSMFrustum.d.ts +0 -19
  62. package/csm/CSMFrustum.js +0 -90
  63. package/csm/CSMHelper.cjs.js +0 -1
  64. package/csm/CSMHelper.d.ts +0 -26
  65. package/csm/CSMHelper.js +0 -128
  66. package/csm/CSMShader.cjs.js +0 -1
  67. package/csm/CSMShader.d.ts +0 -4
  68. package/csm/CSMShader.js +0 -255
  69. package/curves/CurveExtras.cjs.js +0 -1
  70. package/curves/CurveExtras.d.ts +0 -68
  71. package/curves/CurveExtras.js +0 -266
  72. package/curves/NURBSCurve.cjs.js +0 -1
  73. package/curves/NURBSCurve.d.ts +0 -11
  74. package/curves/NURBSCurve.js +0 -63
  75. package/curves/NURBSSurface.cjs.js +0 -1
  76. package/curves/NURBSSurface.d.ts +0 -13
  77. package/curves/NURBSSurface.js +0 -44
  78. package/curves/NURBSUtils.cjs.js +0 -1
  79. package/curves/NURBSUtils.d.ts +0 -22
  80. package/curves/NURBSUtils.js +0 -375
  81. package/custom.d.cjs.js +0 -1
  82. package/custom.d.js +0 -1
  83. package/deprecated/Geometry.cjs.js +0 -1
  84. package/deprecated/Geometry.d.ts +0 -342
  85. package/deprecated/Geometry.js +0 -1261
  86. package/effects/AnaglyphEffect.cjs.js +0 -1
  87. package/effects/AnaglyphEffect.d.ts +0 -11
  88. package/effects/AnaglyphEffect.js +0 -85
  89. package/effects/AsciiEffect.cjs.js +0 -1
  90. package/effects/AsciiEffect.d.ts +0 -18
  91. package/effects/AsciiEffect.js +0 -203
  92. package/effects/OutlineEffect.cjs.js +0 -1
  93. package/effects/OutlineEffect.d.ts +0 -28
  94. package/effects/OutlineEffect.js +0 -378
  95. package/effects/ParallaxBarrierEffect.cjs.js +0 -1
  96. package/effects/ParallaxBarrierEffect.d.ts +0 -8
  97. package/effects/ParallaxBarrierEffect.js +0 -63
  98. package/effects/PeppersGhostEffect.cjs.js +0 -1
  99. package/effects/PeppersGhostEffect.d.ts +0 -10
  100. package/effects/PeppersGhostEffect.js +0 -134
  101. package/effects/StereoEffect.cjs.js +0 -1
  102. package/effects/StereoEffect.d.ts +0 -9
  103. package/effects/StereoEffect.js +0 -36
  104. package/environments/RoomEnvironment.cjs.js +0 -1
  105. package/environments/RoomEnvironment.d.ts +0 -5
  106. package/environments/RoomEnvironment.js +0 -92
  107. package/exporters/ColladaExporter.cjs.js +0 -1
  108. package/exporters/ColladaExporter.d.ts +0 -39
  109. package/exporters/ColladaExporter.js +0 -425
  110. package/exporters/DRACOExporter.cjs.js +0 -1
  111. package/exporters/DRACOExporter.d.ts +0 -23
  112. package/exporters/DRACOExporter.js +0 -186
  113. package/exporters/GLTFExporter.cjs.js +0 -1
  114. package/exporters/GLTFExporter.d.ts +0 -270
  115. package/exporters/GLTFExporter.js +0 -1932
  116. package/exporters/MMDExporter.cjs.js +0 -1
  117. package/exporters/MMDExporter.d.ts +0 -8
  118. package/exporters/MMDExporter.js +0 -160
  119. package/exporters/OBJExporter.cjs.js +0 -1
  120. package/exporters/OBJExporter.d.ts +0 -18
  121. package/exporters/OBJExporter.js +0 -228
  122. package/exporters/PLYExporter.cjs.js +0 -1
  123. package/exporters/PLYExporter.d.ts +0 -11
  124. package/exporters/PLYExporter.js +0 -339
  125. package/exporters/STLExporter.cjs.js +0 -1
  126. package/exporters/STLExporter.d.ts +0 -23
  127. package/exporters/STLExporter.js +0 -180
  128. package/exporters/USDZExporter.cjs.js +0 -1
  129. package/exporters/USDZExporter.d.ts +0 -27
  130. package/exporters/USDZExporter.js +0 -388
  131. package/geometries/BoxLineGeometry.cjs.js +0 -1
  132. package/geometries/BoxLineGeometry.d.ts +0 -12
  133. package/geometries/BoxLineGeometry.js +0 -52
  134. package/geometries/ConvexGeometry.cjs.js +0 -1
  135. package/geometries/ConvexGeometry.d.ts +0 -5
  136. package/geometries/ConvexGeometry.js +0 -38
  137. package/geometries/DecalGeometry.cjs.js +0 -1
  138. package/geometries/DecalGeometry.d.ts +0 -10
  139. package/geometries/DecalGeometry.js +0 -238
  140. package/geometries/LightningStrike.cjs.js +0 -1
  141. package/geometries/LightningStrike.d.ts +0 -108
  142. package/geometries/LightningStrike.js +0 -740
  143. package/geometries/ParametricGeometries.cjs.js +0 -1
  144. package/geometries/ParametricGeometries.d.ts +0 -32
  145. package/geometries/ParametricGeometries.js +0 -179
  146. package/geometries/ParametricGeometry.cjs.js +0 -1
  147. package/geometries/ParametricGeometry.d.ts +0 -18
  148. package/geometries/ParametricGeometry.js +0 -87
  149. package/geometries/RoundedBoxGeometry.cjs.js +0 -1
  150. package/geometries/RoundedBoxGeometry.d.ts +0 -5
  151. package/geometries/RoundedBoxGeometry.js +0 -122
  152. package/geometries/TeapotGeometry.cjs.js +0 -1
  153. package/geometries/TeapotGeometry.d.ts +0 -13
  154. package/geometries/TeapotGeometry.js +0 -297
  155. package/geometries/TextGeometry.cjs.js +0 -1
  156. package/geometries/TextGeometry.d.ts +0 -18
  157. package/geometries/TextGeometry.js +0 -37
  158. package/helpers/LightProbeHelper.cjs.js +0 -1
  159. package/helpers/LightProbeHelper.d.ts +0 -10
  160. package/helpers/LightProbeHelper.js +0 -40
  161. package/helpers/PositionalAudioHelper.cjs.js +0 -1
  162. package/helpers/PositionalAudioHelper.d.ts +0 -13
  163. package/helpers/PositionalAudioHelper.js +0 -75
  164. package/helpers/RectAreaLightHelper.cjs.js +0 -1
  165. package/helpers/RectAreaLightHelper.d.ts +0 -10
  166. package/helpers/RectAreaLightHelper.js +0 -60
  167. package/helpers/VertexNormalsHelper.cjs.js +0 -1
  168. package/helpers/VertexNormalsHelper.d.ts +0 -10
  169. package/helpers/VertexNormalsHelper.js +0 -75
  170. package/helpers/VertexTangentsHelper.cjs.js +0 -1
  171. package/helpers/VertexTangentsHelper.d.ts +0 -10
  172. package/helpers/VertexTangentsHelper.js +0 -63
  173. package/index.cjs.js +0 -1
  174. package/index.d.ts +0 -254
  175. package/index.js +0 -337
  176. package/interactive/HTMLMesh.cjs.js +0 -1
  177. package/interactive/HTMLMesh.d.ts +0 -6
  178. package/interactive/HTMLMesh.js +0 -406
  179. package/interactive/InteractiveGroup.cjs.js +0 -1
  180. package/interactive/InteractiveGroup.d.ts +0 -5
  181. package/interactive/InteractiveGroup.js +0 -87
  182. package/interactive/SelectionBox.cjs.js +0 -1
  183. package/interactive/SelectionBox.d.ts +0 -15
  184. package/interactive/SelectionBox.js +0 -152
  185. package/interactive/SelectionHelper.cjs.js +0 -1
  186. package/interactive/SelectionHelper.d.ts +0 -17
  187. package/interactive/SelectionHelper.js +0 -59
  188. package/libs/MeshoptDecoder.cjs.js +0 -1
  189. package/libs/MeshoptDecoder.d.ts +0 -12
  190. package/libs/MeshoptDecoder.js +0 -124
  191. package/libs/MotionControllers.cjs.js +0 -1
  192. package/libs/MotionControllers.d.ts +0 -132
  193. package/libs/MotionControllers.js +0 -455
  194. package/lights/LightProbeGenerator.cjs.js +0 -1
  195. package/lights/LightProbeGenerator.d.ts +0 -6
  196. package/lights/LightProbeGenerator.js +0 -200
  197. package/lights/RectAreaLightUniformsLib.cjs.js +0 -1
  198. package/lights/RectAreaLightUniformsLib.d.ts +0 -3
  199. package/lights/RectAreaLightUniformsLib.js +0 -9
  200. package/lines/Line2.cjs.js +0 -1
  201. package/lines/Line2.d.ts +0 -11
  202. package/lines/Line2.js +0 -16
  203. package/lines/LineGeometry.cjs.js +0 -1
  204. package/lines/LineGeometry.d.ts +0 -10
  205. package/lines/LineGeometry.js +0 -56
  206. package/lines/LineMaterial.cjs.js +0 -1
  207. package/lines/LineMaterial.d.ts +0 -31
  208. package/lines/LineMaterial.js +0 -577
  209. package/lines/LineSegments2.cjs.js +0 -1
  210. package/lines/LineSegments2.d.ts +0 -14
  211. package/lines/LineSegments2.js +0 -311
  212. package/lines/LineSegmentsGeometry.cjs.js +0 -1
  213. package/lines/LineSegmentsGeometry.d.ts +0 -23
  214. package/lines/LineSegmentsGeometry.js +0 -166
  215. package/lines/Wireframe.cjs.js +0 -1
  216. package/lines/Wireframe.d.ts +0 -11
  217. package/lines/Wireframe.js +0 -45
  218. package/lines/WireframeGeometry2.cjs.js +0 -1
  219. package/lines/WireframeGeometry2.d.ts +0 -8
  220. package/lines/WireframeGeometry2.js +0 -14
  221. package/loaders/3DMLoader.cjs.js +0 -1
  222. package/loaders/3DMLoader.d.ts +0 -17
  223. package/loaders/3DMLoader.js +0 -1037
  224. package/loaders/3MFLoader.cjs.js +0 -1
  225. package/loaders/3MFLoader.d.ts +0 -16
  226. package/loaders/3MFLoader.js +0 -1053
  227. package/loaders/AMFLoader.cjs.js +0 -1
  228. package/loaders/AMFLoader.d.ts +0 -14
  229. package/loaders/AMFLoader.js +0 -389
  230. package/loaders/AssimpLoader.cjs.js +0 -1
  231. package/loaders/AssimpLoader.js +0 -1793
  232. package/loaders/BVHLoader.cjs.js +0 -1
  233. package/loaders/BVHLoader.d.ts +0 -21
  234. package/loaders/BVHLoader.js +0 -313
  235. package/loaders/BasisTextureLoader.cjs.js +0 -1
  236. package/loaders/BasisTextureLoader.d.ts +0 -32
  237. package/loaders/BasisTextureLoader.js +0 -602
  238. package/loaders/ColladaLoader.cjs.js +0 -1
  239. package/loaders/ColladaLoader.d.ts +0 -20
  240. package/loaders/ColladaLoader.js +0 -2993
  241. package/loaders/DDSLoader.cjs.js +0 -1
  242. package/loaders/DDSLoader.d.ts +0 -16
  243. package/loaders/DDSLoader.js +0 -214
  244. package/loaders/DRACOLoader.cjs.js +0 -1
  245. package/loaders/DRACOLoader.d.ts +0 -18
  246. package/loaders/DRACOLoader.js +0 -447
  247. package/loaders/EXRLoader.cjs.js +0 -1
  248. package/loaders/EXRLoader.d.ts +0 -18
  249. package/loaders/EXRLoader.js +0 -1699
  250. package/loaders/FBXLoader.cjs.js +0 -1
  251. package/loaders/FBXLoader.d.ts +0 -14
  252. package/loaders/FBXLoader.js +0 -2917
  253. package/loaders/FontLoader.cjs.js +0 -1
  254. package/loaders/FontLoader.d.ts +0 -36
  255. package/loaders/FontLoader.js +0 -144
  256. package/loaders/GCodeLoader.cjs.js +0 -1
  257. package/loaders/GCodeLoader.d.ts +0 -15
  258. package/loaders/GCodeLoader.js +0 -189
  259. package/loaders/GLTFLoader.cjs.js +0 -1
  260. package/loaders/GLTFLoader.d.ts +0 -151
  261. package/loaders/GLTFLoader.js +0 -3136
  262. package/loaders/HDRCubeTextureLoader.cjs.js +0 -1
  263. package/loaders/HDRCubeTextureLoader.d.ts +0 -18
  264. package/loaders/HDRCubeTextureLoader.js +0 -77
  265. package/loaders/KMZLoader.cjs.js +0 -1
  266. package/loaders/KMZLoader.d.ts +0 -16
  267. package/loaders/KMZLoader.js +0 -88
  268. package/loaders/KTX2Loader.cjs.js +0 -1
  269. package/loaders/KTX2Loader.d.ts +0 -16
  270. package/loaders/KTX2Loader.js +0 -596
  271. package/loaders/KTXLoader.cjs.js +0 -1
  272. package/loaders/KTXLoader.d.ts +0 -16
  273. package/loaders/KTXLoader.js +0 -149
  274. package/loaders/LDrawLoader.cjs.js +0 -1
  275. package/loaders/LDrawLoader.d.ts +0 -26
  276. package/loaders/LDrawLoader.js +0 -1842
  277. package/loaders/LUT3dlLoader.cjs.js +0 -1
  278. package/loaders/LUT3dlLoader.d.ts +0 -20
  279. package/loaders/LUT3dlLoader.js +0 -115
  280. package/loaders/LUTCubeLoader.cjs.js +0 -1
  281. package/loaders/LUTCubeLoader.d.ts +0 -23
  282. package/loaders/LUTCubeLoader.js +0 -118
  283. package/loaders/LWOLoader.cjs.js +0 -1
  284. package/loaders/LWOLoader.d.ts +0 -26
  285. package/loaders/LWOLoader.js +0 -737
  286. package/loaders/LottieLoader.cjs.js +0 -1
  287. package/loaders/LottieLoader.d.ts +0 -15
  288. package/loaders/LottieLoader.js +0 -49
  289. package/loaders/MD2Loader.cjs.js +0 -1
  290. package/loaders/MD2Loader.d.ts +0 -14
  291. package/loaders/MD2Loader.js +0 -202
  292. package/loaders/MDDLoader.cjs.js +0 -1
  293. package/loaders/MDDLoader.d.ts +0 -19
  294. package/loaders/MDDLoader.js +0 -78
  295. package/loaders/MMDLoader.cjs.js +0 -1
  296. package/loaders/MMDLoader.d.ts +0 -63
  297. package/loaders/MMDLoader.js +0 -1434
  298. package/loaders/MTLLoader.cjs.js +0 -1
  299. package/loaders/MTLLoader.d.ts +0 -112
  300. package/loaders/MTLLoader.js +0 -390
  301. package/loaders/NRRDLoader.cjs.js +0 -1
  302. package/loaders/NRRDLoader.d.ts +0 -21
  303. package/loaders/NRRDLoader.js +0 -482
  304. package/loaders/NodeMaterialLoader.cjs.js +0 -1
  305. package/loaders/NodeMaterialLoader.js +0 -39
  306. package/loaders/OBJLoader.cjs.js +0 -1
  307. package/loaders/OBJLoader.d.ts +0 -17
  308. package/loaders/OBJLoader.js +0 -609
  309. package/loaders/PCDLoader.cjs.js +0 -1
  310. package/loaders/PCDLoader.d.ts +0 -15
  311. package/loaders/PCDLoader.js +0 -267
  312. package/loaders/PDBLoader.cjs.js +0 -1
  313. package/loaders/PDBLoader.d.ts +0 -22
  314. package/loaders/PDBLoader.js +0 -264
  315. package/loaders/PLYLoader.cjs.js +0 -1
  316. package/loaders/PLYLoader.d.ts +0 -16
  317. package/loaders/PLYLoader.js +0 -414
  318. package/loaders/PRWMLoader.cjs.js +0 -1
  319. package/loaders/PRWMLoader.d.ts +0 -16
  320. package/loaders/PRWMLoader.js +0 -197
  321. package/loaders/PVRLoader.cjs.js +0 -1
  322. package/loaders/PVRLoader.d.ts +0 -16
  323. package/loaders/PVRLoader.js +0 -192
  324. package/loaders/RGBELoader.cjs.js +0 -1
  325. package/loaders/RGBELoader.d.ts +0 -20
  326. package/loaders/RGBELoader.js +0 -382
  327. package/loaders/RGBMLoader.cjs.js +0 -1
  328. package/loaders/RGBMLoader.d.ts +0 -32
  329. package/loaders/RGBMLoader.js +0 -1168
  330. package/loaders/STLLoader.cjs.js +0 -1
  331. package/loaders/STLLoader.d.ts +0 -14
  332. package/loaders/STLLoader.js +0 -296
  333. package/loaders/SVGLoader.cjs.js +0 -1
  334. package/loaders/SVGLoader.d.ts +0 -63
  335. package/loaders/SVGLoader.js +0 -2083
  336. package/loaders/TDSLoader.cjs.js +0 -1
  337. package/loaders/TDSLoader.d.ts +0 -42
  338. package/loaders/TDSLoader.js +0 -870
  339. package/loaders/TGALoader.cjs.js +0 -1
  340. package/loaders/TGALoader.d.ts +0 -14
  341. package/loaders/TGALoader.js +0 -396
  342. package/loaders/TTFLoader.cjs.js +0 -1
  343. package/loaders/TTFLoader.d.ts +0 -15
  344. package/loaders/TTFLoader.js +0 -152
  345. package/loaders/TiltLoader.cjs.js +0 -1
  346. package/loaders/TiltLoader.d.ts +0 -14
  347. package/loaders/TiltLoader.js +0 -411
  348. package/loaders/VOXLoader.cjs.js +0 -1
  349. package/loaders/VOXLoader.d.ts +0 -28
  350. package/loaders/VOXLoader.js +0 -196
  351. package/loaders/VRMLLoader.cjs.js +0 -1
  352. package/loaders/VRMLLoader.d.ts +0 -14
  353. package/loaders/VRMLLoader.js +0 -2575
  354. package/loaders/VRMLoader.cjs.js +0 -1
  355. package/loaders/VRMLoader.js +0 -46
  356. package/loaders/VTKLoader.cjs.js +0 -1
  357. package/loaders/VTKLoader.d.ts +0 -14
  358. package/loaders/VTKLoader.js +0 -834
  359. package/loaders/XLoader.cjs.js +0 -1
  360. package/loaders/XLoader.js +0 -1434
  361. package/loaders/XYZLoader.cjs.js +0 -1
  362. package/loaders/XYZLoader.d.ts +0 -14
  363. package/loaders/XYZLoader.js +0 -66
  364. package/loaders/lwo/IFFParser.cjs.js +0 -1
  365. package/loaders/lwo/IFFParser.js +0 -951
  366. package/loaders/lwo/LWO2Parser.cjs.js +0 -1
  367. package/loaders/lwo/LWO2Parser.js +0 -430
  368. package/loaders/lwo/LWO3Parser.cjs.js +0 -1
  369. package/loaders/lwo/LWO3Parser.js +0 -385
  370. package/math/Capsule.cjs.js +0 -1
  371. package/math/Capsule.d.ts +0 -27
  372. package/math/Capsule.js +0 -87
  373. package/math/ColorConverter.cjs.js +0 -1
  374. package/math/ColorConverter.d.ts +0 -21
  375. package/math/ColorConverter.js +0 -65
  376. package/math/ConvexHull.cjs.js +0 -1
  377. package/math/ConvexHull.d.ts +0 -89
  378. package/math/ConvexHull.js +0 -834
  379. package/math/ImprovedNoise.cjs.js +0 -1
  380. package/math/ImprovedNoise.d.ts +0 -4
  381. package/math/ImprovedNoise.js +0 -52
  382. package/math/Lut.cjs.js +0 -1
  383. package/math/Lut.d.ts +0 -27
  384. package/math/Lut.js +0 -119
  385. package/math/MeshSurfaceSampler.cjs.js +0 -1
  386. package/math/MeshSurfaceSampler.d.ts +0 -15
  387. package/math/MeshSurfaceSampler.js +0 -150
  388. package/math/OBB.cjs.js +0 -1
  389. package/math/OBB.d.ts +0 -24
  390. package/math/OBB.js +0 -296
  391. package/math/Octree.cjs.js +0 -1
  392. package/math/Octree.d.ts +0 -24
  393. package/math/Octree.js +0 -341
  394. package/math/SimplexNoise.cjs.js +0 -1
  395. package/math/SimplexNoise.d.ts +0 -17
  396. package/math/SimplexNoise.js +0 -446
  397. package/misc/ConvexObjectBreaker.cjs.js +0 -1
  398. package/misc/ConvexObjectBreaker.d.ts +0 -25
  399. package/misc/ConvexObjectBreaker.js +0 -398
  400. package/misc/GPUComputationRenderer.cjs.js +0 -1
  401. package/misc/GPUComputationRenderer.d.ts +0 -52
  402. package/misc/GPUComputationRenderer.js +0 -296
  403. package/misc/Gyroscope.cjs.js +0 -1
  404. package/misc/Gyroscope.d.ts +0 -5
  405. package/misc/Gyroscope.js +0 -41
  406. package/misc/MD2Character.cjs.js +0 -1
  407. package/misc/MD2Character.d.ts +0 -33
  408. package/misc/MD2Character.js +0 -184
  409. package/misc/MD2CharacterComplex.cjs.js +0 -1
  410. package/misc/MD2CharacterComplex.d.ts +0 -47
  411. package/misc/MD2CharacterComplex.js +0 -379
  412. package/misc/MorphAnimMesh.cjs.js +0 -1
  413. package/misc/MorphAnimMesh.d.ts +0 -13
  414. package/misc/MorphAnimMesh.js +0 -48
  415. package/misc/MorphBlendMesh.cjs.js +0 -1
  416. package/misc/MorphBlendMesh.d.ts +0 -21
  417. package/misc/MorphBlendMesh.js +0 -203
  418. package/misc/ProgressiveLightmap.cjs.js +0 -1
  419. package/misc/ProgressiveLightmap.js +0 -285
  420. package/misc/RollerCoaster.cjs.js +0 -1
  421. package/misc/RollerCoaster.d.ts +0 -21
  422. package/misc/RollerCoaster.js +0 -375
  423. package/misc/Timer.cjs.js +0 -1
  424. package/misc/Timer.d.ts +0 -27
  425. package/misc/Timer.js +0 -125
  426. package/misc/TubePainter.cjs.js +0 -1
  427. package/misc/TubePainter.d.ts +0 -10
  428. package/misc/TubePainter.js +0 -141
  429. package/misc/Volume.cjs.js +0 -1
  430. package/misc/Volume.d.ts +0 -37
  431. package/misc/Volume.js +0 -406
  432. package/misc/VolumeSlice.cjs.js +0 -1
  433. package/misc/VolumeSlice.d.ts +0 -28
  434. package/misc/VolumeSlice.js +0 -194
  435. package/misc/WebGL.cjs.js +0 -1
  436. package/misc/WebGL.d.ts +0 -5
  437. package/misc/WebGL.js +0 -71
  438. package/modifiers/CurveModifier.cjs.js +0 -1
  439. package/modifiers/CurveModifier.d.ts +0 -39
  440. package/modifiers/CurveModifier.js +0 -288
  441. package/modifiers/EdgeSplitModifier.cjs.js +0 -1
  442. package/modifiers/EdgeSplitModifier.d.ts +0 -19
  443. package/modifiers/EdgeSplitModifier.js +0 -205
  444. package/modifiers/SimplifyModifier.cjs.js +0 -1
  445. package/modifiers/SimplifyModifier.d.ts +0 -12
  446. package/modifiers/SimplifyModifier.js +0 -407
  447. package/modifiers/TessellateModifier.cjs.js +0 -1
  448. package/modifiers/TessellateModifier.d.ts +0 -8
  449. package/modifiers/TessellateModifier.js +0 -231
  450. package/nodes/Nodes.cjs.js +0 -1
  451. package/nodes/Nodes.js +0 -204
  452. package/nodes/ShaderNode.cjs.js +0 -1
  453. package/nodes/ShaderNode.js +0 -308
  454. package/nodes/accessors/BufferNode.cjs.js +0 -1
  455. package/nodes/accessors/BufferNode.js +0 -18
  456. package/nodes/accessors/CameraNode.cjs.js +0 -1
  457. package/nodes/accessors/CameraNode.js +0 -48
  458. package/nodes/accessors/CubeTextureNode.cjs.js +0 -1
  459. package/nodes/accessors/CubeTextureNode.js +0 -53
  460. package/nodes/accessors/MaterialNode.cjs.js +0 -1
  461. package/nodes/accessors/MaterialNode.js +0 -80
  462. package/nodes/accessors/MaterialReferenceNode.cjs.js +0 -1
  463. package/nodes/accessors/MaterialReferenceNode.js +0 -16
  464. package/nodes/accessors/ModelNode.cjs.js +0 -1
  465. package/nodes/accessors/ModelNode.js +0 -10
  466. package/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
  467. package/nodes/accessors/ModelViewProjectionNode.js +0 -22
  468. package/nodes/accessors/NormalNode.cjs.js +0 -1
  469. package/nodes/accessors/NormalNode.js +0 -60
  470. package/nodes/accessors/Object3DNode.cjs.js +0 -1
  471. package/nodes/accessors/Object3DNode.js +0 -85
  472. package/nodes/accessors/PointUVNode.cjs.js +0 -1
  473. package/nodes/accessors/PointUVNode.js +0 -16
  474. package/nodes/accessors/PositionNode.cjs.js +0 -1
  475. package/nodes/accessors/PositionNode.js +0 -63
  476. package/nodes/accessors/ReferenceNode.cjs.js +0 -1
  477. package/nodes/accessors/ReferenceNode.js +0 -43
  478. package/nodes/accessors/ReflectNode.cjs.js +0 -1
  479. package/nodes/accessors/ReflectNode.js +0 -45
  480. package/nodes/accessors/SkinningNode.cjs.js +0 -1
  481. package/nodes/accessors/SkinningNode.js +0 -59
  482. package/nodes/accessors/TextureNode.cjs.js +0 -1
  483. package/nodes/accessors/TextureNode.js +0 -68
  484. package/nodes/accessors/UVNode.cjs.js +0 -1
  485. package/nodes/accessors/UVNode.js +0 -28
  486. package/nodes/core/ArrayUniformNode.cjs.js +0 -1
  487. package/nodes/core/ArrayUniformNode.js +0 -17
  488. package/nodes/core/AttributeNode.cjs.js +0 -1
  489. package/nodes/core/AttributeNode.js +0 -36
  490. package/nodes/core/BypassNode.cjs.js +0 -1
  491. package/nodes/core/BypassNode.js +0 -28
  492. package/nodes/core/CodeNode.cjs.js +0 -1
  493. package/nodes/core/CodeNode.js +0 -35
  494. package/nodes/core/ConstNode.cjs.js +0 -1
  495. package/nodes/core/ConstNode.js +0 -17
  496. package/nodes/core/ContextNode.cjs.js +0 -1
  497. package/nodes/core/ContextNode.js +0 -26
  498. package/nodes/core/ExpressionNode.cjs.js +0 -1
  499. package/nodes/core/ExpressionNode.js +0 -22
  500. package/nodes/core/FunctionCallNode.cjs.js +0 -1
  501. package/nodes/core/FunctionCallNode.js +0 -45
  502. package/nodes/core/FunctionNode.cjs.js +0 -1
  503. package/nodes/core/FunctionNode.js +0 -70
  504. package/nodes/core/InputNode.cjs.js +0 -1
  505. package/nodes/core/InputNode.js +0 -48
  506. package/nodes/core/Node.cjs.js +0 -1
  507. package/nodes/core/Node.js +0 -178
  508. package/nodes/core/NodeAttribute.cjs.js +0 -1
  509. package/nodes/core/NodeAttribute.js +0 -11
  510. package/nodes/core/NodeBuilder.cjs.js +0 -1
  511. package/nodes/core/NodeBuilder.js +0 -509
  512. package/nodes/core/NodeCode.cjs.js +0 -1
  513. package/nodes/core/NodeCode.js +0 -13
  514. package/nodes/core/NodeFrame.cjs.js +0 -1
  515. package/nodes/core/NodeFrame.js +0 -37
  516. package/nodes/core/NodeFunction.cjs.js +0 -1
  517. package/nodes/core/NodeFunction.js +0 -17
  518. package/nodes/core/NodeFunctionInput.cjs.js +0 -1
  519. package/nodes/core/NodeFunctionInput.js +0 -14
  520. package/nodes/core/NodeKeywords.cjs.js +0 -1
  521. package/nodes/core/NodeKeywords.js +0 -54
  522. package/nodes/core/NodeParser.cjs.js +0 -1
  523. package/nodes/core/NodeParser.js +0 -8
  524. package/nodes/core/NodeUniform.cjs.js +0 -1
  525. package/nodes/core/NodeUniform.js +0 -21
  526. package/nodes/core/NodeUtils.cjs.js +0 -1
  527. package/nodes/core/NodeUtils.js +0 -61
  528. package/nodes/core/NodeVar.cjs.js +0 -1
  529. package/nodes/core/NodeVar.js +0 -11
  530. package/nodes/core/NodeVary.cjs.js +0 -1
  531. package/nodes/core/NodeVary.js +0 -11
  532. package/nodes/core/PropertyNode.cjs.js +0 -1
  533. package/nodes/core/PropertyNode.js +0 -26
  534. package/nodes/core/TempNode.cjs.js +0 -1
  535. package/nodes/core/TempNode.js +0 -30
  536. package/nodes/core/UniformNode.cjs.js +0 -1
  537. package/nodes/core/UniformNode.js +0 -28
  538. package/nodes/core/VarNode.cjs.js +0 -1
  539. package/nodes/core/VarNode.js +0 -38
  540. package/nodes/core/VaryNode.cjs.js +0 -1
  541. package/nodes/core/VaryNode.js +0 -38
  542. package/nodes/core/constants.cjs.js +0 -1
  543. package/nodes/core/constants.js +0 -11
  544. package/nodes/display/ColorSpaceNode.cjs.js +0 -1
  545. package/nodes/display/ColorSpaceNode.js +0 -66
  546. package/nodes/display/NormalMapNode.cjs.js +0 -1
  547. package/nodes/display/NormalMapNode.js +0 -71
  548. package/nodes/fog/FogNode.cjs.js +0 -1
  549. package/nodes/fog/FogNode.js +0 -18
  550. package/nodes/fog/FogRangeNode.cjs.js +0 -1
  551. package/nodes/fog/FogRangeNode.js +0 -20
  552. package/nodes/functions/BSDFs.cjs.js +0 -1
  553. package/nodes/functions/BSDFs.js +0 -121
  554. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +0 -1
  555. package/nodes/functions/PhysicalMaterialFunctions.js +0 -57
  556. package/nodes/lights/LightContextNode.cjs.js +0 -1
  557. package/nodes/lights/LightContextNode.js +0 -43
  558. package/nodes/lights/LightNode.cjs.js +0 -1
  559. package/nodes/lights/LightNode.js +0 -61
  560. package/nodes/lights/LightsNode.cjs.js +0 -1
  561. package/nodes/lights/LightsNode.js +0 -77
  562. package/nodes/loaders/NodeLoader.cjs.js +0 -1
  563. package/nodes/loaders/NodeLoader.js +0 -212
  564. package/nodes/loaders/NodeMaterialLoader.cjs.js +0 -1
  565. package/nodes/loaders/NodeMaterialLoader.js +0 -29
  566. package/nodes/loaders/NodeObjectLoader.cjs.js +0 -1
  567. package/nodes/loaders/NodeObjectLoader.js +0 -49
  568. package/nodes/materials/LineBasicNodeMaterial.cjs.js +0 -1
  569. package/nodes/materials/LineBasicNodeMaterial.js +0 -31
  570. package/nodes/materials/Materials.cjs.js +0 -1
  571. package/nodes/materials/Materials.js +0 -27
  572. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +0 -1
  573. package/nodes/materials/MeshBasicNodeMaterial.js +0 -32
  574. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +0 -1
  575. package/nodes/materials/MeshStandardNodeMaterial.js +0 -43
  576. package/nodes/materials/NodeMaterial.cjs.js +0 -1
  577. package/nodes/materials/NodeMaterial.js +0 -79
  578. package/nodes/materials/PointsNodeMaterial.cjs.js +0 -1
  579. package/nodes/materials/PointsNodeMaterial.js +0 -34
  580. package/nodes/math/CondNode.cjs.js +0 -1
  581. package/nodes/math/CondNode.js +0 -49
  582. package/nodes/math/MathNode.cjs.js +0 -1
  583. package/nodes/math/MathNode.js +0 -206
  584. package/nodes/math/OperatorNode.cjs.js +0 -1
  585. package/nodes/math/OperatorNode.js +0 -124
  586. package/nodes/parsers/GLSLNodeFunction.cjs.js +0 -1
  587. package/nodes/parsers/GLSLNodeFunction.js +0 -101
  588. package/nodes/parsers/GLSLNodeParser.cjs.js +0 -1
  589. package/nodes/parsers/GLSLNodeParser.js +0 -13
  590. package/nodes/parsers/WGSLNodeFunction.cjs.js +0 -1
  591. package/nodes/parsers/WGSLNodeFunction.js +0 -71
  592. package/nodes/parsers/WGSLNodeParser.cjs.js +0 -1
  593. package/nodes/parsers/WGSLNodeParser.js +0 -13
  594. package/nodes/procedural/CheckerNode.cjs.js +0 -1
  595. package/nodes/procedural/CheckerNode.js +0 -26
  596. package/nodes/utils/ArrayElementNode.cjs.js +0 -1
  597. package/nodes/utils/ArrayElementNode.js +0 -22
  598. package/nodes/utils/ConvertNode.cjs.js +0 -1
  599. package/nodes/utils/ConvertNode.js +0 -29
  600. package/nodes/utils/JoinNode.cjs.js +0 -1
  601. package/nodes/utils/JoinNode.js +0 -29
  602. package/nodes/utils/MatcapUVNode.cjs.js +0 -1
  603. package/nodes/utils/MatcapUVNode.js +0 -18
  604. package/nodes/utils/OscNode.cjs.js +0 -1
  605. package/nodes/utils/OscNode.js +0 -55
  606. package/nodes/utils/SplitNode.cjs.js +0 -1
  607. package/nodes/utils/SplitNode.js +0 -58
  608. package/nodes/utils/SpriteSheetUVNode.cjs.js +0 -1
  609. package/nodes/utils/SpriteSheetUVNode.js +0 -39
  610. package/nodes/utils/TimerNode.cjs.js +0 -1
  611. package/nodes/utils/TimerNode.js +0 -47
  612. package/objects/GroundProjectedEnv.cjs.js +0 -1
  613. package/objects/GroundProjectedEnv.d.ts +0 -12
  614. package/objects/GroundProjectedEnv.js +0 -145
  615. package/objects/Lensflare.cjs.js +0 -1
  616. package/objects/Lensflare.d.ts +0 -17
  617. package/objects/Lensflare.js +0 -332
  618. package/objects/LightningStorm.cjs.js +0 -1
  619. package/objects/LightningStorm.d.ts +0 -32
  620. package/objects/LightningStorm.js +0 -174
  621. package/objects/MarchingCubes.cjs.js +0 -1
  622. package/objects/MarchingCubes.d.ts +0 -75
  623. package/objects/MarchingCubes.js +0 -610
  624. package/objects/Reflector.cjs.js +0 -1
  625. package/objects/Reflector.d.ts +0 -19
  626. package/objects/Reflector.js +0 -188
  627. package/objects/ReflectorForSSRPass.cjs.js +0 -1
  628. package/objects/ReflectorForSSRPass.d.ts +0 -57
  629. package/objects/ReflectorForSSRPass.js +0 -298
  630. package/objects/ReflectorRTT.cjs.js +0 -1
  631. package/objects/ReflectorRTT.js +0 -11
  632. package/objects/Refractor.cjs.js +0 -1
  633. package/objects/Refractor.d.ts +0 -19
  634. package/objects/Refractor.js +0 -220
  635. package/objects/ShadowMesh.cjs.js +0 -1
  636. package/objects/ShadowMesh.d.ts +0 -7
  637. package/objects/ShadowMesh.js +0 -50
  638. package/objects/Sky.cjs.js +0 -1
  639. package/objects/Sky.d.ts +0 -30
  640. package/objects/Sky.js +0 -85
  641. package/objects/Water.cjs.js +0 -1
  642. package/objects/Water.d.ts +0 -22
  643. package/objects/Water.js +0 -279
  644. package/objects/Water2.cjs.js +0 -1
  645. package/objects/Water2.d.ts +0 -30
  646. package/objects/Water2.js +0 -288
  647. package/offscreen/jank.cjs.js +0 -1
  648. package/offscreen/jank.js +0 -30
  649. package/offscreen/offscreen.cjs.js +0 -1
  650. package/offscreen/offscreen.js +0 -7
  651. package/offscreen/scene.cjs.js +0 -1
  652. package/offscreen/scene.js +0 -73
  653. package/physics/AmmoPhysics.cjs.js +0 -1
  654. package/physics/AmmoPhysics.d.ts +0 -7
  655. package/physics/AmmoPhysics.js +0 -206
  656. package/postprocessing/AdaptiveToneMappingPass.cjs.js +0 -1
  657. package/postprocessing/AdaptiveToneMappingPass.d.ts +0 -29
  658. package/postprocessing/AdaptiveToneMappingPass.js +0 -247
  659. package/postprocessing/AfterimagePass.cjs.js +0 -1
  660. package/postprocessing/AfterimagePass.d.ts +0 -15
  661. package/postprocessing/AfterimagePass.js +0 -76
  662. package/postprocessing/BloomPass.cjs.js +0 -1
  663. package/postprocessing/BloomPass.d.ts +0 -16
  664. package/postprocessing/BloomPass.js +0 -116
  665. package/postprocessing/BokehPass.cjs.js +0 -1
  666. package/postprocessing/BokehPass.d.ts +0 -23
  667. package/postprocessing/BokehPass.js +0 -106
  668. package/postprocessing/ClearPass.cjs.js +0 -1
  669. package/postprocessing/ClearPass.d.ts +0 -10
  670. package/postprocessing/ClearPass.js +0 -42
  671. package/postprocessing/CubeTexturePass.cjs.js +0 -1
  672. package/postprocessing/CubeTexturePass.d.ts +0 -14
  673. package/postprocessing/CubeTexturePass.js +0 -48
  674. package/postprocessing/DotScreenPass.cjs.js +0 -1
  675. package/postprocessing/DotScreenPass.d.ts +0 -10
  676. package/postprocessing/DotScreenPass.js +0 -48
  677. package/postprocessing/EffectComposer.cjs.js +0 -1
  678. package/postprocessing/EffectComposer.d.ts +0 -27
  679. package/postprocessing/EffectComposer.js +0 -186
  680. package/postprocessing/FilmPass.cjs.js +0 -1
  681. package/postprocessing/FilmPass.d.ts +0 -10
  682. package/postprocessing/FilmPass.js +0 -47
  683. package/postprocessing/GlitchPass.cjs.js +0 -1
  684. package/postprocessing/GlitchPass.d.ts +0 -15
  685. package/postprocessing/GlitchPass.js +0 -96
  686. package/postprocessing/HalftonePass.cjs.js +0 -1
  687. package/postprocessing/HalftonePass.d.ts +0 -23
  688. package/postprocessing/HalftonePass.js +0 -64
  689. package/postprocessing/LUTPass.cjs.js +0 -1
  690. package/postprocessing/LUTPass.d.ts +0 -13
  691. package/postprocessing/LUTPass.js +0 -161
  692. package/postprocessing/MaskPass.cjs.js +0 -1
  693. package/postprocessing/MaskPass.d.ts +0 -14
  694. package/postprocessing/MaskPass.js +0 -79
  695. package/postprocessing/OutlinePass.cjs.js +0 -1
  696. package/postprocessing/OutlinePass.d.ts +0 -53
  697. package/postprocessing/OutlinePass.js +0 -580
  698. package/postprocessing/Pass.cjs.js +0 -1
  699. package/postprocessing/Pass.d.ts +0 -20
  700. package/postprocessing/Pass.js +0 -61
  701. package/postprocessing/RenderPass.cjs.js +0 -1
  702. package/postprocessing/RenderPass.d.ts +0 -14
  703. package/postprocessing/RenderPass.js +0 -71
  704. package/postprocessing/RenderPixelatedPass.cjs.js +0 -1
  705. package/postprocessing/RenderPixelatedPass.js +0 -213
  706. package/postprocessing/SAOPass.cjs.js +0 -1
  707. package/postprocessing/SAOPass.d.ts +0 -79
  708. package/postprocessing/SAOPass.js +0 -317
  709. package/postprocessing/SMAAPass.cjs.js +0 -1
  710. package/postprocessing/SMAAPass.d.ts +0 -21
  711. package/postprocessing/SMAAPass.js +0 -132
  712. package/postprocessing/SSAARenderPass.cjs.js +0 -1
  713. package/postprocessing/SSAARenderPass.d.ts +0 -17
  714. package/postprocessing/SSAARenderPass.js +0 -118
  715. package/postprocessing/SSAOPass.cjs.js +0 -1
  716. package/postprocessing/SSAOPass.d.ts +0 -71
  717. package/postprocessing/SSAOPass.js +0 -314
  718. package/postprocessing/SSRPass.cjs.js +0 -1
  719. package/postprocessing/SSRPass.d.ts +0 -124
  720. package/postprocessing/SSRPass.js +0 -508
  721. package/postprocessing/SavePass.cjs.js +0 -1
  722. package/postprocessing/SavePass.d.ts +0 -12
  723. package/postprocessing/SavePass.js +0 -42
  724. package/postprocessing/ShaderPass.cjs.js +0 -1
  725. package/postprocessing/ShaderPass.d.ts +0 -13
  726. package/postprocessing/ShaderPass.js +0 -55
  727. package/postprocessing/TAARenderPass.cjs.js +0 -1
  728. package/postprocessing/TAARenderPass.d.ts +0 -8
  729. package/postprocessing/TAARenderPass.js +0 -107
  730. package/postprocessing/TexturePass.cjs.js +0 -1
  731. package/postprocessing/TexturePass.d.ts +0 -12
  732. package/postprocessing/TexturePass.js +0 -40
  733. package/postprocessing/UnrealBloomPass.cjs.js +0 -1
  734. package/postprocessing/UnrealBloomPass.d.ts +0 -31
  735. package/postprocessing/UnrealBloomPass.js +0 -273
  736. package/postprocessing/WaterPass.cjs.js +0 -1
  737. package/postprocessing/WaterPass.d.ts +0 -12
  738. package/postprocessing/WaterPass.js +0 -102
  739. package/renderers/CSS2DRenderer.cjs.js +0 -1
  740. package/renderers/CSS2DRenderer.d.ts +0 -22
  741. package/renderers/CSS2DRenderer.js +0 -152
  742. package/renderers/CSS3DRenderer.cjs.js +0 -1
  743. package/renderers/CSS3DRenderer.d.ts +0 -26
  744. package/renderers/CSS3DRenderer.js +0 -166
  745. package/renderers/Projector.cjs.js +0 -1
  746. package/renderers/Projector.d.ts +0 -60
  747. package/renderers/Projector.js +0 -678
  748. package/renderers/SVGRenderer.cjs.js +0 -1
  749. package/renderers/SVGRenderer.d.ts +0 -25
  750. package/renderers/SVGRenderer.js +0 -416
  751. package/renderers/nodes/accessors/CameraNode.cjs.js +0 -1
  752. package/renderers/nodes/accessors/CameraNode.js +0 -73
  753. package/renderers/nodes/accessors/ModelNode.cjs.js +0 -1
  754. package/renderers/nodes/accessors/ModelNode.js +0 -69
  755. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
  756. package/renderers/nodes/accessors/ModelViewProjectionNode.js +0 -33
  757. package/renderers/nodes/accessors/NormalNode.cjs.js +0 -1
  758. package/renderers/nodes/accessors/NormalNode.js +0 -70
  759. package/renderers/nodes/accessors/PositionNode.cjs.js +0 -1
  760. package/renderers/nodes/accessors/PositionNode.js +0 -30
  761. package/renderers/nodes/accessors/UVNode.cjs.js +0 -1
  762. package/renderers/nodes/accessors/UVNode.js +0 -17
  763. package/renderers/nodes/core/AttributeNode.cjs.js +0 -1
  764. package/renderers/nodes/core/AttributeNode.js +0 -43
  765. package/renderers/nodes/core/InputNode.cjs.js +0 -1
  766. package/renderers/nodes/core/InputNode.js +0 -40
  767. package/renderers/nodes/core/Node.cjs.js +0 -1
  768. package/renderers/nodes/core/Node.js +0 -43
  769. package/renderers/nodes/core/NodeAttribute.cjs.js +0 -1
  770. package/renderers/nodes/core/NodeAttribute.js +0 -12
  771. package/renderers/nodes/core/NodeBuilder.cjs.js +0 -1
  772. package/renderers/nodes/core/NodeBuilder.js +0 -309
  773. package/renderers/nodes/core/NodeFrame.cjs.js +0 -1
  774. package/renderers/nodes/core/NodeFrame.js +0 -37
  775. package/renderers/nodes/core/NodeSlot.cjs.js +0 -1
  776. package/renderers/nodes/core/NodeSlot.js +0 -10
  777. package/renderers/nodes/core/NodeUniform.cjs.js +0 -1
  778. package/renderers/nodes/core/NodeUniform.js +0 -22
  779. package/renderers/nodes/core/NodeVary.cjs.js +0 -1
  780. package/renderers/nodes/core/NodeVary.js +0 -13
  781. package/renderers/nodes/core/VaryNode.cjs.js +0 -1
  782. package/renderers/nodes/core/VaryNode.js +0 -27
  783. package/renderers/nodes/core/constants.cjs.js +0 -1
  784. package/renderers/nodes/core/constants.js +0 -19
  785. package/renderers/nodes/inputs/ColorNode.cjs.js +0 -1
  786. package/renderers/nodes/inputs/ColorNode.js +0 -16
  787. package/renderers/nodes/inputs/FloatNode.cjs.js +0 -1
  788. package/renderers/nodes/inputs/FloatNode.js +0 -16
  789. package/renderers/nodes/inputs/Matrix3Node.cjs.js +0 -1
  790. package/renderers/nodes/inputs/Matrix3Node.js +0 -17
  791. package/renderers/nodes/inputs/Matrix4Node.cjs.js +0 -1
  792. package/renderers/nodes/inputs/Matrix4Node.js +0 -17
  793. package/renderers/nodes/inputs/TextureNode.cjs.js +0 -1
  794. package/renderers/nodes/inputs/TextureNode.js +0 -27
  795. package/renderers/nodes/inputs/Vector2Node.cjs.js +0 -1
  796. package/renderers/nodes/inputs/Vector2Node.js +0 -16
  797. package/renderers/nodes/inputs/Vector3Node.cjs.js +0 -1
  798. package/renderers/nodes/inputs/Vector3Node.js +0 -17
  799. package/renderers/nodes/inputs/Vector4Node.cjs.js +0 -1
  800. package/renderers/nodes/inputs/Vector4Node.js +0 -17
  801. package/renderers/nodes/math/MathNode.cjs.js +0 -1
  802. package/renderers/nodes/math/MathNode.js +0 -64
  803. package/renderers/nodes/math/OperatorNode.cjs.js +0 -1
  804. package/renderers/nodes/math/OperatorNode.js +0 -57
  805. package/renderers/nodes/utils/SwitchNode.cjs.js +0 -1
  806. package/renderers/nodes/utils/SwitchNode.js +0 -24
  807. package/renderers/nodes/utils/TimerNode.cjs.js +0 -1
  808. package/renderers/nodes/utils/TimerNode.js +0 -18
  809. package/renderers/webgpu/WebGPU.cjs.js +0 -1
  810. package/renderers/webgpu/WebGPU.js +0 -25
  811. package/renderers/webgpu/WebGPUAttributes.cjs.js +0 -1
  812. package/renderers/webgpu/WebGPUAttributes.js +0 -75
  813. package/renderers/webgpu/WebGPUBackground.cjs.js +0 -1
  814. package/renderers/webgpu/WebGPUBackground.js +0 -77
  815. package/renderers/webgpu/WebGPUBinding.cjs.js +0 -1
  816. package/renderers/webgpu/WebGPUBinding.js +0 -16
  817. package/renderers/webgpu/WebGPUBindings.cjs.js +0 -1
  818. package/renderers/webgpu/WebGPUBindings.js +0 -190
  819. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +0 -1
  820. package/renderers/webgpu/WebGPUComputePipelines.js +0 -54
  821. package/renderers/webgpu/WebGPUGeometries.cjs.js +0 -1
  822. package/renderers/webgpu/WebGPUGeometries.js +0 -50
  823. package/renderers/webgpu/WebGPUInfo.cjs.js +0 -1
  824. package/renderers/webgpu/WebGPUInfo.js +0 -50
  825. package/renderers/webgpu/WebGPUObjects.cjs.js +0 -1
  826. package/renderers/webgpu/WebGPUObjects.js +0 -29
  827. package/renderers/webgpu/WebGPUProperties.cjs.js +0 -1
  828. package/renderers/webgpu/WebGPUProperties.js +0 -27
  829. package/renderers/webgpu/WebGPURenderLists.cjs.js +0 -1
  830. package/renderers/webgpu/WebGPURenderLists.js +0 -134
  831. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +0 -1
  832. package/renderers/webgpu/WebGPURenderPipelines.js +0 -671
  833. package/renderers/webgpu/WebGPURenderer.cjs.js +0 -1
  834. package/renderers/webgpu/WebGPURenderer.js +0 -713
  835. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +0 -1
  836. package/renderers/webgpu/WebGPUSampledTexture.js +0 -53
  837. package/renderers/webgpu/WebGPUSampler.cjs.js +0 -1
  838. package/renderers/webgpu/WebGPUSampler.js +0 -19
  839. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +0 -1
  840. package/renderers/webgpu/WebGPUStorageBuffer.js +0 -19
  841. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +0 -1
  842. package/renderers/webgpu/WebGPUTextureRenderer.js +0 -28
  843. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +0 -1
  844. package/renderers/webgpu/WebGPUTextureUtils.js +0 -108
  845. package/renderers/webgpu/WebGPUTextures.cjs.js +0 -1
  846. package/renderers/webgpu/WebGPUTextures.js +0 -630
  847. package/renderers/webgpu/WebGPUUniform.cjs.js +0 -1
  848. package/renderers/webgpu/WebGPUUniform.js +0 -107
  849. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +0 -1
  850. package/renderers/webgpu/WebGPUUniformsGroup.js +0 -215
  851. package/renderers/webgpu/constants.cjs.js +0 -1
  852. package/renderers/webgpu/constants.js +0 -221
  853. package/renderers/webgpu/nodes/ShaderLib.cjs.js +0 -1
  854. package/renderers/webgpu/nodes/ShaderLib.js +0 -41
  855. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +0 -1
  856. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +0 -235
  857. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +0 -1
  858. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +0 -87
  859. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +0 -1
  860. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -15
  861. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +0 -1
  862. package/renderers/webgpu/nodes/WebGPUNodes.js +0 -77
  863. package/shaders/ACESFilmicToneMappingShader.cjs.js +0 -1
  864. package/shaders/ACESFilmicToneMappingShader.d.ts +0 -9
  865. package/shaders/ACESFilmicToneMappingShader.js +0 -28
  866. package/shaders/AfterimageShader.cjs.js +0 -1
  867. package/shaders/AfterimageShader.d.ts +0 -10
  868. package/shaders/AfterimageShader.js +0 -22
  869. package/shaders/BasicShader.cjs.js +0 -1
  870. package/shaders/BasicShader.d.ts +0 -5
  871. package/shaders/BasicShader.js +0 -10
  872. package/shaders/BleachBypassShader.cjs.js +0 -1
  873. package/shaders/BleachBypassShader.d.ts +0 -9
  874. package/shaders/BleachBypassShader.js +0 -19
  875. package/shaders/BlendShader.cjs.js +0 -1
  876. package/shaders/BlendShader.d.ts +0 -18
  877. package/shaders/BlendShader.js +0 -23
  878. package/shaders/BokehShader.cjs.js +0 -1
  879. package/shaders/BokehShader.d.ts +0 -19
  880. package/shaders/BokehShader.js +0 -44
  881. package/shaders/BokehShader2.cjs.js +0 -1
  882. package/shaders/BokehShader2.d.ts +0 -43
  883. package/shaders/BokehShader2.js +0 -98
  884. package/shaders/BrightnessContrastShader.cjs.js +0 -1
  885. package/shaders/BrightnessContrastShader.d.ts +0 -15
  886. package/shaders/BrightnessContrastShader.js +0 -23
  887. package/shaders/ColorCorrectionShader.cjs.js +0 -1
  888. package/shaders/ColorCorrectionShader.d.ts +0 -19
  889. package/shaders/ColorCorrectionShader.js +0 -26
  890. package/shaders/ColorifyShader.cjs.js +0 -1
  891. package/shaders/ColorifyShader.d.ts +0 -13
  892. package/shaders/ColorifyShader.js +0 -20
  893. package/shaders/ConvolutionShader.cjs.js +0 -1
  894. package/shaders/ConvolutionShader.d.ts +0 -16
  895. package/shaders/ConvolutionShader.js +0 -51
  896. package/shaders/CopyShader.cjs.js +0 -1
  897. package/shaders/CopyShader.d.ts +0 -9
  898. package/shaders/CopyShader.js +0 -17
  899. package/shaders/DOFMipMapShader.cjs.js +0 -1
  900. package/shaders/DOFMipMapShader.d.ts +0 -18
  901. package/shaders/DOFMipMapShader.js +0 -25
  902. package/shaders/DepthLimitedBlurShader.cjs.js +0 -1
  903. package/shaders/DepthLimitedBlurShader.d.ts +0 -28
  904. package/shaders/DepthLimitedBlurShader.js +0 -69
  905. package/shaders/DigitalGlitch.cjs.js +0 -1
  906. package/shaders/DigitalGlitch.d.ts +0 -39
  907. package/shaders/DigitalGlitch.js +0 -106
  908. package/shaders/DotScreenShader.cjs.js +0 -1
  909. package/shaders/DotScreenShader.d.ts +0 -22
  910. package/shaders/DotScreenShader.js +0 -31
  911. package/shaders/FXAAShader.cjs.js +0 -1
  912. package/shaders/FXAAShader.d.ts +0 -13
  913. package/shaders/FXAAShader.js +0 -23
  914. package/shaders/FilmShader.cjs.js +0 -1
  915. package/shaders/FilmShader.d.ts +0 -24
  916. package/shaders/FilmShader.js +0 -56
  917. package/shaders/FocusShader.cjs.js +0 -1
  918. package/shaders/FocusShader.d.ts +0 -21
  919. package/shaders/FocusShader.js +0 -28
  920. package/shaders/FreiChenShader.cjs.js +0 -1
  921. package/shaders/FreiChenShader.d.ts +0 -13
  922. package/shaders/FreiChenShader.js +0 -28
  923. package/shaders/FresnelShader.cjs.js +0 -1
  924. package/shaders/FresnelShader.d.ts +0 -21
  925. package/shaders/FresnelShader.js +0 -26
  926. package/shaders/GammaCorrectionShader.cjs.js +0 -1
  927. package/shaders/GammaCorrectionShader.d.ts +0 -8
  928. package/shaders/GammaCorrectionShader.js +0 -15
  929. package/shaders/GodRaysShader.cjs.js +0 -1
  930. package/shaders/GodRaysShader.d.ts +0 -58
  931. package/shaders/GodRaysShader.js +0 -137
  932. package/shaders/HalftoneShader.cjs.js +0 -1
  933. package/shaders/HalftoneShader.d.ts +0 -45
  934. package/shaders/HalftoneShader.js +0 -69
  935. package/shaders/HorizontalBlurShader.cjs.js +0 -1
  936. package/shaders/HorizontalBlurShader.d.ts +0 -9
  937. package/shaders/HorizontalBlurShader.js +0 -59
  938. package/shaders/HorizontalTiltShiftShader.cjs.js +0 -1
  939. package/shaders/HorizontalTiltShiftShader.d.ts +0 -15
  940. package/shaders/HorizontalTiltShiftShader.js +0 -25
  941. package/shaders/HueSaturationShader.cjs.js +0 -1
  942. package/shaders/HueSaturationShader.d.ts +0 -15
  943. package/shaders/HueSaturationShader.js +0 -25
  944. package/shaders/KaleidoShader.cjs.js +0 -1
  945. package/shaders/KaleidoShader.d.ts +0 -15
  946. package/shaders/KaleidoShader.js +0 -26
  947. package/shaders/LuminosityHighPassShader.cjs.js +0 -1
  948. package/shaders/LuminosityHighPassShader.d.ts +0 -23
  949. package/shaders/LuminosityHighPassShader.js +0 -31
  950. package/shaders/LuminosityShader.cjs.js +0 -1
  951. package/shaders/LuminosityShader.d.ts +0 -9
  952. package/shaders/LuminosityShader.js +0 -15
  953. package/shaders/MirrorShader.cjs.js +0 -1
  954. package/shaders/MirrorShader.d.ts +0 -12
  955. package/shaders/MirrorShader.js +0 -20
  956. package/shaders/NormalMapShader.cjs.js +0 -1
  957. package/shaders/NormalMapShader.d.ts +0 -19
  958. package/shaders/NormalMapShader.js +0 -27
  959. package/shaders/ParallaxShader.cjs.js +0 -1
  960. package/shaders/ParallaxShader.d.ts +0 -28
  961. package/shaders/ParallaxShader.js +0 -54
  962. package/shaders/PixelShader.cjs.js +0 -1
  963. package/shaders/PixelShader.d.ts +0 -15
  964. package/shaders/PixelShader.js +0 -20
  965. package/shaders/RGBShiftShader.cjs.js +0 -1
  966. package/shaders/RGBShiftShader.d.ts +0 -15
  967. package/shaders/RGBShiftShader.js +0 -26
  968. package/shaders/SAOShader.cjs.js +0 -1
  969. package/shaders/SAOShader.d.ts +0 -25
  970. package/shaders/SAOShader.js +0 -60
  971. package/shaders/SMAAShader.cjs.js +0 -1
  972. package/shaders/SMAAShader.d.ts +0 -55
  973. package/shaders/SMAAShader.js +0 -151
  974. package/shaders/SSAOShader.cjs.js +0 -1
  975. package/shaders/SSAOShader.d.ts +0 -80
  976. package/shaders/SSAOShader.js +0 -100
  977. package/shaders/SSRShader.cjs.js +0 -1
  978. package/shaders/SSRShader.d.ts +0 -90
  979. package/shaders/SSRShader.js +0 -379
  980. package/shaders/SepiaShader.cjs.js +0 -1
  981. package/shaders/SepiaShader.d.ts +0 -12
  982. package/shaders/SepiaShader.js +0 -19
  983. package/shaders/SobelOperatorShader.cjs.js +0 -1
  984. package/shaders/SobelOperatorShader.d.ts +0 -13
  985. package/shaders/SobelOperatorShader.js +0 -33
  986. package/shaders/SubsurfaceScatteringShader.cjs.js +0 -1
  987. package/shaders/SubsurfaceScatteringShader.d.ts +0 -5
  988. package/shaders/SubsurfaceScatteringShader.js +0 -45
  989. package/shaders/TechnicolorShader.cjs.js +0 -1
  990. package/shaders/TechnicolorShader.d.ts +0 -9
  991. package/shaders/TechnicolorShader.js +0 -17
  992. package/shaders/ToneMapShader.cjs.js +0 -1
  993. package/shaders/ToneMapShader.d.ts +0 -24
  994. package/shaders/ToneMapShader.js +0 -32
  995. package/shaders/ToonShader.cjs.js +0 -1
  996. package/shaders/ToonShader.d.ts +0 -100
  997. package/shaders/ToonShader.js +0 -112
  998. package/shaders/TriangleBlurShader.cjs.js +0 -1
  999. package/shaders/TriangleBlurShader.d.ts +0 -13
  1000. package/shaders/TriangleBlurShader.js +0 -27
  1001. package/shaders/UnpackDepthRGBAShader.cjs.js +0 -1
  1002. package/shaders/UnpackDepthRGBAShader.d.ts +0 -12
  1003. package/shaders/UnpackDepthRGBAShader.js +0 -18
  1004. package/shaders/VerticalBlurShader.cjs.js +0 -1
  1005. package/shaders/VerticalBlurShader.d.ts +0 -9
  1006. package/shaders/VerticalBlurShader.js +0 -60
  1007. package/shaders/VerticalTiltShiftShader.cjs.js +0 -1
  1008. package/shaders/VerticalTiltShiftShader.d.ts +0 -15
  1009. package/shaders/VerticalTiltShiftShader.js +0 -25
  1010. package/shaders/VignetteShader.cjs.js +0 -1
  1011. package/shaders/VignetteShader.d.ts +0 -15
  1012. package/shaders/VignetteShader.js +0 -32
  1013. package/shaders/VolumeShader.cjs.js +0 -1
  1014. package/shaders/VolumeShader.d.ts +0 -25
  1015. package/shaders/VolumeShader.js +0 -81
  1016. package/shaders/WaterRefractionShader.cjs.js +0 -1
  1017. package/shaders/WaterRefractionShader.d.ts +0 -21
  1018. package/shaders/WaterRefractionShader.js +0 -25
  1019. package/shaders/types.cjs.js +0 -1
  1020. package/shaders/types.d.ts +0 -14
  1021. package/shaders/types.js +0 -1
  1022. package/textures/FlakesTexture.cjs.js +0 -1
  1023. package/textures/FlakesTexture.d.ts +0 -4
  1024. package/textures/FlakesTexture.js +0 -32
  1025. package/types/helpers.cjs.js +0 -1
  1026. package/types/helpers.d.ts +0 -1
  1027. package/types/helpers.js +0 -3
  1028. package/types/shared.cjs.js +0 -1
  1029. package/types/shared.d.ts +0 -2
  1030. package/types/shared.js +0 -1
  1031. package/types/utils.cjs.js +0 -1
  1032. package/types/utils.d.ts +0 -3
  1033. package/types/utils.js +0 -1
  1034. package/utils/BufferGeometryUtils.cjs.js +0 -1
  1035. package/utils/BufferGeometryUtils.d.ts +0 -15
  1036. package/utils/BufferGeometryUtils.js +0 -728
  1037. package/utils/GeometryCompressionUtils.cjs.js +0 -1
  1038. package/utils/GeometryCompressionUtils.d.ts +0 -7
  1039. package/utils/GeometryCompressionUtils.js +0 -545
  1040. package/utils/GeometryUtils.cjs.js +0 -1
  1041. package/utils/GeometryUtils.d.ts +0 -6
  1042. package/utils/GeometryUtils.js +0 -161
  1043. package/utils/LDrawUtils.cjs.js +0 -1
  1044. package/utils/LDrawUtils.d.ts +0 -5
  1045. package/utils/LDrawUtils.js +0 -144
  1046. package/utils/RoughnessMipmapper.cjs.js +0 -1
  1047. package/utils/RoughnessMipmapper.js +0 -257
  1048. package/utils/SceneUtils.cjs.js +0 -1
  1049. package/utils/SceneUtils.d.ts +0 -9
  1050. package/utils/SceneUtils.js +0 -41
  1051. package/utils/ShadowMapViewer.cjs.js +0 -1
  1052. package/utils/ShadowMapViewer.d.ts +0 -24
  1053. package/utils/ShadowMapViewer.js +0 -160
  1054. package/utils/SkeletonUtils.cjs.js +0 -1
  1055. package/utils/SkeletonUtils.d.ts +0 -30
  1056. package/utils/SkeletonUtils.js +0 -383
  1057. package/utils/UVsDebug.cjs.js +0 -1
  1058. package/utils/UVsDebug.d.ts +0 -3
  1059. package/utils/UVsDebug.js +0 -115
  1060. package/utils/WorkerPool.cjs.js +0 -1
  1061. package/utils/WorkerPool.js +0 -82
  1062. package/webxr/ARButton.cjs.js +0 -1
  1063. package/webxr/ARButton.d.ts +0 -5
  1064. package/webxr/ARButton.js +0 -145
  1065. package/webxr/OculusHandModel.cjs.js +0 -1
  1066. package/webxr/OculusHandModel.d.ts +0 -22
  1067. package/webxr/OculusHandModel.js +0 -90
  1068. package/webxr/OculusHandPointerModel.cjs.js +0 -1
  1069. package/webxr/OculusHandPointerModel.d.ts +0 -63
  1070. package/webxr/OculusHandPointerModel.js +0 -248
  1071. package/webxr/Text2D.cjs.js +0 -1
  1072. package/webxr/Text2D.d.ts +0 -3
  1073. package/webxr/Text2D.js +0 -32
  1074. package/webxr/VRButton.cjs.js +0 -1
  1075. package/webxr/VRButton.d.ts +0 -7
  1076. package/webxr/VRButton.js +0 -136
  1077. package/webxr/XRControllerModelFactory.cjs.js +0 -1
  1078. package/webxr/XRControllerModelFactory.d.ts +0 -19
  1079. package/webxr/XRControllerModelFactory.js +0 -237
  1080. package/webxr/XREstimatedLight.cjs.js +0 -1
  1081. package/webxr/XREstimatedLight.d.ts +0 -32
  1082. package/webxr/XREstimatedLight.js +0 -153
  1083. package/webxr/XRHandMeshModel.cjs.js +0 -1
  1084. package/webxr/XRHandMeshModel.d.ts +0 -9
  1085. package/webxr/XRHandMeshModel.js +0 -62
  1086. package/webxr/XRHandModelFactory.cjs.js +0 -1
  1087. package/webxr/XRHandModelFactory.d.ts +0 -25
  1088. package/webxr/XRHandModelFactory.js +0 -64
  1089. package/webxr/XRHandPrimitiveModel.cjs.js +0 -1
  1090. package/webxr/XRHandPrimitiveModel.d.ts +0 -24
  1091. package/webxr/XRHandPrimitiveModel.js +0 -54
@@ -1,3136 +0,0 @@
1
- import { Loader, LoaderUtils, FileLoader, Color, SpotLight, PointLight, DirectionalLight, MeshBasicMaterial, MeshPhysicalMaterial, Vector2, Matrix4, Vector3, Quaternion, InstancedMesh, Object3D, REVISION, TextureLoader, ImageBitmapLoader, BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, LinearFilter, LinearMipmapLinearFilter, RepeatWrapping, PointsMaterial, Material, LineBasicMaterial, MeshStandardMaterial, DoubleSide, PropertyBinding, BufferGeometry, SkinnedMesh, Mesh, TriangleStripDrawMode, TriangleFanDrawMode, LineSegments, Line, LineLoop, Points, Group, PerspectiveCamera, MathUtils, OrthographicCamera, Skeleton, InterpolateLinear, AnimationClip, Bone, NearestFilter, NearestMipmapNearestFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, ClampToEdgeWrapping, MirroredRepeatWrapping, InterpolateDiscrete, FrontSide, Texture, VectorKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, Box3, Sphere, Interpolant } from 'three';
2
- import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
3
-
4
- class GLTFLoader extends Loader {
5
- constructor(manager) {
6
- super(manager);
7
- this.dracoLoader = null;
8
- this.ktx2Loader = null;
9
- this.meshoptDecoder = null;
10
- this.pluginCallbacks = [];
11
- this.register(function (parser) {
12
- return new GLTFMaterialsClearcoatExtension(parser);
13
- });
14
- this.register(function (parser) {
15
- return new GLTFTextureBasisUExtension(parser);
16
- });
17
- this.register(function (parser) {
18
- return new GLTFTextureWebPExtension(parser);
19
- });
20
- this.register(function (parser) {
21
- return new GLTFTextureAVIFExtension(parser);
22
- });
23
- this.register(function (parser) {
24
- return new GLTFMaterialsSheenExtension(parser);
25
- });
26
- this.register(function (parser) {
27
- return new GLTFMaterialsTransmissionExtension(parser);
28
- });
29
- this.register(function (parser) {
30
- return new GLTFMaterialsVolumeExtension(parser);
31
- });
32
- this.register(function (parser) {
33
- return new GLTFMaterialsIorExtension(parser);
34
- });
35
- this.register(function (parser) {
36
- return new GLTFMaterialsEmissiveStrengthExtension(parser);
37
- });
38
- this.register(function (parser) {
39
- return new GLTFMaterialsSpecularExtension(parser);
40
- });
41
- this.register(function (parser) {
42
- return new GLTFMaterialsIridescenceExtension(parser);
43
- });
44
- this.register(function (parser) {
45
- return new GLTFLightsExtension(parser);
46
- });
47
- this.register(function (parser) {
48
- return new GLTFMeshoptCompression(parser);
49
- });
50
- this.register(function (parser) {
51
- return new GLTFMeshGpuInstancing(parser);
52
- });
53
- }
54
-
55
- load(url, onLoad, onProgress, onError) {
56
- const scope = this;
57
- let resourcePath;
58
-
59
- if (this.resourcePath !== '') {
60
- resourcePath = this.resourcePath;
61
- } else if (this.path !== '') {
62
- resourcePath = this.path;
63
- } else {
64
- resourcePath = LoaderUtils.extractUrlBase(url);
65
- } // Tells the LoadingManager to track an extra item, which resolves after
66
- // the model is fully loaded. This means the count of items loaded will
67
- // be incorrect, but ensures manager.onLoad() does not fire early.
68
-
69
-
70
- this.manager.itemStart(url);
71
-
72
- const _onError = function (e) {
73
- if (onError) {
74
- onError(e);
75
- } else {
76
- console.error(e);
77
- }
78
-
79
- scope.manager.itemError(url);
80
- scope.manager.itemEnd(url);
81
- };
82
-
83
- const loader = new FileLoader(this.manager);
84
- loader.setPath(this.path);
85
- loader.setResponseType('arraybuffer');
86
- loader.setRequestHeader(this.requestHeader);
87
- loader.setWithCredentials(this.withCredentials);
88
- loader.load(url, function (data) {
89
- try {
90
- scope.parse(data, resourcePath, function (gltf) {
91
- onLoad(gltf);
92
- scope.manager.itemEnd(url);
93
- }, _onError);
94
- } catch (e) {
95
- _onError(e);
96
- }
97
- }, onProgress, _onError);
98
- }
99
-
100
- setDRACOLoader(dracoLoader) {
101
- this.dracoLoader = dracoLoader;
102
- return this;
103
- }
104
-
105
- setDDSLoader() {
106
- throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".');
107
- }
108
-
109
- setKTX2Loader(ktx2Loader) {
110
- this.ktx2Loader = ktx2Loader;
111
- return this;
112
- }
113
-
114
- setMeshoptDecoder(meshoptDecoder) {
115
- this.meshoptDecoder = meshoptDecoder;
116
- return this;
117
- }
118
-
119
- register(callback) {
120
- if (this.pluginCallbacks.indexOf(callback) === -1) {
121
- this.pluginCallbacks.push(callback);
122
- }
123
-
124
- return this;
125
- }
126
-
127
- unregister(callback) {
128
- if (this.pluginCallbacks.indexOf(callback) !== -1) {
129
- this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);
130
- }
131
-
132
- return this;
133
- }
134
-
135
- parse(data, path, onLoad, onError) {
136
- let json;
137
- const extensions = {};
138
- const plugins = {};
139
-
140
- if (typeof data === 'string') {
141
- json = JSON.parse(data);
142
- } else if (data instanceof ArrayBuffer) {
143
- const magic = LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4)));
144
-
145
- if (magic === BINARY_EXTENSION_HEADER_MAGIC) {
146
- try {
147
- extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data);
148
- } catch (error) {
149
- if (onError) onError(error);
150
- return;
151
- }
152
-
153
- json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content);
154
- } else {
155
- json = JSON.parse(LoaderUtils.decodeText(new Uint8Array(data)));
156
- }
157
- } else {
158
- json = data;
159
- }
160
-
161
- if (json.asset === undefined || json.asset.version[0] < 2) {
162
- if (onError) onError(new Error('THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.'));
163
- return;
164
- }
165
-
166
- const parser = new GLTFParser(json, {
167
- path: path || this.resourcePath || '',
168
- crossOrigin: this.crossOrigin,
169
- requestHeader: this.requestHeader,
170
- manager: this.manager,
171
- ktx2Loader: this.ktx2Loader,
172
- meshoptDecoder: this.meshoptDecoder
173
- });
174
- parser.fileLoader.setRequestHeader(this.requestHeader);
175
-
176
- for (let i = 0; i < this.pluginCallbacks.length; i++) {
177
- const plugin = this.pluginCallbacks[i](parser);
178
- plugins[plugin.name] = plugin; // Workaround to avoid determining as unknown extension
179
- // in addUnknownExtensionsToUserData().
180
- // Remove this workaround if we move all the existing
181
- // extension handlers to plugin system
182
-
183
- extensions[plugin.name] = true;
184
- }
185
-
186
- if (json.extensionsUsed) {
187
- for (let i = 0; i < json.extensionsUsed.length; ++i) {
188
- const extensionName = json.extensionsUsed[i];
189
- const extensionsRequired = json.extensionsRequired || [];
190
-
191
- switch (extensionName) {
192
- case EXTENSIONS.KHR_MATERIALS_UNLIT:
193
- extensions[extensionName] = new GLTFMaterialsUnlitExtension();
194
- break;
195
-
196
- case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:
197
- extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);
198
- break;
199
-
200
- case EXTENSIONS.KHR_TEXTURE_TRANSFORM:
201
- extensions[extensionName] = new GLTFTextureTransformExtension();
202
- break;
203
-
204
- case EXTENSIONS.KHR_MESH_QUANTIZATION:
205
- extensions[extensionName] = new GLTFMeshQuantizationExtension();
206
- break;
207
-
208
- default:
209
- if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === undefined) {
210
- console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".');
211
- }
212
-
213
- }
214
- }
215
- }
216
-
217
- parser.setExtensions(extensions);
218
- parser.setPlugins(plugins);
219
- parser.parse(onLoad, onError);
220
- }
221
-
222
- parseAsync(data, path) {
223
- const scope = this;
224
- return new Promise(function (resolve, reject) {
225
- scope.parse(data, path, resolve, reject);
226
- });
227
- }
228
-
229
- }
230
- /* GLTFREGISTRY */
231
-
232
-
233
- function GLTFRegistry() {
234
- let objects = {};
235
- return {
236
- get: function (key) {
237
- return objects[key];
238
- },
239
- add: function (key, object) {
240
- objects[key] = object;
241
- },
242
- remove: function (key) {
243
- delete objects[key];
244
- },
245
- removeAll: function () {
246
- objects = {};
247
- }
248
- };
249
- }
250
- /*********************************/
251
-
252
- /********** EXTENSIONS ***********/
253
-
254
- /*********************************/
255
-
256
-
257
- const EXTENSIONS = {
258
- KHR_BINARY_GLTF: 'KHR_binary_glTF',
259
- KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
260
- KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',
261
- KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',
262
- KHR_MATERIALS_IOR: 'KHR_materials_ior',
263
- KHR_MATERIALS_SHEEN: 'KHR_materials_sheen',
264
- KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
265
- KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
266
- KHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',
267
- KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
268
- KHR_MATERIALS_VOLUME: 'KHR_materials_volume',
269
- KHR_TEXTURE_BASISU: 'KHR_texture_basisu',
270
- KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',
271
- KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',
272
- KHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',
273
- EXT_TEXTURE_WEBP: 'EXT_texture_webp',
274
- EXT_TEXTURE_AVIF: 'EXT_texture_avif',
275
- EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
276
- EXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'
277
- };
278
- /**
279
- * Punctual Lights Extension
280
- *
281
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual
282
- */
283
-
284
- class GLTFLightsExtension {
285
- constructor(parser) {
286
- this.parser = parser;
287
- this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; // Object3D instance caches
288
-
289
- this.cache = {
290
- refs: {},
291
- uses: {}
292
- };
293
- }
294
-
295
- _markDefs() {
296
- const parser = this.parser;
297
- const nodeDefs = this.parser.json.nodes || [];
298
-
299
- for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
300
- const nodeDef = nodeDefs[nodeIndex];
301
-
302
- if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== undefined) {
303
- parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light);
304
- }
305
- }
306
- }
307
-
308
- _loadLight(lightIndex) {
309
- const parser = this.parser;
310
- const cacheKey = 'light:' + lightIndex;
311
- let dependency = parser.cache.get(cacheKey);
312
- if (dependency) return dependency;
313
- const json = parser.json;
314
- const extensions = json.extensions && json.extensions[this.name] || {};
315
- const lightDefs = extensions.lights || [];
316
- const lightDef = lightDefs[lightIndex];
317
- let lightNode;
318
- const color = new Color(0xffffff);
319
- if (lightDef.color !== undefined) color.fromArray(lightDef.color);
320
- const range = lightDef.range !== undefined ? lightDef.range : 0;
321
-
322
- switch (lightDef.type) {
323
- case 'directional':
324
- lightNode = new DirectionalLight(color);
325
- lightNode.target.position.set(0, 0, -1);
326
- lightNode.add(lightNode.target);
327
- break;
328
-
329
- case 'point':
330
- lightNode = new PointLight(color);
331
- lightNode.distance = range;
332
- break;
333
-
334
- case 'spot':
335
- lightNode = new SpotLight(color);
336
- lightNode.distance = range; // Handle spotlight properties.
337
-
338
- lightDef.spot = lightDef.spot || {};
339
- lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;
340
- lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;
341
- lightNode.angle = lightDef.spot.outerConeAngle;
342
- lightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;
343
- lightNode.target.position.set(0, 0, -1);
344
- lightNode.add(lightNode.target);
345
- break;
346
-
347
- default:
348
- throw new Error('THREE.GLTFLoader: Unexpected light type: ' + lightDef.type);
349
- } // Some lights (e.g. spot) default to a position other than the origin. Reset the position
350
- // here, because node-level parsing will only override position if explicitly specified.
351
-
352
-
353
- lightNode.position.set(0, 0, 0);
354
- lightNode.decay = 2;
355
- assignExtrasToUserData(lightNode, lightDef);
356
- if (lightDef.intensity !== undefined) lightNode.intensity = lightDef.intensity;
357
- lightNode.name = parser.createUniqueName(lightDef.name || 'light_' + lightIndex);
358
- dependency = Promise.resolve(lightNode);
359
- parser.cache.add(cacheKey, dependency);
360
- return dependency;
361
- }
362
-
363
- getDependency(type, index) {
364
- if (type !== 'light') return;
365
- return this._loadLight(index);
366
- }
367
-
368
- createNodeAttachment(nodeIndex) {
369
- const self = this;
370
- const parser = this.parser;
371
- const json = parser.json;
372
- const nodeDef = json.nodes[nodeIndex];
373
- const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {};
374
- const lightIndex = lightDef.light;
375
- if (lightIndex === undefined) return null;
376
- return this._loadLight(lightIndex).then(function (light) {
377
- return parser._getNodeRef(self.cache, lightIndex, light);
378
- });
379
- }
380
-
381
- }
382
- /**
383
- * Unlit Materials Extension
384
- *
385
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit
386
- */
387
-
388
-
389
- class GLTFMaterialsUnlitExtension {
390
- constructor() {
391
- this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;
392
- }
393
-
394
- getMaterialType() {
395
- return MeshBasicMaterial;
396
- }
397
-
398
- extendParams(materialParams, materialDef, parser) {
399
- const pending = [];
400
- materialParams.color = new Color(1.0, 1.0, 1.0);
401
- materialParams.opacity = 1.0;
402
- const metallicRoughness = materialDef.pbrMetallicRoughness;
403
-
404
- if (metallicRoughness) {
405
- if (Array.isArray(metallicRoughness.baseColorFactor)) {
406
- const array = metallicRoughness.baseColorFactor;
407
- materialParams.color.fromArray(array);
408
- materialParams.opacity = array[3];
409
- }
410
-
411
- if (metallicRoughness.baseColorTexture !== undefined) {
412
- pending.push(parser.assignTexture(materialParams, 'map', metallicRoughness.baseColorTexture, 3001)); // sRGBEncoding
413
- }
414
- }
415
-
416
- return Promise.all(pending);
417
- }
418
-
419
- }
420
- /**
421
- * Materials Emissive Strength Extension
422
- *
423
- * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md
424
- */
425
-
426
-
427
- class GLTFMaterialsEmissiveStrengthExtension {
428
- constructor(parser) {
429
- this.parser = parser;
430
- this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;
431
- }
432
-
433
- extendMaterialParams(materialIndex, materialParams) {
434
- const parser = this.parser;
435
- const materialDef = parser.json.materials[materialIndex];
436
-
437
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
438
- return Promise.resolve();
439
- }
440
-
441
- const emissiveStrength = materialDef.extensions[this.name].emissiveStrength;
442
-
443
- if (emissiveStrength !== undefined) {
444
- materialParams.emissiveIntensity = emissiveStrength;
445
- }
446
-
447
- return Promise.resolve();
448
- }
449
-
450
- }
451
- /**
452
- * Clearcoat Materials Extension
453
- *
454
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
455
- */
456
-
457
-
458
- class GLTFMaterialsClearcoatExtension {
459
- constructor(parser) {
460
- this.parser = parser;
461
- this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;
462
- }
463
-
464
- getMaterialType(materialIndex) {
465
- const parser = this.parser;
466
- const materialDef = parser.json.materials[materialIndex];
467
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
468
- return MeshPhysicalMaterial;
469
- }
470
-
471
- extendMaterialParams(materialIndex, materialParams) {
472
- const parser = this.parser;
473
- const materialDef = parser.json.materials[materialIndex];
474
-
475
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
476
- return Promise.resolve();
477
- }
478
-
479
- const pending = [];
480
- const extension = materialDef.extensions[this.name];
481
-
482
- if (extension.clearcoatFactor !== undefined) {
483
- materialParams.clearcoat = extension.clearcoatFactor;
484
- }
485
-
486
- if (extension.clearcoatTexture !== undefined) {
487
- pending.push(parser.assignTexture(materialParams, 'clearcoatMap', extension.clearcoatTexture));
488
- }
489
-
490
- if (extension.clearcoatRoughnessFactor !== undefined) {
491
- materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;
492
- }
493
-
494
- if (extension.clearcoatRoughnessTexture !== undefined) {
495
- pending.push(parser.assignTexture(materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture));
496
- }
497
-
498
- if (extension.clearcoatNormalTexture !== undefined) {
499
- pending.push(parser.assignTexture(materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture));
500
-
501
- if (extension.clearcoatNormalTexture.scale !== undefined) {
502
- const scale = extension.clearcoatNormalTexture.scale;
503
- materialParams.clearcoatNormalScale = new Vector2(scale, scale);
504
- }
505
- }
506
-
507
- return Promise.all(pending);
508
- }
509
-
510
- }
511
- /**
512
- * Iridescence Materials Extension
513
- *
514
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence
515
- */
516
-
517
-
518
- class GLTFMaterialsIridescenceExtension {
519
- constructor(parser) {
520
- this.parser = parser;
521
- this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;
522
- }
523
-
524
- getMaterialType(materialIndex) {
525
- const parser = this.parser;
526
- const materialDef = parser.json.materials[materialIndex];
527
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
528
- return MeshPhysicalMaterial;
529
- }
530
-
531
- extendMaterialParams(materialIndex, materialParams) {
532
- const parser = this.parser;
533
- const materialDef = parser.json.materials[materialIndex];
534
-
535
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
536
- return Promise.resolve();
537
- }
538
-
539
- const pending = [];
540
- const extension = materialDef.extensions[this.name];
541
-
542
- if (extension.iridescenceFactor !== undefined) {
543
- materialParams.iridescence = extension.iridescenceFactor;
544
- }
545
-
546
- if (extension.iridescenceTexture !== undefined) {
547
- pending.push(parser.assignTexture(materialParams, 'iridescenceMap', extension.iridescenceTexture));
548
- }
549
-
550
- if (extension.iridescenceIor !== undefined) {
551
- materialParams.iridescenceIOR = extension.iridescenceIor;
552
- }
553
-
554
- if (materialParams.iridescenceThicknessRange === undefined) {
555
- materialParams.iridescenceThicknessRange = [100, 400];
556
- }
557
-
558
- if (extension.iridescenceThicknessMinimum !== undefined) {
559
- materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum;
560
- }
561
-
562
- if (extension.iridescenceThicknessMaximum !== undefined) {
563
- materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum;
564
- }
565
-
566
- if (extension.iridescenceThicknessTexture !== undefined) {
567
- pending.push(parser.assignTexture(materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture));
568
- }
569
-
570
- return Promise.all(pending);
571
- }
572
-
573
- }
574
- /**
575
- * Sheen Materials Extension
576
- *
577
- * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
578
- */
579
-
580
-
581
- class GLTFMaterialsSheenExtension {
582
- constructor(parser) {
583
- this.parser = parser;
584
- this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;
585
- }
586
-
587
- getMaterialType(materialIndex) {
588
- const parser = this.parser;
589
- const materialDef = parser.json.materials[materialIndex];
590
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
591
- return MeshPhysicalMaterial;
592
- }
593
-
594
- extendMaterialParams(materialIndex, materialParams) {
595
- const parser = this.parser;
596
- const materialDef = parser.json.materials[materialIndex];
597
-
598
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
599
- return Promise.resolve();
600
- }
601
-
602
- const pending = [];
603
- materialParams.sheenColor = new Color(0, 0, 0);
604
- materialParams.sheenRoughness = 0;
605
- materialParams.sheen = 1;
606
- const extension = materialDef.extensions[this.name];
607
-
608
- if (extension.sheenColorFactor !== undefined) {
609
- materialParams.sheenColor.fromArray(extension.sheenColorFactor);
610
- }
611
-
612
- if (extension.sheenRoughnessFactor !== undefined) {
613
- materialParams.sheenRoughness = extension.sheenRoughnessFactor;
614
- }
615
-
616
- if (extension.sheenColorTexture !== undefined) {
617
- pending.push(parser.assignTexture(materialParams, 'sheenColorMap', extension.sheenColorTexture, 3001)); // sRGBEncoding
618
- }
619
-
620
- if (extension.sheenRoughnessTexture !== undefined) {
621
- pending.push(parser.assignTexture(materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture));
622
- }
623
-
624
- return Promise.all(pending);
625
- }
626
-
627
- }
628
- /**
629
- * Transmission Materials Extension
630
- *
631
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission
632
- * Draft: https://github.com/KhronosGroup/glTF/pull/1698
633
- */
634
-
635
-
636
- class GLTFMaterialsTransmissionExtension {
637
- constructor(parser) {
638
- this.parser = parser;
639
- this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;
640
- }
641
-
642
- getMaterialType(materialIndex) {
643
- const parser = this.parser;
644
- const materialDef = parser.json.materials[materialIndex];
645
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
646
- return MeshPhysicalMaterial;
647
- }
648
-
649
- extendMaterialParams(materialIndex, materialParams) {
650
- const parser = this.parser;
651
- const materialDef = parser.json.materials[materialIndex];
652
-
653
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
654
- return Promise.resolve();
655
- }
656
-
657
- const pending = [];
658
- const extension = materialDef.extensions[this.name];
659
-
660
- if (extension.transmissionFactor !== undefined) {
661
- materialParams.transmission = extension.transmissionFactor;
662
- }
663
-
664
- if (extension.transmissionTexture !== undefined) {
665
- pending.push(parser.assignTexture(materialParams, 'transmissionMap', extension.transmissionTexture));
666
- }
667
-
668
- return Promise.all(pending);
669
- }
670
-
671
- }
672
- /**
673
- * Materials Volume Extension
674
- *
675
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume
676
- */
677
-
678
-
679
- class GLTFMaterialsVolumeExtension {
680
- constructor(parser) {
681
- this.parser = parser;
682
- this.name = EXTENSIONS.KHR_MATERIALS_VOLUME;
683
- }
684
-
685
- getMaterialType(materialIndex) {
686
- const parser = this.parser;
687
- const materialDef = parser.json.materials[materialIndex];
688
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
689
- return MeshPhysicalMaterial;
690
- }
691
-
692
- extendMaterialParams(materialIndex, materialParams) {
693
- const parser = this.parser;
694
- const materialDef = parser.json.materials[materialIndex];
695
-
696
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
697
- return Promise.resolve();
698
- }
699
-
700
- const pending = [];
701
- const extension = materialDef.extensions[this.name];
702
- materialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;
703
-
704
- if (extension.thicknessTexture !== undefined) {
705
- pending.push(parser.assignTexture(materialParams, 'thicknessMap', extension.thicknessTexture));
706
- }
707
-
708
- materialParams.attenuationDistance = extension.attenuationDistance || Infinity;
709
- const colorArray = extension.attenuationColor || [1, 1, 1];
710
- materialParams.attenuationColor = new Color(colorArray[0], colorArray[1], colorArray[2]);
711
- return Promise.all(pending);
712
- }
713
-
714
- }
715
- /**
716
- * Materials ior Extension
717
- *
718
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior
719
- */
720
-
721
-
722
- class GLTFMaterialsIorExtension {
723
- constructor(parser) {
724
- this.parser = parser;
725
- this.name = EXTENSIONS.KHR_MATERIALS_IOR;
726
- }
727
-
728
- getMaterialType(materialIndex) {
729
- const parser = this.parser;
730
- const materialDef = parser.json.materials[materialIndex];
731
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
732
- return MeshPhysicalMaterial;
733
- }
734
-
735
- extendMaterialParams(materialIndex, materialParams) {
736
- const parser = this.parser;
737
- const materialDef = parser.json.materials[materialIndex];
738
-
739
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
740
- return Promise.resolve();
741
- }
742
-
743
- const extension = materialDef.extensions[this.name];
744
- materialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;
745
- return Promise.resolve();
746
- }
747
-
748
- }
749
- /**
750
- * Materials specular Extension
751
- *
752
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular
753
- */
754
-
755
-
756
- class GLTFMaterialsSpecularExtension {
757
- constructor(parser) {
758
- this.parser = parser;
759
- this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;
760
- }
761
-
762
- getMaterialType(materialIndex) {
763
- const parser = this.parser;
764
- const materialDef = parser.json.materials[materialIndex];
765
- if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
766
- return MeshPhysicalMaterial;
767
- }
768
-
769
- extendMaterialParams(materialIndex, materialParams) {
770
- const parser = this.parser;
771
- const materialDef = parser.json.materials[materialIndex];
772
-
773
- if (!materialDef.extensions || !materialDef.extensions[this.name]) {
774
- return Promise.resolve();
775
- }
776
-
777
- const pending = [];
778
- const extension = materialDef.extensions[this.name];
779
- materialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;
780
-
781
- if (extension.specularTexture !== undefined) {
782
- pending.push(parser.assignTexture(materialParams, 'specularIntensityMap', extension.specularTexture));
783
- }
784
-
785
- const colorArray = extension.specularColorFactor || [1, 1, 1];
786
- materialParams.specularColor = new Color(colorArray[0], colorArray[1], colorArray[2]);
787
-
788
- if (extension.specularColorTexture !== undefined) {
789
- pending.push(parser.assignTexture(materialParams, 'specularColorMap', extension.specularColorTexture, 3001) // sRGBEncoding
790
- );
791
- }
792
-
793
- return Promise.all(pending);
794
- }
795
-
796
- }
797
- /**
798
- * BasisU Texture Extension
799
- *
800
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu
801
- */
802
-
803
-
804
- class GLTFTextureBasisUExtension {
805
- constructor(parser) {
806
- this.parser = parser;
807
- this.name = EXTENSIONS.KHR_TEXTURE_BASISU;
808
- }
809
-
810
- loadTexture(textureIndex) {
811
- const parser = this.parser;
812
- const json = parser.json;
813
- const textureDef = json.textures[textureIndex];
814
-
815
- if (!textureDef.extensions || !textureDef.extensions[this.name]) {
816
- return null;
817
- }
818
-
819
- const extension = textureDef.extensions[this.name];
820
- const loader = parser.options.ktx2Loader;
821
-
822
- if (!loader) {
823
- if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
824
- throw new Error('THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures');
825
- } else {
826
- // Assumes that the extension is optional and that a fallback texture is present
827
- return null;
828
- }
829
- }
830
-
831
- return parser.loadTextureImage(textureIndex, extension.source, loader);
832
- }
833
-
834
- }
835
- /**
836
- * WebP Texture Extension
837
- *
838
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp
839
- */
840
-
841
-
842
- class GLTFTextureWebPExtension {
843
- constructor(parser) {
844
- this.parser = parser;
845
- this.name = EXTENSIONS.EXT_TEXTURE_WEBP;
846
- this.isSupported = null;
847
- }
848
-
849
- loadTexture(textureIndex) {
850
- const name = this.name;
851
- const parser = this.parser;
852
- const json = parser.json;
853
- const textureDef = json.textures[textureIndex];
854
-
855
- if (!textureDef.extensions || !textureDef.extensions[name]) {
856
- return null;
857
- }
858
-
859
- const extension = textureDef.extensions[name];
860
- const source = json.images[extension.source];
861
- let loader = parser.textureLoader;
862
-
863
- if (source.uri) {
864
- const handler = parser.options.manager.getHandler(source.uri);
865
- if (handler !== null) loader = handler;
866
- }
867
-
868
- return this.detectSupport().then(function (isSupported) {
869
- if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader);
870
-
871
- if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {
872
- throw new Error('THREE.GLTFLoader: WebP required by asset but unsupported.');
873
- } // Fall back to PNG or JPEG.
874
-
875
-
876
- return parser.loadTexture(textureIndex);
877
- });
878
- }
879
-
880
- detectSupport() {
881
- if (!this.isSupported) {
882
- this.isSupported = new Promise(function (resolve) {
883
- const image = new Image(); // Lossy test image. Support for lossy images doesn't guarantee support for all
884
- // WebP images, unfortunately.
885
-
886
- image.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';
887
-
888
- image.onload = image.onerror = function () {
889
- resolve(image.height === 1);
890
- };
891
- });
892
- }
893
-
894
- return this.isSupported;
895
- }
896
-
897
- }
898
- /**
899
- * AVIF Texture Extension
900
- *
901
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif
902
- */
903
-
904
-
905
- class GLTFTextureAVIFExtension {
906
- constructor(parser) {
907
- this.parser = parser;
908
- this.name = EXTENSIONS.EXT_TEXTURE_AVIF;
909
- this.isSupported = null;
910
- }
911
-
912
- loadTexture(textureIndex) {
913
- const name = this.name;
914
- const parser = this.parser;
915
- const json = parser.json;
916
- const textureDef = json.textures[textureIndex];
917
-
918
- if (!textureDef.extensions || !textureDef.extensions[name]) {
919
- return null;
920
- }
921
-
922
- const extension = textureDef.extensions[name];
923
- const source = json.images[extension.source];
924
- let loader = parser.textureLoader;
925
-
926
- if (source.uri) {
927
- const handler = parser.options.manager.getHandler(source.uri);
928
- if (handler !== null) loader = handler;
929
- }
930
-
931
- return this.detectSupport().then(function (isSupported) {
932
- if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader);
933
-
934
- if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {
935
- throw new Error('THREE.GLTFLoader: AVIF required by asset but unsupported.');
936
- } // Fall back to PNG or JPEG.
937
-
938
-
939
- return parser.loadTexture(textureIndex);
940
- });
941
- }
942
-
943
- detectSupport() {
944
- if (!this.isSupported) {
945
- this.isSupported = new Promise(function (resolve) {
946
- const image = new Image(); // Lossy test image.
947
-
948
- image.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';
949
-
950
- image.onload = image.onerror = function () {
951
- resolve(image.height === 1);
952
- };
953
- });
954
- }
955
-
956
- return this.isSupported;
957
- }
958
-
959
- }
960
- /**
961
- * meshopt BufferView Compression Extension
962
- *
963
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression
964
- */
965
-
966
-
967
- class GLTFMeshoptCompression {
968
- constructor(parser) {
969
- this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;
970
- this.parser = parser;
971
- }
972
-
973
- loadBufferView(index) {
974
- const json = this.parser.json;
975
- const bufferView = json.bufferViews[index];
976
-
977
- if (bufferView.extensions && bufferView.extensions[this.name]) {
978
- const extensionDef = bufferView.extensions[this.name];
979
- const buffer = this.parser.getDependency('buffer', extensionDef.buffer);
980
- const decoder = this.parser.options.meshoptDecoder;
981
-
982
- if (!decoder || !decoder.supported) {
983
- if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
984
- throw new Error('THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files');
985
- } else {
986
- // Assumes that the extension is optional and that fallback buffer data is present
987
- return null;
988
- }
989
- }
990
-
991
- return buffer.then(function (res) {
992
- const byteOffset = extensionDef.byteOffset || 0;
993
- const byteLength = extensionDef.byteLength || 0;
994
- const count = extensionDef.count;
995
- const stride = extensionDef.byteStride;
996
- const source = new Uint8Array(res, byteOffset, byteLength);
997
-
998
- if (decoder.decodeGltfBufferAsync) {
999
- return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function (res) {
1000
- return res.buffer;
1001
- });
1002
- } else {
1003
- // Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync
1004
- return decoder.ready.then(function () {
1005
- const result = new ArrayBuffer(count * stride);
1006
- decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter);
1007
- return result;
1008
- });
1009
- }
1010
- });
1011
- } else {
1012
- return null;
1013
- }
1014
- }
1015
-
1016
- }
1017
- /**
1018
- * GPU Instancing Extension
1019
- *
1020
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing
1021
- *
1022
- */
1023
-
1024
-
1025
- class GLTFMeshGpuInstancing {
1026
- constructor(parser) {
1027
- this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;
1028
- this.parser = parser;
1029
- }
1030
-
1031
- createNodeMesh(nodeIndex) {
1032
- const json = this.parser.json;
1033
- const nodeDef = json.nodes[nodeIndex];
1034
-
1035
- if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === undefined) {
1036
- return null;
1037
- }
1038
-
1039
- const meshDef = json.meshes[nodeDef.mesh]; // No Points or Lines + Instancing support yet
1040
-
1041
- for (const primitive of meshDef.primitives) {
1042
- if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== undefined) {
1043
- return null;
1044
- }
1045
- }
1046
-
1047
- const extensionDef = nodeDef.extensions[this.name];
1048
- const attributesDef = extensionDef.attributes; // @TODO: Can we support InstancedMesh + SkinnedMesh?
1049
-
1050
- const pending = [];
1051
- const attributes = {};
1052
-
1053
- for (const key in attributesDef) {
1054
- pending.push(this.parser.getDependency('accessor', attributesDef[key]).then(accessor => {
1055
- attributes[key] = accessor;
1056
- return attributes[key];
1057
- }));
1058
- }
1059
-
1060
- if (pending.length < 1) {
1061
- return null;
1062
- }
1063
-
1064
- pending.push(this.parser.createNodeMesh(nodeIndex));
1065
- return Promise.all(pending).then(results => {
1066
- const nodeObject = results.pop();
1067
- const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject];
1068
- const count = results[0].count; // All attribute counts should be same
1069
-
1070
- const instancedMeshes = [];
1071
-
1072
- for (const mesh of meshes) {
1073
- // Temporal variables
1074
- const m = new Matrix4();
1075
- const p = new Vector3();
1076
- const q = new Quaternion();
1077
- const s = new Vector3(1, 1, 1);
1078
- const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count);
1079
-
1080
- for (let i = 0; i < count; i++) {
1081
- if (attributes.TRANSLATION) {
1082
- p.fromBufferAttribute(attributes.TRANSLATION, i);
1083
- }
1084
-
1085
- if (attributes.ROTATION) {
1086
- q.fromBufferAttribute(attributes.ROTATION, i);
1087
- }
1088
-
1089
- if (attributes.SCALE) {
1090
- s.fromBufferAttribute(attributes.SCALE, i);
1091
- }
1092
-
1093
- instancedMesh.setMatrixAt(i, m.compose(p, q, s));
1094
- } // Add instance attributes to the geometry, excluding TRS.
1095
-
1096
-
1097
- for (const attributeName in attributes) {
1098
- if (attributeName !== 'TRANSLATION' && attributeName !== 'ROTATION' && attributeName !== 'SCALE') {
1099
- mesh.geometry.setAttribute(attributeName, attributes[attributeName]);
1100
- }
1101
- } // Just in case
1102
-
1103
-
1104
- Object3D.prototype.copy.call(instancedMesh, mesh);
1105
- this.parser.assignFinalMaterial(instancedMesh);
1106
- instancedMeshes.push(instancedMesh);
1107
- }
1108
-
1109
- if (nodeObject.isGroup) {
1110
- nodeObject.clear();
1111
- nodeObject.add(...instancedMeshes);
1112
- return nodeObject;
1113
- }
1114
-
1115
- return instancedMeshes[0];
1116
- });
1117
- }
1118
-
1119
- }
1120
- /* BINARY EXTENSION */
1121
-
1122
-
1123
- const BINARY_EXTENSION_HEADER_MAGIC = 'glTF';
1124
- const BINARY_EXTENSION_HEADER_LENGTH = 12;
1125
- const BINARY_EXTENSION_CHUNK_TYPES = {
1126
- JSON: 0x4e4f534a,
1127
- BIN: 0x004e4942
1128
- };
1129
-
1130
- class GLTFBinaryExtension {
1131
- constructor(data) {
1132
- this.name = EXTENSIONS.KHR_BINARY_GLTF;
1133
- this.content = null;
1134
- this.body = null;
1135
- const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);
1136
- this.header = {
1137
- magic: LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4))),
1138
- version: headerView.getUint32(4, true),
1139
- length: headerView.getUint32(8, true)
1140
- };
1141
-
1142
- if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {
1143
- throw new Error('THREE.GLTFLoader: Unsupported glTF-Binary header.');
1144
- } else if (this.header.version < 2.0) {
1145
- throw new Error('THREE.GLTFLoader: Legacy binary file detected.');
1146
- }
1147
-
1148
- const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;
1149
- const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);
1150
- let chunkIndex = 0;
1151
-
1152
- while (chunkIndex < chunkContentsLength) {
1153
- const chunkLength = chunkView.getUint32(chunkIndex, true);
1154
- chunkIndex += 4;
1155
- const chunkType = chunkView.getUint32(chunkIndex, true);
1156
- chunkIndex += 4;
1157
-
1158
- if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {
1159
- const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);
1160
- this.content = LoaderUtils.decodeText(contentArray);
1161
- } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {
1162
- const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;
1163
- this.body = data.slice(byteOffset, byteOffset + chunkLength);
1164
- } // Clients must ignore chunks with unknown types.
1165
-
1166
-
1167
- chunkIndex += chunkLength;
1168
- }
1169
-
1170
- if (this.content === null) {
1171
- throw new Error('THREE.GLTFLoader: JSON content not found.');
1172
- }
1173
- }
1174
-
1175
- }
1176
- /**
1177
- * DRACO Mesh Compression Extension
1178
- *
1179
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression
1180
- */
1181
-
1182
-
1183
- class GLTFDracoMeshCompressionExtension {
1184
- constructor(json, dracoLoader) {
1185
- if (!dracoLoader) {
1186
- throw new Error('THREE.GLTFLoader: No DRACOLoader instance provided.');
1187
- }
1188
-
1189
- this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;
1190
- this.json = json;
1191
- this.dracoLoader = dracoLoader;
1192
- this.dracoLoader.preload();
1193
- }
1194
-
1195
- decodePrimitive(primitive, parser) {
1196
- const json = this.json;
1197
- const dracoLoader = this.dracoLoader;
1198
- const bufferViewIndex = primitive.extensions[this.name].bufferView;
1199
- const gltfAttributeMap = primitive.extensions[this.name].attributes;
1200
- const threeAttributeMap = {};
1201
- const attributeNormalizedMap = {};
1202
- const attributeTypeMap = {};
1203
-
1204
- for (const attributeName in gltfAttributeMap) {
1205
- const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
1206
- threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName];
1207
- }
1208
-
1209
- for (const attributeName in primitive.attributes) {
1210
- const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
1211
-
1212
- if (gltfAttributeMap[attributeName] !== undefined) {
1213
- const accessorDef = json.accessors[primitive.attributes[attributeName]];
1214
- const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
1215
- attributeTypeMap[threeAttributeName] = componentType.name;
1216
- attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true;
1217
- }
1218
- }
1219
-
1220
- return parser.getDependency('bufferView', bufferViewIndex).then(function (bufferView) {
1221
- return new Promise(function (resolve) {
1222
- dracoLoader.decodeDracoFile(bufferView, function (geometry) {
1223
- for (const attributeName in geometry.attributes) {
1224
- const attribute = geometry.attributes[attributeName];
1225
- const normalized = attributeNormalizedMap[attributeName];
1226
- if (normalized !== undefined) attribute.normalized = normalized;
1227
- }
1228
-
1229
- resolve(geometry);
1230
- }, threeAttributeMap, attributeTypeMap);
1231
- });
1232
- });
1233
- }
1234
-
1235
- }
1236
- /**
1237
- * Texture Transform Extension
1238
- *
1239
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform
1240
- */
1241
-
1242
-
1243
- class GLTFTextureTransformExtension {
1244
- constructor() {
1245
- this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;
1246
- }
1247
-
1248
- extendTexture(texture, transform) {
1249
- if ((transform.texCoord === undefined || transform.texCoord === texture.channel) && transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined) {
1250
- // See https://github.com/mrdoob/three.js/issues/21819.
1251
- return texture;
1252
- }
1253
-
1254
- texture = texture.clone();
1255
-
1256
- if (transform.texCoord !== undefined) {
1257
- texture.channel = transform.texCoord;
1258
- }
1259
-
1260
- if (transform.offset !== undefined) {
1261
- texture.offset.fromArray(transform.offset);
1262
- }
1263
-
1264
- if (transform.rotation !== undefined) {
1265
- texture.rotation = transform.rotation;
1266
- }
1267
-
1268
- if (transform.scale !== undefined) {
1269
- texture.repeat.fromArray(transform.scale);
1270
- }
1271
-
1272
- texture.needsUpdate = true;
1273
- return texture;
1274
- }
1275
-
1276
- }
1277
- /**
1278
- * Mesh Quantization Extension
1279
- *
1280
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization
1281
- */
1282
-
1283
-
1284
- class GLTFMeshQuantizationExtension {
1285
- constructor() {
1286
- this.name = EXTENSIONS.KHR_MESH_QUANTIZATION;
1287
- }
1288
-
1289
- }
1290
- /*********************************/
1291
-
1292
- /********** INTERPOLATION ********/
1293
-
1294
- /*********************************/
1295
- // Spline Interpolation
1296
- // Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation
1297
-
1298
-
1299
- class GLTFCubicSplineInterpolant extends Interpolant {
1300
- constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
1301
- super(parameterPositions, sampleValues, sampleSize, resultBuffer);
1302
- }
1303
-
1304
- copySampleValue_(index) {
1305
- // Copies a sample value to the result buffer. See description of glTF
1306
- // CUBICSPLINE values layout in interpolate_() function below.
1307
- const result = this.resultBuffer,
1308
- values = this.sampleValues,
1309
- valueSize = this.valueSize,
1310
- offset = index * valueSize * 3 + valueSize;
1311
-
1312
- for (let i = 0; i !== valueSize; i++) {
1313
- result[i] = values[offset + i];
1314
- }
1315
-
1316
- return result;
1317
- }
1318
-
1319
- interpolate_(i1, t0, t, t1) {
1320
- const result = this.resultBuffer;
1321
- const values = this.sampleValues;
1322
- const stride = this.valueSize;
1323
- const stride2 = stride * 2;
1324
- const stride3 = stride * 3;
1325
- const td = t1 - t0;
1326
- const p = (t - t0) / td;
1327
- const pp = p * p;
1328
- const ppp = pp * p;
1329
- const offset1 = i1 * stride3;
1330
- const offset0 = offset1 - stride3;
1331
- const s2 = -2 * ppp + 3 * pp;
1332
- const s3 = ppp - pp;
1333
- const s0 = 1 - s2;
1334
- const s1 = s3 - pp + p; // Layout of keyframe output values for CUBICSPLINE animations:
1335
- // [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]
1336
-
1337
- for (let i = 0; i !== stride; i++) {
1338
- const p0 = values[offset0 + i + stride]; // splineVertex_k
1339
-
1340
- const m0 = values[offset0 + i + stride2] * td; // outTangent_k * (t_k+1 - t_k)
1341
-
1342
- const p1 = values[offset1 + i + stride]; // splineVertex_k+1
1343
-
1344
- const m1 = values[offset1 + i] * td; // inTangent_k+1 * (t_k+1 - t_k)
1345
-
1346
- result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;
1347
- }
1348
-
1349
- return result;
1350
- }
1351
-
1352
- }
1353
-
1354
- const _q = new Quaternion();
1355
-
1356
- class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
1357
- interpolate_(i1, t0, t, t1) {
1358
- const result = super.interpolate_(i1, t0, t, t1);
1359
-
1360
- _q.fromArray(result).normalize().toArray(result);
1361
-
1362
- return result;
1363
- }
1364
-
1365
- }
1366
- /*********************************/
1367
-
1368
- /********** INTERNALS ************/
1369
-
1370
- /*********************************/
1371
-
1372
- /* CONSTANTS */
1373
-
1374
-
1375
- const WEBGL_CONSTANTS = {
1376
- FLOAT: 5126,
1377
- //FLOAT_MAT2: 35674,
1378
- FLOAT_MAT3: 35675,
1379
- FLOAT_MAT4: 35676,
1380
- FLOAT_VEC2: 35664,
1381
- FLOAT_VEC3: 35665,
1382
- FLOAT_VEC4: 35666,
1383
- LINEAR: 9729,
1384
- REPEAT: 10497,
1385
- SAMPLER_2D: 35678,
1386
- POINTS: 0,
1387
- LINES: 1,
1388
- LINE_LOOP: 2,
1389
- LINE_STRIP: 3,
1390
- TRIANGLES: 4,
1391
- TRIANGLE_STRIP: 5,
1392
- TRIANGLE_FAN: 6,
1393
- UNSIGNED_BYTE: 5121,
1394
- UNSIGNED_SHORT: 5123
1395
- };
1396
- const WEBGL_COMPONENT_TYPES = {
1397
- 5120: Int8Array,
1398
- 5121: Uint8Array,
1399
- 5122: Int16Array,
1400
- 5123: Uint16Array,
1401
- 5125: Uint32Array,
1402
- 5126: Float32Array
1403
- };
1404
- const WEBGL_FILTERS = {
1405
- 9728: NearestFilter,
1406
- 9729: LinearFilter,
1407
- 9984: NearestMipmapNearestFilter,
1408
- 9985: LinearMipmapNearestFilter,
1409
- 9986: NearestMipmapLinearFilter,
1410
- 9987: LinearMipmapLinearFilter
1411
- };
1412
- const WEBGL_WRAPPINGS = {
1413
- 33071: ClampToEdgeWrapping,
1414
- 33648: MirroredRepeatWrapping,
1415
- 10497: RepeatWrapping
1416
- };
1417
- const WEBGL_TYPE_SIZES = {
1418
- SCALAR: 1,
1419
- VEC2: 2,
1420
- VEC3: 3,
1421
- VEC4: 4,
1422
- MAT2: 4,
1423
- MAT3: 9,
1424
- MAT4: 16
1425
- };
1426
- const ATTRIBUTES = {
1427
- POSITION: 'position',
1428
- NORMAL: 'normal',
1429
- TANGENT: 'tangent',
1430
- // uv => uv1, 4 uv channels
1431
- // https://github.com/mrdoob/three.js/pull/25943
1432
- // https://github.com/mrdoob/three.js/pull/25788
1433
- ...(REVISION.replace(/\D+/g, '') >= 152 ? {
1434
- TEXCOORD_0: 'uv',
1435
- TEXCOORD_1: 'uv1',
1436
- TEXCOORD_2: 'uv2',
1437
- TEXCOORD_3: 'uv3'
1438
- } : {
1439
- TEXCOORD_0: 'uv',
1440
- TEXCOORD_1: 'uv2'
1441
- }),
1442
- COLOR_0: 'color',
1443
- WEIGHTS_0: 'skinWeight',
1444
- JOINTS_0: 'skinIndex'
1445
- };
1446
- const PATH_PROPERTIES = {
1447
- scale: 'scale',
1448
- translation: 'position',
1449
- rotation: 'quaternion',
1450
- weights: 'morphTargetInfluences'
1451
- };
1452
- const INTERPOLATION = {
1453
- CUBICSPLINE: undefined,
1454
- // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
1455
- // keyframe track will be initialized with a default interpolation type, then modified.
1456
- LINEAR: InterpolateLinear,
1457
- STEP: InterpolateDiscrete
1458
- };
1459
- const ALPHA_MODES = {
1460
- OPAQUE: 'OPAQUE',
1461
- MASK: 'MASK',
1462
- BLEND: 'BLEND'
1463
- };
1464
- /**
1465
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
1466
- */
1467
-
1468
- function createDefaultMaterial(cache) {
1469
- if (cache['DefaultMaterial'] === undefined) {
1470
- cache['DefaultMaterial'] = new MeshStandardMaterial({
1471
- color: 0xffffff,
1472
- emissive: 0x000000,
1473
- metalness: 1,
1474
- roughness: 1,
1475
- transparent: false,
1476
- depthTest: true,
1477
- side: FrontSide
1478
- });
1479
- }
1480
-
1481
- return cache['DefaultMaterial'];
1482
- }
1483
-
1484
- function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {
1485
- // Add unknown glTF extensions to an object's userData.
1486
- for (const name in objectDef.extensions) {
1487
- if (knownExtensions[name] === undefined) {
1488
- object.userData.gltfExtensions = object.userData.gltfExtensions || {};
1489
- object.userData.gltfExtensions[name] = objectDef.extensions[name];
1490
- }
1491
- }
1492
- }
1493
- /**
1494
- * @param {Object3D|Material|BufferGeometry} object
1495
- * @param {GLTF.definition} gltfDef
1496
- */
1497
-
1498
-
1499
- function assignExtrasToUserData(object, gltfDef) {
1500
- if (gltfDef.extras !== undefined) {
1501
- if (typeof gltfDef.extras === 'object') {
1502
- Object.assign(object.userData, gltfDef.extras);
1503
- } else {
1504
- console.warn('THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras);
1505
- }
1506
- }
1507
- }
1508
- /**
1509
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets
1510
- *
1511
- * @param {BufferGeometry} geometry
1512
- * @param {Array<GLTF.Target>} targets
1513
- * @param {GLTFParser} parser
1514
- * @return {Promise<BufferGeometry>}
1515
- */
1516
-
1517
-
1518
- function addMorphTargets(geometry, targets, parser) {
1519
- let hasMorphPosition = false;
1520
- let hasMorphNormal = false;
1521
- let hasMorphColor = false;
1522
-
1523
- for (let i = 0, il = targets.length; i < il; i++) {
1524
- const target = targets[i];
1525
- if (target.POSITION !== undefined) hasMorphPosition = true;
1526
- if (target.NORMAL !== undefined) hasMorphNormal = true;
1527
- if (target.COLOR_0 !== undefined) hasMorphColor = true;
1528
- if (hasMorphPosition && hasMorphNormal && hasMorphColor) break;
1529
- }
1530
-
1531
- if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry);
1532
- const pendingPositionAccessors = [];
1533
- const pendingNormalAccessors = [];
1534
- const pendingColorAccessors = [];
1535
-
1536
- for (let i = 0, il = targets.length; i < il; i++) {
1537
- const target = targets[i];
1538
-
1539
- if (hasMorphPosition) {
1540
- const pendingAccessor = target.POSITION !== undefined ? parser.getDependency('accessor', target.POSITION) : geometry.attributes.position;
1541
- pendingPositionAccessors.push(pendingAccessor);
1542
- }
1543
-
1544
- if (hasMorphNormal) {
1545
- const pendingAccessor = target.NORMAL !== undefined ? parser.getDependency('accessor', target.NORMAL) : geometry.attributes.normal;
1546
- pendingNormalAccessors.push(pendingAccessor);
1547
- }
1548
-
1549
- if (hasMorphColor) {
1550
- const pendingAccessor = target.COLOR_0 !== undefined ? parser.getDependency('accessor', target.COLOR_0) : geometry.attributes.color;
1551
- pendingColorAccessors.push(pendingAccessor);
1552
- }
1553
- }
1554
-
1555
- return Promise.all([Promise.all(pendingPositionAccessors), Promise.all(pendingNormalAccessors), Promise.all(pendingColorAccessors)]).then(function (accessors) {
1556
- const morphPositions = accessors[0];
1557
- const morphNormals = accessors[1];
1558
- const morphColors = accessors[2];
1559
- if (hasMorphPosition) geometry.morphAttributes.position = morphPositions;
1560
- if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals;
1561
- if (hasMorphColor) geometry.morphAttributes.color = morphColors;
1562
- geometry.morphTargetsRelative = true;
1563
- return geometry;
1564
- });
1565
- }
1566
- /**
1567
- * @param {Mesh} mesh
1568
- * @param {GLTF.Mesh} meshDef
1569
- */
1570
-
1571
-
1572
- function updateMorphTargets(mesh, meshDef) {
1573
- mesh.updateMorphTargets();
1574
-
1575
- if (meshDef.weights !== undefined) {
1576
- for (let i = 0, il = meshDef.weights.length; i < il; i++) {
1577
- mesh.morphTargetInfluences[i] = meshDef.weights[i];
1578
- }
1579
- } // .extras has user-defined data, so check that .extras.targetNames is an array.
1580
-
1581
-
1582
- if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {
1583
- const targetNames = meshDef.extras.targetNames;
1584
-
1585
- if (mesh.morphTargetInfluences.length === targetNames.length) {
1586
- mesh.morphTargetDictionary = {};
1587
-
1588
- for (let i = 0, il = targetNames.length; i < il; i++) {
1589
- mesh.morphTargetDictionary[targetNames[i]] = i;
1590
- }
1591
- } else {
1592
- console.warn('THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.');
1593
- }
1594
- }
1595
- }
1596
-
1597
- function createPrimitiveKey(primitiveDef) {
1598
- const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];
1599
- let geometryKey;
1600
-
1601
- if (dracoExtension) {
1602
- geometryKey = 'draco:' + dracoExtension.bufferView + ':' + dracoExtension.indices + ':' + createAttributesKey(dracoExtension.attributes);
1603
- } else {
1604
- geometryKey = primitiveDef.indices + ':' + createAttributesKey(primitiveDef.attributes) + ':' + primitiveDef.mode;
1605
- }
1606
-
1607
- return geometryKey;
1608
- }
1609
-
1610
- function createAttributesKey(attributes) {
1611
- let attributesKey = '';
1612
- const keys = Object.keys(attributes).sort();
1613
-
1614
- for (let i = 0, il = keys.length; i < il; i++) {
1615
- attributesKey += keys[i] + ':' + attributes[keys[i]] + ';';
1616
- }
1617
-
1618
- return attributesKey;
1619
- }
1620
-
1621
- function getNormalizedComponentScale(constructor) {
1622
- // Reference:
1623
- // https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
1624
- switch (constructor) {
1625
- case Int8Array:
1626
- return 1 / 127;
1627
-
1628
- case Uint8Array:
1629
- return 1 / 255;
1630
-
1631
- case Int16Array:
1632
- return 1 / 32767;
1633
-
1634
- case Uint16Array:
1635
- return 1 / 65535;
1636
-
1637
- default:
1638
- throw new Error('THREE.GLTFLoader: Unsupported normalized accessor component type.');
1639
- }
1640
- }
1641
-
1642
- function getImageURIMimeType(uri) {
1643
- if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return 'image/jpeg';
1644
- if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return 'image/webp';
1645
- return 'image/png';
1646
- }
1647
-
1648
- const _identityMatrix = new Matrix4();
1649
- /* GLTF PARSER */
1650
-
1651
-
1652
- class GLTFParser {
1653
- constructor(json = {}, options = {}) {
1654
- this.json = json;
1655
- this.extensions = {};
1656
- this.plugins = {};
1657
- this.options = options; // loader object cache
1658
-
1659
- this.cache = new GLTFRegistry(); // associations between Three.js objects and glTF elements
1660
-
1661
- this.associations = new Map(); // BufferGeometry caching
1662
-
1663
- this.primitiveCache = {}; // Node cache
1664
-
1665
- this.nodeCache = {}; // Object3D instance caches
1666
-
1667
- this.meshCache = {
1668
- refs: {},
1669
- uses: {}
1670
- };
1671
- this.cameraCache = {
1672
- refs: {},
1673
- uses: {}
1674
- };
1675
- this.lightCache = {
1676
- refs: {},
1677
- uses: {}
1678
- };
1679
- this.sourceCache = {};
1680
- this.textureCache = {}; // Track node names, to ensure no duplicates
1681
-
1682
- this.nodeNamesUsed = {}; // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the
1683
- // expensive work of uploading a texture to the GPU off the main thread.
1684
-
1685
- let isSafari = false;
1686
- let isFirefox = false;
1687
- let firefoxVersion = -1;
1688
-
1689
- if (typeof navigator !== 'undefined') {
1690
- isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true;
1691
- isFirefox = navigator.userAgent.indexOf('Firefox') > -1;
1692
- firefoxVersion = isFirefox ? navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1;
1693
- }
1694
-
1695
- if (typeof createImageBitmap === 'undefined' || isSafari || isFirefox && firefoxVersion < 98) {
1696
- this.textureLoader = new TextureLoader(this.options.manager);
1697
- } else {
1698
- this.textureLoader = new ImageBitmapLoader(this.options.manager);
1699
- }
1700
-
1701
- this.textureLoader.setCrossOrigin(this.options.crossOrigin);
1702
- this.textureLoader.setRequestHeader(this.options.requestHeader);
1703
- this.fileLoader = new FileLoader(this.options.manager);
1704
- this.fileLoader.setResponseType('arraybuffer');
1705
-
1706
- if (this.options.crossOrigin === 'use-credentials') {
1707
- this.fileLoader.setWithCredentials(true);
1708
- }
1709
- }
1710
-
1711
- setExtensions(extensions) {
1712
- this.extensions = extensions;
1713
- }
1714
-
1715
- setPlugins(plugins) {
1716
- this.plugins = plugins;
1717
- }
1718
-
1719
- parse(onLoad, onError) {
1720
- const parser = this;
1721
- const json = this.json;
1722
- const extensions = this.extensions; // Clear the loader cache
1723
-
1724
- this.cache.removeAll();
1725
- this.nodeCache = {}; // Mark the special nodes/meshes in json for efficient parse
1726
-
1727
- this._invokeAll(function (ext) {
1728
- return ext._markDefs && ext._markDefs();
1729
- });
1730
-
1731
- Promise.all(this._invokeAll(function (ext) {
1732
- return ext.beforeRoot && ext.beforeRoot();
1733
- })).then(function () {
1734
- return Promise.all([parser.getDependencies('scene'), parser.getDependencies('animation'), parser.getDependencies('camera')]);
1735
- }).then(function (dependencies) {
1736
- const result = {
1737
- scene: dependencies[0][json.scene || 0],
1738
- scenes: dependencies[0],
1739
- animations: dependencies[1],
1740
- cameras: dependencies[2],
1741
- asset: json.asset,
1742
- parser: parser,
1743
- userData: {}
1744
- };
1745
- addUnknownExtensionsToUserData(extensions, result, json);
1746
- assignExtrasToUserData(result, json);
1747
- Promise.all(parser._invokeAll(function (ext) {
1748
- return ext.afterRoot && ext.afterRoot(result);
1749
- })).then(function () {
1750
- onLoad(result);
1751
- });
1752
- }).catch(onError);
1753
- }
1754
- /**
1755
- * Marks the special nodes/meshes in json for efficient parse.
1756
- */
1757
-
1758
-
1759
- _markDefs() {
1760
- const nodeDefs = this.json.nodes || [];
1761
- const skinDefs = this.json.skins || [];
1762
- const meshDefs = this.json.meshes || []; // Nothing in the node definition indicates whether it is a Bone or an
1763
- // Object3D. Use the skins' joint references to mark bones.
1764
-
1765
- for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {
1766
- const joints = skinDefs[skinIndex].joints;
1767
-
1768
- for (let i = 0, il = joints.length; i < il; i++) {
1769
- nodeDefs[joints[i]].isBone = true;
1770
- }
1771
- } // Iterate over all nodes, marking references to shared resources,
1772
- // as well as skeleton joints.
1773
-
1774
-
1775
- for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
1776
- const nodeDef = nodeDefs[nodeIndex];
1777
-
1778
- if (nodeDef.mesh !== undefined) {
1779
- this._addNodeRef(this.meshCache, nodeDef.mesh); // Nothing in the mesh definition indicates whether it is
1780
- // a SkinnedMesh or Mesh. Use the node's mesh reference
1781
- // to mark SkinnedMesh if node has skin.
1782
-
1783
-
1784
- if (nodeDef.skin !== undefined) {
1785
- meshDefs[nodeDef.mesh].isSkinnedMesh = true;
1786
- }
1787
- }
1788
-
1789
- if (nodeDef.camera !== undefined) {
1790
- this._addNodeRef(this.cameraCache, nodeDef.camera);
1791
- }
1792
- }
1793
- }
1794
- /**
1795
- * Counts references to shared node / Object3D resources. These resources
1796
- * can be reused, or "instantiated", at multiple nodes in the scene
1797
- * hierarchy. Mesh, Camera, and Light instances are instantiated and must
1798
- * be marked. Non-scenegraph resources (like Materials, Geometries, and
1799
- * Textures) can be reused directly and are not marked here.
1800
- *
1801
- * Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
1802
- */
1803
-
1804
-
1805
- _addNodeRef(cache, index) {
1806
- if (index === undefined) return;
1807
-
1808
- if (cache.refs[index] === undefined) {
1809
- cache.refs[index] = cache.uses[index] = 0;
1810
- }
1811
-
1812
- cache.refs[index]++;
1813
- }
1814
- /** Returns a reference to a shared resource, cloning it if necessary. */
1815
-
1816
-
1817
- _getNodeRef(cache, index, object) {
1818
- if (cache.refs[index] <= 1) return object;
1819
- const ref = object.clone(); // Propagates mappings to the cloned object, prevents mappings on the
1820
- // original object from being lost.
1821
-
1822
- const updateMappings = (original, clone) => {
1823
- const mappings = this.associations.get(original);
1824
-
1825
- if (mappings != null) {
1826
- this.associations.set(clone, mappings);
1827
- }
1828
-
1829
- for (const [i, child] of original.children.entries()) {
1830
- updateMappings(child, clone.children[i]);
1831
- }
1832
- };
1833
-
1834
- updateMappings(object, ref);
1835
- ref.name += '_instance_' + cache.uses[index]++;
1836
- return ref;
1837
- }
1838
-
1839
- _invokeOne(func) {
1840
- const extensions = Object.values(this.plugins);
1841
- extensions.push(this);
1842
-
1843
- for (let i = 0; i < extensions.length; i++) {
1844
- const result = func(extensions[i]);
1845
- if (result) return result;
1846
- }
1847
-
1848
- return null;
1849
- }
1850
-
1851
- _invokeAll(func) {
1852
- const extensions = Object.values(this.plugins);
1853
- extensions.unshift(this);
1854
- const pending = [];
1855
-
1856
- for (let i = 0; i < extensions.length; i++) {
1857
- const result = func(extensions[i]);
1858
- if (result) pending.push(result);
1859
- }
1860
-
1861
- return pending;
1862
- }
1863
- /**
1864
- * Requests the specified dependency asynchronously, with caching.
1865
- * @param {string} type
1866
- * @param {number} index
1867
- * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}
1868
- */
1869
-
1870
-
1871
- getDependency(type, index) {
1872
- const cacheKey = type + ':' + index;
1873
- let dependency = this.cache.get(cacheKey);
1874
-
1875
- if (!dependency) {
1876
- switch (type) {
1877
- case 'scene':
1878
- dependency = this.loadScene(index);
1879
- break;
1880
-
1881
- case 'node':
1882
- dependency = this._invokeOne(function (ext) {
1883
- return ext.loadNode && ext.loadNode(index);
1884
- });
1885
- break;
1886
-
1887
- case 'mesh':
1888
- dependency = this._invokeOne(function (ext) {
1889
- return ext.loadMesh && ext.loadMesh(index);
1890
- });
1891
- break;
1892
-
1893
- case 'accessor':
1894
- dependency = this.loadAccessor(index);
1895
- break;
1896
-
1897
- case 'bufferView':
1898
- dependency = this._invokeOne(function (ext) {
1899
- return ext.loadBufferView && ext.loadBufferView(index);
1900
- });
1901
- break;
1902
-
1903
- case 'buffer':
1904
- dependency = this.loadBuffer(index);
1905
- break;
1906
-
1907
- case 'material':
1908
- dependency = this._invokeOne(function (ext) {
1909
- return ext.loadMaterial && ext.loadMaterial(index);
1910
- });
1911
- break;
1912
-
1913
- case 'texture':
1914
- dependency = this._invokeOne(function (ext) {
1915
- return ext.loadTexture && ext.loadTexture(index);
1916
- });
1917
- break;
1918
-
1919
- case 'skin':
1920
- dependency = this.loadSkin(index);
1921
- break;
1922
-
1923
- case 'animation':
1924
- dependency = this._invokeOne(function (ext) {
1925
- return ext.loadAnimation && ext.loadAnimation(index);
1926
- });
1927
- break;
1928
-
1929
- case 'camera':
1930
- dependency = this.loadCamera(index);
1931
- break;
1932
-
1933
- default:
1934
- dependency = this._invokeOne(function (ext) {
1935
- return ext != this && ext.getDependency && ext.getDependency(type, index);
1936
- });
1937
-
1938
- if (!dependency) {
1939
- throw new Error('Unknown type: ' + type);
1940
- }
1941
-
1942
- break;
1943
- }
1944
-
1945
- this.cache.add(cacheKey, dependency);
1946
- }
1947
-
1948
- return dependency;
1949
- }
1950
- /**
1951
- * Requests all dependencies of the specified type asynchronously, with caching.
1952
- * @param {string} type
1953
- * @return {Promise<Array<Object>>}
1954
- */
1955
-
1956
-
1957
- getDependencies(type) {
1958
- let dependencies = this.cache.get(type);
1959
-
1960
- if (!dependencies) {
1961
- const parser = this;
1962
- const defs = this.json[type + (type === 'mesh' ? 'es' : 's')] || [];
1963
- dependencies = Promise.all(defs.map(function (def, index) {
1964
- return parser.getDependency(type, index);
1965
- }));
1966
- this.cache.add(type, dependencies);
1967
- }
1968
-
1969
- return dependencies;
1970
- }
1971
- /**
1972
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
1973
- * @param {number} bufferIndex
1974
- * @return {Promise<ArrayBuffer>}
1975
- */
1976
-
1977
-
1978
- loadBuffer(bufferIndex) {
1979
- const bufferDef = this.json.buffers[bufferIndex];
1980
- const loader = this.fileLoader;
1981
-
1982
- if (bufferDef.type && bufferDef.type !== 'arraybuffer') {
1983
- throw new Error('THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.');
1984
- } // If present, GLB container is required to be the first buffer.
1985
-
1986
-
1987
- if (bufferDef.uri === undefined && bufferIndex === 0) {
1988
- return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body);
1989
- }
1990
-
1991
- const options = this.options;
1992
- return new Promise(function (resolve, reject) {
1993
- loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, undefined, function () {
1994
- reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".'));
1995
- });
1996
- });
1997
- }
1998
- /**
1999
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
2000
- * @param {number} bufferViewIndex
2001
- * @return {Promise<ArrayBuffer>}
2002
- */
2003
-
2004
-
2005
- loadBufferView(bufferViewIndex) {
2006
- const bufferViewDef = this.json.bufferViews[bufferViewIndex];
2007
- return this.getDependency('buffer', bufferViewDef.buffer).then(function (buffer) {
2008
- const byteLength = bufferViewDef.byteLength || 0;
2009
- const byteOffset = bufferViewDef.byteOffset || 0;
2010
- return buffer.slice(byteOffset, byteOffset + byteLength);
2011
- });
2012
- }
2013
- /**
2014
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors
2015
- * @param {number} accessorIndex
2016
- * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}
2017
- */
2018
-
2019
-
2020
- loadAccessor(accessorIndex) {
2021
- const parser = this;
2022
- const json = this.json;
2023
- const accessorDef = this.json.accessors[accessorIndex];
2024
-
2025
- if (accessorDef.bufferView === undefined && accessorDef.sparse === undefined) {
2026
- const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];
2027
- const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
2028
- const normalized = accessorDef.normalized === true;
2029
- const array = new TypedArray(accessorDef.count * itemSize);
2030
- return Promise.resolve(new BufferAttribute(array, itemSize, normalized));
2031
- }
2032
-
2033
- const pendingBufferViews = [];
2034
-
2035
- if (accessorDef.bufferView !== undefined) {
2036
- pendingBufferViews.push(this.getDependency('bufferView', accessorDef.bufferView));
2037
- } else {
2038
- pendingBufferViews.push(null);
2039
- }
2040
-
2041
- if (accessorDef.sparse !== undefined) {
2042
- pendingBufferViews.push(this.getDependency('bufferView', accessorDef.sparse.indices.bufferView));
2043
- pendingBufferViews.push(this.getDependency('bufferView', accessorDef.sparse.values.bufferView));
2044
- }
2045
-
2046
- return Promise.all(pendingBufferViews).then(function (bufferViews) {
2047
- const bufferView = bufferViews[0];
2048
- const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];
2049
- const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.
2050
-
2051
- const elementBytes = TypedArray.BYTES_PER_ELEMENT;
2052
- const itemBytes = elementBytes * itemSize;
2053
- const byteOffset = accessorDef.byteOffset || 0;
2054
- const byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[accessorDef.bufferView].byteStride : undefined;
2055
- const normalized = accessorDef.normalized === true;
2056
- let array, bufferAttribute; // The buffer is not interleaved if the stride is the item size in bytes.
2057
-
2058
- if (byteStride && byteStride !== itemBytes) {
2059
- // Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer
2060
- // This makes sure that IBA.count reflects accessor.count properly
2061
- const ibSlice = Math.floor(byteOffset / byteStride);
2062
- const ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;
2063
- let ib = parser.cache.get(ibCacheKey);
2064
-
2065
- if (!ib) {
2066
- array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); // Integer parameters to IB/IBA are in array elements, not bytes.
2067
-
2068
- ib = new InterleavedBuffer(array, byteStride / elementBytes);
2069
- parser.cache.add(ibCacheKey, ib);
2070
- }
2071
-
2072
- bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized);
2073
- } else {
2074
- if (bufferView === null) {
2075
- array = new TypedArray(accessorDef.count * itemSize);
2076
- } else {
2077
- array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize);
2078
- }
2079
-
2080
- bufferAttribute = new BufferAttribute(array, itemSize, normalized);
2081
- } // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors
2082
-
2083
-
2084
- if (accessorDef.sparse !== undefined) {
2085
- const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;
2086
- const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];
2087
- const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;
2088
- const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;
2089
- const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices);
2090
- const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize);
2091
-
2092
- if (bufferView !== null) {
2093
- // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.
2094
- bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized);
2095
- }
2096
-
2097
- for (let i = 0, il = sparseIndices.length; i < il; i++) {
2098
- const index = sparseIndices[i];
2099
- bufferAttribute.setX(index, sparseValues[i * itemSize]);
2100
- if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);
2101
- if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);
2102
- if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);
2103
- if (itemSize >= 5) throw new Error('THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.');
2104
- }
2105
- }
2106
-
2107
- return bufferAttribute;
2108
- });
2109
- }
2110
- /**
2111
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures
2112
- * @param {number} textureIndex
2113
- * @return {Promise<THREE.Texture|null>}
2114
- */
2115
-
2116
-
2117
- loadTexture(textureIndex) {
2118
- const json = this.json;
2119
- const options = this.options;
2120
- const textureDef = json.textures[textureIndex];
2121
- const sourceIndex = textureDef.source;
2122
- const sourceDef = json.images[sourceIndex];
2123
- let loader = this.textureLoader;
2124
-
2125
- if (sourceDef.uri) {
2126
- const handler = options.manager.getHandler(sourceDef.uri);
2127
- if (handler !== null) loader = handler;
2128
- }
2129
-
2130
- return this.loadTextureImage(textureIndex, sourceIndex, loader);
2131
- }
2132
-
2133
- loadTextureImage(textureIndex, sourceIndex, loader) {
2134
- const parser = this;
2135
- const json = this.json;
2136
- const textureDef = json.textures[textureIndex];
2137
- const sourceDef = json.images[sourceIndex];
2138
- const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ':' + textureDef.sampler;
2139
-
2140
- if (this.textureCache[cacheKey]) {
2141
- // See https://github.com/mrdoob/three.js/issues/21559.
2142
- return this.textureCache[cacheKey];
2143
- }
2144
-
2145
- const promise = this.loadImageSource(sourceIndex, loader).then(function (texture) {
2146
- texture.flipY = false;
2147
- texture.name = textureDef.name || sourceDef.name || '';
2148
-
2149
- if (texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith('data:image/') === false) {
2150
- texture.name = sourceDef.uri;
2151
- }
2152
-
2153
- const samplers = json.samplers || {};
2154
- const sampler = samplers[textureDef.sampler] || {};
2155
- texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter;
2156
- texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter;
2157
- texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping;
2158
- texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping;
2159
- parser.associations.set(texture, {
2160
- textures: textureIndex
2161
- });
2162
- return texture;
2163
- }).catch(function () {
2164
- return null;
2165
- });
2166
- this.textureCache[cacheKey] = promise;
2167
- return promise;
2168
- }
2169
-
2170
- loadImageSource(sourceIndex, loader) {
2171
- const parser = this;
2172
- const json = this.json;
2173
- const options = this.options;
2174
-
2175
- if (this.sourceCache[sourceIndex] !== undefined) {
2176
- return this.sourceCache[sourceIndex].then(texture => texture.clone());
2177
- }
2178
-
2179
- const sourceDef = json.images[sourceIndex];
2180
- const URL = self.URL || self.webkitURL;
2181
- let sourceURI = sourceDef.uri || '';
2182
- let isObjectURL = false;
2183
-
2184
- if (sourceDef.bufferView !== undefined) {
2185
- // Load binary image data from bufferView, if provided.
2186
- sourceURI = parser.getDependency('bufferView', sourceDef.bufferView).then(function (bufferView) {
2187
- isObjectURL = true;
2188
- const blob = new Blob([bufferView], {
2189
- type: sourceDef.mimeType
2190
- });
2191
- sourceURI = URL.createObjectURL(blob);
2192
- return sourceURI;
2193
- });
2194
- } else if (sourceDef.uri === undefined) {
2195
- throw new Error('THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView');
2196
- }
2197
-
2198
- const promise = Promise.resolve(sourceURI).then(function (sourceURI) {
2199
- return new Promise(function (resolve, reject) {
2200
- let onLoad = resolve;
2201
-
2202
- if (loader.isImageBitmapLoader === true) {
2203
- onLoad = function (imageBitmap) {
2204
- const texture = new Texture(imageBitmap);
2205
- texture.needsUpdate = true;
2206
- resolve(texture);
2207
- };
2208
- }
2209
-
2210
- loader.load(LoaderUtils.resolveURL(sourceURI, options.path), onLoad, undefined, reject);
2211
- });
2212
- }).then(function (texture) {
2213
- // Clean up resources and configure Texture.
2214
- if (isObjectURL === true) {
2215
- URL.revokeObjectURL(sourceURI);
2216
- }
2217
-
2218
- texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri);
2219
- return texture;
2220
- }).catch(function (error) {
2221
- console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI);
2222
- throw error;
2223
- });
2224
- this.sourceCache[sourceIndex] = promise;
2225
- return promise;
2226
- }
2227
- /**
2228
- * Asynchronously assigns a texture to the given material parameters.
2229
- * @param {Object} materialParams
2230
- * @param {string} mapName
2231
- * @param {Object} mapDef
2232
- * @return {Promise<Texture>}
2233
- */
2234
-
2235
-
2236
- assignTexture(materialParams, mapName, mapDef, encoding) {
2237
- const parser = this;
2238
- return this.getDependency('texture', mapDef.index).then(function (texture) {
2239
- if (!texture) return null;
2240
-
2241
- if (mapDef.texCoord !== undefined && mapDef.texCoord > 0) {
2242
- texture = texture.clone();
2243
- texture.channel = mapDef.texCoord;
2244
- }
2245
-
2246
- if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {
2247
- const transform = mapDef.extensions !== undefined ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : undefined;
2248
-
2249
- if (transform) {
2250
- const gltfReference = parser.associations.get(texture);
2251
- texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform);
2252
- parser.associations.set(texture, gltfReference);
2253
- }
2254
- }
2255
-
2256
- if (encoding !== undefined) {
2257
- if ('colorSpace' in texture) texture.colorSpace = encoding === 3001 ? 'srgb' : 'srgb-linear';else texture.encoding = encoding;
2258
- }
2259
-
2260
- materialParams[mapName] = texture;
2261
- return texture;
2262
- });
2263
- }
2264
- /**
2265
- * Assigns final material to a Mesh, Line, or Points instance. The instance
2266
- * already has a material (generated from the glTF material options alone)
2267
- * but reuse of the same glTF material may require multiple threejs materials
2268
- * to accommodate different primitive types, defines, etc. New materials will
2269
- * be created if necessary, and reused from a cache.
2270
- * @param {Object3D} mesh Mesh, Line, or Points instance.
2271
- */
2272
-
2273
-
2274
- assignFinalMaterial(mesh) {
2275
- const geometry = mesh.geometry;
2276
- let material = mesh.material;
2277
- const useDerivativeTangents = geometry.attributes.tangent === undefined;
2278
- const useVertexColors = geometry.attributes.color !== undefined;
2279
- const useFlatShading = geometry.attributes.normal === undefined;
2280
-
2281
- if (mesh.isPoints) {
2282
- const cacheKey = 'PointsMaterial:' + material.uuid;
2283
- let pointsMaterial = this.cache.get(cacheKey);
2284
-
2285
- if (!pointsMaterial) {
2286
- pointsMaterial = new PointsMaterial();
2287
- Material.prototype.copy.call(pointsMaterial, material);
2288
- pointsMaterial.color.copy(material.color);
2289
- pointsMaterial.map = material.map;
2290
- pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px
2291
-
2292
- this.cache.add(cacheKey, pointsMaterial);
2293
- }
2294
-
2295
- material = pointsMaterial;
2296
- } else if (mesh.isLine) {
2297
- const cacheKey = 'LineBasicMaterial:' + material.uuid;
2298
- let lineMaterial = this.cache.get(cacheKey);
2299
-
2300
- if (!lineMaterial) {
2301
- lineMaterial = new LineBasicMaterial();
2302
- Material.prototype.copy.call(lineMaterial, material);
2303
- lineMaterial.color.copy(material.color);
2304
- lineMaterial.map = material.map;
2305
- this.cache.add(cacheKey, lineMaterial);
2306
- }
2307
-
2308
- material = lineMaterial;
2309
- } // Clone the material if it will be modified
2310
-
2311
-
2312
- if (useDerivativeTangents || useVertexColors || useFlatShading) {
2313
- let cacheKey = 'ClonedMaterial:' + material.uuid + ':';
2314
- if (useDerivativeTangents) cacheKey += 'derivative-tangents:';
2315
- if (useVertexColors) cacheKey += 'vertex-colors:';
2316
- if (useFlatShading) cacheKey += 'flat-shading:';
2317
- let cachedMaterial = this.cache.get(cacheKey);
2318
-
2319
- if (!cachedMaterial) {
2320
- cachedMaterial = material.clone();
2321
- if (useVertexColors) cachedMaterial.vertexColors = true;
2322
- if (useFlatShading) cachedMaterial.flatShading = true;
2323
-
2324
- if (useDerivativeTangents) {
2325
- // https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
2326
- if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1;
2327
- if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1;
2328
- }
2329
-
2330
- this.cache.add(cacheKey, cachedMaterial);
2331
- this.associations.set(cachedMaterial, this.associations.get(material));
2332
- }
2333
-
2334
- material = cachedMaterial;
2335
- }
2336
-
2337
- mesh.material = material;
2338
- }
2339
-
2340
- getMaterialType() {
2341
- return MeshStandardMaterial;
2342
- }
2343
- /**
2344
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
2345
- * @param {number} materialIndex
2346
- * @return {Promise<Material>}
2347
- */
2348
-
2349
-
2350
- loadMaterial(materialIndex) {
2351
- const parser = this;
2352
- const json = this.json;
2353
- const extensions = this.extensions;
2354
- const materialDef = json.materials[materialIndex];
2355
- let materialType;
2356
- const materialParams = {};
2357
- const materialExtensions = materialDef.extensions || {};
2358
- const pending = [];
2359
-
2360
- if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) {
2361
- const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];
2362
- materialType = kmuExtension.getMaterialType();
2363
- pending.push(kmuExtension.extendParams(materialParams, materialDef, parser));
2364
- } else {
2365
- // Specification:
2366
- // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material
2367
- const metallicRoughness = materialDef.pbrMetallicRoughness || {};
2368
- materialParams.color = new Color(1.0, 1.0, 1.0);
2369
- materialParams.opacity = 1.0;
2370
-
2371
- if (Array.isArray(metallicRoughness.baseColorFactor)) {
2372
- const array = metallicRoughness.baseColorFactor;
2373
- materialParams.color.fromArray(array);
2374
- materialParams.opacity = array[3];
2375
- }
2376
-
2377
- if (metallicRoughness.baseColorTexture !== undefined) {
2378
- pending.push(parser.assignTexture(materialParams, 'map', metallicRoughness.baseColorTexture, 3001)); // sRGBEncoding
2379
- }
2380
-
2381
- materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;
2382
- materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;
2383
-
2384
- if (metallicRoughness.metallicRoughnessTexture !== undefined) {
2385
- pending.push(parser.assignTexture(materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture));
2386
- pending.push(parser.assignTexture(materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture));
2387
- }
2388
-
2389
- materialType = this._invokeOne(function (ext) {
2390
- return ext.getMaterialType && ext.getMaterialType(materialIndex);
2391
- });
2392
- pending.push(Promise.all(this._invokeAll(function (ext) {
2393
- return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams);
2394
- })));
2395
- }
2396
-
2397
- if (materialDef.doubleSided === true) {
2398
- materialParams.side = DoubleSide;
2399
- }
2400
-
2401
- const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;
2402
-
2403
- if (alphaMode === ALPHA_MODES.BLEND) {
2404
- materialParams.transparent = true; // See: https://github.com/mrdoob/three.js/issues/17706
2405
-
2406
- materialParams.depthWrite = false;
2407
- } else {
2408
- materialParams.transparent = false;
2409
-
2410
- if (alphaMode === ALPHA_MODES.MASK) {
2411
- materialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;
2412
- }
2413
- }
2414
-
2415
- if (materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial) {
2416
- pending.push(parser.assignTexture(materialParams, 'normalMap', materialDef.normalTexture));
2417
- materialParams.normalScale = new Vector2(1, 1);
2418
-
2419
- if (materialDef.normalTexture.scale !== undefined) {
2420
- const scale = materialDef.normalTexture.scale;
2421
- materialParams.normalScale.set(scale, scale);
2422
- }
2423
- }
2424
-
2425
- if (materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial) {
2426
- pending.push(parser.assignTexture(materialParams, 'aoMap', materialDef.occlusionTexture));
2427
-
2428
- if (materialDef.occlusionTexture.strength !== undefined) {
2429
- materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;
2430
- }
2431
- }
2432
-
2433
- if (materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial) {
2434
- materialParams.emissive = new Color().fromArray(materialDef.emissiveFactor);
2435
- }
2436
-
2437
- if (materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial) {
2438
- pending.push(parser.assignTexture(materialParams, 'emissiveMap', materialDef.emissiveTexture, 3001)); // sRGBEncoding
2439
- }
2440
-
2441
- return Promise.all(pending).then(function () {
2442
- const material = new materialType(materialParams);
2443
- if (materialDef.name) material.name = materialDef.name;
2444
- assignExtrasToUserData(material, materialDef);
2445
- parser.associations.set(material, {
2446
- materials: materialIndex
2447
- });
2448
- if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef);
2449
- return material;
2450
- });
2451
- }
2452
- /** When Object3D instances are targeted by animation, they need unique names. */
2453
-
2454
-
2455
- createUniqueName(originalName) {
2456
- const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || '');
2457
- let name = sanitizedName;
2458
-
2459
- for (let i = 1; this.nodeNamesUsed[name]; ++i) {
2460
- name = sanitizedName + '_' + i;
2461
- }
2462
-
2463
- this.nodeNamesUsed[name] = true;
2464
- return name;
2465
- }
2466
- /**
2467
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
2468
- *
2469
- * Creates BufferGeometries from primitives.
2470
- *
2471
- * @param {Array<GLTF.Primitive>} primitives
2472
- * @return {Promise<Array<BufferGeometry>>}
2473
- */
2474
-
2475
-
2476
- loadGeometries(primitives) {
2477
- const parser = this;
2478
- const extensions = this.extensions;
2479
- const cache = this.primitiveCache;
2480
-
2481
- function createDracoPrimitive(primitive) {
2482
- return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function (geometry) {
2483
- return addPrimitiveAttributes(geometry, primitive, parser);
2484
- });
2485
- }
2486
-
2487
- const pending = [];
2488
-
2489
- for (let i = 0, il = primitives.length; i < il; i++) {
2490
- const primitive = primitives[i];
2491
- const cacheKey = createPrimitiveKey(primitive); // See if we've already created this geometry
2492
-
2493
- const cached = cache[cacheKey];
2494
-
2495
- if (cached) {
2496
- // Use the cached geometry if it exists
2497
- pending.push(cached.promise);
2498
- } else {
2499
- let geometryPromise;
2500
-
2501
- if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {
2502
- // Use DRACO geometry if available
2503
- geometryPromise = createDracoPrimitive(primitive);
2504
- } else {
2505
- // Otherwise create a new geometry
2506
- geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser);
2507
- } // Cache this geometry
2508
-
2509
-
2510
- cache[cacheKey] = {
2511
- primitive: primitive,
2512
- promise: geometryPromise
2513
- };
2514
- pending.push(geometryPromise);
2515
- }
2516
- }
2517
-
2518
- return Promise.all(pending);
2519
- }
2520
- /**
2521
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes
2522
- * @param {number} meshIndex
2523
- * @return {Promise<Group|Mesh|SkinnedMesh>}
2524
- */
2525
-
2526
-
2527
- loadMesh(meshIndex) {
2528
- const parser = this;
2529
- const json = this.json;
2530
- const extensions = this.extensions;
2531
- const meshDef = json.meshes[meshIndex];
2532
- const primitives = meshDef.primitives;
2533
- const pending = [];
2534
-
2535
- for (let i = 0, il = primitives.length; i < il; i++) {
2536
- const material = primitives[i].material === undefined ? createDefaultMaterial(this.cache) : this.getDependency('material', primitives[i].material);
2537
- pending.push(material);
2538
- }
2539
-
2540
- pending.push(parser.loadGeometries(primitives));
2541
- return Promise.all(pending).then(function (results) {
2542
- const materials = results.slice(0, results.length - 1);
2543
- const geometries = results[results.length - 1];
2544
- const meshes = [];
2545
-
2546
- for (let i = 0, il = geometries.length; i < il; i++) {
2547
- const geometry = geometries[i];
2548
- const primitive = primitives[i]; // 1. create Mesh
2549
-
2550
- let mesh;
2551
- const material = materials[i];
2552
-
2553
- if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === undefined) {
2554
- // .isSkinnedMesh isn't in glTF spec. See ._markDefs()
2555
- mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material);
2556
-
2557
- if (mesh.isSkinnedMesh === true) {
2558
- // normalize skin weights to fix malformed assets (see #15319)
2559
- mesh.normalizeSkinWeights();
2560
- }
2561
-
2562
- if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {
2563
- mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode);
2564
- } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {
2565
- mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode);
2566
- }
2567
- } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {
2568
- mesh = new LineSegments(geometry, material);
2569
- } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {
2570
- mesh = new Line(geometry, material);
2571
- } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {
2572
- mesh = new LineLoop(geometry, material);
2573
- } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {
2574
- mesh = new Points(geometry, material);
2575
- } else {
2576
- throw new Error('THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode);
2577
- }
2578
-
2579
- if (Object.keys(mesh.geometry.morphAttributes).length > 0) {
2580
- updateMorphTargets(mesh, meshDef);
2581
- }
2582
-
2583
- mesh.name = parser.createUniqueName(meshDef.name || 'mesh_' + meshIndex);
2584
- assignExtrasToUserData(mesh, meshDef);
2585
- if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive);
2586
- parser.assignFinalMaterial(mesh);
2587
- meshes.push(mesh);
2588
- }
2589
-
2590
- for (let i = 0, il = meshes.length; i < il; i++) {
2591
- parser.associations.set(meshes[i], {
2592
- meshes: meshIndex,
2593
- primitives: i
2594
- });
2595
- }
2596
-
2597
- if (meshes.length === 1) {
2598
- return meshes[0];
2599
- }
2600
-
2601
- const group = new Group();
2602
- parser.associations.set(group, {
2603
- meshes: meshIndex
2604
- });
2605
-
2606
- for (let i = 0, il = meshes.length; i < il; i++) {
2607
- group.add(meshes[i]);
2608
- }
2609
-
2610
- return group;
2611
- });
2612
- }
2613
- /**
2614
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras
2615
- * @param {number} cameraIndex
2616
- * @return {Promise<THREE.Camera>}
2617
- */
2618
-
2619
-
2620
- loadCamera(cameraIndex) {
2621
- let camera;
2622
- const cameraDef = this.json.cameras[cameraIndex];
2623
- const params = cameraDef[cameraDef.type];
2624
-
2625
- if (!params) {
2626
- console.warn('THREE.GLTFLoader: Missing camera parameters.');
2627
- return;
2628
- }
2629
-
2630
- if (cameraDef.type === 'perspective') {
2631
- camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6);
2632
- } else if (cameraDef.type === 'orthographic') {
2633
- camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar);
2634
- }
2635
-
2636
- if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name);
2637
- assignExtrasToUserData(camera, cameraDef);
2638
- return Promise.resolve(camera);
2639
- }
2640
- /**
2641
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
2642
- * @param {number} skinIndex
2643
- * @return {Promise<Skeleton>}
2644
- */
2645
-
2646
-
2647
- loadSkin(skinIndex) {
2648
- const skinDef = this.json.skins[skinIndex];
2649
- const pending = [];
2650
-
2651
- for (let i = 0, il = skinDef.joints.length; i < il; i++) {
2652
- pending.push(this._loadNodeShallow(skinDef.joints[i]));
2653
- }
2654
-
2655
- if (skinDef.inverseBindMatrices !== undefined) {
2656
- pending.push(this.getDependency('accessor', skinDef.inverseBindMatrices));
2657
- } else {
2658
- pending.push(null);
2659
- }
2660
-
2661
- return Promise.all(pending).then(function (results) {
2662
- const inverseBindMatrices = results.pop();
2663
- const jointNodes = results; // Note that bones (joint nodes) may or may not be in the
2664
- // scene graph at this time.
2665
-
2666
- const bones = [];
2667
- const boneInverses = [];
2668
-
2669
- for (let i = 0, il = jointNodes.length; i < il; i++) {
2670
- const jointNode = jointNodes[i];
2671
-
2672
- if (jointNode) {
2673
- bones.push(jointNode);
2674
- const mat = new Matrix4();
2675
-
2676
- if (inverseBindMatrices !== null) {
2677
- mat.fromArray(inverseBindMatrices.array, i * 16);
2678
- }
2679
-
2680
- boneInverses.push(mat);
2681
- } else {
2682
- console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinDef.joints[i]);
2683
- }
2684
- }
2685
-
2686
- return new Skeleton(bones, boneInverses);
2687
- });
2688
- }
2689
- /**
2690
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations
2691
- * @param {number} animationIndex
2692
- * @return {Promise<AnimationClip>}
2693
- */
2694
-
2695
-
2696
- loadAnimation(animationIndex) {
2697
- const json = this.json;
2698
- const animationDef = json.animations[animationIndex];
2699
- const animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;
2700
- const pendingNodes = [];
2701
- const pendingInputAccessors = [];
2702
- const pendingOutputAccessors = [];
2703
- const pendingSamplers = [];
2704
- const pendingTargets = [];
2705
-
2706
- for (let i = 0, il = animationDef.channels.length; i < il; i++) {
2707
- const channel = animationDef.channels[i];
2708
- const sampler = animationDef.samplers[channel.sampler];
2709
- const target = channel.target;
2710
- const name = target.node;
2711
- const input = animationDef.parameters !== undefined ? animationDef.parameters[sampler.input] : sampler.input;
2712
- const output = animationDef.parameters !== undefined ? animationDef.parameters[sampler.output] : sampler.output;
2713
- if (target.node === undefined) continue;
2714
- pendingNodes.push(this.getDependency('node', name));
2715
- pendingInputAccessors.push(this.getDependency('accessor', input));
2716
- pendingOutputAccessors.push(this.getDependency('accessor', output));
2717
- pendingSamplers.push(sampler);
2718
- pendingTargets.push(target);
2719
- }
2720
-
2721
- return Promise.all([Promise.all(pendingNodes), Promise.all(pendingInputAccessors), Promise.all(pendingOutputAccessors), Promise.all(pendingSamplers), Promise.all(pendingTargets)]).then(function (dependencies) {
2722
- const nodes = dependencies[0];
2723
- const inputAccessors = dependencies[1];
2724
- const outputAccessors = dependencies[2];
2725
- const samplers = dependencies[3];
2726
- const targets = dependencies[4];
2727
- const tracks = [];
2728
-
2729
- for (let i = 0, il = nodes.length; i < il; i++) {
2730
- const node = nodes[i];
2731
- const inputAccessor = inputAccessors[i];
2732
- const outputAccessor = outputAccessors[i];
2733
- const sampler = samplers[i];
2734
- const target = targets[i];
2735
- if (node === undefined) continue;
2736
- node.updateMatrix();
2737
- let TypedKeyframeTrack;
2738
-
2739
- switch (PATH_PROPERTIES[target.path]) {
2740
- case PATH_PROPERTIES.weights:
2741
- TypedKeyframeTrack = NumberKeyframeTrack;
2742
- break;
2743
-
2744
- case PATH_PROPERTIES.rotation:
2745
- TypedKeyframeTrack = QuaternionKeyframeTrack;
2746
- break;
2747
-
2748
- case PATH_PROPERTIES.position:
2749
- case PATH_PROPERTIES.scale:
2750
- default:
2751
- TypedKeyframeTrack = VectorKeyframeTrack;
2752
- break;
2753
- }
2754
-
2755
- const targetName = node.name ? node.name : node.uuid;
2756
- const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[sampler.interpolation] : InterpolateLinear;
2757
- const targetNames = [];
2758
-
2759
- if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {
2760
- node.traverse(function (object) {
2761
- if (object.morphTargetInfluences) {
2762
- targetNames.push(object.name ? object.name : object.uuid);
2763
- }
2764
- });
2765
- } else {
2766
- targetNames.push(targetName);
2767
- }
2768
-
2769
- let outputArray = outputAccessor.array;
2770
-
2771
- if (outputAccessor.normalized) {
2772
- const scale = getNormalizedComponentScale(outputArray.constructor);
2773
- const scaled = new Float32Array(outputArray.length);
2774
-
2775
- for (let j = 0, jl = outputArray.length; j < jl; j++) {
2776
- scaled[j] = outputArray[j] * scale;
2777
- }
2778
-
2779
- outputArray = scaled;
2780
- }
2781
-
2782
- for (let j = 0, jl = targetNames.length; j < jl; j++) {
2783
- const track = new TypedKeyframeTrack(targetNames[j] + '.' + PATH_PROPERTIES[target.path], inputAccessor.array, outputArray, interpolation); // Override interpolation with custom factory method.
2784
-
2785
- if (sampler.interpolation === 'CUBICSPLINE') {
2786
- track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {
2787
- // A CUBICSPLINE keyframe in glTF has three output values for each input value,
2788
- // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
2789
- // must be divided by three to get the interpolant's sampleSize argument.
2790
- const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
2791
- return new interpolantType(this.times, this.values, this.getValueSize() / 3, result);
2792
- }; // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
2793
-
2794
-
2795
- track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
2796
- }
2797
-
2798
- tracks.push(track);
2799
- }
2800
- }
2801
-
2802
- return new AnimationClip(animationName, undefined, tracks);
2803
- });
2804
- }
2805
-
2806
- createNodeMesh(nodeIndex) {
2807
- const json = this.json;
2808
- const parser = this;
2809
- const nodeDef = json.nodes[nodeIndex];
2810
- if (nodeDef.mesh === undefined) return null;
2811
- return parser.getDependency('mesh', nodeDef.mesh).then(function (mesh) {
2812
- const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); // if weights are provided on the node, override weights on the mesh.
2813
-
2814
-
2815
- if (nodeDef.weights !== undefined) {
2816
- node.traverse(function (o) {
2817
- if (!o.isMesh) return;
2818
-
2819
- for (let i = 0, il = nodeDef.weights.length; i < il; i++) {
2820
- o.morphTargetInfluences[i] = nodeDef.weights[i];
2821
- }
2822
- });
2823
- }
2824
-
2825
- return node;
2826
- });
2827
- }
2828
- /**
2829
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy
2830
- * @param {number} nodeIndex
2831
- * @return {Promise<Object3D>}
2832
- */
2833
-
2834
-
2835
- loadNode(nodeIndex) {
2836
- const json = this.json;
2837
- const parser = this;
2838
- const nodeDef = json.nodes[nodeIndex];
2839
-
2840
- const nodePending = parser._loadNodeShallow(nodeIndex);
2841
-
2842
- const childPending = [];
2843
- const childrenDef = nodeDef.children || [];
2844
-
2845
- for (let i = 0, il = childrenDef.length; i < il; i++) {
2846
- childPending.push(parser.getDependency('node', childrenDef[i]));
2847
- }
2848
-
2849
- const skeletonPending = nodeDef.skin === undefined ? Promise.resolve(null) : parser.getDependency('skin', nodeDef.skin);
2850
- return Promise.all([nodePending, Promise.all(childPending), skeletonPending]).then(function (results) {
2851
- const node = results[0];
2852
- const children = results[1];
2853
- const skeleton = results[2];
2854
-
2855
- if (skeleton !== null) {
2856
- // This full traverse should be fine because
2857
- // child glTF nodes have not been added to this node yet.
2858
- node.traverse(function (mesh) {
2859
- if (!mesh.isSkinnedMesh) return;
2860
- mesh.bind(skeleton, _identityMatrix);
2861
- });
2862
- }
2863
-
2864
- for (let i = 0, il = children.length; i < il; i++) {
2865
- node.add(children[i]);
2866
- }
2867
-
2868
- return node;
2869
- });
2870
- } // ._loadNodeShallow() parses a single node.
2871
- // skin and child nodes are created and added in .loadNode() (no '_' prefix).
2872
-
2873
-
2874
- _loadNodeShallow(nodeIndex) {
2875
- const json = this.json;
2876
- const extensions = this.extensions;
2877
- const parser = this; // This method is called from .loadNode() and .loadSkin().
2878
- // Cache a node to avoid duplication.
2879
-
2880
- if (this.nodeCache[nodeIndex] !== undefined) {
2881
- return this.nodeCache[nodeIndex];
2882
- }
2883
-
2884
- const nodeDef = json.nodes[nodeIndex]; // reserve node's name before its dependencies, so the root has the intended name.
2885
-
2886
- const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : '';
2887
- const pending = [];
2888
-
2889
- const meshPromise = parser._invokeOne(function (ext) {
2890
- return ext.createNodeMesh && ext.createNodeMesh(nodeIndex);
2891
- });
2892
-
2893
- if (meshPromise) {
2894
- pending.push(meshPromise);
2895
- }
2896
-
2897
- if (nodeDef.camera !== undefined) {
2898
- pending.push(parser.getDependency('camera', nodeDef.camera).then(function (camera) {
2899
- return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera);
2900
- }));
2901
- }
2902
-
2903
- parser._invokeAll(function (ext) {
2904
- return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex);
2905
- }).forEach(function (promise) {
2906
- pending.push(promise);
2907
- });
2908
-
2909
- this.nodeCache[nodeIndex] = Promise.all(pending).then(function (objects) {
2910
- let node; // .isBone isn't in glTF spec. See ._markDefs
2911
-
2912
- if (nodeDef.isBone === true) {
2913
- node = new Bone();
2914
- } else if (objects.length > 1) {
2915
- node = new Group();
2916
- } else if (objects.length === 1) {
2917
- node = objects[0];
2918
- } else {
2919
- node = new Object3D();
2920
- }
2921
-
2922
- if (node !== objects[0]) {
2923
- for (let i = 0, il = objects.length; i < il; i++) {
2924
- node.add(objects[i]);
2925
- }
2926
- }
2927
-
2928
- if (nodeDef.name) {
2929
- node.userData.name = nodeDef.name;
2930
- node.name = nodeName;
2931
- }
2932
-
2933
- assignExtrasToUserData(node, nodeDef);
2934
- if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef);
2935
-
2936
- if (nodeDef.matrix !== undefined) {
2937
- const matrix = new Matrix4();
2938
- matrix.fromArray(nodeDef.matrix);
2939
- node.applyMatrix4(matrix);
2940
- } else {
2941
- if (nodeDef.translation !== undefined) {
2942
- node.position.fromArray(nodeDef.translation);
2943
- }
2944
-
2945
- if (nodeDef.rotation !== undefined) {
2946
- node.quaternion.fromArray(nodeDef.rotation);
2947
- }
2948
-
2949
- if (nodeDef.scale !== undefined) {
2950
- node.scale.fromArray(nodeDef.scale);
2951
- }
2952
- }
2953
-
2954
- if (!parser.associations.has(node)) {
2955
- parser.associations.set(node, {});
2956
- }
2957
-
2958
- parser.associations.get(node).nodes = nodeIndex;
2959
- return node;
2960
- });
2961
- return this.nodeCache[nodeIndex];
2962
- }
2963
- /**
2964
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes
2965
- * @param {number} sceneIndex
2966
- * @return {Promise<Group>}
2967
- */
2968
-
2969
-
2970
- loadScene(sceneIndex) {
2971
- const extensions = this.extensions;
2972
- const sceneDef = this.json.scenes[sceneIndex];
2973
- const parser = this; // Loader returns Group, not Scene.
2974
- // See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172
2975
-
2976
- const scene = new Group();
2977
- if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name);
2978
- assignExtrasToUserData(scene, sceneDef);
2979
- if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef);
2980
- const nodeIds = sceneDef.nodes || [];
2981
- const pending = [];
2982
-
2983
- for (let i = 0, il = nodeIds.length; i < il; i++) {
2984
- pending.push(parser.getDependency('node', nodeIds[i]));
2985
- }
2986
-
2987
- return Promise.all(pending).then(function (nodes) {
2988
- for (let i = 0, il = nodes.length; i < il; i++) {
2989
- scene.add(nodes[i]);
2990
- } // Removes dangling associations, associations that reference a node that
2991
- // didn't make it into the scene.
2992
-
2993
-
2994
- const reduceAssociations = node => {
2995
- const reducedAssociations = new Map();
2996
-
2997
- for (const [key, value] of parser.associations) {
2998
- if (key instanceof Material || key instanceof Texture) {
2999
- reducedAssociations.set(key, value);
3000
- }
3001
- }
3002
-
3003
- node.traverse(node => {
3004
- const mappings = parser.associations.get(node);
3005
-
3006
- if (mappings != null) {
3007
- reducedAssociations.set(node, mappings);
3008
- }
3009
- });
3010
- return reducedAssociations;
3011
- };
3012
-
3013
- parser.associations = reduceAssociations(scene);
3014
- return scene;
3015
- });
3016
- }
3017
-
3018
- }
3019
- /**
3020
- * @param {BufferGeometry} geometry
3021
- * @param {GLTF.Primitive} primitiveDef
3022
- * @param {GLTFParser} parser
3023
- */
3024
-
3025
-
3026
- function computeBounds(geometry, primitiveDef, parser) {
3027
- const attributes = primitiveDef.attributes;
3028
- const box = new Box3();
3029
-
3030
- if (attributes.POSITION !== undefined) {
3031
- const accessor = parser.json.accessors[attributes.POSITION];
3032
- const min = accessor.min;
3033
- const max = accessor.max; // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.
3034
-
3035
- if (min !== undefined && max !== undefined) {
3036
- box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2]));
3037
-
3038
- if (accessor.normalized) {
3039
- const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
3040
- box.min.multiplyScalar(boxScale);
3041
- box.max.multiplyScalar(boxScale);
3042
- }
3043
- } else {
3044
- console.warn('THREE.GLTFLoader: Missing min/max properties for accessor POSITION.');
3045
- return;
3046
- }
3047
- } else {
3048
- return;
3049
- }
3050
-
3051
- const targets = primitiveDef.targets;
3052
-
3053
- if (targets !== undefined) {
3054
- const maxDisplacement = new Vector3();
3055
- const vector = new Vector3();
3056
-
3057
- for (let i = 0, il = targets.length; i < il; i++) {
3058
- const target = targets[i];
3059
-
3060
- if (target.POSITION !== undefined) {
3061
- const accessor = parser.json.accessors[target.POSITION];
3062
- const min = accessor.min;
3063
- const max = accessor.max; // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.
3064
-
3065
- if (min !== undefined && max !== undefined) {
3066
- // we need to get max of absolute components because target weight is [-1,1]
3067
- vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));
3068
- vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));
3069
- vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));
3070
-
3071
- if (accessor.normalized) {
3072
- const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
3073
- vector.multiplyScalar(boxScale);
3074
- } // Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative
3075
- // to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets
3076
- // are used to implement key-frame animations and as such only two are active at a time - this results in very large
3077
- // boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.
3078
-
3079
-
3080
- maxDisplacement.max(vector);
3081
- } else {
3082
- console.warn('THREE.GLTFLoader: Missing min/max properties for accessor POSITION.');
3083
- }
3084
- }
3085
- } // As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.
3086
-
3087
-
3088
- box.expandByVector(maxDisplacement);
3089
- }
3090
-
3091
- geometry.boundingBox = box;
3092
- const sphere = new Sphere();
3093
- box.getCenter(sphere.center);
3094
- sphere.radius = box.min.distanceTo(box.max) / 2;
3095
- geometry.boundingSphere = sphere;
3096
- }
3097
- /**
3098
- * @param {BufferGeometry} geometry
3099
- * @param {GLTF.Primitive} primitiveDef
3100
- * @param {GLTFParser} parser
3101
- * @return {Promise<BufferGeometry>}
3102
- */
3103
-
3104
-
3105
- function addPrimitiveAttributes(geometry, primitiveDef, parser) {
3106
- const attributes = primitiveDef.attributes;
3107
- const pending = [];
3108
-
3109
- function assignAttributeAccessor(accessorIndex, attributeName) {
3110
- return parser.getDependency('accessor', accessorIndex).then(function (accessor) {
3111
- geometry.setAttribute(attributeName, accessor);
3112
- });
3113
- }
3114
-
3115
- for (const gltfAttributeName in attributes) {
3116
- const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); // Skip attributes already provided by e.g. Draco extension.
3117
-
3118
- if (threeAttributeName in geometry.attributes) continue;
3119
- pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName));
3120
- }
3121
-
3122
- if (primitiveDef.indices !== undefined && !geometry.index) {
3123
- const accessor = parser.getDependency('accessor', primitiveDef.indices).then(function (accessor) {
3124
- geometry.setIndex(accessor);
3125
- });
3126
- pending.push(accessor);
3127
- }
3128
-
3129
- assignExtrasToUserData(geometry, primitiveDef);
3130
- computeBounds(geometry, primitiveDef, parser);
3131
- return Promise.all(pending).then(function () {
3132
- return primitiveDef.targets !== undefined ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry;
3133
- });
3134
- }
3135
-
3136
- export { GLTFLoader };