@drawcall/lod 0.2.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 +6 -7
- package/dist/bake.d.ts +36 -0
- package/dist/bake.js +176 -0
- package/dist/bake.js.map +1 -0
- package/dist/baked/codec.d.ts +3 -6
- package/dist/baked/codec.js +48 -154
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.d.ts +6 -3
- package/dist/baked/coverage.js +6 -3
- package/dist/baked/coverage.js.map +1 -1
- package/dist/baked/fields.d.ts +9 -0
- package/dist/baked/fields.js +22 -0
- package/dist/baked/fields.js.map +1 -0
- package/dist/baked/index.d.ts +14 -8
- package/dist/baked/index.js +24 -22
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.d.ts +4 -3
- package/dist/baked/interior/faces.js +16 -11
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.d.ts +7 -10
- package/dist/baked/interior/material.js +29 -36
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.d.ts +1 -1
- package/dist/baked/interior/rooms.js +2 -2
- package/dist/baked/interior/rooms.js.map +1 -1
- package/dist/baked/low.js +5 -4
- package/dist/baked/low.js.map +1 -1
- package/dist/baked/raster.js +6 -6
- package/dist/baked/raster.js.map +1 -1
- package/dist/baked/textures.d.ts +17 -0
- package/dist/baked/textures.js +95 -0
- package/dist/baked/textures.js.map +1 -0
- package/dist/baked/transfer.js +19 -18
- package/dist/baked/transfer.js.map +1 -1
- package/dist/baked/unwrap.js +4 -3
- package/dist/baked/unwrap.js.map +1 -1
- package/dist/baked/xatlas.js.map +1 -1
- package/dist/codec/container.d.ts +8 -0
- package/dist/codec/container.js +63 -0
- package/dist/codec/container.js.map +1 -0
- package/dist/codec/mesh.d.ts +8 -0
- package/dist/{mesh/codec.js → codec/mesh.js} +80 -52
- package/dist/codec/mesh.js.map +1 -0
- package/dist/dispose.d.ts +8 -5
- package/dist/dispose.js +22 -24
- 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/atlas.d.ts +4 -4
- package/dist/impostor/bake/atlas.js +12 -12
- package/dist/impostor/bake/atlas.js.map +1 -1
- package/dist/impostor/bake/fit.d.ts +8 -0
- package/dist/impostor/bake/fit.js +28 -0
- package/dist/impostor/bake/fit.js.map +1 -0
- package/dist/impostor/bake/index.d.ts +22 -14
- package/dist/impostor/bake/index.js +50 -134
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.d.ts +3 -3
- package/dist/impostor/bake/materials.js +51 -13
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/bake/sheet.d.ts +8 -0
- package/dist/impostor/bake/sheet.js +90 -0
- package/dist/impostor/bake/sheet.js.map +1 -0
- package/dist/impostor/bake/source.d.ts +3 -2
- package/dist/impostor/bake/source.js +9 -20
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/codec.d.ts +4 -5
- package/dist/impostor/codec.js +36 -109
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/impostor.d.ts +31 -7
- package/dist/impostor/impostor.js +21 -6
- package/dist/impostor/impostor.js.map +1 -1
- package/dist/impostor/ktx2/encode.d.ts +26 -0
- package/dist/impostor/ktx2/encode.js +120 -0
- package/dist/impostor/ktx2/encode.js.map +1 -0
- package/dist/impostor/ktx2/transcode.d.ts +3 -0
- package/dist/impostor/ktx2/transcode.js +99 -0
- package/dist/impostor/ktx2/transcode.js.map +1 -0
- package/dist/impostor/ktx2/uastc.d.ts +7 -0
- package/dist/impostor/ktx2/uastc.js +65 -0
- package/dist/impostor/ktx2/uastc.js.map +1 -0
- package/dist/impostor/ktx2/wasm/encoder.d.ts +4 -0
- package/dist/impostor/ktx2/wasm/encoder.js +10 -0
- package/dist/impostor/ktx2/wasm/encoder.js.map +1 -0
- package/dist/impostor/ktx2/wasm/transcoder.d.ts +3 -0
- package/dist/impostor/ktx2/wasm/transcoder.js +9 -0
- package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -0
- package/dist/impostor/ktx2/worker.d.ts +1 -0
- package/dist/impostor/ktx2/worker.js +10 -0
- package/dist/impostor/ktx2/worker.js.map +1 -0
- package/dist/impostor/mesh/card.d.ts +4 -4
- package/dist/impostor/mesh/card.js +7 -7
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +7 -6
- package/dist/impostor/mesh/index.js +10 -11
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +18 -9
- package/dist/impostor/mesh/material.js +40 -27
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +1 -1
- package/dist/impostor/mesh/surface.js +13 -9
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/mesh/textures.d.ts +3 -3
- package/dist/impostor/mesh/textures.js +24 -34
- package/dist/impostor/mesh/textures.js.map +1 -1
- package/dist/index.d.ts +13 -11
- package/dist/index.js +12 -10
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +34 -0
- package/dist/instanced/camera.js +45 -0
- package/dist/instanced/camera.js.map +1 -0
- 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 +28 -0
- package/dist/instanced/cull.js +22 -0
- package/dist/instanced/cull.js.map +1 -0
- 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 +19 -0
- package/dist/instanced/key.js +45 -0
- package/dist/instanced/key.js.map +1 -0
- package/dist/instanced/levels.d.ts +60 -0
- package/dist/instanced/levels.js +131 -0
- package/dist/instanced/levels.js.map +1 -0
- package/dist/instanced/lists.d.ts +57 -0
- package/dist/instanced/lists.js +114 -0
- package/dist/instanced/lists.js.map +1 -0
- package/dist/instanced/measure.d.ts +28 -0
- package/dist/instanced/measure.js +203 -0
- package/dist/instanced/measure.js.map +1 -0
- package/dist/instanced/meshes.d.ts +44 -51
- package/dist/instanced/meshes.js +167 -179
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +24 -0
- package/dist/instanced/mirror.js +76 -0
- package/dist/instanced/mirror.js.map +1 -0
- package/dist/instanced/raycast.d.ts +10 -11
- package/dist/instanced/raycast.js +31 -41
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +50 -0
- package/dist/instanced/rows.js +36 -0
- package/dist/instanced/rows.js.map +1 -0
- package/dist/instanced/shape.d.ts +27 -0
- package/dist/instanced/shape.js +54 -0
- package/dist/instanced/shape.js.map +1 -0
- package/dist/instanced/sort.d.ts +61 -0
- package/dist/instanced/sort.js +192 -0
- package/dist/instanced/sort.js.map +1 -0
- package/dist/instanced/update.d.ts +34 -0
- package/dist/instanced/update.js +180 -0
- package/dist/instanced/update.js.map +1 -0
- package/dist/levels/bounds.d.ts +21 -0
- package/dist/levels/bounds.js +42 -0
- package/dist/levels/bounds.js.map +1 -0
- package/dist/levels/cameras.d.ts +48 -0
- package/dist/levels/cameras.js +122 -0
- package/dist/levels/cameras.js.map +1 -0
- package/dist/levels/compile/contexts.d.ts +30 -0
- package/dist/levels/compile/contexts.js +18 -0
- package/dist/levels/compile/contexts.js.map +1 -0
- package/dist/levels/compile/index.d.ts +41 -0
- package/dist/levels/compile/index.js +193 -0
- package/dist/levels/compile/index.js.map +1 -0
- package/dist/levels/compile/pipelines.d.ts +26 -0
- package/dist/levels/compile/pipelines.js +172 -0
- package/dist/levels/compile/pipelines.js.map +1 -0
- package/dist/levels/compiles.d.ts +29 -0
- package/dist/levels/compiles.js +50 -0
- package/dist/levels/compiles.js.map +1 -0
- package/dist/levels/draw.d.ts +102 -0
- package/dist/levels/draw.js +401 -0
- package/dist/levels/draw.js.map +1 -0
- package/dist/levels/fade.d.ts +60 -0
- package/dist/levels/fade.js +129 -0
- package/dist/levels/fade.js.map +1 -0
- package/dist/levels/index.d.ts +99 -0
- package/dist/levels/index.js +155 -0
- package/dist/levels/index.js.map +1 -0
- package/dist/levels/item.d.ts +38 -0
- package/dist/levels/item.js +89 -0
- package/dist/levels/item.js.map +1 -0
- package/dist/levels/load.d.ts +31 -0
- package/dist/levels/load.js +144 -0
- package/dist/levels/load.js.map +1 -0
- package/dist/levels/manager.d.ts +158 -0
- package/dist/levels/manager.js +352 -0
- package/dist/levels/manager.js.map +1 -0
- package/dist/{material.d.ts → levels/material.d.ts} +2 -2
- package/dist/{material.js → levels/material.js} +6 -5
- package/dist/levels/material.js.map +1 -0
- package/dist/levels/renderer.d.ts +32 -0
- package/dist/levels/renderer.js +57 -0
- package/dist/levels/renderer.js.map +1 -0
- package/dist/levels/requests.d.ts +52 -0
- package/dist/levels/requests.js +97 -0
- package/dist/levels/requests.js.map +1 -0
- package/dist/levels/screen.d.ts +14 -0
- package/dist/levels/screen.js +21 -0
- package/dist/levels/screen.js.map +1 -0
- package/dist/loader/build.d.ts +10 -0
- package/dist/loader/build.js +28 -0
- package/dist/loader/build.js.map +1 -0
- package/dist/loader/context.d.ts +44 -0
- package/dist/loader/context.js +96 -0
- package/dist/loader/context.js.map +1 -0
- 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 +76 -0
- package/dist/loader/index.js +272 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/level.d.ts +41 -0
- package/dist/loader/level.js +140 -0
- package/dist/loader/level.js.map +1 -0
- 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 +54 -0
- package/dist/loader/request.js +19 -0
- package/dist/loader/request.js.map +1 -0
- package/dist/loader/url.d.ts +10 -6
- package/dist/loader/url.js +22 -14
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +144 -43
- package/dist/lod.js +354 -163
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +6 -0
- package/dist/meshopt.js +20 -0
- package/dist/meshopt.js.map +1 -0
- 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/cards.d.ts +14 -0
- package/dist/simplify/cards.js +128 -0
- package/dist/simplify/cards.js.map +1 -0
- package/dist/{simplify.d.ts → simplify/index.d.ts} +8 -5
- package/dist/{simplify.js → simplify/index.js} +45 -27
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +9 -23
- package/dist/{bounds.js → source/detail.js} +28 -58
- package/dist/source/detail.js.map +1 -0
- package/dist/source/deviation.js +6 -6
- package/dist/source/deviation.js.map +1 -1
- package/dist/source/{shading.d.ts → evaluator.d.ts} +10 -10
- package/dist/source/{shading.js → evaluator.js} +5 -5
- package/dist/source/evaluator.js.map +1 -0
- package/dist/source/{trace.d.ts → raycaster.d.ts} +6 -6
- package/dist/source/{trace.js → raycaster.js} +8 -8
- package/dist/source/raycaster.js.map +1 -0
- package/dist/source/{texels.d.ts → sampler.d.ts} +1 -1
- package/dist/source/{texels.js → sampler.js} +8 -5
- package/dist/source/sampler.js.map +1 -0
- package/dist/source/source.d.ts +1 -1
- package/dist/source/source.js +1 -1
- package/dist/source/source.js.map +1 -1
- package/dist/source/surface.js +1 -1
- package/dist/source/surface.js.map +1 -1
- package/dist/task.d.ts +6 -0
- package/dist/{pause.js → task.js} +5 -5
- package/dist/task.js.map +1 -0
- package/dist/three.d.ts +19 -30
- package/dist/three.js +30 -57
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +8 -12
- package/dist/tsl.js +11 -39
- package/dist/tsl.js.map +1 -1
- package/dist/typegpu.d.ts +37 -0
- package/dist/typegpu.js +37 -0
- package/dist/typegpu.js.map +1 -0
- package/dist/wind/bounds.js +3 -3
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.d.ts +7 -4
- package/dist/wind/hooks.js +5 -2
- package/dist/wind/hooks.js.map +1 -1
- package/dist/wind/index.d.ts +4 -4
- package/dist/wind/index.js +25 -23
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +2 -0
- package/dist/wind/sway.js +4 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +24 -10
- package/skills/lod/SKILL.md +120 -32
- package/dist/bounds.js.map +0 -1
- package/dist/compile.d.ts +0 -4
- package/dist/compile.js +0 -100
- package/dist/compile.js.map +0 -1
- package/dist/deferred.d.ts +0 -12
- package/dist/deferred.js +0 -27
- package/dist/deferred.js.map +0 -1
- package/dist/fade.d.ts +0 -36
- package/dist/fade.js +0 -112
- package/dist/fade.js.map +0 -1
- package/dist/instanced/args.d.ts +0 -20
- package/dist/instanced/args.js +0 -77
- package/dist/instanced/args.js.map +0 -1
- package/dist/instanced/blocks.d.ts +0 -66
- package/dist/instanced/blocks.js +0 -294
- package/dist/instanced/blocks.js.map +0 -1
- package/dist/instanced/dirty.d.ts +0 -15
- package/dist/instanced/dirty.js +0 -96
- package/dist/instanced/dirty.js.map +0 -1
- package/dist/instanced/index.d.ts +0 -90
- package/dist/instanced/index.js +0 -349
- package/dist/instanced/index.js.map +0 -1
- package/dist/instanced/parts.d.ts +0 -14
- package/dist/instanced/parts.js +0 -79
- package/dist/instanced/parts.js.map +0 -1
- package/dist/instanced/select.d.ts +0 -92
- package/dist/instanced/select.js +0 -315
- package/dist/instanced/select.js.map +0 -1
- package/dist/instanced/store.d.ts +0 -31
- package/dist/instanced/store.js +0 -96
- package/dist/instanced/store.js.map +0 -1
- package/dist/levels.d.ts +0 -95
- package/dist/levels.js +0 -171
- package/dist/levels.js.map +0 -1
- package/dist/loader/bundle.d.ts +0 -25
- package/dist/loader/bundle.js +0 -241
- package/dist/loader/bundle.js.map +0 -1
- package/dist/loader/cache.d.ts +0 -15
- package/dist/loader/cache.js +0 -75
- package/dist/loader/cache.js.map +0 -1
- package/dist/loader/provenance.d.ts +0 -30
- package/dist/loader/provenance.js +0 -105
- package/dist/loader/provenance.js.map +0 -1
- package/dist/loader.d.ts +0 -55
- package/dist/loader.js +0 -239
- package/dist/loader.js.map +0 -1
- package/dist/material.js.map +0 -1
- package/dist/mesh/codec.d.ts +0 -4
- package/dist/mesh/codec.js.map +0 -1
- package/dist/pause.d.ts +0 -6
- package/dist/pause.js.map +0 -1
- package/dist/queue.d.ts +0 -2
- package/dist/queue.js +0 -33
- package/dist/queue.js.map +0 -1
- package/dist/renderer.d.ts +0 -21
- package/dist/renderer.js +0 -83
- package/dist/renderer.js.map +0 -1
- package/dist/residency.d.ts +0 -44
- package/dist/residency.js +0 -205
- package/dist/residency.js.map +0 -1
- package/dist/simplify.js.map +0 -1
- package/dist/source/shading.js.map +0 -1
- package/dist/source/texels.js.map +0 -1
- package/dist/source/trace.js.map +0 -1
- package/dist/view.d.ts +0 -45
- package/dist/view.js +0 -131
- package/dist/view.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../../src/impostor/mesh/surface.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../../src/impostor/mesh/surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type Texture } from "three/webgpu";
|
|
2
2
|
import type { Impostor } from "../impostor.js";
|
|
3
|
-
|
|
4
|
-
export declare function
|
|
3
|
+
/** `impostor`'s atlases as textures, one per map: an ImpostorMaterial's, freed with it. */
|
|
4
|
+
export declare function impostorTextures(impostor: Impostor): Texture[];
|
|
@@ -1,37 +1,27 @@
|
|
|
1
|
-
import { DataTexture, LinearFilter, LinearMipmapLinearFilter, NoColorSpace, RGBAFormat, SRGBColorSpace, UnsignedByteType } from "three/webgpu";
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
// The baked levels; the chain ends at one texel per frame.
|
|
16
|
-
texture.mipmaps = mipmaps;
|
|
17
|
-
texture.generateMipmaps = false;
|
|
18
|
-
texture.minFilter = LinearMipmapLinearFilter;
|
|
19
|
-
texture.magFilter = LinearFilter;
|
|
20
|
-
texture.needsUpdate = true;
|
|
21
|
-
return texture;
|
|
22
|
-
});
|
|
23
|
-
entry = { textures, users: 0 };
|
|
24
|
-
shared.set(impostor, entry);
|
|
25
|
-
}
|
|
26
|
-
entry.users++;
|
|
27
|
-
return entry.textures;
|
|
1
|
+
import { CompressedTexture, DataTexture, LinearFilter, LinearMipmapLinearFilter, NoColorSpace, RGBAFormat, SRGBColorSpace, UnsignedByteType, } from "three/webgpu";
|
|
2
|
+
/** `impostor`'s atlases as textures, one per map: an ImpostorMaterial's, freed with it. */
|
|
3
|
+
export function impostorTextures(impostor) {
|
|
4
|
+
return impostor.layers.map((layer, i) => {
|
|
5
|
+
const texture = textureOf(layer, impostor.size);
|
|
6
|
+
const map = impostor.maps[i];
|
|
7
|
+
texture.colorSpace = map === "base" || map === "emissive" ? SRGBColorSpace : NoColorSpace;
|
|
8
|
+
// The baked levels; the chain ends at one texel per frame.
|
|
9
|
+
texture.generateMipmaps = false;
|
|
10
|
+
texture.minFilter = LinearMipmapLinearFilter;
|
|
11
|
+
texture.magFilter = LinearFilter;
|
|
12
|
+
texture.needsUpdate = true;
|
|
13
|
+
return texture;
|
|
14
|
+
});
|
|
28
15
|
}
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
16
|
+
function textureOf({ format, mipmaps: levels }, size) {
|
|
17
|
+
const mipmaps = levels.map((data, m) => ({ data, width: size >> m, height: size >> m }));
|
|
18
|
+
const [first] = mipmaps;
|
|
19
|
+
if (!first)
|
|
20
|
+
throw new Error("ImpostorMesh: a layer has no mip levels");
|
|
21
|
+
if (format !== RGBAFormat)
|
|
22
|
+
return new CompressedTexture(mipmaps, size, size, format, UnsignedByteType);
|
|
23
|
+
const texture = new DataTexture(first.data, size, size, RGBAFormat, UnsignedByteType);
|
|
24
|
+
texture.mipmaps = mipmaps;
|
|
25
|
+
return texture;
|
|
36
26
|
}
|
|
37
27
|
//# sourceMappingURL=textures.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textures.js","sourceRoot":"","sources":["../../../src/impostor/mesh/textures.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"textures.js","sourceRoot":"","sources":["../../../src/impostor/mesh/textures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,gBAAgB,GAEjB,MAAM,cAAc,CAAC;AAGtB,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,UAAU,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1F,2DAA2D;QAC3D,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;QAChC,OAAO,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAC7C,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;QACjC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAiB,EAAE,IAAY;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACvE,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvG,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACtF,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { type
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export { Lod } from "./lod.js";
|
|
1
|
+
export { CachedLodLoader, type CachedLodLoaderOptions } from "./loader/index.js";
|
|
2
|
+
export { type LodLevelRequest, type LodRequest } from "./loader/request.js";
|
|
3
|
+
export { encodeMeshAsync, decodeMeshAsync } from "./codec/mesh.js";
|
|
4
|
+
export { Lod, type LodOptions } from "./lod.js";
|
|
6
5
|
export { Wind, type WindOptions, type SwayOptions } from "./wind/index.js";
|
|
7
|
-
export {
|
|
8
|
-
export { type
|
|
9
|
-
export { type
|
|
6
|
+
export { type LodCluster } from "./instanced/clusters.js";
|
|
7
|
+
export { type CullDistance } from "./instanced/cull.js";
|
|
8
|
+
export { type LodLevel } from "./levels/index.js";
|
|
9
|
+
export { type SimplifyOptions, simplify } from "./simplify/index.js";
|
|
10
10
|
export { type BakeMeshOptions, bakeMesh } from "./baked/index.js";
|
|
11
|
-
export {
|
|
11
|
+
export { encodeBakedMeshAsync, decodeBakedMeshAsync } from "./baked/codec.js";
|
|
12
12
|
export { type BakeImpostorOptions, bakeImpostor } from "./impostor/bake/index.js";
|
|
13
|
+
export { createBakeRenderer } from "./bake.js";
|
|
13
14
|
export { type ImpostorMeshOptions, ImpostorMesh } from "./impostor/mesh/index.js";
|
|
15
|
+
export { cosine } from "./impostor/mesh/surface.js";
|
|
14
16
|
export { type Impostor, type ImpostorLayout, type ImpostorMap } from "./impostor/impostor.js";
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
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,17 +1,19 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {} from "./loader/
|
|
3
|
-
export {
|
|
4
|
-
export { setViewportHeight } from "./view.js";
|
|
1
|
+
export { CachedLodLoader } from "./loader/index.js";
|
|
2
|
+
export {} from "./loader/request.js";
|
|
3
|
+
export { encodeMeshAsync, decodeMeshAsync } from "./codec/mesh.js";
|
|
5
4
|
export { Lod } from "./lod.js";
|
|
6
5
|
export { Wind } from "./wind/index.js";
|
|
7
|
-
export {
|
|
8
|
-
export {} from "./
|
|
9
|
-
export {
|
|
6
|
+
export {} from "./instanced/clusters.js";
|
|
7
|
+
export {} from "./instanced/cull.js";
|
|
8
|
+
export {} from "./levels/index.js";
|
|
9
|
+
export { simplify } from "./simplify/index.js";
|
|
10
10
|
export { bakeMesh } from "./baked/index.js";
|
|
11
|
-
export {
|
|
11
|
+
export { encodeBakedMeshAsync, decodeBakedMeshAsync } from "./baked/codec.js";
|
|
12
12
|
export { bakeImpostor } from "./impostor/bake/index.js";
|
|
13
|
+
export { createBakeRenderer } from "./bake.js";
|
|
13
14
|
export { ImpostorMesh } from "./impostor/mesh/index.js";
|
|
15
|
+
export { cosine } from "./impostor/mesh/surface.js";
|
|
14
16
|
export {} from "./impostor/impostor.js";
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
+
export { encodeImpostorAsync, decodeImpostorAsync } from "./impostor/codec.js";
|
|
18
|
+
export { Foliage, foliage, foliageModel, foliageLevels } from "./foliage.js";
|
|
17
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,
|
|
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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Matrix4, type Camera, type Vector3 } from "three/webgpu";
|
|
2
|
+
import type { d } from "typegpu";
|
|
3
|
+
import type { EncodedLevels } from "../levels/index.js";
|
|
4
|
+
import type { DrawLevels } from "../levels/draw.js";
|
|
5
|
+
/** A camera in a Lod's space (see `localCamera`). */
|
|
6
|
+
export interface LocalCamera {
|
|
7
|
+
levels: d.Infer<typeof DrawLevels>;
|
|
8
|
+
eye: Vector3;
|
|
9
|
+
/** Pixels per unit of subtense (or of size, orthographic). */
|
|
10
|
+
scale: number;
|
|
11
|
+
ortho: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** The level loading state levelsToDraw reads (see LodLevelLoadManager). */
|
|
14
|
+
export interface Loading {
|
|
15
|
+
loaded: number;
|
|
16
|
+
before: number;
|
|
17
|
+
progress: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
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.
|
|
23
|
+
*/
|
|
24
|
+
export declare function localCamera(camera: Camera, height: number, space: Matrix4, encoded: EncodedLevels, forced: number | null, quality: number): LocalCamera;
|
|
25
|
+
/**
|
|
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.
|
|
30
|
+
*/
|
|
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
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Matrix4 } from "three/webgpu";
|
|
2
|
+
import { screenOf } from "../levels/screen.js";
|
|
3
|
+
/** How much wider than ClusterView gives them the heights a level mesh is shown for are, relatively. */
|
|
4
|
+
const SLACK = 1e-4;
|
|
5
|
+
const inverse = new Matrix4();
|
|
6
|
+
/**
|
|
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.
|
|
10
|
+
*/
|
|
11
|
+
export function localCamera(camera, height, space, encoded, forced, quality) {
|
|
12
|
+
const screen = screenOf(camera, height);
|
|
13
|
+
// Checked before anything reads the thresholds.
|
|
14
|
+
const levels = encoded.get(forced, !screen.ortho);
|
|
15
|
+
const eye = screen.eye.applyMatrix4(inverse.copy(space).invert());
|
|
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);
|
|
18
|
+
return { levels, eye, scale, ortho: screen.ortho };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
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
|
+
*/
|
|
26
|
+
export function shownBy(seen, levels, encoded, { loaded, before, progress }) {
|
|
27
|
+
const arriving = progress < 1 && before !== loaded;
|
|
28
|
+
const now = encoded.heights(levels, loaded);
|
|
29
|
+
const then = arriving ? encoded.heights(levels, before) : null;
|
|
30
|
+
let shown = 0;
|
|
31
|
+
// What every range draws.
|
|
32
|
+
let common = seen.length > 0 ? ~0 : 0;
|
|
33
|
+
for (const [shortest, tallest] of seen) {
|
|
34
|
+
// The GPU measures an instance's height in f32: a range a little wider holds every height it gets.
|
|
35
|
+
const low = shortest * (1 - SLACK);
|
|
36
|
+
const high = tallest * (1 + SLACK);
|
|
37
|
+
const drawn = now.drawnIn(low, high) | (then?.drawnIn(low, high) ?? 0);
|
|
38
|
+
shown |= drawn;
|
|
39
|
+
common &= drawn;
|
|
40
|
+
}
|
|
41
|
+
// One level alone: drawnIn holds a fading level's finer neighbour too.
|
|
42
|
+
const only = !arriving && common === shown && (shown & (shown - 1)) === 0 ? shown : 0;
|
|
43
|
+
return { shown, only };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=camera.js.map
|
|
@@ -0,0 +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,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;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Box3, Sphere, Vector3 } from "three/webgpu";
|
|
2
|
+
import { at } from "../at.js";
|
|
3
|
+
import { isBox3 } from "../three.js";
|
|
4
|
+
import { MAX_SURVIVOR_SCALE } from "./measure.js";
|
|
5
|
+
const area = { start: 0, size: 0, box: null, low: 0, high: 0 };
|
|
6
|
+
const grownBox = new Box3();
|
|
7
|
+
const measuredScratch = new Box3();
|
|
8
|
+
const size3 = new Vector3();
|
|
9
|
+
/**
|
|
10
|
+
* Call `visit` with each cluster of `lod` that holds instances, in one reused Area: its box grown by how far survivors
|
|
11
|
+
* of a cullDistance grow past it, by up to `grow`, about their origins.
|
|
12
|
+
*/
|
|
13
|
+
function forEachArea(lod, measured, shape, grow, visit) {
|
|
14
|
+
const { clusters, count } = lod;
|
|
15
|
+
const fallback = lod.boundingBox ?? (measured && measuredBox(measured, shape, measuredScratch));
|
|
16
|
+
const clusterOf = (start, size, box, minScale, maxScale) => {
|
|
17
|
+
if (size <= 0 || box?.isEmpty())
|
|
18
|
+
return;
|
|
19
|
+
area.start = start;
|
|
20
|
+
area.size = size;
|
|
21
|
+
area.low = minScale ?? measured?.minScale ?? 0;
|
|
22
|
+
area.high = maxScale ?? measured?.maxScale ?? (box && shape.extent > 0 ? box.getSize(size3).length() / shape.extent : Infinity);
|
|
23
|
+
area.box = box && grownBox.copy(box).expandByScalar(shape.originReach * area.high * (grow - 1));
|
|
24
|
+
visit(area);
|
|
25
|
+
};
|
|
26
|
+
if (!clusters)
|
|
27
|
+
return clusterOf(0, count, fallback);
|
|
28
|
+
for (const { start, count: size, boundingBox, minScale, maxScale } of clusters)
|
|
29
|
+
clusterOf(start, Math.min(size, count - start), boundingBox, minScale, maxScale);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Bound every cluster of `lod` into `bounds`, its survivors grown by up to `grow`: what the level meshes are culled and
|
|
33
|
+
* boxed by, which three's Box3.setFromObject reads. Unbounded instances give an infinite sphere and an empty box.
|
|
34
|
+
*/
|
|
35
|
+
export function boundClusters(lod, measured, shape, grow, bounds) {
|
|
36
|
+
let unbounded = false;
|
|
37
|
+
bounds.box.makeEmpty();
|
|
38
|
+
forEachArea(lod, measured, shape, grow, ({ box }) => {
|
|
39
|
+
if (box)
|
|
40
|
+
bounds.box.union(box);
|
|
41
|
+
else
|
|
42
|
+
unbounded = true;
|
|
43
|
+
});
|
|
44
|
+
if (unbounded)
|
|
45
|
+
bounds.sphere.set(bounds.sphere.center.set(0, 0, 0), Infinity);
|
|
46
|
+
else if (bounds.box.isEmpty())
|
|
47
|
+
bounds.sphere.makeEmpty();
|
|
48
|
+
else
|
|
49
|
+
bounds.box.getBoundingSphere(bounds.sphere);
|
|
50
|
+
}
|
|
51
|
+
/** What a camera sees of a Lod's instances (see `ClusterView.see`). */
|
|
52
|
+
export class ClusterView {
|
|
53
|
+
/** The ranges the camera sees, start and count, flat, clipped to `count`. */
|
|
54
|
+
ranges = [];
|
|
55
|
+
/** How many instances the ranges hold. */
|
|
56
|
+
instances = 0;
|
|
57
|
+
/** Whether every range seen lies wholly inside the camera's frustum. */
|
|
58
|
+
inside = true;
|
|
59
|
+
/** The heights the instances of every cluster within cullDistance can have, shortest and tallest: what loads. */
|
|
60
|
+
heights = [];
|
|
61
|
+
/** The same, of the clusters seen: what draws. */
|
|
62
|
+
seen = [];
|
|
63
|
+
/** Whether nothing bounds the instances: a storage instanceMatrix with neither clusters nor a boundingBox. */
|
|
64
|
+
unbounded = false;
|
|
65
|
+
/** See the instances of `lod` from `camera` through `frustum`, both in the Lod's space, thinned out by `cull`. */
|
|
66
|
+
see(lod, measured, shape, frustum, camera, cull) {
|
|
67
|
+
this.ranges.length = this.heights.length = this.seen.length = 0;
|
|
68
|
+
this.instances = 0;
|
|
69
|
+
this.inside = true;
|
|
70
|
+
this.unbounded = false;
|
|
71
|
+
const grow = cull?.survivors ? MAX_SURVIVOR_SCALE : 1;
|
|
72
|
+
forEachArea(lod, measured, shape, grow, ({ start, size, box, low, high }) => {
|
|
73
|
+
if (!box)
|
|
74
|
+
this.unbounded = true;
|
|
75
|
+
if (cull && box && box.distanceToPoint(cull.eye) >= cull.far)
|
|
76
|
+
return;
|
|
77
|
+
const heights = heightsIn(box, low, high * grow, shape, camera);
|
|
78
|
+
this.heights.push(heights);
|
|
79
|
+
if (box && !frustum.intersectsBox(box))
|
|
80
|
+
return;
|
|
81
|
+
this.seen.push(heights);
|
|
82
|
+
this.ranges.push(start, size);
|
|
83
|
+
this.instances += size;
|
|
84
|
+
this.inside &&= box !== null && inside(frustum, box);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** The box around `measured`'s instances at every level and its sway. */
|
|
89
|
+
export function measuredBox({ originBox, maxScale }, shape, into = new Box3()) {
|
|
90
|
+
if (originBox.isEmpty())
|
|
91
|
+
return into.makeEmpty();
|
|
92
|
+
return into.copy(originBox).expandByScalar(shape.originReach * maxScale);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The heights on `camera`'s screen that instances inside `box` (anywhere for none) scaled from `low` to `high` can have:
|
|
96
|
+
* the shortest at its farthest, the tallest at its nearest.
|
|
97
|
+
*/
|
|
98
|
+
function heightsIn(box, low, high, { source }, { eye, scale, ortho }) {
|
|
99
|
+
const diameter = 2 * source.radius * scale;
|
|
100
|
+
if (ortho)
|
|
101
|
+
return [diameter * low, diameter * high];
|
|
102
|
+
if (!box)
|
|
103
|
+
return [0, Infinity];
|
|
104
|
+
const near = Math.max(box.distanceToPoint(eye), 1e-6);
|
|
105
|
+
return [(diameter * low) / farthest(box, eye), (diameter * high) / near];
|
|
106
|
+
}
|
|
107
|
+
/** The distance from `point` to the farthest point of `box`. */
|
|
108
|
+
function farthest(box, point) {
|
|
109
|
+
const { min, max } = box;
|
|
110
|
+
return Math.hypot(Math.max(Math.abs(point.x - min.x), Math.abs(point.x - max.x)), Math.max(Math.abs(point.y - min.y), Math.abs(point.y - max.y)), Math.max(Math.abs(point.z - min.z), Math.abs(point.z - max.z)));
|
|
111
|
+
}
|
|
112
|
+
/** Whether `box` lies wholly inside `frustum`: its corner nearest each plane's outside lies inside. */
|
|
113
|
+
function inside(frustum, box) {
|
|
114
|
+
return frustum.planes.every(({ normal, constant }) => {
|
|
115
|
+
const x = normal.x > 0 ? box.min.x : box.max.x;
|
|
116
|
+
const y = normal.y > 0 ? box.min.y : box.max.y;
|
|
117
|
+
const z = normal.z > 0 ? box.min.z : box.max.z;
|
|
118
|
+
return normal.x * x + normal.y * y + normal.z * z + constant > 0;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Throws unless `clusters` are ranges of a Lod's `capacity` instances, disjoint, each with a box and its scales as
|
|
123
|
+
* `LodCluster` says. Disjointness is checked again only once a range changed: `last` holds the ranges last checked.
|
|
124
|
+
*/
|
|
125
|
+
export function checkClusters(clusters, capacity, last) {
|
|
126
|
+
let changed = last.length !== clusters.length * 2;
|
|
127
|
+
clusters.forEach(({ start, count, boundingBox, minScale, maxScale }, i) => {
|
|
128
|
+
if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > capacity)
|
|
129
|
+
throw new RangeError(`Lod: cluster ${i}, ${count} instances from ${start}, passes the ${capacity} of its instanceMatrix`);
|
|
130
|
+
if (!isBox3(boundingBox))
|
|
131
|
+
throw new TypeError(`Lod: cluster ${i} has no boundingBox`);
|
|
132
|
+
if (minScale !== undefined && !(minScale >= 0 && Number.isFinite(minScale)))
|
|
133
|
+
throw new RangeError(`Lod: cluster ${i}'s minScale must be finite and >= 0, not ${minScale}`);
|
|
134
|
+
if (maxScale !== undefined && !(maxScale >= (minScale ?? 0) && Number.isFinite(maxScale)))
|
|
135
|
+
throw new RangeError(`Lod: cluster ${i}'s maxScale must be finite and >= its minScale, not ${maxScale}`);
|
|
136
|
+
if (last[2 * i] !== start || last[2 * i + 1] !== count)
|
|
137
|
+
changed = true;
|
|
138
|
+
});
|
|
139
|
+
if (!changed)
|
|
140
|
+
return;
|
|
141
|
+
last.length = 0;
|
|
142
|
+
for (const { start, count } of clusters)
|
|
143
|
+
last.push(start, count);
|
|
144
|
+
const sorted = [...clusters.keys()].filter((i) => at(clusters, i).count > 0).sort((a, b) => at(clusters, a).start - at(clusters, b).start);
|
|
145
|
+
for (let k = 1; k < sorted.length; k++) {
|
|
146
|
+
const [before, after] = [at(sorted, k - 1), at(sorted, k)];
|
|
147
|
+
if (at(clusters, before).start + at(clusters, before).count > at(clusters, after).start)
|
|
148
|
+
throw new RangeError(`Lod: clusters ${before} and ${after} overlap: clusters are disjoint`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=clusters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clusters.js","sourceRoot":"","sources":["../../src/instanced/clusters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAgB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA4BlD,MAAM,IAAI,GAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrE,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,MAAM,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;AACnC,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AAE5B;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAkB,EAAE,QAAyB,EAAE,KAAoB,EAAE,IAAY,EAAE,KAA2B;IACjI,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,GAAgB,EAAE,QAAiB,EAAE,QAAiB,EAAE,EAAE;QACxG,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE;YAAE,OAAO;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,QAAQ,IAAI,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,QAAQ,EAAE,QAAQ,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC,CAAC;IACF,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,QAAQ;QAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACnK,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAkB,EAAE,QAAyB,EAAE,KAAoB,EAAE,IAAY,EAAE,MAAqC;IACpJ,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IACvB,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;QAClD,IAAI,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;YAC1B,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,IAAI,SAAS;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;SACzE,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;;QACpD,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,uEAAuE;AACvE,MAAM,OAAO,WAAW;IACtB,6EAA6E;IACpE,MAAM,GAAa,EAAE,CAAC;IAC/B,0CAA0C;IAC1C,SAAS,GAAG,CAAC,CAAC;IACd,wEAAwE;IACxE,MAAM,GAAG,IAAI,CAAC;IACd,iHAAiH;IACxG,OAAO,GAAuB,EAAE,CAAC;IAC1C,kDAAkD;IACzC,IAAI,GAAuB,EAAE,CAAC;IACvC,8GAA8G;IAC9G,SAAS,GAAG,KAAK,CAAC;IAElB,kHAAkH;IAClH,GAAG,CAAC,GAAkB,EAAE,QAAyB,EAAE,KAAoB,EAAE,OAAgB,EAAE,MAAmB,EAAE,IAAiB;QAC/H,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1E,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAChC,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG;gBAAE,OAAO;YACrE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;gBAAE,OAAO;YAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;YACvB,IAAI,CAAC,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AASD,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAY,EAAE,KAAoB,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE;IACpG,IAAI,SAAS,CAAC,OAAO,EAAE;QAAE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAgB,EAAE,GAAW,EAAE,IAAY,EAAE,EAAE,MAAM,EAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAe;IAC3H,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IAC3C,IAAI,KAAK;QAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,gEAAgE;AAChE,SAAS,QAAQ,CAAC,GAAS,EAAE,KAAc;IACzC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACzB,OAAO,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,SAAS,MAAM,CAAC,OAAgB,EAAE,GAAS;IACzC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAA+B,EAAE,QAAgB,EAAE,IAAc;IAC7F,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACxE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,QAAQ;YAC5G,MAAM,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,KAAK,mBAAmB,KAAK,gBAAgB,QAAQ,wBAAwB,CAAC,CAAC;QAC5H,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;QACtF,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;QAC3K,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,IAAI,UAAU,CAAC,gBAAgB,CAAC,uDAAuD,QAAQ,EAAE,CAAC,CAAC;QAC3G,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK;YAAE,OAAO,GAAG,IAAI,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3I,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK;YACrF,MAAM,IAAI,UAAU,CAAC,iBAAiB,MAAM,QAAQ,KAAK,iCAAiC,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Matrix4, Vector3, type Camera } from "three/webgpu";
|
|
2
|
+
/**
|
|
3
|
+
* How a Lod thins its instances out with distance from `camera`, in every camera, as Fog does: every instance
|
|
4
|
+
* draws up to `near` from it, none from `far` on, and in between a share falling linearly, chosen by a hash of each
|
|
5
|
+
* instance's origin (its matrix's translation), the same on the CPU and the GPU. An instance whose translation changes
|
|
6
|
+
* rolls a new value: it may appear or vanish as it moves. With `scaleSurvivors`, the instances drawn grow by 1/√share,
|
|
7
|
+
* up to `MAX_SURVIVOR_SCALE` (8), so a thinned field stays about as covered.
|
|
8
|
+
*/
|
|
9
|
+
export interface CullDistance {
|
|
10
|
+
camera: Camera;
|
|
11
|
+
near: number;
|
|
12
|
+
far: number;
|
|
13
|
+
scaleSurvivors?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** cullDistance in the Lod's space. */
|
|
16
|
+
export interface Cull {
|
|
17
|
+
eye: Vector3;
|
|
18
|
+
near: number;
|
|
19
|
+
far: number;
|
|
20
|
+
survivors: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* `cullDistance`, checked, in the space of `space`, a Lod's world matrix, written into `target`; null for
|
|
24
|
+
* none. Nothing holds on to what it answers past a sort: the sort and its keys copy its values.
|
|
25
|
+
*/
|
|
26
|
+
export declare function cullIn(cullDistance: CullDistance | null, space: Matrix4, target: Cull): Cull | null;
|
|
27
|
+
/** A Cull to write into (see `cullIn`). */
|
|
28
|
+
export declare const emptyCull: () => Cull;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Matrix4, Vector3 } from "three/webgpu";
|
|
2
|
+
const inverse = new Matrix4();
|
|
3
|
+
/**
|
|
4
|
+
* `cullDistance`, checked, in the space of `space`, a Lod's world matrix, written into `target`; null for
|
|
5
|
+
* none. Nothing holds on to what it answers past a sort: the sort and its keys copy its values.
|
|
6
|
+
*/
|
|
7
|
+
export function cullIn(cullDistance, space, target) {
|
|
8
|
+
if (!cullDistance)
|
|
9
|
+
return null;
|
|
10
|
+
const { camera, near, far, scaleSurvivors = false } = cullDistance;
|
|
11
|
+
if (!(Number.isFinite(near) && Number.isFinite(far) && near >= 0 && far > near))
|
|
12
|
+
throw new RangeError(`Lod: cullDistance needs 0 <= near < far, both finite, got ${near} and ${far}`);
|
|
13
|
+
const scale = space.getMaxScaleOnAxis();
|
|
14
|
+
target.eye.setFromMatrixPosition(camera.matrixWorld).applyMatrix4(inverse.copy(space).invert());
|
|
15
|
+
target.near = near / scale;
|
|
16
|
+
target.far = far / scale;
|
|
17
|
+
target.survivors = scaleSurvivors;
|
|
18
|
+
return target;
|
|
19
|
+
}
|
|
20
|
+
/** A Cull to write into (see `cullIn`). */
|
|
21
|
+
export const emptyCull = () => ({ eye: new Vector3(), near: 0, far: 0, survivors: false });
|
|
22
|
+
//# sourceMappingURL=cull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cull.js","sourceRoot":"","sources":["../../src/instanced/cull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAe,MAAM,cAAc,CAAC;AAwB7D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,YAAiC,EAAE,KAAc,EAAE,MAAY;IACpF,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,YAAY,CAAC;IACnE,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC;QAC7E,MAAM,IAAI,UAAU,CAAC,6DAA6D,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAChG,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3B,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC"}
|