@drawcall/lod 0.2.0 → 0.3.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 +8 -6
- package/dist/bake.d.ts +22 -0
- package/dist/bake.js +88 -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 +12 -6
- package/dist/baked/index.js +22 -20
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.d.ts +4 -3
- package/dist/baked/interior/faces.js +13 -10
- 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.js +1 -1
- 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 +7 -4
- package/dist/dispose.js +20 -22
- package/dist/dispose.js.map +1 -1
- package/dist/gpu.d.ts +39 -0
- package/dist/gpu.js +41 -0
- package/dist/gpu.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 +41 -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 +2 -2
- package/dist/impostor/bake/source.js +8 -19
- 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 +117 -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 +64 -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 +12 -0
- package/dist/impostor/ktx2/worker.js.map +1 -0
- package/dist/impostor/mesh/card.d.ts +3 -3
- package/dist/impostor/mesh/card.js +7 -7
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +5 -4
- package/dist/impostor/mesh/index.js +8 -9
- 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 +15 -10
- package/dist/index.js +13 -8
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +46 -0
- package/dist/instanced/camera.js +70 -0
- package/dist/instanced/camera.js.map +1 -0
- package/dist/instanced/chunk.d.ts +97 -0
- package/dist/instanced/chunk.js +156 -0
- package/dist/instanced/chunk.js.map +1 -0
- package/dist/instanced/chunks.d.ts +60 -0
- package/dist/instanced/chunks.js +208 -0
- package/dist/instanced/chunks.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/index.d.ts +96 -66
- package/dist/instanced/index.js +229 -288
- package/dist/instanced/index.js.map +1 -1
- 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 +130 -0
- package/dist/instanced/levels.js.map +1 -0
- package/dist/instanced/lists.d.ts +70 -0
- package/dist/instanced/lists.js +133 -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 +42 -51
- package/dist/instanced/meshes.js +158 -180
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +20 -0
- package/dist/instanced/mirror.js +37 -0
- package/dist/instanced/mirror.js.map +1 -0
- package/dist/instanced/pages/buffers.d.ts +37 -0
- package/dist/instanced/pages/buffers.js +15 -0
- package/dist/instanced/pages/buffers.js.map +1 -0
- package/dist/instanced/pages/chunk.d.ts +51 -0
- package/dist/instanced/pages/chunk.js +81 -0
- package/dist/instanced/pages/chunk.js.map +1 -0
- package/dist/instanced/pages/index.d.ts +74 -0
- package/dist/instanced/pages/index.js +269 -0
- package/dist/instanced/pages/index.js.map +1 -0
- package/dist/instanced/pages/passes.d.ts +21 -0
- package/dist/instanced/pages/passes.js +52 -0
- package/dist/instanced/pages/passes.js.map +1 -0
- package/dist/instanced/pages/slots.d.ts +11 -0
- package/dist/instanced/pages/slots.js +90 -0
- package/dist/instanced/pages/slots.js.map +1 -0
- package/dist/instanced/pages/workgroup.d.ts +14 -0
- package/dist/instanced/pages/workgroup.js +38 -0
- package/dist/instanced/pages/workgroup.js.map +1 -0
- package/dist/instanced/raycast.d.ts +13 -11
- package/dist/instanced/raycast.js +33 -40
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +108 -0
- package/dist/instanced/rows.js +209 -0
- package/dist/instanced/rows.js.map +1 -0
- package/dist/instanced/shape.d.ts +25 -0
- package/dist/instanced/shape.js +51 -0
- package/dist/instanced/shape.js.map +1 -0
- package/dist/instanced/sort.d.ts +63 -0
- package/dist/instanced/sort.js +162 -0
- package/dist/instanced/sort.js.map +1 -0
- package/dist/instanced/update.d.ts +30 -0
- package/dist/instanced/update.js +207 -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 +39 -0
- package/dist/levels/compile/index.js +185 -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 +177 -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 +69 -0
- package/dist/levels/fade.js +150 -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 +97 -0
- package/dist/levels/item.js.map +1 -0
- package/dist/levels/load.d.ts +31 -0
- package/dist/levels/load.js +142 -0
- package/dist/levels/load.js.map +1 -0
- package/dist/levels/manager.d.ts +159 -0
- package/dist/levels/manager.js +339 -0
- package/dist/levels/manager.js.map +1 -0
- package/dist/{material.js → levels/material.js} +4 -3
- package/dist/levels/material.js.map +1 -0
- package/dist/levels/renderer.d.ts +29 -0
- package/dist/levels/renderer.js +41 -0
- package/dist/levels/renderer.js.map +1 -0
- package/dist/levels/requests.d.ts +49 -0
- package/dist/levels/requests.js +95 -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/levels/wait.d.ts +27 -0
- package/dist/levels/wait.js +61 -0
- package/dist/levels/wait.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/cache.d.ts +6 -9
- package/dist/loader/cache.js +17 -24
- package/dist/loader/cache.js.map +1 -1
- package/dist/loader/context.d.ts +46 -0
- package/dist/loader/context.js +91 -0
- package/dist/loader/context.js.map +1 -0
- package/dist/loader/{provenance.d.ts → dependencies.d.ts} +5 -3
- package/dist/loader/{provenance.js → dependencies.js} +12 -4
- package/dist/loader/dependencies.js.map +1 -0
- package/dist/loader/index.d.ts +62 -0
- package/dist/loader/index.js +284 -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/request.d.ts +87 -0
- package/dist/loader/request.js +59 -0
- package/dist/loader/request.js.map +1 -0
- package/dist/loader/url.d.ts +5 -2
- package/dist/loader/url.js +10 -6
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +81 -40
- package/dist/lod.js +196 -149
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +6 -0
- package/dist/meshopt.js +19 -0
- package/dist/meshopt.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} +7 -4
- package/dist/{simplify.js → simplify/index.js} +41 -23
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +4 -23
- package/dist/{bounds.js → source/detail.js} +19 -51
- 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} +3 -3
- 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 +13 -24
- package/dist/three.js +26 -53
- 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 +2 -2
- 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 +2 -2
- package/dist/wind/index.js +15 -15
- 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 +18 -8
- package/skills/lod/SKILL.md +108 -31
- 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/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/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
- /package/dist/{material.d.ts → levels/material.d.ts} +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Matrix4, Vector3 } from "three/webgpu";
|
|
2
|
+
import { d, std, tgpu } from "typegpu";
|
|
3
|
+
import { drawnLevel, levelsToDraw } from "../levels/draw.js";
|
|
4
|
+
// How one instance draws, the same on the CPU and in the sort (see update.ts): whether cullDistance thins it out and
|
|
5
|
+
// how much its survivors grow, and its height on screen.
|
|
6
|
+
/** The largest a survivor of `cullDistance` grows: what it reaches where 1/64 of the instances draw. */
|
|
7
|
+
export const MAX_SURVIVOR_SCALE = 8;
|
|
8
|
+
/** Three xorshift steps: shifts and xors only, exact in JavaScript's 32-bit integer operators as on the GPU. */
|
|
9
|
+
const xorshift = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.u32], d.u32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = value => {
|
|
10
|
+
"use gpu";
|
|
11
|
+
|
|
12
|
+
let h = d.u32(value);
|
|
13
|
+
h = d.u32(h ^ h << 13);
|
|
14
|
+
h = d.u32(h ^ h >>> 17);
|
|
15
|
+
h = d.u32(h ^ h << 5);
|
|
16
|
+
return h;
|
|
17
|
+
}, {
|
|
18
|
+
v: 2,
|
|
19
|
+
name: undefined,
|
|
20
|
+
ast: {
|
|
21
|
+
params: [{
|
|
22
|
+
type: "i",
|
|
23
|
+
name: "value"
|
|
24
|
+
}],
|
|
25
|
+
body: [0, [[12, "h", [6, "d.u32", ["value"]]], [2, "h", "=", [6, "d.u32", [[1, "h", "^", [1, "h", "<<", [5, "13"]]]]]], [2, "h", "=", [6, "d.u32", [[1, "h", "^", [1, "h", ">>>", [5, "17"]]]]]], [2, "h", "=", [6, "d.u32", [[1, "h", "^", [1, "h", "<<", [5, "5"]]]]]], [10, "h"]]]
|
|
26
|
+
},
|
|
27
|
+
externals: {
|
|
28
|
+
"d.u32": () => d.u32
|
|
29
|
+
}
|
|
30
|
+
}) && $.f)({})), "xorshift");
|
|
31
|
+
/**
|
|
32
|
+
* The bits of `origin`, an instance's translation, hashed into [0, 1): what thins it out (see `CullDistance`), the
|
|
33
|
+
* same on the CPU and the GPU.
|
|
34
|
+
*/
|
|
35
|
+
export const originHash = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.vec3f], d.f32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = origin => {
|
|
36
|
+
"use gpu";
|
|
37
|
+
|
|
38
|
+
const bits = std.bitcastF32toU32(origin);
|
|
39
|
+
let h = xorshift(bits.x ^ d.u32(0x9e3779b9));
|
|
40
|
+
h = xorshift(h ^ bits.y);
|
|
41
|
+
h = xorshift(h ^ bits.z);
|
|
42
|
+
h = xorshift(h);
|
|
43
|
+
return __tsover_div(d.f32(h >>> 8), 16777216);
|
|
44
|
+
}, {
|
|
45
|
+
v: 2,
|
|
46
|
+
name: undefined,
|
|
47
|
+
ast: {
|
|
48
|
+
params: [{
|
|
49
|
+
type: "i",
|
|
50
|
+
name: "origin"
|
|
51
|
+
}],
|
|
52
|
+
body: [0, [[13, "bits", [6, "std.bitcastF32toU32", ["origin"]]], [12, "h", [6, "xorshift", [[1, [7, "bits", "x"], "^", [6, "d.u32", [[5, "2654435769"]]]]]]], [2, "h", "=", [6, "xorshift", [[1, "h", "^", [7, "bits", "y"]]]]], [2, "h", "=", [6, "xorshift", [[1, "h", "^", [7, "bits", "z"]]]]], [2, "h", "=", [6, "xorshift", ["h"]]], [10, [1, [6, "d.f32", [[1, "h", ">>>", [5, "8"]]]], "/", [5, "16777216"]]]]]
|
|
53
|
+
},
|
|
54
|
+
externals: {
|
|
55
|
+
"std.bitcastF32toU32": () => std.bitcastF32toU32,
|
|
56
|
+
"xorshift": () => xorshift,
|
|
57
|
+
"d.u32": () => d.u32,
|
|
58
|
+
"d.f32": () => d.f32
|
|
59
|
+
}
|
|
60
|
+
}) && $.f)({})), "originHash");
|
|
61
|
+
/**
|
|
62
|
+
* How an instance at `origin`, `distance` from the cullDistance camera, draws (see `CullDistance`): 0 thinned out,
|
|
63
|
+
* else the scale it draws at: 1, or with `survivors` 1/√share, share the share of instances drawn at its distance.
|
|
64
|
+
*/
|
|
65
|
+
export const cullScale = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.vec3f, d.f32, d.f32, d.f32, d.u32], d.f32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (origin, distance, near, far, survivors) => {
|
|
66
|
+
"use gpu";
|
|
67
|
+
|
|
68
|
+
const share = std.clamp(__tsover_div(__tsover_sub(far, distance), __tsover_sub(far, near)), 0, 1);
|
|
69
|
+
if (originHash(origin) >= share) return 0;
|
|
70
|
+
if (survivors === 0) return 1;
|
|
71
|
+
return std.min(__tsover_div(1, std.sqrt(share)), MAX_SURVIVOR_SCALE);
|
|
72
|
+
}, {
|
|
73
|
+
v: 2,
|
|
74
|
+
name: undefined,
|
|
75
|
+
ast: {
|
|
76
|
+
params: [{
|
|
77
|
+
type: "i",
|
|
78
|
+
name: "origin"
|
|
79
|
+
}, {
|
|
80
|
+
type: "i",
|
|
81
|
+
name: "distance"
|
|
82
|
+
}, {
|
|
83
|
+
type: "i",
|
|
84
|
+
name: "near"
|
|
85
|
+
}, {
|
|
86
|
+
type: "i",
|
|
87
|
+
name: "far"
|
|
88
|
+
}, {
|
|
89
|
+
type: "i",
|
|
90
|
+
name: "survivors"
|
|
91
|
+
}],
|
|
92
|
+
body: [0, [[13, "share", [6, "std.clamp", [[1, [1, "far", "-", "distance"], "/", [1, "far", "-", "near"]], [5, "0"], [5, "1"]]]], [11, [1, [6, "originHash", ["origin"]], ">=", "share"], [10, [5, "0"]]], [11, [1, "survivors", "===", [5, "0"]], [10, [5, "1"]]], [10, [6, "std.min", [[1, [5, "1"], "/", [6, "std.sqrt", ["share"]]], "MAX_SURVIVOR_SCALE"]]]]]
|
|
93
|
+
},
|
|
94
|
+
externals: {
|
|
95
|
+
"std.clamp": () => std.clamp,
|
|
96
|
+
"originHash": () => originHash,
|
|
97
|
+
"std.min": () => std.min,
|
|
98
|
+
"std.sqrt": () => std.sqrt,
|
|
99
|
+
"MAX_SURVIVOR_SCALE": () => MAX_SURVIVOR_SCALE
|
|
100
|
+
}
|
|
101
|
+
}) && $.f)({})), "cullScale");
|
|
102
|
+
/** The longest `matrix` scales an axis. */
|
|
103
|
+
const longestAxis = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.mat4x4f], d.f32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = matrix => {
|
|
104
|
+
"use gpu";
|
|
105
|
+
|
|
106
|
+
const x = std.length(std.mul(matrix, d.vec4f(1, 0, 0, 0)).xyz);
|
|
107
|
+
const y = std.length(std.mul(matrix, d.vec4f(0, 1, 0, 0)).xyz);
|
|
108
|
+
const z = std.length(std.mul(matrix, d.vec4f(0, 0, 1, 0)).xyz);
|
|
109
|
+
return std.max(x, std.max(y, z));
|
|
110
|
+
}, {
|
|
111
|
+
v: 2,
|
|
112
|
+
name: undefined,
|
|
113
|
+
ast: {
|
|
114
|
+
params: [{
|
|
115
|
+
type: "i",
|
|
116
|
+
name: "matrix"
|
|
117
|
+
}],
|
|
118
|
+
body: [0, [[13, "x", [6, "std.length", [[7, [6, "std.mul", ["matrix", [6, "d.vec4f", [[5, "1"], [5, "0"], [5, "0"], [5, "0"]]]]], "xyz"]]]], [13, "y", [6, "std.length", [[7, [6, "std.mul", ["matrix", [6, "d.vec4f", [[5, "0"], [5, "1"], [5, "0"], [5, "0"]]]]], "xyz"]]]], [13, "z", [6, "std.length", [[7, [6, "std.mul", ["matrix", [6, "d.vec4f", [[5, "0"], [5, "0"], [5, "1"], [5, "0"]]]]], "xyz"]]]], [10, [6, "std.max", ["x", [6, "std.max", ["y", "z"]]]]]]]
|
|
119
|
+
},
|
|
120
|
+
externals: {
|
|
121
|
+
"std.length": () => std.length,
|
|
122
|
+
"std.mul": () => std.mul,
|
|
123
|
+
"d.vec4f": () => d.vec4f,
|
|
124
|
+
"std.max": () => std.max
|
|
125
|
+
}
|
|
126
|
+
}) && $.f)({})), "longestAxis");
|
|
127
|
+
/**
|
|
128
|
+
* Where an instance at `matrix` stands for a camera, `source` the source's sphere (centre, radius) grown by `grow`:
|
|
129
|
+
* the source's centre (xyz), and its height on screen (w) seen from `eye` with `scale` pixels per unit of subtense, or
|
|
130
|
+
* of size with `ortho` 1, as a Lod measures its own on the CPU (see screen.ts: 2 r q / d).
|
|
131
|
+
*/
|
|
132
|
+
export const instanceOnScreen = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.mat4x4f, d.vec4f, d.f32, d.vec3f, d.f32, d.u32], d.vec4f)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (matrix, source, grow, eye, scale, ortho) => {
|
|
133
|
+
"use gpu";
|
|
134
|
+
|
|
135
|
+
const centre = std.mul(matrix, d.vec4f(std.mul(source.xyz, grow), 1)).xyz;
|
|
136
|
+
const size = __tsover_mul(__tsover_mul(__tsover_mul(__tsover_mul(source.w, longestAxis(matrix)), grow), 2), scale);
|
|
137
|
+
if (ortho === 1) return d.vec4f(centre, size);
|
|
138
|
+
return d.vec4f(centre, __tsover_div(size, std.max(std.distance(centre, eye), 1e-6)));
|
|
139
|
+
}, {
|
|
140
|
+
v: 2,
|
|
141
|
+
name: undefined,
|
|
142
|
+
ast: {
|
|
143
|
+
params: [{
|
|
144
|
+
type: "i",
|
|
145
|
+
name: "matrix"
|
|
146
|
+
}, {
|
|
147
|
+
type: "i",
|
|
148
|
+
name: "source"
|
|
149
|
+
}, {
|
|
150
|
+
type: "i",
|
|
151
|
+
name: "grow"
|
|
152
|
+
}, {
|
|
153
|
+
type: "i",
|
|
154
|
+
name: "eye"
|
|
155
|
+
}, {
|
|
156
|
+
type: "i",
|
|
157
|
+
name: "scale"
|
|
158
|
+
}, {
|
|
159
|
+
type: "i",
|
|
160
|
+
name: "ortho"
|
|
161
|
+
}],
|
|
162
|
+
body: [0, [[13, "centre", [7, [6, "std.mul", ["matrix", [6, "d.vec4f", [[6, "std.mul", [[7, "source", "xyz"], "grow"]], [5, "1"]]]]], "xyz"]], [13, "size", [1, [1, [1, [1, [7, "source", "w"], "*", [6, "longestAxis", ["matrix"]]], "*", "grow"], "*", [5, "2"]], "*", "scale"]], [11, [1, "ortho", "===", [5, "1"]], [10, [6, "d.vec4f", ["centre", "size"]]]], [10, [6, "d.vec4f", ["centre", [1, "size", "/", [6, "std.max", [[6, "std.distance", ["centre", "eye"]], [5, "0.000001"]]]]]]]]]
|
|
163
|
+
},
|
|
164
|
+
externals: {
|
|
165
|
+
"std.mul": () => std.mul,
|
|
166
|
+
"d.vec4f": () => d.vec4f,
|
|
167
|
+
"longestAxis": () => longestAxis,
|
|
168
|
+
"std.max": () => std.max,
|
|
169
|
+
"std.distance": () => std.distance
|
|
170
|
+
}
|
|
171
|
+
}) && $.f)({})), "instanceOnScreen");
|
|
172
|
+
const instance = new Matrix4();
|
|
173
|
+
const origin = new Vector3();
|
|
174
|
+
const toVec3f = ({
|
|
175
|
+
x,
|
|
176
|
+
y,
|
|
177
|
+
z
|
|
178
|
+
}) => d.vec3f(x, y, z);
|
|
179
|
+
/**
|
|
180
|
+
* The level the instance at `offset` of `matrices` draws most of its pixels with (see `InstancedLodChunk.getLevelAt`),
|
|
181
|
+
* thinned out by `cull` and seen by `camera`, both in the InstancedLod's space, of the levels of `loaded`, `source` the
|
|
182
|
+
* source's sphere; null if it draws nothing.
|
|
183
|
+
*/
|
|
184
|
+
export function instanceLevel(matrices, offset, cull, camera, source, loaded) {
|
|
185
|
+
instance.fromArray(matrices, offset);
|
|
186
|
+
if (instance.getMaxScaleOnAxis() === 0) return null;
|
|
187
|
+
origin.setFromMatrixPosition(instance);
|
|
188
|
+
const grow = cull ? cullScale(toVec3f(origin), origin.distanceTo(cull.eye), cull.near, cull.far, Number(cull.survivors)) : 1;
|
|
189
|
+
if (grow === 0) return null;
|
|
190
|
+
const {
|
|
191
|
+
levels,
|
|
192
|
+
eye,
|
|
193
|
+
scale,
|
|
194
|
+
ortho
|
|
195
|
+
} = camera;
|
|
196
|
+
const {
|
|
197
|
+
center,
|
|
198
|
+
radius
|
|
199
|
+
} = source;
|
|
200
|
+
const height = instanceOnScreen(d.mat4x4f(...instance.elements), d.vec4f(center.x, center.y, center.z, radius), grow, toVec3f(eye), scale, Number(ortho)).w;
|
|
201
|
+
return drawnLevel(levelsToDraw(height, levels, loaded, loaded, 1));
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=measure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Matrix4","Vector3","d","std","tgpu","drawnLevel","levelsToDraw","MAX_SURVIVOR_SCALE","xorshift","globalThis","__TYPEGPU_AUTONAME__","a","fn","u32","$","__TYPEGPU_META__","WeakMap","set","f","value","h","v","name","undefined","ast","params","type","body","externals","d.u32","originHash","vec3f","f32","origin","bits","bitcastF32toU32","x","y","z","__tsover_div","std.bitcastF32toU32","d.f32","cullScale","distance","near","far","survivors","share","clamp","__tsover_sub","min","sqrt","std.clamp","std.min","std.sqrt","longestAxis","mat4x4f","matrix","length","mul","vec4f","xyz","max","std.length","std.mul","d.vec4f","std.max","instanceOnScreen","source","grow","eye","scale","ortho","centre","size","__tsover_mul","w","std.distance","instance","toVec3f","instanceLevel","matrices","offset","cull","camera","loaded","fromArray","getMaxScaleOnAxis","setFromMatrixPosition","distanceTo","Number","levels","center","radius","height","elements"],"sources":["../../src/instanced/measure.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,55 +1,46 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
instanceMatrix: StorageInstancedBufferAttribute;
|
|
11
|
-
instanceColor: StorageInstancedBufferAttribute | null;
|
|
12
|
-
boundingSphere: Sphere | null;
|
|
13
|
-
constructor(geometry: BufferGeometry, material: NodeMaterial, selection: Selection);
|
|
1
|
+
import { type Box3, type Camera, type Color, Matrix4, Mesh, type Object3D, type Sphere } from "three/webgpu";
|
|
2
|
+
import { type DrawnInstances, type InstanceSlots } from "../levels/fade.js";
|
|
3
|
+
import { type IndirectDraw } from "./rows.js";
|
|
4
|
+
/** A mesh of a level's object and one of its material groups, placed in the instance's space. */
|
|
5
|
+
export interface Part {
|
|
6
|
+
template: Mesh;
|
|
7
|
+
placement: Matrix4;
|
|
8
|
+
group: number;
|
|
9
|
+
draw: IndirectDraw;
|
|
14
10
|
}
|
|
15
|
-
/**
|
|
16
|
-
export
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
private readonly owner;
|
|
30
|
-
/** Per level, the meshes drawing it. */
|
|
31
|
-
readonly byLevel: LevelMesh[][];
|
|
32
|
-
/** Each mesh's byte offset in the indirect argument table. */
|
|
33
|
-
private readonly offsets;
|
|
11
|
+
/** What every level mesh of one InstancedLod draws from. */
|
|
12
|
+
export interface MeshInputs {
|
|
13
|
+
/** The instances, which a mesh made later draws too. */
|
|
14
|
+
readonly instances: DrawnInstances;
|
|
15
|
+
/**
|
|
16
|
+
* Around every instance, in the InstancedLod's space: what its meshes are culled by, and their box, which three's
|
|
17
|
+
* Box3.setFromObject reads.
|
|
18
|
+
*/
|
|
19
|
+
readonly bounds: Sphere;
|
|
20
|
+
readonly box: Box3;
|
|
21
|
+
/** Per camera, the instances in each level's list and where its indirect draws lie. */
|
|
22
|
+
readonly slots: (camera: Camera) => InstanceSlots;
|
|
23
|
+
/** One instance's bounding radius in its own space, which shadow casters are cut off at. */
|
|
24
|
+
readonly radius: number;
|
|
34
25
|
/**
|
|
35
|
-
* `
|
|
36
|
-
*
|
|
26
|
+
* Where `camera`'s indirect draws lie as a mesh draws for it with `renderer`, its lists sorted: the camera's due sorts,
|
|
27
|
+
* every InstancedLod's, run now. Never throws: three is rendering.
|
|
37
28
|
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
show(camera: Camera, matrixWorld: Matrix4): boolean;
|
|
50
|
-
/** Whether the selection runs before the next draw of any InstancedLod. */
|
|
51
|
-
schedule(selected: boolean): void;
|
|
52
|
-
dispose(): void;
|
|
53
|
-
/** Material group `part.group` of `part.template` drawn for every instance in `level`'s slots. */
|
|
54
|
-
private mesh;
|
|
29
|
+
readonly drawFor: (renderer: unknown, camera: Camera) => InstanceSlots["args"];
|
|
30
|
+
}
|
|
31
|
+
/** `object`'s meshes and material groups, placed once in the instance's space, for level `level`. */
|
|
32
|
+
export declare function partsOf(object: Object3D, level: number): Part[];
|
|
33
|
+
/** A level's meshes, which draw once their indirect draws lie among a camera's (see `drawFrom`). */
|
|
34
|
+
export interface LevelMeshes {
|
|
35
|
+
readonly meshes: Mesh[];
|
|
36
|
+
/** The meshes' indirect draws, in order. */
|
|
37
|
+
readonly draws: IndirectDraw[];
|
|
38
|
+
/** Draw from the camera's draw `first` on, where `draws` were appended (see `InstanceSlots.args`). */
|
|
39
|
+
drawFrom(first: number): void;
|
|
55
40
|
}
|
|
41
|
+
/** The meshes drawing `parts`, tinted by `tint`. */
|
|
42
|
+
export declare function levelMeshes(parts: readonly Part[], tint: Color, inputs: MeshInputs): LevelMeshes;
|
|
43
|
+
/** Release `mesh`, which may never have been added. */
|
|
44
|
+
export declare function freeMesh(mesh: Mesh): void;
|
|
45
|
+
/** Point every mesh of `meshes` at `instances.matrices`, which changed: survivors scale, or no longer do. */
|
|
46
|
+
export declare function drawMatrices(meshes: readonly Mesh[], instances: DrawnInstances): void;
|