@needle-tools/gltf-progressive 1.0.0-alpha.6 → 1.0.0-alpha.7

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.0.0-alpha.7] - 2023-05-01
8
+ - fix: Handle modelviewer `src` set as property but not as attribute
9
+ - change: Remove sourcemap
10
+
7
11
  ## [1.0.0-alpha.6] - 2023-05-01
8
12
  - fix: LOD mesh assignment for multi-material meshes (meshes with multiple primitives)
9
13
 
@@ -1,18 +1,18 @@
1
- var ne = Object.defineProperty;
2
- var ae = (l, e, t) => e in l ? ne(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t;
1
+ var oe = Object.defineProperty;
2
+ var ae = (l, e, t) => e in l ? oe(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t;
3
3
  var u = (l, e, t) => (ae(l, typeof e != "symbol" ? e + "" : e, t), t);
4
- import { Mesh as Y, BufferGeometry as X, Material as le, RawShaderMaterial as ue, Texture as z, TextureLoader as ce, Matrix4 as Z, Frustum as fe, Sphere as de, Box3 as j, Vector3 as C } from "three";
4
+ import { Mesh as Y, BufferGeometry as q, Material as le, RawShaderMaterial as ue, Texture as G, TextureLoader as ce, Matrix4 as Z, Frustum as fe, Sphere as de, Box3 as j, Vector3 as C } from "three";
5
5
  import { GLTFLoader as ge } from "three/examples/jsm/loaders/GLTFLoader.js";
6
6
  import { MeshoptDecoder as he } from "three/examples/jsm/libs/meshopt_decoder.module.js";
7
7
  import { DRACOLoader as pe } from "three/examples/jsm/loaders/DRACOLoader.js";
8
8
  import { KTX2Loader as ye } from "three/examples/jsm/loaders/KTX2Loader.js";
9
9
  const Le = "https://www.gstatic.com/draco/versioned/decoders/1.4.1/", De = "https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";
10
- let U, V, I;
10
+ let z, V, W;
11
11
  function se(l) {
12
- U || (U = new pe(), U.setDecoderPath(Le), U.setDecoderConfig({ type: "js" })), I || (I = new ye(), I.setTranscoderPath(De)), V || (V = he), l ? I.detectSupport(l) : console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail");
12
+ z || (z = new pe(), z.setDecoderPath(Le), z.setDecoderConfig({ type: "js" })), W || (W = new ye(), W.setTranscoderPath(De)), V || (V = he), l ? W.detectSupport(l) : console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail");
13
13
  }
14
14
  function ie(l) {
15
- l.dracoLoader || l.setDRACOLoader(U), l.ktx2Loader || l.setKTX2Loader(I), l.meshoptDecoder || l.setMeshoptDecoder(V);
15
+ l.dracoLoader || l.setDRACOLoader(z), l.ktx2Loader || l.setKTX2Loader(W), l.meshoptDecoder || l.setMeshoptDecoder(V);
16
16
  }
17
17
  function Q(l) {
18
18
  const t = new URL(window.location.href).searchParams.get(l);
@@ -34,25 +34,25 @@ const H = new Array();
34
34
  function ke(l) {
35
35
  H.push(l);
36
36
  }
37
- const R = "NEEDLE_progressive", S = Q("debugprogressive"), q = Symbol("needle-progressive-texture"), W = /* @__PURE__ */ new Map(), J = /* @__PURE__ */ new Set();
37
+ const R = "NEEDLE_progressive", S = Q("debugprogressive"), N = Symbol("needle-progressive-texture"), I = /* @__PURE__ */ new Map(), J = /* @__PURE__ */ new Set();
38
38
  if (S) {
39
39
  let l = function() {
40
- e += 1, console.log("Toggle LOD level", e, W), W.forEach((i, o) => {
40
+ e += 1, console.log("Toggle LOD level", e, I), I.forEach((i, n) => {
41
41
  for (const s of i.keys) {
42
- const n = o[s];
43
- if (n.isBufferGeometry === !0) {
44
- const a = M.getMeshLODInformation(n), g = a ? Math.min(e, a.lods.length) : 0;
45
- o["DEBUG:LOD"] = e, M.assignMeshLOD(o, g), a && (t = Math.max(t, a.lods.length - 1));
46
- } else if (o.isMaterial === !0) {
47
- o["DEBUG:LOD"] = e, M.assignTextureLOD(o, e);
42
+ const o = n[s];
43
+ if (o.isBufferGeometry === !0) {
44
+ const a = v.getMeshLODInformation(o), g = a ? Math.min(e, a.lods.length) : 0;
45
+ n["DEBUG:LOD"] = e, v.assignMeshLOD(n, g), a && (t = Math.max(t, a.lods.length - 1));
46
+ } else if (n.isMaterial === !0) {
47
+ n["DEBUG:LOD"] = e, v.assignTextureLOD(n, e);
48
48
  break;
49
49
  }
50
50
  }
51
51
  }), e >= t && (e = -1);
52
52
  }, e = -1, t = 2, r = !1;
53
53
  window.addEventListener("keyup", (i) => {
54
- i.key === "p" && l(), i.key === "w" && (r = !r, J && J.forEach((o) => {
55
- o.name != "BackgroundCubeMaterial" && "wireframe" in o && (o.wireframe = r);
54
+ i.key === "p" && l(), i.key === "w" && (r = !r, J && J.forEach((n) => {
55
+ n.name != "BackgroundCubeMaterial" && "wireframe" in n && (n.wireframe = r);
56
56
  }));
57
57
  });
58
58
  }
@@ -60,11 +60,11 @@ function ee(l, e, t) {
60
60
  var i;
61
61
  if (!S)
62
62
  return;
63
- W.has(l) || W.set(l, { keys: [], sourceId: t });
64
- const r = W.get(l);
63
+ I.has(l) || I.set(l, { keys: [], sourceId: t });
64
+ const r = I.get(l);
65
65
  ((i = r == null ? void 0 : r.keys) == null ? void 0 : i.includes(e)) == !1 && r.keys.push(e);
66
66
  }
67
- const v = class {
67
+ const M = class {
68
68
  constructor(e, t) {
69
69
  u(this, "parser");
70
70
  u(this, "url");
@@ -84,11 +84,11 @@ const v = class {
84
84
  * @returns true if the LOD level is available (or if any LOD level is available if level is undefined)
85
85
  */
86
86
  static hasLODLevelAvailable(e, t) {
87
- var o;
87
+ var n;
88
88
  if (e.isMaterial === !0) {
89
89
  for (const s of Object.keys(e)) {
90
- const n = e[s];
91
- if (n.isTexture && this.hasLODLevelAvailable(n, t))
90
+ const o = e[s];
91
+ if (o.isTexture && this.hasLODLevelAvailable(o, t))
92
92
  return !0;
93
93
  }
94
94
  return !1;
@@ -98,7 +98,7 @@ const v = class {
98
98
  return !0;
99
99
  }
100
100
  let r, i;
101
- if (e.isMesh ? r = e.geometry : (e.isBufferGeometry || e.isTexture) && (r = e), r && (o = r == null ? void 0 : r.userData) != null && o.LODS) {
101
+ if (e.isMesh ? r = e.geometry : (e.isBufferGeometry || e.isTexture) && (r = e), r && (n = r == null ? void 0 : r.userData) != null && n.LODS) {
102
102
  const s = r.userData.LODS;
103
103
  if (i = this.lodInfos.get(s.key), t === void 0)
104
104
  return i != null;
@@ -126,18 +126,18 @@ const v = class {
126
126
  if (!e)
127
127
  return Promise.resolve(null);
128
128
  if (e instanceof Y || e.isMesh === !0) {
129
- const i = e.geometry, o = this.getAssignedLODInformation(i);
130
- if (!o)
129
+ const i = e.geometry, n = this.getAssignedLODInformation(i);
130
+ if (!n)
131
131
  return Promise.resolve(null);
132
132
  for (const s of H)
133
133
  (r = s.onBeforeGetLODMesh) == null || r.call(s, e, t);
134
- return e["LOD:requested level"] = t, v.getOrLoadLOD(i, t).then((s) => {
134
+ return e["LOD:requested level"] = t, M.getOrLoadLOD(i, t).then((s) => {
135
135
  if (e["LOD:requested level"] === t) {
136
136
  if (delete e["LOD:requested level"], Array.isArray(s)) {
137
- const n = o.index || 0;
138
- s = s[n];
137
+ const o = n.index || 0;
138
+ s = s[o];
139
139
  }
140
- s && i != s && s instanceof X && (e.geometry = s, S && ee(e, "geometry", o.url));
140
+ s && i != s && s instanceof q && (e.geometry = s, S && ee(e, "geometry", n.url));
141
141
  }
142
142
  return s;
143
143
  }).catch((s) => (console.error("Error loading mesh LOD", e, s), null));
@@ -156,97 +156,97 @@ const v = class {
156
156
  if (!e)
157
157
  return Promise.resolve(null);
158
158
  if (e instanceof le || e.isMaterial === !0) {
159
- const r = e, i = [], o = new Array();
159
+ const r = e, i = [], n = new Array();
160
160
  if (S && J.add(r), r instanceof ue)
161
161
  for (const s of Object.keys(r.uniforms)) {
162
- const n = r.uniforms[s].value;
163
- if ((n == null ? void 0 : n.isTexture) === !0) {
164
- const a = this.assignTextureLODForSlot(n, t, r, s);
165
- i.push(a), o.push(s);
162
+ const o = r.uniforms[s].value;
163
+ if ((o == null ? void 0 : o.isTexture) === !0) {
164
+ const a = this.assignTextureLODForSlot(o, t, r, s);
165
+ i.push(a), n.push(s);
166
166
  }
167
167
  }
168
168
  else
169
169
  for (const s of Object.keys(r)) {
170
- const n = r[s];
171
- if ((n == null ? void 0 : n.isTexture) === !0) {
172
- const a = this.assignTextureLODForSlot(n, t, r, s);
173
- i.push(a), o.push(s);
170
+ const o = r[s];
171
+ if ((o == null ? void 0 : o.isTexture) === !0) {
172
+ const a = this.assignTextureLODForSlot(o, t, r, s);
173
+ i.push(a), n.push(s);
174
174
  }
175
175
  }
176
176
  return Promise.all(i).then((s) => {
177
- const n = new Array();
177
+ const o = new Array();
178
178
  for (let a = 0; a < s.length; a++) {
179
- const g = s[a], f = o[a];
180
- g && g.isTexture === !0 ? n.push({ material: r, slot: f, texture: g, level: t }) : n.push({ material: r, slot: f, texture: null, level: t });
179
+ const g = s[a], f = n[a];
180
+ g && g.isTexture === !0 ? o.push({ material: r, slot: f, texture: g, level: t }) : o.push({ material: r, slot: f, texture: null, level: t });
181
181
  }
182
- return n;
182
+ return o;
183
183
  });
184
184
  }
185
- if (e instanceof z || e.isTexture === !0) {
185
+ if (e instanceof G || e.isTexture === !0) {
186
186
  const r = e;
187
187
  return this.assignTextureLODForSlot(r, t, null, null);
188
188
  }
189
189
  return Promise.resolve(null);
190
190
  }
191
191
  static assignTextureLODForSlot(e, t, r, i) {
192
- return (e == null ? void 0 : e.isTexture) !== !0 ? Promise.resolve(null) : v.getOrLoadLOD(e, t).then((o) => {
193
- if (Array.isArray(o))
192
+ return (e == null ? void 0 : e.isTexture) !== !0 ? Promise.resolve(null) : M.getOrLoadLOD(e, t).then((n) => {
193
+ if (Array.isArray(n))
194
194
  return null;
195
- if ((o == null ? void 0 : o.isTexture) === !0) {
196
- if (o != e && (r && i && (r[i] = o), S && i && r)) {
195
+ if ((n == null ? void 0 : n.isTexture) === !0) {
196
+ if (n != e && (r && i && (r[i] = n), S && i && r)) {
197
197
  const s = this.getAssignedLODInformation(e);
198
198
  s && ee(r, i, s.url);
199
199
  }
200
- return o;
200
+ return n;
201
201
  } else
202
202
  S == "verbose" && console.warn("No LOD found for", e, t);
203
203
  return null;
204
- }).catch((o) => (console.error("Error loading LOD", e, o), null));
204
+ }).catch((n) => (console.error("Error loading LOD", e, n), null));
205
205
  }
206
206
  afterRoot(e) {
207
207
  var t, r;
208
- return S && console.log("AFTER", this.url, e), (t = this.parser.json.textures) == null || t.forEach((i, o) => {
208
+ return S && console.log("AFTER", this.url, e), (t = this.parser.json.textures) == null || t.forEach((i, n) => {
209
209
  if (i != null && i.extensions) {
210
210
  const s = i == null ? void 0 : i.extensions[R];
211
211
  if (s) {
212
- let n = !1;
212
+ let o = !1;
213
213
  for (const a of this.parser.associations.keys())
214
- a.isTexture === !0 && this.parser.associations.get(a).textures === o && (n = !0, v.registerTexture(this.url, a, o, s));
215
- n || this.parser.getDependency("texture", o).then((a) => {
216
- a && v.registerTexture(this.url, a, o, s);
214
+ a.isTexture === !0 && this.parser.associations.get(a).textures === n && (o = !0, M.registerTexture(this.url, a, n, s));
215
+ o || this.parser.getDependency("texture", n).then((a) => {
216
+ a && M.registerTexture(this.url, a, n, s);
217
217
  });
218
218
  }
219
219
  }
220
- }), (r = this.parser.json.meshes) == null || r.forEach((i, o) => {
220
+ }), (r = this.parser.json.meshes) == null || r.forEach((i, n) => {
221
221
  if (i != null && i.extensions) {
222
222
  const s = i == null ? void 0 : i.extensions[R];
223
223
  if (s && s.lods) {
224
- for (const n of this.parser.associations.keys())
225
- if (n.isMesh) {
226
- const a = this.parser.associations.get(n);
227
- a.meshes === o && v.registerMesh(this.url, s.guid, n, s.lods.length, a.primitives, s);
224
+ for (const o of this.parser.associations.keys())
225
+ if (o.isMesh) {
226
+ const a = this.parser.associations.get(o);
227
+ a.meshes === n && M.registerMesh(this.url, s.guid, o, s.lods.length, a.primitives, s);
228
228
  }
229
229
  }
230
230
  }
231
231
  }), null;
232
232
  }
233
233
  static async getOrLoadLOD(e, t) {
234
- var n, a, g;
234
+ var o, a, g;
235
235
  const r = S == "verbose", i = e.userData.LODS;
236
236
  if (!i)
237
237
  return null;
238
- const o = i == null ? void 0 : i.key;
238
+ const n = i == null ? void 0 : i.key;
239
239
  let s;
240
240
  if (e.isTexture === !0) {
241
241
  const f = e;
242
- f.source && f.source[q] && (s = f.source[q]);
242
+ f.source && f.source[N] && (s = f.source[N]);
243
243
  }
244
- if (s || (s = v.lodInfos.get(o)), s) {
244
+ if (s || (s = M.lodInfos.get(n)), s) {
245
245
  if (t > 0) {
246
246
  let d = !1;
247
247
  const w = Array.isArray(s.lods);
248
248
  if (w && t >= s.lods.length ? d = !0 : w || (d = !0), d)
249
- return this.lowresCache.get(o);
249
+ return this.lowresCache.get(n);
250
250
  }
251
251
  const f = Array.isArray(s.lods) ? s.lods[t].path : s.lods;
252
252
  if (!f)
@@ -258,20 +258,20 @@ const v = class {
258
258
  const d = L + "_" + s.guid, w = this.previouslyLoaded.get(d);
259
259
  if (w !== void 0) {
260
260
  r && console.log(`LOD ${t} was already loading/loaded: ${d}`);
261
- let m = await w.catch((G) => (console.error(`Error loading LOD ${t} from ${L}
262
- `, G), null)), B = !1;
263
- if (m == null || (m instanceof z && e instanceof z ? (n = m.image) != null && n.data || (a = m.source) != null && a.data ? m = this.copySettings(e, m) : (B = !0, this.previouslyLoaded.delete(d)) : m instanceof X && e instanceof X && ((g = m.attributes.position) != null && g.array || (B = !0, this.previouslyLoaded.delete(d)))), !B)
261
+ let m = await w.catch((E) => (console.error(`Error loading LOD ${t} from ${L}
262
+ `, E), null)), B = !1;
263
+ if (m == null || (m instanceof G && e instanceof G ? (o = m.image) != null && o.data || (a = m.source) != null && a.data ? m = this.copySettings(e, m) : (B = !0, this.previouslyLoaded.delete(d)) : m instanceof q && e instanceof q && ((g = m.attributes.position) != null && g.array || (B = !0, this.previouslyLoaded.delete(d)))), !B)
264
264
  return m;
265
265
  }
266
- const D = s, A = new Promise(async (m, B) => {
267
- const G = new ge();
268
- ie(G), S && (await new Promise((p) => setTimeout(p, 1e3)), r && console.warn("Start loading (delayed) " + L, D.guid));
266
+ const D = s, b = new Promise(async (m, B) => {
267
+ const E = new ge();
268
+ ie(E), S && (await new Promise((p) => setTimeout(p, 1e3)), r && console.warn("Start loading (delayed) " + L, D.guid));
269
269
  let y = L;
270
270
  if (D && Array.isArray(D.lods)) {
271
271
  const p = D.lods[t];
272
272
  p.hash && (y += "?v=" + p.hash);
273
273
  }
274
- const h = await G.loadAsync(y).catch((p) => (console.error(`Error loading LOD ${t} from ${L}
274
+ const h = await E.loadAsync(y).catch((p) => (console.error(`Error loading LOD ${t} from ${L}
275
275
  `, p), null));
276
276
  if (!h)
277
277
  return null;
@@ -292,7 +292,7 @@ const v = class {
292
292
  }
293
293
  if (p) {
294
294
  let c = await T.getDependency("texture", x);
295
- return r && console.log('change "' + e.name + '" → "' + c.name + '"', L, x, c, d), e instanceof z && (c = this.copySettings(e, c)), c && (c.guid = D.guid), m(c);
295
+ return r && console.log('change "' + e.name + '" → "' + c.name + '"', L, x, c, d), e instanceof G && (c = this.copySettings(e, c)), c && (c.guid = D.guid), m(c);
296
296
  }
297
297
  }
298
298
  if (x = 0, h.parser.json.meshes) {
@@ -310,39 +310,39 @@ const v = class {
310
310
  if (p) {
311
311
  const c = await T.getDependency("mesh", x), O = D;
312
312
  if (r && console.log(`Loaded Mesh "${c.name}"`, L, x, c, d), c.isMesh === !0) {
313
- const b = c.geometry;
314
- return v.assignLODInformation(i.url, b, o, t, void 0, O.density), m(b);
313
+ const P = c.geometry;
314
+ return M.assignLODInformation(i.url, P, n, t, void 0, O.density), m(P);
315
315
  } else {
316
- const b = new Array();
316
+ const P = new Array();
317
317
  for (let _ = 0; _ < c.children.length; _++) {
318
- const F = c.children[_];
319
- if (F instanceof Y) {
320
- const $ = F.geometry;
321
- v.assignLODInformation(i.url, $, o, t, _, O.density), b.push($);
318
+ const U = c.children[_];
319
+ if (U instanceof Y) {
320
+ const $ = U.geometry;
321
+ M.assignLODInformation(i.url, $, n, t, _, O.density), P.push($);
322
322
  }
323
323
  }
324
- return m(b);
324
+ return m(P);
325
325
  }
326
326
  }
327
327
  }
328
328
  return m(null);
329
329
  });
330
- return this.previouslyLoaded.set(d, A), await A;
331
- } else if (e instanceof z) {
330
+ return this.previouslyLoaded.set(d, b), await b;
331
+ } else if (e instanceof G) {
332
332
  r && console.log("Load texture from uri: " + L);
333
333
  const w = await new ce().loadAsync(L);
334
334
  return w ? (w.guid = s.guid, w.flipY = !1, w.needsUpdate = !0, w.colorSpace = e.colorSpace, r && console.log(s, w)) : S && console.warn("failed loading", L), w;
335
335
  }
336
336
  } else
337
- S && console.warn(`Can not load LOD ${t}: no LOD info found for "${o}" ${e.name}`, e.type);
337
+ S && console.warn(`Can not load LOD ${t}: no LOD info found for "${n}" ${e.name}`, e.type);
338
338
  return null;
339
339
  }
340
- static assignLODInformation(e, t, r, i, o, s) {
340
+ static assignLODInformation(e, t, r, i, n, s) {
341
341
  if (!t)
342
342
  return;
343
343
  t.userData || (t.userData = {});
344
- const n = new xe(e, r, i, o, s);
345
- t.userData.LODS = n, t.userData.LOD = i;
344
+ const o = new xe(e, r, i, n, s);
345
+ t.userData.LODS = o, t.userData.LOD = i;
346
346
  }
347
347
  static getAssignedLODInformation(e) {
348
348
  var t;
@@ -353,32 +353,32 @@ const v = class {
353
353
  return r || (t = t.clone(), this._copiedTextures.set(e, t), t.offset = e.offset, t.repeat = e.repeat, t.colorSpace = e.colorSpace, t);
354
354
  }
355
355
  };
356
- let M = v;
356
+ let v = M;
357
357
  /**
358
358
  * Register a texture with LOD information
359
359
  */
360
- u(M, "registerTexture", (e, t, r, i) => {
361
- S && console.log("> Progressive: register texture", r, t.name, t.uuid, t, i), t.source && (t.source[q] = i);
362
- const o = i.guid;
363
- v.assignLODInformation(e, t, o, 0, 0, void 0), v.lodInfos.set(o, i), v.lowresCache.set(o, t);
360
+ u(v, "registerTexture", (e, t, r, i) => {
361
+ S && console.log("> Progressive: register texture", r, t.name, t.uuid, t, i), t.source && (t.source[N] = i);
362
+ const n = i.guid;
363
+ M.assignLODInformation(e, t, n, 0, 0, void 0), M.lodInfos.set(n, i), M.lowresCache.set(n, t);
364
364
  }), /**
365
365
  * Register a mesh with LOD information
366
366
  */
367
- u(M, "registerMesh", (e, t, r, i, o, s) => {
367
+ u(v, "registerMesh", (e, t, r, i, n, s) => {
368
368
  var g;
369
- S && console.log("> Progressive: register mesh", o, r.name, s, r.uuid, r);
370
- const n = r.geometry;
371
- n.userData || (n.userData = {}), v.assignLODInformation(e, n, t, i, o, s.density), v.lodInfos.set(t, s);
372
- let a = v.lowresCache.get(t);
373
- a ? a.push(r.geometry) : a = [r.geometry], v.lowresCache.set(t, a);
369
+ S && console.log("> Progressive: register mesh", n, r.name, s, r.uuid, r);
370
+ const o = r.geometry;
371
+ o.userData || (o.userData = {}), M.assignLODInformation(e, o, t, i, n, s.density), M.lodInfos.set(t, s);
372
+ let a = M.lowresCache.get(t);
373
+ a ? a.push(r.geometry) : a = [r.geometry], M.lowresCache.set(t, a);
374
374
  for (const f of H)
375
375
  (g = f.onRegisteredNewMesh) == null || g.call(f, r, s);
376
376
  }), /** A map of key = asset uuid and value = LOD information */
377
- u(M, "lodInfos", /* @__PURE__ */ new Map()), /** cache of already loaded mesh lods */
378
- u(M, "previouslyLoaded", /* @__PURE__ */ new Map()), /** this contains the geometry/textures that were originally loaded */
379
- u(M, "lowresCache", /* @__PURE__ */ new Map()), u(M, "_copiedTextures", /* @__PURE__ */ new Map());
377
+ u(v, "lodInfos", /* @__PURE__ */ new Map()), /** cache of already loaded mesh lods */
378
+ u(v, "previouslyLoaded", /* @__PURE__ */ new Map()), /** this contains the geometry/textures that were originally loaded */
379
+ u(v, "lowresCache", /* @__PURE__ */ new Map()), u(v, "_copiedTextures", /* @__PURE__ */ new Map());
380
380
  class xe {
381
- constructor(e, t, r, i, o) {
381
+ constructor(e, t, r, i, n) {
382
382
  u(this, "url");
383
383
  /** the key to lookup the LOD information */
384
384
  u(this, "key");
@@ -387,10 +387,10 @@ class xe {
387
387
  u(this, "index");
388
388
  /** the mesh density */
389
389
  u(this, "density");
390
- this.url = e, this.key = t, this.level = r, i != null && (this.index = i), o != null && (this.density = o);
390
+ this.url = e, this.key = t, this.level = r, i != null && (this.index = i), n != null && (this.density = n);
391
391
  }
392
392
  }
393
- const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
393
+ const te = Q("debugprogressive"), we = Q("noprogressive"), A = class {
394
394
  constructor(e) {
395
395
  u(this, "renderer");
396
396
  u(this, "projectionScreenMatrix", new Z());
@@ -429,9 +429,9 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
429
429
  this._originalRender = this.renderer.render;
430
430
  const t = this;
431
431
  let r = 0;
432
- se(this.renderer), this.renderer.render = function(i, o) {
433
- const s = r++, n = e++;
434
- t.onBeforeRender(i, o, n, s), t._originalRender.call(this, i, o), t.onAfterRender(i, o, n, s), e--;
432
+ se(this.renderer), this.renderer.render = function(i, n) {
433
+ const s = r++, o = e++;
434
+ t.onBeforeRender(i, n, o, s), t._originalRender.call(this, i, n), t.onAfterRender(i, n, o, s), e--;
435
435
  };
436
436
  }
437
437
  disable() {
@@ -443,10 +443,10 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
443
443
  if (we || this.pause || this.updateInterval > 0 && i % this.updateInterval != 0)
444
444
  return;
445
445
  this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix, this.renderer.coordinateSystem);
446
- const o = 1e5, n = this.renderer.renderLists.get(e, r).opaque;
447
- for (const a of n) {
446
+ const n = 1e5, o = this.renderer.renderLists.get(e, r).opaque;
447
+ for (const a of o) {
448
448
  const g = a.object;
449
- (g instanceof Y || g.isMesh) && this.updateLODs(e, t, g, o);
449
+ (g instanceof Y || g.isMesh) && this.updateLODs(e, t, g, n);
450
450
  }
451
451
  }
452
452
  /** Update the LOD levels for the renderer. */
@@ -454,22 +454,22 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
454
454
  var a, g;
455
455
  for (const f of this.plugins)
456
456
  (a = f.onBeforeUpdateLOD) == null || a.call(f, this.renderer, e, t, r);
457
- let o = r.userData.LOD_state;
458
- o || (o = new Oe(), r.userData.LOD_state = o);
459
- let s = this.calculateLodLevel(t, r, o, i);
457
+ let n = r.userData.LOD_state;
458
+ n || (n = new Oe(), r.userData.LOD_state = n);
459
+ let s = this.calculateLodLevel(t, r, n, i);
460
460
  s = Math.round(s), s >= 0 && this.loadProgressiveMeshes(r, s);
461
- let n = 0;
461
+ let o = 0;
462
462
  if (r.material) {
463
463
  const f = r["DEBUG:LOD"];
464
- if (f != null && (n = f), Array.isArray(r.material))
464
+ if (f != null && (o = f), Array.isArray(r.material))
465
465
  for (const L of r.material)
466
- this.loadProgressiveTextures(L, n);
466
+ this.loadProgressiveTextures(L, o);
467
467
  else
468
- this.loadProgressiveTextures(r.material, n);
468
+ this.loadProgressiveTextures(r.material, o);
469
469
  }
470
470
  for (const f of this.plugins)
471
471
  (g = f.onAfterUpdatedLOD) == null || g.call(f, this.renderer, e, t, r, s);
472
- o.lastLodLevel = s;
472
+ n.lastLodLevel = s;
473
473
  }
474
474
  /** Load progressive textures for the given material
475
475
  * @param material the material to load the textures for
@@ -477,7 +477,7 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
477
477
  * @returns Promise with true if the LOD was loaded, false if not
478
478
  */
479
479
  loadProgressiveTextures(e, t) {
480
- return e && e.userData && e.userData.LOD !== t ? (e.userData.LOD = t, M.assignTextureLOD(e, t)) : Promise.resolve(null);
480
+ return e && e.userData && e.userData.LOD !== t ? (e.userData.LOD = t, v.assignTextureLOD(e, t)) : Promise.resolve(null);
481
481
  }
482
482
  /** Load progressive meshes for the given mesh
483
483
  * @param mesh the mesh to load the LOD for
@@ -491,20 +491,20 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
491
491
  if (e.userData || (e.userData = {}), e.userData.LOD !== t) {
492
492
  e.userData.LOD = t;
493
493
  const r = e.geometry;
494
- return M.assignMeshLOD(e, t).then((i) => (i && e.userData.LOD == t && r != e.geometry, i));
494
+ return v.assignMeshLOD(e, t).then((i) => (i && e.userData.LOD == t && r != e.geometry, i));
495
495
  }
496
496
  return Promise.resolve(null);
497
497
  }
498
498
  calculateLodLevel(e, t, r, i) {
499
- var n;
499
+ var o;
500
500
  if (!t)
501
501
  return -1;
502
502
  let s = 10 + 1;
503
503
  if (e) {
504
504
  if (te && t["DEBUG:LOD"] != null)
505
505
  return t["DEBUG:LOD"];
506
- const a = M.getMeshLODInformation(t.geometry), g = a == null ? void 0 : a.lods;
507
- if (!g || g.length <= 0 || !((n = this.cameraFrustrum) != null && n.intersectsObject(t)))
506
+ const a = v.getMeshLODInformation(t.geometry), g = a == null ? void 0 : a.lods;
507
+ if (!g || g.length <= 0 || !((o = this.cameraFrustrum) != null && o.intersectsObject(t)))
508
508
  return 99;
509
509
  const f = t.geometry.boundingBox;
510
510
  if (f && e.isPerspectiveCamera) {
@@ -518,24 +518,24 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
518
518
  if (this._tempBox.copy(f), this._tempBox.applyMatrix4(t.matrixWorld), this._tempBox.applyMatrix4(this.projectionScreenMatrix), this.renderer.xr.enabled && L.fov > 70) {
519
519
  const y = this._tempBox.min, h = this._tempBox.max;
520
520
  let T = y.x, x = y.y, p = h.x, c = h.y;
521
- const O = 2, b = 1.5, _ = (y.x + h.x) * 0.5, F = (y.y + h.y) * 0.5;
522
- T = (T - _) * O + _, x = (x - F) * O + F, p = (p - _) * O + _, c = (c - F) * O + F;
523
- const $ = T < 0 && p > 0 ? 0 : Math.min(Math.abs(y.x), Math.abs(h.x)), oe = x < 0 && c > 0 ? 0 : Math.min(Math.abs(y.y), Math.abs(h.y)), N = Math.max($, oe);
524
- r.lastCentrality = (b - N) * (b - N) * (b - N);
521
+ const O = 2, P = 1.5, _ = (y.x + h.x) * 0.5, U = (y.y + h.y) * 0.5;
522
+ T = (T - _) * O + _, x = (x - U) * O + U, p = (p - _) * O + _, c = (c - U) * O + U;
523
+ const $ = T < 0 && p > 0 ? 0 : Math.min(Math.abs(y.x), Math.abs(h.x)), ne = x < 0 && c > 0 ? 0 : Math.min(Math.abs(y.y), Math.abs(h.y)), X = Math.max($, ne);
524
+ r.lastCentrality = (P - X) * (P - X) * (P - X);
525
525
  } else
526
526
  r.lastCentrality = 1;
527
527
  const d = this._tempBox.getSize(this._tempBoxSize);
528
528
  d.multiplyScalar(0.5), screen.availHeight > 0 && d.multiplyScalar(this.renderer.domElement.clientHeight / screen.availHeight), d.x *= L.aspect;
529
529
  const w = e.matrixWorldInverse, D = new j();
530
530
  D.copy(f), D.applyMatrix4(t.matrixWorld), D.applyMatrix4(w);
531
- const A = D.getSize(this._tempBox2Size), E = Math.max(A.x, A.y);
532
- if (Math.max(d.x, d.y) != 0 && E != 0 && (d.z = A.z / Math.max(A.x, A.y) * Math.max(d.x, d.y)), r.lastScreenCoverage = Math.max(d.x, d.y, d.z), r.lastScreenspaceVolume.copy(d), r.lastScreenCoverage *= r.lastCentrality, te && P.debugDrawLine) {
531
+ const b = D.getSize(this._tempBox2Size), F = Math.max(b.x, b.y);
532
+ if (Math.max(d.x, d.y) != 0 && F != 0 && (d.z = b.z / Math.max(b.x, b.y) * Math.max(d.x, d.y)), r.lastScreenCoverage = Math.max(d.x, d.y, d.z), r.lastScreenspaceVolume.copy(d), r.lastScreenCoverage *= r.lastCentrality, te && A.debugDrawLine) {
533
533
  const y = this.tempMatrix.copy(this.projectionScreenMatrix);
534
534
  y.invert();
535
- const h = P.corner0, T = P.corner1, x = P.corner2, p = P.corner3;
535
+ const h = A.corner0, T = A.corner1, x = A.corner2, p = A.corner3;
536
536
  h.copy(this._tempBox.min), T.copy(this._tempBox.max), T.x = h.x, x.copy(this._tempBox.max), x.y = h.y, p.copy(this._tempBox.max);
537
537
  const c = (h.z + p.z) * 0.5;
538
- h.z = T.z = x.z = p.z = c, h.applyMatrix4(y), T.applyMatrix4(y), x.applyMatrix4(y), p.applyMatrix4(y), P.debugDrawLine(h, T, 255), P.debugDrawLine(h, x, 255), P.debugDrawLine(T, p, 255), P.debugDrawLine(x, p, 255);
538
+ h.z = T.z = x.z = p.z = c, h.applyMatrix4(y), T.applyMatrix4(y), x.applyMatrix4(y), p.applyMatrix4(y), A.debugDrawLine(h, T, 255), A.debugDrawLine(h, x, 255), A.debugDrawLine(T, p, 255), A.debugDrawLine(x, p, 255);
539
539
  }
540
540
  let B = 999;
541
541
  if (g && r.lastScreenCoverage > 0) {
@@ -551,7 +551,7 @@ const te = Q("debugprogressive"), we = Q("noprogressive"), P = class {
551
551
  return s;
552
552
  }
553
553
  };
554
- let k = P;
554
+ let k = A;
555
555
  /** Assign a function to draw debug lines for the LODs. This function will be called with the start and end position of the line and the color of the line when the `debugprogressive` query parameter is set.
556
556
  */
557
557
  u(k, "debugDrawLine"), u(k, "corner0", new C()), u(k, "corner1", new C()), u(k, "corner2", new C()), u(k, "corner3", new C());
@@ -564,19 +564,19 @@ class Oe {
564
564
  }
565
565
  }
566
566
  const re = Symbol("NEEDLE_mesh_lod"), K = Symbol("NEEDLE_texture_lod");
567
- function ve(l) {
567
+ function Me(l) {
568
568
  if (!l)
569
569
  return null;
570
570
  let e = null, t = null;
571
571
  for (let r = l; r != null; r = Object.getPrototypeOf(r)) {
572
- const i = Object.getOwnPropertySymbols(r), o = i.find((n) => n.toString() == "Symbol(renderer)"), s = i.find((n) => n.toString() == "Symbol(scene)");
573
- !e && o != null && (e = l[o].threeRenderer), !t && s != null && (t = l[s]);
572
+ const i = Object.getOwnPropertySymbols(r), n = i.find((o) => o.toString() == "Symbol(renderer)"), s = i.find((o) => o.toString() == "Symbol(scene)");
573
+ !e && n != null && (e = l[n].threeRenderer), !t && s != null && (t = l[s]);
574
574
  }
575
575
  if (e) {
576
576
  console.log("Adding Needle LODs to modelviewer");
577
577
  const r = new k(e);
578
- if (r.plugins.push(new Me(l)), r.enable(), t) {
579
- const i = t.camera || t.traverse((o) => o.type == "PerspectiveCamera")[0];
578
+ if (r.plugins.push(new ve(l)), r.enable(), t) {
579
+ const i = t.camera || t.traverse((n) => n.type == "PerspectiveCamera")[0];
580
580
  i && e.render(t, i);
581
581
  }
582
582
  return () => {
@@ -585,16 +585,18 @@ function ve(l) {
585
585
  }
586
586
  return null;
587
587
  }
588
- class Me {
588
+ class ve {
589
589
  constructor(e) {
590
590
  u(this, "modelviewer");
591
+ u(this, "_didWarnAboutMissingUrl", !1);
591
592
  this.modelviewer = e;
592
593
  }
593
594
  onBeforeUpdateLOD(e, t, r, i) {
594
595
  this.tryParseMeshLOD(t, i), this.tryParseTextureLOD(t, i);
595
596
  }
596
597
  getUrl() {
597
- return this.modelviewer.getAttribute("src");
598
+ let e = this.modelviewer.getAttribute("src");
599
+ return e || (e = this.modelviewer.src), e || (this._didWarnAboutMissingUrl || console.warn("No url found in modelviewer", this.modelviewer), this._didWarnAboutMissingUrl = !0), e;
598
600
  }
599
601
  tryGetCurrentGLTF(e) {
600
602
  return e._currentGLTF;
@@ -604,66 +606,60 @@ class Me {
604
606
  return;
605
607
  t[K] = !0;
606
608
  const r = this.tryGetCurrentGLTF(e), i = this.getUrl();
607
- if (!i) {
608
- console.error("No url found in modelviewer");
609
- return;
610
- }
611
- if (r && t.material) {
612
- let o = function(n) {
609
+ if (i && r && t.material) {
610
+ let n = function(o) {
613
611
  var g, f, L;
614
- if (n[K] == !0)
612
+ if (o[K] == !0)
615
613
  return;
616
- n[K] = !0, n.userData && (n.userData.LOD = -1);
617
- const a = Object.keys(n);
614
+ o[K] = !0, o.userData && (o.userData.LOD = -1);
615
+ const a = Object.keys(o);
618
616
  for (let d = 0; d < a.length; d++) {
619
- const w = a[d], D = n[w];
617
+ const w = a[d], D = o[w];
620
618
  if ((D == null ? void 0 : D.isTexture) === !0) {
621
- const A = (f = (g = D.userData) == null ? void 0 : g.associations) == null ? void 0 : f.textures, E = r.parser.json.textures[A];
622
- if ((L = E.extensions) != null && L[R]) {
623
- const m = E.extensions[R];
624
- m && i && M.registerTexture(i, D, m.lods.length, m);
619
+ const b = (f = (g = D.userData) == null ? void 0 : g.associations) == null ? void 0 : f.textures, F = r.parser.json.textures[b];
620
+ if ((L = F.extensions) != null && L[R]) {
621
+ const m = F.extensions[R];
622
+ m && i && v.registerTexture(i, D, m.lods.length, m);
625
623
  }
626
624
  }
627
625
  }
628
626
  };
629
627
  const s = t.material;
630
628
  if (Array.isArray(s))
631
- for (const n of s)
632
- o(n);
629
+ for (const o of s)
630
+ n(o);
633
631
  else
634
- o(s);
632
+ n(s);
635
633
  }
636
634
  }
637
635
  tryParseMeshLOD(e, t) {
638
- var o, s;
636
+ var n, s;
639
637
  if (t[re] == !0)
640
638
  return;
641
639
  t[re] = !0;
642
640
  const r = this.getUrl();
643
- if (!r) {
644
- console.error("No url found in modelviewer");
641
+ if (!r)
645
642
  return;
646
- }
647
- const i = (s = (o = t.userData) == null ? void 0 : o.gltfExtensions) == null ? void 0 : s[R];
643
+ const i = (s = (n = t.userData) == null ? void 0 : n.gltfExtensions) == null ? void 0 : s[R];
648
644
  if (i && r) {
649
- const n = t.uuid;
650
- M.registerMesh(r, n, t, 0, i.lods.length, i);
645
+ const o = t.uuid;
646
+ v.registerMesh(r, o, t, 0, i.lods.length, i);
651
647
  }
652
648
  }
653
649
  }
654
650
  function Be(l, e, t, r) {
655
- se(e), ie(t), t.register((o) => new M(o, l));
651
+ se(e), ie(t), t.register((n) => new v(n, l));
656
652
  const i = new k(e);
657
653
  return (r == null ? void 0 : r.enableLODsManager) !== !1 && i.enable(), i;
658
654
  }
659
655
  document.addEventListener("DOMContentLoaded", () => {
660
- ve(document.querySelector("model-viewer"));
656
+ Me(document.querySelector("model-viewer"));
661
657
  });
662
658
  export {
663
659
  R as EXTENSION_NAME,
664
660
  k as LODsManager,
665
- M as NEEDLE_progressive,
666
- ve as patchModelViewer,
661
+ v as NEEDLE_progressive,
662
+ Me as patchModelViewer,
667
663
  ke as registerPlugin,
668
664
  Be as useNeedleProgressive
669
665
  };
@@ -1,3 +1,3 @@
1
- var se=Object.defineProperty,ne=(r,e,t)=>e in r?se(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,u=(r,e,t)=>(ne(r,typeof e!="symbol"?e+"":e,t),t);import{Mesh as W,BufferGeometry as U,Material as oe,RawShaderMaterial as ie,Texture as C,TextureLoader as ae,Matrix4 as K,Frustum as le,Sphere as ue,Box3 as Y,Vector3 as E}from"three";import{GLTFLoader as ce}from"three/examples/jsm/loaders/GLTFLoader.js";import{MeshoptDecoder as de}from"three/examples/jsm/libs/meshopt_decoder.module.js";import{DRACOLoader as he}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as fe}from"three/examples/jsm/loaders/KTX2Loader.js";const ge="https://www.gstatic.com/draco/versioned/decoders/1.4.1/",pe="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";let R,$,G;function J(r){R||(R=new he,R.setDecoderPath(ge),R.setDecoderConfig({type:"js"})),G||(G=new fe,G.setTranscoderPath(pe)),$||($=de),r?G.detectSupport(r):console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail")}function Q(r){r.dracoLoader||r.setDRACOLoader(R),r.ktx2Loader||r.setKTX2Loader(G),r.meshoptDecoder||r.setMeshoptDecoder($)}function q(r){const e=new URL(window.location.href).searchParams.get(r);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function me(r,e){if(e===void 0||e.startsWith("./")||e.startsWith("http")||r===void 0)return e;const t=r.lastIndexOf("/");if(t>=0){const n=r.substring(0,t+1);for(;n.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return n+e}return e}const V=new Array;function ye(r){V.push(r)}const B="NEEDLE_progressive",v=q("debugprogressive"),X=Symbol("needle-progressive-texture"),z=new Map,H=new Set;if(v){let r=function(){e+=1,console.log("Toggle LOD level",e,z),z.forEach((o,s)=>{for(const a of o.keys){const i=s[a];if(i.isBufferGeometry===!0){const l=O.getMeshLODInformation(i),d=l?Math.min(e,l.lods.length):0;s["DEBUG:LOD"]=e,O.assignMeshLOD(s,d),l&&(t=Math.max(t,l.lods.length-1))}else if(s.isMaterial===!0){s["DEBUG:LOD"]=e,O.assignTextureLOD(s,e);break}}}),e>=t&&(e=-1)},e=-1,t=2,n=!1;window.addEventListener("keyup",o=>{o.key==="p"&&r(),o.key==="w"&&(n=!n,H&&H.forEach(s=>{s.name!="BackgroundCubeMaterial"&&"wireframe"in s&&(s.wireframe=n)}))})}function Z(r,e,t){var n;if(!v)return;z.has(r)||z.set(r,{keys:[],sourceId:t});const o=z.get(r);((n=o?.keys)==null?void 0:n.includes(e))==!1&&o.keys.push(e)}const L=class{constructor(r,e){u(this,"parser"),u(this,"url"),v&&console.log("Progressive extension registered for",e),this.parser=r,this.url=e}get name(){return B}static getMeshLODInformation(r){const e=this.getAssignedLODInformation(r);return e!=null&&e.key?this.lodInfos.get(e.key):null}static hasLODLevelAvailable(r,e){var t;if(r.isMaterial===!0){for(const s of Object.keys(r)){const a=r[s];if(a.isTexture&&this.hasLODLevelAvailable(a,e))return!0}return!1}else if(r.isGroup===!0){for(const s of r.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,e))return!0}let n,o;if(r.isMesh?n=r.geometry:(r.isBufferGeometry||r.isTexture)&&(n=r),n&&(t=n?.userData)!=null&&t.LODS){const s=n.userData.LODS;if(o=this.lodInfos.get(s.key),e===void 0)return o!=null;if(o)return Array.isArray(o.lods)?e<o.lods.length:e===0}return!1}static assignMeshLOD(r,e){var t;if(!r)return Promise.resolve(null);if(r instanceof W||r.isMesh===!0){const n=r.geometry,o=this.getAssignedLODInformation(n);if(!o)return Promise.resolve(null);for(const s of V)(t=s.onBeforeGetLODMesh)==null||t.call(s,r,e);return r["LOD:requested level"]=e,L.getOrLoadLOD(n,e).then(s=>{if(r["LOD:requested level"]===e){if(delete r["LOD:requested level"],Array.isArray(s)){const a=o.index||0;s=s[a]}s&&n!=s&&s instanceof U&&(r.geometry=s,v&&Z(r,"geometry",o.url))}return s}).catch(s=>(console.error("Error loading mesh LOD",r,s),null))}else v&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",r);return Promise.resolve(null)}static assignTextureLOD(r,e=0){if(!r)return Promise.resolve(null);if(r instanceof oe||r.isMaterial===!0){const t=r,n=[],o=new Array;if(v&&H.add(t),t instanceof ie)for(const s of Object.keys(t.uniforms)){const a=t.uniforms[s].value;if(a?.isTexture===!0){const i=this.assignTextureLODForSlot(a,e,t,s);n.push(i),o.push(s)}}else for(const s of Object.keys(t)){const a=t[s];if(a?.isTexture===!0){const i=this.assignTextureLODForSlot(a,e,t,s);n.push(i),o.push(s)}}return Promise.all(n).then(s=>{const a=new Array;for(let i=0;i<s.length;i++){const l=s[i],d=o[i];l&&l.isTexture===!0?a.push({material:t,slot:d,texture:l,level:e}):a.push({material:t,slot:d,texture:null,level:e})}return a})}if(r instanceof C||r.isTexture===!0){const t=r;return this.assignTextureLODForSlot(t,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(r,e,t,n){return r?.isTexture!==!0?Promise.resolve(null):L.getOrLoadLOD(r,e).then(o=>{if(Array.isArray(o))return null;if(o?.isTexture===!0){if(o!=r&&(t&&n&&(t[n]=o),v&&n&&t)){const s=this.getAssignedLODInformation(r);s&&Z(t,n,s.url)}return o}else v=="verbose"&&console.warn("No LOD found for",r,e);return null}).catch(o=>(console.error("Error loading LOD",r,o),null))}afterRoot(r){var e,t;return v&&console.log("AFTER",this.url,r),(e=this.parser.json.textures)==null||e.forEach((n,o)=>{if(n!=null&&n.extensions){const s=n?.extensions[B];if(s){let a=!1;for(const i of this.parser.associations.keys())i.isTexture===!0&&this.parser.associations.get(i).textures===o&&(a=!0,L.registerTexture(this.url,i,o,s));a||this.parser.getDependency("texture",o).then(i=>{i&&L.registerTexture(this.url,i,o,s)})}}}),(t=this.parser.json.meshes)==null||t.forEach((n,o)=>{if(n!=null&&n.extensions){const s=n?.extensions[B];if(s&&s.lods){for(const a of this.parser.associations.keys())if(a.isMesh){const i=this.parser.associations.get(a);i.meshes===o&&L.registerMesh(this.url,s.guid,a,s.lods.length,i.primitives,s)}}}}),null}static async getOrLoadLOD(r,e){var t,n,o;const s=v=="verbose",a=r.userData.LODS;if(!a)return null;const i=a?.key;let l;if(r.isTexture===!0){const d=r;d.source&&d.source[X]&&(l=d.source[X])}if(l||(l=L.lodInfos.get(i)),l){if(e>0){let g=!1;const M=Array.isArray(l.lods);if(M&&e>=l.lods.length?g=!0:M||(g=!0),g)return this.lowresCache.get(i)}const d=Array.isArray(l.lods)?l.lods[e].path:l.lods;if(!d)return v&&!l["missing:uri"]&&(l["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+e,l)),null;const c=me(a.url,d);if(c.endsWith(".glb")||c.endsWith(".gltf")){if(!l.guid)return console.warn("missing pointer for glb/gltf texture",l),null;const g=c+"_"+l.guid,M=this.previouslyLoaded.get(g);if(M!==void 0){s&&console.log(`LOD ${e} was already loading/loaded: ${g}`);let m=await M.catch(p=>(console.error(`Error loading LOD ${e} from ${c}
2
- `,p),null)),f=!1;if(m==null||(m instanceof C&&r instanceof C?(t=m.image)!=null&&t.data||(n=m.source)!=null&&n.data?m=this.copySettings(r,m):(f=!0,this.previouslyLoaded.delete(g)):m instanceof U&&r instanceof U&&((o=m.attributes.position)!=null&&o.array||(f=!0,this.previouslyLoaded.delete(g)))),!f)return m}const y=l,P=new Promise(async(m,f)=>{const p=new ce;Q(p),v&&(await new Promise(D=>setTimeout(D,1e3)),s&&console.warn("Start loading (delayed) "+c,y.guid));let b=c;if(y&&Array.isArray(y.lods)){const D=y.lods[e];D.hash&&(b+="?v="+D.hash)}const x=await p.loadAsync(b).catch(D=>(console.error(`Error loading LOD ${e} from ${c}
3
- `,D),null));if(!x)return null;const S=x.parser;s&&console.log("Loading finished "+c,y.guid);let T=0;if(x.parser.json.textures){let D=!1;for(const h of x.parser.json.textures){if(h!=null&&h.extensions){const w=h?.extensions[B];if(w!=null&&w.guid&&w.guid===y.guid){D=!0;break}}T++}if(D){let h=await S.getDependency("texture",T);return s&&console.log('change "'+r.name+'" \u2192 "'+h.name+'"',c,T,h,g),r instanceof C&&(h=this.copySettings(r,h)),h&&(h.guid=y.guid),m(h)}}if(T=0,x.parser.json.meshes){let D=!1;for(const h of x.parser.json.meshes){if(h!=null&&h.extensions){const w=h?.extensions[B];if(w!=null&&w.guid&&w.guid===y.guid){D=!0;break}}T++}if(D){const h=await S.getDependency("mesh",T),w=y;if(s&&console.log(`Loaded Mesh "${h.name}"`,c,T,h,g),h.isMesh===!0){const _=h.geometry;return L.assignLODInformation(a.url,_,i,e,void 0,w.density),m(_)}else{const _=new Array;for(let I=0;I<h.children.length;I++){const F=h.children[I];if(F instanceof W){const j=F.geometry;L.assignLODInformation(a.url,j,i,e,I,w.density),_.push(j)}}return m(_)}}}return m(null)});return this.previouslyLoaded.set(g,P),await P}else if(r instanceof C){s&&console.log("Load texture from uri: "+c);const g=await new ae().loadAsync(c);return g?(g.guid=l.guid,g.flipY=!1,g.needsUpdate=!0,g.colorSpace=r.colorSpace,s&&console.log(l,g)):v&&console.warn("failed loading",c),g}}else v&&console.warn(`Can not load LOD ${e}: no LOD info found for "${i}" ${r.name}`,r.type);return null}static assignLODInformation(r,e,t,n,o,s){if(!e)return;e.userData||(e.userData={});const a=new xe(r,t,n,o,s);e.userData.LODS=a,e.userData.LOD=n}static getAssignedLODInformation(r){var e;return((e=r?.userData)==null?void 0:e.LODS)||null}static copySettings(r,e){return this._copiedTextures.get(r)||(e=e.clone(),this._copiedTextures.set(r,e),e.offset=r.offset,e.repeat=r.repeat,e.colorSpace=r.colorSpace,e)}};let O=L;u(O,"registerTexture",(r,e,t,n)=>{v&&console.log("> Progressive: register texture",t,e.name,e.uuid,e,n),e.source&&(e.source[X]=n);const o=n.guid;L.assignLODInformation(r,e,o,0,0,void 0),L.lodInfos.set(o,n),L.lowresCache.set(o,e)}),u(O,"registerMesh",(r,e,t,n,o,s)=>{var a;v&&console.log("> Progressive: register mesh",o,t.name,s,t.uuid,t);const i=t.geometry;i.userData||(i.userData={}),L.assignLODInformation(r,i,e,n,o,s.density),L.lodInfos.set(e,s);let l=L.lowresCache.get(e);l?l.push(t.geometry):l=[t.geometry],L.lowresCache.set(e,l);for(const d of V)(a=d.onRegisteredNewMesh)==null||a.call(d,t,s)}),u(O,"lodInfos",new Map),u(O,"previouslyLoaded",new Map),u(O,"lowresCache",new Map),u(O,"_copiedTextures",new Map);class xe{constructor(e,t,n,o,s){u(this,"url"),u(this,"key"),u(this,"level"),u(this,"index"),u(this,"density"),this.url=e,this.key=t,this.level=n,o!=null&&(this.index=o),s!=null&&(this.density=s)}}const ee=q("debugprogressive"),De=q("noprogressive"),A=class{constructor(r){u(this,"renderer"),u(this,"projectionScreenMatrix",new K),u(this,"cameraFrustrum",new le),u(this,"updateInterval",0),u(this,"pause",!1),u(this,"plugins",[]),u(this,"_originalRender"),u(this,"_sphere",new ue),u(this,"_tempBox",new Y),u(this,"tempMatrix",new K),u(this,"_tempWorldPosition",new E),u(this,"_tempBoxSize",new E),u(this,"_tempBox2Size",new E),this.renderer=r}static getObjectLODState(r){var e;return(e=r.userData)==null?void 0:e.LOD_state}enable(){if(this._originalRender)return;let r=0;this._originalRender=this.renderer.render;const e=this;let t=0;J(this.renderer),this.renderer.render=function(n,o){const s=t++,a=r++;e.onBeforeRender(n,o,a,s),e._originalRender.call(this,n,o),e.onAfterRender(n,o,a,s),r--}}disable(){this._originalRender&&(this.renderer.render=this._originalRender,this._originalRender=void 0)}onBeforeRender(r,e,t,n){}onAfterRender(r,e,t,n){if(De||this.pause||this.updateInterval>0&&n%this.updateInterval!=0)return;this.projectionScreenMatrix.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix,this.renderer.coordinateSystem);const o=1e5,s=this.renderer.renderLists.get(r,t).opaque;for(const a of s){const i=a.object;(i instanceof W||i.isMesh)&&this.updateLODs(r,e,i,o)}}updateLODs(r,e,t,n){var o,s;for(const d of this.plugins)(o=d.onBeforeUpdateLOD)==null||o.call(d,this.renderer,r,e,t);let a=t.userData.LOD_state;a||(a=new ve,t.userData.LOD_state=a);let i=this.calculateLodLevel(e,t,a,n);i=Math.round(i),i>=0&&this.loadProgressiveMeshes(t,i);let l=0;if(t.material){const d=t["DEBUG:LOD"];if(d!=null&&(l=d),Array.isArray(t.material))for(const c of t.material)this.loadProgressiveTextures(c,l);else this.loadProgressiveTextures(t.material,l)}for(const d of this.plugins)(s=d.onAfterUpdatedLOD)==null||s.call(d,this.renderer,r,e,t,i);a.lastLodLevel=i}loadProgressiveTextures(r,e){return r&&r.userData&&r.userData.LOD!==e?(r.userData.LOD=e,O.assignTextureLOD(r,e)):Promise.resolve(null)}loadProgressiveMeshes(r,e){if(!r)return Promise.resolve(null);if(r.userData||(r.userData={}),r.userData.LOD!==e){r.userData.LOD=e;const t=r.geometry;return O.assignMeshLOD(r,e).then(n=>(n&&r.userData.LOD==e&&t!=r.geometry,n))}return Promise.resolve(null)}calculateLodLevel(r,e,t,n){var o;if(!e)return-1;let s=10+1;if(r){if(ee&&e["DEBUG:LOD"]!=null)return e["DEBUG:LOD"];const a=O.getMeshLODInformation(e.geometry),i=a?.lods;if(!i||i.length<=0||!((o=this.cameraFrustrum)!=null&&o.intersectsObject(e)))return 99;const l=e.geometry.boundingBox;if(l&&r.isPerspectiveCamera){const d=r;if(e.geometry.attributes.color&&e.geometry.attributes.color.count<100&&e.geometry.boundingSphere){this._sphere.copy(e.geometry.boundingSphere),this._sphere.applyMatrix4(e.matrixWorld);const f=r.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(f))return 0}if(this._tempBox.copy(l),this._tempBox.applyMatrix4(e.matrixWorld),this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&d.fov>70){const f=this._tempBox.min,p=this._tempBox.max;let b=f.x,x=f.y,S=p.x,T=p.y;const D=2,h=1.5,w=(f.x+p.x)*.5,_=(f.y+p.y)*.5;b=(b-w)*D+w,x=(x-_)*D+_,S=(S-w)*D+w,T=(T-_)*D+_;const I=b<0&&S>0?0:Math.min(Math.abs(f.x),Math.abs(p.x)),F=x<0&&T>0?0:Math.min(Math.abs(f.y),Math.abs(p.y)),j=Math.max(I,F);t.lastCentrality=(h-j)*(h-j)*(h-j)}else t.lastCentrality=1;const c=this._tempBox.getSize(this._tempBoxSize);c.multiplyScalar(.5),screen.availHeight>0&&c.multiplyScalar(this.renderer.domElement.clientHeight/screen.availHeight),c.x*=d.aspect;const g=r.matrixWorldInverse,M=new Y;M.copy(l),M.applyMatrix4(e.matrixWorld),M.applyMatrix4(g);const y=M.getSize(this._tempBox2Size),P=Math.max(y.x,y.y);if(Math.max(c.x,c.y)!=0&&P!=0&&(c.z=y.z/Math.max(y.x,y.y)*Math.max(c.x,c.y)),t.lastScreenCoverage=Math.max(c.x,c.y,c.z),t.lastScreenspaceVolume.copy(c),t.lastScreenCoverage*=t.lastCentrality,ee&&A.debugDrawLine){const f=this.tempMatrix.copy(this.projectionScreenMatrix);f.invert();const p=A.corner0,b=A.corner1,x=A.corner2,S=A.corner3;p.copy(this._tempBox.min),b.copy(this._tempBox.max),b.x=p.x,x.copy(this._tempBox.max),x.y=p.y,S.copy(this._tempBox.max);const T=(p.z+S.z)*.5;p.z=b.z=x.z=S.z=T,p.applyMatrix4(f),b.applyMatrix4(f),x.applyMatrix4(f),S.applyMatrix4(f),A.debugDrawLine(p,b,255),A.debugDrawLine(p,x,255),A.debugDrawLine(b,S,255),A.debugDrawLine(x,S,255)}let m=999;if(i&&t.lastScreenCoverage>0){for(let f=0;f<i.length;f++)if(i[f].density/t.lastScreenCoverage<n){m=f;break}}m<s&&(s=m)}}return s}};let k=A;u(k,"debugDrawLine"),u(k,"corner0",new E),u(k,"corner1",new E),u(k,"corner2",new E),u(k,"corner3",new E);class ve{constructor(){u(this,"lastLodLevel",0),u(this,"lastScreenCoverage",0),u(this,"lastScreenspaceVolume",new E),u(this,"lastCentrality",0)}}const re=Symbol("NEEDLE_mesh_lod"),N=Symbol("NEEDLE_texture_lod");function te(r){if(!r)return null;let e=null,t=null;for(let n=r;n!=null;n=Object.getPrototypeOf(n)){const o=Object.getOwnPropertySymbols(n),s=o.find(i=>i.toString()=="Symbol(renderer)"),a=o.find(i=>i.toString()=="Symbol(scene)");!e&&s!=null&&(e=r[s].threeRenderer),!t&&a!=null&&(t=r[a])}if(e){console.log("Adding Needle LODs to modelviewer");const n=new k(e);if(n.plugins.push(new Le(r)),n.enable(),t){const o=t.camera||t.traverse(s=>s.type=="PerspectiveCamera")[0];o&&e.render(t,o)}return()=>{n.disable()}}return null}class Le{constructor(e){u(this,"modelviewer"),this.modelviewer=e}onBeforeUpdateLOD(e,t,n,o){this.tryParseMeshLOD(t,o),this.tryParseTextureLOD(t,o)}getUrl(){return this.modelviewer.getAttribute("src")}tryGetCurrentGLTF(e){return e._currentGLTF}tryParseTextureLOD(e,t){if(t[N]==!0)return;t[N]=!0;const n=this.tryGetCurrentGLTF(e),o=this.getUrl();if(!o){console.error("No url found in modelviewer");return}if(n&&t.material){let s=function(i){var l,d,c;if(i[N]==!0)return;i[N]=!0,i.userData&&(i.userData.LOD=-1);const g=Object.keys(i);for(let M=0;M<g.length;M++){const y=g[M],P=i[y];if(P?.isTexture===!0){const m=(d=(l=P.userData)==null?void 0:l.associations)==null?void 0:d.textures,f=n.parser.json.textures[m];if((c=f.extensions)!=null&&c[B]){const p=f.extensions[B];p&&o&&O.registerTexture(o,P,p.lods.length,p)}}}};const a=t.material;if(Array.isArray(a))for(const i of a)s(i);else s(a)}}tryParseMeshLOD(e,t){var n,o;if(t[re]==!0)return;t[re]=!0;const s=this.getUrl();if(!s){console.error("No url found in modelviewer");return}const a=(o=(n=t.userData)==null?void 0:n.gltfExtensions)==null?void 0:o[B];if(a&&s){const i=t.uuid;O.registerMesh(s,i,t,0,a.lods.length,a)}}}function Oe(r,e,t,n){J(e),Q(t),t.register(s=>new O(s,r));const o=new k(e);return n?.enableLODsManager!==!1&&o.enable(),o}document.addEventListener("DOMContentLoaded",()=>{te(document.querySelector("model-viewer"))});export{B as EXTENSION_NAME,k as LODsManager,O as NEEDLE_progressive,te as patchModelViewer,ye as registerPlugin,Oe as useNeedleProgressive};
1
+ var se=Object.defineProperty,oe=(r,e,t)=>e in r?se(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,u=(r,e,t)=>(oe(r,typeof e!="symbol"?e+"":e,t),t);import{Mesh as F,BufferGeometry as N,Material as ne,RawShaderMaterial as ie,Texture as C,TextureLoader as ae,Matrix4 as K,Frustum as le,Sphere as ue,Box3 as Y,Vector3 as E}from"three";import{GLTFLoader as ce}from"three/examples/jsm/loaders/GLTFLoader.js";import{MeshoptDecoder as de}from"three/examples/jsm/libs/meshopt_decoder.module.js";import{DRACOLoader as he}from"three/examples/jsm/loaders/DRACOLoader.js";import{KTX2Loader as fe}from"three/examples/jsm/loaders/KTX2Loader.js";const ge="https://www.gstatic.com/draco/versioned/decoders/1.4.1/",pe="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";let R,$,U;function J(r){R||(R=new he,R.setDecoderPath(ge),R.setDecoderConfig({type:"js"})),U||(U=new fe,U.setTranscoderPath(pe)),$||($=de),r?U.detectSupport(r):console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail")}function Q(r){r.dracoLoader||r.setDRACOLoader(R),r.ktx2Loader||r.setKTX2Loader(U),r.meshoptDecoder||r.setMeshoptDecoder($)}function q(r){const e=new URL(window.location.href).searchParams.get(r);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function me(r,e){if(e===void 0||e.startsWith("./")||e.startsWith("http")||r===void 0)return e;const t=r.lastIndexOf("/");if(t>=0){const o=r.substring(0,t+1);for(;o.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return o+e}return e}const V=new Array;function ye(r){V.push(r)}const B="NEEDLE_progressive",D=q("debugprogressive"),X=Symbol("needle-progressive-texture"),W=new Map,H=new Set;if(D){let r=function(){e+=1,console.log("Toggle LOD level",e,W),W.forEach((n,s)=>{for(const a of n.keys){const i=s[a];if(i.isBufferGeometry===!0){const l=O.getMeshLODInformation(i),d=l?Math.min(e,l.lods.length):0;s["DEBUG:LOD"]=e,O.assignMeshLOD(s,d),l&&(t=Math.max(t,l.lods.length-1))}else if(s.isMaterial===!0){s["DEBUG:LOD"]=e,O.assignTextureLOD(s,e);break}}}),e>=t&&(e=-1)},e=-1,t=2,o=!1;window.addEventListener("keyup",n=>{n.key==="p"&&r(),n.key==="w"&&(o=!o,H&&H.forEach(s=>{s.name!="BackgroundCubeMaterial"&&"wireframe"in s&&(s.wireframe=o)}))})}function Z(r,e,t){var o;if(!D)return;W.has(r)||W.set(r,{keys:[],sourceId:t});const n=W.get(r);((o=n?.keys)==null?void 0:o.includes(e))==!1&&n.keys.push(e)}const L=class{constructor(r,e){u(this,"parser"),u(this,"url"),D&&console.log("Progressive extension registered for",e),this.parser=r,this.url=e}get name(){return B}static getMeshLODInformation(r){const e=this.getAssignedLODInformation(r);return e!=null&&e.key?this.lodInfos.get(e.key):null}static hasLODLevelAvailable(r,e){var t;if(r.isMaterial===!0){for(const s of Object.keys(r)){const a=r[s];if(a.isTexture&&this.hasLODLevelAvailable(a,e))return!0}return!1}else if(r.isGroup===!0){for(const s of r.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,e))return!0}let o,n;if(r.isMesh?o=r.geometry:(r.isBufferGeometry||r.isTexture)&&(o=r),o&&(t=o?.userData)!=null&&t.LODS){const s=o.userData.LODS;if(n=this.lodInfos.get(s.key),e===void 0)return n!=null;if(n)return Array.isArray(n.lods)?e<n.lods.length:e===0}return!1}static assignMeshLOD(r,e){var t;if(!r)return Promise.resolve(null);if(r instanceof F||r.isMesh===!0){const o=r.geometry,n=this.getAssignedLODInformation(o);if(!n)return Promise.resolve(null);for(const s of V)(t=s.onBeforeGetLODMesh)==null||t.call(s,r,e);return r["LOD:requested level"]=e,L.getOrLoadLOD(o,e).then(s=>{if(r["LOD:requested level"]===e){if(delete r["LOD:requested level"],Array.isArray(s)){const a=n.index||0;s=s[a]}s&&o!=s&&s instanceof N&&(r.geometry=s,D&&Z(r,"geometry",n.url))}return s}).catch(s=>(console.error("Error loading mesh LOD",r,s),null))}else D&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",r);return Promise.resolve(null)}static assignTextureLOD(r,e=0){if(!r)return Promise.resolve(null);if(r instanceof ne||r.isMaterial===!0){const t=r,o=[],n=new Array;if(D&&H.add(t),t instanceof ie)for(const s of Object.keys(t.uniforms)){const a=t.uniforms[s].value;if(a?.isTexture===!0){const i=this.assignTextureLODForSlot(a,e,t,s);o.push(i),n.push(s)}}else for(const s of Object.keys(t)){const a=t[s];if(a?.isTexture===!0){const i=this.assignTextureLODForSlot(a,e,t,s);o.push(i),n.push(s)}}return Promise.all(o).then(s=>{const a=new Array;for(let i=0;i<s.length;i++){const l=s[i],d=n[i];l&&l.isTexture===!0?a.push({material:t,slot:d,texture:l,level:e}):a.push({material:t,slot:d,texture:null,level:e})}return a})}if(r instanceof C||r.isTexture===!0){const t=r;return this.assignTextureLODForSlot(t,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(r,e,t,o){return r?.isTexture!==!0?Promise.resolve(null):L.getOrLoadLOD(r,e).then(n=>{if(Array.isArray(n))return null;if(n?.isTexture===!0){if(n!=r&&(t&&o&&(t[o]=n),D&&o&&t)){const s=this.getAssignedLODInformation(r);s&&Z(t,o,s.url)}return n}else D=="verbose"&&console.warn("No LOD found for",r,e);return null}).catch(n=>(console.error("Error loading LOD",r,n),null))}afterRoot(r){var e,t;return D&&console.log("AFTER",this.url,r),(e=this.parser.json.textures)==null||e.forEach((o,n)=>{if(o!=null&&o.extensions){const s=o?.extensions[B];if(s){let a=!1;for(const i of this.parser.associations.keys())i.isTexture===!0&&this.parser.associations.get(i).textures===n&&(a=!0,L.registerTexture(this.url,i,n,s));a||this.parser.getDependency("texture",n).then(i=>{i&&L.registerTexture(this.url,i,n,s)})}}}),(t=this.parser.json.meshes)==null||t.forEach((o,n)=>{if(o!=null&&o.extensions){const s=o?.extensions[B];if(s&&s.lods){for(const a of this.parser.associations.keys())if(a.isMesh){const i=this.parser.associations.get(a);i.meshes===n&&L.registerMesh(this.url,s.guid,a,s.lods.length,i.primitives,s)}}}}),null}static async getOrLoadLOD(r,e){var t,o,n;const s=D=="verbose",a=r.userData.LODS;if(!a)return null;const i=a?.key;let l;if(r.isTexture===!0){const d=r;d.source&&d.source[X]&&(l=d.source[X])}if(l||(l=L.lodInfos.get(i)),l){if(e>0){let g=!1;const M=Array.isArray(l.lods);if(M&&e>=l.lods.length?g=!0:M||(g=!0),g)return this.lowresCache.get(i)}const d=Array.isArray(l.lods)?l.lods[e].path:l.lods;if(!d)return D&&!l["missing:uri"]&&(l["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+e,l)),null;const c=me(a.url,d);if(c.endsWith(".glb")||c.endsWith(".gltf")){if(!l.guid)return console.warn("missing pointer for glb/gltf texture",l),null;const g=c+"_"+l.guid,M=this.previouslyLoaded.get(g);if(M!==void 0){s&&console.log(`LOD ${e} was already loading/loaded: ${g}`);let m=await M.catch(p=>(console.error(`Error loading LOD ${e} from ${c}
2
+ `,p),null)),f=!1;if(m==null||(m instanceof C&&r instanceof C?(t=m.image)!=null&&t.data||(o=m.source)!=null&&o.data?m=this.copySettings(r,m):(f=!0,this.previouslyLoaded.delete(g)):m instanceof N&&r instanceof N&&((n=m.attributes.position)!=null&&n.array||(f=!0,this.previouslyLoaded.delete(g)))),!f)return m}const y=l,P=new Promise(async(m,f)=>{const p=new ce;Q(p),D&&(await new Promise(v=>setTimeout(v,1e3)),s&&console.warn("Start loading (delayed) "+c,y.guid));let b=c;if(y&&Array.isArray(y.lods)){const v=y.lods[e];v.hash&&(b+="?v="+v.hash)}const x=await p.loadAsync(b).catch(v=>(console.error(`Error loading LOD ${e} from ${c}
3
+ `,v),null));if(!x)return null;const S=x.parser;s&&console.log("Loading finished "+c,y.guid);let _=0;if(x.parser.json.textures){let v=!1;for(const h of x.parser.json.textures){if(h!=null&&h.extensions){const w=h?.extensions[B];if(w!=null&&w.guid&&w.guid===y.guid){v=!0;break}}_++}if(v){let h=await S.getDependency("texture",_);return s&&console.log('change "'+r.name+'" \u2192 "'+h.name+'"',c,_,h,g),r instanceof C&&(h=this.copySettings(r,h)),h&&(h.guid=y.guid),m(h)}}if(_=0,x.parser.json.meshes){let v=!1;for(const h of x.parser.json.meshes){if(h!=null&&h.extensions){const w=h?.extensions[B];if(w!=null&&w.guid&&w.guid===y.guid){v=!0;break}}_++}if(v){const h=await S.getDependency("mesh",_),w=y;if(s&&console.log(`Loaded Mesh "${h.name}"`,c,_,h,g),h.isMesh===!0){const T=h.geometry;return L.assignLODInformation(a.url,T,i,e,void 0,w.density),m(T)}else{const T=new Array;for(let I=0;I<h.children.length;I++){const G=h.children[I];if(G instanceof F){const j=G.geometry;L.assignLODInformation(a.url,j,i,e,I,w.density),T.push(j)}}return m(T)}}}return m(null)});return this.previouslyLoaded.set(g,P),await P}else if(r instanceof C){s&&console.log("Load texture from uri: "+c);const g=await new ae().loadAsync(c);return g?(g.guid=l.guid,g.flipY=!1,g.needsUpdate=!0,g.colorSpace=r.colorSpace,s&&console.log(l,g)):D&&console.warn("failed loading",c),g}}else D&&console.warn(`Can not load LOD ${e}: no LOD info found for "${i}" ${r.name}`,r.type);return null}static assignLODInformation(r,e,t,o,n,s){if(!e)return;e.userData||(e.userData={});const a=new xe(r,t,o,n,s);e.userData.LODS=a,e.userData.LOD=o}static getAssignedLODInformation(r){var e;return((e=r?.userData)==null?void 0:e.LODS)||null}static copySettings(r,e){return this._copiedTextures.get(r)||(e=e.clone(),this._copiedTextures.set(r,e),e.offset=r.offset,e.repeat=r.repeat,e.colorSpace=r.colorSpace,e)}};let O=L;u(O,"registerTexture",(r,e,t,o)=>{D&&console.log("> Progressive: register texture",t,e.name,e.uuid,e,o),e.source&&(e.source[X]=o);const n=o.guid;L.assignLODInformation(r,e,n,0,0,void 0),L.lodInfos.set(n,o),L.lowresCache.set(n,e)}),u(O,"registerMesh",(r,e,t,o,n,s)=>{var a;D&&console.log("> Progressive: register mesh",n,t.name,s,t.uuid,t);const i=t.geometry;i.userData||(i.userData={}),L.assignLODInformation(r,i,e,o,n,s.density),L.lodInfos.set(e,s);let l=L.lowresCache.get(e);l?l.push(t.geometry):l=[t.geometry],L.lowresCache.set(e,l);for(const d of V)(a=d.onRegisteredNewMesh)==null||a.call(d,t,s)}),u(O,"lodInfos",new Map),u(O,"previouslyLoaded",new Map),u(O,"lowresCache",new Map),u(O,"_copiedTextures",new Map);class xe{constructor(e,t,o,n,s){u(this,"url"),u(this,"key"),u(this,"level"),u(this,"index"),u(this,"density"),this.url=e,this.key=t,this.level=o,n!=null&&(this.index=n),s!=null&&(this.density=s)}}const ee=q("debugprogressive"),ve=q("noprogressive"),A=class{constructor(r){u(this,"renderer"),u(this,"projectionScreenMatrix",new K),u(this,"cameraFrustrum",new le),u(this,"updateInterval",0),u(this,"pause",!1),u(this,"plugins",[]),u(this,"_originalRender"),u(this,"_sphere",new ue),u(this,"_tempBox",new Y),u(this,"tempMatrix",new K),u(this,"_tempWorldPosition",new E),u(this,"_tempBoxSize",new E),u(this,"_tempBox2Size",new E),this.renderer=r}static getObjectLODState(r){var e;return(e=r.userData)==null?void 0:e.LOD_state}enable(){if(this._originalRender)return;let r=0;this._originalRender=this.renderer.render;const e=this;let t=0;J(this.renderer),this.renderer.render=function(o,n){const s=t++,a=r++;e.onBeforeRender(o,n,a,s),e._originalRender.call(this,o,n),e.onAfterRender(o,n,a,s),r--}}disable(){this._originalRender&&(this.renderer.render=this._originalRender,this._originalRender=void 0)}onBeforeRender(r,e,t,o){}onAfterRender(r,e,t,o){if(ve||this.pause||this.updateInterval>0&&o%this.updateInterval!=0)return;this.projectionScreenMatrix.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix,this.renderer.coordinateSystem);const n=1e5,s=this.renderer.renderLists.get(r,t).opaque;for(const a of s){const i=a.object;(i instanceof F||i.isMesh)&&this.updateLODs(r,e,i,n)}}updateLODs(r,e,t,o){var n,s;for(const d of this.plugins)(n=d.onBeforeUpdateLOD)==null||n.call(d,this.renderer,r,e,t);let a=t.userData.LOD_state;a||(a=new De,t.userData.LOD_state=a);let i=this.calculateLodLevel(e,t,a,o);i=Math.round(i),i>=0&&this.loadProgressiveMeshes(t,i);let l=0;if(t.material){const d=t["DEBUG:LOD"];if(d!=null&&(l=d),Array.isArray(t.material))for(const c of t.material)this.loadProgressiveTextures(c,l);else this.loadProgressiveTextures(t.material,l)}for(const d of this.plugins)(s=d.onAfterUpdatedLOD)==null||s.call(d,this.renderer,r,e,t,i);a.lastLodLevel=i}loadProgressiveTextures(r,e){return r&&r.userData&&r.userData.LOD!==e?(r.userData.LOD=e,O.assignTextureLOD(r,e)):Promise.resolve(null)}loadProgressiveMeshes(r,e){if(!r)return Promise.resolve(null);if(r.userData||(r.userData={}),r.userData.LOD!==e){r.userData.LOD=e;const t=r.geometry;return O.assignMeshLOD(r,e).then(o=>(o&&r.userData.LOD==e&&t!=r.geometry,o))}return Promise.resolve(null)}calculateLodLevel(r,e,t,o){var n;if(!e)return-1;let s=10+1;if(r){if(ee&&e["DEBUG:LOD"]!=null)return e["DEBUG:LOD"];const a=O.getMeshLODInformation(e.geometry),i=a?.lods;if(!i||i.length<=0||!((n=this.cameraFrustrum)!=null&&n.intersectsObject(e)))return 99;const l=e.geometry.boundingBox;if(l&&r.isPerspectiveCamera){const d=r;if(e.geometry.attributes.color&&e.geometry.attributes.color.count<100&&e.geometry.boundingSphere){this._sphere.copy(e.geometry.boundingSphere),this._sphere.applyMatrix4(e.matrixWorld);const f=r.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(f))return 0}if(this._tempBox.copy(l),this._tempBox.applyMatrix4(e.matrixWorld),this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&d.fov>70){const f=this._tempBox.min,p=this._tempBox.max;let b=f.x,x=f.y,S=p.x,_=p.y;const v=2,h=1.5,w=(f.x+p.x)*.5,T=(f.y+p.y)*.5;b=(b-w)*v+w,x=(x-T)*v+T,S=(S-w)*v+w,_=(_-T)*v+T;const I=b<0&&S>0?0:Math.min(Math.abs(f.x),Math.abs(p.x)),G=x<0&&_>0?0:Math.min(Math.abs(f.y),Math.abs(p.y)),j=Math.max(I,G);t.lastCentrality=(h-j)*(h-j)*(h-j)}else t.lastCentrality=1;const c=this._tempBox.getSize(this._tempBoxSize);c.multiplyScalar(.5),screen.availHeight>0&&c.multiplyScalar(this.renderer.domElement.clientHeight/screen.availHeight),c.x*=d.aspect;const g=r.matrixWorldInverse,M=new Y;M.copy(l),M.applyMatrix4(e.matrixWorld),M.applyMatrix4(g);const y=M.getSize(this._tempBox2Size),P=Math.max(y.x,y.y);if(Math.max(c.x,c.y)!=0&&P!=0&&(c.z=y.z/Math.max(y.x,y.y)*Math.max(c.x,c.y)),t.lastScreenCoverage=Math.max(c.x,c.y,c.z),t.lastScreenspaceVolume.copy(c),t.lastScreenCoverage*=t.lastCentrality,ee&&A.debugDrawLine){const f=this.tempMatrix.copy(this.projectionScreenMatrix);f.invert();const p=A.corner0,b=A.corner1,x=A.corner2,S=A.corner3;p.copy(this._tempBox.min),b.copy(this._tempBox.max),b.x=p.x,x.copy(this._tempBox.max),x.y=p.y,S.copy(this._tempBox.max);const _=(p.z+S.z)*.5;p.z=b.z=x.z=S.z=_,p.applyMatrix4(f),b.applyMatrix4(f),x.applyMatrix4(f),S.applyMatrix4(f),A.debugDrawLine(p,b,255),A.debugDrawLine(p,x,255),A.debugDrawLine(b,S,255),A.debugDrawLine(x,S,255)}let m=999;if(i&&t.lastScreenCoverage>0){for(let f=0;f<i.length;f++)if(i[f].density/t.lastScreenCoverage<o){m=f;break}}m<s&&(s=m)}}return s}};let k=A;u(k,"debugDrawLine"),u(k,"corner0",new E),u(k,"corner1",new E),u(k,"corner2",new E),u(k,"corner3",new E);class De{constructor(){u(this,"lastLodLevel",0),u(this,"lastScreenCoverage",0),u(this,"lastScreenspaceVolume",new E),u(this,"lastCentrality",0)}}const re=Symbol("NEEDLE_mesh_lod"),z=Symbol("NEEDLE_texture_lod");function te(r){if(!r)return null;let e=null,t=null;for(let o=r;o!=null;o=Object.getPrototypeOf(o)){const n=Object.getOwnPropertySymbols(o),s=n.find(i=>i.toString()=="Symbol(renderer)"),a=n.find(i=>i.toString()=="Symbol(scene)");!e&&s!=null&&(e=r[s].threeRenderer),!t&&a!=null&&(t=r[a])}if(e){console.log("Adding Needle LODs to modelviewer");const o=new k(e);if(o.plugins.push(new Le(r)),o.enable(),t){const n=t.camera||t.traverse(s=>s.type=="PerspectiveCamera")[0];n&&e.render(t,n)}return()=>{o.disable()}}return null}class Le{constructor(e){u(this,"modelviewer"),u(this,"_didWarnAboutMissingUrl",!1),this.modelviewer=e}onBeforeUpdateLOD(e,t,o,n){this.tryParseMeshLOD(t,n),this.tryParseTextureLOD(t,n)}getUrl(){let e=this.modelviewer.getAttribute("src");return e||(e=this.modelviewer.src),e||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",this.modelviewer),this._didWarnAboutMissingUrl=!0),e}tryGetCurrentGLTF(e){return e._currentGLTF}tryParseTextureLOD(e,t){if(t[z]==!0)return;t[z]=!0;const o=this.tryGetCurrentGLTF(e),n=this.getUrl();if(n&&o&&t.material){let s=function(i){var l,d,c;if(i[z]==!0)return;i[z]=!0,i.userData&&(i.userData.LOD=-1);const g=Object.keys(i);for(let M=0;M<g.length;M++){const y=g[M],P=i[y];if(P?.isTexture===!0){const m=(d=(l=P.userData)==null?void 0:l.associations)==null?void 0:d.textures,f=o.parser.json.textures[m];if((c=f.extensions)!=null&&c[B]){const p=f.extensions[B];p&&n&&O.registerTexture(n,P,p.lods.length,p)}}}};const a=t.material;if(Array.isArray(a))for(const i of a)s(i);else s(a)}}tryParseMeshLOD(e,t){var o,n;if(t[re]==!0)return;t[re]=!0;const s=this.getUrl();if(!s)return;const a=(n=(o=t.userData)==null?void 0:o.gltfExtensions)==null?void 0:n[B];if(a&&s){const i=t.uuid;O.registerMesh(s,i,t,0,a.lods.length,a)}}}function Oe(r,e,t,o){J(e),Q(t),t.register(s=>new O(s,r));const n=new k(e);return o?.enableLODsManager!==!1&&n.enable(),n}document.addEventListener("DOMContentLoaded",()=>{te(document.querySelector("model-viewer"))});export{B as EXTENSION_NAME,k as LODsManager,O as NEEDLE_progressive,te as patchModelViewer,ye as registerPlugin,Oe as useNeedleProgressive};
@@ -1,3 +1,3 @@
1
- "use strict";var re=Object.defineProperty;var se=(l,e,t)=>e in l?re(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var u=(l,e,t)=>(se(l,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("three"),ie=require("three/examples/jsm/loaders/GLTFLoader.js"),oe=require("three/examples/jsm/libs/meshopt_decoder.module.js"),ne=require("three/examples/jsm/loaders/DRACOLoader.js"),ae=require("three/examples/jsm/loaders/KTX2Loader.js"),le="https://www.gstatic.com/draco/versioned/decoders/1.4.1/",ue="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";let z,$,U;function Z(l){z||(z=new ne.DRACOLoader,z.setDecoderPath(le),z.setDecoderConfig({type:"js"})),U||(U=new ae.KTX2Loader,U.setTranscoderPath(ue)),$||($=oe.MeshoptDecoder),l?U.detectSupport(l):console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail")}function j(l){l.dracoLoader||l.setDRACOLoader(z),l.ktx2Loader||l.setKTX2Loader(U),l.meshoptDecoder||l.setMeshoptDecoder($)}function Y(l){const t=new URL(window.location.href).searchParams.get(l);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function ce(l,e){if(e===void 0||e.startsWith("./")||e.startsWith("http")||l===void 0)return e;const t=l.lastIndexOf("/");if(t>=0){const r=l.substring(0,t+1);for(;r.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return r+e}return e}const X=new Array;function fe(l){X.push(l)}const k="NEEDLE_progressive",T=Y("debugprogressive"),V=Symbol("needle-progressive-texture"),I=new Map,K=new Set;if(T){let l=function(){e+=1,console.log("Toggle LOD level",e,I),I.forEach((i,o)=>{for(const s of i.keys){const n=o[s];if(n.isBufferGeometry===!0){const a=w.getMeshLODInformation(n),g=a?Math.min(e,a.lods.length):0;o["DEBUG:LOD"]=e,w.assignMeshLOD(o,g),a&&(t=Math.max(t,a.lods.length-1))}else if(o.isMaterial===!0){o["DEBUG:LOD"]=e,w.assignTextureLOD(o,e);break}}}),e>=t&&(e=-1)},e=-1,t=2,r=!1;window.addEventListener("keyup",i=>{i.key==="p"&&l(),i.key==="w"&&(r=!r,K&&K.forEach(o=>{o.name!="BackgroundCubeMaterial"&&"wireframe"in o&&(o.wireframe=r)}))})}function H(l,e,t){var i;if(!T)return;I.has(l)||I.set(l,{keys:[],sourceId:t});const r=I.get(l);((i=r==null?void 0:r.keys)==null?void 0:i.includes(e))==!1&&r.keys.push(e)}const S=class{constructor(e,t){u(this,"parser");u(this,"url");T&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}get name(){return k}static getMeshLODInformation(e){const t=this.getAssignedLODInformation(e);return t!=null&&t.key?this.lodInfos.get(t.key):null}static hasLODLevelAvailable(e,t){var o;if(e.isMaterial===!0){for(const s of Object.keys(e)){const n=e[s];if(n.isTexture&&this.hasLODLevelAvailable(n,t))return!0}return!1}else if(e.isGroup===!0){for(const s of e.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,t))return!0}let r,i;if(e.isMesh?r=e.geometry:(e.isBufferGeometry||e.isTexture)&&(r=e),r&&(o=r==null?void 0:r.userData)!=null&&o.LODS){const s=r.userData.LODS;if(i=this.lodInfos.get(s.key),t===void 0)return i!=null;if(i)return Array.isArray(i.lods)?t<i.lods.length:t===0}return!1}static assignMeshLOD(e,t){var r;if(!e)return Promise.resolve(null);if(e instanceof h.Mesh||e.isMesh===!0){const i=e.geometry,o=this.getAssignedLODInformation(i);if(!o)return Promise.resolve(null);for(const s of X)(r=s.onBeforeGetLODMesh)==null||r.call(s,e,t);return e["LOD:requested level"]=t,S.getOrLoadLOD(i,t).then(s=>{if(e["LOD:requested level"]===t){if(delete e["LOD:requested level"],Array.isArray(s)){const n=o.index||0;s=s[n]}s&&i!=s&&s instanceof h.BufferGeometry&&(e.geometry=s,T&&H(e,"geometry",o.url))}return s}).catch(s=>(console.error("Error loading mesh LOD",e,s),null))}else T&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e instanceof h.Material||e.isMaterial===!0){const r=e,i=[],o=new Array;if(T&&K.add(r),r instanceof h.RawShaderMaterial)for(const s of Object.keys(r.uniforms)){const n=r.uniforms[s].value;if((n==null?void 0:n.isTexture)===!0){const a=this.assignTextureLODForSlot(n,t,r,s);i.push(a),o.push(s)}}else for(const s of Object.keys(r)){const n=r[s];if((n==null?void 0:n.isTexture)===!0){const a=this.assignTextureLODForSlot(n,t,r,s);i.push(a),o.push(s)}}return Promise.all(i).then(s=>{const n=new Array;for(let a=0;a<s.length;a++){const g=s[a],f=o[a];g&&g.isTexture===!0?n.push({material:r,slot:f,texture:g,level:t}):n.push({material:r,slot:f,texture:null,level:t})}return n})}if(e instanceof h.Texture||e.isTexture===!0){const r=e;return this.assignTextureLODForSlot(r,t,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(e,t,r,i){return(e==null?void 0:e.isTexture)!==!0?Promise.resolve(null):S.getOrLoadLOD(e,t).then(o=>{if(Array.isArray(o))return null;if((o==null?void 0:o.isTexture)===!0){if(o!=e&&(r&&i&&(r[i]=o),T&&i&&r)){const s=this.getAssignedLODInformation(e);s&&H(r,i,s.url)}return o}else T=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(o=>(console.error("Error loading LOD",e,o),null))}afterRoot(e){var t,r;return T&&console.log("AFTER",this.url,e),(t=this.parser.json.textures)==null||t.forEach((i,o)=>{if(i!=null&&i.extensions){const s=i==null?void 0:i.extensions[k];if(s){let n=!1;for(const a of this.parser.associations.keys())a.isTexture===!0&&this.parser.associations.get(a).textures===o&&(n=!0,S.registerTexture(this.url,a,o,s));n||this.parser.getDependency("texture",o).then(a=>{a&&S.registerTexture(this.url,a,o,s)})}}}),(r=this.parser.json.meshes)==null||r.forEach((i,o)=>{if(i!=null&&i.extensions){const s=i==null?void 0:i.extensions[k];if(s&&s.lods){for(const n of this.parser.associations.keys())if(n.isMesh){const a=this.parser.associations.get(n);a.meshes===o&&S.registerMesh(this.url,s.guid,n,s.lods.length,a.primitives,s)}}}}),null}static async getOrLoadLOD(e,t){var n,a,g;const r=T=="verbose",i=e.userData.LODS;if(!i)return null;const o=i==null?void 0:i.key;let s;if(e.isTexture===!0){const f=e;f.source&&f.source[V]&&(s=f.source[V])}if(s||(s=S.lodInfos.get(o)),s){if(t>0){let d=!1;const M=Array.isArray(s.lods);if(M&&t>=s.lods.length?d=!0:M||(d=!0),d)return this.lowresCache.get(o)}const f=Array.isArray(s.lods)?s.lods[t].path:s.lods;if(!f)return T&&!s["missing:uri"]&&(s["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,s)),null;const D=ce(i.url,f);if(D.endsWith(".glb")||D.endsWith(".gltf")){if(!s.guid)return console.warn("missing pointer for glb/gltf texture",s),null;const d=D+"_"+s.guid,M=this.previouslyLoaded.get(d);if(M!==void 0){r&&console.log(`LOD ${t} was already loading/loaded: ${d}`);let m=await M.catch(F=>(console.error(`Error loading LOD ${t} from ${D}
2
- `,F),null)),R=!1;if(m==null||(m instanceof h.Texture&&e instanceof h.Texture?(n=m.image)!=null&&n.data||(a=m.source)!=null&&a.data?m=this.copySettings(e,m):(R=!0,this.previouslyLoaded.delete(d)):m instanceof h.BufferGeometry&&e instanceof h.BufferGeometry&&((g=m.attributes.position)!=null&&g.array||(R=!0,this.previouslyLoaded.delete(d)))),!R)return m}const x=s,b=new Promise(async(m,R)=>{const F=new ie.GLTFLoader;j(F),T&&(await new Promise(y=>setTimeout(y,1e3)),r&&console.warn("Start loading (delayed) "+D,x.guid));let L=D;if(x&&Array.isArray(x.lods)){const y=x.lods[t];y.hash&&(L+="?v="+y.hash)}const p=await F.loadAsync(L).catch(y=>(console.error(`Error loading LOD ${t} from ${D}
3
- `,y),null));if(!p)return null;const P=p.parser;r&&console.log("Loading finished "+D,x.guid);let O=0;if(p.parser.json.textures){let y=!1;for(const c of p.parser.json.textures){if(c!=null&&c.extensions){const v=c==null?void 0:c.extensions[k];if(v!=null&&v.guid&&v.guid===x.guid){y=!0;break}}O++}if(y){let c=await P.getDependency("texture",O);return r&&console.log('change "'+e.name+'" → "'+c.name+'"',D,O,c,d),e instanceof h.Texture&&(c=this.copySettings(e,c)),c&&(c.guid=x.guid),m(c)}}if(O=0,p.parser.json.meshes){let y=!1;for(const c of p.parser.json.meshes){if(c!=null&&c.extensions){const v=c==null?void 0:c.extensions[k];if(v!=null&&v.guid&&v.guid===x.guid){y=!0;break}}O++}if(y){const c=await P.getDependency("mesh",O),v=x;if(r&&console.log(`Loaded Mesh "${c.name}"`,D,O,c,d),c.isMesh===!0){const B=c.geometry;return S.assignLODInformation(i.url,B,o,t,void 0,v.density),m(B)}else{const B=new Array;for(let C=0;C<c.children.length;C++){const E=c.children[C];if(E instanceof h.Mesh){const N=E.geometry;S.assignLODInformation(i.url,N,o,t,C,v.density),B.push(N)}}return m(B)}}}return m(null)});return this.previouslyLoaded.set(d,b),await b}else if(e instanceof h.Texture){r&&console.log("Load texture from uri: "+D);const M=await new h.TextureLoader().loadAsync(D);return M?(M.guid=s.guid,M.flipY=!1,M.needsUpdate=!0,M.colorSpace=e.colorSpace,r&&console.log(s,M)):T&&console.warn("failed loading",D),M}}else T&&console.warn(`Can not load LOD ${t}: no LOD info found for "${o}" ${e.name}`,e.type);return null}static assignLODInformation(e,t,r,i,o,s){if(!t)return;t.userData||(t.userData={});const n=new de(e,r,i,o,s);t.userData.LODS=n,t.userData.LOD=i}static getAssignedLODInformation(e){var t;return((t=e==null?void 0:e.userData)==null?void 0:t.LODS)||null}static copySettings(e,t){const r=this._copiedTextures.get(e);return r||(t=t.clone(),this._copiedTextures.set(e,t),t.offset=e.offset,t.repeat=e.repeat,t.colorSpace=e.colorSpace,t)}};let w=S;u(w,"registerTexture",(e,t,r,i)=>{T&&console.log("> Progressive: register texture",r,t.name,t.uuid,t,i),t.source&&(t.source[V]=i);const o=i.guid;S.assignLODInformation(e,t,o,0,0,void 0),S.lodInfos.set(o,i),S.lowresCache.set(o,t)}),u(w,"registerMesh",(e,t,r,i,o,s)=>{var g;T&&console.log("> Progressive: register mesh",o,r.name,s,r.uuid,r);const n=r.geometry;n.userData||(n.userData={}),S.assignLODInformation(e,n,t,i,o,s.density),S.lodInfos.set(t,s);let a=S.lowresCache.get(t);a?a.push(r.geometry):a=[r.geometry],S.lowresCache.set(t,a);for(const f of X)(g=f.onRegisteredNewMesh)==null||g.call(f,r,s)}),u(w,"lodInfos",new Map),u(w,"previouslyLoaded",new Map),u(w,"lowresCache",new Map),u(w,"_copiedTextures",new Map);class de{constructor(e,t,r,i,o){u(this,"url");u(this,"key");u(this,"level");u(this,"index");u(this,"density");this.url=e,this.key=t,this.level=r,i!=null&&(this.index=i),o!=null&&(this.density=o)}}const J=Y("debugprogressive"),ge=Y("noprogressive"),A=class{constructor(e){u(this,"renderer");u(this,"projectionScreenMatrix",new h.Matrix4);u(this,"cameraFrustrum",new h.Frustum);u(this,"updateInterval",0);u(this,"pause",!1);u(this,"plugins",[]);u(this,"_originalRender");u(this,"_sphere",new h.Sphere);u(this,"_tempBox",new h.Box3);u(this,"tempMatrix",new h.Matrix4);u(this,"_tempWorldPosition",new h.Vector3);u(this,"_tempBoxSize",new h.Vector3);u(this,"_tempBox2Size",new h.Vector3);this.renderer=e}static getObjectLODState(e){var t;return(t=e.userData)==null?void 0:t.LOD_state}enable(){if(this._originalRender)return;let e=0;this._originalRender=this.renderer.render;const t=this;let r=0;Z(this.renderer),this.renderer.render=function(i,o){const s=r++,n=e++;t.onBeforeRender(i,o,n,s),t._originalRender.call(this,i,o),t.onAfterRender(i,o,n,s),e--}}disable(){this._originalRender&&(this.renderer.render=this._originalRender,this._originalRender=void 0)}onBeforeRender(e,t,r,i){}onAfterRender(e,t,r,i){if(ge||this.pause||this.updateInterval>0&&i%this.updateInterval!=0)return;this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix,this.renderer.coordinateSystem);const o=1e5,n=this.renderer.renderLists.get(e,r).opaque;for(const a of n){const g=a.object;(g instanceof h.Mesh||g.isMesh)&&this.updateLODs(e,t,g,o)}}updateLODs(e,t,r,i){var a,g;for(const f of this.plugins)(a=f.onBeforeUpdateLOD)==null||a.call(f,this.renderer,e,t,r);let o=r.userData.LOD_state;o||(o=new he,r.userData.LOD_state=o);let s=this.calculateLodLevel(t,r,o,i);s=Math.round(s),s>=0&&this.loadProgressiveMeshes(r,s);let n=0;if(r.material){const f=r["DEBUG:LOD"];if(f!=null&&(n=f),Array.isArray(r.material))for(const D of r.material)this.loadProgressiveTextures(D,n);else this.loadProgressiveTextures(r.material,n)}for(const f of this.plugins)(g=f.onAfterUpdatedLOD)==null||g.call(f,this.renderer,e,t,r,s);o.lastLodLevel=s}loadProgressiveTextures(e,t){return e&&e.userData&&e.userData.LOD!==t?(e.userData.LOD=t,w.assignTextureLOD(e,t)):Promise.resolve(null)}loadProgressiveMeshes(e,t){if(!e)return Promise.resolve(null);if(e.userData||(e.userData={}),e.userData.LOD!==t){e.userData.LOD=t;const r=e.geometry;return w.assignMeshLOD(e,t).then(i=>(i&&e.userData.LOD==t&&r!=e.geometry,i))}return Promise.resolve(null)}calculateLodLevel(e,t,r,i){var n;if(!t)return-1;let s=10+1;if(e){if(J&&t["DEBUG:LOD"]!=null)return t["DEBUG:LOD"];const a=w.getMeshLODInformation(t.geometry),g=a==null?void 0:a.lods;if(!g||g.length<=0||!((n=this.cameraFrustrum)!=null&&n.intersectsObject(t)))return 99;const f=t.geometry.boundingBox;if(f&&e.isPerspectiveCamera){const D=e;if(t.geometry.attributes.color&&t.geometry.attributes.color.count<100&&t.geometry.boundingSphere){this._sphere.copy(t.geometry.boundingSphere),this._sphere.applyMatrix4(t.matrixWorld);const L=e.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(L))return 0}if(this._tempBox.copy(f),this._tempBox.applyMatrix4(t.matrixWorld),this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&D.fov>70){const L=this._tempBox.min,p=this._tempBox.max;let P=L.x,O=L.y,y=p.x,c=p.y;const v=2,B=1.5,C=(L.x+p.x)*.5,E=(L.y+p.y)*.5;P=(P-C)*v+C,O=(O-E)*v+E,y=(y-C)*v+C,c=(c-E)*v+E;const N=P<0&&y>0?0:Math.min(Math.abs(L.x),Math.abs(p.x)),te=O<0&&c>0?0:Math.min(Math.abs(L.y),Math.abs(p.y)),q=Math.max(N,te);r.lastCentrality=(B-q)*(B-q)*(B-q)}else r.lastCentrality=1;const d=this._tempBox.getSize(this._tempBoxSize);d.multiplyScalar(.5),screen.availHeight>0&&d.multiplyScalar(this.renderer.domElement.clientHeight/screen.availHeight),d.x*=D.aspect;const M=e.matrixWorldInverse,x=new h.Box3;x.copy(f),x.applyMatrix4(t.matrixWorld),x.applyMatrix4(M);const b=x.getSize(this._tempBox2Size),G=Math.max(b.x,b.y);if(Math.max(d.x,d.y)!=0&&G!=0&&(d.z=b.z/Math.max(b.x,b.y)*Math.max(d.x,d.y)),r.lastScreenCoverage=Math.max(d.x,d.y,d.z),r.lastScreenspaceVolume.copy(d),r.lastScreenCoverage*=r.lastCentrality,J&&A.debugDrawLine){const L=this.tempMatrix.copy(this.projectionScreenMatrix);L.invert();const p=A.corner0,P=A.corner1,O=A.corner2,y=A.corner3;p.copy(this._tempBox.min),P.copy(this._tempBox.max),P.x=p.x,O.copy(this._tempBox.max),O.y=p.y,y.copy(this._tempBox.max);const c=(p.z+y.z)*.5;p.z=P.z=O.z=y.z=c,p.applyMatrix4(L),P.applyMatrix4(L),O.applyMatrix4(L),y.applyMatrix4(L),A.debugDrawLine(p,P,255),A.debugDrawLine(p,O,255),A.debugDrawLine(P,y,255),A.debugDrawLine(O,y,255)}let R=999;if(g&&r.lastScreenCoverage>0){for(let L=0;L<g.length;L++)if(g[L].density/r.lastScreenCoverage<i){R=L;break}}R<s&&(s=R)}}return s}};let _=A;u(_,"debugDrawLine"),u(_,"corner0",new h.Vector3),u(_,"corner1",new h.Vector3),u(_,"corner2",new h.Vector3),u(_,"corner3",new h.Vector3);class he{constructor(){u(this,"lastLodLevel",0);u(this,"lastScreenCoverage",0);u(this,"lastScreenspaceVolume",new h.Vector3);u(this,"lastCentrality",0)}}const Q=Symbol("NEEDLE_mesh_lod"),W=Symbol("NEEDLE_texture_lod");function ee(l){if(!l)return null;let e=null,t=null;for(let r=l;r!=null;r=Object.getPrototypeOf(r)){const i=Object.getOwnPropertySymbols(r),o=i.find(n=>n.toString()=="Symbol(renderer)"),s=i.find(n=>n.toString()=="Symbol(scene)");!e&&o!=null&&(e=l[o].threeRenderer),!t&&s!=null&&(t=l[s])}if(e){console.log("Adding Needle LODs to modelviewer");const r=new _(e);if(r.plugins.push(new pe(l)),r.enable(),t){const i=t.camera||t.traverse(o=>o.type=="PerspectiveCamera")[0];i&&e.render(t,i)}return()=>{r.disable()}}return null}class pe{constructor(e){u(this,"modelviewer");this.modelviewer=e}onBeforeUpdateLOD(e,t,r,i){this.tryParseMeshLOD(t,i),this.tryParseTextureLOD(t,i)}getUrl(){return this.modelviewer.getAttribute("src")}tryGetCurrentGLTF(e){return e._currentGLTF}tryParseTextureLOD(e,t){if(t[W]==!0)return;t[W]=!0;const r=this.tryGetCurrentGLTF(e),i=this.getUrl();if(!i){console.error("No url found in modelviewer");return}if(r&&t.material){let o=function(n){var g,f,D;if(n[W]==!0)return;n[W]=!0,n.userData&&(n.userData.LOD=-1);const a=Object.keys(n);for(let d=0;d<a.length;d++){const M=a[d],x=n[M];if((x==null?void 0:x.isTexture)===!0){const b=(f=(g=x.userData)==null?void 0:g.associations)==null?void 0:f.textures,G=r.parser.json.textures[b];if((D=G.extensions)!=null&&D[k]){const m=G.extensions[k];m&&i&&w.registerTexture(i,x,m.lods.length,m)}}}};const s=t.material;if(Array.isArray(s))for(const n of s)o(n);else o(s)}}tryParseMeshLOD(e,t){var o,s;if(t[Q]==!0)return;t[Q]=!0;const r=this.getUrl();if(!r){console.error("No url found in modelviewer");return}const i=(s=(o=t.userData)==null?void 0:o.gltfExtensions)==null?void 0:s[k];if(i&&r){const n=t.uuid;w.registerMesh(r,n,t,0,i.lods.length,i)}}}function ye(l,e,t,r){Z(e),j(t),t.register(o=>new w(o,l));const i=new _(e);return(r==null?void 0:r.enableLODsManager)!==!1&&i.enable(),i}document.addEventListener("DOMContentLoaded",()=>{ee(document.querySelector("model-viewer"))});exports.EXTENSION_NAME=k;exports.LODsManager=_;exports.NEEDLE_progressive=w;exports.patchModelViewer=ee;exports.registerPlugin=fe;exports.useNeedleProgressive=ye;
1
+ "use strict";var re=Object.defineProperty;var se=(l,e,t)=>e in l?re(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t;var u=(l,e,t)=>(se(l,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("three"),ie=require("three/examples/jsm/loaders/GLTFLoader.js"),oe=require("three/examples/jsm/libs/meshopt_decoder.module.js"),ne=require("three/examples/jsm/loaders/DRACOLoader.js"),ae=require("three/examples/jsm/loaders/KTX2Loader.js"),le="https://www.gstatic.com/draco/versioned/decoders/1.4.1/",ue="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";let U,$,z;function Z(l){U||(U=new ne.DRACOLoader,U.setDecoderPath(le),U.setDecoderConfig({type:"js"})),z||(z=new ae.KTX2Loader,z.setTranscoderPath(ue)),$||($=oe.MeshoptDecoder),l?z.detectSupport(l):console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail")}function j(l){l.dracoLoader||l.setDRACOLoader(U),l.ktx2Loader||l.setKTX2Loader(z),l.meshoptDecoder||l.setMeshoptDecoder($)}function Y(l){const t=new URL(window.location.href).searchParams.get(l);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function ce(l,e){if(e===void 0||e.startsWith("./")||e.startsWith("http")||l===void 0)return e;const t=l.lastIndexOf("/");if(t>=0){const r=l.substring(0,t+1);for(;r.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return r+e}return e}const X=new Array;function fe(l){X.push(l)}const k="NEEDLE_progressive",T=Y("debugprogressive"),V=Symbol("needle-progressive-texture"),I=new Map,K=new Set;if(T){let l=function(){e+=1,console.log("Toggle LOD level",e,I),I.forEach((i,o)=>{for(const s of i.keys){const n=o[s];if(n.isBufferGeometry===!0){const a=O.getMeshLODInformation(n),g=a?Math.min(e,a.lods.length):0;o["DEBUG:LOD"]=e,O.assignMeshLOD(o,g),a&&(t=Math.max(t,a.lods.length-1))}else if(o.isMaterial===!0){o["DEBUG:LOD"]=e,O.assignTextureLOD(o,e);break}}}),e>=t&&(e=-1)},e=-1,t=2,r=!1;window.addEventListener("keyup",i=>{i.key==="p"&&l(),i.key==="w"&&(r=!r,K&&K.forEach(o=>{o.name!="BackgroundCubeMaterial"&&"wireframe"in o&&(o.wireframe=r)}))})}function H(l,e,t){var i;if(!T)return;I.has(l)||I.set(l,{keys:[],sourceId:t});const r=I.get(l);((i=r==null?void 0:r.keys)==null?void 0:i.includes(e))==!1&&r.keys.push(e)}const S=class{constructor(e,t){u(this,"parser");u(this,"url");T&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}get name(){return k}static getMeshLODInformation(e){const t=this.getAssignedLODInformation(e);return t!=null&&t.key?this.lodInfos.get(t.key):null}static hasLODLevelAvailable(e,t){var o;if(e.isMaterial===!0){for(const s of Object.keys(e)){const n=e[s];if(n.isTexture&&this.hasLODLevelAvailable(n,t))return!0}return!1}else if(e.isGroup===!0){for(const s of e.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,t))return!0}let r,i;if(e.isMesh?r=e.geometry:(e.isBufferGeometry||e.isTexture)&&(r=e),r&&(o=r==null?void 0:r.userData)!=null&&o.LODS){const s=r.userData.LODS;if(i=this.lodInfos.get(s.key),t===void 0)return i!=null;if(i)return Array.isArray(i.lods)?t<i.lods.length:t===0}return!1}static assignMeshLOD(e,t){var r;if(!e)return Promise.resolve(null);if(e instanceof h.Mesh||e.isMesh===!0){const i=e.geometry,o=this.getAssignedLODInformation(i);if(!o)return Promise.resolve(null);for(const s of X)(r=s.onBeforeGetLODMesh)==null||r.call(s,e,t);return e["LOD:requested level"]=t,S.getOrLoadLOD(i,t).then(s=>{if(e["LOD:requested level"]===t){if(delete e["LOD:requested level"],Array.isArray(s)){const n=o.index||0;s=s[n]}s&&i!=s&&s instanceof h.BufferGeometry&&(e.geometry=s,T&&H(e,"geometry",o.url))}return s}).catch(s=>(console.error("Error loading mesh LOD",e,s),null))}else T&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e instanceof h.Material||e.isMaterial===!0){const r=e,i=[],o=new Array;if(T&&K.add(r),r instanceof h.RawShaderMaterial)for(const s of Object.keys(r.uniforms)){const n=r.uniforms[s].value;if((n==null?void 0:n.isTexture)===!0){const a=this.assignTextureLODForSlot(n,t,r,s);i.push(a),o.push(s)}}else for(const s of Object.keys(r)){const n=r[s];if((n==null?void 0:n.isTexture)===!0){const a=this.assignTextureLODForSlot(n,t,r,s);i.push(a),o.push(s)}}return Promise.all(i).then(s=>{const n=new Array;for(let a=0;a<s.length;a++){const g=s[a],f=o[a];g&&g.isTexture===!0?n.push({material:r,slot:f,texture:g,level:t}):n.push({material:r,slot:f,texture:null,level:t})}return n})}if(e instanceof h.Texture||e.isTexture===!0){const r=e;return this.assignTextureLODForSlot(r,t,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(e,t,r,i){return(e==null?void 0:e.isTexture)!==!0?Promise.resolve(null):S.getOrLoadLOD(e,t).then(o=>{if(Array.isArray(o))return null;if((o==null?void 0:o.isTexture)===!0){if(o!=e&&(r&&i&&(r[i]=o),T&&i&&r)){const s=this.getAssignedLODInformation(e);s&&H(r,i,s.url)}return o}else T=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(o=>(console.error("Error loading LOD",e,o),null))}afterRoot(e){var t,r;return T&&console.log("AFTER",this.url,e),(t=this.parser.json.textures)==null||t.forEach((i,o)=>{if(i!=null&&i.extensions){const s=i==null?void 0:i.extensions[k];if(s){let n=!1;for(const a of this.parser.associations.keys())a.isTexture===!0&&this.parser.associations.get(a).textures===o&&(n=!0,S.registerTexture(this.url,a,o,s));n||this.parser.getDependency("texture",o).then(a=>{a&&S.registerTexture(this.url,a,o,s)})}}}),(r=this.parser.json.meshes)==null||r.forEach((i,o)=>{if(i!=null&&i.extensions){const s=i==null?void 0:i.extensions[k];if(s&&s.lods){for(const n of this.parser.associations.keys())if(n.isMesh){const a=this.parser.associations.get(n);a.meshes===o&&S.registerMesh(this.url,s.guid,n,s.lods.length,a.primitives,s)}}}}),null}static async getOrLoadLOD(e,t){var n,a,g;const r=T=="verbose",i=e.userData.LODS;if(!i)return null;const o=i==null?void 0:i.key;let s;if(e.isTexture===!0){const f=e;f.source&&f.source[V]&&(s=f.source[V])}if(s||(s=S.lodInfos.get(o)),s){if(t>0){let d=!1;const M=Array.isArray(s.lods);if(M&&t>=s.lods.length?d=!0:M||(d=!0),d)return this.lowresCache.get(o)}const f=Array.isArray(s.lods)?s.lods[t].path:s.lods;if(!f)return T&&!s["missing:uri"]&&(s["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,s)),null;const D=ce(i.url,f);if(D.endsWith(".glb")||D.endsWith(".gltf")){if(!s.guid)return console.warn("missing pointer for glb/gltf texture",s),null;const d=D+"_"+s.guid,M=this.previouslyLoaded.get(d);if(M!==void 0){r&&console.log(`LOD ${t} was already loading/loaded: ${d}`);let m=await M.catch(F=>(console.error(`Error loading LOD ${t} from ${D}
2
+ `,F),null)),R=!1;if(m==null||(m instanceof h.Texture&&e instanceof h.Texture?(n=m.image)!=null&&n.data||(a=m.source)!=null&&a.data?m=this.copySettings(e,m):(R=!0,this.previouslyLoaded.delete(d)):m instanceof h.BufferGeometry&&e instanceof h.BufferGeometry&&((g=m.attributes.position)!=null&&g.array||(R=!0,this.previouslyLoaded.delete(d)))),!R)return m}const x=s,P=new Promise(async(m,R)=>{const F=new ie.GLTFLoader;j(F),T&&(await new Promise(y=>setTimeout(y,1e3)),r&&console.warn("Start loading (delayed) "+D,x.guid));let L=D;if(x&&Array.isArray(x.lods)){const y=x.lods[t];y.hash&&(L+="?v="+y.hash)}const p=await F.loadAsync(L).catch(y=>(console.error(`Error loading LOD ${t} from ${D}
3
+ `,y),null));if(!p)return null;const A=p.parser;r&&console.log("Loading finished "+D,x.guid);let w=0;if(p.parser.json.textures){let y=!1;for(const c of p.parser.json.textures){if(c!=null&&c.extensions){const v=c==null?void 0:c.extensions[k];if(v!=null&&v.guid&&v.guid===x.guid){y=!0;break}}w++}if(y){let c=await A.getDependency("texture",w);return r&&console.log('change "'+e.name+'" → "'+c.name+'"',D,w,c,d),e instanceof h.Texture&&(c=this.copySettings(e,c)),c&&(c.guid=x.guid),m(c)}}if(w=0,p.parser.json.meshes){let y=!1;for(const c of p.parser.json.meshes){if(c!=null&&c.extensions){const v=c==null?void 0:c.extensions[k];if(v!=null&&v.guid&&v.guid===x.guid){y=!0;break}}w++}if(y){const c=await A.getDependency("mesh",w),v=x;if(r&&console.log(`Loaded Mesh "${c.name}"`,D,w,c,d),c.isMesh===!0){const B=c.geometry;return S.assignLODInformation(i.url,B,o,t,void 0,v.density),m(B)}else{const B=new Array;for(let C=0;C<c.children.length;C++){const E=c.children[C];if(E instanceof h.Mesh){const W=E.geometry;S.assignLODInformation(i.url,W,o,t,C,v.density),B.push(W)}}return m(B)}}}return m(null)});return this.previouslyLoaded.set(d,P),await P}else if(e instanceof h.Texture){r&&console.log("Load texture from uri: "+D);const M=await new h.TextureLoader().loadAsync(D);return M?(M.guid=s.guid,M.flipY=!1,M.needsUpdate=!0,M.colorSpace=e.colorSpace,r&&console.log(s,M)):T&&console.warn("failed loading",D),M}}else T&&console.warn(`Can not load LOD ${t}: no LOD info found for "${o}" ${e.name}`,e.type);return null}static assignLODInformation(e,t,r,i,o,s){if(!t)return;t.userData||(t.userData={});const n=new de(e,r,i,o,s);t.userData.LODS=n,t.userData.LOD=i}static getAssignedLODInformation(e){var t;return((t=e==null?void 0:e.userData)==null?void 0:t.LODS)||null}static copySettings(e,t){const r=this._copiedTextures.get(e);return r||(t=t.clone(),this._copiedTextures.set(e,t),t.offset=e.offset,t.repeat=e.repeat,t.colorSpace=e.colorSpace,t)}};let O=S;u(O,"registerTexture",(e,t,r,i)=>{T&&console.log("> Progressive: register texture",r,t.name,t.uuid,t,i),t.source&&(t.source[V]=i);const o=i.guid;S.assignLODInformation(e,t,o,0,0,void 0),S.lodInfos.set(o,i),S.lowresCache.set(o,t)}),u(O,"registerMesh",(e,t,r,i,o,s)=>{var g;T&&console.log("> Progressive: register mesh",o,r.name,s,r.uuid,r);const n=r.geometry;n.userData||(n.userData={}),S.assignLODInformation(e,n,t,i,o,s.density),S.lodInfos.set(t,s);let a=S.lowresCache.get(t);a?a.push(r.geometry):a=[r.geometry],S.lowresCache.set(t,a);for(const f of X)(g=f.onRegisteredNewMesh)==null||g.call(f,r,s)}),u(O,"lodInfos",new Map),u(O,"previouslyLoaded",new Map),u(O,"lowresCache",new Map),u(O,"_copiedTextures",new Map);class de{constructor(e,t,r,i,o){u(this,"url");u(this,"key");u(this,"level");u(this,"index");u(this,"density");this.url=e,this.key=t,this.level=r,i!=null&&(this.index=i),o!=null&&(this.density=o)}}const J=Y("debugprogressive"),ge=Y("noprogressive"),b=class{constructor(e){u(this,"renderer");u(this,"projectionScreenMatrix",new h.Matrix4);u(this,"cameraFrustrum",new h.Frustum);u(this,"updateInterval",0);u(this,"pause",!1);u(this,"plugins",[]);u(this,"_originalRender");u(this,"_sphere",new h.Sphere);u(this,"_tempBox",new h.Box3);u(this,"tempMatrix",new h.Matrix4);u(this,"_tempWorldPosition",new h.Vector3);u(this,"_tempBoxSize",new h.Vector3);u(this,"_tempBox2Size",new h.Vector3);this.renderer=e}static getObjectLODState(e){var t;return(t=e.userData)==null?void 0:t.LOD_state}enable(){if(this._originalRender)return;let e=0;this._originalRender=this.renderer.render;const t=this;let r=0;Z(this.renderer),this.renderer.render=function(i,o){const s=r++,n=e++;t.onBeforeRender(i,o,n,s),t._originalRender.call(this,i,o),t.onAfterRender(i,o,n,s),e--}}disable(){this._originalRender&&(this.renderer.render=this._originalRender,this._originalRender=void 0)}onBeforeRender(e,t,r,i){}onAfterRender(e,t,r,i){if(ge||this.pause||this.updateInterval>0&&i%this.updateInterval!=0)return;this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix,this.renderer.coordinateSystem);const o=1e5,n=this.renderer.renderLists.get(e,r).opaque;for(const a of n){const g=a.object;(g instanceof h.Mesh||g.isMesh)&&this.updateLODs(e,t,g,o)}}updateLODs(e,t,r,i){var a,g;for(const f of this.plugins)(a=f.onBeforeUpdateLOD)==null||a.call(f,this.renderer,e,t,r);let o=r.userData.LOD_state;o||(o=new he,r.userData.LOD_state=o);let s=this.calculateLodLevel(t,r,o,i);s=Math.round(s),s>=0&&this.loadProgressiveMeshes(r,s);let n=0;if(r.material){const f=r["DEBUG:LOD"];if(f!=null&&(n=f),Array.isArray(r.material))for(const D of r.material)this.loadProgressiveTextures(D,n);else this.loadProgressiveTextures(r.material,n)}for(const f of this.plugins)(g=f.onAfterUpdatedLOD)==null||g.call(f,this.renderer,e,t,r,s);o.lastLodLevel=s}loadProgressiveTextures(e,t){return e&&e.userData&&e.userData.LOD!==t?(e.userData.LOD=t,O.assignTextureLOD(e,t)):Promise.resolve(null)}loadProgressiveMeshes(e,t){if(!e)return Promise.resolve(null);if(e.userData||(e.userData={}),e.userData.LOD!==t){e.userData.LOD=t;const r=e.geometry;return O.assignMeshLOD(e,t).then(i=>(i&&e.userData.LOD==t&&r!=e.geometry,i))}return Promise.resolve(null)}calculateLodLevel(e,t,r,i){var n;if(!t)return-1;let s=10+1;if(e){if(J&&t["DEBUG:LOD"]!=null)return t["DEBUG:LOD"];const a=O.getMeshLODInformation(t.geometry),g=a==null?void 0:a.lods;if(!g||g.length<=0||!((n=this.cameraFrustrum)!=null&&n.intersectsObject(t)))return 99;const f=t.geometry.boundingBox;if(f&&e.isPerspectiveCamera){const D=e;if(t.geometry.attributes.color&&t.geometry.attributes.color.count<100&&t.geometry.boundingSphere){this._sphere.copy(t.geometry.boundingSphere),this._sphere.applyMatrix4(t.matrixWorld);const L=e.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(L))return 0}if(this._tempBox.copy(f),this._tempBox.applyMatrix4(t.matrixWorld),this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&D.fov>70){const L=this._tempBox.min,p=this._tempBox.max;let A=L.x,w=L.y,y=p.x,c=p.y;const v=2,B=1.5,C=(L.x+p.x)*.5,E=(L.y+p.y)*.5;A=(A-C)*v+C,w=(w-E)*v+E,y=(y-C)*v+C,c=(c-E)*v+E;const W=A<0&&y>0?0:Math.min(Math.abs(L.x),Math.abs(p.x)),te=w<0&&c>0?0:Math.min(Math.abs(L.y),Math.abs(p.y)),N=Math.max(W,te);r.lastCentrality=(B-N)*(B-N)*(B-N)}else r.lastCentrality=1;const d=this._tempBox.getSize(this._tempBoxSize);d.multiplyScalar(.5),screen.availHeight>0&&d.multiplyScalar(this.renderer.domElement.clientHeight/screen.availHeight),d.x*=D.aspect;const M=e.matrixWorldInverse,x=new h.Box3;x.copy(f),x.applyMatrix4(t.matrixWorld),x.applyMatrix4(M);const P=x.getSize(this._tempBox2Size),G=Math.max(P.x,P.y);if(Math.max(d.x,d.y)!=0&&G!=0&&(d.z=P.z/Math.max(P.x,P.y)*Math.max(d.x,d.y)),r.lastScreenCoverage=Math.max(d.x,d.y,d.z),r.lastScreenspaceVolume.copy(d),r.lastScreenCoverage*=r.lastCentrality,J&&b.debugDrawLine){const L=this.tempMatrix.copy(this.projectionScreenMatrix);L.invert();const p=b.corner0,A=b.corner1,w=b.corner2,y=b.corner3;p.copy(this._tempBox.min),A.copy(this._tempBox.max),A.x=p.x,w.copy(this._tempBox.max),w.y=p.y,y.copy(this._tempBox.max);const c=(p.z+y.z)*.5;p.z=A.z=w.z=y.z=c,p.applyMatrix4(L),A.applyMatrix4(L),w.applyMatrix4(L),y.applyMatrix4(L),b.debugDrawLine(p,A,255),b.debugDrawLine(p,w,255),b.debugDrawLine(A,y,255),b.debugDrawLine(w,y,255)}let R=999;if(g&&r.lastScreenCoverage>0){for(let L=0;L<g.length;L++)if(g[L].density/r.lastScreenCoverage<i){R=L;break}}R<s&&(s=R)}}return s}};let _=b;u(_,"debugDrawLine"),u(_,"corner0",new h.Vector3),u(_,"corner1",new h.Vector3),u(_,"corner2",new h.Vector3),u(_,"corner3",new h.Vector3);class he{constructor(){u(this,"lastLodLevel",0);u(this,"lastScreenCoverage",0);u(this,"lastScreenspaceVolume",new h.Vector3);u(this,"lastCentrality",0)}}const Q=Symbol("NEEDLE_mesh_lod"),q=Symbol("NEEDLE_texture_lod");function ee(l){if(!l)return null;let e=null,t=null;for(let r=l;r!=null;r=Object.getPrototypeOf(r)){const i=Object.getOwnPropertySymbols(r),o=i.find(n=>n.toString()=="Symbol(renderer)"),s=i.find(n=>n.toString()=="Symbol(scene)");!e&&o!=null&&(e=l[o].threeRenderer),!t&&s!=null&&(t=l[s])}if(e){console.log("Adding Needle LODs to modelviewer");const r=new _(e);if(r.plugins.push(new pe(l)),r.enable(),t){const i=t.camera||t.traverse(o=>o.type=="PerspectiveCamera")[0];i&&e.render(t,i)}return()=>{r.disable()}}return null}class pe{constructor(e){u(this,"modelviewer");u(this,"_didWarnAboutMissingUrl",!1);this.modelviewer=e}onBeforeUpdateLOD(e,t,r,i){this.tryParseMeshLOD(t,i),this.tryParseTextureLOD(t,i)}getUrl(){let e=this.modelviewer.getAttribute("src");return e||(e=this.modelviewer.src),e||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",this.modelviewer),this._didWarnAboutMissingUrl=!0),e}tryGetCurrentGLTF(e){return e._currentGLTF}tryParseTextureLOD(e,t){if(t[q]==!0)return;t[q]=!0;const r=this.tryGetCurrentGLTF(e),i=this.getUrl();if(i&&r&&t.material){let o=function(n){var g,f,D;if(n[q]==!0)return;n[q]=!0,n.userData&&(n.userData.LOD=-1);const a=Object.keys(n);for(let d=0;d<a.length;d++){const M=a[d],x=n[M];if((x==null?void 0:x.isTexture)===!0){const P=(f=(g=x.userData)==null?void 0:g.associations)==null?void 0:f.textures,G=r.parser.json.textures[P];if((D=G.extensions)!=null&&D[k]){const m=G.extensions[k];m&&i&&O.registerTexture(i,x,m.lods.length,m)}}}};const s=t.material;if(Array.isArray(s))for(const n of s)o(n);else o(s)}}tryParseMeshLOD(e,t){var o,s;if(t[Q]==!0)return;t[Q]=!0;const r=this.getUrl();if(!r)return;const i=(s=(o=t.userData)==null?void 0:o.gltfExtensions)==null?void 0:s[k];if(i&&r){const n=t.uuid;O.registerMesh(r,n,t,0,i.lods.length,i)}}}function ye(l,e,t,r){Z(e),j(t),t.register(o=>new O(o,l));const i=new _(e);return(r==null?void 0:r.enableLODsManager)!==!1&&i.enable(),i}document.addEventListener("DOMContentLoaded",()=>{ee(document.querySelector("model-viewer"))});exports.EXTENSION_NAME=k;exports.LODsManager=_;exports.NEEDLE_progressive=O;exports.patchModelViewer=ee;exports.registerPlugin=fe;exports.useNeedleProgressive=ye;
package/lib/extension.js CHANGED
@@ -670,4 +670,3 @@ class LODInformation {
670
670
  }
671
671
  }
672
672
  ;
673
- //# sourceMappingURL=extension.js.map
package/lib/index.js CHANGED
@@ -35,4 +35,3 @@ import { patchModelViewer } from "./plugins/modelviewer.js";
35
35
  document.addEventListener("DOMContentLoaded", () => {
36
36
  patchModelViewer(document.querySelector("model-viewer"));
37
37
  });
38
- //# sourceMappingURL=index.js.map
package/lib/loaders.js CHANGED
@@ -33,4 +33,3 @@ export function addDracoAndKTX2Loaders(loader) {
33
33
  if (!loader.meshoptDecoder)
34
34
  loader.setMeshoptDecoder(meshoptDecoder);
35
35
  }
36
- //# sourceMappingURL=loaders.js.map
@@ -352,4 +352,3 @@ class LOD_state {
352
352
  lastScreenspaceVolume = new Vector3();
353
353
  lastCentrality = 0;
354
354
  }
355
- //# sourceMappingURL=lods_manager.js.map
@@ -1,3 +1,2 @@
1
1
  export { patchModelViewer } from "./modelviewer.js";
2
2
  export { registerPlugin } from "./plugin.js";
3
- //# sourceMappingURL=index.js.map
@@ -49,6 +49,7 @@ export function patchModelViewer(modelviewer) {
49
49
  */
50
50
  class RegisterModelviewerDataPlugin {
51
51
  modelviewer;
52
+ _didWarnAboutMissingUrl = false;
52
53
  constructor(modelviewer) {
53
54
  this.modelviewer = modelviewer;
54
55
  }
@@ -57,7 +58,17 @@ class RegisterModelviewerDataPlugin {
57
58
  this.tryParseTextureLOD(scene, object);
58
59
  }
59
60
  getUrl() {
60
- return this.modelviewer.getAttribute("src");
61
+ let url = this.modelviewer.getAttribute("src");
62
+ // fallback in case the attribute is not set but the src property is
63
+ if (!url) {
64
+ url = this.modelviewer["src"];
65
+ }
66
+ if (!url) {
67
+ if (!this._didWarnAboutMissingUrl)
68
+ console.warn("No url found in modelviewer", this.modelviewer);
69
+ this._didWarnAboutMissingUrl = true;
70
+ }
71
+ return url;
61
72
  }
62
73
  tryGetCurrentGLTF(scene) {
63
74
  return scene._currentGLTF;
@@ -69,7 +80,6 @@ class RegisterModelviewerDataPlugin {
69
80
  const currentGLTF = this.tryGetCurrentGLTF(scene);
70
81
  const url = this.getUrl();
71
82
  if (!url) {
72
- console.error("No url found in modelviewer");
73
83
  return;
74
84
  }
75
85
  if (currentGLTF) {
@@ -112,7 +122,6 @@ class RegisterModelviewerDataPlugin {
112
122
  object[$meshLODSymbol] = true;
113
123
  const url = this.getUrl();
114
124
  if (!url) {
115
- console.error("No url found in modelviewer");
116
125
  return;
117
126
  }
118
127
  // modelviewer has all the information we need in the userData (associations + gltfExtensions)
@@ -123,4 +132,3 @@ class RegisterModelviewerDataPlugin {
123
132
  }
124
133
  }
125
134
  }
126
- //# sourceMappingURL=modelviewer.js.map
@@ -9,4 +9,3 @@ export const plugins = new Array();
9
9
  export function registerPlugin(plugin) {
10
10
  plugins.push(plugin);
11
11
  }
12
- //# sourceMappingURL=plugin.js.map
package/lib/utils.js CHANGED
@@ -34,4 +34,3 @@ export function resolveUrl(source, uri) {
34
34
  }
35
35
  return uri;
36
36
  }
37
- //# sourceMappingURL=utils.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/gltf-progressive",
3
- "version": "1.0.0-alpha.6",
3
+ "version": "1.0.0-alpha.7",
4
4
  "description": "three.js support for loading glTF or GLB files that contain progressive loading data",
5
5
  "homepage": "https://needle.tools",
6
6
  "author": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"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"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAM/C,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,QAAuB,EAAE,MAAkB,EAAE,IAA+B;IAC1H,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,IAAI,EAAE,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACpC,GAAG,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAID,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,0GAA0G;AAC1G,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC/C,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAgB,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loaders.js","sourceRoot":"","sources":["../../src/loaders.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,MAAM,8BAA8B,GAAG,yDAAyD,CAAC;AACjG,MAAM,gCAAgC,GAAG,uEAAuE,CAAC;AAGjH,IAAI,WAAwB,CAAC;AAC7B,IAAI,cAAqC,CAAC;AAC1C,IAAI,UAAsB,CAAC;AAG3B,MAAM,UAAU,aAAa,CAAC,QAAuB;IACjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,WAAW,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC;QAC3D,WAAW,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,UAAU,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,cAAc,GAAG,cAAc,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACX,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;;QAEG,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;AAE/G,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAkB;IACrD,IAAI,CAAC,MAAM,CAAC,WAAW;QACnB,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAE,MAAc,CAAC,UAAU;QAC3B,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAE,MAAc,CAAC,cAAc;QAC/B,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACjD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lods_manager.js","sourceRoot":"","sources":["../../src/lods_manager.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAkC,MAAM,aAAa,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"modelviewer.js","sourceRoot":"","sources":["../../../src/plugins/modelviewer.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/plugins/plugin.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,KAAK,EAA6B,CAAC;AAE9D;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiC;IAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC"}
package/lib/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,IAAY;IACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA0B,EAAE,GAAW;IAC9D,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACjB,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACpD,yCAAyC;QACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7E,0BAA0B;QAC1B,MAAM,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC;QAC9B,2DAA2D;QAC3D,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}