@drawcall/lod 0.3.0 → 0.4.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.
Files changed (204) hide show
  1. package/README.md +5 -8
  2. package/dist/bake.d.ts +16 -2
  3. package/dist/bake.js +92 -4
  4. package/dist/bake.js.map +1 -1
  5. package/dist/baked/index.d.ts +2 -2
  6. package/dist/baked/index.js +2 -2
  7. package/dist/baked/interior/faces.js +4 -2
  8. package/dist/baked/interior/faces.js.map +1 -1
  9. package/dist/baked/interior/material.js +1 -1
  10. package/dist/baked/interior/material.js.map +1 -1
  11. package/dist/baked/interior/rooms.d.ts +1 -1
  12. package/dist/baked/interior/rooms.js +1 -1
  13. package/dist/dispose.d.ts +3 -3
  14. package/dist/dispose.js +6 -6
  15. package/dist/dispose.js.map +1 -1
  16. package/dist/foliage.d.ts +32 -0
  17. package/dist/foliage.js +137 -0
  18. package/dist/foliage.js.map +1 -0
  19. package/dist/impostor/bake/index.d.ts +3 -3
  20. package/dist/impostor/bake/index.js +12 -3
  21. package/dist/impostor/bake/index.js.map +1 -1
  22. package/dist/impostor/bake/source.d.ts +2 -1
  23. package/dist/impostor/bake/source.js +2 -2
  24. package/dist/impostor/bake/source.js.map +1 -1
  25. package/dist/impostor/impostor.d.ts +1 -1
  26. package/dist/impostor/impostor.js +1 -1
  27. package/dist/impostor/ktx2/encode.js +5 -2
  28. package/dist/impostor/ktx2/encode.js.map +1 -1
  29. package/dist/impostor/ktx2/uastc.js +3 -2
  30. package/dist/impostor/ktx2/uastc.js.map +1 -1
  31. package/dist/impostor/ktx2/worker.js +0 -2
  32. package/dist/impostor/ktx2/worker.js.map +1 -1
  33. package/dist/impostor/mesh/card.d.ts +1 -1
  34. package/dist/impostor/mesh/index.d.ts +2 -2
  35. package/dist/impostor/mesh/index.js +3 -3
  36. package/dist/impostor/mesh/index.js.map +1 -1
  37. package/dist/index.d.ts +3 -6
  38. package/dist/index.js +3 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/instanced/camera.d.ts +13 -25
  41. package/dist/instanced/camera.js +17 -42
  42. package/dist/instanced/camera.js.map +1 -1
  43. package/dist/instanced/clusters.d.ts +54 -0
  44. package/dist/instanced/clusters.js +151 -0
  45. package/dist/instanced/clusters.js.map +1 -0
  46. package/dist/instanced/cull.d.ts +3 -3
  47. package/dist/instanced/cull.js +2 -2
  48. package/dist/instanced/cull.js.map +1 -1
  49. package/dist/instanced/instances.d.ts +39 -0
  50. package/dist/instanced/instances.js +104 -0
  51. package/dist/instanced/instances.js.map +1 -0
  52. package/dist/instanced/key.d.ts +1 -1
  53. package/dist/instanced/key.js +1 -1
  54. package/dist/instanced/key.js.map +1 -1
  55. package/dist/instanced/levels.d.ts +9 -9
  56. package/dist/instanced/levels.js +7 -6
  57. package/dist/instanced/levels.js.map +1 -1
  58. package/dist/instanced/lists.d.ts +26 -39
  59. package/dist/instanced/lists.js +42 -61
  60. package/dist/instanced/lists.js.map +1 -1
  61. package/dist/instanced/measure.d.ts +2 -2
  62. package/dist/instanced/measure.js +2 -2
  63. package/dist/instanced/meshes.d.ts +11 -9
  64. package/dist/instanced/meshes.js +26 -16
  65. package/dist/instanced/meshes.js.map +1 -1
  66. package/dist/instanced/mirror.d.ts +16 -12
  67. package/dist/instanced/mirror.js +51 -12
  68. package/dist/instanced/mirror.js.map +1 -1
  69. package/dist/instanced/raycast.d.ts +6 -9
  70. package/dist/instanced/raycast.js +15 -18
  71. package/dist/instanced/raycast.js.map +1 -1
  72. package/dist/instanced/rows.d.ts +15 -73
  73. package/dist/instanced/rows.js +16 -189
  74. package/dist/instanced/rows.js.map +1 -1
  75. package/dist/instanced/shape.d.ts +3 -1
  76. package/dist/instanced/shape.js +6 -3
  77. package/dist/instanced/shape.js.map +1 -1
  78. package/dist/instanced/sort.d.ts +32 -34
  79. package/dist/instanced/sort.js +162 -132
  80. package/dist/instanced/sort.js.map +1 -1
  81. package/dist/instanced/update.d.ts +16 -12
  82. package/dist/instanced/update.js +57 -84
  83. package/dist/instanced/update.js.map +1 -1
  84. package/dist/levels/compile/index.d.ts +4 -2
  85. package/dist/levels/compile/index.js +10 -2
  86. package/dist/levels/compile/index.js.map +1 -1
  87. package/dist/levels/compile/pipelines.d.ts +1 -1
  88. package/dist/levels/compile/pipelines.js +1 -6
  89. package/dist/levels/compile/pipelines.js.map +1 -1
  90. package/dist/levels/draw.d.ts +1 -1
  91. package/dist/levels/draw.js +3 -3
  92. package/dist/levels/fade.d.ts +13 -22
  93. package/dist/levels/fade.js +17 -38
  94. package/dist/levels/fade.js.map +1 -1
  95. package/dist/levels/index.d.ts +7 -7
  96. package/dist/levels/index.js +1 -1
  97. package/dist/levels/item.d.ts +10 -10
  98. package/dist/levels/item.js +15 -23
  99. package/dist/levels/item.js.map +1 -1
  100. package/dist/levels/load.d.ts +1 -1
  101. package/dist/levels/load.js +5 -3
  102. package/dist/levels/load.js.map +1 -1
  103. package/dist/levels/manager.d.ts +30 -31
  104. package/dist/levels/manager.js +75 -62
  105. package/dist/levels/manager.js.map +1 -1
  106. package/dist/levels/material.d.ts +2 -2
  107. package/dist/levels/material.js +2 -2
  108. package/dist/levels/renderer.d.ts +8 -5
  109. package/dist/levels/renderer.js +20 -4
  110. package/dist/levels/renderer.js.map +1 -1
  111. package/dist/levels/requests.d.ts +4 -1
  112. package/dist/levels/requests.js +3 -1
  113. package/dist/levels/requests.js.map +1 -1
  114. package/dist/loader/context.d.ts +9 -11
  115. package/dist/loader/context.js +12 -7
  116. package/dist/loader/context.js.map +1 -1
  117. package/dist/loader/entry.d.ts +4 -0
  118. package/dist/loader/entry.js +43 -0
  119. package/dist/loader/entry.js.map +1 -0
  120. package/dist/loader/index.d.ts +49 -35
  121. package/dist/loader/index.js +123 -135
  122. package/dist/loader/index.js.map +1 -1
  123. package/dist/loader/level.js +5 -5
  124. package/dist/loader/level.js.map +1 -1
  125. package/dist/loader/node.d.ts +26 -0
  126. package/dist/loader/node.js +199 -0
  127. package/dist/loader/node.js.map +1 -0
  128. package/dist/loader/request.d.ts +11 -44
  129. package/dist/loader/request.js +7 -47
  130. package/dist/loader/request.js.map +1 -1
  131. package/dist/loader/url.d.ts +10 -9
  132. package/dist/loader/url.js +21 -17
  133. package/dist/loader/url.js.map +1 -1
  134. package/dist/lod.d.ts +122 -62
  135. package/dist/lod.js +331 -187
  136. package/dist/lod.js.map +1 -1
  137. package/dist/meshopt.d.ts +1 -1
  138. package/dist/meshopt.js +3 -2
  139. package/dist/meshopt.js.map +1 -1
  140. package/dist/node-process.d.ts +5 -0
  141. package/dist/node-process.js +6 -0
  142. package/dist/node-process.js.map +1 -0
  143. package/dist/node.d.ts +2 -0
  144. package/dist/node.js +5 -0
  145. package/dist/node.js.map +1 -0
  146. package/dist/simplify/index.d.ts +2 -2
  147. package/dist/simplify/index.js +7 -7
  148. package/dist/simplify/index.js.map +1 -1
  149. package/dist/source/detail.d.ts +7 -2
  150. package/dist/source/detail.js +24 -22
  151. package/dist/source/detail.js.map +1 -1
  152. package/dist/source/sampler.js +5 -2
  153. package/dist/source/sampler.js.map +1 -1
  154. package/dist/three.d.ts +7 -7
  155. package/dist/three.js +4 -4
  156. package/dist/three.js.map +1 -1
  157. package/dist/wind/bounds.js +1 -1
  158. package/dist/wind/bounds.js.map +1 -1
  159. package/dist/wind/hooks.d.ts +1 -1
  160. package/dist/wind/hooks.js +1 -1
  161. package/dist/wind/index.d.ts +3 -3
  162. package/dist/wind/index.js +11 -9
  163. package/dist/wind/index.js.map +1 -1
  164. package/package.json +10 -6
  165. package/skills/lod/SKILL.md +65 -54
  166. package/dist/gpu.d.ts +0 -39
  167. package/dist/gpu.js +0 -41
  168. package/dist/gpu.js.map +0 -1
  169. package/dist/instanced/chunk.d.ts +0 -97
  170. package/dist/instanced/chunk.js +0 -156
  171. package/dist/instanced/chunk.js.map +0 -1
  172. package/dist/instanced/chunks.d.ts +0 -60
  173. package/dist/instanced/chunks.js +0 -208
  174. package/dist/instanced/chunks.js.map +0 -1
  175. package/dist/instanced/index.d.ts +0 -120
  176. package/dist/instanced/index.js +0 -290
  177. package/dist/instanced/index.js.map +0 -1
  178. package/dist/instanced/pages/buffers.d.ts +0 -37
  179. package/dist/instanced/pages/buffers.js +0 -15
  180. package/dist/instanced/pages/buffers.js.map +0 -1
  181. package/dist/instanced/pages/chunk.d.ts +0 -51
  182. package/dist/instanced/pages/chunk.js +0 -81
  183. package/dist/instanced/pages/chunk.js.map +0 -1
  184. package/dist/instanced/pages/index.d.ts +0 -74
  185. package/dist/instanced/pages/index.js +0 -269
  186. package/dist/instanced/pages/index.js.map +0 -1
  187. package/dist/instanced/pages/passes.d.ts +0 -21
  188. package/dist/instanced/pages/passes.js +0 -52
  189. package/dist/instanced/pages/passes.js.map +0 -1
  190. package/dist/instanced/pages/slots.d.ts +0 -11
  191. package/dist/instanced/pages/slots.js +0 -90
  192. package/dist/instanced/pages/slots.js.map +0 -1
  193. package/dist/instanced/pages/workgroup.d.ts +0 -14
  194. package/dist/instanced/pages/workgroup.js +0 -38
  195. package/dist/instanced/pages/workgroup.js.map +0 -1
  196. package/dist/levels/wait.d.ts +0 -27
  197. package/dist/levels/wait.js +0 -61
  198. package/dist/levels/wait.js.map +0 -1
  199. package/dist/loader/cache.d.ts +0 -12
  200. package/dist/loader/cache.js +0 -68
  201. package/dist/loader/cache.js.map +0 -1
  202. package/dist/loader/dependencies.d.ts +0 -32
  203. package/dist/loader/dependencies.js +0 -113
  204. 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"}
