@vctrl/hooks 0.9.4 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +210 -0
  2. package/README.md +202 -383
  3. package/package.json +66 -55
  4. package/project.json +55 -0
  5. package/src/index.ts +38 -0
  6. package/src/use-export-model/use-export-model.ts +113 -0
  7. package/src/use-load-model/event-system.ts +46 -0
  8. package/src/use-load-model/index.ts +15 -0
  9. package/src/use-load-model/model-context.tsx +174 -0
  10. package/src/use-load-model/state.ts +75 -0
  11. package/src/use-load-model/types.ts +284 -0
  12. package/src/use-load-model/use-load-model.ts +682 -0
  13. package/src/use-load-model/utils/calculate-referenced-bytes.ts +123 -0
  14. package/src/use-load-model/utils/index.ts +7 -0
  15. package/src/use-load-model/utils/read-directory.ts +35 -0
  16. package/src/use-load-model/utils/reconstruct-files.ts +85 -0
  17. package/src/use-load-model/utils/resolve-scene-payload.ts +151 -0
  18. package/{use-optimize-model/index.d.ts → src/use-optimize-model/index.ts} +2 -1
  19. package/src/use-optimize-model/state.ts +40 -0
  20. package/src/use-optimize-model/types.ts +37 -0
  21. package/src/use-optimize-model/use-calc-optimization-info.ts +97 -0
  22. package/src/use-optimize-model/use-optimize-model.ts +467 -0
  23. package/src/use-optimize-model/utils/index.ts +29 -0
  24. package/src/use-optimize-model/utils/texture-optimization.ts +292 -0
  25. package/src/use-optimize-model/utils/validation.ts +62 -0
  26. package/src/utils/server-communication.ts +351 -0
  27. package/tsconfig.json +21 -0
  28. package/tsconfig.lib.json +16 -0
  29. package/vite.config.ts +77 -0
  30. package/GLTFExporter-Q5UJ5eb1.js +0 -1265
  31. package/GLTFExporter-ltc8rmzz.cjs +0 -18
  32. package/index.cjs.js +0 -1
  33. package/index.d.ts +0 -3
  34. package/index.es.js +0 -12
  35. package/model-context-Du5WQddA.cjs +0 -9
  36. package/model-context-fEKN9ymq.js +0 -3443
  37. package/use-export-model/types.d.ts +0 -19
  38. package/use-export-model/use-export-model.d.ts +0 -14
  39. package/use-export-model/utils/data-uri-to-blob.d.ts +0 -9
  40. package/use-export-model/utils/export-handlers.d.ts +0 -23
  41. package/use-export-model/utils/file-helpers.d.ts +0 -17
  42. package/use-export-model/utils/index.d.ts +0 -3
  43. package/use-export-model-BfzYIkcD.cjs +0 -1
  44. package/use-export-model-ccF7tK6m.js +0 -76
  45. package/use-export-model.cjs.js +0 -1
  46. package/use-export-model.es.js +0 -4
  47. package/use-load-model/event-system.d.ts +0 -7
  48. package/use-load-model/file-type-hooks/index.d.ts +0 -2
  49. package/use-load-model/file-type-hooks/use-load-binary.d.ts +0 -11
  50. package/use-load-model/file-type-hooks/use-load-gltf.d.ts +0 -5
  51. package/use-load-model/index.d.ts +0 -3
  52. package/use-load-model/loaders/create-gltf-loader.d.ts +0 -3
  53. package/use-load-model/loaders/create-usdz-loader.d.ts +0 -3
  54. package/use-load-model/loaders/index.d.ts +0 -2
  55. package/use-load-model/model-context.d.ts +0 -78
  56. package/use-load-model/state.d.ts +0 -19
  57. package/use-load-model/types.d.ts +0 -51
  58. package/use-load-model/use-load-model.d.ts +0 -74
  59. package/use-load-model/utils/array-buffer-to-base64.d.ts +0 -2
  60. package/use-load-model/utils/index.d.ts +0 -2
  61. package/use-load-model/utils/read-directory.d.ts +0 -8
  62. package/use-load-model.cjs.js +0 -1
  63. package/use-load-model.es.js +0 -8
  64. package/use-optimize-model/state.d.ts +0 -13
  65. package/use-optimize-model/types.d.ts +0 -37
  66. package/use-optimize-model/use-optimize-model.d.ts +0 -29
  67. package/use-optimize-model-BXWR9d6e.js +0 -127
  68. package/use-optimize-model-EEn8K4nu.cjs +0 -1
  69. package/use-optimize-model.cjs.js +0 -1
  70. package/use-optimize-model.es.js +0 -4
  71. /package/{use-export-model/index.d.ts → src/use-export-model/index.ts} +0 -0
