@drawcall/lod 0.3.0 → 0.5.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 +5 -8
- package/dist/bake.d.ts +16 -2
- package/dist/bake.js +92 -4
- package/dist/bake.js.map +1 -1
- package/dist/baked/index.d.ts +2 -2
- package/dist/baked/index.js +2 -2
- package/dist/baked/interior/faces.js +4 -2
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.js +1 -1
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.d.ts +1 -1
- package/dist/baked/interior/rooms.js +1 -1
- package/dist/dispose.d.ts +3 -3
- package/dist/dispose.js +6 -6
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.d.ts +32 -0
- package/dist/foliage.js +137 -0
- package/dist/foliage.js.map +1 -0
- package/dist/impostor/bake/index.d.ts +3 -3
- package/dist/impostor/bake/index.js +12 -3
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/source.d.ts +2 -1
- package/dist/impostor/bake/source.js +2 -2
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/impostor.d.ts +1 -1
- package/dist/impostor/impostor.js +1 -1
- package/dist/impostor/ktx2/encode.js +5 -2
- package/dist/impostor/ktx2/encode.js.map +1 -1
- package/dist/impostor/ktx2/uastc.js +3 -2
- package/dist/impostor/ktx2/uastc.js.map +1 -1
- package/dist/impostor/ktx2/worker.js +0 -2
- package/dist/impostor/ktx2/worker.js.map +1 -1
- package/dist/impostor/mesh/card.d.ts +1 -1
- package/dist/impostor/mesh/index.d.ts +2 -2
- package/dist/impostor/mesh/index.js +3 -3
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +3 -6
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +13 -25
- package/dist/instanced/camera.js +17 -42
- package/dist/instanced/camera.js.map +1 -1
- package/dist/instanced/clusters.d.ts +68 -0
- package/dist/instanced/clusters.js +172 -0
- package/dist/instanced/clusters.js.map +1 -0
- package/dist/instanced/cull.d.ts +3 -3
- package/dist/instanced/cull.js +2 -2
- package/dist/instanced/cull.js.map +1 -1
- package/dist/instanced/instances.d.ts +39 -0
- package/dist/instanced/instances.js +104 -0
- package/dist/instanced/instances.js.map +1 -0
- package/dist/instanced/key.d.ts +1 -1
- package/dist/instanced/key.js +1 -1
- package/dist/instanced/key.js.map +1 -1
- package/dist/instanced/levels.d.ts +9 -9
- package/dist/instanced/levels.js +7 -6
- package/dist/instanced/levels.js.map +1 -1
- package/dist/instanced/lists.d.ts +29 -39
- package/dist/instanced/lists.js +45 -62
- package/dist/instanced/lists.js.map +1 -1
- package/dist/instanced/measure.d.ts +2 -2
- package/dist/instanced/measure.js +2 -2
- package/dist/instanced/meshes.d.ts +11 -9
- package/dist/instanced/meshes.js +26 -16
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +16 -12
- package/dist/instanced/mirror.js +51 -12
- package/dist/instanced/mirror.js.map +1 -1
- package/dist/instanced/raycast.d.ts +6 -9
- package/dist/instanced/raycast.js +15 -18
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +22 -73
- package/dist/instanced/rows.js +24 -189
- package/dist/instanced/rows.js.map +1 -1
- package/dist/instanced/shape.d.ts +3 -1
- package/dist/instanced/shape.js +6 -3
- package/dist/instanced/shape.js.map +1 -1
- package/dist/instanced/sort.d.ts +36 -34
- package/dist/instanced/sort.js +168 -132
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.d.ts +17 -12
- package/dist/instanced/update.js +64 -85
- package/dist/instanced/update.js.map +1 -1
- package/dist/levels/compile/index.d.ts +4 -2
- package/dist/levels/compile/index.js +10 -2
- package/dist/levels/compile/index.js.map +1 -1
- package/dist/levels/compile/pipelines.d.ts +1 -1
- package/dist/levels/compile/pipelines.js +1 -6
- package/dist/levels/compile/pipelines.js.map +1 -1
- package/dist/levels/draw.d.ts +1 -1
- package/dist/levels/draw.js +3 -3
- package/dist/levels/fade.d.ts +13 -22
- package/dist/levels/fade.js +17 -38
- package/dist/levels/fade.js.map +1 -1
- package/dist/levels/index.d.ts +7 -7
- package/dist/levels/index.js +1 -1
- package/dist/levels/item.d.ts +10 -10
- package/dist/levels/item.js +15 -23
- package/dist/levels/item.js.map +1 -1
- package/dist/levels/load.d.ts +1 -1
- package/dist/levels/load.js +5 -3
- package/dist/levels/load.js.map +1 -1
- package/dist/levels/manager.d.ts +30 -31
- package/dist/levels/manager.js +75 -62
- package/dist/levels/manager.js.map +1 -1
- package/dist/levels/material.d.ts +2 -2
- package/dist/levels/material.js +2 -2
- package/dist/levels/renderer.d.ts +8 -5
- package/dist/levels/renderer.js +20 -4
- package/dist/levels/renderer.js.map +1 -1
- package/dist/levels/requests.d.ts +4 -1
- package/dist/levels/requests.js +3 -1
- package/dist/levels/requests.js.map +1 -1
- package/dist/loader/context.d.ts +9 -11
- package/dist/loader/context.js +12 -7
- package/dist/loader/context.js.map +1 -1
- package/dist/loader/entry.d.ts +4 -0
- package/dist/loader/entry.js +43 -0
- package/dist/loader/entry.js.map +1 -0
- package/dist/loader/index.d.ts +49 -35
- package/dist/loader/index.js +123 -135
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/level.js +5 -5
- package/dist/loader/level.js.map +1 -1
- package/dist/loader/node.d.ts +26 -0
- package/dist/loader/node.js +199 -0
- package/dist/loader/node.js.map +1 -0
- package/dist/loader/request.d.ts +11 -44
- package/dist/loader/request.js +7 -47
- package/dist/loader/request.js.map +1 -1
- package/dist/loader/url.d.ts +10 -9
- package/dist/loader/url.js +21 -17
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +122 -62
- package/dist/lod.js +332 -187
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +1 -1
- package/dist/meshopt.js +3 -2
- package/dist/meshopt.js.map +1 -1
- package/dist/node-process.d.ts +5 -0
- package/dist/node-process.js +6 -0
- package/dist/node-process.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.js +5 -0
- package/dist/node.js.map +1 -0
- package/dist/simplify/index.d.ts +2 -2
- package/dist/simplify/index.js +7 -7
- package/dist/simplify/index.js.map +1 -1
- package/dist/source/detail.d.ts +7 -2
- package/dist/source/detail.js +26 -22
- package/dist/source/detail.js.map +1 -1
- package/dist/source/sampler.js +5 -2
- package/dist/source/sampler.js.map +1 -1
- package/dist/three.d.ts +8 -7
- package/dist/three.js +5 -4
- package/dist/three.js.map +1 -1
- package/dist/wind/bounds.js +1 -1
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.d.ts +1 -1
- package/dist/wind/hooks.js +1 -1
- package/dist/wind/index.d.ts +3 -3
- package/dist/wind/index.js +11 -9
- package/dist/wind/index.js.map +1 -1
- package/package.json +10 -6
- package/skills/lod/SKILL.md +65 -54
- package/dist/gpu.d.ts +0 -39
- package/dist/gpu.js +0 -41
- package/dist/gpu.js.map +0 -1
- package/dist/instanced/chunk.d.ts +0 -97
- package/dist/instanced/chunk.js +0 -156
- package/dist/instanced/chunk.js.map +0 -1
- package/dist/instanced/chunks.d.ts +0 -60
- package/dist/instanced/chunks.js +0 -208
- package/dist/instanced/chunks.js.map +0 -1
- package/dist/instanced/index.d.ts +0 -120
- package/dist/instanced/index.js +0 -290
- package/dist/instanced/index.js.map +0 -1
- package/dist/instanced/pages/buffers.d.ts +0 -37
- package/dist/instanced/pages/buffers.js +0 -15
- package/dist/instanced/pages/buffers.js.map +0 -1
- package/dist/instanced/pages/chunk.d.ts +0 -51
- package/dist/instanced/pages/chunk.js +0 -81
- package/dist/instanced/pages/chunk.js.map +0 -1
- package/dist/instanced/pages/index.d.ts +0 -74
- package/dist/instanced/pages/index.js +0 -269
- package/dist/instanced/pages/index.js.map +0 -1
- package/dist/instanced/pages/passes.d.ts +0 -21
- package/dist/instanced/pages/passes.js +0 -52
- package/dist/instanced/pages/passes.js.map +0 -1
- package/dist/instanced/pages/slots.d.ts +0 -11
- package/dist/instanced/pages/slots.js +0 -90
- package/dist/instanced/pages/slots.js.map +0 -1
- package/dist/instanced/pages/workgroup.d.ts +0 -14
- package/dist/instanced/pages/workgroup.js +0 -38
- package/dist/instanced/pages/workgroup.js.map +0 -1
- package/dist/levels/wait.d.ts +0 -27
- package/dist/levels/wait.js +0 -61
- package/dist/levels/wait.js.map +0 -1
- package/dist/loader/cache.d.ts +0 -12
- package/dist/loader/cache.js +0 -68
- package/dist/loader/cache.js.map +0 -1
- package/dist/loader/dependencies.d.ts +0 -32
- package/dist/loader/dependencies.js +0 -113
- package/dist/loader/dependencies.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { CacheEntry } from "vitecache";
|
|
2
|
+
import { derived } from "./request.js";
|
|
3
|
+
// What a level is stored under.
|
|
4
|
+
/**
|
|
5
|
+
* What builds and lays out a stored level, and so what identifies it beside its request: bump it with any change to
|
|
6
|
+
* the bytes a level or shape entry holds.
|
|
7
|
+
*/
|
|
8
|
+
const version = "lod-level@25";
|
|
9
|
+
/** The entry of derived level `of` of `ladder`, or of its source's shape, keyed by the request alone. */
|
|
10
|
+
export function entryOf(ladder, of, { basePath, root }) {
|
|
11
|
+
const level = of === "shape" ? { type: of } : parameters(derived(ladder.levels, of));
|
|
12
|
+
return new CacheEntry({ basePath, root, version, dependencies: { level: { value: { url: ladder.key, level } } } });
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* What derives a level's content, by its role rather than its ladder position, so adding or removing another level
|
|
16
|
+
* keeps this one's entry. Switch thresholds and impostor draw options apply at decode, so changing one reuses it.
|
|
17
|
+
*/
|
|
18
|
+
function parameters(level) {
|
|
19
|
+
switch (level.type) {
|
|
20
|
+
case "simplify":
|
|
21
|
+
return { type: level.type, ratio: level.ratio ?? null };
|
|
22
|
+
case "baked":
|
|
23
|
+
return {
|
|
24
|
+
type: level.type,
|
|
25
|
+
ratio: level.ratio ?? null,
|
|
26
|
+
textureSize: level.textureSize ?? null,
|
|
27
|
+
low: level.low ?? null,
|
|
28
|
+
interior: level.interior ?? null,
|
|
29
|
+
};
|
|
30
|
+
case "impostor":
|
|
31
|
+
return {
|
|
32
|
+
type: level.type,
|
|
33
|
+
// The impostor bakes its top mip for this height too.
|
|
34
|
+
maxPixels: level.maxPixels ?? null,
|
|
35
|
+
layout: level.layout ?? null,
|
|
36
|
+
frames: level.frames ?? null,
|
|
37
|
+
resolution: level.resolution ?? null,
|
|
38
|
+
emissive: level.emissive ?? null,
|
|
39
|
+
supersample: level.supersample ?? null,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/loader/entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA0C,MAAM,WAAW,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAe,MAAM,cAAc,CAAC;AAEpD,gCAAgC;AAEhC;;;GAGG;AACH,MAAM,OAAO,GAAG,cAAc,CAAC;AAE/B,yGAAyG;AACzG,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,EAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAgD;IAC5H,MAAM,KAAK,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACrH,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,KAAc;IAChC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;QAC1D,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;gBACtC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;aACjC,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,sDAAsD;gBACtD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;gBAClC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;gBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;gBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;gBAChC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;aACvC,CAAC;IACN,CAAC;AACH,CAAC"}
|
package/dist/loader/index.d.ts
CHANGED
|
@@ -1,62 +1,76 @@
|
|
|
1
|
-
import { Loader, LoadingManager } from "three/webgpu";
|
|
1
|
+
import { Loader, LoadingManager, type Object3D, type WebGPURenderer } from "three/webgpu";
|
|
2
|
+
import type { CacheEntryOptions, Input } from "vitecache";
|
|
2
3
|
import { type LodLevel } from "../levels/index.js";
|
|
3
|
-
import type { LodCacheOptions } from "./cache.js";
|
|
4
4
|
import { type LodRequest } from "./request.js";
|
|
5
|
+
export interface CachedLodLoaderOptions extends Pick<CacheEntryOptions, "basePath" | "root"> {
|
|
6
|
+
/**
|
|
7
|
+
* Apply runtime effects when a level arrives, before draws compile. Does not change built content or bounds.
|
|
8
|
+
* `index` is the returned ladder's: 0 is the source, and `levels[i]` arrives as `i + 1`. Set `castShadow` and
|
|
9
|
+
* `shadowSide` here: a level compiles its draws, shadow maps' included, before it arrives, so a shadow setting
|
|
10
|
+
* changed later compiles mid-frame.
|
|
11
|
+
*/
|
|
12
|
+
onLevel?: (object: Object3D, index: number) => void | Promise<void>;
|
|
13
|
+
}
|
|
5
14
|
/**
|
|
15
|
+
* Loads levels of detail from asset URLs, storing each derived level, and the source's shape, in vitecache, keyed by
|
|
16
|
+
* the request alone. Load it as a vitecache cached loader, with literal requests, so that the vitecache plugin finds
|
|
17
|
+
* every load and builds its levels in Node, saving them with the files they were built from; browsers read them, and
|
|
18
|
+
* one that misses builds the level itself.
|
|
19
|
+
*
|
|
6
20
|
* Loads asset URLs through manager handlers, else with a GLTFLoader of its own, which decodes meshopt only: register
|
|
7
21
|
* a GLTFLoader configured with Draco or KTX2 decoders for models compressed with them, and a GLTSLoader for .glts
|
|
8
|
-
* sources.
|
|
9
|
-
*
|
|
10
|
-
* Impostor and interior bakes draw with a renderer of the loader's own, made at its first bake: `dispose` frees it.
|
|
22
|
+
* sources. Impostor and interior bakes draw with a renderer of the loader's own, made at its first bake and freed with
|
|
23
|
+
* what the last of the ladders it describes loaded (see `loadAsync`), or by `dispose`.
|
|
11
24
|
*/
|
|
12
|
-
export declare class
|
|
13
|
-
|
|
25
|
+
export declare class CachedLodLoader extends Loader<LodLevel[], LodRequest> {
|
|
26
|
+
protected readonly options: CachedLodLoaderOptions;
|
|
14
27
|
private gltf;
|
|
15
28
|
/**
|
|
16
29
|
* The renderer this loader bakes with, made at its first bake. Its own, not the app's: a canvas the size of a bake
|
|
17
30
|
* frame would draw that frame over the whole target (see `bakeImpostor`).
|
|
18
31
|
*/
|
|
19
32
|
private renderer;
|
|
20
|
-
/**
|
|
21
|
-
private
|
|
22
|
-
|
|
33
|
+
/** How many ladders it described whose loads are not yet freed. */
|
|
34
|
+
private ladders;
|
|
35
|
+
/** Whether `loadAsync` builds every level with the ladder rather than when a camera first needs it. */
|
|
36
|
+
protected readonly buildsAll: boolean;
|
|
37
|
+
constructor(manager?: LoadingManager, options?: CachedLodLoaderOptions);
|
|
23
38
|
load(request: LodRequest, onLoad: (levels: LodLevel[]) => void, _onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
|
|
24
39
|
/**
|
|
25
|
-
* Describes the ladder from
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* in a `vite build` warmup.
|
|
40
|
+
* Describes the ladder from its source, which the first level loaded then takes. Empty levels load with it, as does
|
|
41
|
+
* the source when it is the only drawable; other levels load when a camera needs them, including a coarse stand-in
|
|
42
|
+
* while its first detail arrives, and each derived level is built when first loaded. A level whose default threshold
|
|
43
|
+
* is measured from it is built with the ladder, and in Node every level is.
|
|
30
44
|
*
|
|
31
45
|
* What the levels load is freed when the last Lod holding them is disposed (see `LodLevel.hold`), which spends them:
|
|
32
46
|
* a Lod made from them later throws, so call loadAsync again. Levels no Lod ever holds are never freed: they are
|
|
33
|
-
* yours until a Lod holds them.
|
|
47
|
+
* yours until a Lod holds them. Once every ladder it described is freed, so is its bake renderer.
|
|
34
48
|
*/
|
|
35
49
|
loadAsync(request: LodRequest): Promise<LodLevel[]>;
|
|
36
|
-
/** The
|
|
37
|
-
private
|
|
50
|
+
/** The stored bytes of derived level `of`, or of the source's shape, else what `build` makes, saved. */
|
|
51
|
+
private cached;
|
|
38
52
|
/**
|
|
39
|
-
*
|
|
40
|
-
* the
|
|
53
|
+
* The path below the app's base that `url`, as the manager resolved it, loads, such as `/tree/model.glts`: what its
|
|
54
|
+
* levels are stored under, alike wherever the app is served. The manager of a .glts script resolves URLs against the
|
|
55
|
+
* script.
|
|
41
56
|
*/
|
|
57
|
+
protected publicPath(url: string): string;
|
|
58
|
+
/** The files and packages what this loader built so far was built from: none in browsers, which do not save. */
|
|
59
|
+
protected inputs(): Input[];
|
|
60
|
+
/** A deferred level's bytes, built from `spare`, the ladder's source, or from a source of its own. Disposes `spare` either way. */
|
|
42
61
|
private levelBytes;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
* later: what loading the source read, and what this build loads besides.
|
|
46
|
-
*/
|
|
47
|
-
private persist;
|
|
62
|
+
/** Build level `index` from `source`, encoded. */
|
|
63
|
+
private build;
|
|
48
64
|
/** The renderer this loader bakes with, made at its first bake. */
|
|
49
65
|
private bakeRenderer;
|
|
66
|
+
protected newBakeRenderer(): Promise<WebGPURenderer>;
|
|
50
67
|
/**
|
|
51
|
-
* Free the renderer this loader made for its bakes; a bake under way fails. Levels it loaded
|
|
52
|
-
* later bake makes a new renderer.
|
|
68
|
+
* Free the renderer this loader made for its bakes, resolving once freed; a bake under way fails. Levels it loaded
|
|
69
|
+
* stay as they are, and a later bake makes a new renderer. In Node each `loadAsync` frees what it made to load and
|
|
70
|
+
* bake with, the scenes of its GLTSLoader included, before it resolves, so there this frees nothing.
|
|
53
71
|
*/
|
|
54
|
-
dispose(): void
|
|
55
|
-
/**
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
private warnUncached;
|
|
59
|
-
/** The ladder's source, with what loading it read. */
|
|
60
|
-
private loadSource;
|
|
61
|
-
private loadAsset;
|
|
72
|
+
dispose(): Promise<void>;
|
|
73
|
+
/** Free the bake renderer, once made. */
|
|
74
|
+
private freeRenderer;
|
|
75
|
+
protected loadAsset(url: string): Promise<Object3D>;
|
|
62
76
|
}
|
package/dist/loader/index.js
CHANGED
|
@@ -1,94 +1,107 @@
|
|
|
1
1
|
import { Box3, Group, Loader, LoadingManager, Vector3 } from "three/webgpu";
|
|
2
2
|
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
|
|
3
|
-
import { MissingDependencyError } from "vitecache";
|
|
4
3
|
import { at } from "../at.js";
|
|
5
4
|
import { createBakeRenderer } from "../bake.js";
|
|
6
|
-
import {
|
|
5
|
+
import { disposeRecursive } from "../dispose.js";
|
|
7
6
|
import { framePixels } from "../impostor/impostor.js";
|
|
8
7
|
import { resolveThresholds } from "../levels/index.js";
|
|
9
8
|
import { meshoptDecoder } from "../meshopt.js";
|
|
10
9
|
import { isMesh, isObject3D, rejectSkinned } from "../three.js";
|
|
11
|
-
import { buildLevel } from "./build.js";
|
|
12
10
|
import { LodLoadContext } from "./context.js";
|
|
13
|
-
import {
|
|
11
|
+
import { entryOf } from "./entry.js";
|
|
14
12
|
import { decodeLevel, encodeLevel, encodeShape, placedBox, readLevel, readShape, shapeOf } from "./level.js";
|
|
15
|
-
import {
|
|
16
|
-
import { assetPath,
|
|
17
|
-
// The loader: it describes a ladder of levels from a source, builds each level when first loaded and caches it.
|
|
13
|
+
import { derived, normalize } from "./request.js";
|
|
14
|
+
import { assetPath, publicPath, sourceRelativeURL } from "./url.js";
|
|
18
15
|
/**
|
|
16
|
+
* Loads levels of detail from asset URLs, storing each derived level, and the source's shape, in vitecache, keyed by
|
|
17
|
+
* the request alone. Load it as a vitecache cached loader, with literal requests, so that the vitecache plugin finds
|
|
18
|
+
* every load and builds its levels in Node, saving them with the files they were built from; browsers read them, and
|
|
19
|
+
* one that misses builds the level itself.
|
|
20
|
+
*
|
|
19
21
|
* Loads asset URLs through manager handlers, else with a GLTFLoader of its own, which decodes meshopt only: register
|
|
20
22
|
* a GLTFLoader configured with Draco or KTX2 decoders for models compressed with them, and a GLTSLoader for .glts
|
|
21
|
-
* sources.
|
|
22
|
-
*
|
|
23
|
-
* Impostor and interior bakes draw with a renderer of the loader's own, made at its first bake: `dispose` frees it.
|
|
23
|
+
* sources. Impostor and interior bakes draw with a renderer of the loader's own, made at its first bake and freed with
|
|
24
|
+
* what the last of the ladders it describes loaded (see `loadAsync`), or by `dispose`.
|
|
24
25
|
*/
|
|
25
|
-
export class
|
|
26
|
-
|
|
26
|
+
export class CachedLodLoader extends Loader {
|
|
27
|
+
options;
|
|
27
28
|
gltf;
|
|
28
29
|
/**
|
|
29
30
|
* The renderer this loader bakes with, made at its first bake. Its own, not the app's: a canvas the size of a bake
|
|
30
31
|
* frame would draw that frame over the whole target (see `bakeImpostor`).
|
|
31
32
|
*/
|
|
32
33
|
renderer;
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/** How many ladders it described whose loads are not yet freed. */
|
|
35
|
+
ladders = 0;
|
|
36
|
+
/** Whether `loadAsync` builds every level with the ladder rather than when a camera first needs it. */
|
|
37
|
+
buildsAll = false;
|
|
38
|
+
constructor(manager, options = {}) {
|
|
36
39
|
super(manager);
|
|
37
|
-
this.
|
|
40
|
+
this.options = options;
|
|
38
41
|
}
|
|
39
42
|
load(request, onLoad, _onProgress, onError) {
|
|
40
43
|
this.loadAsync(request).then(onLoad, onError ?? ((error) => console.error(error)));
|
|
41
44
|
}
|
|
42
45
|
/**
|
|
43
|
-
* Describes the ladder from
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* in a `vite build` warmup.
|
|
46
|
+
* Describes the ladder from its source, which the first level loaded then takes. Empty levels load with it, as does
|
|
47
|
+
* the source when it is the only drawable; other levels load when a camera needs them, including a coarse stand-in
|
|
48
|
+
* while its first detail arrives, and each derived level is built when first loaded. A level whose default threshold
|
|
49
|
+
* is measured from it is built with the ladder, and in Node every level is.
|
|
48
50
|
*
|
|
49
51
|
* What the levels load is freed when the last Lod holding them is disposed (see `LodLevel.hold`), which spends them:
|
|
50
52
|
* a Lod made from them later throws, so call loadAsync again. Levels no Lod ever holds are never freed: they are
|
|
51
|
-
* yours until a Lod holds them.
|
|
53
|
+
* yours until a Lod holds them. Once every ladder it described is freed, so is its bake renderer.
|
|
52
54
|
*/
|
|
53
55
|
async loadAsync(request) {
|
|
54
|
-
const
|
|
55
|
-
const { url, levels: requests } =
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
56
|
+
const ladder = normalize(request, this.path, (url) => this.publicPath(this.manager.resolveURL(url)));
|
|
57
|
+
const { url, levels: requests } = ladder;
|
|
58
|
+
this.ladders++;
|
|
59
|
+
const context = new LodLoadContext(() => this.loadAsset(url), this.options.onLevel, () => {
|
|
60
|
+
if (--this.ladders === 0)
|
|
61
|
+
void this.freeRenderer();
|
|
62
|
+
});
|
|
59
63
|
this.manager.itemStart(url);
|
|
60
64
|
try {
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
// A simplified or baked level's default threshold is measured from its deviation, so it is built with the ladder.
|
|
65
|
-
const eager = requests.flatMap((level, index) => level.type !== "empty" && (warmup || (level.type !== "impostor" && level.maxPixels === undefined)) ? [index + 1] : []);
|
|
66
|
-
const reads = await Promise.all(eager.map(async (index) => ({ index, ...(await cached(levelEntry(ladder, index, dependencies, this.cacheOptions))) })));
|
|
65
|
+
// Built with the ladder: every level in Node; elsewhere a simplified or baked level without maxPixels, whose
|
|
66
|
+
// default threshold is measured from its deviation.
|
|
67
|
+
const eager = requests.flatMap((level, index) => level.type !== "empty" && (this.buildsAll || (level.type !== "impostor" && level.maxPixels === undefined)) ? [index + 1] : []);
|
|
67
68
|
// Only what measures a default threshold: bytes no camera asked for are not held.
|
|
68
69
|
const measured = new Map();
|
|
69
|
-
for (const
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
for (const index of eager) {
|
|
71
|
+
let built = false;
|
|
72
|
+
const level = await this.cached(ladder, index, async () => {
|
|
73
|
+
built = true;
|
|
74
|
+
return this.build(ladder, index, await context.source());
|
|
75
|
+
});
|
|
76
|
+
// A level built here is handed to its first load; a stored one is read again then.
|
|
77
|
+
if (built)
|
|
72
78
|
context.setBuilt(index, level);
|
|
73
79
|
measured.set(index, readLevel(level).level);
|
|
74
80
|
}
|
|
75
|
-
const shape = await this.
|
|
81
|
+
const shape = readShape(await this.cached(ladder, "shape", async () => encodeShape(shapeOf(await context.source()))));
|
|
76
82
|
const box = placedBox(shape);
|
|
77
83
|
if (box.isEmpty())
|
|
78
|
-
throw new Error("
|
|
84
|
+
throw new Error("CachedLodLoader: the source has no visible geometry to measure");
|
|
85
|
+
// Building every level, the loader frees what it loaded with as loadAsync resolves (see the Node loader): no
|
|
86
|
+
// level keeps the spare source, and the source loads again only when a level asks for it.
|
|
87
|
+
if (this.buildsAll) {
|
|
88
|
+
const spare = context.take();
|
|
89
|
+
if (spare)
|
|
90
|
+
disposeRecursive(spare);
|
|
91
|
+
}
|
|
79
92
|
const thresholds = resolveThresholds([
|
|
80
93
|
{},
|
|
81
94
|
...requests.map((level, position) => ({
|
|
82
|
-
// An impostor's default is its frame's
|
|
95
|
+
// An impostor's default is its frame's, whether or not it is built with the ladder.
|
|
83
96
|
maxPixels: level.maxPixels ?? (level.type === "impostor" ? framePixels(level.resolution) : undefined),
|
|
84
97
|
measured: level.type === "impostor" ? undefined : measured.get(position + 1),
|
|
85
98
|
})),
|
|
86
|
-
], shape.box.getSize(new Vector3()).length(), "
|
|
99
|
+
], shape.box.getSize(new Vector3()).length(), "CachedLodLoader");
|
|
87
100
|
const { hold } = context;
|
|
88
101
|
// Every load runs once however often it is asked for: every Lod made from the levels and the levels reading the
|
|
89
102
|
// source's materials share one object. The source's starts synchronously, so it takes the spare before a coarser
|
|
90
103
|
// level demanded in the same tick.
|
|
91
|
-
const loadSource = once(async () => context.arrive(
|
|
104
|
+
const loadSource = once(async () => context.arrive(context.take() ?? (await this.loadAsset(url)), 0, { materials: true }));
|
|
92
105
|
const materials = async () => {
|
|
93
106
|
const { object } = at(levels, 0);
|
|
94
107
|
return materialsOf(object ?? (await loadSource()));
|
|
@@ -109,7 +122,7 @@ export class LodLoader extends Loader {
|
|
|
109
122
|
return { load, maxPixels, box: box.clone(), hold };
|
|
110
123
|
}),
|
|
111
124
|
];
|
|
112
|
-
const levels = await preload(deferred);
|
|
125
|
+
const levels = await preload(deferred, !this.buildsAll);
|
|
113
126
|
return levels;
|
|
114
127
|
}
|
|
115
128
|
catch (error) {
|
|
@@ -121,120 +134,100 @@ export class LodLoader extends Loader {
|
|
|
121
134
|
this.manager.itemEnd(url);
|
|
122
135
|
}
|
|
123
136
|
}
|
|
124
|
-
/** The
|
|
125
|
-
async
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
await
|
|
132
|
-
return
|
|
137
|
+
/** The stored bytes of derived level `of`, or of the source's shape, else what `build` makes, saved. */
|
|
138
|
+
async cached(ladder, of, build) {
|
|
139
|
+
const entry = entryOf(ladder, of, this.options);
|
|
140
|
+
const stored = await entry.load();
|
|
141
|
+
if (stored)
|
|
142
|
+
return stored;
|
|
143
|
+
const bytes = await build();
|
|
144
|
+
await entry.save(bytes, { dependencies: this.inputs() });
|
|
145
|
+
return bytes;
|
|
133
146
|
}
|
|
134
147
|
/**
|
|
135
|
-
*
|
|
136
|
-
* the
|
|
148
|
+
* The path below the app's base that `url`, as the manager resolved it, loads, such as `/tree/model.glts`: what its
|
|
149
|
+
* levels are stored under, alike wherever the app is served. The manager of a .glts script resolves URLs against the
|
|
150
|
+
* script.
|
|
137
151
|
*/
|
|
152
|
+
publicPath(url) {
|
|
153
|
+
return publicPath(url, this.options.basePath ?? "/_vitecache/");
|
|
154
|
+
}
|
|
155
|
+
/** The files and packages what this loader built so far was built from: none in browsers, which do not save. */
|
|
156
|
+
inputs() {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
/** A deferred level's bytes, built from `spare`, the ladder's source, or from a source of its own. Disposes `spare` either way. */
|
|
138
160
|
async levelBytes(ladder, index, spare) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
161
|
+
let used = false;
|
|
162
|
+
const bytes = await this.cached(ladder, index, async () => {
|
|
163
|
+
used = true;
|
|
164
|
+
const source = spare ?? (await this.loadAsset(ladder.url));
|
|
165
|
+
try {
|
|
166
|
+
return await this.build(ladder, index, source);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
disposeRecursive(source);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
if (spare && !used)
|
|
173
|
+
disposeRecursive(spare);
|
|
174
|
+
return bytes;
|
|
152
175
|
}
|
|
153
|
-
/**
|
|
154
|
-
|
|
155
|
-
* later: what loading the source read, and what this build loads besides.
|
|
156
|
-
*/
|
|
157
|
-
async persist(ladder, index, { source, dependencies: read }, entry) {
|
|
158
|
-
const { urls } = ladder;
|
|
176
|
+
/** Build level `index` from `source`, encoded. */
|
|
177
|
+
async build(ladder, index, source) {
|
|
159
178
|
const request = derived(ladder.levels, index);
|
|
160
|
-
const dependencies = new AssetDependencies(urls, this.manager).include(read);
|
|
161
179
|
const load = (name) => {
|
|
162
|
-
const asset =
|
|
163
|
-
return asset === undefined ? undefined : this.loadAsset(asset,
|
|
180
|
+
const asset = request.type === "baked" ? request[name] : undefined;
|
|
181
|
+
return asset === undefined ? undefined : this.loadAsset(sourceRelativeURL(asset, ladder.url));
|
|
164
182
|
};
|
|
165
183
|
let low, interior, built;
|
|
166
184
|
try {
|
|
167
|
-
rejectSkinned(source, "
|
|
185
|
+
rejectSkinned(source, "CachedLodLoader");
|
|
168
186
|
low = await load("low");
|
|
169
187
|
interior = await load("interior");
|
|
188
|
+
// Only a miss builds: simplify, the bakes and their WASM stay out of pages whose levels are all stored.
|
|
189
|
+
const { buildLevel } = await import("./build.js");
|
|
170
190
|
built = await buildLevel(source, request, { low, interior }, () => this.bakeRenderer());
|
|
171
|
-
|
|
172
|
-
await this.save(ladder.url, entry, bytes, dependencies);
|
|
173
|
-
return bytes;
|
|
191
|
+
return await encodeLevel(built, request.type, shapeOf(source), materialsOf(source));
|
|
174
192
|
}
|
|
175
193
|
finally {
|
|
176
194
|
for (const object of [interior, low])
|
|
177
195
|
if (object)
|
|
178
|
-
|
|
196
|
+
disposeRecursive(object);
|
|
179
197
|
// A simplified level draws with the source's materials, which are freed with the source.
|
|
180
198
|
if (built)
|
|
181
|
-
|
|
199
|
+
disposeRecursive(built, { materials: request.type !== "simplify" });
|
|
182
200
|
}
|
|
183
201
|
}
|
|
184
202
|
/** The renderer this loader bakes with, made at its first bake. */
|
|
185
203
|
bakeRenderer() {
|
|
186
|
-
this.renderer ??=
|
|
204
|
+
this.renderer ??= this.newBakeRenderer();
|
|
187
205
|
return this.renderer;
|
|
188
206
|
}
|
|
207
|
+
newBakeRenderer() {
|
|
208
|
+
return createBakeRenderer();
|
|
209
|
+
}
|
|
189
210
|
/**
|
|
190
|
-
* Free the renderer this loader made for its bakes; a bake under way fails. Levels it loaded
|
|
191
|
-
* later bake makes a new renderer.
|
|
211
|
+
* Free the renderer this loader made for its bakes, resolving once freed; a bake under way fails. Levels it loaded
|
|
212
|
+
* stay as they are, and a later bake makes a new renderer. In Node each `loadAsync` frees what it made to load and
|
|
213
|
+
* bake with, the scenes of its GLTSLoader included, before it resolves, so there this frees nothing.
|
|
192
214
|
*/
|
|
193
|
-
dispose() {
|
|
215
|
+
async dispose() {
|
|
216
|
+
await this.freeRenderer();
|
|
217
|
+
}
|
|
218
|
+
/** Free the bake renderer, once made. */
|
|
219
|
+
async freeRenderer() {
|
|
194
220
|
const renderer = this.renderer;
|
|
195
221
|
this.renderer = undefined;
|
|
196
222
|
// A renderer that failed to initialise failed the bake that made it.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
/** Save `bytes` to `entry`, read before, when what they were built from can be validated later; warn once otherwise. */
|
|
200
|
-
async save(url, entry, bytes, dependencies) {
|
|
201
|
-
if (!entry)
|
|
202
|
-
return this.warnUncached(url, "it is not a same-origin path");
|
|
203
|
-
// Read now: GLTS sources go on reporting what they observe while levels are built.
|
|
204
|
-
const saved = dependencies.saved();
|
|
205
|
-
if ("reason" in saved)
|
|
206
|
-
return this.warnUncached(url, saved.reason);
|
|
207
|
-
if (this.uncached.has(url))
|
|
208
|
-
return;
|
|
209
|
-
try {
|
|
210
|
-
await entry.save(bytes, { dependencies: saved.dependencies });
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
// A dependency without a backing file, such as a middleware URL or a package the app does not install, cannot be validated.
|
|
214
|
-
if (!(error instanceof MissingDependencyError))
|
|
215
|
-
throw error;
|
|
216
|
-
this.warnUncached(url, error.message);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/** Builds of `url` are served without saving from now on, after one warning naming why; a build warmup fails instead. */
|
|
220
|
-
warnUncached(url, reason) {
|
|
221
|
-
if (warmup)
|
|
222
|
-
throw new Error(`LodLoader: cannot precompute "${url}": ${reason}`);
|
|
223
|
-
if (this.uncached.has(url))
|
|
224
|
-
return;
|
|
225
|
-
this.uncached.add(url);
|
|
226
|
-
console.warn(`LodLoader: "${url}" is not cached by this loader: ${reason}`);
|
|
227
|
-
}
|
|
228
|
-
/** The ladder's source, with what loading it read. */
|
|
229
|
-
async loadSource(url) {
|
|
230
|
-
const dependencies = new AssetDependencies({ source: url }, this.manager);
|
|
231
|
-
return { source: await this.loadAsset(url, dependencies), dependencies };
|
|
223
|
+
const made = await renderer?.catch(() => undefined);
|
|
224
|
+
made?.dispose();
|
|
232
225
|
}
|
|
233
|
-
async loadAsset(url
|
|
226
|
+
async loadAsset(url) {
|
|
234
227
|
const { path, extension } = assetPath(url);
|
|
235
228
|
const handler = this.manager.getHandler(path);
|
|
236
229
|
if (!handler && extension === "glts")
|
|
237
|
-
throw new Error(`
|
|
230
|
+
throw new Error(`CachedLodLoader: cannot load "${url}": register a GLTSLoader for .glts on the loading manager`);
|
|
238
231
|
let result;
|
|
239
232
|
if (handler)
|
|
240
233
|
result = await handler.loadAsync(url);
|
|
@@ -243,15 +236,7 @@ export class LodLoader extends Loader {
|
|
|
243
236
|
const decoder = this.gltf.setCrossOrigin(this.crossOrigin).setWithCredentials(this.withCredentials).setRequestHeader(this.requestHeader);
|
|
244
237
|
result = await decoder.loadAsync(url);
|
|
245
238
|
}
|
|
246
|
-
|
|
247
|
-
try {
|
|
248
|
-
dependencies.capture(url, object, result);
|
|
249
|
-
return object;
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
disposeRejected(object);
|
|
253
|
-
throw error;
|
|
254
|
-
}
|
|
239
|
+
return objectOf(result, url);
|
|
255
240
|
}
|
|
256
241
|
}
|
|
257
242
|
/** `load`, run once however often it is called: every call shares its promise. */
|
|
@@ -268,10 +253,13 @@ function materialsOf(object) {
|
|
|
268
253
|
});
|
|
269
254
|
return materials;
|
|
270
255
|
}
|
|
271
|
-
/**
|
|
272
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Loads what every camera draws before it picks a level: the empty levels, and, given `preloadSource`, the source if it
|
|
258
|
+
* is the only drawable.
|
|
259
|
+
*/
|
|
260
|
+
async function preload(levels, preloadSource) {
|
|
273
261
|
const drawable = levels.filter((level) => !level.box.isEmpty());
|
|
274
|
-
return Promise.all(levels.map(async (level) => level.box.isEmpty() || drawable.length === 1 ? { object: await level.load(), maxPixels: level.maxPixels, hold: level.hold } : level));
|
|
262
|
+
return Promise.all(levels.map(async (level) => level.box.isEmpty() || (preloadSource && drawable.length === 1) ? { object: await level.load(), maxPixels: level.maxPixels, hold: level.hold } : level));
|
|
275
263
|
}
|
|
276
264
|
function objectOf(result, url) {
|
|
277
265
|
if (isObject3D(result))
|
|
@@ -279,6 +267,6 @@ function objectOf(result, url) {
|
|
|
279
267
|
const scene = typeof result === "object" && result !== null ? Reflect.get(result, "scene") : undefined;
|
|
280
268
|
if (isObject3D(scene))
|
|
281
269
|
return scene;
|
|
282
|
-
throw new Error(`
|
|
270
|
+
throw new Error(`CachedLodLoader: the handler for "${url}" did not load an Object3D or a glTF`);
|
|
283
271
|
}
|
|
284
272
|
//# sourceMappingURL=index.js.map
|
package/dist/loader/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"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"}
|