@@ -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 LodLoader extends Loader<LodLevel[], LodRequest> {
13
- private readonly cacheOptions?;
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
- /** URLs whose builds this loader serves without saving, once it has warned why. */
21
- private readonly uncached;
22
- constructor(manager?: LoadingManager, cacheOptions?: LodCacheOptions | undefined);
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 the cache, else from its source, which the first level loaded then takes. Empty levels
26
- * load with it, as does the source when it is the only drawable; other levels load when a camera needs them,
27
- * including a coarse stand-in while its first detail arrives, and each derived level is cached on its own and built
28
- * when first loaded. A level whose default threshold is measured from it is built with the ladder, as is every level
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 source's shape from its entry, else measured from the source and saved. */
37
- private shape;
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
- * A deferred level's bytes from its entry, else built from `spare`, the ladder's source, or from a source of its own:
40
- * the source level's carries onLevel effects. Disposes `spare` either way.
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
- * Build level `index` from `loaded`, and save it to `entry`, read before, when what it was built from can be validated
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 stay as they are, and a
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
- /** Save `bytes` to `entry`, read before, when what they were built from can be validated later; warn once otherwise. */
56
- private save;
57
- /** Builds of `url` are served without saving from now on, after one warning naming why; a build warmup fails instead. */
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
  }
