@drawcall/lod 0.1.2 → 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 +13 -70
- package/dist/at.d.ts +2 -0
- package/dist/at.js +8 -0
- package/dist/at.js.map +1 -0
- 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 +5 -5
- package/dist/baked/codec.js +58 -158
- 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 +16 -6
- package/dist/baked/index.js +23 -21
- 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.d.ts +2 -2
- package/dist/baked/low.js +9 -8
- 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/codec/mesh.js +220 -0
- package/dist/codec/mesh.js.map +1 -0
- package/dist/dispose.d.ts +11 -4
- package/dist/dispose.js +39 -12
- 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 +23 -14
- package/dist/impostor/bake/index.js +42 -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 +60 -12
- 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 +5 -11
- package/dist/impostor/codec.js +37 -121
- 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 +11 -8
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +10 -7
- package/dist/impostor/mesh/index.js +15 -18
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +24 -13
- package/dist/impostor/mesh/material.js +67 -51
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +20 -16
- package/dist/impostor/mesh/surface.js +81 -58
- 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/impostor/octahedral.d.ts +1 -8
- package/dist/impostor/octahedral.js +3 -18
- package/dist/impostor/octahedral.js.map +1 -1
- package/dist/index.d.ts +16 -10
- package/dist/index.js +14 -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 -92
- package/dist/instanced/index.js +229 -512
- 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 +46 -14
- package/dist/instanced/meshes.js +137 -22
- 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 +15 -0
- package/dist/instanced/raycast.js +46 -0
- package/dist/instanced/raycast.js.map +1 -0
- 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} +13 -7
- 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 +12 -15
- package/dist/loader/cache.js +64 -33
- 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/dependencies.d.ts +32 -0
- package/dist/loader/dependencies.js +113 -0
- 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 +16 -0
- package/dist/loader/url.js +35 -0
- package/dist/loader/url.js.map +1 -0
- package/dist/lod.d.ts +79 -49
- package/dist/lod.js +209 -153
- 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} +42 -22
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +4 -13
- package/dist/{bounds.js → source/detail.js} +62 -32
- package/dist/source/detail.js.map +1 -0
- package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
- package/dist/source/{error.js → deviation.js} +12 -12
- package/dist/source/deviation.js.map +1 -0
- 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 +2 -2
- package/dist/source/source.js +2 -2
- 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 +20 -19
- package/dist/three.js +29 -35
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +10 -14
- package/dist/tsl.js +12 -47
- 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 +4 -4
- package/dist/wind/index.js +43 -40
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +4 -1
- package/dist/wind/sway.js +4 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +24 -8
- package/skills/lod/SKILL.md +147 -108
- package/dist/bounds.js.map +0 -1
- package/dist/fade.d.ts +0 -44
- package/dist/fade.js +0 -78
- package/dist/fade.js.map +0 -1
- package/dist/impostor/cache.d.ts +0 -15
- package/dist/impostor/cache.js +0 -44
- package/dist/impostor/cache.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/bounds.d.ts +0 -50
- package/dist/instanced/bounds.js +0 -271
- package/dist/instanced/bounds.js.map +0 -1
- package/dist/instanced/dirty.d.ts +0 -12
- package/dist/instanced/dirty.js +0 -61
- package/dist/instanced/dirty.js.map +0 -1
- package/dist/instanced/select.d.ts +0 -84
- package/dist/instanced/select.js +0 -264
- package/dist/instanced/select.js.map +0 -1
- package/dist/lazy.d.ts +0 -64
- package/dist/lazy.js +0 -187
- package/dist/lazy.js.map +0 -1
- package/dist/levels.d.ts +0 -72
- package/dist/levels.js +0 -146
- package/dist/levels.js.map +0 -1
- package/dist/loader/dispose.d.ts +0 -3
- package/dist/loader/dispose.js +0 -25
- package/dist/loader/dispose.js.map +0 -1
- package/dist/loader.d.ts +0 -99
- package/dist/loader.js +0 -234
- package/dist/loader.js.map +0 -1
- package/dist/material.js.map +0 -1
- package/dist/pause.d.ts +0 -6
- package/dist/pause.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/simplify.js.map +0 -1
- package/dist/source/error.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 -30
- package/dist/view.js +0 -75
- package/dist/view.js.map +0 -1
- /package/dist/{material.d.ts → levels/material.d.ts} +0 -0
package/dist/tsl.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Node, NodeBuilder } from "three/webgpu";
|
|
2
2
|
/** Column `i` (0..3) of `m`. */
|
|
3
3
|
export declare const column: (m: Node<"mat4">, i: 0 | 1 | 2 | 3) => Node<"vec4">;
|
|
4
4
|
/** The largest scale `m` applies along an axis. */
|
|
5
5
|
export declare const maxScale: (m: Node<"mat4">) => Node<"float">;
|
|
6
|
+
/** An upper bound on the largest stretch `m` applies to any direction, exact for orthogonal axes (as `stretch` in three.ts). */
|
|
7
|
+
export declare function stretch(m: Node<"mat4">): Node<"float">;
|
|
6
8
|
/** Whether projection `m` is orthographic: its bottom-right element is 1. */
|
|
7
9
|
export declare const isOrthographic: (m: Node<"mat4">) => Node<"bool">;
|
|
8
10
|
/** An affine matrix `m` and the inverse of its linear part, as cofactor columns over the determinant. */
|
|
9
|
-
|
|
11
|
+
interface Affine {
|
|
10
12
|
/** `m`'s linear part applied to direction `v` */
|
|
11
13
|
apply(v: Node<"vec3">): Node<"vec3">;
|
|
12
14
|
/** the inverse of the linear part applied to direction `v` */
|
|
@@ -25,21 +27,15 @@ export declare function contextNode(builder: NodeBuilder, ...path: string[]): No
|
|
|
25
27
|
* An object that stays the same throughout one build of a shader, to cache per build
|
|
26
28
|
* what several of a material's slots read. Each slot is handed its own proxy of the
|
|
27
29
|
* builder, and three's typings expose no handle of the build itself: this is what the
|
|
28
|
-
* build
|
|
30
|
+
* build holds for `anchor`. `getNodeProperties` is public in three, only missing from
|
|
31
|
+
* its typings.
|
|
29
32
|
*/
|
|
30
33
|
export declare function buildKey(builder: NodeBuilder, anchor: Node): object;
|
|
31
34
|
/**
|
|
32
35
|
* Whether `node` builds to a `type` value, which three's typings leave open for a
|
|
33
36
|
* material's slots. Checked while a shader builds, so a slot of another type fails there.
|
|
34
37
|
*/
|
|
35
|
-
export declare function isNodeOf<T extends
|
|
36
|
-
|
|
37
|
-
export
|
|
38
|
-
export
|
|
39
|
-
export declare const roomBounds: (attribute: BufferAttribute) => StorageBufferNode<"vec4">;
|
|
40
|
-
/**
|
|
41
|
-
* A context in which every texture read is `bias` mip levels above the level the
|
|
42
|
-
* hardware would pick: the level from the read's own texel footprint, plus `bias`. Reads
|
|
43
|
-
* with uv of their own making, or with an explicit level or gradients, keep theirs.
|
|
44
|
-
*/
|
|
45
|
-
export declare function biasedTextures(bias: Node<"float">): ContextNode<unknown>;
|
|
38
|
+
export declare function isNodeOf<T extends NodeType>(node: Node, type: T, builder: NodeBuilder): node is Node<T>;
|
|
39
|
+
/** The TSL node types `isNodeOf` tells apart. */
|
|
40
|
+
export type NodeType = "bool" | "float" | "int" | "uint" | "vec2" | "vec3" | "vec4" | "mat4";
|
|
41
|
+
export {};
|
package/dist/tsl.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { cross, dot, max, vec3, vec4 } from "three/tsl";
|
|
2
|
+
import { isNode } from "./three.js";
|
|
2
3
|
// Matrix access for the shaders, in operations three's typings know: they type no
|
|
3
4
|
// columns, inverses or transposes of matrix nodes. A product with a unit vector picks a
|
|
4
5
|
// column out and compiles to the same read; an affine inverse is cofactors and a dot.
|
|
@@ -6,6 +7,14 @@ import { context, cross, dFdx, dFdy, dot, length, log2, max, storage, uniform, u
|
|
|
6
7
|
export const column = (m, i) => m.mul(vec4(i === 0 ? 1 : 0, i === 1 ? 1 : 0, i === 2 ? 1 : 0, i === 3 ? 1 : 0));
|
|
7
8
|
/** The largest scale `m` applies along an axis. */
|
|
8
9
|
export const maxScale = (m) => max(column(m, 0).xyz.length(), max(column(m, 1).xyz.length(), column(m, 2).xyz.length()));
|
|
10
|
+
/** An upper bound on the largest stretch `m` applies to any direction, exact for orthogonal axes (as `stretch` in three.ts). */
|
|
11
|
+
export function stretch(m) {
|
|
12
|
+
const a = column(m, 0).xyz, b = column(m, 1).xyz, c = column(m, 2).xyz;
|
|
13
|
+
const ab = dot(a, b).abs();
|
|
14
|
+
const ac = dot(a, c).abs();
|
|
15
|
+
const bc = dot(b, c).abs();
|
|
16
|
+
return max(dot(a, a).add(ab).add(ac), max(dot(b, b).add(ab).add(bc), dot(c, c).add(ac).add(bc))).sqrt();
|
|
17
|
+
}
|
|
9
18
|
/** Whether projection `m` is orthographic: its bottom-right element is 1. */
|
|
10
19
|
export const isOrthographic = (m) => column(m, 3).w.equal(1);
|
|
11
20
|
export function affine(m) {
|
|
@@ -25,7 +34,6 @@ export function affine(m) {
|
|
|
25
34
|
normalColumns: [c0, c1, c2],
|
|
26
35
|
};
|
|
27
36
|
}
|
|
28
|
-
const isNode = (value) => typeof value === "object" && value !== null && Reflect.get(value, "isNode") === true;
|
|
29
37
|
/** The node at `path` in the context `builder` builds with, which three's typings leave open. */
|
|
30
38
|
export function contextNode(builder, ...path) {
|
|
31
39
|
const value = path.reduce((at, key) => (typeof at === "object" && at !== null ? Reflect.get(at, key) : undefined), builder.context);
|
|
@@ -37,7 +45,8 @@ export function contextNode(builder, ...path) {
|
|
|
37
45
|
* An object that stays the same throughout one build of a shader, to cache per build
|
|
38
46
|
* what several of a material's slots read. Each slot is handed its own proxy of the
|
|
39
47
|
* builder, and three's typings expose no handle of the build itself: this is what the
|
|
40
|
-
* build
|
|
48
|
+
* build holds for `anchor`. `getNodeProperties` is public in three, only missing from
|
|
49
|
+
* its typings.
|
|
41
50
|
*/
|
|
42
51
|
export function buildKey(builder, anchor) {
|
|
43
52
|
const properties = Reflect.apply(Reflect.get(builder, "getNodeProperties"), builder, [anchor]);
|
|
@@ -52,48 +61,4 @@ export function buildKey(builder, anchor) {
|
|
|
52
61
|
export function isNodeOf(node, type, builder) {
|
|
53
62
|
return node.getNodeType(builder) === type;
|
|
54
63
|
}
|
|
55
|
-
/**
|
|
56
|
-
* One node per buffer and role: a stage has few storage bindings. Each library material
|
|
57
|
-
* reads one buffer per role. Stable, distinct names let equal shaders share programs;
|
|
58
|
-
* Three's default storage names contain global node IDs, even for otherwise equal code.
|
|
59
|
-
*/
|
|
60
|
-
function storageCache(type, name) {
|
|
61
|
-
const nodes = new WeakMap();
|
|
62
|
-
return (attribute) => {
|
|
63
|
-
let node = nodes.get(attribute);
|
|
64
|
-
if (!node)
|
|
65
|
-
nodes.set(attribute, (node = storage(attribute, type, attribute.count).setName(name)));
|
|
66
|
-
return node;
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
export const instanceFades = storageCache("float", "lodInstanceFades");
|
|
70
|
-
export const instanceColors = storageCache("vec4", "lodInstanceColors");
|
|
71
|
-
export const instanceMatrices = storageCache("mat4", "lodInstanceMatrices");
|
|
72
|
-
export const roomBounds = storageCache("vec4", "lodRoomBounds");
|
|
73
|
-
/** The size in texels of a texture's image, or null when it has none to read. */
|
|
74
|
-
function texelsOf(image) {
|
|
75
|
-
if (typeof image !== "object" || image === null || !("width" in image) || !("height" in image))
|
|
76
|
-
return null;
|
|
77
|
-
const { width, height } = image;
|
|
78
|
-
return typeof width === "number" && typeof height === "number" ? [width, height] : null;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* A context in which every texture read is `bias` mip levels above the level the
|
|
82
|
-
* hardware would pick: the level from the read's own texel footprint, plus `bias`. Reads
|
|
83
|
-
* with uv of their own making, or with an explicit level or gradients, keep theirs.
|
|
84
|
-
*/
|
|
85
|
-
export function biasedTextures(bias) {
|
|
86
|
-
return context({
|
|
87
|
-
getTextureLevel: (node) => {
|
|
88
|
-
const texture = node.value;
|
|
89
|
-
const size = texelsOf(texture.image);
|
|
90
|
-
if (node.uvNode || !size)
|
|
91
|
-
return null;
|
|
92
|
-
// The texture's offset, repeat and rotation, as three applies them.
|
|
93
|
-
const at = uniform(texture.matrix).mul(vec3(uv(texture.channel), 1)).xy;
|
|
94
|
-
const texels = at.mul(vec2(size[0], size[1]));
|
|
95
|
-
return log2(max(max(length(dFdx(texels)), length(dFdy(texels))), 1e-6)).add(bias);
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
64
|
//# sourceMappingURL=tsl.js.map
|
package/dist/tsl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsl.js","sourceRoot":"","sources":["../src/tsl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tsl.js","sourceRoot":"","sources":["../src/tsl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Node } from "three/webgpu";
|
|
2
|
+
import { type TgpuFn } from "typegpu";
|
|
3
|
+
/** The WGSL types a TypeGPU function given to toTsl takes or returns, by TypeGPU's names, and the TSL node type of each. */
|
|
4
|
+
declare const NODE_TYPES: {
|
|
5
|
+
readonly f32: "float";
|
|
6
|
+
readonly i32: "int";
|
|
7
|
+
readonly u32: "uint";
|
|
8
|
+
readonly vec3f: "vec3";
|
|
9
|
+
readonly vec4f: "vec4";
|
|
10
|
+
readonly mat4x4f: "mat4";
|
|
11
|
+
};
|
|
12
|
+
type WgslType = keyof typeof NODE_TYPES;
|
|
13
|
+
/** The WGSL types such a function returns. */
|
|
14
|
+
type ReturnedType = "f32" | "vec3f" | "vec4f";
|
|
15
|
+
/** A TypeGPU data type, such as `d.f32`, by its WGSL name. */
|
|
16
|
+
type Typed<T extends WgslType = WgslType> = {
|
|
17
|
+
readonly type: T;
|
|
18
|
+
};
|
|
19
|
+
/** A TypeGPU function's argument and return types. */
|
|
20
|
+
interface Shell<A extends readonly Typed[], R extends ReturnedType> {
|
|
21
|
+
readonly argTypes: A;
|
|
22
|
+
readonly returnType: Typed<R>;
|
|
23
|
+
}
|
|
24
|
+
/** The TSL nodes the function takes, by the names `N` of its arguments, typed `A` in their order. */
|
|
25
|
+
type TslInputs<N extends readonly string[], A extends readonly Typed[]> = {
|
|
26
|
+
[I in keyof N & `${number}` as N[I]]: Node<(typeof NODE_TYPES)[A[I & keyof A]["type"]]>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* A TSL function of nodes named `names` that calls `fn`, a TypeGPU function, through a WGSL forwarder `name`;
|
|
30
|
+
* TypeGPU's WGSL joins the shader as a library.
|
|
31
|
+
*/
|
|
32
|
+
export declare function toTsl<A extends Typed[], R extends ReturnedType, const N extends {
|
|
33
|
+
[I in keyof A]: string;
|
|
34
|
+
}>(name: string, names: N, fn: TgpuFn & {
|
|
35
|
+
readonly shell: Shell<A, R>;
|
|
36
|
+
}): (inputs: TslInputs<N, A>) => Node<(typeof NODE_TYPES)[R]>;
|
|
37
|
+
export {};
|
package/dist/typegpu.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Fn, code, wgslFn } from "three/tsl";
|
|
2
|
+
import { tgpu } from "typegpu";
|
|
3
|
+
import { at } from "./at.js";
|
|
4
|
+
import { isNodeOf } from "./tsl.js";
|
|
5
|
+
// TypeGPU functions ('use gpu') in three's shaders: one function runs as plain JS on the CPU and, through toTsl, as
|
|
6
|
+
// WGSL in a TSL node graph.
|
|
7
|
+
/** The WGSL types a TypeGPU function given to toTsl takes or returns, by TypeGPU's names, and the TSL node type of each. */
|
|
8
|
+
const NODE_TYPES = {
|
|
9
|
+
f32: "float",
|
|
10
|
+
i32: "int",
|
|
11
|
+
u32: "uint",
|
|
12
|
+
vec3f: "vec3",
|
|
13
|
+
vec4f: "vec4",
|
|
14
|
+
mat4x4f: "mat4"
|
|
15
|
+
};
|
|
16
|
+
// Not generic: three's Fn leaves a generic return type unresolved.
|
|
17
|
+
export function toTsl(name, names, fn) {
|
|
18
|
+
// TgpuFn types its shell loosely; the signature types it by its WGSL types.
|
|
19
|
+
const shell = fn.shell;
|
|
20
|
+
const returned = shell.returnType.type;
|
|
21
|
+
const params = names.map((param, index) => `${param}: ${at(shell.argTypes, index).type}`);
|
|
22
|
+
const signature = `(${params.join(", ")}) -> ${returned}`;
|
|
23
|
+
const library = code(tgpu.resolve({
|
|
24
|
+
template: `fn ${name}Of${signature} { return target(${names.join(", ")}); }`,
|
|
25
|
+
externals: {
|
|
26
|
+
target: fn
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
const call = wgslFn(`fn ${name}${signature} { return ${name}Of(${names.join(", ")}); }`, [library]);
|
|
30
|
+
const type = NODE_TYPES[returned];
|
|
31
|
+
return inputs => Fn(builder => {
|
|
32
|
+
const value = call(inputs);
|
|
33
|
+
if (isNodeOf(value, type, builder)) return value;
|
|
34
|
+
throw new Error(`@drawcall/lod: ${name}'s WGSL returns no ${returned}`);
|
|
35
|
+
})();
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=typegpu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Fn","code","wgslFn","tgpu","at","isNodeOf","NODE_TYPES","f32","i32","u32","vec3f","vec4f","mat4x4f","toTsl","name","names","fn","shell","returned","returnType","type","params","map","param","index","argTypes","signature","join","library","resolve","template","externals","target","call","inputs","builder","value","Error"],"sources":["../src/typegpu.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,EAAE,EAAEC,IAAI,EAAEC,MAAM,QAAQ,WAAW;AAC5C,SAASC,IAAI,QAAqB,SAAS;AAC3C,SAASC,EAAE,QAAQ,SAAS;AAC5B,SAASC,QAAQ,QAAuB,UAAU;AAElD;AACA;AAEA;AACA,MAAMC,UAAU,GAAG;EAAEC,GAAG,EAAE,OAAO;EAAEC,GAAG,EAAE,KAAK;EAAEC,GAAG,EAAE,MAAM;EAAEC,KAAK,EAAE,MAAM;EAAEC,KAAK,EAAE,MAAM;EAAEC,OAAO,EAAE;AAAM,CAA8C;AA6BvJ;AACA,OAAM,SAAUC,KAAKA,CACnBC,IAAY,EACZC,KAAwB,EACxBC,EAA6D;EAE7D;EACA,MAAMC,KAAK,GAAiCD,EAAE,CAACC,KAAK;EACpD,MAAMC,QAAQ,GAAGD,KAAK,CAACE,UAAU,CAACC,IAAI;EACtC,MAAMC,MAAM,GAAGN,KAAK,CAACO,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAK,GAAGD,KAAK,KAAKnB,EAAE,CAACa,KAAK,CAACQ,QAAQ,EAAED,KAAK,CAAC,CAACJ,IAAI,EAAE,CAAC;EACzF,MAAMM,SAAS,GAAG,IAAIL,MAAM,CAACM,IAAI,CAAC,IAAI,CAAC,QAAQT,QAAQ,EAAE;EACzD,MAAMU,OAAO,GAAG3B,IAAI,CAACE,IAAI,CAAC0B,OAAO,CAAC;IAAEC,QAAQ,EAAE,MAAMhB,IAAI,KAAKY,SAAS,oBAAoBX,KAAK,CAACY,IAAI,CAAC,IAAI,CAAC,MAAM;IAAEI,SAAS,EAAE;MAAEC,MAAM,EAAEhB;IAAE;EAAE,CAAE,CAAC,CAAC;EAC/I,MAAMiB,IAAI,GAAG/B,MAAM,CAAC,MAAMY,IAAI,GAAGY,SAAS,aAAaZ,IAAI,MAAMC,KAAK,CAACY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAACC,OAAO,CAAC,CAAC;EACnG,MAAMR,IAAI,GAAGd,UAAU,CAACY,QAAQ,CAAC;EACjC,OAAQgB,MAAM,IACZlC,EAAE,CAAEmC,OAAO,IAAI;IACb,MAAMC,KAAK,GAAGH,IAAI,CAACC,MAAM,CAAC;IAC1B,IAAI7B,QAAQ,CAAC+B,KAAK,EAAEhB,IAAI,EAAEe,OAAO,CAAC,EAAE,OAAOC,KAAK;IAChD,MAAM,IAAIC,KAAK,CAAC,kBAAkBvB,IAAI,sBAAsBI,QAAQ,EAAE,CAAC;EACzE,CAAC,CAAC,EAAE;AACR","ignoreList":[]}
|
package/dist/wind/bounds.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Matrix4, Sphere, Vector3 } from "three/webgpu";
|
|
2
|
-
import {
|
|
2
|
+
import { fadeSourceOf } from "../levels/fade.js";
|
|
3
3
|
import { isImpostorMesh, isInstancedMesh } from "../three.js";
|
|
4
4
|
/** Bound maximum sway on the mesh itself, leaving shared geometry in its rest pose. */
|
|
5
5
|
export function windBounds(mesh, placement, amplitude, baseY, height) {
|
|
@@ -16,7 +16,7 @@ export function windBounds(mesh, placement, amplitude, baseY, height) {
|
|
|
16
16
|
const reach = Math.max(Math.abs(root.min.y - baseY), Math.abs(root.max.y - baseY)) / height;
|
|
17
17
|
rest.radius += amplitude * reach * horizontalScale(placement.clone().invert());
|
|
18
18
|
// An ImpostorMesh of its own measures its shadow casters by this radius too.
|
|
19
|
-
const draw =
|
|
19
|
+
const draw = fadeSourceOf(mesh);
|
|
20
20
|
if (draw?.kind === "instances")
|
|
21
21
|
draw.radius = rest.radius;
|
|
22
22
|
const instances = isInstancedMesh(mesh) || isImpostorMesh(mesh) ? mesh : null;
|
package/dist/wind/bounds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/wind/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/wind/bounds.ts"],"names":[],"mappings":"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"}
|
package/dist/wind/hooks.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* How a Lod or InstancedLod takes wind: it refuses it once it has rendered or prepares levels, whose shaders would then
|
|
3
|
+
* build in a frame; else it pads its setup-only culling and casters, while the levels it draws hold their rest bounds.
|
|
4
|
+
*/
|
|
5
|
+
export declare const WIND: unique symbol;
|
|
6
|
+
export interface WindTarget {
|
|
7
|
+
[WIND](padding: number, slope: number, baseY: number): void;
|
|
5
8
|
}
|
package/dist/wind/hooks.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* How a Lod or InstancedLod takes wind: it refuses it once it has rendered or prepares levels, whose shaders would then
|
|
3
|
+
* build in a frame; else it pads its setup-only culling and casters, while the levels it draws hold their rest bounds.
|
|
4
|
+
*/
|
|
5
|
+
export const WIND = Symbol("wind");
|
|
3
6
|
//# sourceMappingURL=hooks.js.map
|
package/dist/wind/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/wind/hooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/wind/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/wind/index.d.ts
CHANGED
|
@@ -42,16 +42,16 @@ export declare class Wind {
|
|
|
42
42
|
/** Oscillations per second; zero freezes the time-dependent part of the phase. */
|
|
43
43
|
get speed(): number;
|
|
44
44
|
set speed(value: number);
|
|
45
|
-
/** Global amplitude multiplier in [0, 1]. Zero
|
|
45
|
+
/** Global amplitude multiplier in [0, 1]. Zero draws the rest pose, with the wind shader. */
|
|
46
46
|
get strength(): number;
|
|
47
47
|
set strength(value: number);
|
|
48
48
|
get direction(): readonly [number, number];
|
|
49
49
|
set direction([x, z]: readonly [number, number]);
|
|
50
|
-
/** Attach once, after constructing all levels. Objects without this call
|
|
50
|
+
/** Attach once, after constructing all levels and before a Lod or InstancedLod first renders. Objects without this call draw with their original shaders. */
|
|
51
51
|
apply(root: Object3D, { amplitude, baseY, height }: SwayOptions): void;
|
|
52
|
-
/** Attach meshes
|
|
52
|
+
/** Attach meshes arriving with a deferred level; existing meshes retain their bounds. */
|
|
53
53
|
private attach;
|
|
54
54
|
}
|
|
55
55
|
/** Rebuilt LODs and impostors share the clock, with their own placements and bounds. */
|
|
56
56
|
export declare function copyWind(source: Object3D, target: Object3D): void;
|
|
57
|
-
export declare function refreshWind(root: Object3D): void;
|
|
57
|
+
export declare function refreshWind(root: Object3D, added?: Object3D): void;
|
package/dist/wind/index.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { Box3, Matrix4, ObjectSpaceNormalMap, Vector2 } from "three/webgpu";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { levelBox } from "../levels/bounds.js";
|
|
3
|
+
import { boundingBox } from "../source/detail.js";
|
|
4
|
+
import { levelMaterial } from "../levels/material.js";
|
|
4
5
|
import { isBatchedMesh, isImpostorMesh, isInstancedLod, isInstancedMesh, isLOD, isMesh, isSkinnedMesh, isStorageInstanced } from "../three.js";
|
|
5
|
-
import {
|
|
6
|
+
import { WIND } from "./hooks.js";
|
|
6
7
|
import { windBounds } from "./bounds.js";
|
|
7
|
-
import { setSway, swayMatrix } from "./sway.js";
|
|
8
|
+
import { setSway, swayMatrix, swaying } from "./sway.js";
|
|
9
|
+
/** The Wind each root was applied to, and how: a side table, as the roots are the app's. */
|
|
8
10
|
const bindings = new WeakMap();
|
|
9
|
-
const attached = new WeakSet();
|
|
10
11
|
const identity = new Matrix4();
|
|
12
|
+
// Every wind's values are read per object. Sharing this node stops attachments from
|
|
13
|
+
// invalidating the same material when another region starts drawing its impostor.
|
|
14
|
+
const impostorSway = swayMatrix();
|
|
11
15
|
/**
|
|
12
16
|
* A shared GPU breeze: an affine sway, fixed at the base and linear with height.
|
|
13
17
|
* Bake/build levels first, apply once to the completed Lod, InstancedLod, mesh or
|
|
@@ -50,7 +54,7 @@ export class Wind {
|
|
|
50
54
|
nonnegative(value, "speed");
|
|
51
55
|
this.breeze.speed = value;
|
|
52
56
|
}
|
|
53
|
-
/** Global amplitude multiplier in [0, 1]. Zero
|
|
57
|
+
/** Global amplitude multiplier in [0, 1]. Zero draws the rest pose, with the wind shader. */
|
|
54
58
|
get strength() {
|
|
55
59
|
return this.breeze.strength;
|
|
56
60
|
}
|
|
@@ -71,33 +75,24 @@ export class Wind {
|
|
|
71
75
|
throw new Error("Wind: direction must be nonzero");
|
|
72
76
|
this.breeze.direction.set(x, z).normalize();
|
|
73
77
|
}
|
|
74
|
-
/** Attach once, after constructing all levels. Objects without this call
|
|
78
|
+
/** Attach once, after constructing all levels and before a Lod or InstancedLod first renders. Objects without this call draw with their original shaders. */
|
|
75
79
|
apply(root, { amplitude, baseY, height }) {
|
|
76
80
|
if (bindings.has(root))
|
|
77
81
|
throw new Error("Wind: already applied to this object");
|
|
78
82
|
this.attach(root, { amplitude, baseY, height }, false);
|
|
79
83
|
}
|
|
80
|
-
/** Attach meshes
|
|
81
|
-
attach(root, { amplitude, baseY, height }, refreshing) {
|
|
84
|
+
/** Attach meshes arriving with a deferred level; existing meshes retain their bounds. */
|
|
85
|
+
attach(root, { amplitude, baseY, height }, refreshing, added = root, knownBox) {
|
|
82
86
|
nonnegative(amplitude, "amplitude");
|
|
83
|
-
const box = sourceBox(root);
|
|
84
|
-
if (box.isEmpty())
|
|
85
|
-
throw new Error("Wind: object has no geometry");
|
|
86
|
-
const base = baseY ?? box.min.y;
|
|
87
|
-
const size = height ?? box.max.y - base;
|
|
88
|
-
finite(base, "baseY");
|
|
89
|
-
finite(size, "height");
|
|
90
|
-
if (size <= 0)
|
|
91
|
-
throw new Error("Wind: height must be positive");
|
|
92
87
|
const meshes = [];
|
|
93
|
-
|
|
88
|
+
added.traverse((node) => {
|
|
94
89
|
if (node !== root && isLOD(node))
|
|
95
90
|
throw new Error("Wind: apply to nested LODs individually");
|
|
96
91
|
if (!isMesh(node))
|
|
97
92
|
return;
|
|
98
|
-
if (refreshing &&
|
|
93
|
+
if (refreshing && swaying(node))
|
|
99
94
|
return;
|
|
100
|
-
if (
|
|
95
|
+
if (swaying(node))
|
|
101
96
|
throw new Error("Wind: a mesh already belongs to a wind root");
|
|
102
97
|
if (isSkinnedMesh(node) || isBatchedMesh(node))
|
|
103
98
|
throw new Error("Wind: skinned and batched meshes are not supported");
|
|
@@ -114,9 +109,10 @@ export class Wind {
|
|
|
114
109
|
if (meshes.length === 0) {
|
|
115
110
|
if (refreshing)
|
|
116
111
|
return;
|
|
117
|
-
|
|
112
|
+
if (!isLOD(root))
|
|
113
|
+
throw new Error("Wind: object has no meshes");
|
|
118
114
|
}
|
|
119
|
-
|
|
115
|
+
added.updateWorldMatrix(true, true);
|
|
120
116
|
invertible(root.matrixWorld);
|
|
121
117
|
const inverse = root.matrixWorld.clone().invert();
|
|
122
118
|
const placed = meshes.map((mesh) => {
|
|
@@ -126,38 +122,45 @@ export class Wind {
|
|
|
126
122
|
invertible(placement);
|
|
127
123
|
return { mesh, placement };
|
|
128
124
|
});
|
|
125
|
+
const box = knownBox ?? sourceBox(root);
|
|
126
|
+
if (box.isEmpty())
|
|
127
|
+
throw new Error("Wind: object has no geometry");
|
|
128
|
+
const base = baseY ?? box.min.y;
|
|
129
|
+
const size = height ?? box.max.y - base;
|
|
130
|
+
finite(base, "baseY");
|
|
131
|
+
finite(size, "height");
|
|
132
|
+
if (size <= 0)
|
|
133
|
+
throw new Error("Wind: height must be positive");
|
|
129
134
|
const shape = new Vector2(amplitude / size, base);
|
|
130
135
|
const padding = (amplitude * Math.max(Math.abs(box.min.y - base), Math.abs(box.max.y - base))) / size;
|
|
131
|
-
if (
|
|
132
|
-
root[
|
|
136
|
+
if (isWindTarget(root) && !refreshing)
|
|
137
|
+
root[WIND](padding, amplitude / size, base);
|
|
133
138
|
for (const { mesh, placement } of placed) {
|
|
134
139
|
if (!isInstancedLod(root))
|
|
135
140
|
windBounds(mesh, placement, amplitude, base, size);
|
|
136
141
|
setSway(mesh, { breeze: this.breeze, shape, placement, fromRoot: placement.clone().invert() });
|
|
137
142
|
if (isImpostorMesh(mesh)) {
|
|
138
|
-
mesh.material.deformNode
|
|
139
|
-
|
|
143
|
+
if (mesh.material.deformNode !== impostorSway) {
|
|
144
|
+
mesh.material.deformNode = impostorSway;
|
|
145
|
+
mesh.material.needsUpdate = true;
|
|
146
|
+
}
|
|
140
147
|
}
|
|
141
148
|
else
|
|
142
149
|
mesh.material = Array.isArray(mesh.material) ? mesh.material.map((m) => levelMaterial(m, true)) : levelMaterial(mesh.material, true);
|
|
143
|
-
attached.add(mesh);
|
|
144
150
|
}
|
|
145
151
|
const options = { amplitude, baseY: base, height: size };
|
|
146
|
-
bindings.set(root, { wind: this, options, refresh: () => this.attach(root, options, true) });
|
|
152
|
+
bindings.set(root, { wind: this, options, refresh: (next) => this.attach(root, options, true, next, box) });
|
|
147
153
|
}
|
|
148
154
|
}
|
|
149
|
-
function
|
|
150
|
-
return
|
|
155
|
+
function isWindTarget(root) {
|
|
156
|
+
return WIND in root;
|
|
151
157
|
}
|
|
152
158
|
function sourceBox(root) {
|
|
153
159
|
if (isLOD(root)) {
|
|
154
|
-
for (const
|
|
155
|
-
const box =
|
|
156
|
-
if (box.isEmpty())
|
|
157
|
-
|
|
158
|
-
if (object.matrixAutoUpdate)
|
|
159
|
-
object.updateMatrix();
|
|
160
|
-
return box.applyMatrix4(object.matrix);
|
|
160
|
+
for (const level of root.levels) {
|
|
161
|
+
const box = levelBox(level);
|
|
162
|
+
if (!box.isEmpty())
|
|
163
|
+
return box;
|
|
161
164
|
}
|
|
162
165
|
return new Box3();
|
|
163
166
|
}
|
|
@@ -189,8 +192,8 @@ export function copyWind(source, target) {
|
|
|
189
192
|
if (binding)
|
|
190
193
|
binding.wind.apply(target, binding.options);
|
|
191
194
|
}
|
|
192
|
-
export function refreshWind(root) {
|
|
195
|
+
export function refreshWind(root, added = root) {
|
|
193
196
|
const binding = bindings.get(root);
|
|
194
|
-
binding?.refresh();
|
|
197
|
+
binding?.refresh(added);
|
|
195
198
|
}
|
|
196
199
|
//# sourceMappingURL=index.js.map
|
package/dist/wind/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wind/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAA4B,MAAM,cAAc,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wind/index.ts"],"names":[],"mappings":"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"}
|
package/dist/wind/sway.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface Breeze {
|
|
|
10
10
|
direction: Vector2;
|
|
11
11
|
}
|
|
12
12
|
/** How one mesh sways. */
|
|
13
|
-
|
|
13
|
+
interface Sway {
|
|
14
14
|
breeze: Breeze;
|
|
15
15
|
/** sideways displacement per unit of height at full swing, and the base's height, in the root's space */
|
|
16
16
|
shape: Vector2;
|
|
@@ -20,6 +20,8 @@ export interface Sway {
|
|
|
20
20
|
}
|
|
21
21
|
/** Sway `mesh` as `sway` says. */
|
|
22
22
|
export declare const setSway: (mesh: Object3D, sway: Sway) => void;
|
|
23
|
+
/** Whether a Wind sways `mesh`. */
|
|
24
|
+
export declare const swaying: (mesh: Object3D) => boolean;
|
|
23
25
|
/**
|
|
24
26
|
* `position` (a mesh's, after its instance matrix) swayed, and its normal with it. three
|
|
25
27
|
* applies instance matrices first: the sway is carried into the instanced space.
|
|
@@ -27,3 +29,4 @@ export declare const setSway: (mesh: Object3D, sway: Sway) => void;
|
|
|
27
29
|
export declare const sway: (position: Node<"vec3">) => Node<"vec3">;
|
|
28
30
|
/** The sway as a matrix in the mesh's own space, for an ImpostorMesh's card (which inverts it). */
|
|
29
31
|
export declare const swayMatrix: import("three/src/nodes/TSL.js").FnNode<[], import("three/webgpu").VarNode<"mat4", import("three/webgpu").JoinNode<"mat4">>>;
|
|
32
|
+
export {};
|
package/dist/wind/sway.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Matrix4, Vector2 } from "three/webgpu";
|
|
2
2
|
import { Fn, dot, length, mat4, max, modelWorldMatrix, normalLocal, sin, uniform, vec2, vec3, vec4 } from "three/tsl";
|
|
3
|
-
import { instanceMatrixOf } from "../fade.js";
|
|
3
|
+
import { instanceMatrixOf } from "../levels/fade.js";
|
|
4
4
|
import { affine, column } from "../tsl.js";
|
|
5
|
+
/** How each swaying mesh sways: a side table, as the meshes are the app's. */
|
|
5
6
|
const sways = new WeakMap();
|
|
6
7
|
/** Sway `mesh` as `sway` says. */
|
|
7
8
|
export const setSway = (mesh, sway) => void sways.set(mesh, sway);
|
|
9
|
+
/** Whether a Wind sways `mesh`. */
|
|
10
|
+
export const swaying = (mesh) => sways.has(mesh);
|
|
8
11
|
const identity = new Matrix4();
|
|
9
12
|
const still = new Vector2();
|
|
10
13
|
const of = (object) => (object ? sways.get(object) : undefined);
|
package/dist/wind/sway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sway.js","sourceRoot":"","sources":["../../src/wind/sway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAA4B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sway.js","sourceRoot":"","sources":["../../src/wind/sway.ts"],"names":[],"mappings":"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"}
|