@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.
- 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 +54 -0
- package/dist/instanced/clusters.js +151 -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 +26 -39
- package/dist/instanced/lists.js +42 -61
- 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 +15 -73
- package/dist/instanced/rows.js +16 -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 +32 -34
- package/dist/instanced/sort.js +162 -132
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.d.ts +16 -12
- package/dist/instanced/update.js +57 -84
- 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 +331 -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 +24 -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 +7 -7
- package/dist/three.js +4 -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
|
@@ -21,7 +21,7 @@ export interface BakeImpostorOptions {
|
|
|
21
21
|
* sharp as they are at this height, not with the look of their small mips. Alpha-tested
|
|
22
22
|
* materials are read at full detail at every size, which holds their cut-out's coverage.
|
|
23
23
|
* Default: the height where it is sharp (see `texelPixels`, and `framePixels` for a
|
|
24
|
-
*
|
|
24
|
+
* CachedLodLoader level).
|
|
25
25
|
*/
|
|
26
26
|
maxPixels?: number;
|
|
27
27
|
/**
|
|
@@ -38,10 +38,10 @@ export interface BakeImpostorOptions {
|
|
|
38
38
|
/**
|
|
39
39
|
* Bake `object` (in its own space, ignoring its own transform) into an impostor, drawing
|
|
40
40
|
* with `renderer`, as three's PMREMGenerator does. Nested LODs are baked at their level 0,
|
|
41
|
-
*
|
|
41
|
+
* a Lod with every instance at its level 0. ImpostorMeshes are refused: bake
|
|
42
42
|
* from their source instead.
|
|
43
43
|
*
|
|
44
|
-
* `renderer` must be one made for bakes: make one with `createBakeRenderer`, as
|
|
44
|
+
* `renderer` must be one made for bakes: make one with `createBakeRenderer`, as CachedLodLoader
|
|
45
45
|
* does for itself and a .glts script that bakes does too. Such a renderer is initialised,
|
|
46
46
|
* clears to transparent black and only when told to (`autoClear = false`), and has no MRT
|
|
47
47
|
* and no XR session; the bake throws otherwise. Nor may its canvas be a square of a frame's size (resolution ×
|
|
@@ -12,10 +12,10 @@ import { fittedHalfSize } from "./fit.js";
|
|
|
12
12
|
/**
|
|
13
13
|
* Bake `object` (in its own space, ignoring its own transform) into an impostor, drawing
|
|
14
14
|
* with `renderer`, as three's PMREMGenerator does. Nested LODs are baked at their level 0,
|
|
15
|
-
*
|
|
15
|
+
* a Lod with every instance at its level 0. ImpostorMeshes are refused: bake
|
|
16
16
|
* from their source instead.
|
|
17
17
|
*
|
|
18
|
-
* `renderer` must be one made for bakes: make one with `createBakeRenderer`, as
|
|
18
|
+
* `renderer` must be one made for bakes: make one with `createBakeRenderer`, as CachedLodLoader
|
|
19
19
|
* does for itself and a .glts script that bakes does too. Such a renderer is initialised,
|
|
20
20
|
* clears to transparent black and only when told to (`autoClear = false`), and has no MRT
|
|
21
21
|
* and no XR session; the bake throws otherwise. Nor may its canvas be a square of a frame's size (resolution ×
|
|
@@ -35,6 +35,16 @@ export function bakeImpostor(object, renderer, options = {}) {
|
|
|
35
35
|
}
|
|
36
36
|
async function bake(object, renderer, options) {
|
|
37
37
|
checkBakeRenderer(renderer, "bakeImpostor");
|
|
38
|
+
const copy = await sourceForBake(object);
|
|
39
|
+
try {
|
|
40
|
+
return await bakeSource(copy.root, renderer, options);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
copy.dispose();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Bake `source`, a copy of the object that the bake may move and change. */
|
|
47
|
+
async function bakeSource(source, renderer, options) {
|
|
38
48
|
const layout = options.layout ?? "full";
|
|
39
49
|
const frames = options.frames ?? (layout === "hemi" ? 12 : 16);
|
|
40
50
|
const resolution = options.resolution ?? 128;
|
|
@@ -48,7 +58,6 @@ async function bake(object, renderer, options) {
|
|
|
48
58
|
if (options.maxPixels !== undefined && !(options.maxPixels > 0))
|
|
49
59
|
throw new Error("bakeImpostor: maxPixels must be > 0");
|
|
50
60
|
const cell = 2 ** Math.floor(Math.log2(resolution));
|
|
51
|
-
const source = sourceForBake(object);
|
|
52
61
|
source.matrix.identity();
|
|
53
62
|
source.matrix.decompose(source.position, source.quaternion, source.scale);
|
|
54
63
|
// Bones are descendants, so this also moves them; getVertexPosition reads bone.matrixWorld.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/bake/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAgC,MAAM,cAAc,CAAC;AACrH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAwD,MAAM,gBAAgB,CAAC;AAChJ,OAAO,EAAE,UAAU,EAAE,cAAc,EAAa,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAqB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAsC1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgB,EAAE,QAAkB,EAAE,UAA+B,EAAE;IAClG,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,MAAgB,EAAE,QAAkB,EAAE,OAA4B;IACpF,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC7G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACtH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC5H,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACxH,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpD,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/bake/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Object3D } from "three/webgpu";
|
|
2
|
+
import { type BakeCopy } from "../../bake.js";
|
|
2
3
|
/** A copy of `object` to bake, which the bake may move and change; ImpostorMeshes are refused. */
|
|
3
|
-
export declare function sourceForBake(object: Object3D):
|
|
4
|
+
export declare function sourceForBake(object: Object3D): Promise<BakeCopy>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bakeCopy } from "../../bake.js";
|
|
2
2
|
import { forEachMesh } from "../../source/detail.js";
|
|
3
3
|
import { isImpostorMesh } from "../../three.js";
|
|
4
4
|
/** A copy of `object` to bake, which the bake may move and change; ImpostorMeshes are refused. */
|
|
@@ -7,6 +7,6 @@ export function sourceForBake(object) {
|
|
|
7
7
|
if (isImpostorMesh(mesh))
|
|
8
8
|
throw new Error(`bakeImpostor: cannot bake an ImpostorMesh ("${mesh.name}"); bake from its source instead`);
|
|
9
9
|
});
|
|
10
|
-
return
|
|
10
|
+
return bakeCopy(object);
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/impostor/bake/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/impostor/bake/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,kGAAkG;AAClG,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,kCAAkC,CAAC,CAAC;IACxI,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -82,7 +82,7 @@ export declare const framePixels: (resolution?: number) => number;
|
|
|
82
82
|
* On-screen height of the object at which two atlas texels span one pixel: the default
|
|
83
83
|
* `LodLevel.maxPixels` of an impostor. An impostor blends filtered reads of several
|
|
84
84
|
* views, so it keeps the source's colour detail only down to about two texels per pixel.
|
|
85
|
-
* A
|
|
85
|
+
* A CachedLodLoader describes its levels before baking them, so its impostor levels default to
|
|
86
86
|
* `framePixels` instead: this height for a frame fitted to the bounding sphere, up to about
|
|
87
87
|
* 1.5 times lower than for the frame the bake fits.
|
|
88
88
|
*/
|
|
@@ -36,7 +36,7 @@ export const framePixels = (resolution = 128) => 2 ** Math.floor(Math.log2(resol
|
|
|
36
36
|
* On-screen height of the object at which two atlas texels span one pixel: the default
|
|
37
37
|
* `LodLevel.maxPixels` of an impostor. An impostor blends filtered reads of several
|
|
38
38
|
* views, so it keeps the source's colour detail only down to about two texels per pixel.
|
|
39
|
-
* A
|
|
39
|
+
* A CachedLodLoader describes its levels before baking them, so its impostor levels default to
|
|
40
40
|
* `framePixels` instead: this height for a frame fitted to the bounding sphere, up to about
|
|
41
41
|
* 1.5 times lower than for the frame the bake fits.
|
|
42
42
|
*/
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { read, write } from "ktx-parse";
|
|
2
|
-
|
|
2
|
+
import { inNode } from "../../node-process.js";
|
|
3
|
+
// Read when the module loads, which also happens in Node, as the vitecache plugin builds levels; Node before 21 has no navigator.
|
|
3
4
|
const cores = globalThis.navigator?.hardwareConcurrency ?? 4;
|
|
4
5
|
/**
|
|
5
6
|
* A worker per core but one, since a cold ladder's encodes take far longer than its bakes; at most 8, since each holds
|
|
@@ -52,7 +53,9 @@ function strips(data, size, srgb, parts) {
|
|
|
52
53
|
}
|
|
53
54
|
return jobs;
|
|
54
55
|
}
|
|
55
|
-
function encodeJob(job) {
|
|
56
|
+
async function encodeJob(job) {
|
|
57
|
+
if (inNode)
|
|
58
|
+
return (await import("./uastc.js")).encode(job);
|
|
56
59
|
return new Promise((resolve, reject) => {
|
|
57
60
|
queue.push({ job, resolve, reject });
|
|
58
61
|
queue.sort((a, b) => b.job.width * b.job.height - a.job.width * a.job.height);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/encode.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,8 +47,9 @@ async function load() {
|
|
|
47
47
|
const factory = (await import(/* @vite-ignore */ url)).default;
|
|
48
48
|
if (typeof factory !== "function")
|
|
49
49
|
throw new Error("the Basis encoder module has no factory");
|
|
50
|
-
// the module names its binary relative to its own URL, which a data: URL's is not: named, then given
|
|
51
|
-
|
|
50
|
+
// the module names its binary relative to its own URL, which a data: URL's is not: named, then given. It prints every
|
|
51
|
+
// image's progress, which nothing needs.
|
|
52
|
+
const basis = await factory({ wasmBinary: inflate(ENCODER_WASM), locateFile: (name) => name, print: () => { } });
|
|
52
53
|
if (!isBasis(basis))
|
|
53
54
|
throw new Error("the Basis encoder module lacks its bindings");
|
|
54
55
|
basis.initializeBasis();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uastc.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/uastc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAqB7D,uGAAuG;AACvG,IAAI,KAAiC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC;AAE3B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAO;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,8EAA8E;QAC9E,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,IAAI,MAAM,QAAQ,CAAC,CAAC;QACnI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,IAAI,MAAM,QAAQ,CAAC,CAAC;QAC5F,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,wBAAwB,kBAAkB,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,MAAM,OAAO,GAAY,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IACxE,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC9F,
|
|
1
|
+
{"version":3,"file":"uastc.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/uastc.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,6 @@ import { encode } from "./uastc.js";
|
|
|
2
2
|
export const url = import.meta.url;
|
|
3
3
|
const scope = Reflect.get(globalThis, "WorkerGlobalScope");
|
|
4
4
|
if (typeof scope === "function" && globalThis instanceof scope) {
|
|
5
|
-
// The encoder reports every image's progress on stdout, which Emscripten writes to console.log; nothing else here logs.
|
|
6
|
-
console.log = () => { };
|
|
7
5
|
addEventListener("message", (event) => {
|
|
8
6
|
encode(event.data).then((file) => reply({ file }, [file.buffer]), (error) => reply({ error: error instanceof Error ? error.message : String(error) }));
|
|
9
7
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/worker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAEnC,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;AACpE,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,UAAU,YAAY,KAAK,EAAE,CAAC;IAC/D,
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/worker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAEnC,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;AACpE,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,UAAU,YAAY,KAAK,EAAE,CAAC;IAC/D,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAwB,EAAE,EAAE;QACvD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EACxC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAC7F,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,OAAc,EAAE,WAA2B,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC"}
|
|
@@ -12,7 +12,7 @@ export interface CardInputs {
|
|
|
12
12
|
halfSize: Node<"float">;
|
|
13
13
|
/** frames per atlas side */
|
|
14
14
|
frames: Node<"float">;
|
|
15
|
-
/** where the card sits within an instance's space; identity except under
|
|
15
|
+
/** where the card sits within an instance's space; identity except under a Lod */
|
|
16
16
|
placement: Node<"mat4">;
|
|
17
17
|
}
|
|
18
18
|
/** The card as the surface reads it. */
|
|
@@ -43,7 +43,7 @@ export declare class ImpostorMesh extends Mesh<PlaneGeometry, ImpostorMaterial>
|
|
|
43
43
|
/** RGB (and a pad) per instance, once `setColorAt` was called. */
|
|
44
44
|
instanceColor: StorageInstancedBufferAttribute | null;
|
|
45
45
|
boundingSphere: Sphere | null;
|
|
46
|
-
/** Where the card sits within an instance's space (
|
|
46
|
+
/** Where the card sits within an instance's space (a Lod places it). */
|
|
47
47
|
readonly placement: Matrix4;
|
|
48
48
|
private disposed;
|
|
49
49
|
constructor(impostor: Impostor, count?: number, options?: ImpostorMeshOptions, material?: ImpostorMaterial);
|
|
@@ -62,7 +62,7 @@ export declare class ImpostorMesh extends Mesh<PlaneGeometry, ImpostorMaterial>
|
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* An ImpostorMesh like `template` for `count` instances, its card placed by `placement`
|
|
65
|
-
* within each instance's space (instance matrix × placement), as
|
|
65
|
+
* within each instance's space (instance matrix × placement), as a Lod draws it.
|
|
66
66
|
* It draws with the template's material, its tint and mip bias included; placement is
|
|
67
67
|
* per draw.
|
|
68
68
|
*/
|
|
@@ -46,7 +46,7 @@ export class ImpostorMesh extends Mesh {
|
|
|
46
46
|
/** RGB (and a pad) per instance, once `setColorAt` was called. */
|
|
47
47
|
instanceColor = null;
|
|
48
48
|
boundingSphere = null;
|
|
49
|
-
/** Where the card sits within an instance's space (
|
|
49
|
+
/** Where the card sits within an instance's space (a Lod places it). */
|
|
50
50
|
placement = new Matrix4();
|
|
51
51
|
disposed = false;
|
|
52
52
|
constructor(impostor, count = 1, options = {}, material) {
|
|
@@ -65,7 +65,7 @@ export class ImpostorMesh extends Mesh {
|
|
|
65
65
|
this.instanceMatrix = new StorageInstancedBufferAttribute(count, 16);
|
|
66
66
|
for (let i = 0; i < count; i++)
|
|
67
67
|
scratch.identity().toArray(this.instanceMatrix.array, i * 16);
|
|
68
|
-
setFadeSource(this, {
|
|
68
|
+
setFadeSource(this, { slots: null, radius: boundingRadius(impostor.box), tint: new Color(1, 1, 1) });
|
|
69
69
|
}
|
|
70
70
|
setMatrixAt(index, matrix) {
|
|
71
71
|
matrix.toArray(this.instanceMatrix.array, index * 16);
|
|
@@ -159,7 +159,7 @@ const ray = new Ray();
|
|
|
159
159
|
const point = new Vector3();
|
|
160
160
|
/**
|
|
161
161
|
* An ImpostorMesh like `template` for `count` instances, its card placed by `placement`
|
|
162
|
-
* within each instance's space (instance matrix × placement), as
|
|
162
|
+
* within each instance's space (instance matrix × placement), as a Lod draws it.
|
|
163
163
|
* It draws with the template's material, its tint and mip bias included; placement is
|
|
164
164
|
* per draw.
|
|
165
165
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/mesh/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,IAAI,EACJ,aAAa,EACb,GAAG,EACH,MAAM,EACN,+BAA+B,EAC/B,OAAO,GAGR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAiB,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAmBjD,4CAA4C;AAC5C,SAAS,SAAS,CAAC,OAA4B;IAC7C,MAAM,EAAE,SAAS,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACpF,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,SAAS,EAAE,CAAC,CAAC;IACtH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,QAAQ,EAAE,CAAC,CAAC;IACpI,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,EAAE,CAAC,CAAC;IACzG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACvB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAE5B;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAa,SAAQ,IAAqC;IAC5D,cAAc,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAW;IAC5B,iCAAiC;IACjC,OAAO,CAAsB;IAC7B,uBAAuB;IACvB,KAAK,CAAS;IACd,2EAA2E;IAC3E,cAAc,CAAkC;IAChD,kEAAkE;IAClE,aAAa,GAA2C,IAAI,CAAC;IAC7D,cAAc,GAAkB,IAAI,CAAC;IACrC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/mesh/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { CachedLodLoader, type CachedLodLoaderOptions } from "./loader/index.js";
|
|
2
2
|
export { type LodLevelRequest, type LodRequest } from "./loader/request.js";
|
|
3
|
-
export { type LodCacheOptions } from "./loader/cache.js";
|
|
4
3
|
export { encodeMeshAsync, decodeMeshAsync } from "./codec/mesh.js";
|
|
5
|
-
export { LodGpu, type LodGpuOptions } from "./gpu.js";
|
|
6
4
|
export { Lod, type LodOptions } from "./lod.js";
|
|
7
5
|
export { Wind, type WindOptions, type SwayOptions } from "./wind/index.js";
|
|
8
|
-
export {
|
|
6
|
+
export { type LodCluster } from "./instanced/clusters.js";
|
|
9
7
|
export { type CullDistance } from "./instanced/cull.js";
|
|
10
|
-
export { InstancedLodChunk, type InstancedLodChunkParameters } from "./instanced/chunk.js";
|
|
11
|
-
export { type InstancedLodIntersection } from "./instanced/raycast.js";
|
|
12
8
|
export { type LodLevel } from "./levels/index.js";
|
|
13
9
|
export { type SimplifyOptions, simplify } from "./simplify/index.js";
|
|
14
10
|
export { type BakeMeshOptions, bakeMesh } from "./baked/index.js";
|
|
@@ -19,3 +15,4 @@ export { type ImpostorMeshOptions, ImpostorMesh } from "./impostor/mesh/index.js
|
|
|
19
15
|
export { cosine } from "./impostor/mesh/surface.js";
|
|
20
16
|
export { type Impostor, type ImpostorLayout, type ImpostorMap } from "./impostor/impostor.js";
|
|
21
17
|
export { encodeImpostorAsync, decodeImpostorAsync } from "./impostor/codec.js";
|
|
18
|
+
export { type FoliageOptions, Foliage, foliage, foliageModel, foliageLevels } from "./foliage.js";
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { CachedLodLoader } from "./loader/index.js";
|
|
2
2
|
export {} from "./loader/request.js";
|
|
3
|
-
export {} from "./loader/cache.js";
|
|
4
3
|
export { encodeMeshAsync, decodeMeshAsync } from "./codec/mesh.js";
|
|
5
|
-
export { LodGpu } from "./gpu.js";
|
|
6
4
|
export { Lod } from "./lod.js";
|
|
7
5
|
export { Wind } from "./wind/index.js";
|
|
8
|
-
export {
|
|
6
|
+
export {} from "./instanced/clusters.js";
|
|
9
7
|
export {} from "./instanced/cull.js";
|
|
10
|
-
export { InstancedLodChunk } from "./instanced/chunk.js";
|
|
11
|
-
export {} from "./instanced/raycast.js";
|
|
12
8
|
export {} from "./levels/index.js";
|
|
13
9
|
export { simplify } from "./simplify/index.js";
|
|
14
10
|
export { bakeMesh } from "./baked/index.js";
|
|
@@ -19,4 +15,5 @@ export { ImpostorMesh } from "./impostor/mesh/index.js";
|
|
|
19
15
|
export { cosine } from "./impostor/mesh/surface.js";
|
|
20
16
|
export {} from "./impostor/impostor.js";
|
|
21
17
|
export { encodeImpostorAsync, decodeImpostorAsync } from "./impostor/codec.js";
|
|
18
|
+
export { Foliage, foliage, foliageModel, foliageLevels } from "./foliage.js";
|
|
22
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA+B,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAyC,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,GAAG,EAAmB,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,IAAI,EAAsC,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAmB,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAqB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAiB,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAwB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAwB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAA4B,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAA4B,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAwD,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAuB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -2,11 +2,7 @@ import { Matrix4, type Camera, type Vector3 } from "three/webgpu";
|
|
|
2
2
|
import type { d } from "typegpu";
|
|
3
3
|
import type { EncodedLevels } from "../levels/index.js";
|
|
4
4
|
import type { DrawLevels } from "../levels/draw.js";
|
|
5
|
-
|
|
6
|
-
import type { Cull } from "./cull.js";
|
|
7
|
-
import type { CameraLists } from "./lists.js";
|
|
8
|
-
import type { InstanceShape } from "./shape.js";
|
|
9
|
-
/** A camera in an InstancedLod's space (see `localCamera`). */
|
|
5
|
+
/** A camera in a Lod's space (see `localCamera`). */
|
|
10
6
|
export interface LocalCamera {
|
|
11
7
|
levels: d.Infer<typeof DrawLevels>;
|
|
12
8
|
eye: Vector3;
|
|
@@ -21,26 +17,18 @@ export interface Loading {
|
|
|
21
17
|
progress: number;
|
|
22
18
|
}
|
|
23
19
|
/**
|
|
24
|
-
* `camera`, drawing into a target `height` pixels tall (see screenOf), in the space of `space`,
|
|
25
|
-
* levels of `encoded` as levelsToDraw reads them for it, `forced` drawn alone if not null, where it looks from and
|
|
26
|
-
* pixels per unit.
|
|
20
|
+
* `camera`, drawing into a target `height` pixels tall (see screenOf), in the space of `space`, a Lod's world matrix:
|
|
21
|
+
* the levels of `encoded` as levelsToDraw reads them for it, `forced` drawn alone if not null, where it looks from and
|
|
22
|
+
* its pixels per unit, `quality` times what it measures.
|
|
27
23
|
*/
|
|
28
|
-
export declare function localCamera(camera: Camera, height: number, space: Matrix4, encoded: EncodedLevels, forced: number | null): LocalCamera;
|
|
24
|
+
export declare function localCamera(camera: Camera, height: number, space: Matrix4, encoded: EncodedLevels, forced: number | null, quality: number): LocalCamera;
|
|
29
25
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
26
|
+
* The levels whose meshes draw for a camera seeing instances of the heights `seen`, with what is loaded: those
|
|
27
|
+
* levelsToDraw draws at such a height with the levels of `loaded`, and while an arrival is under way those of `before`
|
|
28
|
+
* too, as levelsToDraw draws only what one or the other draws until the arrival ends; and `only`, the bit of the one
|
|
29
|
+
* level they all draw without a fade while no arrival is under way, else 0.
|
|
32
30
|
*/
|
|
33
|
-
export declare function
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
shape: InstanceShape;
|
|
38
|
-
encoded: EncodedLevels;
|
|
39
|
-
}): void;
|
|
40
|
-
/**
|
|
41
|
-
* The levels whose meshes draw for the camera of `found` with what is loaded: those levelsToDraw draws at a height
|
|
42
|
-
* some chunk's instances can have, with the levels of `loaded`, and while an arrival is under way those of `before`
|
|
43
|
-
* too, as levelsToDraw draws only what one or the other draws until the arrival ends. Sets `found.onlyLevel` too.
|
|
44
|
-
* Worked out again only once what that reads changed.
|
|
45
|
-
*/
|
|
46
|
-
export declare function shownBy(found: CameraLists, levels: LocalCamera["levels"], encoded: EncodedLevels, { loaded, before, progress }: Loading): number;
|
|
31
|
+
export declare function shownBy(seen: readonly (readonly [number, number])[], levels: LocalCamera["levels"], encoded: EncodedLevels, { loaded, before, progress }: Loading): {
|
|
32
|
+
shown: number;
|
|
33
|
+
only: number;
|
|
34
|
+
};
|
package/dist/instanced/camera.js
CHANGED
|
@@ -1,60 +1,36 @@
|
|
|
1
1
|
import { Matrix4 } from "three/webgpu";
|
|
2
|
-
import { levelsToLoad } from "../levels/load.js";
|
|
3
2
|
import { screenOf } from "../levels/screen.js";
|
|
4
|
-
|
|
5
|
-
/** How much wider than ChunkSet.heights gives them the heights a level mesh is shown for are, relatively. */
|
|
3
|
+
/** How much wider than ClusterView gives them the heights a level mesh is shown for are, relatively. */
|
|
6
4
|
const SLACK = 1e-4;
|
|
7
5
|
const inverse = new Matrix4();
|
|
8
6
|
/**
|
|
9
|
-
* `camera`, drawing into a target `height` pixels tall (see screenOf), in the space of `space`,
|
|
10
|
-
* levels of `encoded` as levelsToDraw reads them for it, `forced` drawn alone if not null, where it looks from and
|
|
11
|
-
* pixels per unit.
|
|
7
|
+
* `camera`, drawing into a target `height` pixels tall (see screenOf), in the space of `space`, a Lod's world matrix:
|
|
8
|
+
* the levels of `encoded` as levelsToDraw reads them for it, `forced` drawn alone if not null, where it looks from and
|
|
9
|
+
* its pixels per unit, `quality` times what it measures.
|
|
12
10
|
*/
|
|
13
|
-
export function localCamera(camera, height, space, encoded, forced) {
|
|
11
|
+
export function localCamera(camera, height, space, encoded, forced, quality) {
|
|
14
12
|
const screen = screenOf(camera, height);
|
|
15
13
|
// Checked before anything reads the thresholds.
|
|
16
14
|
const levels = encoded.get(forced, !screen.ortho);
|
|
17
15
|
const eye = screen.eye.applyMatrix4(inverse.copy(space).invert());
|
|
18
|
-
// Heights are measured in the
|
|
19
|
-
const scale = screen.scale *
|
|
16
|
+
// Heights are measured in the Lod's space: an orthographic camera's size scales with it.
|
|
17
|
+
const scale = screen.scale * quality * (screen.ortho ? space.getMaxScaleOnAxis() : 1);
|
|
20
18
|
return { levels, eye, scale, ortho: screen.ortho };
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* The levels whose meshes draw for a camera seeing instances of the heights `seen`, with what is loaded: those
|
|
22
|
+
* levelsToDraw draws at such a height with the levels of `loaded`, and while an arrival is under way those of `before`
|
|
23
|
+
* too, as levelsToDraw draws only what one or the other draws until the arrival ends; and `only`, the bit of the one
|
|
24
|
+
* level they all draw without a fade while no arrival is under way, else 0.
|
|
25
25
|
*/
|
|
26
|
-
export function
|
|
27
|
-
const key = found.heightsKey.start();
|
|
28
|
-
// An orthographic camera measures heights alike from anywhere.
|
|
29
|
-
if (!ortho)
|
|
30
|
-
key.put(eye.x).put(eye.y).put(eye.z);
|
|
31
|
-
if (!key.screen(scale, ortho, levels, cull, shape.source).put(chunks.version).end())
|
|
32
|
-
return;
|
|
33
|
-
found.heights = Array.from(chunks.heights(shape.source, eye, scale, ortho, cull));
|
|
34
|
-
found.wanted = levelsToLoad(found.heights, encoded.heights(levels));
|
|
35
|
-
found.heightsVersion++;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* The levels whose meshes draw for the camera of `found` with what is loaded: those levelsToDraw draws at a height
|
|
39
|
-
* some chunk's instances can have, with the levels of `loaded`, and while an arrival is under way those of `before`
|
|
40
|
-
* too, as levelsToDraw draws only what one or the other draws until the arrival ends. Sets `found.onlyLevel` too.
|
|
41
|
-
* Worked out again only once what that reads changed.
|
|
42
|
-
*/
|
|
43
|
-
export function shownBy(found, levels, encoded, { loaded, before, progress }) {
|
|
26
|
+
export function shownBy(seen, levels, encoded, { loaded, before, progress }) {
|
|
44
27
|
const arriving = progress < 1 && before !== loaded;
|
|
45
|
-
if (!found.shownKey
|
|
46
|
-
.start()
|
|
47
|
-
.put(found.heightsVersion)
|
|
48
|
-
.put(loaded)
|
|
49
|
-
.put(arriving ? before : loaded)
|
|
50
|
-
.end())
|
|
51
|
-
return found.shown;
|
|
52
28
|
const now = encoded.heights(levels, loaded);
|
|
53
29
|
const then = arriving ? encoded.heights(levels, before) : null;
|
|
54
30
|
let shown = 0;
|
|
55
|
-
// What every
|
|
56
|
-
let common =
|
|
57
|
-
for (const [shortest, tallest] of
|
|
31
|
+
// What every range draws.
|
|
32
|
+
let common = seen.length > 0 ? ~0 : 0;
|
|
33
|
+
for (const [shortest, tallest] of seen) {
|
|
58
34
|
// The GPU measures an instance's height in f32: a range a little wider holds every height it gets.
|
|
59
35
|
const low = shortest * (1 - SLACK);
|
|
60
36
|
const high = tallest * (1 + SLACK);
|
|
@@ -62,9 +38,8 @@ export function shownBy(found, levels, encoded, { loaded, before, progress }) {
|
|
|
62
38
|
shown |= drawn;
|
|
63
39
|
common &= drawn;
|
|
64
40
|
}
|
|
65
|
-
found.shown = shown;
|
|
66
41
|
// One level alone: drawnIn holds a fading level's finer neighbour too.
|
|
67
|
-
|
|
68
|
-
return shown;
|
|
42
|
+
const only = !arriving && common === shown && (shown & (shown - 1)) === 0 ? shown : 0;
|
|
43
|
+
return { shown, only };
|
|
69
44
|
}
|
|
70
45
|
//# sourceMappingURL=camera.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/instanced/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,cAAc,CAAC;AAIlE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/instanced/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,cAAc,CAAC;AAIlE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoB/C,wGAAwG;AACxG,MAAM,KAAK,GAAG,IAAI,CAAC;AAEnB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,MAAc,EAAE,KAAc,EAAE,OAAsB,EAAE,MAAqB,EAAE,OAAe;IACxI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,gDAAgD;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,yFAAyF;IACzF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,IAA4C,EAAE,MAA6B,EAAE,OAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAW;IAChK,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,IAAI,MAAM,KAAK,MAAM,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,0BAA0B;IAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,mGAAmG;QACnG,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,KAAK,IAAI,KAAK,CAAC;QACf,MAAM,IAAI,KAAK,CAAC;IAClB,CAAC;IACD,uEAAuE;IACvE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Box3, Sphere, type Frustum } from "three/webgpu";
|
|
2
|
+
import type { LocalCamera } from "./camera.js";
|
|
3
|
+
import type { Cull } from "./cull.js";
|
|
4
|
+
import type { Measured } from "./instances.js";
|
|
5
|
+
import type { InstanceShape } from "./shape.js";
|
|
6
|
+
/**
|
|
7
|
+
* A range of a Lod's instances, `count` from `start`, which draw inside `boundingBox` in the Lod's space, with the
|
|
8
|
+
* smallest scale of their matrices' longest axes and the largest stretch of any direction when known.
|
|
9
|
+
*/
|
|
10
|
+
export interface LodCluster {
|
|
11
|
+
start: number;
|
|
12
|
+
count: number;
|
|
13
|
+
boundingBox: Box3;
|
|
14
|
+
minScale?: number;
|
|
15
|
+
maxScale?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Bound every cluster of `lod` into `bounds`, its survivors grown by up to `grow`: what the level meshes are culled and
|
|
19
|
+
* boxed by, which three's Box3.setFromObject reads. Unbounded instances give an infinite sphere and an empty box.
|
|
20
|
+
*/
|
|
21
|
+
export declare function boundClusters(lod: ClusterSource, measured: Measured | null, shape: InstanceShape, grow: number, bounds: {
|
|
22
|
+
sphere: Sphere;
|
|
23
|
+
box: Box3;
|
|
24
|
+
}): void;
|
|
25
|
+
/** What a camera sees of a Lod's instances (see `ClusterView.see`). */
|
|
26
|
+
export declare class ClusterView {
|
|
27
|
+
/** The ranges the camera sees, start and count, flat, clipped to `count`. */
|
|
28
|
+
readonly ranges: number[];
|
|
29
|
+
/** How many instances the ranges hold. */
|
|
30
|
+
instances: number;
|
|
31
|
+
/** Whether every range seen lies wholly inside the camera's frustum. */
|
|
32
|
+
inside: boolean;
|
|
33
|
+
/** The heights the instances of every cluster within cullDistance can have, shortest and tallest: what loads. */
|
|
34
|
+
readonly heights: [number, number][];
|
|
35
|
+
/** The same, of the clusters seen: what draws. */
|
|
36
|
+
readonly seen: [number, number][];
|
|
37
|
+
/** Whether nothing bounds the instances: a storage instanceMatrix with neither clusters nor a boundingBox. */
|
|
38
|
+
unbounded: boolean;
|
|
39
|
+
/** See the instances of `lod` from `camera` through `frustum`, both in the Lod's space, thinned out by `cull`. */
|
|
40
|
+
see(lod: ClusterSource, measured: Measured | null, shape: InstanceShape, frustum: Frustum, camera: LocalCamera, cull: Cull | null): void;
|
|
41
|
+
}
|
|
42
|
+
/** What clusters a Lod's instances: the InstancedMesh-shaped fields of a Lod. */
|
|
43
|
+
export interface ClusterSource {
|
|
44
|
+
readonly count: number;
|
|
45
|
+
readonly boundingBox: Box3 | null;
|
|
46
|
+
readonly clusters: readonly LodCluster[] | undefined;
|
|
47
|
+
}
|
|
48
|
+
/** The box around `measured`'s instances at every level and its sway. */
|
|
49
|
+
export declare function measuredBox({ originBox, maxScale }: Measured, shape: InstanceShape, into?: Box3): Box3;
|
|
50
|
+
/**
|
|
51
|
+
* Throws unless `clusters` are ranges of a Lod's `capacity` instances, disjoint, each with a box and its scales as
|
|
52
|
+
* `LodCluster` says. Disjointness is checked again only once a range changed: `last` holds the ranges last checked.
|
|
53
|
+
*/
|
|
54
|
+
export declare function checkClusters(clusters: readonly LodCluster[], capacity: number, last: number[]): void;
|