@@ -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 { disposeRejected, disposeTree } from "../dispose.js";
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 { AssetDependencies, bundledModules } from "./dependencies.js";
11
+ import { entryOf } from "./entry.js";
14
12
  import { decodeLevel, encodeLevel, encodeShape, placedBox, readLevel, readShape, shapeOf } from "./level.js";
15
- import { auxiliary, cached, derived, levelEntry, normalize, shapeEntry, warmup } from "./request.js";
16
- import { assetPath, isLocal } from "./url.js";
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 LodLoader extends Loader {
26
- cacheOptions;
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
- /** URLs whose builds this loader serves without saving, once it has warned why. */
34
- uncached = new Set();
35
- constructor(manager, cacheOptions) {
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.cacheOptions = cacheOptions;
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 the cache, else from its source, which the first level loaded then takes. Empty levels
44
- * load with it, as does the source when it is the only drawable; other levels load when a camera needs them,
45
- * including a coarse stand-in while its first detail arrives, and each derived level is cached on its own and built
46
- * when first loaded. A level whose default threshold is measured from it is built with the ladder, as is every level
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 input = normalize(request, this.path);
55
- const { url, levels: requests } = input;
56
- // Only the inputs: what each build or the shape is saved with is captured by its own loads.
57
- const dependencies = new AssetDependencies(input.urls, this.manager);
58
- const context = new LodLoadContext(() => this.loadSource(url), input.onLevel);
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
- // vitecache resolves only same-origin paths to project files, so other sources build uncached.
62
- const modules = dependencies.requested.every(isLocal) ? await bundledModules(input.urls, this.manager) : undefined;
63
- const ladder = { ...input, modules };
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 { index, entry, bytes } of reads) {
70
- const level = bytes ?? (await this.persist(ladder, index, await context.source(), entry));
71
- if (!bytes)
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.shape(ladder, dependencies, () => context.source());
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("LodLoader: the source has no visible geometry to measure");
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 even when a warmup bakes it, as it is without one.
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(), "LodLoader");
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((context.take() ?? (await this.loadSource(url))).source, 0, { materials: true }));
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 source's shape from its entry, else measured from the source and saved. */
125
- async shape(ladder, dependencies, loadSource) {
126
- const { entry, bytes } = await cached(shapeEntry(ladder, dependencies, this.cacheOptions));
127
- if (bytes)
128
- return readShape(bytes);
129
- const { source, dependencies: read } = await loadSource();
130
- const shape = shapeOf(source);
131
- await this.save(ladder.url, entry, encodeShape(shape), read);
132
- return shape;
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
- * A deferred level's bytes from its entry, else built from `spare`, the ladder's source, or from a source of its own:
136
- * the source level's carries onLevel effects. Disposes `spare` either way.
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
- const { entry, bytes } = await cached(levelEntry(ladder, index, new AssetDependencies(ladder.urls, this.manager), this.cacheOptions));
140
- if (bytes) {
141
- if (spare)
142
- disposeTree(spare.source);
143
- return bytes;
144
- }
145
- const loaded = spare ?? (await this.loadSource(ladder.url));
146
- try {
147
- return await this.persist(ladder, index, loaded, entry);
148
- }
149
- finally {
150
- disposeTree(loaded.source);
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
- * Build level `index` from `loaded`, and save it to `entry`, read before, when what it was built from can be validated
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 = urls[auxiliary(index, name)];
163
- return asset === undefined ? undefined : this.loadAsset(asset, dependencies);
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, "LodLoader");
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
- const bytes = await encodeLevel(built, request.type, shapeOf(source), materialsOf(source));
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
- disposeTree(object);
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
- disposeTree(built, { materials: request.type !== "simplify" });
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 ??= createBakeRenderer();
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 stay as they are, and a
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
- void renderer?.then((made) => made.dispose(), () => { });
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, dependencies) {
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(`LodLoader: cannot load "${url}": register a GLTSLoader for .glts on the loading manager`);
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
- const object = objectOf(result, url);
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
- /** Loads what every camera draws before it picks a level: the empty levels, and the source if it is the only drawable. */
272
- async function preload(levels) {
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(`LodLoader: the handler for "${url}" did not load an Object3D or a glTF`);
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
@@ -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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"}