@drawcall/lod 0.1.2 → 0.2.0
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/README.md +10 -69
- package/dist/at.d.ts +2 -0
- package/dist/at.js +8 -0
- package/dist/at.js.map +1 -0
- package/dist/baked/codec.d.ts +6 -3
- package/dist/baked/codec.js +22 -16
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/index.d.ts +4 -0
- package/dist/baked/index.js +2 -2
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/low.d.ts +2 -2
- package/dist/baked/low.js +4 -4
- package/dist/baked/low.js.map +1 -1
- package/dist/bounds.d.ts +12 -2
- package/dist/bounds.js +72 -10
- package/dist/bounds.js.map +1 -1
- package/dist/compile.d.ts +4 -0
- package/dist/compile.js +100 -0
- package/dist/compile.js.map +1 -0
- package/dist/deferred.d.ts +12 -0
- package/dist/deferred.js +27 -0
- package/dist/deferred.js.map +1 -0
- package/dist/dispose.d.ts +7 -3
- package/dist/dispose.js +33 -4
- package/dist/dispose.js.map +1 -1
- package/dist/fade.d.ts +5 -13
- package/dist/fade.js +62 -28
- package/dist/fade.js.map +1 -1
- package/dist/impostor/bake/index.d.ts +1 -0
- package/dist/impostor/bake/index.js +1 -0
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.js +11 -1
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/codec.d.ts +2 -7
- package/dist/impostor/codec.js +16 -27
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/mesh/card.js +4 -1
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +6 -4
- package/dist/impostor/mesh/index.js +8 -10
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +7 -5
- package/dist/impostor/mesh/material.js +29 -26
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +20 -16
- package/dist/impostor/mesh/surface.js +74 -55
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/octahedral.d.ts +1 -8
- package/dist/impostor/octahedral.js +3 -18
- package/dist/impostor/octahedral.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/instanced/args.js +2 -2
- package/dist/instanced/args.js.map +1 -1
- package/dist/instanced/{bounds.d.ts → blocks.d.ts} +25 -9
- package/dist/instanced/{bounds.js → blocks.js} +76 -53
- package/dist/instanced/blocks.js.map +1 -0
- package/dist/instanced/dirty.d.ts +3 -0
- package/dist/instanced/dirty.js +40 -5
- package/dist/instanced/dirty.js.map +1 -1
- package/dist/instanced/index.d.ts +25 -51
- package/dist/instanced/index.js +189 -413
- package/dist/instanced/index.js.map +1 -1
- package/dist/instanced/meshes.d.ts +54 -13
- package/dist/instanced/meshes.js +178 -41
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/parts.d.ts +14 -0
- package/dist/instanced/parts.js +79 -0
- package/dist/instanced/parts.js.map +1 -0
- package/dist/instanced/raycast.d.ts +13 -0
- package/dist/instanced/raycast.js +53 -0
- package/dist/instanced/raycast.js.map +1 -0
- package/dist/instanced/select.d.ts +17 -9
- package/dist/instanced/select.js +114 -63
- package/dist/instanced/select.js.map +1 -1
- package/dist/instanced/store.d.ts +31 -0
- package/dist/instanced/store.js +96 -0
- package/dist/instanced/store.js.map +1 -0
- package/dist/levels.d.ts +71 -48
- package/dist/levels.js +99 -74
- package/dist/levels.js.map +1 -1
- package/dist/loader/bundle.d.ts +25 -0
- package/dist/loader/bundle.js +241 -0
- package/dist/loader/bundle.js.map +1 -0
- package/dist/loader/cache.d.ts +15 -15
- package/dist/loader/cache.js +71 -33
- package/dist/loader/cache.js.map +1 -1
- package/dist/loader/provenance.d.ts +30 -0
- package/dist/loader/provenance.js +105 -0
- package/dist/loader/provenance.js.map +1 -0
- package/dist/loader/url.d.ts +13 -0
- package/dist/loader/url.js +31 -0
- package/dist/loader/url.js.map +1 -0
- package/dist/loader.d.ts +30 -74
- package/dist/loader.js +191 -186
- package/dist/loader.js.map +1 -1
- package/dist/lod.d.ts +20 -31
- package/dist/lod.js +105 -96
- package/dist/lod.js.map +1 -1
- package/dist/material.js +9 -4
- package/dist/material.js.map +1 -1
- package/dist/mesh/codec.d.ts +4 -0
- package/dist/mesh/codec.js +192 -0
- package/dist/mesh/codec.js.map +1 -0
- package/dist/queue.d.ts +2 -0
- package/dist/queue.js +33 -0
- package/dist/queue.js.map +1 -0
- package/dist/residency.d.ts +44 -0
- package/dist/residency.js +205 -0
- package/dist/residency.js.map +1 -0
- package/dist/simplify.js +5 -3
- package/dist/simplify.js.map +1 -1
- package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
- package/dist/source/{error.js → deviation.js} +6 -6
- package/dist/source/deviation.js.map +1 -0
- package/dist/source/source.d.ts +1 -1
- package/dist/source/source.js +1 -1
- package/dist/three.d.ts +17 -5
- package/dist/three.js +24 -3
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +5 -5
- package/dist/tsl.js +12 -19
- package/dist/tsl.js.map +1 -1
- package/dist/view.d.ts +16 -1
- package/dist/view.js +57 -1
- package/dist/view.js.map +1 -1
- package/dist/wind/index.d.ts +2 -2
- package/dist/wind/index.js +31 -28
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +2 -1
- package/package.json +9 -3
- package/skills/lod/SKILL.md +71 -109
- package/dist/impostor/cache.d.ts +0 -15
- package/dist/impostor/cache.js +0 -44
- package/dist/impostor/cache.js.map +0 -1
- package/dist/instanced/bounds.js.map +0 -1
- package/dist/lazy.d.ts +0 -64
- package/dist/lazy.js +0 -187
- package/dist/lazy.js.map +0 -1
- package/dist/loader/dispose.d.ts +0 -3
- package/dist/loader/dispose.js +0 -25
- package/dist/loader/dispose.js.map +0 -1
- package/dist/source/error.js.map +0 -1
package/dist/loader.d.ts
CHANGED
|
@@ -1,30 +1,24 @@
|
|
|
1
|
-
import { Loader,
|
|
2
|
-
import type
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { Loader, LoadingManager, type Object3D } from "three/webgpu";
|
|
2
|
+
import { type BakeImpostorOptions } from "./impostor/bake/index.js";
|
|
3
|
+
import { type ImpostorMeshOptions } from "./impostor/mesh/index.js";
|
|
4
|
+
import type { LodLevel } from "./levels.js";
|
|
5
5
|
import { type LodCacheOptions } from "./loader/cache.js";
|
|
6
|
-
export type { LodCacheOptions } from "./loader/cache.js";
|
|
7
6
|
import { type SimplifyOptions } from "./simplify.js";
|
|
8
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Levels derived from the source, finest first. Computed geometry and baked results are persisted.
|
|
9
|
+
* Changing `maxPixels` or an impostor's `draw` reuses them, except an impostor's `maxPixels`, which also sizes its bake.
|
|
10
|
+
*/
|
|
9
11
|
export type LevelRequest = ({
|
|
10
|
-
type: "
|
|
12
|
+
type: "simplify";
|
|
11
13
|
maxPixels?: number;
|
|
12
14
|
} & SimplifyOptions) | ({
|
|
13
15
|
type: "baked";
|
|
14
16
|
maxPixels?: number;
|
|
15
17
|
textureSize?: number;
|
|
16
|
-
/**
|
|
17
|
-
* URL of the rooms to show through the model's glass (see `BakeMeshOptions.interior`),
|
|
18
|
-
* loaded like the model and relative to it. It is added to the model after every
|
|
19
|
-
* level is built, so up close the real rooms show through the real glass. Only one
|
|
20
|
-
* baked level of a model may have one.
|
|
21
|
-
*/
|
|
18
|
+
/** Room geometry for window baking, as an asset URL relative to the source. */
|
|
22
19
|
interior?: string;
|
|
23
20
|
} & ({
|
|
24
|
-
/**
|
|
25
|
-
* URL of the mesh to bake onto (.glts, .glb or .gltf), loaded like the model. A
|
|
26
|
-
* relative URL is relative to the model's: a model and its low mesh live together.
|
|
27
|
-
*/
|
|
21
|
+
/** Authored low shell to bake onto, as an asset URL relative to the source. */
|
|
28
22
|
low: string;
|
|
29
23
|
ratio?: never;
|
|
30
24
|
} | {
|
|
@@ -32,68 +26,30 @@ export type LevelRequest = ({
|
|
|
32
26
|
ratio?: number;
|
|
33
27
|
})) | ({
|
|
34
28
|
type: "impostor";
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
* dependency files. Pass an object only after its dependency loads have finished;
|
|
43
|
-
* deferred impostors read retained dependencies when loading begins.
|
|
44
|
-
*/
|
|
45
|
-
export type LodRequest = string | Object3D | {
|
|
29
|
+
draw?: ImpostorMeshOptions;
|
|
30
|
+
} & BakeImpostorOptions) | {
|
|
31
|
+
type: "empty";
|
|
32
|
+
maxPixels: number;
|
|
33
|
+
};
|
|
34
|
+
/** A .glb, .gltf or .glts asset URL. Source and simplified levels load the original asset on demand. */
|
|
35
|
+
export type LodRequest = string | {
|
|
46
36
|
url: string;
|
|
47
37
|
levels?: readonly LevelRequest[];
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Apply runtime effects when a level arrives, before draws compile. Does not change baked content or bounds.
|
|
40
|
+
* `index` is the returned ladder's: 0 is the source, and `levels[i]` arrives as `i + 1`.
|
|
41
|
+
*/
|
|
42
|
+
onLevel?: (object: Object3D, index: number) => void | Promise<void>;
|
|
51
43
|
};
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
* levels (default: an impostor). Unless explicitly lazy, building runs at load time; impostors bake on a
|
|
55
|
-
* renderer this package keeps for that. Each level's maxPixels is its default (see
|
|
56
|
-
* `LodLevel.maxPixels`) unless the request sets it; a failed load frees what it built.
|
|
57
|
-
*
|
|
58
|
-
* Models load through the manager's handler for the URL if one is registered: a
|
|
59
|
-
* GLTFLoader with Draco or meshopt decoders, or for .glts a GLTSLoader from
|
|
60
|
-
* @drawcall/glts (inside a .glts script, the contextual `gltsLoader`, registered on the
|
|
61
|
-
* contextual `loadingManager`). Without one, .glb/.gltf load with a plain GLTFLoader and
|
|
62
|
-
* .glts fails. URLs resolve against `path` as GLTFLoader's do; a baked level's `low` and
|
|
63
|
-
* `interior` URLs load the same way, relative to the model's URL.
|
|
64
|
-
*/
|
|
65
|
-
export declare class LodLoader extends Loader<Lod, LodRequest> {
|
|
44
|
+
/** Loads asset URLs through manager handlers, falling back to GLTFLoader. Register a GLTSLoader for .glts sources. */
|
|
45
|
+
export declare class LodLoader extends Loader<LodLevel[], LodRequest> {
|
|
66
46
|
private readonly cacheOptions?;
|
|
67
47
|
private gltf;
|
|
68
48
|
constructor(manager?: LoadingManager, cacheOptions?: LodCacheOptions | undefined);
|
|
69
|
-
load(request: LodRequest, onLoad: (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
/** Build a `Lod` of the complete `object` inside GLTS. Relative low/interior URLs use the script's directory. */
|
|
74
|
-
parseAsync(object: Object3D, levels?: readonly LevelRequest[]): Promise<Lod>;
|
|
75
|
-
/** Build an `InstancedLod` of the complete `object` inside GLTS. */
|
|
76
|
-
parseInstancesAsync(object: Object3D, count: number, levels?: readonly LevelRequest[]): Promise<InstancedLod>;
|
|
77
|
-
/**
|
|
78
|
-
* `make` of `object` and its requested levels, with the maxPixels requested; `low` and
|
|
79
|
-
* `interior` URLs resolve against `base`. On failure, the levels built and interiors
|
|
80
|
-
* loaded are freed and `object` is left out of any Lod.
|
|
81
|
-
*/
|
|
49
|
+
load(request: LodRequest, onLoad: (levels: LodLevel[]) => void, _onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
|
|
50
|
+
/** Load empty levels and the coarsest drawable eagerly; finer drawables load on demand. */
|
|
51
|
+
loadAsync(request: LodRequest): Promise<LodLevel[]>;
|
|
52
|
+
private persist;
|
|
82
53
|
private build;
|
|
83
|
-
|
|
84
|
-
private buildLevel;
|
|
85
|
-
/**
|
|
86
|
-
* Bake `source` as `request` asks, loading its low mesh and interior relative to `base`.
|
|
87
|
-
* The low mesh is freed after: only the bake keeps it. The interior is returned for the
|
|
88
|
-
* source, or freed if the bake fails.
|
|
89
|
-
*/
|
|
90
|
-
private bake;
|
|
91
|
-
/**
|
|
92
|
-
* Load `request`'s model and `build` it, reporting to the manager as one item; `build`
|
|
93
|
-
* gets the model's directory. On failure, the model is freed.
|
|
94
|
-
*/
|
|
95
|
-
private loading;
|
|
96
|
-
private loadSource;
|
|
97
|
-
/** `loader` with this loader's request settings. */
|
|
98
|
-
private configure;
|
|
54
|
+
private loadAsset;
|
|
99
55
|
}
|
package/dist/loader.js
CHANGED
|
@@ -1,32 +1,21 @@
|
|
|
1
|
-
import { Loader,
|
|
1
|
+
import { Group, Loader, LoadingManager } from "three/webgpu";
|
|
2
2
|
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
|
|
3
|
-
import {
|
|
3
|
+
import { MeshoptDecoder } from "three/addons/libs/meshopt_decoder.module.js";
|
|
4
|
+
import { MissingDependencyError } from "vitecache";
|
|
4
5
|
import { bakeMesh } from "./baked/index.js";
|
|
5
|
-
import {
|
|
6
|
-
import { disposeTree } from "./dispose.js";
|
|
6
|
+
import { loadOnce } from "./deferred.js";
|
|
7
|
+
import { disposeRejected, disposeTree } from "./dispose.js";
|
|
8
|
+
import { bakeImpostor } from "./impostor/bake/index.js";
|
|
7
9
|
import { ImpostorMesh } from "./impostor/mesh/index.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { impostor, originOf } from "./loader/cache.js";
|
|
13
|
-
import { disposeSimplified } from "./loader/dispose.js";
|
|
10
|
+
import { decode, encode, separateLevels } from "./loader/bundle.js";
|
|
11
|
+
import { indexEntry, payloadEntry, sha256 } from "./loader/cache.js";
|
|
12
|
+
import { bundledModules, Provenance } from "./loader/provenance.js";
|
|
13
|
+
import { assetPath, isLocal, loaderPathURL, sourceRelativeURL } from "./loader/url.js";
|
|
14
14
|
import { simplify } from "./simplify.js";
|
|
15
|
-
import {
|
|
15
|
+
import { isObject3D, placeLike, rejectSkinned } from "./three.js";
|
|
16
16
|
const DEFAULT_LEVELS = [{ type: "impostor" }];
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* levels (default: an impostor). Unless explicitly lazy, building runs at load time; impostors bake on a
|
|
20
|
-
* renderer this package keeps for that. Each level's maxPixels is its default (see
|
|
21
|
-
* `LodLevel.maxPixels`) unless the request sets it; a failed load frees what it built.
|
|
22
|
-
*
|
|
23
|
-
* Models load through the manager's handler for the URL if one is registered: a
|
|
24
|
-
* GLTFLoader with Draco or meshopt decoders, or for .glts a GLTSLoader from
|
|
25
|
-
* @drawcall/glts (inside a .glts script, the contextual `gltsLoader`, registered on the
|
|
26
|
-
* contextual `loadingManager`). Without one, .glb/.gltf load with a plain GLTFLoader and
|
|
27
|
-
* .glts fails. URLs resolve against `path` as GLTFLoader's do; a baked level's `low` and
|
|
28
|
-
* `interior` URLs load the same way, relative to the model's URL.
|
|
29
|
-
*/
|
|
17
|
+
let meshoptWorkers = false;
|
|
18
|
+
/** Loads asset URLs through manager handlers, falling back to GLTFLoader. Register a GLTSLoader for .glts sources. */
|
|
30
19
|
export class LodLoader extends Loader {
|
|
31
20
|
cacheOptions;
|
|
32
21
|
gltf;
|
|
@@ -35,194 +24,210 @@ export class LodLoader extends Loader {
|
|
|
35
24
|
this.cacheOptions = cacheOptions;
|
|
36
25
|
}
|
|
37
26
|
load(request, onLoad, _onProgress, onError) {
|
|
38
|
-
// As three's loaders: without onError, the failure goes to the console.
|
|
39
27
|
this.loadAsync(request).then(onLoad, onError ?? ((error) => console.error(error)));
|
|
40
28
|
}
|
|
29
|
+
/** Load empty levels and the coarsest drawable eagerly; finer drawables load on demand. */
|
|
41
30
|
async loadAsync(request) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* loaded are freed and `object` is left out of any Lod.
|
|
60
|
-
*/
|
|
61
|
-
async build(object, requests, base, make, origin) {
|
|
62
|
-
rejectSkinned(object, "LodLoader");
|
|
63
|
-
if (requests.filter((request) => request.type === "baked" && request.interior !== undefined).length > 1)
|
|
64
|
-
throw new Error("LodLoader: give an interior to one baked level only: the source shows one");
|
|
65
|
-
const built = [];
|
|
66
|
-
const interiors = [];
|
|
31
|
+
const input = normalize(request, this.path);
|
|
32
|
+
const { url, levels } = input;
|
|
33
|
+
const provenance = new Provenance(input.urls, this.manager);
|
|
34
|
+
let source;
|
|
35
|
+
let preloading = true;
|
|
36
|
+
const owned = new Set();
|
|
37
|
+
const release = (object) => {
|
|
38
|
+
owned.delete(object);
|
|
39
|
+
disposeRejected(object);
|
|
40
|
+
};
|
|
41
|
+
const loadSource = async () => {
|
|
42
|
+
source ??= await this.loadAsset(url, provenance);
|
|
43
|
+
if (preloading)
|
|
44
|
+
owned.add(source);
|
|
45
|
+
return source;
|
|
46
|
+
};
|
|
47
|
+
this.manager.itemStart(url);
|
|
67
48
|
try {
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// Reject bad overrides before a constructor hooks the caller's source or
|
|
80
|
-
// allocates a crowd's pooled indirect arguments and selection buffers.
|
|
81
|
-
const preview = [];
|
|
82
|
-
objects.forEach((object, i) => preview.push(new Level(object, i, isLOD(object), preview)));
|
|
83
|
-
estimate(preview, 2 * measureLevels(objects, "LodLoader").own.radius);
|
|
84
|
-
requests.forEach(({ maxPixels }, i) => {
|
|
85
|
-
const level = preview[i + 1];
|
|
86
|
-
if (level && maxPixels !== undefined)
|
|
87
|
-
level.maxPixels = maxPixels;
|
|
88
|
-
});
|
|
89
|
-
validate(preview);
|
|
90
|
-
const lod = make(objects);
|
|
91
|
-
for (const [i, { maxPixels }] of requests.entries()) {
|
|
92
|
-
const level = lod.levels[i + 1];
|
|
93
|
-
if (!level)
|
|
94
|
-
throw new Error("LodLoader: a built level is missing");
|
|
95
|
-
if (maxPixels !== undefined)
|
|
96
|
-
level.maxPixels = maxPixels;
|
|
49
|
+
// vitecache resolves only same-origin paths to project files, so other sources build uncached.
|
|
50
|
+
const entry = provenance.requested.every(isLocal)
|
|
51
|
+
? indexEntry(provenance.inputs, levels, await bundledModules(input.urls, this.manager), this.cacheOptions)
|
|
52
|
+
: undefined;
|
|
53
|
+
const cached = await entry?.load();
|
|
54
|
+
// A cold build hands over the payloads it encoded instead of reading back saves that may have been skipped.
|
|
55
|
+
// Each is handed over once, since loadOnce decodes each level once per ladder; a later call reads the cache.
|
|
56
|
+
let payloads;
|
|
57
|
+
let index;
|
|
58
|
+
if (cached === undefined) {
|
|
59
|
+
({ index, levels: payloads } = await this.persist(await loadSource(), input, provenance, entry));
|
|
97
60
|
}
|
|
98
|
-
|
|
61
|
+
else
|
|
62
|
+
index = cached;
|
|
63
|
+
let hash;
|
|
64
|
+
const result = decode(index, [{}, ...levels], loadSource, async (level) => {
|
|
65
|
+
const handed = payloads?.get(level);
|
|
66
|
+
payloads?.delete(level);
|
|
67
|
+
if (handed)
|
|
68
|
+
return handed;
|
|
69
|
+
const payload = await payloadEntry(await (hash ??= sha256(index)), level, this.cacheOptions).load();
|
|
70
|
+
if (payload === undefined)
|
|
71
|
+
throw new Error(`LodLoader: cached level ${level} is missing`);
|
|
72
|
+
return payload;
|
|
73
|
+
}, async (object, level) => {
|
|
74
|
+
if (preloading)
|
|
75
|
+
owned.add(object);
|
|
76
|
+
await input.onLevel?.(object, level);
|
|
77
|
+
}, release);
|
|
78
|
+
await preload(result, source !== undefined);
|
|
79
|
+
preloading = false;
|
|
80
|
+
owned.clear();
|
|
81
|
+
return result;
|
|
99
82
|
}
|
|
100
83
|
catch (error) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
else
|
|
105
|
-
disposeTree(level);
|
|
106
|
-
});
|
|
107
|
-
for (const interior of interiors) {
|
|
108
|
-
object.remove(interior);
|
|
109
|
-
disposeTree(interior);
|
|
110
|
-
}
|
|
84
|
+
for (const object of owned)
|
|
85
|
+
release(object);
|
|
86
|
+
this.manager.itemError(url);
|
|
111
87
|
throw error;
|
|
112
88
|
}
|
|
89
|
+
finally {
|
|
90
|
+
this.manager.itemEnd(url);
|
|
91
|
+
}
|
|
113
92
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
93
|
+
async persist(source, { url, levels: requests, urls }, provenance, entry) {
|
|
94
|
+
const built = [source];
|
|
95
|
+
const jobs = requests.map((request) => ({ request }));
|
|
96
|
+
try {
|
|
97
|
+
rejectSkinned(source, "LodLoader");
|
|
98
|
+
const load = (key) => {
|
|
99
|
+
const asset = urls[key];
|
|
100
|
+
return asset === undefined ? undefined : this.loadAsset(asset, provenance);
|
|
101
|
+
};
|
|
102
|
+
for (const [position, job] of jobs.entries()) {
|
|
103
|
+
job.low = await load(auxiliary(position, "low"));
|
|
104
|
+
job.interior = await load(auxiliary(position, "interior"));
|
|
120
105
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
throw new Error("LodLoader: a lazy impostor needs an explicit positive maxPixels");
|
|
129
|
-
const level = new LazyImpostor(() => impostor(source, options, origin, interiors, this.cacheOptions), { maxPixels });
|
|
130
|
-
level.name = `${source.name || "object"} impostor`;
|
|
131
|
-
placeLike(level, source);
|
|
132
|
-
return { level };
|
|
133
|
-
}
|
|
134
|
-
return { level: impostorOf(source, await impostor(source, options, origin, [], this.cacheOptions)) };
|
|
106
|
+
const kinds = ["source", ...requests.map((request) => request.type)];
|
|
107
|
+
for (const job of jobs)
|
|
108
|
+
built.push(await this.build(source, job));
|
|
109
|
+
const encoded = await encode(built, kinds);
|
|
110
|
+
if (!entry) {
|
|
111
|
+
warnUncached(url, "it is not a same-origin path");
|
|
112
|
+
return encoded;
|
|
135
113
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
114
|
+
// Read now: GLTS sources keep reporting what they observe while levels are built.
|
|
115
|
+
const saved = provenance.dependencies();
|
|
116
|
+
if ("reason" in saved) {
|
|
117
|
+
warnUncached(url, saved.reason);
|
|
118
|
+
return encoded;
|
|
139
119
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
120
|
+
if (uncached.has(url))
|
|
121
|
+
return encoded;
|
|
122
|
+
const { dependencies } = saved;
|
|
123
|
+
// A warm load reads the index, then payloads on demand, so publish in reverse.
|
|
124
|
+
const hash = await sha256(encoded.index);
|
|
125
|
+
for (const level of separateLevels(kinds)) {
|
|
126
|
+
const bytes = encoded.levels.get(level);
|
|
127
|
+
if (!bytes)
|
|
128
|
+
throw new Error(`LodLoader: level ${level} was not encoded`);
|
|
129
|
+
await payloadEntry(hash, level, this.cacheOptions).save(bytes);
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
await entry.save(encoded.index, { dependencies });
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
// A dependency without a backing file, such as a middleware URL or a package the app does not install, cannot be validated.
|
|
136
|
+
if (!(error instanceof MissingDependencyError))
|
|
137
|
+
throw error;
|
|
138
|
+
warnUncached(url, error.message);
|
|
139
|
+
}
|
|
140
|
+
return encoded;
|
|
161
141
|
}
|
|
162
142
|
finally {
|
|
163
|
-
|
|
164
|
-
|
|
143
|
+
for (const object of [...jobs.map((job) => job.interior), ...built.slice(1), ...jobs.map((job) => job.low)])
|
|
144
|
+
if (object)
|
|
145
|
+
disposeTree(object);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async build(source, { request, low, interior }) {
|
|
149
|
+
switch (request.type) {
|
|
150
|
+
case "empty":
|
|
151
|
+
return new Group();
|
|
152
|
+
case "simplify":
|
|
153
|
+
return simplify(source, { ratio: request.ratio });
|
|
154
|
+
case "impostor": {
|
|
155
|
+
const { type: _, draw: __, ...options } = request;
|
|
156
|
+
const object = new ImpostorMesh(await bakeImpostor(source, options));
|
|
157
|
+
object.name = `${source.name || "object"} impostor`;
|
|
158
|
+
placeLike(object, source);
|
|
159
|
+
return object;
|
|
160
|
+
}
|
|
161
|
+
case "baked":
|
|
162
|
+
return bakeMesh(source, low ? { low, interior, textureSize: request.textureSize } : { ratio: request.ratio, interior, textureSize: request.textureSize });
|
|
165
163
|
}
|
|
166
164
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
165
|
+
async loadAsset(url, provenance) {
|
|
166
|
+
const { path, extension } = assetPath(url);
|
|
167
|
+
const handler = this.manager.getHandler(path);
|
|
168
|
+
if (!handler && extension === "glts")
|
|
169
|
+
throw new Error(`LodLoader: cannot load "${url}": register a GLTSLoader for .glts on the loading manager`);
|
|
170
|
+
let result;
|
|
171
|
+
if (handler)
|
|
172
|
+
result = await handler.loadAsync(url);
|
|
173
|
+
else {
|
|
174
|
+
if (!meshoptWorkers && MeshoptDecoder.supported) {
|
|
175
|
+
MeshoptDecoder.useWorkers(2);
|
|
176
|
+
meshoptWorkers = true;
|
|
177
|
+
}
|
|
178
|
+
this.gltf ??= new GLTFLoader(this.manager).setMeshoptDecoder(MeshoptDecoder);
|
|
179
|
+
const decoder = this.gltf.setCrossOrigin(this.crossOrigin).setWithCredentials(this.withCredentials).setRequestHeader(this.requestHeader);
|
|
180
|
+
result = await decoder.loadAsync(url);
|
|
178
181
|
}
|
|
179
|
-
const
|
|
180
|
-
const full = LoaderUtils.resolveURL(url, this.path);
|
|
181
|
-
this.manager.itemStart(full);
|
|
182
|
-
let object;
|
|
182
|
+
const object = sceneOf(result, url);
|
|
183
183
|
try {
|
|
184
|
-
object
|
|
185
|
-
|
|
186
|
-
return await build(object, levels, LoaderUtils.extractUrlBase(origin?.url ?? full), origin);
|
|
184
|
+
provenance.capture(url, object, result);
|
|
185
|
+
return object;
|
|
187
186
|
}
|
|
188
187
|
catch (error) {
|
|
189
|
-
|
|
190
|
-
disposeTree(object);
|
|
191
|
-
this.manager.itemError(full);
|
|
188
|
+
disposeRejected(object);
|
|
192
189
|
throw error;
|
|
193
190
|
}
|
|
194
|
-
finally {
|
|
195
|
-
this.manager.itemEnd(full);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
async loadSource(url) {
|
|
199
|
-
const extension = /\.(glb|gltf|glts)$/i.exec(url.split(/[?#]/)[0] ?? "")?.[1]?.toLowerCase();
|
|
200
|
-
if (!extension)
|
|
201
|
-
throw new Error(`LodLoader: cannot load "${url}": expected a .glb, .gltf or .glts file`);
|
|
202
|
-
const handler = this.manager.getHandler(url);
|
|
203
|
-
if (handler)
|
|
204
|
-
return sceneOf(await handler.loadAsync(url), url);
|
|
205
|
-
// No GLTSLoader of our own: inside a .glts script only the contextual one may load,
|
|
206
|
-
// so the app registers the one to use.
|
|
207
|
-
if (extension === "glts")
|
|
208
|
-
throw new Error(`LodLoader: cannot load "${url}": register a GLTSLoader for .glts on the loading manager`);
|
|
209
|
-
this.gltf ??= new GLTFLoader(this.manager);
|
|
210
|
-
return (await this.configure(this.gltf).loadAsync(url)).scene;
|
|
211
|
-
}
|
|
212
|
-
/** `loader` with this loader's request settings. */
|
|
213
|
-
configure(loader) {
|
|
214
|
-
loader.setCrossOrigin(this.crossOrigin).setWithCredentials(this.withCredentials).setRequestHeader(this.requestHeader);
|
|
215
|
-
return loader;
|
|
216
191
|
}
|
|
217
192
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
193
|
+
function normalize(request, path) {
|
|
194
|
+
const input = typeof request === "string" ? { url: request } : request;
|
|
195
|
+
const url = loaderPathURL(input.url, path);
|
|
196
|
+
const levels = structuredClone(input.levels ?? DEFAULT_LEVELS);
|
|
197
|
+
const urls = { source: url };
|
|
198
|
+
levels.forEach((level, index) => {
|
|
199
|
+
if (level.type !== "baked")
|
|
200
|
+
return;
|
|
201
|
+
for (const name of ["low", "interior"]) {
|
|
202
|
+
const value = level[name];
|
|
203
|
+
if (value !== undefined)
|
|
204
|
+
urls[auxiliary(index, name)] = sourceRelativeURL(value, url);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return { ...input, url, levels, urls };
|
|
208
|
+
}
|
|
209
|
+
const uncached = new Set();
|
|
210
|
+
/** Builds of `url` are served without saving from now on, after one warning naming why. */
|
|
211
|
+
function warnUncached(url, reason) {
|
|
212
|
+
if (uncached.has(url))
|
|
213
|
+
return;
|
|
214
|
+
uncached.add(url);
|
|
215
|
+
console.warn(`LodLoader: "${url}" is not cached until the page reloads: ${reason}`);
|
|
216
|
+
}
|
|
217
|
+
/** Provenance name of a baked level's low or interior asset. */
|
|
218
|
+
const auxiliary = (level, name) => `auxiliary:${level}:${name}`;
|
|
219
|
+
async function preload(levels, hasSource) {
|
|
220
|
+
// A cold build hands its source to the same shared lifetime as a deferred source arrival.
|
|
221
|
+
if (hasSource && levels[0]?.load)
|
|
222
|
+
await loadOnce(levels[0].load).promise;
|
|
223
|
+
const coarse = [...levels].reverse().find((level) => level.box && !level.box.isEmpty());
|
|
224
|
+
if (!coarse?.load)
|
|
225
|
+
throw new Error("LodLoader: ladder has no drawable level");
|
|
226
|
+
for (const [index, level] of levels.entries()) {
|
|
227
|
+
if (level.load && (level === coarse || level.box.isEmpty()))
|
|
228
|
+
levels[index] = { object: await loadOnce(level.load).promise, maxPixels: level.maxPixels };
|
|
229
|
+
}
|
|
224
230
|
}
|
|
225
|
-
/** The object a handler loaded: an Object3D, or a glTF result's scene. */
|
|
226
231
|
function sceneOf(result, url) {
|
|
227
232
|
if (isObject3D(result))
|
|
228
233
|
return result;
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|