@drawcall/lod 0.1.0 → 0.2.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 +10 -69
- package/dist/at.d.ts +2 -0
- package/dist/at.js +8 -0
- package/dist/at.js.map +1 -0
- package/dist/baked/codec.d.ts +6 -3
- package/dist/baked/codec.js +22 -16
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.d.ts +3 -0
- package/dist/baked/coverage.js +45 -0
- package/dist/baked/coverage.js.map +1 -0
- package/dist/baked/index.d.ts +4 -0
- package/dist/baked/index.js +3 -35
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/low.d.ts +2 -2
- package/dist/baked/low.js +4 -4
- package/dist/baked/low.js.map +1 -1
- package/dist/bounds.d.ts +12 -2
- package/dist/bounds.js +72 -10
- package/dist/bounds.js.map +1 -1
- package/dist/compile.d.ts +4 -0
- package/dist/compile.js +100 -0
- package/dist/compile.js.map +1 -0
- package/dist/deferred.d.ts +12 -0
- package/dist/deferred.js +27 -0
- package/dist/deferred.js.map +1 -0
- package/dist/dispose.d.ts +7 -3
- package/dist/dispose.js +33 -4
- package/dist/dispose.js.map +1 -1
- package/dist/fade.d.ts +5 -13
- package/dist/fade.js +62 -28
- package/dist/fade.js.map +1 -1
- package/dist/impostor/bake/index.d.ts +1 -0
- package/dist/impostor/bake/index.js +1 -0
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.js +11 -1
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/codec.d.ts +2 -7
- package/dist/impostor/codec.js +16 -27
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/mesh/card.js +4 -1
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +6 -4
- package/dist/impostor/mesh/index.js +8 -10
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +7 -5
- package/dist/impostor/mesh/material.js +29 -26
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +20 -16
- package/dist/impostor/mesh/surface.js +74 -55
- package/dist/impostor/mesh/surface.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 +7 -6
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/instanced/args.js +2 -2
- package/dist/instanced/args.js.map +1 -1
- package/dist/instanced/{bounds.d.ts → blocks.d.ts} +25 -9
- package/dist/instanced/{bounds.js → blocks.js} +76 -53
- package/dist/instanced/blocks.js.map +1 -0
- package/dist/instanced/dirty.d.ts +3 -0
- package/dist/instanced/dirty.js +40 -5
- package/dist/instanced/dirty.js.map +1 -1
- package/dist/instanced/index.d.ts +25 -51
- package/dist/instanced/index.js +189 -413
- package/dist/instanced/index.js.map +1 -1
- package/dist/instanced/meshes.d.ts +54 -13
- package/dist/instanced/meshes.js +178 -41
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/parts.d.ts +14 -0
- package/dist/instanced/parts.js +79 -0
- package/dist/instanced/parts.js.map +1 -0
- package/dist/instanced/raycast.d.ts +13 -0
- package/dist/instanced/raycast.js +53 -0
- package/dist/instanced/raycast.js.map +1 -0
- package/dist/instanced/select.d.ts +17 -9
- package/dist/instanced/select.js +114 -63
- package/dist/instanced/select.js.map +1 -1
- package/dist/instanced/store.d.ts +31 -0
- package/dist/instanced/store.js +96 -0
- package/dist/instanced/store.js.map +1 -0
- package/dist/levels.d.ts +71 -48
- package/dist/levels.js +99 -74
- package/dist/levels.js.map +1 -1
- package/dist/loader/bundle.d.ts +25 -0
- package/dist/loader/bundle.js +241 -0
- package/dist/loader/bundle.js.map +1 -0
- package/dist/loader/cache.d.ts +15 -15
- package/dist/loader/cache.js +71 -33
- package/dist/loader/cache.js.map +1 -1
- package/dist/loader/provenance.d.ts +30 -0
- package/dist/loader/provenance.js +105 -0
- package/dist/loader/provenance.js.map +1 -0
- package/dist/loader/url.d.ts +13 -0
- package/dist/loader/url.js +31 -0
- package/dist/loader/url.js.map +1 -0
- package/dist/loader.d.ts +30 -74
- package/dist/loader.js +191 -186
- package/dist/loader.js.map +1 -1
- package/dist/lod.d.ts +20 -31
- package/dist/lod.js +105 -96
- package/dist/lod.js.map +1 -1
- package/dist/material.js +9 -4
- package/dist/material.js.map +1 -1
- package/dist/mesh/codec.d.ts +4 -0
- package/dist/mesh/codec.js +192 -0
- package/dist/mesh/codec.js.map +1 -0
- package/dist/queue.d.ts +2 -0
- package/dist/queue.js +33 -0
- package/dist/queue.js.map +1 -0
- package/dist/residency.d.ts +44 -0
- package/dist/residency.js +205 -0
- package/dist/residency.js.map +1 -0
- package/dist/simplify.js +5 -3
- package/dist/simplify.js.map +1 -1
- package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
- package/dist/source/{error.js → deviation.js} +6 -6
- package/dist/source/deviation.js.map +1 -0
- package/dist/source/source.d.ts +1 -1
- package/dist/source/source.js +1 -1
- package/dist/three.d.ts +17 -5
- package/dist/three.js +24 -3
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +5 -5
- package/dist/tsl.js +12 -19
- package/dist/tsl.js.map +1 -1
- package/dist/view.d.ts +16 -1
- package/dist/view.js +57 -1
- package/dist/view.js.map +1 -1
- package/dist/wind/index.d.ts +2 -2
- package/dist/wind/index.js +31 -28
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +2 -1
- package/package.json +9 -3
- package/skills/lod/SKILL.md +71 -109
- 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/bounds.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/loader/dispose.d.ts +0 -3
- package/dist/loader/dispose.js +0 -25
- package/dist/loader/dispose.js.map +0 -1
- package/dist/source/error.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviation.js","sourceRoot":"","sources":["../../src/source/deviation.ts"],"names":[],"mappings":"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"}
|
package/dist/source/source.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface Source extends Merged {
|
|
|
15
15
|
corners: Float32Array;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* `object` read for `who` (named in errors), to `bake` or only to `measure` the
|
|
18
|
+
* `object` read for `who` (named in errors), to `bake` or only to `measure` the deviation of
|
|
19
19
|
* a level against it. A measure needs only where the surface is cut out: a cut-out whose
|
|
20
20
|
* textures the CPU cannot read (compressed ones) counts as opaque there, where a bake
|
|
21
21
|
* fails on it.
|
package/dist/source/source.js
CHANGED
|
@@ -3,7 +3,7 @@ import { MeshBVH } from "three-mesh-bvh";
|
|
|
3
3
|
import { readMaterial } from "./shading.js";
|
|
4
4
|
import { merge } from "./surface.js";
|
|
5
5
|
/**
|
|
6
|
-
* `object` read for `who` (named in errors), to `bake` or only to `measure` the
|
|
6
|
+
* `object` read for `who` (named in errors), to `bake` or only to `measure` the deviation of
|
|
7
7
|
* a level against it. A measure needs only where the surface is cut out: a cut-out whose
|
|
8
8
|
* textures the CPU cannot read (compressed ones) counts as opaque there, where a bake
|
|
9
9
|
* fails on it.
|
package/dist/three.d.ts
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
|
-
import { MeshStandardNodeMaterial, type BatchedMesh, type BufferAttribute, type Color, type InstancedMesh, type Material, type Mesh, type MeshPhysicalMaterial, type MeshStandardMaterial, type NodeMaterial, type Object3D, type Renderer, type Scene, type SkinnedMesh, type StorageInstancedBufferAttribute, type Texture } from "three/webgpu";
|
|
1
|
+
import { MeshStandardNodeMaterial, type BatchedMesh, type Box3, type BufferAttribute, type Color, type InstancedMesh, type Loader, type Material, type Mesh, type MeshPhysicalMaterial, type MeshStandardMaterial, type Node, type NodeMaterial, type Object3D, type Renderer, type Scene, type SkinnedMesh, type StorageInstancedBufferAttribute, type Texture } from "three/webgpu";
|
|
2
|
+
import type { GLTSLoader, GLTSScene } from "@drawcall/glts";
|
|
3
|
+
import type { Instances } from "./instanced/meshes.js";
|
|
2
4
|
import type { InstancedLod } from "./instanced/index.js";
|
|
3
5
|
import type { ImpostorMesh } from "./impostor/mesh/index.js";
|
|
4
|
-
import type { LazyImpostor } from "./lazy.js";
|
|
5
6
|
export declare const isObject3D: (value: unknown) => value is Object3D;
|
|
7
|
+
export declare const isNode: (value: unknown) => value is Node;
|
|
6
8
|
export declare const isMesh: (node: Object3D) => node is Mesh;
|
|
7
9
|
export declare const isSkinnedMesh: (node: Object3D) => node is SkinnedMesh;
|
|
8
10
|
export declare const isInstancedMesh: (node: Object3D) => node is InstancedMesh;
|
|
9
11
|
export declare const isBatchedMesh: (node: Object3D) => node is BatchedMesh;
|
|
10
12
|
export declare const isLight: (node: Object3D) => boolean;
|
|
11
13
|
export declare const isScene: (node: Object3D) => node is Scene;
|
|
14
|
+
export declare const isGLTSScene: (node: Object3D) => node is GLTSScene;
|
|
15
|
+
/** A GLTSLoader, recognized by the bundled module provenance it publishes. */
|
|
16
|
+
export declare const isGLTSLoader: (loader: Loader) => loader is GLTSLoader;
|
|
12
17
|
export declare const isImpostorMesh: (node: Object3D) => node is ImpostorMesh;
|
|
13
|
-
export declare const
|
|
18
|
+
export declare const isLodInstances: (node: Object3D) => node is Instances;
|
|
14
19
|
export declare const isInstancedLod: (node: Object3D) => node is InstancedLod;
|
|
15
20
|
/** three's LOD and this package's Lod and InstancedLod. */
|
|
16
21
|
export declare const isLOD: (node: Object3D) => node is Object3D & {
|
|
17
22
|
isLOD: true;
|
|
18
23
|
autoUpdate: boolean;
|
|
19
24
|
readonly levels: ReadonlyArray<{
|
|
20
|
-
readonly object
|
|
25
|
+
readonly object?: Object3D;
|
|
26
|
+
readonly box?: Box3;
|
|
21
27
|
}>;
|
|
22
28
|
};
|
|
23
29
|
export declare const isStandard: (material: Material) => material is MeshStandardMaterial;
|
|
@@ -37,6 +43,11 @@ export declare const isColor: (value: unknown) => value is Color;
|
|
|
37
43
|
* WebGLRenderer, which this package does not draw with.
|
|
38
44
|
*/
|
|
39
45
|
export declare function gpuRenderer(renderer: unknown): Renderer;
|
|
46
|
+
/** The queue of `renderer`'s WebGPU device; throws until the backend has one. */
|
|
47
|
+
export declare function gpuQueue(renderer: Renderer): GPUQueueLike;
|
|
48
|
+
interface GPUQueueLike {
|
|
49
|
+
onSubmittedWorkDone(): Promise<void>;
|
|
50
|
+
}
|
|
40
51
|
/**
|
|
41
52
|
* Whether the scene `node` is in is being drawn into a shadow map: three's shadow pass
|
|
42
53
|
* draws it with its own override material, and calls `update` on every LOD with the
|
|
@@ -45,7 +56,7 @@ export declare function gpuRenderer(renderer: unknown): Renderer;
|
|
|
45
56
|
export declare function inShadowPass(node: Object3D): boolean;
|
|
46
57
|
/** Whether `material` is the one three draws shadow maps with (a node material building for a shadow pass has it). */
|
|
47
58
|
export declare const isShadowPass: (material: unknown) => boolean;
|
|
48
|
-
/** The
|
|
59
|
+
/** The storage matrices of a level draw, an ImpostorMesh, or a storage-backed InstancedMesh; else null. */
|
|
49
60
|
export declare function storageMatrices(object: Object3D): StorageInstancedBufferAttribute | null;
|
|
50
61
|
/** Whether `value` is of exactly `like`'s class: a guard for clone() overrides. */
|
|
51
62
|
export declare const sameClass: <T extends object>(like: T, value: object) => value is T;
|
|
@@ -53,3 +64,4 @@ export declare const sameClass: <T extends object>(like: T, value: object) => va
|
|
|
53
64
|
export declare function rejectSkinned(root: Object3D, who: string): void;
|
|
54
65
|
/** Give `level` the transform of `source`, and its shadows: cast or receive if any mesh of it does. */
|
|
55
66
|
export declare function placeLike(level: Object3D, source: Object3D): void;
|
|
67
|
+
export {};
|
package/dist/three.js
CHANGED
|
@@ -3,14 +3,18 @@ import { MeshBasicNodeMaterial, MeshLambertNodeMaterial, MeshMatcapNodeMaterial,
|
|
|
3
3
|
// package, as in .glts scripts) where `instanceof` does not, and small checks on objects.
|
|
4
4
|
const flag = (value, name) => typeof value === "object" && value !== null && Reflect.get(value, name) === true;
|
|
5
5
|
export const isObject3D = (value) => flag(value, "isObject3D");
|
|
6
|
+
export const isNode = (value) => flag(value, "isNode");
|
|
6
7
|
export const isMesh = (node) => flag(node, "isMesh");
|
|
7
8
|
export const isSkinnedMesh = (node) => flag(node, "isSkinnedMesh");
|
|
8
9
|
export const isInstancedMesh = (node) => flag(node, "isInstancedMesh");
|
|
9
10
|
export const isBatchedMesh = (node) => flag(node, "isBatchedMesh");
|
|
10
11
|
export const isLight = (node) => flag(node, "isLight");
|
|
11
12
|
export const isScene = (node) => flag(node, "isScene");
|
|
13
|
+
export const isGLTSScene = (node) => isScene(node) && "source" in node && "dispose" in node && typeof node.dispose === "function";
|
|
14
|
+
/** A GLTSLoader, recognized by the bundled module provenance it publishes. */
|
|
15
|
+
export const isGLTSLoader = (loader) => "moduleSources" in loader && typeof loader.moduleSources === "object" && loader.moduleSources !== null;
|
|
12
16
|
export const isImpostorMesh = (node) => flag(node, "isImpostorMesh");
|
|
13
|
-
export const
|
|
17
|
+
export const isLodInstances = (node) => flag(node, "isLodInstances");
|
|
14
18
|
export const isInstancedLod = (node) => flag(node, "isInstancedLod");
|
|
15
19
|
/** three's LOD and this package's Lod and InstancedLod. */
|
|
16
20
|
export const isLOD = (node) => flag(node, "isLOD");
|
|
@@ -60,6 +64,23 @@ export function gpuRenderer(renderer) {
|
|
|
60
64
|
return renderer;
|
|
61
65
|
}
|
|
62
66
|
const isRenderer = (value) => flag(value, "isRenderer");
|
|
67
|
+
/** The queue of `renderer`'s WebGPU device; throws until the backend has one. */
|
|
68
|
+
export function gpuQueue(renderer) {
|
|
69
|
+
const { backend } = renderer;
|
|
70
|
+
// three's typings declare WebGPUBackend but not its device.
|
|
71
|
+
const device = isWebGPUBackend(backend) && "device" in backend ? backend.device : undefined;
|
|
72
|
+
if (!hasQueue(device))
|
|
73
|
+
throw new Error("@drawcall/lod: level preparation requires an initialized WebGPU device");
|
|
74
|
+
return device.queue;
|
|
75
|
+
}
|
|
76
|
+
const hasQueue = (value) => typeof value === "object" &&
|
|
77
|
+
value !== null &&
|
|
78
|
+
"queue" in value &&
|
|
79
|
+
typeof value.queue === "object" &&
|
|
80
|
+
value.queue !== null &&
|
|
81
|
+
"onSubmittedWorkDone" in value.queue &&
|
|
82
|
+
typeof value.queue.onSubmittedWorkDone === "function";
|
|
83
|
+
const isWebGPUBackend = (backend) => flag(backend, "isWebGPUBackend");
|
|
63
84
|
/**
|
|
64
85
|
* Whether the scene `node` is in is being drawn into a shadow map: three's shadow pass
|
|
65
86
|
* draws it with its own override material, and calls `update` on every LOD with the
|
|
@@ -73,9 +94,9 @@ export function inShadowPass(node) {
|
|
|
73
94
|
}
|
|
74
95
|
/** Whether `material` is the one three draws shadow maps with (a node material building for a shadow pass has it). */
|
|
75
96
|
export const isShadowPass = (material) => flag(material, "isShadowPassMaterial");
|
|
76
|
-
/** The
|
|
97
|
+
/** The storage matrices of a level draw, an ImpostorMesh, or a storage-backed InstancedMesh; else null. */
|
|
77
98
|
export function storageMatrices(object) {
|
|
78
|
-
if (isImpostorMesh(object))
|
|
99
|
+
if (isImpostorMesh(object) || isLodInstances(object))
|
|
79
100
|
return object.instanceMatrix;
|
|
80
101
|
return isInstancedMesh(object) && isStorageInstanced(object.instanceMatrix) ? object.instanceMatrix : null;
|
|
81
102
|
}
|
package/dist/three.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"three.js","sourceRoot":"","sources":["../src/three.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"three.js","sourceRoot":"","sources":["../src/three.ts"],"names":[],"mappings":"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"}
|
package/dist/tsl.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare const maxScale: (m: Node<"mat4">) => Node<"float">;
|
|
|
6
6
|
/** Whether projection `m` is orthographic: its bottom-right element is 1. */
|
|
7
7
|
export declare const isOrthographic: (m: Node<"mat4">) => Node<"bool">;
|
|
8
8
|
/** An affine matrix `m` and the inverse of its linear part, as cofactor columns over the determinant. */
|
|
9
|
-
|
|
9
|
+
interface Affine {
|
|
10
10
|
/** `m`'s linear part applied to direction `v` */
|
|
11
11
|
apply(v: Node<"vec3">): Node<"vec3">;
|
|
12
12
|
/** the inverse of the linear part applied to direction `v` */
|
|
@@ -33,13 +33,13 @@ export declare function buildKey(builder: NodeBuilder, anchor: Node): object;
|
|
|
33
33
|
* material's slots. Checked while a shader builds, so a slot of another type fails there.
|
|
34
34
|
*/
|
|
35
35
|
export declare function isNodeOf<T extends "bool" | "float" | "vec3" | "vec4" | "color">(node: Node, type: T, builder: NodeBuilder): node is Node<T>;
|
|
36
|
-
|
|
37
|
-
export declare
|
|
38
|
-
export declare const
|
|
39
|
-
export declare const roomBounds: (attribute: BufferAttribute) => StorageBufferNode<"vec4">;
|
|
36
|
+
/** One room-bounds node per buffer; a stable name lets equal shaders share programs. */
|
|
37
|
+
export declare function roomBounds(attribute: BufferAttribute): StorageBufferNode<"vec4">;
|
|
38
|
+
export declare const instanceGroup: import("three/webgpu").UniformGroupNode;
|
|
40
39
|
/**
|
|
41
40
|
* A context in which every texture read is `bias` mip levels above the level the
|
|
42
41
|
* hardware would pick: the level from the read's own texel footprint, plus `bias`. Reads
|
|
43
42
|
* with uv of their own making, or with an explicit level or gradients, keep theirs.
|
|
44
43
|
*/
|
|
45
44
|
export declare function biasedTextures(bias: Node<"float">): ContextNode<unknown>;
|
|
45
|
+
export {};
|
package/dist/tsl.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { context, cross, dFdx, dFdy, dot, length, log2, max, storage, uniform, uv, vec2, vec3, vec4 } from "three/tsl";
|
|
1
|
+
import { NodeUpdateType, context, cross, dFdx, dFdy, dot, length, log2, max, storage, uniform, uniformGroup, uv, vec2, 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.
|
|
@@ -25,7 +26,6 @@ export function affine(m) {
|
|
|
25
26
|
normalColumns: [c0, c1, c2],
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
|
-
const isNode = (value) => typeof value === "object" && value !== null && Reflect.get(value, "isNode") === true;
|
|
29
29
|
/** The node at `path` in the context `builder` builds with, which three's typings leave open. */
|
|
30
30
|
export function contextNode(builder, ...path) {
|
|
31
31
|
const value = path.reduce((at, key) => (typeof at === "object" && at !== null ? Reflect.get(at, key) : undefined), builder.context);
|
|
@@ -52,24 +52,17 @@ export function buildKey(builder, anchor) {
|
|
|
52
52
|
export function isNodeOf(node, type, builder) {
|
|
53
53
|
return node.getNodeType(builder) === type;
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
};
|
|
55
|
+
const bounds = new WeakMap();
|
|
56
|
+
/** One room-bounds node per buffer; a stable name lets equal shaders share programs. */
|
|
57
|
+
export function roomBounds(attribute) {
|
|
58
|
+
let node = bounds.get(attribute);
|
|
59
|
+
if (!node)
|
|
60
|
+
bounds.set(attribute, (node = storage(attribute, "vec4", 0).setName("lodRoomBounds")));
|
|
61
|
+
return node;
|
|
68
62
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
export const
|
|
72
|
-
export const roomBounds = storageCache("vec4", "lodRoomBounds");
|
|
63
|
+
// Keep replaceable draw buffers out of texture-keyed binding caches. Each render
|
|
64
|
+
// object owns this group's bindings while its shader reads the shared nodes below.
|
|
65
|
+
export const instanceGroup = uniformGroup("lodInstances", 2, NodeUpdateType.OBJECT);
|
|
73
66
|
/** The size in texels of a texture's image, or null when it has none to read. */
|
|
74
67
|
function texelsOf(image) {
|
|
75
68
|
if (typeof image !== "object" || image === null || !("width" in image) || !("height" in image))
|
package/dist/tsl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsl.js","sourceRoot":"","sources":["../src/tsl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tsl.js","sourceRoot":"","sources":["../src/tsl.ts"],"names":[],"mappings":"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"}
|
package/dist/view.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector3, type Camera,
|
|
1
|
+
import { Mesh, Object3D, Vector3, type Camera, Matrix4, Sphere, type Renderer, type Scene } from "three/webgpu";
|
|
2
2
|
/**
|
|
3
3
|
* The angle `sphere` (in the space `root` maps to world) subtends from `eye`, small-angle:
|
|
4
4
|
* its diameter, scaled by the largest axis scale of `root`, over its distance.
|
|
@@ -16,6 +16,16 @@ export declare class View {
|
|
|
16
16
|
/** On-screen height of `sphere`, given in the space `root` maps to world. */
|
|
17
17
|
pixels(root: Matrix4, sphere: Sphere): number;
|
|
18
18
|
}
|
|
19
|
+
export interface RenderContext {
|
|
20
|
+
renderer: Renderer;
|
|
21
|
+
camera: Camera;
|
|
22
|
+
scene: Scene;
|
|
23
|
+
target: ReturnType<Renderer["getRenderTarget"]>;
|
|
24
|
+
mrt: ReturnType<Renderer["getMRT"]>;
|
|
25
|
+
cubeFace: number;
|
|
26
|
+
mipLevel: number;
|
|
27
|
+
}
|
|
28
|
+
export declare const renderContext: (camera: Camera) => RenderContext | undefined;
|
|
19
29
|
/**
|
|
20
30
|
* Set the view height before the first LOD update, or after a resize while no level
|
|
21
31
|
* meshes draw. Use CSS pixels for the canvas or a full-size postprocessing target;
|
|
@@ -28,3 +38,8 @@ export declare const viewportHeight: (camera: Camera) => number | null;
|
|
|
28
38
|
export declare function watchViewport(mesh: Mesh): void;
|
|
29
39
|
/** A typical screen's height, for a camera no level mesh drew with yet. */
|
|
30
40
|
export declare const TYPICAL_HEIGHT = 1080;
|
|
41
|
+
/** An empty eager fallback still needs one draw callback to discover the rendering context. */
|
|
42
|
+
export declare function watchContext(root: Object3D): void;
|
|
43
|
+
export declare function unwatchContext(root: Object3D): void;
|
|
44
|
+
/** Demand only from the viewing frustum; lazy shadow work uses the ready fallback. */
|
|
45
|
+
export declare function inView(camera: Camera, root: Matrix4, sphere: Sphere): boolean;
|
package/dist/view.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector2, Vector3, Vector4 } from "three/webgpu";
|
|
1
|
+
import { BufferGeometry, Float32BufferAttribute, Mesh, MeshBasicNodeMaterial, Object3D, Vector2, Vector3, Vector4, Matrix4, Frustum, Sphere, } from "three/webgpu";
|
|
2
2
|
import { gpuRenderer, inShadowPass } from "./three.js";
|
|
3
3
|
const scratch = new Vector3();
|
|
4
4
|
/**
|
|
@@ -42,6 +42,8 @@ const canvas = new Vector2();
|
|
|
42
42
|
* from the others.
|
|
43
43
|
*/
|
|
44
44
|
const heights = new WeakMap();
|
|
45
|
+
const contexts = new WeakMap();
|
|
46
|
+
export const renderContext = (camera) => contexts.get(camera);
|
|
45
47
|
/**
|
|
46
48
|
* Set the view height before the first LOD update, or after a resize while no level
|
|
47
49
|
* meshes draw. Use CSS pixels for the canvas or a full-size postprocessing target;
|
|
@@ -64,6 +66,18 @@ export function watchViewport(mesh) {
|
|
|
64
66
|
return;
|
|
65
67
|
const gpu = gpuRenderer(renderer);
|
|
66
68
|
const target = gpu.getRenderTarget();
|
|
69
|
+
const mrt = gpu.getMRT();
|
|
70
|
+
const cubeFace = gpu.getActiveCubeFace();
|
|
71
|
+
const mipLevel = gpu.getActiveMipmapLevel();
|
|
72
|
+
const context = contexts.get(camera);
|
|
73
|
+
if (!context ||
|
|
74
|
+
context.renderer !== gpu ||
|
|
75
|
+
context.scene !== scene ||
|
|
76
|
+
context.target !== target ||
|
|
77
|
+
context.mrt !== mrt ||
|
|
78
|
+
context.cubeFace !== cubeFace ||
|
|
79
|
+
context.mipLevel !== mipLevel)
|
|
80
|
+
contexts.set(camera, { renderer: gpu, camera, scene, target, mrt, cubeFace, mipLevel });
|
|
67
81
|
if (!target)
|
|
68
82
|
return void heights.set(camera, gpu.getViewport(viewport).w);
|
|
69
83
|
const ratio = target.height === gpu.getDrawingBufferSize(canvas).y ? gpu.getPixelRatio() : 1;
|
|
@@ -72,4 +86,46 @@ export function watchViewport(mesh) {
|
|
|
72
86
|
}
|
|
73
87
|
/** A typical screen's height, for a camera no level mesh drew with yet. */
|
|
74
88
|
export const TYPICAL_HEIGHT = 1080;
|
|
89
|
+
const observers = new WeakMap();
|
|
90
|
+
/** An empty eager fallback still needs one draw callback to discover the rendering context. */
|
|
91
|
+
export function watchContext(root) {
|
|
92
|
+
const geometry = new BufferGeometry();
|
|
93
|
+
geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0], 3));
|
|
94
|
+
geometry.setDrawRange(0, 0);
|
|
95
|
+
const mesh = new Mesh(geometry, new MeshBasicNodeMaterial({ colorWrite: false, depthWrite: false }));
|
|
96
|
+
mesh.frustumCulled = false;
|
|
97
|
+
watchViewport(mesh);
|
|
98
|
+
observers.set(root, mesh);
|
|
99
|
+
root.add(mesh);
|
|
100
|
+
}
|
|
101
|
+
export function unwatchContext(root) {
|
|
102
|
+
const mesh = observers.get(root);
|
|
103
|
+
if (!mesh)
|
|
104
|
+
return;
|
|
105
|
+
root.remove(mesh);
|
|
106
|
+
mesh.geometry.dispose();
|
|
107
|
+
if (!Array.isArray(mesh.material))
|
|
108
|
+
mesh.material.dispose();
|
|
109
|
+
observers.delete(root);
|
|
110
|
+
}
|
|
111
|
+
const views = new WeakMap();
|
|
112
|
+
const projectionView = new Matrix4(), worldSphere = new Sphere();
|
|
113
|
+
/** Demand only from the viewing frustum; lazy shadow work uses the ready fallback. */
|
|
114
|
+
export function inView(camera, root, sphere) {
|
|
115
|
+
if (sphere.isEmpty())
|
|
116
|
+
return false;
|
|
117
|
+
let cached = views.get(camera);
|
|
118
|
+
if (!cached) {
|
|
119
|
+
cached = { projection: new Matrix4().makeScale(0, 0, 0), world: new Matrix4(), frustum: new Frustum() };
|
|
120
|
+
views.set(camera, cached);
|
|
121
|
+
}
|
|
122
|
+
if (!cached.projection.equals(camera.projectionMatrix) || !cached.world.equals(camera.matrixWorld)) {
|
|
123
|
+
cached.projection.copy(camera.projectionMatrix);
|
|
124
|
+
cached.world.copy(camera.matrixWorld);
|
|
125
|
+
projectionView.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
|
|
126
|
+
cached.frustum.setFromProjectionMatrix(projectionView, camera.coordinateSystem, camera.reversedDepth);
|
|
127
|
+
}
|
|
128
|
+
worldSphere.copy(sphere).applyMatrix4(root);
|
|
129
|
+
return cached.frustum.intersectsSphere(worldSphere);
|
|
130
|
+
}
|
|
75
131
|
//# sourceMappingURL=view.js.map
|
package/dist/view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
|
package/dist/wind/index.d.ts
CHANGED
|
@@ -49,9 +49,9 @@ export declare class Wind {
|
|
|
49
49
|
set direction([x, z]: readonly [number, number]);
|
|
50
50
|
/** Attach once, after constructing all levels. Objects without this call keep 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,5 +1,5 @@
|
|
|
1
1
|
import { Box3, Matrix4, ObjectSpaceNormalMap, Vector2 } from "three/webgpu";
|
|
2
|
-
import { boundingBox } from "../bounds.js";
|
|
2
|
+
import { boundingBox, levelBox } from "../bounds.js";
|
|
3
3
|
import { levelMaterial } from "../material.js";
|
|
4
4
|
import { isBatchedMesh, isImpostorMesh, isInstancedLod, isInstancedMesh, isLOD, isMesh, isSkinnedMesh, isStorageInstanced } from "../three.js";
|
|
5
5
|
import { WIND_BOUNDS } from "./hooks.js";
|
|
@@ -8,6 +8,9 @@ import { setSway, swayMatrix } from "./sway.js";
|
|
|
8
8
|
const bindings = new WeakMap();
|
|
9
9
|
const attached = new WeakSet();
|
|
10
10
|
const identity = new Matrix4();
|
|
11
|
+
// Every wind's values are read per object. Sharing this node keeps attachments from
|
|
12
|
+
// invalidating the same material when another region starts drawing its impostor.
|
|
13
|
+
const impostorSway = swayMatrix();
|
|
11
14
|
/**
|
|
12
15
|
* A shared GPU breeze: an affine sway, fixed at the base and linear with height.
|
|
13
16
|
* Bake/build levels first, apply once to the completed Lod, InstancedLod, mesh or
|
|
@@ -77,20 +80,11 @@ export class Wind {
|
|
|
77
80
|
throw new Error("Wind: already applied to this object");
|
|
78
81
|
this.attach(root, { amplitude, baseY, height }, false);
|
|
79
82
|
}
|
|
80
|
-
/** Attach meshes
|
|
81
|
-
attach(root, { amplitude, baseY, height }, refreshing) {
|
|
83
|
+
/** Attach meshes arriving with a deferred level; existing meshes retain their bounds. */
|
|
84
|
+
attach(root, { amplitude, baseY, height }, refreshing, added = root, knownBox) {
|
|
82
85
|
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
86
|
const meshes = [];
|
|
93
|
-
|
|
87
|
+
added.traverse((node) => {
|
|
94
88
|
if (node !== root && isLOD(node))
|
|
95
89
|
throw new Error("Wind: apply to nested LODs individually");
|
|
96
90
|
if (!isMesh(node))
|
|
@@ -114,9 +108,10 @@ export class Wind {
|
|
|
114
108
|
if (meshes.length === 0) {
|
|
115
109
|
if (refreshing)
|
|
116
110
|
return;
|
|
117
|
-
|
|
111
|
+
if (!isLOD(root))
|
|
112
|
+
throw new Error("Wind: object has no meshes");
|
|
118
113
|
}
|
|
119
|
-
|
|
114
|
+
added.updateWorldMatrix(true, true);
|
|
120
115
|
invertible(root.matrixWorld);
|
|
121
116
|
const inverse = root.matrixWorld.clone().invert();
|
|
122
117
|
const placed = meshes.map((mesh) => {
|
|
@@ -126,24 +121,35 @@ export class Wind {
|
|
|
126
121
|
invertible(placement);
|
|
127
122
|
return { mesh, placement };
|
|
128
123
|
});
|
|
124
|
+
const box = knownBox ?? sourceBox(root);
|
|
125
|
+
if (box.isEmpty())
|
|
126
|
+
throw new Error("Wind: object has no geometry");
|
|
127
|
+
const base = baseY ?? box.min.y;
|
|
128
|
+
const size = height ?? box.max.y - base;
|
|
129
|
+
finite(base, "baseY");
|
|
130
|
+
finite(size, "height");
|
|
131
|
+
if (size <= 0)
|
|
132
|
+
throw new Error("Wind: height must be positive");
|
|
129
133
|
const shape = new Vector2(amplitude / size, base);
|
|
130
134
|
const padding = (amplitude * Math.max(Math.abs(box.min.y - base), Math.abs(box.max.y - base))) / size;
|
|
131
|
-
if (hasBounds(root) &&
|
|
135
|
+
if (hasBounds(root) && !refreshing)
|
|
132
136
|
root[WIND_BOUNDS](padding, amplitude / size, base);
|
|
133
137
|
for (const { mesh, placement } of placed) {
|
|
134
138
|
if (!isInstancedLod(root))
|
|
135
139
|
windBounds(mesh, placement, amplitude, base, size);
|
|
136
140
|
setSway(mesh, { breeze: this.breeze, shape, placement, fromRoot: placement.clone().invert() });
|
|
137
141
|
if (isImpostorMesh(mesh)) {
|
|
138
|
-
mesh.material.deformNode
|
|
139
|
-
|
|
142
|
+
if (mesh.material.deformNode !== impostorSway) {
|
|
143
|
+
mesh.material.deformNode = impostorSway;
|
|
144
|
+
mesh.material.needsUpdate = true;
|
|
145
|
+
}
|
|
140
146
|
}
|
|
141
147
|
else
|
|
142
148
|
mesh.material = Array.isArray(mesh.material) ? mesh.material.map((m) => levelMaterial(m, true)) : levelMaterial(mesh.material, true);
|
|
143
149
|
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
155
|
function hasBounds(root) {
|
|
@@ -151,13 +157,10 @@ function hasBounds(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,cAAc,CAAC;
|
|
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;
|
|
@@ -27,3 +27,4 @@ export declare const setSway: (mesh: Object3D, sway: Sway) => void;
|
|
|
27
27
|
export declare const sway: (position: Node<"vec3">) => Node<"vec3">;
|
|
28
28
|
/** The sway as a matrix in the mesh's own space, for an ImpostorMesh's card (which inverts it). */
|
|
29
29
|
export declare const swayMatrix: import("three/src/nodes/TSL.js").FnNode<[], import("three/webgpu").VarNode<"mat4", import("three/webgpu").JoinNode<"mat4">>>;
|
|
30
|
+
export {};
|