@@ -1,3443 +0,0 @@
1
- import { jsx as Bt } from "react/jsx-runtime";
2
- import { useCallback as z, useRef as Ct, useReducer as bt, useEffect as lt, createContext as ft, useContext as Et } from "react";
3
- import { TrianglesDrawMode as Qt, TriangleFanDrawMode as XA, TriangleStripDrawMode as Ge, Loader as TA, LoaderUtils as mA, FileLoader as aA, Color as rA, LinearSRGBColorSpace as Y, SpotLight as dt, PointLight as ht, DirectionalLight as pt, MeshBasicMaterial as hA, SRGBColorSpace as AA, MeshPhysicalMaterial as W, Vector2 as SA, Matrix4 as yA, Vector3 as CA, Quaternion as xe, InstancedMesh as ut, InstancedBufferAttribute as mt, Object3D as ie, TextureLoader as Te, ImageBitmapLoader as wt, BufferAttribute as X, InterleavedBuffer as Dt, InterleavedBufferAttribute as kt, LinearFilter as GA, LinearMipmapLinearFilter as se, RepeatWrapping as xA, PointsMaterial as Ft, Material as NA, LineBasicMaterial as Rt, MeshStandardMaterial as Le, DoubleSide as St, PropertyBinding as yt, BufferGeometry as ne, SkinnedMesh as Gt, Mesh as Me, LineSegments as xt, Line as Tt, LineLoop as Lt, Points as Mt, Group as kA, PerspectiveCamera as Nt, MathUtils as Ut, OrthographicCamera as _t, Skeleton as qt, AnimationClip as Ht, Bone as Ot, InterpolateLinear as Ne, ColorManagement as le, NearestFilter as vt, NearestMipmapNearestFilter as Jt, LinearMipmapNearestFilter as jt, NearestMipmapLinearFilter as Kt, ClampToEdgeWrapping as Ue, MirroredRepeatWrapping as _e, InterpolateDiscrete as Pt, FrontSide as Yt, Texture as fe, VectorKeyframeTrack as Ee, NumberKeyframeTrack as Qe, QuaternionKeyframeTrack as de, Box3 as Wt, Sphere as Vt, Interpolant as zt, CompressedCubeTexture as Xt, UnsignedByteType as K, CompressedArrayTexture as Zt, CompressedTexture as qe, RGBAFormat as bA, RGBA_ASTC_4x4_Format as $t, RGBA_BPTC_Format as Aa, RGBA_ETC2_EAC_Format as ea, RGBA_PVRTC_4BPPV1_Format as ta, RGBA_S3TC_DXT5_Format as aa, RGB_ETC1_Format as ia, RGB_ETC2_Format as sa, RGB_PVRTC_4BPPV1_Format as na, RGBA_S3TC_DXT1_Format as oa, FloatType as FA, HalfFloatType as RA, DataTexture as ra, Data3DTexture as ca, DisplayP3ColorSpace as ga, LinearDisplayP3ColorSpace as Ia, NoColorSpace as oA, RGFormat as pA, RedFormat as uA, RGBA_ASTC_6x6_Format as he, WebGLRenderer as Ba } from "three";
4
- const BA = {}, V = {
5
- emit(n, A) {
6
- const e = BA[n];
7
- e && e.forEach((a) => a(A));
8
- },
9
- on(n, A) {
10
- BA[n] || (BA[n] = []), BA[n].push(A);
11
- },
12
- off(n, A) {
13
- const e = BA[n];
14
- e && (BA[n] = e.filter(
15
- (a) => a !== A
16
- ));
17
- }
18
- };
19
- var q = /* @__PURE__ */ ((n) => (n.gltf = "gltf", n.glb = "glb", n.usdz = "usdz", n))(q || {});
20
- const He = {
21
- /**
22
- * Currently loaded file
23
- */
24
- file: null,
25
- /**
26
- * Flag indicating if a file is currently being loaded
27
- */
28
- isFileLoading: !1,
29
- /**
30
- * Current loading progress (0-100)
31
- */
32
- progress: 0,
33
- /**
34
- * List of supported file types
35
- * @type {ModelFileTypes[]}
36
- */
37
- supportedFileTypes: Object.values(q)
38
- };
39
- function Ca(n, A) {
40
- switch (A.type) {
41
- case "set-file":
42
- return { ...n, file: A.payload };
43
- case "set-file-loading":
44
- return { ...n, isFileLoading: A.payload };
45
- case "set-progress":
46
- return { ...n, progress: A.payload };
47
- case "reset-state":
48
- return { ...He };
49
- default:
50
- return n;
51
- }
52
- }
53
- async function pe(n) {
54
- const A = new Blob([n]), e = new FileReader();
55
- return new Promise((a, t) => {
56
- e.onloadend = () => {
57
- if (!(e != null && e.result)) return;
58
- const i = (e == null ? void 0 : e.result).split(",")[1];
59
- a(i);
60
- }, e.onerror = t, e.readAsDataURL(A);
61
- });
62
- }
63
- async function ba(n) {
64
- const A = [];
65
- async function* e(a) {
66
- for await (const [, t] of a)
67
- t.kind === "file" ? yield await t.getFile() : t.kind === "directory" && (yield* e(t));
68
- }
69
- for await (const a of e(n))
70
- A.push(a);
71
- return A;
72
- }
73
- function ue(n, A) {
74
- if (A === Qt)
75
- return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), n;
76
- if (A === XA || A === Ge) {
77
- let e = n.getIndex();
78
- if (e === null) {
79
- const s = [], o = n.getAttribute("position");
80
- if (o !== void 0) {
81
- for (let r = 0; r < o.count; r++)
82
- s.push(r);
83
- n.setIndex(s), e = n.getIndex();
84
- } else
85
- return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), n;
86
- }
87
- const a = e.count - 2, t = [];
88
- if (A === XA)
89
- for (let s = 1; s <= a; s++)
90
- t.push(e.getX(0)), t.push(e.getX(s)), t.push(e.getX(s + 1));
91
- else
92
- for (let s = 0; s < a; s++)
93
- s % 2 === 0 ? (t.push(e.getX(s)), t.push(e.getX(s + 1)), t.push(e.getX(s + 2))) : (t.push(e.getX(s + 2)), t.push(e.getX(s + 1)), t.push(e.getX(s)));
94
- t.length / 3 !== a && console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");
95
- const i = n.clone();
96
- return i.setIndex(t), i.clearGroups(), i;
97
- } else
98
- return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", A), n;
99
- }
100
- class la extends TA {
101
- constructor(A) {
102
- super(A), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(e) {
103
- return new ha(e);
104
- }), this.register(function(e) {
105
- return new pa(e);
106
- }), this.register(function(e) {
107
- return new ya(e);
108
- }), this.register(function(e) {
109
- return new Ga(e);
110
- }), this.register(function(e) {
111
- return new xa(e);
112
- }), this.register(function(e) {
113
- return new ma(e);
114
- }), this.register(function(e) {
115
- return new wa(e);
116
- }), this.register(function(e) {
117
- return new Da(e);
118
- }), this.register(function(e) {
119
- return new ka(e);
120
- }), this.register(function(e) {
121
- return new da(e);
122
- }), this.register(function(e) {
123
- return new Fa(e);
124
- }), this.register(function(e) {
125
- return new ua(e);
126
- }), this.register(function(e) {
127
- return new Sa(e);
128
- }), this.register(function(e) {
129
- return new Ra(e);
130
- }), this.register(function(e) {
131
- return new Ea(e);
132
- }), this.register(function(e) {
133
- return new Ta(e);
134
- }), this.register(function(e) {
135
- return new La(e);
136
- });
137
- }
138
- load(A, e, a, t) {
139
- const i = this;
140
- let s;
141
- if (this.resourcePath !== "")
142
- s = this.resourcePath;
143
- else if (this.path !== "") {
144
- const c = mA.extractUrlBase(A);
145
- s = mA.resolveURL(c, this.path);
146
- } else
147
- s = mA.extractUrlBase(A);
148
- this.manager.itemStart(A);
149
- const o = function(c) {
150
- t ? t(c) : console.error(c), i.manager.itemError(A), i.manager.itemEnd(A);
151
- }, r = new aA(this.manager);
152
- r.setPath(this.path), r.setResponseType("arraybuffer"), r.setRequestHeader(this.requestHeader), r.setWithCredentials(this.withCredentials), r.load(A, function(c) {
153
- try {
154
- i.parse(c, s, function(I) {
155
- e(I), i.manager.itemEnd(A);
156
- }, o);
157
- } catch (I) {
158
- o(I);
159
- }
160
- }, a, o);
161
- }
162
- setDRACOLoader(A) {
163
- return this.dracoLoader = A, this;
164
- }
165
- setDDSLoader() {
166
- throw new Error(
167
- 'THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".'
168
- );
169
- }
170
- setKTX2Loader(A) {
171
- return this.ktx2Loader = A, this;
172
- }
173
- setMeshoptDecoder(A) {
174
- return this.meshoptDecoder = A, this;
175
- }
176
- register(A) {
177
- return this.pluginCallbacks.indexOf(A) === -1 && this.pluginCallbacks.push(A), this;
178
- }
179
- unregister(A) {
180
- return this.pluginCallbacks.indexOf(A) !== -1 && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A), 1), this;
181
- }
182
- parse(A, e, a, t) {
183
- let i;
184
- const s = {}, o = {}, r = new TextDecoder();
185
- if (typeof A == "string")
186
- i = JSON.parse(A);
187
- else if (A instanceof ArrayBuffer)
188
- if (r.decode(new Uint8Array(A, 0, 4)) === Oe) {
189
- try {
190
- s[y.KHR_BINARY_GLTF] = new Ma(A);
191
- } catch (g) {
192
- t && t(g);
193
- return;
194
- }
195
- i = JSON.parse(s[y.KHR_BINARY_GLTF].content);
196
- } else
197
- i = JSON.parse(r.decode(A));
198
- else
199
- i = A;
200
- if (i.asset === void 0 || i.asset.version[0] < 2) {
201
- t && t(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
202
- return;
203
- }
204
- const c = new Wa(i, {
205
- path: e || this.resourcePath || "",
206
- crossOrigin: this.crossOrigin,
207
- requestHeader: this.requestHeader,
208
- manager: this.manager,
209
- ktx2Loader: this.ktx2Loader,
210
- meshoptDecoder: this.meshoptDecoder
211
- });
212
- c.fileLoader.setRequestHeader(this.requestHeader);
213
- for (let I = 0; I < this.pluginCallbacks.length; I++) {
214
- const g = this.pluginCallbacks[I](c);
215
- g.name || console.error("THREE.GLTFLoader: Invalid plugin found: missing name"), o[g.name] = g, s[g.name] = !0;
216
- }
217
- if (i.extensionsUsed)
218
- for (let I = 0; I < i.extensionsUsed.length; ++I) {
219
- const g = i.extensionsUsed[I], B = i.extensionsRequired || [];
220
- switch (g) {
221
- case y.KHR_MATERIALS_UNLIT:
222
- s[g] = new Qa();
223
- break;
224
- case y.KHR_DRACO_MESH_COMPRESSION:
225
- s[g] = new Na(i, this.dracoLoader);
226
- break;
227
- case y.KHR_TEXTURE_TRANSFORM:
228
- s[g] = new Ua();
229
- break;
230
- case y.KHR_MESH_QUANTIZATION:
231
- s[g] = new _a();
232
- break;
233
- default:
234
- B.indexOf(g) >= 0 && o[g] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + g + '".');
235
- }
236
- }
237
- c.setExtensions(s), c.setPlugins(o), c.parse(a, t);
238
- }
239
- parseAsync(A, e) {
240
- const a = this;
241
- return new Promise(function(t, i) {
242
- a.parse(A, e, t, i);
243
- });
244
- }
245
- }
246
- function fa() {
247
- let n = {};
248
- return {
249
- get: function(A) {
250
- return n[A];
251
- },
252
- add: function(A, e) {
253
- n[A] = e;
254
- },
255
- remove: function(A) {
256
- delete n[A];
257
- },
258
- removeAll: function() {
259
- n = {};
260
- }
261
- };
262
- }
263
- const y = {
264
- KHR_BINARY_GLTF: "KHR_binary_glTF",
265
- KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression",
266
- KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual",
267
- KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat",
268
- KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion",
269
- KHR_MATERIALS_IOR: "KHR_materials_ior",
270
- KHR_MATERIALS_SHEEN: "KHR_materials_sheen",
271
- KHR_MATERIALS_SPECULAR: "KHR_materials_specular",
272
- KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission",
273
- KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence",
274
- KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy",
275
- KHR_MATERIALS_UNLIT: "KHR_materials_unlit",
276
- KHR_MATERIALS_VOLUME: "KHR_materials_volume",
277
- KHR_TEXTURE_BASISU: "KHR_texture_basisu",
278
- KHR_TEXTURE_TRANSFORM: "KHR_texture_transform",
279
- KHR_MESH_QUANTIZATION: "KHR_mesh_quantization",
280
- KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength",
281
- EXT_MATERIALS_BUMP: "EXT_materials_bump",
282
- EXT_TEXTURE_WEBP: "EXT_texture_webp",
283
- EXT_TEXTURE_AVIF: "EXT_texture_avif",
284
- EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression",
285
- EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing"
286
- };
287
- class Ea {
288
- constructor(A) {
289
- this.parser = A, this.name = y.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
290
- }
291
- _markDefs() {
292
- const A = this.parser, e = this.parser.json.nodes || [];
293
- for (let a = 0, t = e.length; a < t; a++) {
294
- const i = e[a];
295
- i.extensions && i.extensions[this.name] && i.extensions[this.name].light !== void 0 && A._addNodeRef(this.cache, i.extensions[this.name].light);
296
- }
297
- }
298
- _loadLight(A) {
299
- const e = this.parser, a = "light:" + A;
300
- let t = e.cache.get(a);
301
- if (t) return t;
302
- const i = e.json, r = ((i.extensions && i.extensions[this.name] || {}).lights || [])[A];
303
- let c;
304
- const I = new rA(16777215);
305
- r.color !== void 0 && I.setRGB(r.color[0], r.color[1], r.color[2], Y);
306
- const g = r.range !== void 0 ? r.range : 0;
307
- switch (r.type) {
308
- case "directional":
309
- c = new pt(I), c.target.position.set(0, 0, -1), c.add(c.target);
310
- break;
311
- case "point":
312
- c = new ht(I), c.distance = g;
313
- break;
314
- case "spot":
315
- c = new dt(I), c.distance = g, r.spot = r.spot || {}, r.spot.innerConeAngle = r.spot.innerConeAngle !== void 0 ? r.spot.innerConeAngle : 0, r.spot.outerConeAngle = r.spot.outerConeAngle !== void 0 ? r.spot.outerConeAngle : Math.PI / 4, c.angle = r.spot.outerConeAngle, c.penumbra = 1 - r.spot.innerConeAngle / r.spot.outerConeAngle, c.target.position.set(0, 0, -1), c.add(c.target);
316
- break;
317
- default:
318
- throw new Error("THREE.GLTFLoader: Unexpected light type: " + r.type);
319
- }
320
- return c.position.set(0, 0, 0), c.decay = 2, tA(c, r), r.intensity !== void 0 && (c.intensity = r.intensity), c.name = e.createUniqueName(r.name || "light_" + A), t = Promise.resolve(c), e.cache.add(a, t), t;
321
- }
322
- getDependency(A, e) {
323
- if (A === "light")
324
- return this._loadLight(e);
325
- }
326
- createNodeAttachment(A) {
327
- const e = this, a = this.parser, i = a.json.nodes[A], o = (i.extensions && i.extensions[this.name] || {}).light;
328
- return o === void 0 ? null : this._loadLight(o).then(function(r) {
329
- return a._getNodeRef(e.cache, o, r);
330
- });
331
- }
332
- }
333
- class Qa {
334
- constructor() {
335
- this.name = y.KHR_MATERIALS_UNLIT;
336
- }
337
- getMaterialType() {
338
- return hA;
339
- }
340
- extendParams(A, e, a) {
341
- const t = [];
342
- A.color = new rA(1, 1, 1), A.opacity = 1;
343
- const i = e.pbrMetallicRoughness;
344
- if (i) {
345
- if (Array.isArray(i.baseColorFactor)) {
346
- const s = i.baseColorFactor;
347
- A.color.setRGB(s[0], s[1], s[2], Y), A.opacity = s[3];
348
- }
349
- i.baseColorTexture !== void 0 && t.push(a.assignTexture(A, "map", i.baseColorTexture, AA));
350
- }
351
- return Promise.all(t);
352
- }
353
- }
354
- class da {
355
- constructor(A) {
356
- this.parser = A, this.name = y.KHR_MATERIALS_EMISSIVE_STRENGTH;
357
- }
358
- extendMaterialParams(A, e) {
359
- const t = this.parser.json.materials[A];
360
- if (!t.extensions || !t.extensions[this.name])
361
- return Promise.resolve();
362
- const i = t.extensions[this.name].emissiveStrength;
363
- return i !== void 0 && (e.emissiveIntensity = i), Promise.resolve();
364
- }
365
- }
366
- class ha {
367
- constructor(A) {
368
- this.parser = A, this.name = y.KHR_MATERIALS_CLEARCOAT;
369
- }
370
- getMaterialType(A) {
371
- const a = this.parser.json.materials[A];
372
- return !a.extensions || !a.extensions[this.name] ? null : W;
373
- }
374
- extendMaterialParams(A, e) {
375
- const a = this.parser, t = a.json.materials[A];
376
- if (!t.extensions || !t.extensions[this.name])
377
- return Promise.resolve();
378
- const i = [], s = t.extensions[this.name];
379
- if (s.clearcoatFactor !== void 0 && (e.clearcoat = s.clearcoatFactor), s.clearcoatTexture !== void 0 && i.push(a.assignTexture(e, "clearcoatMap", s.clearcoatTexture)), s.clearcoatRoughnessFactor !== void 0 && (e.clearcoatRoughness = s.clearcoatRoughnessFactor), s.clearcoatRoughnessTexture !== void 0 && i.push(a.assignTexture(e, "clearcoatRoughnessMap", s.clearcoatRoughnessTexture)), s.clearcoatNormalTexture !== void 0 && (i.push(a.assignTexture(e, "clearcoatNormalMap", s.clearcoatNormalTexture)), s.clearcoatNormalTexture.scale !== void 0)) {
380
- const o = s.clearcoatNormalTexture.scale;
381
- e.clearcoatNormalScale = new SA(o, o);
382
- }
383
- return Promise.all(i);
384
- }
385
- }
386
- class pa {
387
- constructor(A) {
388
- this.parser = A, this.name = y.KHR_MATERIALS_DISPERSION;
389
- }
390
- getMaterialType(A) {
391
- const a = this.parser.json.materials[A];
392
- return !a.extensions || !a.extensions[this.name] ? null : W;
393
- }
394
- extendMaterialParams(A, e) {
395
- const t = this.parser.json.materials[A];
396
- if (!t.extensions || !t.extensions[this.name])
397
- return Promise.resolve();
398
- const i = t.extensions[this.name];
399
- return e.dispersion = i.dispersion !== void 0 ? i.dispersion : 0, Promise.resolve();
400
- }
401
- }
402
- class ua {
403
- constructor(A) {
404
- this.parser = A, this.name = y.KHR_MATERIALS_IRIDESCENCE;
405
- }
406
- getMaterialType(A) {
407
- const a = this.parser.json.materials[A];
408
- return !a.extensions || !a.extensions[this.name] ? null : W;
409
- }
410
- extendMaterialParams(A, e) {
411
- const a = this.parser, t = a.json.materials[A];
412
- if (!t.extensions || !t.extensions[this.name])
413
- return Promise.resolve();
414
- const i = [], s = t.extensions[this.name];
415
- return s.iridescenceFactor !== void 0 && (e.iridescence = s.iridescenceFactor), s.iridescenceTexture !== void 0 && i.push(a.assignTexture(e, "iridescenceMap", s.iridescenceTexture)), s.iridescenceIor !== void 0 && (e.iridescenceIOR = s.iridescenceIor), e.iridescenceThicknessRange === void 0 && (e.iridescenceThicknessRange = [100, 400]), s.iridescenceThicknessMinimum !== void 0 && (e.iridescenceThicknessRange[0] = s.iridescenceThicknessMinimum), s.iridescenceThicknessMaximum !== void 0 && (e.iridescenceThicknessRange[1] = s.iridescenceThicknessMaximum), s.iridescenceThicknessTexture !== void 0 && i.push(a.assignTexture(e, "iridescenceThicknessMap", s.iridescenceThicknessTexture)), Promise.all(i);
416
- }
417
- }
418
- class ma {
419
- constructor(A) {
420
- this.parser = A, this.name = y.KHR_MATERIALS_SHEEN;
421
- }
422
- getMaterialType(A) {
423
- const a = this.parser.json.materials[A];
424
- return !a.extensions || !a.extensions[this.name] ? null : W;
425
- }
426
- extendMaterialParams(A, e) {
427
- const a = this.parser, t = a.json.materials[A];
428
- if (!t.extensions || !t.extensions[this.name])
429
- return Promise.resolve();
430
- const i = [];
431
- e.sheenColor = new rA(0, 0, 0), e.sheenRoughness = 0, e.sheen = 1;
432
- const s = t.extensions[this.name];
433
- if (s.sheenColorFactor !== void 0) {
434
- const o = s.sheenColorFactor;
435
- e.sheenColor.setRGB(o[0], o[1], o[2], Y);
436
- }
437
- return s.sheenRoughnessFactor !== void 0 && (e.sheenRoughness = s.sheenRoughnessFactor), s.sheenColorTexture !== void 0 && i.push(a.assignTexture(e, "sheenColorMap", s.sheenColorTexture, AA)), s.sheenRoughnessTexture !== void 0 && i.push(a.assignTexture(e, "sheenRoughnessMap", s.sheenRoughnessTexture)), Promise.all(i);
438
- }
439
- }
440
- class wa {
441
- constructor(A) {
442
- this.parser = A, this.name = y.KHR_MATERIALS_TRANSMISSION;
443
- }
444
- getMaterialType(A) {
445
- const a = this.parser.json.materials[A];
446
- return !a.extensions || !a.extensions[this.name] ? null : W;
447
- }
448
- extendMaterialParams(A, e) {
449
- const a = this.parser, t = a.json.materials[A];
450
- if (!t.extensions || !t.extensions[this.name])
451
- return Promise.resolve();
452
- const i = [], s = t.extensions[this.name];
453
- return s.transmissionFactor !== void 0 && (e.transmission = s.transmissionFactor), s.transmissionTexture !== void 0 && i.push(a.assignTexture(e, "transmissionMap", s.transmissionTexture)), Promise.all(i);
454
- }
455
- }
456
- class Da {
457
- constructor(A) {
458
- this.parser = A, this.name = y.KHR_MATERIALS_VOLUME;
459
- }
460
- getMaterialType(A) {
461
- const a = this.parser.json.materials[A];
462
- return !a.extensions || !a.extensions[this.name] ? null : W;
463
- }
464
- extendMaterialParams(A, e) {
465
- const a = this.parser, t = a.json.materials[A];
466
- if (!t.extensions || !t.extensions[this.name])
467
- return Promise.resolve();
468
- const i = [], s = t.extensions[this.name];
469
- e.thickness = s.thicknessFactor !== void 0 ? s.thicknessFactor : 0, s.thicknessTexture !== void 0 && i.push(a.assignTexture(e, "thicknessMap", s.thicknessTexture)), e.attenuationDistance = s.attenuationDistance || 1 / 0;
470
- const o = s.attenuationColor || [1, 1, 1];
471
- return e.attenuationColor = new rA().setRGB(o[0], o[1], o[2], Y), Promise.all(i);
472
- }
473
- }
474
- class ka {
475
- constructor(A) {
476
- this.parser = A, this.name = y.KHR_MATERIALS_IOR;
477
- }
478
- getMaterialType(A) {
479
- const a = this.parser.json.materials[A];
480
- return !a.extensions || !a.extensions[this.name] ? null : W;
481
- }
482
- extendMaterialParams(A, e) {
483
- const t = this.parser.json.materials[A];
484
- if (!t.extensions || !t.extensions[this.name])
485
- return Promise.resolve();
486
- const i = t.extensions[this.name];
487
- return e.ior = i.ior !== void 0 ? i.ior : 1.5, Promise.resolve();
488
- }
489
- }
490
- class Fa {
491
- constructor(A) {
492
- this.parser = A, this.name = y.KHR_MATERIALS_SPECULAR;
493
- }
494
- getMaterialType(A) {
495
- const a = this.parser.json.materials[A];
496
- return !a.extensions || !a.extensions[this.name] ? null : W;
497
- }
498
- extendMaterialParams(A, e) {
499
- const a = this.parser, t = a.json.materials[A];
500
- if (!t.extensions || !t.extensions[this.name])
501
- return Promise.resolve();
502
- const i = [], s = t.extensions[this.name];
503
- e.specularIntensity = s.specularFactor !== void 0 ? s.specularFactor : 1, s.specularTexture !== void 0 && i.push(a.assignTexture(e, "specularIntensityMap", s.specularTexture));
504
- const o = s.specularColorFactor || [1, 1, 1];
505
- return e.specularColor = new rA().setRGB(o[0], o[1], o[2], Y), s.specularColorTexture !== void 0 && i.push(a.assignTexture(e, "specularColorMap", s.specularColorTexture, AA)), Promise.all(i);
506
- }
507
- }
508
- class Ra {
509
- constructor(A) {
510
- this.parser = A, this.name = y.EXT_MATERIALS_BUMP;
511
- }
512
- getMaterialType(A) {
513
- const a = this.parser.json.materials[A];
514
- return !a.extensions || !a.extensions[this.name] ? null : W;
515
- }
516
- extendMaterialParams(A, e) {
517
- const a = this.parser, t = a.json.materials[A];
518
- if (!t.extensions || !t.extensions[this.name])
519
- return Promise.resolve();
520
- const i = [], s = t.extensions[this.name];
521
- return e.bumpScale = s.bumpFactor !== void 0 ? s.bumpFactor : 1, s.bumpTexture !== void 0 && i.push(a.assignTexture(e, "bumpMap", s.bumpTexture)), Promise.all(i);
522
- }
523
- }
524
- class Sa {
525
- constructor(A) {
526
- this.parser = A, this.name = y.KHR_MATERIALS_ANISOTROPY;
527
- }
528
- getMaterialType(A) {
529
- const a = this.parser.json.materials[A];
530
- return !a.extensions || !a.extensions[this.name] ? null : W;
531
- }
532
- extendMaterialParams(A, e) {
533
- const a = this.parser, t = a.json.materials[A];
534
- if (!t.extensions || !t.extensions[this.name])
535
- return Promise.resolve();
536
- const i = [], s = t.extensions[this.name];
537
- return s.anisotropyStrength !== void 0 && (e.anisotropy = s.anisotropyStrength), s.anisotropyRotation !== void 0 && (e.anisotropyRotation = s.anisotropyRotation), s.anisotropyTexture !== void 0 && i.push(a.assignTexture(e, "anisotropyMap", s.anisotropyTexture)), Promise.all(i);
538
- }
539
- }
540
- class ya {
541
- constructor(A) {
542
- this.parser = A, this.name = y.KHR_TEXTURE_BASISU;
543
- }
544
- loadTexture(A) {
545
- const e = this.parser, a = e.json, t = a.textures[A];
546
- if (!t.extensions || !t.extensions[this.name])
547
- return null;
548
- const i = t.extensions[this.name], s = e.options.ktx2Loader;
549
- if (!s) {
550
- if (a.extensionsRequired && a.extensionsRequired.indexOf(this.name) >= 0)
551
- throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");
552
- return null;
553
- }
554
- return e.loadTextureImage(A, i.source, s);
555
- }
556
- }
557
- class Ga {
558
- constructor(A) {
559
- this.parser = A, this.name = y.EXT_TEXTURE_WEBP, this.isSupported = null;
560
- }
561
- loadTexture(A) {
562
- const e = this.name, a = this.parser, t = a.json, i = t.textures[A];
563
- if (!i.extensions || !i.extensions[e])
564
- return null;
565
- const s = i.extensions[e], o = t.images[s.source];
566
- let r = a.textureLoader;
567
- if (o.uri) {
568
- const c = a.options.manager.getHandler(o.uri);
569
- c !== null && (r = c);
570
- }
571
- return this.detectSupport().then(function(c) {
572
- if (c) return a.loadTextureImage(A, s.source, r);
573
- if (t.extensionsRequired && t.extensionsRequired.indexOf(e) >= 0)
574
- throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");
575
- return a.loadTexture(A);
576
- });
577
- }
578
- detectSupport() {
579
- return this.isSupported || (this.isSupported = new Promise(function(A) {
580
- const e = new Image();
581
- e.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", e.onload = e.onerror = function() {
582
- A(e.height === 1);
583
- };
584
- })), this.isSupported;
585
- }
586
- }
587
- class xa {
588
- constructor(A) {
589
- this.parser = A, this.name = y.EXT_TEXTURE_AVIF, this.isSupported = null;
590
- }
591
- loadTexture(A) {
592
- const e = this.name, a = this.parser, t = a.json, i = t.textures[A];
593
- if (!i.extensions || !i.extensions[e])
594
- return null;
595
- const s = i.extensions[e], o = t.images[s.source];
596
- let r = a.textureLoader;
597
- if (o.uri) {
598
- const c = a.options.manager.getHandler(o.uri);
599
- c !== null && (r = c);
600
- }
601
- return this.detectSupport().then(function(c) {
602
- if (c) return a.loadTextureImage(A, s.source, r);
603
- if (t.extensionsRequired && t.extensionsRequired.indexOf(e) >= 0)
604
- throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");
605
- return a.loadTexture(A);
606
- });
607
- }
608
- detectSupport() {
609
- return this.isSupported || (this.isSupported = new Promise(function(A) {
610
- const e = new Image();
611
- e.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", e.onload = e.onerror = function() {
612
- A(e.height === 1);
613
- };
614
- })), this.isSupported;
615
- }
616
- }
617
- class Ta {
618
- constructor(A) {
619
- this.name = y.EXT_MESHOPT_COMPRESSION, this.parser = A;
620
- }
621
- loadBufferView(A) {
622
- const e = this.parser.json, a = e.bufferViews[A];
623
- if (a.extensions && a.extensions[this.name]) {
624
- const t = a.extensions[this.name], i = this.parser.getDependency("buffer", t.buffer), s = this.parser.options.meshoptDecoder;
625
- if (!s || !s.supported) {
626
- if (e.extensionsRequired && e.extensionsRequired.indexOf(this.name) >= 0)
627
- throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");
628
- return null;
629
- }
630
- return i.then(function(o) {
631
- const r = t.byteOffset || 0, c = t.byteLength || 0, I = t.count, g = t.byteStride, B = new Uint8Array(o, r, c);
632
- return s.decodeGltfBufferAsync ? s.decodeGltfBufferAsync(I, g, B, t.mode, t.filter).then(function(C) {
633
- return C.buffer;
634
- }) : s.ready.then(function() {
635
- const C = new ArrayBuffer(I * g);
636
- return s.decodeGltfBuffer(new Uint8Array(C), I, g, B, t.mode, t.filter), C;
637
- });
638
- });
639
- } else
640
- return null;
641
- }
642
- }
643
- class La {
644
- constructor(A) {
645
- this.name = y.EXT_MESH_GPU_INSTANCING, this.parser = A;
646
- }
647
- createNodeMesh(A) {
648
- const e = this.parser.json, a = e.nodes[A];
649
- if (!a.extensions || !a.extensions[this.name] || a.mesh === void 0)
650
- return null;
651
- const t = e.meshes[a.mesh];
652
- for (const c of t.primitives)
653
- if (c.mode !== O.TRIANGLES && c.mode !== O.TRIANGLE_STRIP && c.mode !== O.TRIANGLE_FAN && c.mode !== void 0)
654
- return null;
655
- const s = a.extensions[this.name].attributes, o = [], r = {};
656
- for (const c in s)
657
- o.push(this.parser.getDependency("accessor", s[c]).then((I) => (r[c] = I, r[c])));
658
- return o.length < 1 ? null : (o.push(this.parser.createNodeMesh(A)), Promise.all(o).then((c) => {
659
- const I = c.pop(), g = I.isGroup ? I.children : [I], B = c[0].count, C = [];
660
- for (const f of g) {
661
- const d = new yA(), p = new CA(), E = new xe(), l = new CA(1, 1, 1), h = new ut(f.geometry, f.material, B);
662
- for (let u = 0; u < B; u++)
663
- r.TRANSLATION && p.fromBufferAttribute(r.TRANSLATION, u), r.ROTATION && E.fromBufferAttribute(r.ROTATION, u), r.SCALE && l.fromBufferAttribute(r.SCALE, u), h.setMatrixAt(u, d.compose(p, E, l));
664
- for (const u in r)
665
- if (u === "_COLOR_0") {
666
- const k = r[u];
667
- h.instanceColor = new mt(k.array, k.itemSize, k.normalized);
668
- } else u !== "TRANSLATION" && u !== "ROTATION" && u !== "SCALE" && f.geometry.setAttribute(u, r[u]);
669
- ie.prototype.copy.call(h, f), this.parser.assignFinalMaterial(h), C.push(h);
670
- }
671
- return I.isGroup ? (I.clear(), I.add(...C), I) : C[0];
672
- }));
673
- }
674
- }
675
- const Oe = "glTF", QA = 12, me = { JSON: 1313821514, BIN: 5130562 };
676
- class Ma {
677
- constructor(A) {
678
- this.name = y.KHR_BINARY_GLTF, this.content = null, this.body = null;
679
- const e = new DataView(A, 0, QA), a = new TextDecoder();
680
- if (this.header = {
681
- magic: a.decode(new Uint8Array(A.slice(0, 4))),
682
- version: e.getUint32(4, !0),
683
- length: e.getUint32(8, !0)
684
- }, this.header.magic !== Oe)
685
- throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
686
- if (this.header.version < 2)
687
- throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
688
- const t = this.header.length - QA, i = new DataView(A, QA);
689
- let s = 0;
690
- for (; s < t; ) {
691
- const o = i.getUint32(s, !0);
692
- s += 4;
693
- const r = i.getUint32(s, !0);
694
- if (s += 4, r === me.JSON) {
695
- const c = new Uint8Array(A, QA + s, o);
696
- this.content = a.decode(c);
697
- } else if (r === me.BIN) {
698
- const c = QA + s;
699
- this.body = A.slice(c, c + o);
700
- }
701
- s += o;
702
- }
703
- if (this.content === null)
704
- throw new Error("THREE.GLTFLoader: JSON content not found.");
705
- }
706
- }
707
- class Na {
708
- constructor(A, e) {
709
- if (!e)
710
- throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
711
- this.name = y.KHR_DRACO_MESH_COMPRESSION, this.json = A, this.dracoLoader = e, this.dracoLoader.preload();
712
- }
713
- decodePrimitive(A, e) {
714
- const a = this.json, t = this.dracoLoader, i = A.extensions[this.name].bufferView, s = A.extensions[this.name].attributes, o = {}, r = {}, c = {};
715
- for (const I in s) {
716
- const g = ZA[I] || I.toLowerCase();
717
- o[g] = s[I];
718
- }
719
- for (const I in A.attributes) {
720
- const g = ZA[I] || I.toLowerCase();
721
- if (s[I] !== void 0) {
722
- const B = a.accessors[A.attributes[I]], C = fA[B.componentType];
723
- c[g] = C.name, r[g] = B.normalized === !0;
724
- }
725
- }
726
- return e.getDependency("bufferView", i).then(function(I) {
727
- return new Promise(function(g, B) {
728
- t.decodeDracoFile(I, function(C) {
729
- for (const f in C.attributes) {
730
- const d = C.attributes[f], p = r[f];
731
- p !== void 0 && (d.normalized = p);
732
- }
733
- g(C);
734
- }, o, c, Y, B);
735
- });
736
- });
737
- }
738
- }
739
- class Ua {
740
- constructor() {
741
- this.name = y.KHR_TEXTURE_TRANSFORM;
742
- }
743
- extendTexture(A, e) {
744
- return (e.texCoord === void 0 || e.texCoord === A.channel) && e.offset === void 0 && e.rotation === void 0 && e.scale === void 0 || (A = A.clone(), e.texCoord !== void 0 && (A.channel = e.texCoord), e.offset !== void 0 && A.offset.fromArray(e.offset), e.rotation !== void 0 && (A.rotation = e.rotation), e.scale !== void 0 && A.repeat.fromArray(e.scale), A.needsUpdate = !0), A;
745
- }
746
- }
747
- class _a {
748
- constructor() {
749
- this.name = y.KHR_MESH_QUANTIZATION;
750
- }
751
- }
752
- class ve extends zt {
753
- constructor(A, e, a, t) {
754
- super(A, e, a, t);
755
- }
756
- copySampleValue_(A) {
757
- const e = this.resultBuffer, a = this.sampleValues, t = this.valueSize, i = A * t * 3 + t;
758
- for (let s = 0; s !== t; s++)
759
- e[s] = a[i + s];
760
- return e;
761
- }
762
- interpolate_(A, e, a, t) {
763
- const i = this.resultBuffer, s = this.sampleValues, o = this.valueSize, r = o * 2, c = o * 3, I = t - e, g = (a - e) / I, B = g * g, C = B * g, f = A * c, d = f - c, p = -2 * C + 3 * B, E = C - B, l = 1 - p, h = E - B + g;
764
- for (let u = 0; u !== o; u++) {
765
- const k = s[d + u + o], R = s[d + u + r] * I, G = s[f + u + o], M = s[f + u] * I;
766
- i[u] = l * k + h * R + p * G + E * M;
767
- }
768
- return i;
769
- }
770
- }
771
- const qa = new xe();
772
- class Ha extends ve {
773
- interpolate_(A, e, a, t) {
774
- const i = super.interpolate_(A, e, a, t);
775
- return qa.fromArray(i).normalize().toArray(i), i;
776
- }
777
- }
778
- const O = {
779
- FLOAT: 5126,
780
- //FLOAT_MAT2: 35674,
781
- FLOAT_MAT3: 35675,
782
- FLOAT_MAT4: 35676,
783
- FLOAT_VEC2: 35664,
784
- FLOAT_VEC3: 35665,
785
- FLOAT_VEC4: 35666,
786
- LINEAR: 9729,
787
- REPEAT: 10497,
788
- SAMPLER_2D: 35678,
789
- POINTS: 0,
790
- LINES: 1,
791
- LINE_LOOP: 2,
792
- LINE_STRIP: 3,
793
- TRIANGLES: 4,
794
- TRIANGLE_STRIP: 5,
795
- TRIANGLE_FAN: 6,
796
- UNSIGNED_BYTE: 5121,
797
- UNSIGNED_SHORT: 5123
798
- }, fA = {
799
- 5120: Int8Array,
800
- 5121: Uint8Array,
801
- 5122: Int16Array,
802
- 5123: Uint16Array,
803
- 5125: Uint32Array,
804
- 5126: Float32Array
805
- }, we = {
806
- 9728: vt,
807
- 9729: GA,
808
- 9984: Jt,
809
- 9985: jt,
810
- 9986: Kt,
811
- 9987: se
812
- }, De = {
813
- 33071: Ue,
814
- 33648: _e,
815
- 10497: xA
816
- }, UA = {
817
- SCALAR: 1,
818
- VEC2: 2,
819
- VEC3: 3,
820
- VEC4: 4,
821
- MAT2: 4,
822
- MAT3: 9,
823
- MAT4: 16
824
- }, ZA = {
825
- POSITION: "position",
826
- NORMAL: "normal",
827
- TANGENT: "tangent",
828
- TEXCOORD_0: "uv",
829
- TEXCOORD_1: "uv1",
830
- TEXCOORD_2: "uv2",
831
- TEXCOORD_3: "uv3",
832
- COLOR_0: "color",
833
- WEIGHTS_0: "skinWeight",
834
- JOINTS_0: "skinIndex"
835
- }, sA = {
836
- scale: "scale",
837
- translation: "position",
838
- rotation: "quaternion",
839
- weights: "morphTargetInfluences"
840
- }, Oa = {
841
- CUBICSPLINE: void 0,
842
- // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
843
- // keyframe track will be initialized with a default interpolation type, then modified.
844
- LINEAR: Ne,
845
- STEP: Pt
846
- }, _A = {
847
- OPAQUE: "OPAQUE",
848
- MASK: "MASK",
849
- BLEND: "BLEND"
850
- };
851
- function va(n) {
852
- return n.DefaultMaterial === void 0 && (n.DefaultMaterial = new Le({
853
- color: 16777215,
854
- emissive: 0,
855
- metalness: 1,
856
- roughness: 1,
857
- transparent: !1,
858
- depthTest: !0,
859
- side: Yt
860
- })), n.DefaultMaterial;
861
- }
862
- function gA(n, A, e) {
863
- for (const a in e.extensions)
864
- n[a] === void 0 && (A.userData.gltfExtensions = A.userData.gltfExtensions || {}, A.userData.gltfExtensions[a] = e.extensions[a]);
865
- }
866
- function tA(n, A) {
867
- A.extras !== void 0 && (typeof A.extras == "object" ? Object.assign(n.userData, A.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + A.extras));
868
- }
869
- function Ja(n, A, e) {
870
- let a = !1, t = !1, i = !1;
871
- for (let c = 0, I = A.length; c < I; c++) {
872
- const g = A[c];
873
- if (g.POSITION !== void 0 && (a = !0), g.NORMAL !== void 0 && (t = !0), g.COLOR_0 !== void 0 && (i = !0), a && t && i) break;
874
- }
875
- if (!a && !t && !i) return Promise.resolve(n);
876
- const s = [], o = [], r = [];
877
- for (let c = 0, I = A.length; c < I; c++) {
878
- const g = A[c];
879
- if (a) {
880
- const B = g.POSITION !== void 0 ? e.getDependency("accessor", g.POSITION) : n.attributes.position;
881
- s.push(B);
882
- }
883
- if (t) {
884
- const B = g.NORMAL !== void 0 ? e.getDependency("accessor", g.NORMAL) : n.attributes.normal;
885
- o.push(B);
886
- }
887
- if (i) {
888
- const B = g.COLOR_0 !== void 0 ? e.getDependency("accessor", g.COLOR_0) : n.attributes.color;
889
- r.push(B);
890
- }
891
- }
892
- return Promise.all([
893
- Promise.all(s),
894
- Promise.all(o),
895
- Promise.all(r)
896
- ]).then(function(c) {
897
- const I = c[0], g = c[1], B = c[2];
898
- return a && (n.morphAttributes.position = I), t && (n.morphAttributes.normal = g), i && (n.morphAttributes.color = B), n.morphTargetsRelative = !0, n;
899
- });
900
- }
901
- function ja(n, A) {
902
- if (n.updateMorphTargets(), A.weights !== void 0)
903
- for (let e = 0, a = A.weights.length; e < a; e++)
904
- n.morphTargetInfluences[e] = A.weights[e];
905
- if (A.extras && Array.isArray(A.extras.targetNames)) {
906
- const e = A.extras.targetNames;
907
- if (n.morphTargetInfluences.length === e.length) {
908
- n.morphTargetDictionary = {};
909
- for (let a = 0, t = e.length; a < t; a++)
910
- n.morphTargetDictionary[e[a]] = a;
911
- } else
912
- console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
913
- }
914
- }
915
- function Ka(n) {
916
- let A;
917
- const e = n.extensions && n.extensions[y.KHR_DRACO_MESH_COMPRESSION];
918
- if (e ? A = "draco:" + e.bufferView + ":" + e.indices + ":" + qA(e.attributes) : A = n.indices + ":" + qA(n.attributes) + ":" + n.mode, n.targets !== void 0)
919
- for (let a = 0, t = n.targets.length; a < t; a++)
920
- A += ":" + qA(n.targets[a]);
921
- return A;
922
- }
923
- function qA(n) {
924
- let A = "";
925
- const e = Object.keys(n).sort();
926
- for (let a = 0, t = e.length; a < t; a++)
927
- A += e[a] + ":" + n[e[a]] + ";";
928
- return A;
929
- }
930
- function $A(n) {
931
- switch (n) {
932
- case Int8Array:
933
- return 1 / 127;
934
- case Uint8Array:
935
- return 1 / 255;
936
- case Int16Array:
937
- return 1 / 32767;
938
- case Uint16Array:
939
- return 1 / 65535;
940
- default:
941
- throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
942
- }
943
- }
944
- function Pa(n) {
945
- return n.search(/\.jpe?g($|\?)/i) > 0 || n.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : n.search(/\.webp($|\?)/i) > 0 || n.search(/^data\:image\/webp/) === 0 ? "image/webp" : "image/png";
946
- }
947
- const Ya = new yA();
948
- class Wa {
949
- constructor(A = {}, e = {}) {
950
- this.json = A, this.extensions = {}, this.plugins = {}, this.options = e, this.cache = new fa(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
951
- let a = !1, t = -1, i = !1, s = -1;
952
- if (typeof navigator < "u") {
953
- const o = navigator.userAgent;
954
- a = /^((?!chrome|android).)*safari/i.test(o) === !0;
955
- const r = o.match(/Version\/(\d+)/);
956
- t = a && r ? parseInt(r[1], 10) : -1, i = o.indexOf("Firefox") > -1, s = i ? o.match(/Firefox\/([0-9]+)\./)[1] : -1;
957
- }
958
- typeof createImageBitmap > "u" || a && t < 17 || i && s < 98 ? this.textureLoader = new Te(this.options.manager) : this.textureLoader = new wt(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new aA(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
959
- }
960
- setExtensions(A) {
961
- this.extensions = A;
962
- }
963
- setPlugins(A) {
964
- this.plugins = A;
965
- }
966
- parse(A, e) {
967
- const a = this, t = this.json, i = this.extensions;
968
- this.cache.removeAll(), this.nodeCache = {}, this._invokeAll(function(s) {
969
- return s._markDefs && s._markDefs();
970
- }), Promise.all(this._invokeAll(function(s) {
971
- return s.beforeRoot && s.beforeRoot();
972
- })).then(function() {
973
- return Promise.all([
974
- a.getDependencies("scene"),
975
- a.getDependencies("animation"),
976
- a.getDependencies("camera")
977
- ]);
978
- }).then(function(s) {
979
- const o = {
980
- scene: s[0][t.scene || 0],
981
- scenes: s[0],
982
- animations: s[1],
983
- cameras: s[2],
984
- asset: t.asset,
985
- parser: a,
986
- userData: {}
987
- };
988
- return gA(i, o, t), tA(o, t), Promise.all(a._invokeAll(function(r) {
989
- return r.afterRoot && r.afterRoot(o);
990
- })).then(function() {
991
- for (const r of o.scenes)
992
- r.updateMatrixWorld();
993
- A(o);
994
- });
995
- }).catch(e);
996
- }
997
- /**
998
- * Marks the special nodes/meshes in json for efficient parse.
999
- */
1000
- _markDefs() {
1001
- const A = this.json.nodes || [], e = this.json.skins || [], a = this.json.meshes || [];
1002
- for (let t = 0, i = e.length; t < i; t++) {
1003
- const s = e[t].joints;
1004
- for (let o = 0, r = s.length; o < r; o++)
1005
- A[s[o]].isBone = !0;
1006
- }
1007
- for (let t = 0, i = A.length; t < i; t++) {
1008
- const s = A[t];
1009
- s.mesh !== void 0 && (this._addNodeRef(this.meshCache, s.mesh), s.skin !== void 0 && (a[s.mesh].isSkinnedMesh = !0)), s.camera !== void 0 && this._addNodeRef(this.cameraCache, s.camera);
1010
- }
1011
- }
1012
- /**
1013
- * Counts references to shared node / Object3D resources. These resources
1014
- * can be reused, or "instantiated", at multiple nodes in the scene
1015
- * hierarchy. Mesh, Camera, and Light instances are instantiated and must
1016
- * be marked. Non-scenegraph resources (like Materials, Geometries, and
1017
- * Textures) can be reused directly and are not marked here.
1018
- *
1019
- * Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
1020
- */
1021
- _addNodeRef(A, e) {
1022
- e !== void 0 && (A.refs[e] === void 0 && (A.refs[e] = A.uses[e] = 0), A.refs[e]++);
1023
- }
1024
- /** Returns a reference to a shared resource, cloning it if necessary. */
1025
- _getNodeRef(A, e, a) {
1026
- if (A.refs[e] <= 1) return a;
1027
- const t = a.clone(), i = (s, o) => {
1028
- const r = this.associations.get(s);
1029
- r != null && this.associations.set(o, r);
1030
- for (const [c, I] of s.children.entries())
1031
- i(I, o.children[c]);
1032
- };
1033
- return i(a, t), t.name += "_instance_" + A.uses[e]++, t;
1034
- }
1035
- _invokeOne(A) {
1036
- const e = Object.values(this.plugins);
1037
- e.push(this);
1038
- for (let a = 0; a < e.length; a++) {
1039
- const t = A(e[a]);
1040
- if (t) return t;
1041
- }
1042
- return null;
1043
- }
1044
- _invokeAll(A) {
1045
- const e = Object.values(this.plugins);
1046
- e.unshift(this);
1047
- const a = [];
1048
- for (let t = 0; t < e.length; t++) {
1049
- const i = A(e[t]);
1050
- i && a.push(i);
1051
- }
1052
- return a;
1053
- }
1054
- /**
1055
- * Requests the specified dependency asynchronously, with caching.
1056
- * @param {string} type
1057
- * @param {number} index
1058
- * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}
1059
- */
1060
- getDependency(A, e) {
1061
- const a = A + ":" + e;
1062
- let t = this.cache.get(a);
1063
- if (!t) {
1064
- switch (A) {
1065
- case "scene":
1066
- t = this.loadScene(e);
1067
- break;
1068
- case "node":
1069
- t = this._invokeOne(function(i) {
1070
- return i.loadNode && i.loadNode(e);
1071
- });
1072
- break;
1073
- case "mesh":
1074
- t = this._invokeOne(function(i) {
1075
- return i.loadMesh && i.loadMesh(e);
1076
- });
1077
- break;
1078
- case "accessor":
1079
- t = this.loadAccessor(e);
1080
- break;
1081
- case "bufferView":
1082
- t = this._invokeOne(function(i) {
1083
- return i.loadBufferView && i.loadBufferView(e);
1084
- });
1085
- break;
1086
- case "buffer":
1087
- t = this.loadBuffer(e);
1088
- break;
1089
- case "material":
1090
- t = this._invokeOne(function(i) {
1091
- return i.loadMaterial && i.loadMaterial(e);
1092
- });
1093
- break;
1094
- case "texture":
1095
- t = this._invokeOne(function(i) {
1096
- return i.loadTexture && i.loadTexture(e);
1097
- });
1098
- break;
1099
- case "skin":
1100
- t = this.loadSkin(e);
1101
- break;
1102
- case "animation":
1103
- t = this._invokeOne(function(i) {
1104
- return i.loadAnimation && i.loadAnimation(e);
1105
- });
1106
- break;
1107
- case "camera":
1108
- t = this.loadCamera(e);
1109
- break;
1110
- default:
1111
- if (t = this._invokeOne(function(i) {
1112
- return i != this && i.getDependency && i.getDependency(A, e);
1113
- }), !t)
1114
- throw new Error("Unknown type: " + A);
1115
- break;
1116
- }
1117
- this.cache.add(a, t);
1118
- }
1119
- return t;
1120
- }
1121
- /**
1122
- * Requests all dependencies of the specified type asynchronously, with caching.
1123
- * @param {string} type
1124
- * @return {Promise<Array<Object>>}
1125
- */
1126
- getDependencies(A) {
1127
- let e = this.cache.get(A);
1128
- if (!e) {
1129
- const a = this, t = this.json[A + (A === "mesh" ? "es" : "s")] || [];
1130
- e = Promise.all(t.map(function(i, s) {
1131
- return a.getDependency(A, s);
1132
- })), this.cache.add(A, e);
1133
- }
1134
- return e;
1135
- }
1136
- /**
1137
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
1138
- * @param {number} bufferIndex
1139
- * @return {Promise<ArrayBuffer>}
1140
- */
1141
- loadBuffer(A) {
1142
- const e = this.json.buffers[A], a = this.fileLoader;
1143
- if (e.type && e.type !== "arraybuffer")
1144
- throw new Error("THREE.GLTFLoader: " + e.type + " buffer type is not supported.");
1145
- if (e.uri === void 0 && A === 0)
1146
- return Promise.resolve(this.extensions[y.KHR_BINARY_GLTF].body);
1147
- const t = this.options;
1148
- return new Promise(function(i, s) {
1149
- a.load(mA.resolveURL(e.uri, t.path), i, void 0, function() {
1150
- s(new Error('THREE.GLTFLoader: Failed to load buffer "' + e.uri + '".'));
1151
- });
1152
- });
1153
- }
1154
- /**
1155
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
1156
- * @param {number} bufferViewIndex
1157
- * @return {Promise<ArrayBuffer>}
1158
- */
1159
- loadBufferView(A) {
1160
- const e = this.json.bufferViews[A];
1161
- return this.getDependency("buffer", e.buffer).then(function(a) {
1162
- const t = e.byteLength || 0, i = e.byteOffset || 0;
1163
- return a.slice(i, i + t);
1164
- });
1165
- }
1166
- /**
1167
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors
1168
- * @param {number} accessorIndex
1169
- * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}
1170
- */
1171
- loadAccessor(A) {
1172
- const e = this, a = this.json, t = this.json.accessors[A];
1173
- if (t.bufferView === void 0 && t.sparse === void 0) {
1174
- const s = UA[t.type], o = fA[t.componentType], r = t.normalized === !0, c = new o(t.count * s);
1175
- return Promise.resolve(new X(c, s, r));
1176
- }
1177
- const i = [];
1178
- return t.bufferView !== void 0 ? i.push(this.getDependency("bufferView", t.bufferView)) : i.push(null), t.sparse !== void 0 && (i.push(this.getDependency("bufferView", t.sparse.indices.bufferView)), i.push(this.getDependency("bufferView", t.sparse.values.bufferView))), Promise.all(i).then(function(s) {
1179
- const o = s[0], r = UA[t.type], c = fA[t.componentType], I = c.BYTES_PER_ELEMENT, g = I * r, B = t.byteOffset || 0, C = t.bufferView !== void 0 ? a.bufferViews[t.bufferView].byteStride : void 0, f = t.normalized === !0;
1180
- let d, p;
1181
- if (C && C !== g) {
1182
- const E = Math.floor(B / C), l = "InterleavedBuffer:" + t.bufferView + ":" + t.componentType + ":" + E + ":" + t.count;
1183
- let h = e.cache.get(l);
1184
- h || (d = new c(o, E * C, t.count * C / I), h = new Dt(d, C / I), e.cache.add(l, h)), p = new kt(h, r, B % C / I, f);
1185
- } else
1186
- o === null ? d = new c(t.count * r) : d = new c(o, B, t.count * r), p = new X(d, r, f);
1187
- if (t.sparse !== void 0) {
1188
- const E = UA.SCALAR, l = fA[t.sparse.indices.componentType], h = t.sparse.indices.byteOffset || 0, u = t.sparse.values.byteOffset || 0, k = new l(s[1], h, t.sparse.count * E), R = new c(s[2], u, t.sparse.count * r);
1189
- o !== null && (p = new X(p.array.slice(), p.itemSize, p.normalized));
1190
- for (let G = 0, M = k.length; G < M; G++) {
1191
- const b = k[G];
1192
- if (p.setX(b, R[G * r]), r >= 2 && p.setY(b, R[G * r + 1]), r >= 3 && p.setZ(b, R[G * r + 2]), r >= 4 && p.setW(b, R[G * r + 3]), r >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
1193
- }
1194
- }
1195
- return p;
1196
- });
1197
- }
1198
- /**
1199
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures
1200
- * @param {number} textureIndex
1201
- * @return {Promise<THREE.Texture|null>}
1202
- */
1203
- loadTexture(A) {
1204
- const e = this.json, a = this.options, i = e.textures[A].source, s = e.images[i];
1205
- let o = this.textureLoader;
1206
- if (s.uri) {
1207
- const r = a.manager.getHandler(s.uri);
1208
- r !== null && (o = r);
1209
- }
1210
- return this.loadTextureImage(A, i, o);
1211
- }
1212
- loadTextureImage(A, e, a) {
1213
- const t = this, i = this.json, s = i.textures[A], o = i.images[e], r = (o.uri || o.bufferView) + ":" + s.sampler;
1214
- if (this.textureCache[r])
1215
- return this.textureCache[r];
1216
- const c = this.loadImageSource(e, a).then(function(I) {
1217
- I.flipY = !1, I.name = s.name || o.name || "", I.name === "" && typeof o.uri == "string" && o.uri.startsWith("data:image/") === !1 && (I.name = o.uri);
1218
- const B = (i.samplers || {})[s.sampler] || {};
1219
- return I.magFilter = we[B.magFilter] || GA, I.minFilter = we[B.minFilter] || se, I.wrapS = De[B.wrapS] || xA, I.wrapT = De[B.wrapT] || xA, t.associations.set(I, { textures: A }), I;
1220
- }).catch(function() {
1221
- return null;
1222
- });
1223
- return this.textureCache[r] = c, c;
1224
- }
1225
- loadImageSource(A, e) {
1226
- const a = this, t = this.json, i = this.options;
1227
- if (this.sourceCache[A] !== void 0)
1228
- return this.sourceCache[A].then((g) => g.clone());
1229
- const s = t.images[A], o = self.URL || self.webkitURL;
1230
- let r = s.uri || "", c = !1;
1231
- if (s.bufferView !== void 0)
1232
- r = a.getDependency("bufferView", s.bufferView).then(function(g) {
1233
- c = !0;
1234
- const B = new Blob([g], { type: s.mimeType });
1235
- return r = o.createObjectURL(B), r;
1236
- });
1237
- else if (s.uri === void 0)
1238
- throw new Error("THREE.GLTFLoader: Image " + A + " is missing URI and bufferView");
1239
- const I = Promise.resolve(r).then(function(g) {
1240
- return new Promise(function(B, C) {
1241
- let f = B;
1242
- e.isImageBitmapLoader === !0 && (f = function(d) {
1243
- const p = new fe(d);
1244
- p.needsUpdate = !0, B(p);
1245
- }), e.load(mA.resolveURL(g, i.path), f, void 0, C);
1246
- });
1247
- }).then(function(g) {
1248
- return c === !0 && o.revokeObjectURL(r), tA(g, s), g.userData.mimeType = s.mimeType || Pa(s.uri), g;
1249
- }).catch(function(g) {
1250
- throw console.error("THREE.GLTFLoader: Couldn't load texture", r), g;
1251
- });
1252
- return this.sourceCache[A] = I, I;
1253
- }
1254
- /**
1255
- * Asynchronously assigns a texture to the given material parameters.
1256
- * @param {Object} materialParams
1257
- * @param {string} mapName
1258
- * @param {Object} mapDef
1259
- * @return {Promise<Texture>}
1260
- */
1261
- assignTexture(A, e, a, t) {
1262
- const i = this;
1263
- return this.getDependency("texture", a.index).then(function(s) {
1264
- if (!s) return null;
1265
- if (a.texCoord !== void 0 && a.texCoord > 0 && (s = s.clone(), s.channel = a.texCoord), i.extensions[y.KHR_TEXTURE_TRANSFORM]) {
1266
- const o = a.extensions !== void 0 ? a.extensions[y.KHR_TEXTURE_TRANSFORM] : void 0;
1267
- if (o) {
1268
- const r = i.associations.get(s);
1269
- s = i.extensions[y.KHR_TEXTURE_TRANSFORM].extendTexture(s, o), i.associations.set(s, r);
1270
- }
1271
- }
1272
- return t !== void 0 && (s.colorSpace = t), A[e] = s, s;
1273
- });
1274
- }
1275
- /**
1276
- * Assigns final material to a Mesh, Line, or Points instance. The instance
1277
- * already has a material (generated from the glTF material options alone)
1278
- * but reuse of the same glTF material may require multiple threejs materials
1279
- * to accommodate different primitive types, defines, etc. New materials will
1280
- * be created if necessary, and reused from a cache.
1281
- * @param {Object3D} mesh Mesh, Line, or Points instance.
1282
- */
1283
- assignFinalMaterial(A) {
1284
- const e = A.geometry;
1285
- let a = A.material;
1286
- const t = e.attributes.tangent === void 0, i = e.attributes.color !== void 0, s = e.attributes.normal === void 0;
1287
- if (A.isPoints) {
1288
- const o = "PointsMaterial:" + a.uuid;
1289
- let r = this.cache.get(o);
1290
- r || (r = new Ft(), NA.prototype.copy.call(r, a), r.color.copy(a.color), r.map = a.map, r.sizeAttenuation = !1, this.cache.add(o, r)), a = r;
1291
- } else if (A.isLine) {
1292
- const o = "LineBasicMaterial:" + a.uuid;
1293
- let r = this.cache.get(o);
1294
- r || (r = new Rt(), NA.prototype.copy.call(r, a), r.color.copy(a.color), r.map = a.map, this.cache.add(o, r)), a = r;
1295
- }
1296
- if (t || i || s) {
1297
- let o = "ClonedMaterial:" + a.uuid + ":";
1298
- t && (o += "derivative-tangents:"), i && (o += "vertex-colors:"), s && (o += "flat-shading:");
1299
- let r = this.cache.get(o);
1300
- r || (r = a.clone(), i && (r.vertexColors = !0), s && (r.flatShading = !0), t && (r.normalScale && (r.normalScale.y *= -1), r.clearcoatNormalScale && (r.clearcoatNormalScale.y *= -1)), this.cache.add(o, r), this.associations.set(r, this.associations.get(a))), a = r;
1301
- }
1302
- A.material = a;
1303
- }
1304
- getMaterialType() {
1305
- return Le;
1306
- }
1307
- /**
1308
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
1309
- * @param {number} materialIndex
1310
- * @return {Promise<Material>}
1311
- */
1312
- loadMaterial(A) {
1313
- const e = this, a = this.json, t = this.extensions, i = a.materials[A];
1314
- let s;
1315
- const o = {}, r = i.extensions || {}, c = [];
1316
- if (r[y.KHR_MATERIALS_UNLIT]) {
1317
- const g = t[y.KHR_MATERIALS_UNLIT];
1318
- s = g.getMaterialType(), c.push(g.extendParams(o, i, e));
1319
- } else {
1320
- const g = i.pbrMetallicRoughness || {};
1321
- if (o.color = new rA(1, 1, 1), o.opacity = 1, Array.isArray(g.baseColorFactor)) {
1322
- const B = g.baseColorFactor;
1323
- o.color.setRGB(B[0], B[1], B[2], Y), o.opacity = B[3];
1324
- }
1325
- g.baseColorTexture !== void 0 && c.push(e.assignTexture(o, "map", g.baseColorTexture, AA)), o.metalness = g.metallicFactor !== void 0 ? g.metallicFactor : 1, o.roughness = g.roughnessFactor !== void 0 ? g.roughnessFactor : 1, g.metallicRoughnessTexture !== void 0 && (c.push(e.assignTexture(o, "metalnessMap", g.metallicRoughnessTexture)), c.push(e.assignTexture(o, "roughnessMap", g.metallicRoughnessTexture))), s = this._invokeOne(function(B) {
1326
- return B.getMaterialType && B.getMaterialType(A);
1327
- }), c.push(Promise.all(this._invokeAll(function(B) {
1328
- return B.extendMaterialParams && B.extendMaterialParams(A, o);
1329
- })));
1330
- }
1331
- i.doubleSided === !0 && (o.side = St);
1332
- const I = i.alphaMode || _A.OPAQUE;
1333
- if (I === _A.BLEND ? (o.transparent = !0, o.depthWrite = !1) : (o.transparent = !1, I === _A.MASK && (o.alphaTest = i.alphaCutoff !== void 0 ? i.alphaCutoff : 0.5)), i.normalTexture !== void 0 && s !== hA && (c.push(e.assignTexture(o, "normalMap", i.normalTexture)), o.normalScale = new SA(1, 1), i.normalTexture.scale !== void 0)) {
1334
- const g = i.normalTexture.scale;
1335
- o.normalScale.set(g, g);
1336
- }
1337
- if (i.occlusionTexture !== void 0 && s !== hA && (c.push(e.assignTexture(o, "aoMap", i.occlusionTexture)), i.occlusionTexture.strength !== void 0 && (o.aoMapIntensity = i.occlusionTexture.strength)), i.emissiveFactor !== void 0 && s !== hA) {
1338
- const g = i.emissiveFactor;
1339
- o.emissive = new rA().setRGB(g[0], g[1], g[2], Y);
1340
- }
1341
- return i.emissiveTexture !== void 0 && s !== hA && c.push(e.assignTexture(o, "emissiveMap", i.emissiveTexture, AA)), Promise.all(c).then(function() {
1342
- const g = new s(o);
1343
- return i.name && (g.name = i.name), tA(g, i), e.associations.set(g, { materials: A }), i.extensions && gA(t, g, i), g;
1344
- });
1345
- }
1346
- /** When Object3D instances are targeted by animation, they need unique names. */
1347
- createUniqueName(A) {
1348
- const e = yt.sanitizeNodeName(A || "");
1349
- return e in this.nodeNamesUsed ? e + "_" + ++this.nodeNamesUsed[e] : (this.nodeNamesUsed[e] = 0, e);
1350
- }
1351
- /**
1352
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
1353
- *
1354
- * Creates BufferGeometries from primitives.
1355
- *
1356
- * @param {Array<GLTF.Primitive>} primitives
1357
- * @return {Promise<Array<BufferGeometry>>}
1358
- */
1359
- loadGeometries(A) {
1360
- const e = this, a = this.extensions, t = this.primitiveCache;
1361
- function i(o) {
1362
- return a[y.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o, e).then(function(r) {
1363
- return ke(r, o, e);
1364
- });
1365
- }
1366
- const s = [];
1367
- for (let o = 0, r = A.length; o < r; o++) {
1368
- const c = A[o], I = Ka(c), g = t[I];
1369
- if (g)
1370
- s.push(g.promise);
1371
- else {
1372
- let B;
1373
- c.extensions && c.extensions[y.KHR_DRACO_MESH_COMPRESSION] ? B = i(c) : B = ke(new ne(), c, e), t[I] = { primitive: c, promise: B }, s.push(B);
1374
- }
1375
- }
1376
- return Promise.all(s);
1377
- }
1378
- /**
1379
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes
1380
- * @param {number} meshIndex
1381
- * @return {Promise<Group|Mesh|SkinnedMesh>}
1382
- */
1383
- loadMesh(A) {
1384
- const e = this, a = this.json, t = this.extensions, i = a.meshes[A], s = i.primitives, o = [];
1385
- for (let r = 0, c = s.length; r < c; r++) {
1386
- const I = s[r].material === void 0 ? va(this.cache) : this.getDependency("material", s[r].material);
1387
- o.push(I);
1388
- }
1389
- return o.push(e.loadGeometries(s)), Promise.all(o).then(function(r) {
1390
- const c = r.slice(0, r.length - 1), I = r[r.length - 1], g = [];
1391
- for (let C = 0, f = I.length; C < f; C++) {
1392
- const d = I[C], p = s[C];
1393
- let E;
1394
- const l = c[C];
1395
- if (p.mode === O.TRIANGLES || p.mode === O.TRIANGLE_STRIP || p.mode === O.TRIANGLE_FAN || p.mode === void 0)
1396
- E = i.isSkinnedMesh === !0 ? new Gt(d, l) : new Me(d, l), E.isSkinnedMesh === !0 && E.normalizeSkinWeights(), p.mode === O.TRIANGLE_STRIP ? E.geometry = ue(E.geometry, Ge) : p.mode === O.TRIANGLE_FAN && (E.geometry = ue(E.geometry, XA));
1397
- else if (p.mode === O.LINES)
1398
- E = new xt(d, l);
1399
- else if (p.mode === O.LINE_STRIP)
1400
- E = new Tt(d, l);
1401
- else if (p.mode === O.LINE_LOOP)
1402
- E = new Lt(d, l);
1403
- else if (p.mode === O.POINTS)
1404
- E = new Mt(d, l);
1405
- else
1406
- throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + p.mode);
1407
- Object.keys(E.geometry.morphAttributes).length > 0 && ja(E, i), E.name = e.createUniqueName(i.name || "mesh_" + A), tA(E, i), p.extensions && gA(t, E, p), e.assignFinalMaterial(E), g.push(E);
1408
- }
1409
- for (let C = 0, f = g.length; C < f; C++)
1410
- e.associations.set(g[C], {
1411
- meshes: A,
1412
- primitives: C
1413
- });
1414
- if (g.length === 1)
1415
- return i.extensions && gA(t, g[0], i), g[0];
1416
- const B = new kA();
1417
- i.extensions && gA(t, B, i), e.associations.set(B, { meshes: A });
1418
- for (let C = 0, f = g.length; C < f; C++)
1419
- B.add(g[C]);
1420
- return B;
1421
- });
1422
- }
1423
- /**
1424
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras
1425
- * @param {number} cameraIndex
1426
- * @return {Promise<THREE.Camera>}
1427
- */
1428
- loadCamera(A) {
1429
- let e;
1430
- const a = this.json.cameras[A], t = a[a.type];
1431
- if (!t) {
1432
- console.warn("THREE.GLTFLoader: Missing camera parameters.");
1433
- return;
1434
- }
1435
- return a.type === "perspective" ? e = new Nt(Ut.radToDeg(t.yfov), t.aspectRatio || 1, t.znear || 1, t.zfar || 2e6) : a.type === "orthographic" && (e = new _t(-t.xmag, t.xmag, t.ymag, -t.ymag, t.znear, t.zfar)), a.name && (e.name = this.createUniqueName(a.name)), tA(e, a), Promise.resolve(e);
1436
- }
1437
- /**
1438
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
1439
- * @param {number} skinIndex
1440
- * @return {Promise<Skeleton>}
1441
- */
1442
- loadSkin(A) {
1443
- const e = this.json.skins[A], a = [];
1444
- for (let t = 0, i = e.joints.length; t < i; t++)
1445
- a.push(this._loadNodeShallow(e.joints[t]));
1446
- return e.inverseBindMatrices !== void 0 ? a.push(this.getDependency("accessor", e.inverseBindMatrices)) : a.push(null), Promise.all(a).then(function(t) {
1447
- const i = t.pop(), s = t, o = [], r = [];
1448
- for (let c = 0, I = s.length; c < I; c++) {
1449
- const g = s[c];
1450
- if (g) {
1451
- o.push(g);
1452
- const B = new yA();
1453
- i !== null && B.fromArray(i.array, c * 16), r.push(B);
1454
- } else
1455
- console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', e.joints[c]);
1456
- }
1457
- return new qt(o, r);
1458
- });
1459
- }
1460
- /**
1461
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations
1462
- * @param {number} animationIndex
1463
- * @return {Promise<AnimationClip>}
1464
- */
1465
- loadAnimation(A) {
1466
- const e = this.json, a = this, t = e.animations[A], i = t.name ? t.name : "animation_" + A, s = [], o = [], r = [], c = [], I = [];
1467
- for (let g = 0, B = t.channels.length; g < B; g++) {
1468
- const C = t.channels[g], f = t.samplers[C.sampler], d = C.target, p = d.node, E = t.parameters !== void 0 ? t.parameters[f.input] : f.input, l = t.parameters !== void 0 ? t.parameters[f.output] : f.output;
1469
- d.node !== void 0 && (s.push(this.getDependency("node", p)), o.push(this.getDependency("accessor", E)), r.push(this.getDependency("accessor", l)), c.push(f), I.push(d));
1470
- }
1471
- return Promise.all([
1472
- Promise.all(s),
1473
- Promise.all(o),
1474
- Promise.all(r),
1475
- Promise.all(c),
1476
- Promise.all(I)
1477
- ]).then(function(g) {
1478
- const B = g[0], C = g[1], f = g[2], d = g[3], p = g[4], E = [];
1479
- for (let l = 0, h = B.length; l < h; l++) {
1480
- const u = B[l], k = C[l], R = f[l], G = d[l], M = p[l];
1481
- if (u === void 0) continue;
1482
- u.updateMatrix && u.updateMatrix();
1483
- const b = a._createAnimationTracks(u, k, R, G, M);
1484
- if (b)
1485
- for (let Q = 0; Q < b.length; Q++)
1486
- E.push(b[Q]);
1487
- }
1488
- return new Ht(i, void 0, E);
1489
- });
1490
- }
1491
- createNodeMesh(A) {
1492
- const e = this.json, a = this, t = e.nodes[A];
1493
- return t.mesh === void 0 ? null : a.getDependency("mesh", t.mesh).then(function(i) {
1494
- const s = a._getNodeRef(a.meshCache, t.mesh, i);
1495
- return t.weights !== void 0 && s.traverse(function(o) {
1496
- if (o.isMesh)
1497
- for (let r = 0, c = t.weights.length; r < c; r++)
1498
- o.morphTargetInfluences[r] = t.weights[r];
1499
- }), s;
1500
- });
1501
- }
1502
- /**
1503
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy
1504
- * @param {number} nodeIndex
1505
- * @return {Promise<Object3D>}
1506
- */
1507
- loadNode(A) {
1508
- const e = this.json, a = this, t = e.nodes[A], i = a._loadNodeShallow(A), s = [], o = t.children || [];
1509
- for (let c = 0, I = o.length; c < I; c++)
1510
- s.push(a.getDependency("node", o[c]));
1511
- const r = t.skin === void 0 ? Promise.resolve(null) : a.getDependency("skin", t.skin);
1512
- return Promise.all([
1513
- i,
1514
- Promise.all(s),
1515
- r
1516
- ]).then(function(c) {
1517
- const I = c[0], g = c[1], B = c[2];
1518
- B !== null && I.traverse(function(C) {
1519
- C.isSkinnedMesh && C.bind(B, Ya);
1520
- });
1521
- for (let C = 0, f = g.length; C < f; C++)
1522
- I.add(g[C]);
1523
- return I;
1524
- });
1525
- }
1526
- // ._loadNodeShallow() parses a single node.
1527
- // skin and child nodes are created and added in .loadNode() (no '_' prefix).
1528
- _loadNodeShallow(A) {
1529
- const e = this.json, a = this.extensions, t = this;
1530
- if (this.nodeCache[A] !== void 0)
1531
- return this.nodeCache[A];
1532
- const i = e.nodes[A], s = i.name ? t.createUniqueName(i.name) : "", o = [], r = t._invokeOne(function(c) {
1533
- return c.createNodeMesh && c.createNodeMesh(A);
1534
- });
1535
- return r && o.push(r), i.camera !== void 0 && o.push(t.getDependency("camera", i.camera).then(function(c) {
1536
- return t._getNodeRef(t.cameraCache, i.camera, c);
1537
- })), t._invokeAll(function(c) {
1538
- return c.createNodeAttachment && c.createNodeAttachment(A);
1539
- }).forEach(function(c) {
1540
- o.push(c);
1541
- }), this.nodeCache[A] = Promise.all(o).then(function(c) {
1542
- let I;
1543
- if (i.isBone === !0 ? I = new Ot() : c.length > 1 ? I = new kA() : c.length === 1 ? I = c[0] : I = new ie(), I !== c[0])
1544
- for (let g = 0, B = c.length; g < B; g++)
1545
- I.add(c[g]);
1546
- if (i.name && (I.userData.name = i.name, I.name = s), tA(I, i), i.extensions && gA(a, I, i), i.matrix !== void 0) {
1547
- const g = new yA();
1548
- g.fromArray(i.matrix), I.applyMatrix4(g);
1549
- } else
1550
- i.translation !== void 0 && I.position.fromArray(i.translation), i.rotation !== void 0 && I.quaternion.fromArray(i.rotation), i.scale !== void 0 && I.scale.fromArray(i.scale);
1551
- return t.associations.has(I) || t.associations.set(I, {}), t.associations.get(I).nodes = A, I;
1552
- }), this.nodeCache[A];
1553
- }
1554
- /**
1555
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes
1556
- * @param {number} sceneIndex
1557
- * @return {Promise<Group>}
1558
- */
1559
- loadScene(A) {
1560
- const e = this.extensions, a = this.json.scenes[A], t = this, i = new kA();
1561
- a.name && (i.name = t.createUniqueName(a.name)), tA(i, a), a.extensions && gA(e, i, a);
1562
- const s = a.nodes || [], o = [];
1563
- for (let r = 0, c = s.length; r < c; r++)
1564
- o.push(t.getDependency("node", s[r]));
1565
- return Promise.all(o).then(function(r) {
1566
- for (let I = 0, g = r.length; I < g; I++)
1567
- i.add(r[I]);
1568
- const c = (I) => {
1569
- const g = /* @__PURE__ */ new Map();
1570
- for (const [B, C] of t.associations)
1571
- (B instanceof NA || B instanceof fe) && g.set(B, C);
1572
- return I.traverse((B) => {
1573
- const C = t.associations.get(B);
1574
- C != null && g.set(B, C);
1575
- }), g;
1576
- };
1577
- return t.associations = c(i), i;
1578
- });
1579
- }
1580
- _createAnimationTracks(A, e, a, t, i) {
1581
- const s = [], o = A.name ? A.name : A.uuid, r = [];
1582
- sA[i.path] === sA.weights ? A.traverse(function(B) {
1583
- B.morphTargetInfluences && r.push(B.name ? B.name : B.uuid);
1584
- }) : r.push(o);
1585
- let c;
1586
- switch (sA[i.path]) {
1587
- case sA.weights:
1588
- c = Qe;
1589
- break;
1590
- case sA.rotation:
1591
- c = de;
1592
- break;
1593
- case sA.position:
1594
- case sA.scale:
1595
- c = Ee;
1596
- break;
1597
- default:
1598
- switch (a.itemSize) {
1599
- case 1:
1600
- c = Qe;
1601
- break;
1602
- case 2:
1603
- case 3:
1604
- default:
1605
- c = Ee;
1606
- break;
1607
- }
1608
- break;
1609
- }
1610
- const I = t.interpolation !== void 0 ? Oa[t.interpolation] : Ne, g = this._getArrayFromAccessor(a);
1611
- for (let B = 0, C = r.length; B < C; B++) {
1612
- const f = new c(
1613
- r[B] + "." + sA[i.path],
1614
- e.array,
1615
- g,
1616
- I
1617
- );
1618
- t.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(f), s.push(f);
1619
- }
1620
- return s;
1621
- }
1622
- _getArrayFromAccessor(A) {
1623
- let e = A.array;
1624
- if (A.normalized) {
1625
- const a = $A(e.constructor), t = new Float32Array(e.length);
1626
- for (let i = 0, s = e.length; i < s; i++)
1627
- t[i] = e[i] * a;
1628
- e = t;
1629
- }
1630
- return e;
1631
- }
1632
- _createCubicSplineTrackInterpolant(A) {
1633
- A.createInterpolant = function(a) {
1634
- const t = this instanceof de ? Ha : ve;
1635
- return new t(this.times, this.values, this.getValueSize() / 3, a);
1636
- }, A.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
1637
- }
1638
- }
1639
- function Va(n, A, e) {
1640
- const a = A.attributes, t = new Wt();
1641
- if (a.POSITION !== void 0) {
1642
- const o = e.json.accessors[a.POSITION], r = o.min, c = o.max;
1643
- if (r !== void 0 && c !== void 0) {
1644
- if (t.set(
1645
- new CA(r[0], r[1], r[2]),
1646
- new CA(c[0], c[1], c[2])
1647
- ), o.normalized) {
1648
- const I = $A(fA[o.componentType]);
1649
- t.min.multiplyScalar(I), t.max.multiplyScalar(I);
1650
- }
1651
- } else {
1652
- console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
1653
- return;
1654
- }
1655
- } else
1656
- return;
1657
- const i = A.targets;
1658
- if (i !== void 0) {
1659
- const o = new CA(), r = new CA();
1660
- for (let c = 0, I = i.length; c < I; c++) {
1661
- const g = i[c];
1662
- if (g.POSITION !== void 0) {
1663
- const B = e.json.accessors[g.POSITION], C = B.min, f = B.max;
1664
- if (C !== void 0 && f !== void 0) {
1665
- if (r.setX(Math.max(Math.abs(C[0]), Math.abs(f[0]))), r.setY(Math.max(Math.abs(C[1]), Math.abs(f[1]))), r.setZ(Math.max(Math.abs(C[2]), Math.abs(f[2]))), B.normalized) {
1666
- const d = $A(fA[B.componentType]);
1667
- r.multiplyScalar(d);
1668
- }
1669
- o.max(r);
1670
- } else
1671
- console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
1672
- }
1673
- }
1674
- t.expandByVector(o);
1675
- }
1676
- n.boundingBox = t;
1677
- const s = new Vt();
1678
- t.getCenter(s.center), s.radius = t.min.distanceTo(t.max) / 2, n.boundingSphere = s;
1679
- }
1680
- function ke(n, A, e) {
1681
- const a = A.attributes, t = [];
1682
- function i(s, o) {
1683
- return e.getDependency("accessor", s).then(function(r) {
1684
- n.setAttribute(o, r);
1685
- });
1686
- }
1687
- for (const s in a) {
1688
- const o = ZA[s] || s.toLowerCase();
1689
- o in n.attributes || t.push(i(a[s], o));
1690
- }
1691
- if (A.indices !== void 0 && !n.index) {
1692
- const s = e.getDependency("accessor", A.indices).then(function(o) {
1693
- n.setIndex(o);
1694
- });
1695
- t.push(s);
1696
- }
1697
- return le.workingColorSpace !== Y && "COLOR_0" in a && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`), tA(n, A), Va(n, A, e), Promise.all(t).then(function() {
1698
- return A.targets !== void 0 ? Ja(n, A.targets, e) : n;
1699
- });
1700
- }
1701
- const HA = /* @__PURE__ */ new WeakMap();
1702
- class za extends TA {
1703
- constructor(A) {
1704
- super(A), this.decoderPath = "", this.decoderConfig = {}, this.decoderBinary = null, this.decoderPending = null, this.workerLimit = 4, this.workerPool = [], this.workerNextTaskID = 1, this.workerSourceURL = "", this.defaultAttributeIDs = {
1705
- position: "POSITION",
1706
- normal: "NORMAL",
1707
- color: "COLOR",
1708
- uv: "TEX_COORD"
1709
- }, this.defaultAttributeTypes = {
1710
- position: "Float32Array",
1711
- normal: "Float32Array",
1712
- color: "Float32Array",
1713
- uv: "Float32Array"
1714
- };
1715
- }
1716
- setDecoderPath(A) {
1717
- return this.decoderPath = A, this;
1718
- }
1719
- setDecoderConfig(A) {
1720
- return this.decoderConfig = A, this;
1721
- }
1722
- setWorkerLimit(A) {
1723
- return this.workerLimit = A, this;
1724
- }
1725
- load(A, e, a, t) {
1726
- const i = new aA(this.manager);
1727
- i.setPath(this.path), i.setResponseType("arraybuffer"), i.setRequestHeader(this.requestHeader), i.setWithCredentials(this.withCredentials), i.load(A, (s) => {
1728
- this.parse(s, e, t);
1729
- }, a, t);
1730
- }
1731
- parse(A, e, a = () => {
1732
- }) {
1733
- this.decodeDracoFile(A, e, null, null, AA, a).catch(a);
1734
- }
1735
- decodeDracoFile(A, e, a, t, i = Y, s = () => {
1736
- }) {
1737
- const o = {
1738
- attributeIDs: a || this.defaultAttributeIDs,
1739
- attributeTypes: t || this.defaultAttributeTypes,
1740
- useUniqueIDs: !!a,
1741
- vertexColorSpace: i
1742
- };
1743
- return this.decodeGeometry(A, o).then(e).catch(s);
1744
- }
1745
- decodeGeometry(A, e) {
1746
- const a = JSON.stringify(e);
1747
- if (HA.has(A)) {
1748
- const r = HA.get(A);
1749
- if (r.key === a)
1750
- return r.promise;
1751
- if (A.byteLength === 0)
1752
- throw new Error(
1753
- "THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred."
1754
- );
1755
- }
1756
- let t;
1757
- const i = this.workerNextTaskID++, s = A.byteLength, o = this._getWorker(i, s).then((r) => (t = r, new Promise((c, I) => {
1758
- t._callbacks[i] = { resolve: c, reject: I }, t.postMessage({ type: "decode", id: i, taskConfig: e, buffer: A }, [A]);
1759
- }))).then((r) => this._createGeometry(r.geometry));
1760
- return o.catch(() => !0).then(() => {
1761
- t && i && this._releaseTask(t, i);
1762
- }), HA.set(A, {
1763
- key: a,
1764
- promise: o
1765
- }), o;
1766
- }
1767
- _createGeometry(A) {
1768
- const e = new ne();
1769
- A.index && e.setIndex(new X(A.index.array, 1));
1770
- for (let a = 0; a < A.attributes.length; a++) {
1771
- const t = A.attributes[a], i = t.name, s = t.array, o = t.itemSize, r = new X(s, o);
1772
- i === "color" && (this._assignVertexColorSpace(r, t.vertexColorSpace), r.normalized = !(s instanceof Float32Array)), e.setAttribute(i, r);
1773
- }
1774
- return e;
1775
- }
1776
- _assignVertexColorSpace(A, e) {
1777
- if (e !== AA) return;
1778
- const a = new rA();
1779
- for (let t = 0, i = A.count; t < i; t++)
1780
- a.fromBufferAttribute(A, t).convertSRGBToLinear(), A.setXYZ(t, a.r, a.g, a.b);
1781
- }
1782
- _loadLibrary(A, e) {
1783
- const a = new aA(this.manager);
1784
- return a.setPath(this.decoderPath), a.setResponseType(e), a.setWithCredentials(this.withCredentials), new Promise((t, i) => {
1785
- a.load(A, t, void 0, i);
1786
- });
1787
- }
1788
- preload() {
1789
- return this._initDecoder(), this;
1790
- }
1791
- _initDecoder() {
1792
- if (this.decoderPending) return this.decoderPending;
1793
- const A = typeof WebAssembly != "object" || this.decoderConfig.type === "js", e = [];
1794
- return A ? e.push(this._loadLibrary("draco_decoder.js", "text")) : (e.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), e.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(e).then((a) => {
1795
- const t = a[0];
1796
- A || (this.decoderConfig.wasmBinary = a[1]);
1797
- const i = Xa.toString(), s = [
1798
- "/* draco decoder */",
1799
- t,
1800
- "",
1801
- "/* worker */",
1802
- i.substring(i.indexOf("{") + 1, i.lastIndexOf("}"))
1803
- ].join(`
1804
- `);
1805
- this.workerSourceURL = URL.createObjectURL(new Blob([s]));
1806
- }), this.decoderPending;
1807
- }
1808
- _getWorker(A, e) {
1809
- return this._initDecoder().then(() => {
1810
- if (this.workerPool.length < this.workerLimit) {
1811
- const t = new Worker(this.workerSourceURL);
1812
- t._callbacks = {}, t._taskCosts = {}, t._taskLoad = 0, t.postMessage({ type: "init", decoderConfig: this.decoderConfig }), t.onmessage = function(i) {
1813
- const s = i.data;
1814
- switch (s.type) {
1815
- case "decode":
1816
- t._callbacks[s.id].resolve(s);
1817
- break;
1818
- case "error":
1819
- t._callbacks[s.id].reject(s);
1820
- break;
1821
- default:
1822
- console.error('THREE.DRACOLoader: Unexpected message, "' + s.type + '"');
1823
- }
1824
- }, this.workerPool.push(t);
1825
- } else
1826
- this.workerPool.sort(function(t, i) {
1827
- return t._taskLoad > i._taskLoad ? -1 : 1;
1828
- });
1829
- const a = this.workerPool[this.workerPool.length - 1];
1830
- return a._taskCosts[A] = e, a._taskLoad += e, a;
1831
- });
1832
- }
1833
- _releaseTask(A, e) {
1834
- A._taskLoad -= A._taskCosts[e], delete A._callbacks[e], delete A._taskCosts[e];
1835
- }
1836
- debug() {
1837
- console.log("Task load: ", this.workerPool.map((A) => A._taskLoad));
1838
- }
1839
- dispose() {
1840
- for (let A = 0; A < this.workerPool.length; ++A)
1841
- this.workerPool[A].terminate();
1842
- return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
1843
- }
1844
- }
1845
- function Xa() {
1846
- let n, A;
1847
- onmessage = function(s) {
1848
- const o = s.data;
1849
- switch (o.type) {
1850
- case "init":
1851
- n = o.decoderConfig, A = new Promise(function(I) {
1852
- n.onModuleLoaded = function(g) {
1853
- I({ draco: g });
1854
- }, DracoDecoderModule(n);
1855
- });
1856
- break;
1857
- case "decode":
1858
- const r = o.buffer, c = o.taskConfig;
1859
- A.then((I) => {
1860
- const g = I.draco, B = new g.Decoder();
1861
- try {
1862
- const C = e(g, B, new Int8Array(r), c), f = C.attributes.map((d) => d.array.buffer);
1863
- C.index && f.push(C.index.array.buffer), self.postMessage({ type: "decode", id: o.id, geometry: C }, f);
1864
- } catch (C) {
1865
- console.error(C), self.postMessage({ type: "error", id: o.id, error: C.message });
1866
- } finally {
1867
- g.destroy(B);
1868
- }
1869
- });
1870
- break;
1871
- }
1872
- };
1873
- function e(s, o, r, c) {
1874
- const I = c.attributeIDs, g = c.attributeTypes;
1875
- let B, C;
1876
- const f = o.GetEncodedGeometryType(r);
1877
- if (f === s.TRIANGULAR_MESH)
1878
- B = new s.Mesh(), C = o.DecodeArrayToMesh(r, r.byteLength, B);
1879
- else if (f === s.POINT_CLOUD)
1880
- B = new s.PointCloud(), C = o.DecodeArrayToPointCloud(r, r.byteLength, B);
1881
- else
1882
- throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
1883
- if (!C.ok() || B.ptr === 0)
1884
- throw new Error("THREE.DRACOLoader: Decoding failed: " + C.error_msg());
1885
- const d = { index: null, attributes: [] };
1886
- for (const p in I) {
1887
- const E = self[g[p]];
1888
- let l, h;
1889
- if (c.useUniqueIDs)
1890
- h = I[p], l = o.GetAttributeByUniqueId(B, h);
1891
- else {
1892
- if (h = o.GetAttributeId(B, s[I[p]]), h === -1) continue;
1893
- l = o.GetAttribute(B, h);
1894
- }
1895
- const u = t(s, o, B, p, E, l);
1896
- p === "color" && (u.vertexColorSpace = c.vertexColorSpace), d.attributes.push(u);
1897
- }
1898
- return f === s.TRIANGULAR_MESH && (d.index = a(s, o, B)), s.destroy(B), d;
1899
- }
1900
- function a(s, o, r) {
1901
- const I = r.num_faces() * 3, g = I * 4, B = s._malloc(g);
1902
- o.GetTrianglesUInt32Array(r, g, B);
1903
- const C = new Uint32Array(s.HEAPF32.buffer, B, I).slice();
1904
- return s._free(B), { array: C, itemSize: 1 };
1905
- }
1906
- function t(s, o, r, c, I, g) {
1907
- const B = g.num_components(), f = r.num_points() * B, d = f * I.BYTES_PER_ELEMENT, p = i(s, I), E = s._malloc(d);
1908
- o.GetAttributeDataArrayForAllPoints(r, g, p, d, E);
1909
- const l = new I(s.HEAPF32.buffer, E, f).slice();
1910
- return s._free(E), {
1911
- name: c,
1912
- array: l,
1913
- itemSize: B
1914
- };
1915
- }
1916
- function i(s, o) {
1917
- switch (o) {
1918
- case Float32Array:
1919
- return s.DT_FLOAT32;
1920
- case Int8Array:
1921
- return s.DT_INT8;
1922
- case Int16Array:
1923
- return s.DT_INT16;
1924
- case Int32Array:
1925
- return s.DT_INT32;
1926
- case Uint8Array:
1927
- return s.DT_UINT8;
1928
- case Uint16Array:
1929
- return s.DT_UINT16;
1930
- case Uint32Array:
1931
- return s.DT_UINT32;
1932
- }
1933
- }
1934
- }
1935
- class Za {
1936
- constructor(A = 4) {
1937
- this.pool = A, this.queue = [], this.workers = [], this.workersResolve = [], this.workerStatus = 0;
1938
- }
1939
- _initWorker(A) {
1940
- if (!this.workers[A]) {
1941
- const e = this.workerCreator();
1942
- e.addEventListener("message", this._onMessage.bind(this, A)), this.workers[A] = e;
1943
- }
1944
- }
1945
- _getIdleWorker() {
1946
- for (let A = 0; A < this.pool; A++)
1947
- if (!(this.workerStatus & 1 << A)) return A;
1948
- return -1;
1949
- }
1950
- _onMessage(A, e) {
1951
- const a = this.workersResolve[A];
1952
- if (a && a(e), this.queue.length) {
1953
- const { resolve: t, msg: i, transfer: s } = this.queue.shift();
1954
- this.workersResolve[A] = t, this.workers[A].postMessage(i, s);
1955
- } else
1956
- this.workerStatus ^= 1 << A;
1957
- }
1958
- setWorkerCreator(A) {
1959
- this.workerCreator = A;
1960
- }
1961
- setWorkerLimit(A) {
1962
- this.pool = A;
1963
- }
1964
- postMessage(A, e) {
1965
- return new Promise((a) => {
1966
- const t = this._getIdleWorker();
1967
- t !== -1 ? (this._initWorker(t), this.workerStatus |= 1 << t, this.workersResolve[t] = a, this.workers[t].postMessage(A, e)) : this.queue.push({ resolve: a, msg: A, transfer: e });
1968
- });
1969
- }
1970
- dispose() {
1971
- this.workers.forEach((A) => A.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
1972
- }
1973
- }
1974
- const $a = 0, Fe = 2, Ai = 1, Re = 2, ei = 0, ti = 1, ai = 10, ii = 0, Je = 9, je = 15, Ke = 16, Pe = 22, Ye = 37, We = 43, Ve = 76, ze = 83, Xe = 97, Ze = 100, $e = 103, At = 109, et = 165, tt = 166;
1975
- class si {
1976
- constructor() {
1977
- this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null;
1978
- }
1979
- }
1980
- class dA {
1981
- constructor(A, e, a, t) {
1982
- this._dataView = new DataView(A.buffer, A.byteOffset + e, a), this._littleEndian = t, this._offset = 0;
1983
- }
1984
- _nextUint8() {
1985
- const A = this._dataView.getUint8(this._offset);
1986
- return this._offset += 1, A;
1987
- }
1988
- _nextUint16() {
1989
- const A = this._dataView.getUint16(this._offset, this._littleEndian);
1990
- return this._offset += 2, A;
1991
- }
1992
- _nextUint32() {
1993
- const A = this._dataView.getUint32(this._offset, this._littleEndian);
1994
- return this._offset += 4, A;
1995
- }
1996
- _nextUint64() {
1997
- const A = this._dataView.getUint32(this._offset, this._littleEndian) + 4294967296 * this._dataView.getUint32(this._offset + 4, this._littleEndian);
1998
- return this._offset += 8, A;
1999
- }
2000
- _nextInt32() {
2001
- const A = this._dataView.getInt32(this._offset, this._littleEndian);
2002
- return this._offset += 4, A;
2003
- }
2004
- _skip(A) {
2005
- return this._offset += A, this;
2006
- }
2007
- _scan(A, e = 0) {
2008
- const a = this._offset;
2009
- let t = 0;
2010
- for (; this._dataView.getUint8(this._offset) !== e && t < A; ) t++, this._offset++;
2011
- return t < A && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + a, t);
2012
- }
2013
- }
2014
- const U = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
2015
- function Se(n) {
2016
- return typeof TextDecoder < "u" ? new TextDecoder().decode(n) : Buffer.from(n).toString("utf8");
2017
- }
2018
- function ni(n) {
2019
- const A = new Uint8Array(n.buffer, n.byteOffset, U.length);
2020
- if (A[0] !== U[0] || A[1] !== U[1] || A[2] !== U[2] || A[3] !== U[3] || A[4] !== U[4] || A[5] !== U[5] || A[6] !== U[6] || A[7] !== U[7] || A[8] !== U[8] || A[9] !== U[9] || A[10] !== U[10] || A[11] !== U[11]) throw new Error("Missing KTX 2.0 identifier.");
2021
- const e = new si(), a = 17 * Uint32Array.BYTES_PER_ELEMENT, t = new dA(n, U.length, a, !0);
2022
- e.vkFormat = t._nextUint32(), e.typeSize = t._nextUint32(), e.pixelWidth = t._nextUint32(), e.pixelHeight = t._nextUint32(), e.pixelDepth = t._nextUint32(), e.layerCount = t._nextUint32(), e.faceCount = t._nextUint32();
2023
- const i = t._nextUint32();
2024
- e.supercompressionScheme = t._nextUint32();
2025
- const s = t._nextUint32(), o = t._nextUint32(), r = t._nextUint32(), c = t._nextUint32(), I = t._nextUint64(), g = t._nextUint64(), B = new dA(n, U.length + a, 3 * i * 8, !0);
2026
- for (let T = 0; T < i; T++) e.levels.push({ levelData: new Uint8Array(n.buffer, n.byteOffset + B._nextUint64(), B._nextUint64()), uncompressedByteLength: B._nextUint64() });
2027
- const C = new dA(n, s, o, !0), f = { vendorId: C._skip(4)._nextUint16(), descriptorType: C._nextUint16(), versionNumber: C._nextUint16(), descriptorBlockSize: C._nextUint16(), colorModel: C._nextUint8(), colorPrimaries: C._nextUint8(), transferFunction: C._nextUint8(), flags: C._nextUint8(), texelBlockDimension: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], bytesPlane: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], samples: [] }, d = (f.descriptorBlockSize / 4 - 6) / 4;
2028
- for (let T = 0; T < d; T++) {
2029
- const N = { bitOffset: C._nextUint16(), bitLength: C._nextUint8(), channelType: C._nextUint8(), samplePosition: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
2030
- 64 & N.channelType ? (N.sampleLower = C._nextInt32(), N.sampleUpper = C._nextInt32()) : (N.sampleLower = C._nextUint32(), N.sampleUpper = C._nextUint32()), f.samples[T] = N;
2031
- }
2032
- e.dataFormatDescriptor.length = 0, e.dataFormatDescriptor.push(f);
2033
- const p = new dA(n, r, c, !0);
2034
- for (; p._offset < c; ) {
2035
- const T = p._nextUint32(), N = p._scan(T), _ = Se(N), J = p._scan(T - N.byteLength);
2036
- e.keyValue[_] = _.match(/^ktx/i) ? Se(J) : J, p._offset % 4 && p._skip(4 - p._offset % 4);
2037
- }
2038
- if (g <= 0) return e;
2039
- const E = new dA(n, I, g, !0), l = E._nextUint16(), h = E._nextUint16(), u = E._nextUint32(), k = E._nextUint32(), R = E._nextUint32(), G = E._nextUint32(), M = [];
2040
- for (let T = 0; T < i; T++) M.push({ imageFlags: E._nextUint32(), rgbSliceByteOffset: E._nextUint32(), rgbSliceByteLength: E._nextUint32(), alphaSliceByteOffset: E._nextUint32(), alphaSliceByteLength: E._nextUint32() });
2041
- const b = I + E._offset, Q = b + u, m = Q + k, D = m + R, w = new Uint8Array(n.buffer, n.byteOffset + b, u), S = new Uint8Array(n.buffer, n.byteOffset + Q, k), F = new Uint8Array(n.buffer, n.byteOffset + m, R), x = new Uint8Array(n.buffer, n.byteOffset + D, G);
2042
- return e.globalData = { endpointCount: l, selectorCount: h, imageDescs: M, endpointsData: w, selectorsData: S, tablesData: F, extendedData: x }, e;
2043
- }
2044
- let OA, eA, Ae;
2045
- const vA = { env: { emscripten_notify_memory_growth: function(n) {
2046
- Ae = new Uint8Array(eA.exports.memory.buffer);
2047
- } } };
2048
- class oi {
2049
- init() {
2050
- return OA || (OA = typeof fetch < "u" ? fetch("data:application/wasm;base64," + ye).then((A) => A.arrayBuffer()).then((A) => WebAssembly.instantiate(A, vA)).then(this._init) : WebAssembly.instantiate(Buffer.from(ye, "base64"), vA).then(this._init), OA);
2051
- }
2052
- _init(A) {
2053
- eA = A.instance, vA.env.emscripten_notify_memory_growth(0);
2054
- }
2055
- decode(A, e = 0) {
2056
- if (!eA) throw new Error("ZSTDDecoder: Await .init() before decoding.");
2057
- const a = A.byteLength, t = eA.exports.malloc(a);
2058
- Ae.set(A, t), e = e || Number(eA.exports.ZSTD_findDecompressedSize(t, a));
2059
- const i = eA.exports.malloc(e), s = eA.exports.ZSTD_decompress(i, e, t, a), o = Ae.slice(i, i + s);
2060
- return eA.exports.free(t), eA.exports.free(i), o;
2061
- }
2062
- }
2063
- const ye = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", JA = /* @__PURE__ */ new WeakMap();
2064
- let jA = 0, KA;
2065
- class $ extends TA {
2066
- constructor(A) {
2067
- super(A), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new Za(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn(
2068
- 'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.'
2069
- );
2070
- }
2071
- setTranscoderPath(A) {
2072
- return this.transcoderPath = A, this;
2073
- }
2074
- setWorkerLimit(A) {
2075
- return this.workerPool.setWorkerLimit(A), this;
2076
- }
2077
- async detectSupportAsync(A) {
2078
- return this.workerConfig = {
2079
- astcSupported: await A.hasFeatureAsync("texture-compression-astc"),
2080
- etc1Supported: await A.hasFeatureAsync("texture-compression-etc1"),
2081
- etc2Supported: await A.hasFeatureAsync("texture-compression-etc2"),
2082
- dxtSupported: await A.hasFeatureAsync("texture-compression-bc"),
2083
- bptcSupported: await A.hasFeatureAsync("texture-compression-bptc"),
2084
- pvrtcSupported: await A.hasFeatureAsync("texture-compression-pvrtc")
2085
- }, this;
2086
- }
2087
- detectSupport(A) {
2088
- return A.isWebGPURenderer === !0 ? this.workerConfig = {
2089
- astcSupported: A.hasFeature("texture-compression-astc"),
2090
- etc1Supported: A.hasFeature("texture-compression-etc1"),
2091
- etc2Supported: A.hasFeature("texture-compression-etc2"),
2092
- dxtSupported: A.hasFeature("texture-compression-bc"),
2093
- bptcSupported: A.hasFeature("texture-compression-bptc"),
2094
- pvrtcSupported: A.hasFeature("texture-compression-pvrtc")
2095
- } : this.workerConfig = {
2096
- astcSupported: A.extensions.has("WEBGL_compressed_texture_astc"),
2097
- etc1Supported: A.extensions.has("WEBGL_compressed_texture_etc1"),
2098
- etc2Supported: A.extensions.has("WEBGL_compressed_texture_etc"),
2099
- dxtSupported: A.extensions.has("WEBGL_compressed_texture_s3tc"),
2100
- bptcSupported: A.extensions.has("EXT_texture_compression_bptc"),
2101
- pvrtcSupported: A.extensions.has("WEBGL_compressed_texture_pvrtc") || A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")
2102
- }, this;
2103
- }
2104
- init() {
2105
- if (!this.transcoderPending) {
2106
- const A = new aA(this.manager);
2107
- A.setPath(this.transcoderPath), A.setWithCredentials(this.withCredentials);
2108
- const e = A.loadAsync("basis_transcoder.js"), a = new aA(this.manager);
2109
- a.setPath(this.transcoderPath), a.setResponseType("arraybuffer"), a.setWithCredentials(this.withCredentials);
2110
- const t = a.loadAsync("basis_transcoder.wasm");
2111
- this.transcoderPending = Promise.all([e, t]).then(([i, s]) => {
2112
- const o = $.BasisWorker.toString(), r = [
2113
- "/* constants */",
2114
- "let _EngineFormat = " + JSON.stringify($.EngineFormat),
2115
- "let _TranscoderFormat = " + JSON.stringify($.TranscoderFormat),
2116
- "let _BasisFormat = " + JSON.stringify($.BasisFormat),
2117
- "/* basis_transcoder.js */",
2118
- i,
2119
- "/* worker */",
2120
- o.substring(o.indexOf("{") + 1, o.lastIndexOf("}"))
2121
- ].join(`
2122
- `);
2123
- this.workerSourceURL = URL.createObjectURL(new Blob([r])), this.transcoderBinary = s, this.workerPool.setWorkerCreator(() => {
2124
- const c = new Worker(this.workerSourceURL), I = this.transcoderBinary.slice(0);
2125
- return c.postMessage({ type: "init", config: this.workerConfig, transcoderBinary: I }, [I]), c;
2126
- });
2127
- }), jA > 0 && console.warn(
2128
- "THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."
2129
- ), jA++;
2130
- }
2131
- return this.transcoderPending;
2132
- }
2133
- load(A, e, a, t) {
2134
- if (this.workerConfig === null)
2135
- throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
2136
- const i = new aA(this.manager);
2137
- i.setResponseType("arraybuffer"), i.setWithCredentials(this.withCredentials), i.load(A, (s) => {
2138
- this.parse(s, e, t);
2139
- }, a, t);
2140
- }
2141
- parse(A, e, a) {
2142
- if (this.workerConfig === null)
2143
- throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
2144
- if (JA.has(A))
2145
- return JA.get(A).promise.then(e).catch(a);
2146
- this._createTexture(A).then((t) => e ? e(t) : null).catch(a);
2147
- }
2148
- _createTextureFrom(A, e) {
2149
- const { faces: a, width: t, height: i, format: s, type: o, error: r, dfdFlags: c } = A;
2150
- if (o === "error") return Promise.reject(r);
2151
- let I;
2152
- if (e.faceCount === 6)
2153
- I = new Xt(a, s, K);
2154
- else {
2155
- const g = a[0].mipmaps;
2156
- I = e.layerCount > 1 ? new Zt(g, t, i, e.layerCount, s, K) : new qe(g, t, i, s, K);
2157
- }
2158
- return I.minFilter = a[0].mipmaps.length === 1 ? GA : se, I.magFilter = GA, I.generateMipmaps = !1, I.needsUpdate = !0, I.colorSpace = at(e), I.premultiplyAlpha = !!(c & Ai), I;
2159
- }
2160
- /**
2161
- * @param {ArrayBuffer} buffer
2162
- * @param {object?} config
2163
- * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
2164
- */
2165
- async _createTexture(A, e = {}) {
2166
- const a = ni(new Uint8Array(A));
2167
- if (a.vkFormat !== ii)
2168
- return ci(a);
2169
- const t = e, i = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: A, taskConfig: t }, [A])).then((s) => this._createTextureFrom(s.data, a));
2170
- return JA.set(A, { promise: i }), i;
2171
- }
2172
- dispose() {
2173
- return this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), jA--, this;
2174
- }
2175
- }
2176
- $.BasisFormat = {
2177
- ETC1S: 0,
2178
- UASTC_4x4: 1
2179
- };
2180
- $.TranscoderFormat = {
2181
- ETC1: 0,
2182
- ETC2: 1,
2183
- BC1: 2,
2184
- BC3: 3,
2185
- BC4: 4,
2186
- BC5: 5,
2187
- BC7_M6_OPAQUE_ONLY: 6,
2188
- BC7_M5: 7,
2189
- PVRTC1_4_RGB: 8,
2190
- PVRTC1_4_RGBA: 9,
2191
- ASTC_4x4: 10,
2192
- ATC_RGB: 11,
2193
- ATC_RGBA_INTERPOLATED_ALPHA: 12,
2194
- RGBA32: 13,
2195
- RGB565: 14,
2196
- BGR565: 15,
2197
- RGBA4444: 16
2198
- };
2199
- $.EngineFormat = {
2200
- RGBAFormat: bA,
2201
- RGBA_ASTC_4x4_Format: $t,
2202
- RGBA_BPTC_Format: Aa,
2203
- RGBA_ETC2_EAC_Format: ea,
2204
- RGBA_PVRTC_4BPPV1_Format: ta,
2205
- RGBA_S3TC_DXT5_Format: aa,
2206
- RGB_ETC1_Format: ia,
2207
- RGB_ETC2_Format: sa,
2208
- RGB_PVRTC_4BPPV1_Format: na,
2209
- RGBA_S3TC_DXT1_Format: oa
2210
- };
2211
- $.BasisWorker = function() {
2212
- let n, A, e;
2213
- const a = _EngineFormat, t = _TranscoderFormat, i = _BasisFormat;
2214
- self.addEventListener("message", function(f) {
2215
- const d = f.data;
2216
- switch (d.type) {
2217
- case "init":
2218
- n = d.config, s(d.transcoderBinary);
2219
- break;
2220
- case "transcode":
2221
- A.then(() => {
2222
- try {
2223
- const { faces: p, buffers: E, width: l, height: h, hasAlpha: u, format: k, dfdFlags: R } = o(d.buffer);
2224
- self.postMessage({ type: "transcode", id: d.id, faces: p, width: l, height: h, hasAlpha: u, format: k, dfdFlags: R }, E);
2225
- } catch (p) {
2226
- console.error(p), self.postMessage({ type: "error", id: d.id, error: p.message });
2227
- }
2228
- });
2229
- break;
2230
- }
2231
- });
2232
- function s(f) {
2233
- A = new Promise((d) => {
2234
- e = { wasmBinary: f, onRuntimeInitialized: d }, BASIS(e);
2235
- }).then(() => {
2236
- e.initializeBasis(), e.KTX2File === void 0 && console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.");
2237
- });
2238
- }
2239
- function o(f) {
2240
- const d = new e.KTX2File(new Uint8Array(f));
2241
- function p() {
2242
- d.close(), d.delete();
2243
- }
2244
- if (!d.isValid())
2245
- throw p(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
2246
- const E = d.isUASTC() ? i.UASTC_4x4 : i.ETC1S, l = d.getWidth(), h = d.getHeight(), u = d.getLayers() || 1, k = d.getLevels(), R = d.getFaces(), G = d.getHasAlpha(), M = d.getDFDFlags(), { transcoderFormat: b, engineFormat: Q } = g(E, l, h, G);
2247
- if (!l || !h || !k)
2248
- throw p(), new Error("THREE.KTX2Loader: Invalid texture");
2249
- if (!d.startTranscoding())
2250
- throw p(), new Error("THREE.KTX2Loader: .startTranscoding failed");
2251
- const m = [], D = [];
2252
- for (let w = 0; w < R; w++) {
2253
- const S = [];
2254
- for (let F = 0; F < k; F++) {
2255
- const x = [];
2256
- let T, N;
2257
- for (let J = 0; J < u; J++) {
2258
- const iA = d.getImageLevelInfo(F, J, w);
2259
- w === 0 && F === 0 && J === 0 && (iA.origWidth % 4 !== 0 || iA.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), k > 1 ? (T = iA.origWidth, N = iA.origHeight) : (T = iA.width, N = iA.height);
2260
- const IA = new Uint8Array(d.getImageTranscodedSizeInBytes(F, J, 0, b));
2261
- if (!d.transcodeImage(IA, F, J, w, b, 0, -1, -1))
2262
- throw p(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
2263
- x.push(IA);
2264
- }
2265
- const _ = C(x);
2266
- S.push({ data: _, width: T, height: N }), D.push(_.buffer);
2267
- }
2268
- m.push({ mipmaps: S, width: l, height: h, format: Q });
2269
- }
2270
- return p(), { faces: m, buffers: D, width: l, height: h, hasAlpha: G, format: Q, dfdFlags: M };
2271
- }
2272
- const r = [
2273
- {
2274
- if: "astcSupported",
2275
- basisFormat: [i.UASTC_4x4],
2276
- transcoderFormat: [t.ASTC_4x4, t.ASTC_4x4],
2277
- engineFormat: [a.RGBA_ASTC_4x4_Format, a.RGBA_ASTC_4x4_Format],
2278
- priorityETC1S: 1 / 0,
2279
- priorityUASTC: 1,
2280
- needsPowerOfTwo: !1
2281
- },
2282
- {
2283
- if: "bptcSupported",
2284
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2285
- transcoderFormat: [t.BC7_M5, t.BC7_M5],
2286
- engineFormat: [a.RGBA_BPTC_Format, a.RGBA_BPTC_Format],
2287
- priorityETC1S: 3,
2288
- priorityUASTC: 2,
2289
- needsPowerOfTwo: !1
2290
- },
2291
- {
2292
- if: "dxtSupported",
2293
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2294
- transcoderFormat: [t.BC1, t.BC3],
2295
- engineFormat: [a.RGBA_S3TC_DXT1_Format, a.RGBA_S3TC_DXT5_Format],
2296
- priorityETC1S: 4,
2297
- priorityUASTC: 5,
2298
- needsPowerOfTwo: !1
2299
- },
2300
- {
2301
- if: "etc2Supported",
2302
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2303
- transcoderFormat: [t.ETC1, t.ETC2],
2304
- engineFormat: [a.RGB_ETC2_Format, a.RGBA_ETC2_EAC_Format],
2305
- priorityETC1S: 1,
2306
- priorityUASTC: 3,
2307
- needsPowerOfTwo: !1
2308
- },
2309
- {
2310
- if: "etc1Supported",
2311
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2312
- transcoderFormat: [t.ETC1],
2313
- engineFormat: [a.RGB_ETC1_Format],
2314
- priorityETC1S: 2,
2315
- priorityUASTC: 4,
2316
- needsPowerOfTwo: !1
2317
- },
2318
- {
2319
- if: "pvrtcSupported",
2320
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2321
- transcoderFormat: [t.PVRTC1_4_RGB, t.PVRTC1_4_RGBA],
2322
- engineFormat: [a.RGB_PVRTC_4BPPV1_Format, a.RGBA_PVRTC_4BPPV1_Format],
2323
- priorityETC1S: 5,
2324
- priorityUASTC: 6,
2325
- needsPowerOfTwo: !0
2326
- }
2327
- ], c = r.sort(function(f, d) {
2328
- return f.priorityETC1S - d.priorityETC1S;
2329
- }), I = r.sort(function(f, d) {
2330
- return f.priorityUASTC - d.priorityUASTC;
2331
- });
2332
- function g(f, d, p, E) {
2333
- let l, h;
2334
- const u = f === i.ETC1S ? c : I;
2335
- for (let k = 0; k < u.length; k++) {
2336
- const R = u[k];
2337
- if (n[R.if] && R.basisFormat.includes(f) && !(E && R.transcoderFormat.length < 2) && !(R.needsPowerOfTwo && !(B(d) && B(p))))
2338
- return l = R.transcoderFormat[E ? 1 : 0], h = R.engineFormat[E ? 1 : 0], { transcoderFormat: l, engineFormat: h };
2339
- }
2340
- return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."), l = t.RGBA32, h = a.RGBAFormat, { transcoderFormat: l, engineFormat: h };
2341
- }
2342
- function B(f) {
2343
- return f <= 2 ? !0 : (f & f - 1) === 0 && f !== 0;
2344
- }
2345
- function C(f) {
2346
- if (f.length === 1) return f[0];
2347
- let d = 0;
2348
- for (let l = 0; l < f.length; l++) {
2349
- const h = f[l];
2350
- d += h.byteLength;
2351
- }
2352
- const p = new Uint8Array(d);
2353
- let E = 0;
2354
- for (let l = 0; l < f.length; l++) {
2355
- const h = f[l];
2356
- p.set(h, E), E += h.byteLength;
2357
- }
2358
- return p;
2359
- }
2360
- };
2361
- const ri = /* @__PURE__ */ new Set([bA, pA, uA]), PA = {
2362
- [At]: bA,
2363
- [Xe]: bA,
2364
- [Ye]: bA,
2365
- [We]: bA,
2366
- [$e]: pA,
2367
- [ze]: pA,
2368
- [Ke]: pA,
2369
- [Pe]: pA,
2370
- [Ze]: uA,
2371
- [Ve]: uA,
2372
- [je]: uA,
2373
- [Je]: uA,
2374
- [tt]: he,
2375
- [et]: he
2376
- }, YA = {
2377
- [At]: FA,
2378
- [Xe]: RA,
2379
- [Ye]: K,
2380
- [We]: K,
2381
- [$e]: FA,
2382
- [ze]: RA,
2383
- [Ke]: K,
2384
- [Pe]: K,
2385
- [Ze]: FA,
2386
- [Ve]: RA,
2387
- [je]: K,
2388
- [Je]: K,
2389
- [tt]: K,
2390
- [et]: K
2391
- };
2392
- async function ci(n) {
2393
- const { vkFormat: A } = n;
2394
- if (PA[A] === void 0)
2395
- throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
2396
- let e;
2397
- n.supercompressionScheme === Fe && (KA || (KA = new Promise(async (i) => {
2398
- const s = new oi();
2399
- await s.init(), i(s);
2400
- })), e = await KA);
2401
- const a = [];
2402
- for (let i = 0; i < n.levels.length; i++) {
2403
- const s = Math.max(1, n.pixelWidth >> i), o = Math.max(1, n.pixelHeight >> i), r = n.pixelDepth ? Math.max(1, n.pixelDepth >> i) : 0, c = n.levels[i];
2404
- let I;
2405
- if (n.supercompressionScheme === $a)
2406
- I = c.levelData;
2407
- else if (n.supercompressionScheme === Fe)
2408
- I = e.decode(c.levelData, c.uncompressedByteLength);
2409
- else
2410
- throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
2411
- let g;
2412
- YA[A] === FA ? g = new Float32Array(
2413
- I.buffer,
2414
- I.byteOffset,
2415
- I.byteLength / Float32Array.BYTES_PER_ELEMENT
2416
- ) : YA[A] === RA ? g = new Uint16Array(
2417
- I.buffer,
2418
- I.byteOffset,
2419
- I.byteLength / Uint16Array.BYTES_PER_ELEMENT
2420
- ) : g = I, a.push({
2421
- data: g,
2422
- width: s,
2423
- height: o,
2424
- depth: r
2425
- });
2426
- }
2427
- let t;
2428
- if (ri.has(PA[A]))
2429
- t = n.pixelDepth === 0 ? new ra(a[0].data, n.pixelWidth, n.pixelHeight) : new ca(a[0].data, n.pixelWidth, n.pixelHeight, n.pixelDepth);
2430
- else {
2431
- if (n.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
2432
- t = new qe(a, n.pixelWidth, n.pixelHeight);
2433
- }
2434
- return t.mipmaps = a, t.type = YA[A], t.format = PA[A], t.colorSpace = at(n), t.needsUpdate = !0, Promise.resolve(t);
2435
- }
2436
- function at(n) {
2437
- const A = n.dataFormatDescriptor[0];
2438
- return A.colorPrimaries === ti ? A.transferFunction === Re ? AA : Y : A.colorPrimaries === ai ? A.transferFunction === Re ? ga : Ia : A.colorPrimaries === ei ? oA : (console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${A.colorPrimaries}"`), oA);
2439
- }
2440
- var gi = function() {
2441
- var n = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb", A = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb", e = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]), a = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);
2442
- if (typeof WebAssembly != "object")
2443
- return {
2444
- supported: !1
2445
- };
2446
- var t = WebAssembly.validate(e) ? A : n, i, s = WebAssembly.instantiate(o(t), {}).then(function(E) {
2447
- i = E.instance, i.exports.__wasm_call_ctors();
2448
- });
2449
- function o(E) {
2450
- for (var l = new Uint8Array(E.length), h = 0; h < E.length; ++h) {
2451
- var u = E.charCodeAt(h);
2452
- l[h] = u > 96 ? u - 97 : u > 64 ? u - 39 : u + 4;
2453
- }
2454
- for (var k = 0, h = 0; h < E.length; ++h)
2455
- l[k++] = l[h] < 60 ? a[l[h]] : (l[h] - 60) * 64 + l[++h];
2456
- return l.buffer.slice(0, k);
2457
- }
2458
- function r(E, l, h, u, k, R) {
2459
- var G = i.exports.sbrk, M = h + 3 & -4, b = G(M * u), Q = G(k.length), m = new Uint8Array(i.exports.memory.buffer);
2460
- m.set(k, Q);
2461
- var D = E(b, h, u, Q, k.length);
2462
- if (D == 0 && R && R(b, M, u), l.set(m.subarray(b, b + h * u)), G(b - G(0)), D != 0)
2463
- throw new Error("Malformed buffer data: " + D);
2464
- }
2465
- var c = {
2466
- NONE: "",
2467
- OCTAHEDRAL: "meshopt_decodeFilterOct",
2468
- QUATERNION: "meshopt_decodeFilterQuat",
2469
- EXPONENTIAL: "meshopt_decodeFilterExp"
2470
- }, I = {
2471
- ATTRIBUTES: "meshopt_decodeVertexBuffer",
2472
- TRIANGLES: "meshopt_decodeIndexBuffer",
2473
- INDICES: "meshopt_decodeIndexSequence"
2474
- }, g = [], B = 0;
2475
- function C(E) {
2476
- var l = {
2477
- object: new Worker(E),
2478
- pending: 0,
2479
- requests: {}
2480
- };
2481
- return l.object.onmessage = function(h) {
2482
- var u = h.data;
2483
- l.pending -= u.count, l.requests[u.id][u.action](u.value), delete l.requests[u.id];
2484
- }, l;
2485
- }
2486
- function f(E) {
2487
- for (var l = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(o(t)) + "]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;" + r.toString() + p.toString(), h = new Blob([l], { type: "text/javascript" }), u = URL.createObjectURL(h), k = 0; k < E; ++k)
2488
- g[k] = C(u);
2489
- URL.revokeObjectURL(u);
2490
- }
2491
- function d(E, l, h, u, k) {
2492
- for (var R = g[0], G = 1; G < g.length; ++G)
2493
- g[G].pending < R.pending && (R = g[G]);
2494
- return new Promise(function(M, b) {
2495
- var Q = new Uint8Array(h), m = B++;
2496
- R.pending += E, R.requests[m] = { resolve: M, reject: b }, R.object.postMessage({ id: m, count: E, size: l, source: Q, mode: u, filter: k }, [Q.buffer]);
2497
- });
2498
- }
2499
- function p(E) {
2500
- s.then(function() {
2501
- var l = E.data;
2502
- try {
2503
- var h = new Uint8Array(l.count * l.size);
2504
- r(i.exports[l.mode], h, l.count, l.size, l.source, i.exports[l.filter]), self.postMessage({ id: l.id, count: l.count, action: "resolve", value: h }, [h.buffer]);
2505
- } catch (u) {
2506
- self.postMessage({ id: l.id, count: l.count, action: "reject", value: u });
2507
- }
2508
- });
2509
- }
2510
- return {
2511
- ready: s,
2512
- supported: !0,
2513
- useWorkers: function(E) {
2514
- f(E);
2515
- },
2516
- decodeVertexBuffer: function(E, l, h, u, k) {
2517
- r(i.exports.meshopt_decodeVertexBuffer, E, l, h, u, i.exports[c[k]]);
2518
- },
2519
- decodeIndexBuffer: function(E, l, h, u) {
2520
- r(i.exports.meshopt_decodeIndexBuffer, E, l, h, u);
2521
- },
2522
- decodeIndexSequence: function(E, l, h, u) {
2523
- r(i.exports.meshopt_decodeIndexSequence, E, l, h, u);
2524
- },
2525
- decodeGltfBuffer: function(E, l, h, u, k, R) {
2526
- r(i.exports[I[k]], E, l, h, u, i.exports[c[R]]);
2527
- },
2528
- decodeGltfBufferAsync: function(E, l, h, u, k) {
2529
- return g.length > 0 ? d(E, l, h, I[u], c[k]) : s.then(function() {
2530
- var R = new Uint8Array(E * l);
2531
- return r(i.exports[I[u]], R, E, l, h, i.exports[c[k]]), R;
2532
- });
2533
- }
2534
- };
2535
- }();
2536
- function oe() {
2537
- const n = new za();
2538
- n.setDecoderPath("/draco/");
2539
- const A = new $();
2540
- A.setTranscoderPath("/draco/");
2541
- const e = new la().setDRACOLoader(n).setKTX2Loader(A.detectSupport(new Ba())).setMeshoptDecoder(gi);
2542
- return e.manager.onError = (a) => {
2543
- V.emit("load-error", `Failed to load file ${a}`);
2544
- }, e;
2545
- }
2546
- /*!
2547
- fflate - fast JavaScript compression/decompression
2548
- <https://101arrowz.github.io/fflate>
2549
- Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE
2550
- version 0.8.2
2551
- */
2552
- var H = Uint8Array, lA = Uint16Array, Ii = Int32Array, it = new H([
2553
- 0,
2554
- 0,
2555
- 0,
2556
- 0,
2557
- 0,
2558
- 0,
2559
- 0,
2560
- 0,
2561
- 1,
2562
- 1,
2563
- 1,
2564
- 1,
2565
- 2,
2566
- 2,
2567
- 2,
2568
- 2,
2569
- 3,
2570
- 3,
2571
- 3,
2572
- 3,
2573
- 4,
2574
- 4,
2575
- 4,
2576
- 4,
2577
- 5,
2578
- 5,
2579
- 5,
2580
- 5,
2581
- 0,
2582
- /* unused */
2583
- 0,
2584
- 0,
2585
- /* impossible */
2586
- 0
2587
- ]), st = new H([
2588
- 0,
2589
- 0,
2590
- 0,
2591
- 0,
2592
- 1,
2593
- 1,
2594
- 2,
2595
- 2,
2596
- 3,
2597
- 3,
2598
- 4,
2599
- 4,
2600
- 5,
2601
- 5,
2602
- 6,
2603
- 6,
2604
- 7,
2605
- 7,
2606
- 8,
2607
- 8,
2608
- 9,
2609
- 9,
2610
- 10,
2611
- 10,
2612
- 11,
2613
- 11,
2614
- 12,
2615
- 12,
2616
- 13,
2617
- 13,
2618
- /* unused */
2619
- 0,
2620
- 0
2621
- ]), Bi = new H([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), nt = function(n, A) {
2622
- for (var e = new lA(31), a = 0; a < 31; ++a)
2623
- e[a] = A += 1 << n[a - 1];
2624
- for (var t = new Ii(e[30]), a = 1; a < 30; ++a)
2625
- for (var i = e[a]; i < e[a + 1]; ++i)
2626
- t[i] = i - e[a] << 5 | a;
2627
- return { b: e, r: t };
2628
- }, ot = nt(it, 2), rt = ot.b, Ci = ot.r;
2629
- rt[28] = 258, Ci[258] = 28;
2630
- var bi = nt(st, 0), li = bi.b, ee = new lA(32768);
2631
- for (var L = 0; L < 32768; ++L) {
2632
- var nA = (L & 43690) >> 1 | (L & 21845) << 1;
2633
- nA = (nA & 52428) >> 2 | (nA & 13107) << 2, nA = (nA & 61680) >> 4 | (nA & 3855) << 4, ee[L] = ((nA & 65280) >> 8 | (nA & 255) << 8) >> 1;
2634
- }
2635
- var wA = function(n, A, e) {
2636
- for (var a = n.length, t = 0, i = new lA(A); t < a; ++t)
2637
- n[t] && ++i[n[t] - 1];
2638
- var s = new lA(A);
2639
- for (t = 1; t < A; ++t)
2640
- s[t] = s[t - 1] + i[t - 1] << 1;
2641
- var o;
2642
- if (e) {
2643
- o = new lA(1 << A);
2644
- var r = 15 - A;
2645
- for (t = 0; t < a; ++t)
2646
- if (n[t])
2647
- for (var c = t << 4 | n[t], I = A - n[t], g = s[n[t] - 1]++ << I, B = g | (1 << I) - 1; g <= B; ++g)
2648
- o[ee[g] >> r] = c;
2649
- } else
2650
- for (o = new lA(a), t = 0; t < a; ++t)
2651
- n[t] && (o[t] = ee[s[n[t] - 1]++] >> 15 - n[t]);
2652
- return o;
2653
- }, DA = new H(288);
2654
- for (var L = 0; L < 144; ++L)
2655
- DA[L] = 8;
2656
- for (var L = 144; L < 256; ++L)
2657
- DA[L] = 9;
2658
- for (var L = 256; L < 280; ++L)
2659
- DA[L] = 7;
2660
- for (var L = 280; L < 288; ++L)
2661
- DA[L] = 8;
2662
- var ct = new H(32);
2663
- for (var L = 0; L < 32; ++L)
2664
- ct[L] = 5;
2665
- var fi = /* @__PURE__ */ wA(DA, 9, 1), Ei = /* @__PURE__ */ wA(ct, 5, 1), WA = function(n) {
2666
- for (var A = n[0], e = 1; e < n.length; ++e)
2667
- n[e] > A && (A = n[e]);
2668
- return A;
2669
- }, j = function(n, A, e) {
2670
- var a = A / 8 | 0;
2671
- return (n[a] | n[a + 1] << 8) >> (A & 7) & e;
2672
- }, VA = function(n, A) {
2673
- var e = A / 8 | 0;
2674
- return (n[e] | n[e + 1] << 8 | n[e + 2] << 16) >> (A & 7);
2675
- }, Qi = function(n) {
2676
- return (n + 7) / 8 | 0;
2677
- }, re = function(n, A, e) {
2678
- return (A == null || A < 0) && (A = 0), (e == null || e > n.length) && (e = n.length), new H(n.subarray(A, e));
2679
- }, di = [
2680
- "unexpected EOF",
2681
- "invalid block type",
2682
- "invalid length/literal",
2683
- "invalid distance",
2684
- "stream finished",
2685
- "no stream handler",
2686
- ,
2687
- "no callback",
2688
- "invalid UTF-8 data",
2689
- "extra field too long",
2690
- "date not in range 1980-2099",
2691
- "filename too long",
2692
- "stream finishing",
2693
- "invalid zip data"
2694
- // determined by unknown compression method
2695
- ], v = function(n, A, e) {
2696
- var a = new Error(A || di[n]);
2697
- if (a.code = n, Error.captureStackTrace && Error.captureStackTrace(a, v), !e)
2698
- throw a;
2699
- return a;
2700
- }, hi = function(n, A, e, a) {
2701
- var t = n.length, i = a ? a.length : 0;
2702
- if (!t || A.f && !A.l)
2703
- return e || new H(0);
2704
- var s = !e, o = s || A.i != 2, r = A.i;
2705
- s && (e = new H(t * 3));
2706
- var c = function(Be) {
2707
- var Ce = e.length;
2708
- if (Be > Ce) {
2709
- var be = new H(Math.max(Ce * 2, Be));
2710
- be.set(e), e = be;
2711
- }
2712
- }, I = A.f || 0, g = A.p || 0, B = A.b || 0, C = A.l, f = A.d, d = A.m, p = A.n, E = t * 8;
2713
- do {
2714
- if (!C) {
2715
- I = j(n, g, 1);
2716
- var l = j(n, g + 1, 3);
2717
- if (g += 3, l)
2718
- if (l == 1)
2719
- C = fi, f = Ei, d = 9, p = 5;
2720
- else if (l == 2) {
2721
- var R = j(n, g, 31) + 257, G = j(n, g + 10, 15) + 4, M = R + j(n, g + 5, 31) + 1;
2722
- g += 14;
2723
- for (var b = new H(M), Q = new H(19), m = 0; m < G; ++m)
2724
- Q[Bi[m]] = j(n, g + m * 3, 7);
2725
- g += G * 3;
2726
- for (var D = WA(Q), w = (1 << D) - 1, S = wA(Q, D, 1), m = 0; m < M; ) {
2727
- var F = S[j(n, g, w)];
2728
- g += F & 15;
2729
- var h = F >> 4;
2730
- if (h < 16)
2731
- b[m++] = h;
2732
- else {
2733
- var x = 0, T = 0;
2734
- for (h == 16 ? (T = 3 + j(n, g, 3), g += 2, x = b[m - 1]) : h == 17 ? (T = 3 + j(n, g, 7), g += 3) : h == 18 && (T = 11 + j(n, g, 127), g += 7); T--; )
2735
- b[m++] = x;
2736
- }
2737
- }
2738
- var N = b.subarray(0, R), _ = b.subarray(R);
2739
- d = WA(N), p = WA(_), C = wA(N, d, 1), f = wA(_, p, 1);
2740
- } else
2741
- v(1);
2742
- else {
2743
- var h = Qi(g) + 4, u = n[h - 4] | n[h - 3] << 8, k = h + u;
2744
- if (k > t) {
2745
- r && v(0);
2746
- break;
2747
- }
2748
- o && c(B + u), e.set(n.subarray(h, k), B), A.b = B += u, A.p = g = k * 8, A.f = I;
2749
- continue;
2750
- }
2751
- if (g > E) {
2752
- r && v(0);
2753
- break;
2754
- }
2755
- }
2756
- o && c(B + 131072);
2757
- for (var J = (1 << d) - 1, iA = (1 << p) - 1, IA = g; ; IA = g) {
2758
- var x = C[VA(n, g) & J], cA = x >> 4;
2759
- if (g += x & 15, g > E) {
2760
- r && v(0);
2761
- break;
2762
- }
2763
- if (x || v(2), cA < 256)
2764
- e[B++] = cA;
2765
- else if (cA == 256) {
2766
- IA = g, C = null;
2767
- break;
2768
- } else {
2769
- var ce = cA - 254;
2770
- if (cA > 264) {
2771
- var m = cA - 257, EA = it[m];
2772
- ce = j(n, g, (1 << EA) - 1) + rt[m], g += EA;
2773
- }
2774
- var LA = f[VA(n, g) & iA], MA = LA >> 4;
2775
- LA || v(3), g += LA & 15;
2776
- var _ = li[MA];
2777
- if (MA > 3) {
2778
- var EA = st[MA];
2779
- _ += VA(n, g) & (1 << EA) - 1, g += EA;
2780
- }
2781
- if (g > E) {
2782
- r && v(0);
2783
- break;
2784
- }
2785
- o && c(B + 131072);
2786
- var ge = B + ce;
2787
- if (B < _) {
2788
- var Ie = i - _, It = Math.min(_, ge);
2789
- for (Ie + B < 0 && v(3); B < It; ++B)
2790
- e[B] = a[Ie + B];
2791
- }
2792
- for (; B < ge; ++B)
2793
- e[B] = e[B - _];
2794
- }
2795
- }
2796
- A.l = C, A.p = IA, A.b = B, A.f = I, C && (I = 1, A.m = d, A.d = f, A.n = p);
2797
- } while (!I);
2798
- return B != e.length && s ? re(e, 0, B) : e.subarray(0, B);
2799
- }, pi = /* @__PURE__ */ new H(0), Z = function(n, A) {
2800
- return n[A] | n[A + 1] << 8;
2801
- }, P = function(n, A) {
2802
- return (n[A] | n[A + 1] << 8 | n[A + 2] << 16 | n[A + 3] << 24) >>> 0;
2803
- }, zA = function(n, A) {
2804
- return P(n, A) + P(n, A + 4) * 4294967296;
2805
- };
2806
- function ui(n, A) {
2807
- return hi(n, { i: 2 }, A && A.out, A && A.dictionary);
2808
- }
2809
- var te = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), mi = 0;
2810
- try {
2811
- te.decode(pi, { stream: !0 }), mi = 1;
2812
- } catch {
2813
- }
2814
- var wi = function(n) {
2815
- for (var A = "", e = 0; ; ) {
2816
- var a = n[e++], t = (a > 127) + (a > 223) + (a > 239);
2817
- if (e + t > n.length)
2818
- return { s: A, r: re(n, e - 1) };
2819
- t ? t == 3 ? (a = ((a & 15) << 18 | (n[e++] & 63) << 12 | (n[e++] & 63) << 6 | n[e++] & 63) - 65536, A += String.fromCharCode(55296 | a >> 10, 56320 | a & 1023)) : t & 1 ? A += String.fromCharCode((a & 31) << 6 | n[e++] & 63) : A += String.fromCharCode((a & 15) << 12 | (n[e++] & 63) << 6 | n[e++] & 63) : A += String.fromCharCode(a);
2820
- }
2821
- };
2822
- function ae(n, A) {
2823
- if (A) {
2824
- for (var e = "", a = 0; a < n.length; a += 16384)
2825
- e += String.fromCharCode.apply(null, n.subarray(a, a + 16384));
2826
- return e;
2827
- } else {
2828
- if (te)
2829
- return te.decode(n);
2830
- var t = wi(n), i = t.s, e = t.r;
2831
- return e.length && v(8), i;
2832
- }
2833
- }
2834
- var Di = function(n, A) {
2835
- return A + 30 + Z(n, A + 26) + Z(n, A + 28);
2836
- }, ki = function(n, A, e) {
2837
- var a = Z(n, A + 28), t = ae(n.subarray(A + 46, A + 46 + a), !(Z(n, A + 8) & 2048)), i = A + 46 + a, s = P(n, A + 20), o = e && s == 4294967295 ? Fi(n, i) : [s, P(n, A + 24), P(n, A + 42)], r = o[0], c = o[1], I = o[2];
2838
- return [Z(n, A + 10), r, c, t, i + Z(n, A + 30) + Z(n, A + 32), I];
2839
- }, Fi = function(n, A) {
2840
- for (; Z(n, A) != 1; A += 4 + Z(n, A + 2))
2841
- ;
2842
- return [zA(n, A + 12), zA(n, A + 4), zA(n, A + 20)];
2843
- };
2844
- function Ri(n, A) {
2845
- for (var e = {}, a = n.length - 22; P(n, a) != 101010256; --a)
2846
- (!a || n.length - a > 65558) && v(13);
2847
- var t = Z(n, a + 8);
2848
- if (!t)
2849
- return {};
2850
- var i = P(n, a + 16), s = i == 4294967295 || t == 65535;
2851
- if (s) {
2852
- var o = P(n, a - 12);
2853
- s = P(n, o) == 101075792, s && (t = P(n, o + 32), i = P(n, o + 48));
2854
- }
2855
- for (var r = 0; r < t; ++r) {
2856
- var c = ki(n, i, s), I = c[0], g = c[1], B = c[2], C = c[3], f = c[4], d = c[5], p = Di(n, d);
2857
- i = f, I ? I == 8 ? e[C] = ui(n.subarray(p, p + g), { out: new H(B) }) : v(14, "unknown compression type " + I) : e[C] = re(n, p, p + g);
2858
- }
2859
- return e;
2860
- }
2861
- class Si {
2862
- parse(A) {
2863
- const e = {}, a = A.split(`
2864
- `);
2865
- let t = null, i = e;
2866
- const s = [e];
2867
- for (const o of a)
2868
- if (o.includes("=")) {
2869
- const r = o.split("="), c = r[0].trim(), I = r[1].trim();
2870
- if (I.endsWith("{")) {
2871
- const g = {};
2872
- s.push(g), i[c] = g, i = g;
2873
- } else if (I.endsWith("(")) {
2874
- const g = I.slice(0, -1);
2875
- i[c] = g;
2876
- const B = {};
2877
- s.push(B), i = B;
2878
- } else
2879
- i[c] = I;
2880
- } else if (o.endsWith("{")) {
2881
- const r = i[t] || {};
2882
- s.push(r), i[t] = r, i = r;
2883
- } else if (o.endsWith("}")) {
2884
- if (s.pop(), s.length === 0) continue;
2885
- i = s[s.length - 1];
2886
- } else if (o.endsWith("(")) {
2887
- const r = {};
2888
- s.push(r), t = o.split("(")[0].trim() || t, i[t] = r, i = r;
2889
- } else o.endsWith(")") ? (s.pop(), i = s[s.length - 1]) : t = o.trim();
2890
- return e;
2891
- }
2892
- }
2893
- class yi extends TA {
2894
- constructor(A) {
2895
- super(A);
2896
- }
2897
- load(A, e, a, t) {
2898
- const i = this, s = new aA(i.manager);
2899
- s.setPath(i.path), s.setResponseType("arraybuffer"), s.setRequestHeader(i.requestHeader), s.setWithCredentials(i.withCredentials), s.load(A, function(o) {
2900
- try {
2901
- e(i.parse(o));
2902
- } catch (r) {
2903
- t ? t(r) : console.error(r), i.manager.itemError(A);
2904
- }
2905
- }, a, t);
2906
- }
2907
- parse(A) {
2908
- const e = new Si();
2909
- function a(b) {
2910
- const Q = {};
2911
- new aA().setResponseType("arraybuffer");
2912
- for (const D in b) {
2913
- if (D.endsWith("png")) {
2914
- const w = new Blob([b[D]], { type: { type: "image/png" } });
2915
- Q[D] = URL.createObjectURL(w);
2916
- }
2917
- if (D.endsWith("usd") || D.endsWith("usda")) {
2918
- if (t(b[D]))
2919
- throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.");
2920
- const w = ae(b[D]);
2921
- Q[D] = e.parse(w);
2922
- }
2923
- }
2924
- return Q;
2925
- }
2926
- function t(b) {
2927
- const Q = b.slice(0, 7), m = new Uint8Array([80, 88, 82, 45, 85, 83, 68, 67]);
2928
- return Q.every((D, w) => D === m[w]);
2929
- }
2930
- function i(b) {
2931
- if (b.length < 1) return;
2932
- const Q = Object.keys(b)[0];
2933
- let m = !1;
2934
- if (Q.endsWith("usda")) return b[Q];
2935
- if (Q.endsWith("usdc"))
2936
- m = !0;
2937
- else if (Q.endsWith("usd"))
2938
- if (t(b[Q]))
2939
- m = !0;
2940
- else
2941
- return b[Q];
2942
- if (m)
2943
- throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.");
2944
- }
2945
- const s = Ri(new Uint8Array(A)), o = a(s), r = i(s), c = ae(r), I = e.parse(c);
2946
- function g(b) {
2947
- if (b) {
2948
- if ("prepend references" in b) {
2949
- const m = b["prepend references"].split("@"), D = m[1].replace(/^.\//, ""), w = m[2].replace(/^<\//, "").replace(/>$/, "");
2950
- return B(o[D], w);
2951
- }
2952
- return B(b);
2953
- }
2954
- }
2955
- function B(b, Q) {
2956
- if (b) {
2957
- if (Q !== void 0) {
2958
- const m = `def Mesh "${Q}"`;
2959
- if (m in b)
2960
- return b[m];
2961
- }
2962
- for (const m in b) {
2963
- const D = b[m];
2964
- if (m.startsWith("def Mesh"))
2965
- return D;
2966
- if (typeof D == "object") {
2967
- const w = B(D);
2968
- if (w) return w;
2969
- }
2970
- }
2971
- }
2972
- }
2973
- function C(b) {
2974
- if (!b) return;
2975
- const Q = new ne();
2976
- let m = null, D = null, w = null, S = -1;
2977
- if ("int[] faceVertexIndices" in b && (m = JSON.parse(b["int[] faceVertexIndices"])), "int[] faceVertexCounts" in b && (D = JSON.parse(b["int[] faceVertexCounts"]), m = f(m, D)), "point3f[] points" in b) {
2978
- const F = JSON.parse(b["point3f[] points"].replace(/[()]*/g, ""));
2979
- S = F.length;
2980
- let x = new X(new Float32Array(F), 3);
2981
- m !== null && (x = d(x, m)), Q.setAttribute("position", x);
2982
- }
2983
- if ("float2[] primvars:st" in b && (b["texCoord2f[] primvars:st"] = b["float2[] primvars:st"]), "texCoord2f[] primvars:st" in b) {
2984
- w = JSON.parse(b["texCoord2f[] primvars:st"].replace(/[()]*/g, ""));
2985
- let F = new X(new Float32Array(w), 2);
2986
- m !== null && (F = d(F, m)), Q.setAttribute("uv", F);
2987
- }
2988
- if ("int[] primvars:st:indices" in b && w !== null) {
2989
- const F = new X(new Float32Array(w), 2);
2990
- let x = JSON.parse(b["int[] primvars:st:indices"]);
2991
- x = f(x, D), Q.setAttribute("uv", d(F, x));
2992
- }
2993
- if ("normal3f[] normals" in b) {
2994
- const F = JSON.parse(b["normal3f[] normals"].replace(/[()]*/g, ""));
2995
- let x = new X(new Float32Array(F), 3);
2996
- if (F.length === S)
2997
- m !== null && (x = d(x, m));
2998
- else {
2999
- let T = Array.from(Array(F.length / 3).keys());
3000
- T = f(T, D), x = d(x, T);
3001
- }
3002
- Q.setAttribute("normal", x);
3003
- } else
3004
- Q.computeVertexNormals();
3005
- return Q;
3006
- }
3007
- function f(b, Q) {
3008
- const m = [];
3009
- for (let D = 0; D < Q.length; D++) {
3010
- const w = Q[D], S = D * w;
3011
- if (w === 3) {
3012
- const F = b[S + 0], x = b[S + 1], T = b[S + 2];
3013
- m.push(F, x, T);
3014
- } else if (w === 4) {
3015
- const F = b[S + 0], x = b[S + 1], T = b[S + 2], N = b[S + 3];
3016
- m.push(F, x, T), m.push(F, T, N);
3017
- } else
3018
- console.warn("THREE.USDZLoader: Face vertex count of %s unsupported.", w);
3019
- }
3020
- return m;
3021
- }
3022
- function d(b, Q) {
3023
- const m = b.array, D = b.itemSize, w = new m.constructor(Q.length * D);
3024
- let S = 0, F = 0;
3025
- for (let x = 0, T = Q.length; x < T; x++) {
3026
- S = Q[x] * D;
3027
- for (let N = 0; N < D; N++)
3028
- w[F++] = m[S++];
3029
- }
3030
- return new X(w, D);
3031
- }
3032
- function p(b) {
3033
- if (b) {
3034
- if ("rel material:binding" in b) {
3035
- const D = b["rel material:binding"].replace(/^<\//, "").replace(/>$/, "").split("/");
3036
- return E(I, ` "${D[1]}"`);
3037
- }
3038
- return E(b);
3039
- }
3040
- }
3041
- function E(b, Q = "") {
3042
- for (const m in b) {
3043
- const D = b[m];
3044
- if (m.startsWith("def Material" + Q))
3045
- return D;
3046
- if (typeof D == "object") {
3047
- const w = E(D, Q);
3048
- if (w) return w;
3049
- }
3050
- }
3051
- }
3052
- function l(b, Q) {
3053
- Q["float inputs:rotation"] && (b.rotation = parseFloat(Q["float inputs:rotation"])), Q["float2 inputs:scale"] && (b.repeat = new SA().fromArray(JSON.parse("[" + Q["float2 inputs:scale"].replace(/[()]*/g, "") + "]"))), Q["float2 inputs:translation"] && (b.offset = new SA().fromArray(JSON.parse("[" + Q["float2 inputs:translation"].replace(/[()]*/g, "") + "]")));
3054
- }
3055
- function h(b) {
3056
- const Q = new W();
3057
- if (b !== void 0) {
3058
- const m = b["token outputs:surface.connect"], D = /(\w+).output/.exec(m)[1], w = b[`def Shader "${D}"`];
3059
- if (w !== void 0) {
3060
- if ("color3f inputs:diffuseColor.connect" in w) {
3061
- const S = w["color3f inputs:diffuseColor.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3062
- Q.map = k(F), Q.map.colorSpace = AA, 'def Shader "Transform2d_diffuse"' in b && l(Q.map, b['def Shader "Transform2d_diffuse"']);
3063
- } else if ("color3f inputs:diffuseColor" in w) {
3064
- const S = w["color3f inputs:diffuseColor"].replace(/[()]*/g, "");
3065
- Q.color.fromArray(JSON.parse("[" + S + "]"));
3066
- }
3067
- if ("color3f inputs:emissiveColor.connect" in w) {
3068
- const S = w["color3f inputs:emissiveColor.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3069
- Q.emissiveMap = k(F), Q.emissiveMap.colorSpace = AA, Q.emissive.set(16777215), 'def Shader "Transform2d_emissive"' in b && l(Q.emissiveMap, b['def Shader "Transform2d_emissive"']);
3070
- } else if ("color3f inputs:emissiveColor" in w) {
3071
- const S = w["color3f inputs:emissiveColor"].replace(/[()]*/g, "");
3072
- Q.emissive.fromArray(JSON.parse("[" + S + "]"));
3073
- }
3074
- if ("normal3f inputs:normal.connect" in w) {
3075
- const S = w["normal3f inputs:normal.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3076
- Q.normalMap = k(F), Q.normalMap.colorSpace = oA, 'def Shader "Transform2d_normal"' in b && l(Q.normalMap, b['def Shader "Transform2d_normal"']);
3077
- }
3078
- if ("float inputs:roughness.connect" in w) {
3079
- const S = w["float inputs:roughness.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3080
- Q.roughness = 1, Q.roughnessMap = k(F), Q.roughnessMap.colorSpace = oA, 'def Shader "Transform2d_roughness"' in b && l(Q.roughnessMap, b['def Shader "Transform2d_roughness"']);
3081
- } else "float inputs:roughness" in w && (Q.roughness = parseFloat(w["float inputs:roughness"]));
3082
- if ("float inputs:metallic.connect" in w) {
3083
- const S = w["float inputs:metallic.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3084
- Q.metalness = 1, Q.metalnessMap = k(F), Q.metalnessMap.colorSpace = oA, 'def Shader "Transform2d_metallic"' in b && l(Q.metalnessMap, b['def Shader "Transform2d_metallic"']);
3085
- } else "float inputs:metallic" in w && (Q.metalness = parseFloat(w["float inputs:metallic"]));
3086
- if ("float inputs:clearcoat.connect" in w) {
3087
- const S = w["float inputs:clearcoat.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3088
- Q.clearcoat = 1, Q.clearcoatMap = k(F), Q.clearcoatMap.colorSpace = oA, 'def Shader "Transform2d_clearcoat"' in b && l(Q.clearcoatMap, b['def Shader "Transform2d_clearcoat"']);
3089
- } else "float inputs:clearcoat" in w && (Q.clearcoat = parseFloat(w["float inputs:clearcoat"]));
3090
- if ("float inputs:clearcoatRoughness.connect" in w) {
3091
- const S = w["float inputs:clearcoatRoughness.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3092
- Q.clearcoatRoughness = 1, Q.clearcoatRoughnessMap = k(F), Q.clearcoatRoughnessMap.colorSpace = oA, 'def Shader "Transform2d_clearcoatRoughness"' in b && l(Q.clearcoatRoughnessMap, b['def Shader "Transform2d_clearcoatRoughness"']);
3093
- } else "float inputs:clearcoatRoughness" in w && (Q.clearcoatRoughness = parseFloat(w["float inputs:clearcoatRoughness"]));
3094
- if ("float inputs:ior" in w && (Q.ior = parseFloat(w["float inputs:ior"])), "float inputs:occlusion.connect" in w) {
3095
- const S = w["float inputs:occlusion.connect"], F = u(I, /(\w+).output/.exec(S)[1]);
3096
- Q.aoMap = k(F), Q.aoMap.colorSpace = oA, 'def Shader "Transform2d_occlusion"' in b && l(Q.aoMap, b['def Shader "Transform2d_occlusion"']);
3097
- }
3098
- }
3099
- }
3100
- return Q;
3101
- }
3102
- function u(b, Q) {
3103
- for (const m in b) {
3104
- const D = b[m];
3105
- if (m.startsWith(`def Shader "${Q}"`))
3106
- return D;
3107
- if (typeof D == "object") {
3108
- const w = u(D, Q);
3109
- if (w) return w;
3110
- }
3111
- }
3112
- }
3113
- function k(b) {
3114
- if ("asset inputs:file" in b) {
3115
- const Q = b["asset inputs:file"].replace(/@*/g, "").trim(), D = new Te().load(o[Q]), w = {
3116
- '"clamp"': Ue,
3117
- '"mirror"': _e,
3118
- '"repeat"': xA
3119
- };
3120
- return "token inputs:wrapS" in b && (D.wrapS = w[b["token inputs:wrapS"]]), "token inputs:wrapT" in b && (D.wrapT = w[b["token inputs:wrapT"]]), D;
3121
- }
3122
- return null;
3123
- }
3124
- function R(b) {
3125
- const Q = C(g(b)), m = h(p(b)), D = Q ? new Me(Q, m) : new ie();
3126
- if ("matrix4d xformOp:transform" in b) {
3127
- const w = JSON.parse("[" + b["matrix4d xformOp:transform"].replace(/[()]*/g, "") + "]");
3128
- D.matrix.fromArray(w), D.matrix.decompose(D.position, D.quaternion, D.scale);
3129
- }
3130
- return D;
3131
- }
3132
- function G(b, Q) {
3133
- for (const m in b)
3134
- if (m.startsWith("def Scope"))
3135
- G(b[m], Q);
3136
- else if (m.startsWith("def Xform")) {
3137
- const D = R(b[m]);
3138
- /def Xform "(\w+)"/.test(m) && (D.name = /def Xform "(\w+)"/.exec(m)[1]), Q.add(D), G(b[m], D);
3139
- }
3140
- }
3141
- const M = new kA();
3142
- return G(I, M), M;
3143
- }
3144
- }
3145
- function Gi() {
3146
- const n = new yi();
3147
- return n.manager.onError = (A) => {
3148
- V.emit("load-error", `Failed to load file ${A}`);
3149
- }, n;
3150
- }
3151
- function xi(n) {
3152
- const A = z(
3153
- async (a, t, i) => {
3154
- var I, g;
3155
- const s = new Map(t.map((B) => [B.name, B])), o = (((I = a.buffers) == null ? void 0 : I.length) || 0) + (((g = a.images) == null ? void 0 : g.length) || 0);
3156
- let r = 0;
3157
- const c = () => {
3158
- r++, i(r / o * 100);
3159
- };
3160
- if (a.buffers)
3161
- for (let B = 0; B < a.buffers.length; B++) {
3162
- const C = a.buffers[B];
3163
- if (!C.uri || C.uri.startsWith("data:")) {
3164
- c();
3165
- continue;
3166
- }
3167
- const f = C.uri.split("/").pop() || "", d = s.get(f);
3168
- if (d) {
3169
- const p = await d.arrayBuffer(), E = await pe(p);
3170
- C.uri = `data:application/octet-stream;base64,${E}`;
3171
- }
3172
- c();
3173
- }
3174
- if (a.images)
3175
- for (let B = 0; B < a.images.length; B++) {
3176
- const C = a.images[B];
3177
- if (!C.uri || C.uri.startsWith("data:")) {
3178
- c();
3179
- continue;
3180
- }
3181
- const f = C.uri.split("/").pop() || "", d = s.get(f);
3182
- if (d) {
3183
- const p = await d.arrayBuffer(), E = await pe(p), l = d.type || "image/png";
3184
- C.uri = `data:${l};base64,${E}`;
3185
- }
3186
- c();
3187
- }
3188
- return a;
3189
- },
3190
- []
3191
- );
3192
- return { loadGltf: z(
3193
- (a, t, i) => {
3194
- const s = new FileReader();
3195
- s.onload = async (o) => {
3196
- var g;
3197
- const r = JSON.parse((g = o.target) == null ? void 0 : g.result);
3198
- i(10);
3199
- const c = await A(
3200
- r,
3201
- t,
3202
- (B) => {
3203
- i(10 + B * 0.8);
3204
- }
3205
- );
3206
- oe().parse(JSON.stringify(c), "", (B) => {
3207
- n({
3208
- type: "set-file",
3209
- payload: {
3210
- model: B.scene,
3211
- type: q.gltf,
3212
- name: a.name
3213
- }
3214
- });
3215
- }), i(100), n({ type: "set-file-loading", payload: !1 });
3216
- }, s.readAsText(a);
3217
- },
3218
- [n, A]
3219
- ) };
3220
- }
3221
- function Ti(n) {
3222
- return { loadBinary: z(
3223
- (e, a, t) => {
3224
- const i = new FileReader();
3225
- i.onload = async (s) => {
3226
- var o;
3227
- if ((o = s.target) != null && o.result) {
3228
- const r = s.target.result;
3229
- if (a === q.glb)
3230
- oe().parse(r, "", (I) => {
3231
- n({
3232
- type: "set-file",
3233
- payload: {
3234
- model: I.scene,
3235
- type: q.glb,
3236
- name: e.name
3237
- }
3238
- });
3239
- });
3240
- else if (a === q.usdz) {
3241
- const I = Gi().parse(r);
3242
- n({
3243
- type: "set-file",
3244
- payload: {
3245
- model: I,
3246
- type: q.usdz,
3247
- name: e.name
3248
- }
3249
- });
3250
- }
3251
- t(), n({ type: "set-file-loading", payload: !1 });
3252
- }
3253
- }, i.onerror = (s) => {
3254
- console.error("Error reading file:", s), n({ type: "set-file-loading", payload: !1 });
3255
- }, i.readAsArrayBuffer(e);
3256
- },
3257
- [n]
3258
- ) };
3259
- }
3260
- function Li(n) {
3261
- const A = Ct(!1), [e, a] = bt(Ca, He), { loadGltf: t } = xi(a), { loadBinary: i } = Ti(a), s = z(
3262
- (B, C) => B.find((f) => f.name.endsWith("." + C)),
3263
- []
3264
- ), o = z((B) => {
3265
- a({ type: "set-progress", payload: B }), V.emit("load-progress", B);
3266
- }, []), r = z(() => {
3267
- a({ type: "reset-state" }), V.emit("load-reset");
3268
- }, []), c = z(
3269
- (B) => {
3270
- if (B.length === 0) return;
3271
- const C = s(B, q.gltf), f = s(B, q.glb), d = s(B, q.usdz), p = [C, f, d].filter(
3272
- Boolean
3273
- );
3274
- if (p.length > 1) {
3275
- V.emit("multiple-models", p);
3276
- return;
3277
- }
3278
- const E = B.filter(
3279
- (h) => h !== C && h !== f && h !== d
3280
- ), l = (h) => {
3281
- o(h), h === 100 && (A.current = !0);
3282
- };
3283
- if (C)
3284
- t(C, E, l);
3285
- else if (f)
3286
- i(f, q.glb, () => l(100));
3287
- else if (d)
3288
- i(
3289
- d,
3290
- q.usdz,
3291
- () => l(100)
3292
- );
3293
- else {
3294
- V.emit("not-loaded-files", B), a({ type: "set-file-loading", payload: !1 });
3295
- return;
3296
- }
3297
- },
3298
- [o, s, t, i]
3299
- ), I = z(
3300
- async (B) => {
3301
- const C = [];
3302
- V.emit("load-start"), a({ type: "reset-state" }), a({ type: "set-file-loading", payload: !0 }), o(0), A.current = !1;
3303
- for (const f of B)
3304
- if (f instanceof File)
3305
- C.push(f);
3306
- else if ("kind" in f && f.kind === "directory") {
3307
- const d = await ba(f);
3308
- C.push(...d);
3309
- }
3310
- c(C);
3311
- },
3312
- [c, o]
3313
- );
3314
- lt(() => {
3315
- A.current && e.file && (V.emit("load-complete", e.file), A.current = !1, n && e.file.model && n.load(e.file.model));
3316
- }, [e.file, n]);
3317
- const g = Mi(
3318
- n,
3319
- a,
3320
- e.file
3321
- );
3322
- return {
3323
- ...e,
3324
- /**
3325
- * Add an event listener to the event system.
3326
- */
3327
- on: V.on,
3328
- /**
3329
- * Remove an event listener from the event system.
3330
- */
3331
- off: V.off,
3332
- /**
3333
- * Load a model and integrate it with the optimizer if available.
3334
- * This also makes the model available in the use-model-context hook.
3335
- */
3336
- load: I,
3337
- /**
3338
- * Reset the model and optimizer state to the initial state.
3339
- */
3340
- reset: r,
3341
- /**
3342
- * Integration of the optimizer
3343
- * An object containing functions to interact with the optimizer.
3344
- *
3345
- * It exposes the following functions:
3346
- *
3347
- * - `simplifyOptimization(options?: SimplifyOptions)`: Runs the simplification optimization with the given options.
3348
- * - `dedupOptimization(options?: DedupOptions)`: Runs the deduplication optimization with the given options.
3349
- * - `quantizeOptimization(options?: QuantizeOptions)`: Runs the quantization optimization with the given options.
3350
- * - `texturesCompressionOptimization(options?: TextureCompressionOptions)`: Runs the texture compression optimization with the given options.
3351
- * - `getSize()`: Returns the size of the optimized model.
3352
- * - `reset()`: Resets the optimizer.
3353
- * - `report`: The report state of the optimizer.
3354
- * - `error`: The error state of the optimizer.
3355
- * - `loading`: The loading state of the optimizer.
3356
- */
3357
- optimize: g
3358
- };
3359
- }
3360
- function Mi(n, A, e) {
3361
- const a = z(
3362
- (o) => {
3363
- oe().parse(
3364
- o.buffer,
3365
- "",
3366
- (c) => {
3367
- A({
3368
- type: "set-file",
3369
- payload: {
3370
- model: c.scene,
3371
- type: q.glb,
3372
- name: (e == null ? void 0 : e.name) || "optimized.glb"
3373
- }
3374
- });
3375
- },
3376
- (c) => {
3377
- console.error("Error loading new model:", c);
3378
- }
3379
- );
3380
- },
3381
- [A, e]
3382
- ), t = z(
3383
- async (o, r) => {
3384
- if (!n || !o) {
3385
- console.warn("Optimizer or optimization function is not available");
3386
- return;
3387
- }
3388
- try {
3389
- await o(r);
3390
- const c = await n.getModel();
3391
- c && a(c);
3392
- } catch (c) {
3393
- console.error("Optimization failed:", c);
3394
- }
3395
- },
3396
- [n, a]
3397
- ), i = (o) => () => {
3398
- console.warn(o);
3399
- }, s = {
3400
- simplifyOptimization: i(
3401
- "Optimizer is not available"
3402
- ),
3403
- dedupOptimization: i("Optimizer is not available"),
3404
- quantizeOptimization: i(
3405
- "Optimizer is not available"
3406
- ),
3407
- normalsOptimization: i("Optimizer is not available"),
3408
- texturesCompressOptimization: i(
3409
- "Optimizer is not available"
3410
- ),
3411
- getSize: i("Optimizer is not available"),
3412
- reset: i("Optimizer is not available"),
3413
- report: null,
3414
- error: null,
3415
- loading: !1
3416
- };
3417
- return n ? {
3418
- simplifyOptimization: (o) => t(n.simplifyOptimization, o),
3419
- dedupOptimization: (o) => t(n.dedupOptimization, o),
3420
- quantizeOptimization: (o) => t(n.quantizeOptimization, o),
3421
- normalsOptimization: (o) => t(n.normalsOptimization, o),
3422
- texturesCompressOptimization: (o) => t(n.texturesOptimization, o),
3423
- getSize: n.getSize,
3424
- reset: n.reset,
3425
- report: n.report,
3426
- // Include the report state
3427
- error: n.error,
3428
- // Include the error state
3429
- loading: n.loading
3430
- // Include the loading state
3431
- } : s;
3432
- }
3433
- const gt = ft({}), qi = ({ children: n, optimizer: A }) => {
3434
- const e = Li(A);
3435
- return /* @__PURE__ */ Bt(gt.Provider, { value: e, children: n });
3436
- }, Hi = () => Et(gt);
3437
- export {
3438
- q as M,
3439
- gt as a,
3440
- qi as b,
3441
- Hi as c,
3442
- Li as u
3443
- };