@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
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import { d, std, tgpu } from "typegpu";
|
|
2
|
+
import { toTsl } from "../typegpu.js";
|
|
3
|
+
// Which levels one object draws at a height, written once: a Lod calls levelsToDraw as plain JS for the CPU's measures,
|
|
4
|
+
// and runs the same function per instance on the GPU, resolved into WGSL by TypeGPU.
|
|
5
|
+
/** Share of each level's range over which its finer neighbour fades out. */
|
|
6
|
+
export const FADE = 0.1;
|
|
7
|
+
/**
|
|
8
|
+
* The most levels a Lod has. WGSL has no arrays of a size given at run time, so levelsToDraw reads
|
|
9
|
+
* maxPixels from an array of this size, and the loaded sets are bits of one u32. The GPU side passes the array as two
|
|
10
|
+
* vec4s, `low` and `high` (see `levelsToDrawNode`), which hold eight.
|
|
11
|
+
*/
|
|
12
|
+
export const MAX_LEVELS = 8;
|
|
13
|
+
/**
|
|
14
|
+
* The largest f32, which stands for any height levelsToDraw reads, as the maxPixels of level 0's Infinity: an f32
|
|
15
|
+
* holds Infinity, but WGSL has no literal for it and assumes finite math, so TypeGPU refuses to pass it.
|
|
16
|
+
*/
|
|
17
|
+
export const ANY_HEIGHT = 3.4028234663852886e38;
|
|
18
|
+
/**
|
|
19
|
+
* The levels as levelsToDraw reads them, with the draw's settings: `maxPixels` per level, `empty` the bits of the
|
|
20
|
+
* levels that draw nothing, `coarsest` the coarsest level that draws something (level 0 if none does), `forced` the
|
|
21
|
+
* level every draw shows or -1, and `fades` 1 where levels fade (not in an orthographic camera or with a forced level),
|
|
22
|
+
* else 0.
|
|
23
|
+
*/
|
|
24
|
+
export const DrawLevels = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(d.struct({
|
|
25
|
+
count: d.i32,
|
|
26
|
+
maxPixels: d.arrayOf(d.f32, MAX_LEVELS),
|
|
27
|
+
empty: d.u32,
|
|
28
|
+
coarsest: d.i32,
|
|
29
|
+
forced: d.i32,
|
|
30
|
+
fades: d.u32
|
|
31
|
+
}), "DrawLevels");
|
|
32
|
+
/** Whether bit `level` of `bits` is set: the levels of a set, such as the loaded ones, are bits of one number. */
|
|
33
|
+
export const has = (bits, level) => (bits >>> level & 1) === 1;
|
|
34
|
+
/** `levels` as levelsToDraw reads them, on the CPU and in the GPU's uniforms; `forced` a forced level or null. */
|
|
35
|
+
export function drawLevels(levels, empty, forced, fades) {
|
|
36
|
+
const maxPixels = Array.from({
|
|
37
|
+
length: MAX_LEVELS
|
|
38
|
+
}, (_, i) => Math.min(levels[i]?.maxPixels ?? 0, ANY_HEIGHT));
|
|
39
|
+
let coarsest = 0;
|
|
40
|
+
for (let i = 1; i < levels.length; i++) if (!has(empty, i)) coarsest = i;
|
|
41
|
+
return {
|
|
42
|
+
count: levels.length,
|
|
43
|
+
maxPixels,
|
|
44
|
+
empty,
|
|
45
|
+
coarsest,
|
|
46
|
+
forced: forced ?? -1,
|
|
47
|
+
fades: forced === null && fades ? 1 : 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* What one object draws: `level` with the signed fade `fade`, and `finer` with `-fade` (see fade.ts), so that each
|
|
52
|
+
* pixel is drawn by exactly one of them; with `fade` 0 only `level` draws. `level` -1 draws nothing.
|
|
53
|
+
*/
|
|
54
|
+
export const Draw = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(d.struct({
|
|
55
|
+
level: d.i32,
|
|
56
|
+
finer: d.i32,
|
|
57
|
+
fade: d.f32
|
|
58
|
+
}), "Draw");
|
|
59
|
+
/**
|
|
60
|
+
* The level that draws most of an object's pixels in `draw`, or null for none. `level` keeps 1 - fade of them and
|
|
61
|
+
* `finer` fade (see fade.ts), so `finer` once fade is above one half; at one half exactly, `level`.
|
|
62
|
+
*/
|
|
63
|
+
export function drawnLevel({
|
|
64
|
+
level,
|
|
65
|
+
finer,
|
|
66
|
+
fade
|
|
67
|
+
}) {
|
|
68
|
+
if (level < 0) return null;
|
|
69
|
+
return fade > 0.5 ? finer : level;
|
|
70
|
+
}
|
|
71
|
+
/** The GPU twin of `has` above, in code TypeGPU resolves: whether bit `index` of `bits` is set. */
|
|
72
|
+
const gpuHas = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.u32, d.i32], d.bool)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (bits, index) => {
|
|
73
|
+
"use gpu";
|
|
74
|
+
|
|
75
|
+
return (bits >>> d.u32(index) & 1) === 1;
|
|
76
|
+
}, {
|
|
77
|
+
v: 2,
|
|
78
|
+
name: undefined,
|
|
79
|
+
ast: {
|
|
80
|
+
params: [{
|
|
81
|
+
type: "i",
|
|
82
|
+
name: "bits"
|
|
83
|
+
}, {
|
|
84
|
+
type: "i",
|
|
85
|
+
name: "index"
|
|
86
|
+
}],
|
|
87
|
+
body: [0, [[10, [1, [1, [1, "bits", ">>>", [6, "d.u32", ["index"]]], "&", [5, "1"]], "===", [5, "1"]]]]]
|
|
88
|
+
},
|
|
89
|
+
externals: {
|
|
90
|
+
"d.u32": () => d.u32
|
|
91
|
+
}
|
|
92
|
+
}) && $.f)({})), "gpuHas");
|
|
93
|
+
/**
|
|
94
|
+
* Level `level`'s maxPixels. The array is walked rather than indexed: TypeScript types an index as possibly
|
|
95
|
+
* undefined, and code TypeGPU resolves cannot narrow it.
|
|
96
|
+
*/
|
|
97
|
+
const maxPixelsOf = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([DrawLevels, d.i32], d.f32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (levels, level) => {
|
|
98
|
+
"use gpu";
|
|
99
|
+
|
|
100
|
+
let found = d.f32(0);
|
|
101
|
+
let i = d.i32(0);
|
|
102
|
+
for (const maxPixels of levels.maxPixels) {
|
|
103
|
+
if (i === level) found = maxPixels;
|
|
104
|
+
i = __tsover_add(i, 1);
|
|
105
|
+
}
|
|
106
|
+
return found;
|
|
107
|
+
}, {
|
|
108
|
+
v: 2,
|
|
109
|
+
name: undefined,
|
|
110
|
+
ast: {
|
|
111
|
+
params: [{
|
|
112
|
+
type: "i",
|
|
113
|
+
name: "levels"
|
|
114
|
+
}, {
|
|
115
|
+
type: "i",
|
|
116
|
+
name: "level"
|
|
117
|
+
}],
|
|
118
|
+
body: [0, [[12, "found", [6, "d.f32", [[5, "0"]]]], [12, "i", [6, "d.i32", [[5, "0"]]]], [18, [13, "maxPixels"], [7, "levels", "maxPixels"], [0, [[11, [1, "i", "===", "level"], [2, "found", "=", "maxPixels"]], [2, "i", "+=", [5, "1"]]]]], [10, "found"]]]
|
|
119
|
+
},
|
|
120
|
+
externals: {
|
|
121
|
+
"d.f32": () => d.f32,
|
|
122
|
+
"d.i32": () => d.i32
|
|
123
|
+
}
|
|
124
|
+
}) && $.f)({})), "maxPixelsOf");
|
|
125
|
+
/** The level a `height` px tall object is drawn at: the last one whose maxPixels it fits; level 0 fits any height. */
|
|
126
|
+
export const levelForHeight = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, DrawLevels], d.i32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, levels) => {
|
|
127
|
+
"use gpu";
|
|
128
|
+
|
|
129
|
+
let level = d.i32(0);
|
|
130
|
+
let i = d.i32(0);
|
|
131
|
+
for (const maxPixels of levels.maxPixels) {
|
|
132
|
+
if (i > 0 && i < levels.count && height <= maxPixels) level = i;
|
|
133
|
+
i = __tsover_add(i, 1);
|
|
134
|
+
}
|
|
135
|
+
return level;
|
|
136
|
+
}, {
|
|
137
|
+
v: 2,
|
|
138
|
+
name: undefined,
|
|
139
|
+
ast: {
|
|
140
|
+
params: [{
|
|
141
|
+
type: "i",
|
|
142
|
+
name: "height"
|
|
143
|
+
}, {
|
|
144
|
+
type: "i",
|
|
145
|
+
name: "levels"
|
|
146
|
+
}],
|
|
147
|
+
body: [0, [[12, "level", [6, "d.i32", [[5, "0"]]]], [12, "i", [6, "d.i32", [[5, "0"]]]], [18, [13, "maxPixels"], [7, "levels", "maxPixels"], [0, [[11, [3, [3, [1, "i", ">", [5, "0"]], "&&", [1, "i", "<", [7, "levels", "count"]]], "&&", [1, "height", "<=", "maxPixels"]], [2, "level", "=", "i"]], [2, "i", "+=", [5, "1"]]]]], [10, "level"]]]
|
|
148
|
+
},
|
|
149
|
+
externals: {
|
|
150
|
+
"d.i32": () => d.i32
|
|
151
|
+
}
|
|
152
|
+
}) && $.f)({})), "levelForHeight");
|
|
153
|
+
/** `level` once loaded, else the nearest loaded coarser level that draws something, else -1: never a finer one. */
|
|
154
|
+
export const loadedOrCoarser = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.i32, DrawLevels, d.u32], d.i32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (level, levels, loaded) => {
|
|
155
|
+
"use gpu";
|
|
156
|
+
|
|
157
|
+
if (gpuHas(loaded, level)) return level;
|
|
158
|
+
for (let i = __tsover_add(level, 1); i < levels.count; i++) {
|
|
159
|
+
if (gpuHas(loaded, i) && !gpuHas(levels.empty, i)) return i;
|
|
160
|
+
}
|
|
161
|
+
return -1;
|
|
162
|
+
}, {
|
|
163
|
+
v: 2,
|
|
164
|
+
name: undefined,
|
|
165
|
+
ast: {
|
|
166
|
+
params: [{
|
|
167
|
+
type: "i",
|
|
168
|
+
name: "level"
|
|
169
|
+
}, {
|
|
170
|
+
type: "i",
|
|
171
|
+
name: "levels"
|
|
172
|
+
}, {
|
|
173
|
+
type: "i",
|
|
174
|
+
name: "loaded"
|
|
175
|
+
}],
|
|
176
|
+
body: [0, [[11, [6, "gpuHas", ["loaded", "level"]], [10, "level"]], [14, [12, "i", [1, "level", "+", [5, "1"]]], [1, "i", "<", [7, "levels", "count"]], [102, "++", "i"], [0, [[11, [3, [6, "gpuHas", ["loaded", "i"]], "&&", [4, "!", [6, "gpuHas", [[7, "levels", "empty"], "i"]]]], [10, "i"]]]]], [10, [4, "-", [5, "1"]]]]]
|
|
177
|
+
},
|
|
178
|
+
externals: {
|
|
179
|
+
"gpuHas": () => gpuHas
|
|
180
|
+
}
|
|
181
|
+
}) && $.f)({})), "loadedOrCoarser");
|
|
182
|
+
/** What an object `height` px tall draws once the levels of `loaded` are loaded, with no arrival under way. */
|
|
183
|
+
const settled = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, DrawLevels, d.u32], Draw)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, levels, loaded) => {
|
|
184
|
+
"use gpu";
|
|
185
|
+
|
|
186
|
+
// Nothing draws before the coarsest level that draws something: an object never vanishes as its camera backs away.
|
|
187
|
+
if (!gpuHas(loaded, levels.coarsest)) return Draw({
|
|
188
|
+
level: -1,
|
|
189
|
+
finer: -1,
|
|
190
|
+
fade: 0
|
|
191
|
+
});
|
|
192
|
+
let chosen = levels.forced;
|
|
193
|
+
let fade = d.f32(0);
|
|
194
|
+
if (chosen < 0) {
|
|
195
|
+
chosen = levelForHeight(height, levels);
|
|
196
|
+
if (levels.fades === 1 && chosen > 0) {
|
|
197
|
+
const top = maxPixelsOf(levels, chosen);
|
|
198
|
+
fade = std.smoothstep(__tsover_mul(top, __tsover_sub(1, FADE)), top, height);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const level = loadedOrCoarser(chosen, levels, loaded);
|
|
202
|
+
if (level < 0) return Draw({
|
|
203
|
+
level: -1,
|
|
204
|
+
finer: -1,
|
|
205
|
+
fade: 0
|
|
206
|
+
});
|
|
207
|
+
let finer = level;
|
|
208
|
+
if (fade > 0 && gpuHas(loaded, __tsover_sub(chosen, 1))) finer = __tsover_sub(chosen, 1);
|
|
209
|
+
if (finer === level) fade = 0;
|
|
210
|
+
return Draw({
|
|
211
|
+
level,
|
|
212
|
+
finer,
|
|
213
|
+
fade
|
|
214
|
+
});
|
|
215
|
+
}, {
|
|
216
|
+
v: 2,
|
|
217
|
+
name: undefined,
|
|
218
|
+
ast: {
|
|
219
|
+
params: [{
|
|
220
|
+
type: "i",
|
|
221
|
+
name: "height"
|
|
222
|
+
}, {
|
|
223
|
+
type: "i",
|
|
224
|
+
name: "levels"
|
|
225
|
+
}, {
|
|
226
|
+
type: "i",
|
|
227
|
+
name: "loaded"
|
|
228
|
+
}],
|
|
229
|
+
body: [0, [[11, [4, "!", [6, "gpuHas", ["loaded", [7, "levels", "coarsest"]]]], [10, [6, "Draw", [[104, {
|
|
230
|
+
level: [4, "-", [5, "1"]],
|
|
231
|
+
finer: [4, "-", [5, "1"]],
|
|
232
|
+
fade: [5, "0"]
|
|
233
|
+
}]]]]], [12, "chosen", [7, "levels", "forced"]], [12, "fade", [6, "d.f32", [[5, "0"]]]], [11, [1, "chosen", "<", [5, "0"]], [0, [[2, "chosen", "=", [6, "levelForHeight", ["height", "levels"]]], [11, [3, [1, [7, "levels", "fades"], "===", [5, "1"]], "&&", [1, "chosen", ">", [5, "0"]]], [0, [[13, "top", [6, "maxPixelsOf", ["levels", "chosen"]]], [2, "fade", "=", [6, "std.smoothstep", [[1, "top", "*", [1, [5, "1"], "-", "FADE"]], "top", "height"]]]]]]]]], [13, "level", [6, "loadedOrCoarser", ["chosen", "levels", "loaded"]]], [11, [1, "level", "<", [5, "0"]], [10, [6, "Draw", [[104, {
|
|
234
|
+
level: [4, "-", [5, "1"]],
|
|
235
|
+
finer: [4, "-", [5, "1"]],
|
|
236
|
+
fade: [5, "0"]
|
|
237
|
+
}]]]]], [12, "finer", "level"], [11, [3, [1, "fade", ">", [5, "0"]], "&&", [6, "gpuHas", ["loaded", [1, "chosen", "-", [5, "1"]]]]], [2, "finer", "=", [1, "chosen", "-", [5, "1"]]]], [11, [1, "finer", "===", "level"], [2, "fade", "=", [5, "0"]]], [10, [6, "Draw", [[104, {
|
|
238
|
+
level: "level",
|
|
239
|
+
finer: "finer",
|
|
240
|
+
fade: "fade"
|
|
241
|
+
}]]]]]]
|
|
242
|
+
},
|
|
243
|
+
externals: {
|
|
244
|
+
"gpuHas": () => gpuHas,
|
|
245
|
+
"Draw": () => Draw,
|
|
246
|
+
"d.f32": () => d.f32,
|
|
247
|
+
"levelForHeight": () => levelForHeight,
|
|
248
|
+
"maxPixelsOf": () => maxPixelsOf,
|
|
249
|
+
"std.smoothstep": () => std.smoothstep,
|
|
250
|
+
"FADE": () => FADE,
|
|
251
|
+
"loadedOrCoarser": () => loadedOrCoarser
|
|
252
|
+
}
|
|
253
|
+
}) && $.f)({})), "settled");
|
|
254
|
+
/**
|
|
255
|
+
* What an object `height` px tall draws: its level by height (or `levels.forced`), and inside the top FADE of that
|
|
256
|
+
* level's range its finer neighbour too, each as `loaded` has them (see `loadedOrCoarser`). Nothing draws until the
|
|
257
|
+
* coarsest level that draws something has loaded.
|
|
258
|
+
*
|
|
259
|
+
* While a level arrives, `progress` runs from 0 to 1 over the arrival (1 when none is under way) from what the levels
|
|
260
|
+
* of `before` drew to what those of `loaded` draw, with two draws only: the old height fade collapses onto one level,
|
|
261
|
+
* that level hands its pixels to the new one, and the new height fade opens. What arrives where nothing drew draws at
|
|
262
|
+
* once.
|
|
263
|
+
*/
|
|
264
|
+
export const levelsToDraw = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, DrawLevels, d.u32, d.u32, d.f32], Draw)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, levels, loaded, before, progress) => {
|
|
265
|
+
"use gpu";
|
|
266
|
+
|
|
267
|
+
const after = settled(height, levels, loaded);
|
|
268
|
+
if (progress >= 1) return after;
|
|
269
|
+
const from = settled(height, levels, before);
|
|
270
|
+
if (from.level < 0 || from.level === after.level && from.finer === after.finer) return after;
|
|
271
|
+
let level = after.level;
|
|
272
|
+
let finer = after.finer;
|
|
273
|
+
let fade = d.f32(0);
|
|
274
|
+
if (progress < __tsover_div(1, 3)) {
|
|
275
|
+
level = from.level;
|
|
276
|
+
finer = from.finer;
|
|
277
|
+
if (from.fade > 0) fade = __tsover_add(from.fade, __tsover_mul(__tsover_mul(__tsover_sub(1, from.fade), progress), 3));
|
|
278
|
+
} else if (progress < __tsover_div(2, 3)) {
|
|
279
|
+
level = std.select(after.level, after.finer, after.fade > 0);
|
|
280
|
+
finer = std.select(from.level, from.finer, from.fade > 0);
|
|
281
|
+
fade = __tsover_sub(1, __tsover_mul(__tsover_sub(progress, __tsover_div(1, 3)), 3));
|
|
282
|
+
} else if (after.fade > 0) {
|
|
283
|
+
fade = __tsover_sub(1, __tsover_mul(__tsover_mul(__tsover_sub(1, after.fade), __tsover_sub(progress, __tsover_div(2, 3))), 3));
|
|
284
|
+
}
|
|
285
|
+
if (level === finer) fade = 0;
|
|
286
|
+
return Draw({
|
|
287
|
+
level,
|
|
288
|
+
finer,
|
|
289
|
+
fade
|
|
290
|
+
});
|
|
291
|
+
}, {
|
|
292
|
+
v: 2,
|
|
293
|
+
name: undefined,
|
|
294
|
+
ast: {
|
|
295
|
+
params: [{
|
|
296
|
+
type: "i",
|
|
297
|
+
name: "height"
|
|
298
|
+
}, {
|
|
299
|
+
type: "i",
|
|
300
|
+
name: "levels"
|
|
301
|
+
}, {
|
|
302
|
+
type: "i",
|
|
303
|
+
name: "loaded"
|
|
304
|
+
}, {
|
|
305
|
+
type: "i",
|
|
306
|
+
name: "before"
|
|
307
|
+
}, {
|
|
308
|
+
type: "i",
|
|
309
|
+
name: "progress"
|
|
310
|
+
}],
|
|
311
|
+
body: [0, [[13, "after", [6, "settled", ["height", "levels", "loaded"]]], [11, [1, "progress", ">=", [5, "1"]], [10, "after"]], [13, "from", [6, "settled", ["height", "levels", "before"]]], [11, [3, [1, [7, "from", "level"], "<", [5, "0"]], "||", [3, [1, [7, "from", "level"], "===", [7, "after", "level"]], "&&", [1, [7, "from", "finer"], "===", [7, "after", "finer"]]]], [10, "after"]], [12, "level", [7, "after", "level"]], [12, "finer", [7, "after", "finer"]], [12, "fade", [6, "d.f32", [[5, "0"]]]], [11, [1, "progress", "<", [1, [5, "1"], "/", [5, "3"]]], [0, [[2, "level", "=", [7, "from", "level"]], [2, "finer", "=", [7, "from", "finer"]], [11, [1, [7, "from", "fade"], ">", [5, "0"]], [2, "fade", "=", [1, [7, "from", "fade"], "+", [1, [1, [1, [5, "1"], "-", [7, "from", "fade"]], "*", "progress"], "*", [5, "3"]]]]]]], [11, [1, "progress", "<", [1, [5, "2"], "/", [5, "3"]]], [0, [[2, "level", "=", [6, "std.select", [[7, "after", "level"], [7, "after", "finer"], [1, [7, "after", "fade"], ">", [5, "0"]]]]], [2, "finer", "=", [6, "std.select", [[7, "from", "level"], [7, "from", "finer"], [1, [7, "from", "fade"], ">", [5, "0"]]]]], [2, "fade", "=", [1, [5, "1"], "-", [1, [1, "progress", "-", [1, [5, "1"], "/", [5, "3"]]], "*", [5, "3"]]]]]], [11, [1, [7, "after", "fade"], ">", [5, "0"]], [0, [[2, "fade", "=", [1, [5, "1"], "-", [1, [1, [1, [5, "1"], "-", [7, "after", "fade"]], "*", [1, "progress", "-", [1, [5, "2"], "/", [5, "3"]]]], "*", [5, "3"]]]]]]]]], [11, [1, "level", "===", "finer"], [2, "fade", "=", [5, "0"]]], [10, [6, "Draw", [[104, {
|
|
312
|
+
level: "level",
|
|
313
|
+
finer: "finer",
|
|
314
|
+
fade: "fade"
|
|
315
|
+
}]]]]]]
|
|
316
|
+
},
|
|
317
|
+
externals: {
|
|
318
|
+
"settled": () => settled,
|
|
319
|
+
"d.f32": () => d.f32,
|
|
320
|
+
"std.select": () => std.select,
|
|
321
|
+
"Draw": () => Draw
|
|
322
|
+
}
|
|
323
|
+
}) && $.f)({})), "levelsToDraw");
|
|
324
|
+
// drawnOf passes maxPixels as two vec4s, `low` and `high`.
|
|
325
|
+
if (MAX_LEVELS !== 8) throw new Error("Lod: levelsToDraw's WGSL passes maxPixels as two vec4s: MAX_LEVELS must be 8");
|
|
326
|
+
/**
|
|
327
|
+
* levelsToDraw of the levels as `drawLevels` encodes them, with `low` and `high` holding maxPixels of levels 0 to 3 and
|
|
328
|
+
* 4 to 7: a vec3 of the level, the finer level (as floats) and the fade.
|
|
329
|
+
*/
|
|
330
|
+
const drawnOf = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, d.i32, d.vec4f, d.vec4f, d.u32, d.i32, d.i32, d.u32, d.u32, d.u32, d.f32], d.vec3f)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, count, low, high, empty, coarsest, forced, fades, loaded, before, progress) => {
|
|
331
|
+
"use gpu";
|
|
332
|
+
|
|
333
|
+
const maxPixels = d.arrayOf(d.f32, MAX_LEVELS)([low.x, low.y, low.z, low.w, high.x, high.y, high.z, high.w]);
|
|
334
|
+
const drawn = levelsToDraw(height, DrawLevels({
|
|
335
|
+
count,
|
|
336
|
+
maxPixels,
|
|
337
|
+
empty,
|
|
338
|
+
coarsest,
|
|
339
|
+
forced,
|
|
340
|
+
fades
|
|
341
|
+
}), loaded, before, progress);
|
|
342
|
+
return d.vec3f(d.f32(drawn.level), d.f32(drawn.finer), drawn.fade);
|
|
343
|
+
}, {
|
|
344
|
+
v: 2,
|
|
345
|
+
name: undefined,
|
|
346
|
+
ast: {
|
|
347
|
+
params: [{
|
|
348
|
+
type: "i",
|
|
349
|
+
name: "height"
|
|
350
|
+
}, {
|
|
351
|
+
type: "i",
|
|
352
|
+
name: "count"
|
|
353
|
+
}, {
|
|
354
|
+
type: "i",
|
|
355
|
+
name: "low"
|
|
356
|
+
}, {
|
|
357
|
+
type: "i",
|
|
358
|
+
name: "high"
|
|
359
|
+
}, {
|
|
360
|
+
type: "i",
|
|
361
|
+
name: "empty"
|
|
362
|
+
}, {
|
|
363
|
+
type: "i",
|
|
364
|
+
name: "coarsest"
|
|
365
|
+
}, {
|
|
366
|
+
type: "i",
|
|
367
|
+
name: "forced"
|
|
368
|
+
}, {
|
|
369
|
+
type: "i",
|
|
370
|
+
name: "fades"
|
|
371
|
+
}, {
|
|
372
|
+
type: "i",
|
|
373
|
+
name: "loaded"
|
|
374
|
+
}, {
|
|
375
|
+
type: "i",
|
|
376
|
+
name: "before"
|
|
377
|
+
}, {
|
|
378
|
+
type: "i",
|
|
379
|
+
name: "progress"
|
|
380
|
+
}],
|
|
381
|
+
body: [0, [[13, "maxPixels", [6, [6, "d.arrayOf", ["d.f32", "MAX_LEVELS"]], [[100, [[7, "low", "x"], [7, "low", "y"], [7, "low", "z"], [7, "low", "w"], [7, "high", "x"], [7, "high", "y"], [7, "high", "z"], [7, "high", "w"]]]]]], [13, "drawn", [6, "levelsToDraw", ["height", [6, "DrawLevels", [[104, {
|
|
382
|
+
count: "count",
|
|
383
|
+
maxPixels: "maxPixels",
|
|
384
|
+
empty: "empty",
|
|
385
|
+
coarsest: "coarsest",
|
|
386
|
+
forced: "forced",
|
|
387
|
+
fades: "fades"
|
|
388
|
+
}]]], "loaded", "before", "progress"]]], [10, [6, "d.vec3f", [[6, "d.f32", [[7, "drawn", "level"]]], [6, "d.f32", [[7, "drawn", "finer"]]], [7, "drawn", "fade"]]]]]]
|
|
389
|
+
},
|
|
390
|
+
externals: {
|
|
391
|
+
"d.arrayOf": () => d.arrayOf,
|
|
392
|
+
"d.f32": () => d.f32,
|
|
393
|
+
"MAX_LEVELS": () => MAX_LEVELS,
|
|
394
|
+
"levelsToDraw": () => levelsToDraw,
|
|
395
|
+
"DrawLevels": () => DrawLevels,
|
|
396
|
+
"d.vec3f": () => d.vec3f
|
|
397
|
+
}
|
|
398
|
+
}) && $.f)({})), "drawnOf");
|
|
399
|
+
/** drawnOf on the GPU, from its inputs as TSL nodes. */
|
|
400
|
+
export const levelsToDrawNode = toTsl("lodDraw", ["height", "count", "low", "high", "empty", "coarsest", "forced", "fades", "loaded", "before", "progress"], drawnOf);
|
|
401
|
+
//# sourceMappingURL=draw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["d","std","tgpu","toTsl","FADE","MAX_LEVELS","ANY_HEIGHT","DrawLevels","globalThis","__TYPEGPU_AUTONAME__","a","struct","count","i32","maxPixels","arrayOf","f32","empty","u32","coarsest","forced","fades","has","bits","level","drawLevels","levels","Array","from","length","_","i","Math","min","Draw","finer","fade","drawnLevel","gpuHas","fn","bool","$","__TYPEGPU_META__","WeakMap","set","f","index","v","name","undefined","ast","params","type","body","externals","d.u32","maxPixelsOf","found","__tsover_add","d.f32","d.i32","levelForHeight","height","loadedOrCoarser","loaded","settled","chosen","top","smoothstep","__tsover_mul","__tsover_sub","std.smoothstep","levelsToDraw","before","progress","after","__tsover_div","select","std.select","Error","drawnOf","vec4f","vec3f","low","high","x","y","z","w","drawn","d.arrayOf","d.vec3f","levelsToDrawNode"],"sources":["../../src/levels/draw.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type Camera, Color, type IndirectStorageBufferAttribute, Matrix4, StorageBufferAttribute, StorageInstancedBufferAttribute, type Node, type NodeBuilder, type Object3D } from "three/webgpu";
|
|
2
|
+
/**
|
|
3
|
+
* For one camera, the instances a Lod's level meshes draw: per slot, the instance and its signed fade, and where the
|
|
4
|
+
* camera's indirect draws of them lie, `DRAW_BYTES` apart in the order of the Lod's meshes.
|
|
5
|
+
*/
|
|
6
|
+
export interface InstanceSlots {
|
|
7
|
+
/** the index of the instance each slot draws */
|
|
8
|
+
readonly indices: StorageBufferAttribute;
|
|
9
|
+
/** its signed fade */
|
|
10
|
+
readonly fades: StorageBufferAttribute;
|
|
11
|
+
/** Where the camera's indirect draws of the Lod's meshes start (see rows.ts). */
|
|
12
|
+
readonly args: {
|
|
13
|
+
readonly offset: number;
|
|
14
|
+
readonly attribute: IndirectStorageBufferAttribute;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** What a Lod's level meshes draw their instances from: every instance's matrix, and its colour (RGB and a pad). */
|
|
18
|
+
export interface DrawnInstances {
|
|
19
|
+
matrices: StorageInstancedBufferAttribute;
|
|
20
|
+
colors: StorageInstancedBufferAttribute;
|
|
21
|
+
}
|
|
22
|
+
/** How a mesh drawing instances is drawn: where its fade and shadow size come from. */
|
|
23
|
+
export interface FadeSource {
|
|
24
|
+
/** per camera, the instance and signed fade of each slot; null for none (an ImpostorMesh of its own, drawing every instance) */
|
|
25
|
+
slots: ((camera: Camera) => InstanceSlots | null) | null;
|
|
26
|
+
/** one instance's bounding radius in its own space */
|
|
27
|
+
radius: number;
|
|
28
|
+
/** debug tint, white when off */
|
|
29
|
+
tint: Color;
|
|
30
|
+
/**
|
|
31
|
+
* For a plain mesh of a Lod's level: the instances it draws, and `space`, where its geometry's space sits in the
|
|
32
|
+
* source's (a Lod draws template geometry moved into the instance's space). An ImpostorMesh carries its own instances.
|
|
33
|
+
*/
|
|
34
|
+
level?: {
|
|
35
|
+
readonly instances: DrawnInstances;
|
|
36
|
+
readonly space: Matrix4;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Draw `mesh` as `source` says: its materials read it while it renders. */
|
|
40
|
+
export declare const setFadeSource: (mesh: Object3D, source: FadeSource) => void;
|
|
41
|
+
export declare const fadeSourceOf: (mesh: Object3D) => FadeSource | undefined;
|
|
42
|
+
/** This draw's debug tint (see `Lod.debug`). */
|
|
43
|
+
export declare const tint: import("three/webgpu").UniformNode<"color", Color>;
|
|
44
|
+
/** Interleaved gradient noise over the pixels of the target being drawn. */
|
|
45
|
+
export declare const dither: (pixel: Node<"vec2">) => Node<"float">;
|
|
46
|
+
/** Where `object`'s geometry space sits in its source's: moved for a Lod's plain level mesh (see `FadeSource`). */
|
|
47
|
+
export declare const spaceOf: (object: Object3D | null) => Matrix4 | null;
|
|
48
|
+
/** This draw's instance matrix when its matrices live in storage, else null. */
|
|
49
|
+
export declare function instanceMatrixOf(object: Object3D): Node<"mat4"> | null;
|
|
50
|
+
/** The colour of a draw whose instances have none: given one from the start, a draw's shader stays the same once they do. */
|
|
51
|
+
export declare const white: StorageInstancedBufferAttribute;
|
|
52
|
+
export declare const instanceColor: import("three/webgpu").VaryingNode<"vec3">;
|
|
53
|
+
/** Apply the level's shared instance bindings before its own deformation, as Three does for InstancedMesh. */
|
|
54
|
+
export declare function placeInstances(builder: NodeBuilder): void;
|
|
55
|
+
/** This draw's signed fade. */
|
|
56
|
+
export declare const fade: import("three/src/nodes/TSL.js").FnNode<[], Node<"float">>;
|
|
57
|
+
/** Whether this pixel is this draw's, by its fade: false on the other level's pixels. */
|
|
58
|
+
export declare const keepsPixel: import("three/src/nodes/TSL.js").FnNode<[], Node<"bool">>;
|
|
59
|
+
/** `position` in a shadow map render, or nothing (a point) when the draw is too small to cast. */
|
|
60
|
+
export declare const castPosition: (position: Node<"vec3">) => Node<"vec3">;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Color, Matrix4, StorageBufferAttribute, StorageInstancedBufferAttribute, } from "three/webgpu";
|
|
2
|
+
import { Fn, NodeUpdateType, bool, cameraProjectionMatrix, dot, float, fract, instanceIndex, modelWorldMatrix, normalLocal, positionLocal, transformNormal, varyingProperty, screenCoordinate, screenSize, select, storage, uniform, uniformGroup, varying, vec2, vec3, } from "three/tsl";
|
|
3
|
+
import { isImpostorMesh, isInstancedMesh, isStorageInstanced } from "../three.js";
|
|
4
|
+
import { column, isOrthographic, maxScale } from "../tsl.js";
|
|
5
|
+
/**
|
|
6
|
+
* Per level mesh, where its fade comes from: a side table, as three's Object3D has no typed place for a package's state
|
|
7
|
+
* (userData is the app's).
|
|
8
|
+
*/
|
|
9
|
+
const sources = new WeakMap();
|
|
10
|
+
/** Draw `mesh` as `source` says: its materials read it while it renders. */
|
|
11
|
+
export const setFadeSource = (mesh, source) => void sources.set(mesh, source);
|
|
12
|
+
export const fadeSourceOf = (mesh) => sources.get(mesh);
|
|
13
|
+
const WHITE = new Color(1, 1, 1);
|
|
14
|
+
const of = (object) => (object ? sources.get(object) : undefined);
|
|
15
|
+
// Per-object values, shared by every material: each draw reads its own.
|
|
16
|
+
const instanceRadius = uniform(0).onObjectUpdate(({ object }) => of(object)?.radius ?? 0);
|
|
17
|
+
/** This draw's debug tint (see `Lod.debug`). */
|
|
18
|
+
export const tint = uniform(new Color(1, 1, 1)).onObjectUpdate(({ object }) => of(object)?.tint ?? WHITE);
|
|
19
|
+
/** Interleaved gradient noise over the pixels of the target being drawn. */
|
|
20
|
+
export const dither = (pixel) => fract(float(52.9829189).mul(fract(dot(pixel, vec2(0.06711056, 0.00583715)))));
|
|
21
|
+
/** The level mesh `object` is, when it is a Lod's plain one. */
|
|
22
|
+
const levelOf = (object) => of(object)?.level ?? null;
|
|
23
|
+
/** The instances where `object` reads its matrices and colours from storage: its own, or its Lod's; else null. */
|
|
24
|
+
function instancesOf(object) {
|
|
25
|
+
if (isImpostorMesh(object))
|
|
26
|
+
return { matrices: object.instanceMatrix, colors: object.instanceColor };
|
|
27
|
+
const level = levelOf(object);
|
|
28
|
+
if (level)
|
|
29
|
+
return level.instances;
|
|
30
|
+
return isInstancedMesh(object) && isStorageInstanced(object.instanceMatrix) ? { matrices: object.instanceMatrix, colors: null } : null;
|
|
31
|
+
}
|
|
32
|
+
/** Where `object`'s geometry space sits in its source's: moved for a Lod's plain level mesh (see `FadeSource`). */
|
|
33
|
+
export const spaceOf = (object) => levelOf(object)?.space ?? null;
|
|
34
|
+
// The draw buffers below are replaced per object, so they stay out of three's texture-keyed
|
|
35
|
+
// binding caches: each render object has its own bindings of this group, while its shader
|
|
36
|
+
// reads the shared nodes.
|
|
37
|
+
const instanceGroup = uniformGroup("lodInstances", 2, NodeUpdateType.OBJECT);
|
|
38
|
+
const identity = new StorageInstancedBufferAttribute(new Float32Array(new Matrix4().elements), 16);
|
|
39
|
+
const matrices = storage(identity, "mat4", 0)
|
|
40
|
+
.setName("lodInstanceMatrices")
|
|
41
|
+
.setGroup(instanceGroup)
|
|
42
|
+
.toReadOnly()
|
|
43
|
+
.onObjectUpdate(({ object }) => {
|
|
44
|
+
const instances = object && instancesOf(object);
|
|
45
|
+
if (!instances)
|
|
46
|
+
throw new Error("Lod: instance draw has no matrices");
|
|
47
|
+
return instances.matrices;
|
|
48
|
+
});
|
|
49
|
+
/** `object`'s slots as `camera` draws it, when it draws slots. */
|
|
50
|
+
function slotsOf(object, camera) {
|
|
51
|
+
const draw = of(object);
|
|
52
|
+
return draw?.slots && camera ? draw.slots(camera) : null;
|
|
53
|
+
}
|
|
54
|
+
const zero = new StorageBufferAttribute(new Float32Array(1), 1);
|
|
55
|
+
const fades = storage(zero, "float", 0)
|
|
56
|
+
.setName("lodInstanceFades")
|
|
57
|
+
.setGroup(instanceGroup)
|
|
58
|
+
.toReadOnly()
|
|
59
|
+
.onObjectUpdate(({ object, camera }) => slotsOf(object, camera)?.fades ?? zero);
|
|
60
|
+
const none = new StorageBufferAttribute(new Uint32Array(1), 1);
|
|
61
|
+
const indices = storage(none, "uint", 0)
|
|
62
|
+
.setName("lodInstanceSlots")
|
|
63
|
+
.setGroup(instanceGroup)
|
|
64
|
+
.toReadOnly()
|
|
65
|
+
.onObjectUpdate(({ object, camera }) => slotsOf(object, camera)?.indices ?? none);
|
|
66
|
+
/** 1 when the draw's instances are slots the instance pass for each camera fills, else 0. */
|
|
67
|
+
const slotted = uniform(0, "uint").onObjectUpdate(({ object }) => Number(!!of(object)?.slots));
|
|
68
|
+
/** The instance this draw's instance index stands for: the one in its slot, or itself. */
|
|
69
|
+
const instance = Fn(() => slotted.equal(1).select(indices.element(instanceIndex), instanceIndex));
|
|
70
|
+
/** This draw's instance matrix when its matrices live in storage, else null. */
|
|
71
|
+
export function instanceMatrixOf(object) {
|
|
72
|
+
return instancesOf(object) ? matrices.element(instance()) : null;
|
|
73
|
+
}
|
|
74
|
+
/** The colour of a draw whose instances have none: given one from the start, a draw's shader stays the same once they do. */
|
|
75
|
+
export const white = new StorageInstancedBufferAttribute(new Float32Array([1, 1, 1, 1]), 4);
|
|
76
|
+
const colors = storage(white, "vec4", 0)
|
|
77
|
+
.setName("lodInstanceColors")
|
|
78
|
+
.setGroup(instanceGroup)
|
|
79
|
+
.toReadOnly()
|
|
80
|
+
.onObjectUpdate(({ object }) => (object && instancesOf(object)?.colors) || white);
|
|
81
|
+
const colorIndex = uniform(0, "uint").onObjectUpdate(({ object }) => {
|
|
82
|
+
const colors = object && instancesOf(object)?.colors;
|
|
83
|
+
return Number(!!colors && colors !== white);
|
|
84
|
+
});
|
|
85
|
+
export const instanceColor = varying(colors.element(instance().mul(colorIndex)).xyz).setInterpolation("flat");
|
|
86
|
+
/** Apply the level's shared instance bindings before its own deformation, as Three does for InstancedMesh. */
|
|
87
|
+
export function placeInstances(builder) {
|
|
88
|
+
if (!levelOf(builder.object))
|
|
89
|
+
return;
|
|
90
|
+
const matrix = matrices.element(instance());
|
|
91
|
+
positionLocal.assign(matrix.mul(positionLocal).xyz);
|
|
92
|
+
if (builder.geometry.hasAttribute("normal"))
|
|
93
|
+
normalLocal.assign(transformNormal(normalLocal, matrix));
|
|
94
|
+
varyingProperty("vec3", "vInstanceColor").assign(instanceColor);
|
|
95
|
+
}
|
|
96
|
+
/** This draw's signed fade. */
|
|
97
|
+
export const fade = Fn((builder) => {
|
|
98
|
+
if (isImpostorMesh(builder.object))
|
|
99
|
+
return varying(fades.element(instanceIndex.mul(slotted))).setInterpolation("flat");
|
|
100
|
+
if (!sources.get(builder.object)?.slots)
|
|
101
|
+
return float(0);
|
|
102
|
+
// Constant across the primitive: keep compute-written slots out of fragment bindings.
|
|
103
|
+
return varying(fades.element(instanceIndex)).setInterpolation("flat");
|
|
104
|
+
});
|
|
105
|
+
/** Whether this pixel is this draw's, by its fade: false on the other level's pixels. */
|
|
106
|
+
export const keepsPixel = Fn(() => {
|
|
107
|
+
const f = fade();
|
|
108
|
+
const d = dither(screenCoordinate.xy);
|
|
109
|
+
return select(f.greaterThanEqual(0), d.greaterThanEqual(f), d.lessThan(f.negate()));
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* Whether this draw is too small for the shadow map being drawn: narrower than a texel
|
|
113
|
+
* of an orthographic (directional light's) map, it would cover a texel centre only by
|
|
114
|
+
* chance, flickering as it or the map moves. Only valid in a shadow map render.
|
|
115
|
+
*/
|
|
116
|
+
const tooSmallToCast = Fn((builder) => {
|
|
117
|
+
const { object } = builder;
|
|
118
|
+
const instance = sources.has(object) ? instanceMatrixOf(object) : null;
|
|
119
|
+
// A mesh drawing no instances of a Lod's or an ImpostorMesh's is never too small to cast.
|
|
120
|
+
if (!instance)
|
|
121
|
+
return bool(false);
|
|
122
|
+
const diameter = maxScale(modelWorldMatrix.mul(instance)).mul(instanceRadius).mul(2);
|
|
123
|
+
// projection[1][1] is 2 × zoom / (top - bottom)
|
|
124
|
+
const texel = float(2).div(column(cameraProjectionMatrix, 1).y.mul(screenSize.y));
|
|
125
|
+
return isOrthographic(cameraProjectionMatrix).and(diameter.lessThan(texel));
|
|
126
|
+
});
|
|
127
|
+
/** `position` in a shadow map render, or nothing (a point) when the draw is too small to cast. */
|
|
128
|
+
export const castPosition = (position) => select(tooSmallToCast(), vec3(0), position);
|
|
129
|
+
//# sourceMappingURL=fade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fade.js","sourceRoot":"","sources":["../../src/levels/fade.ts"],"names":[],"mappings":"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"}
|