@drawcall/lod 0.1.2 → 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.
Files changed (144) hide show
  1. package/README.md +10 -69
  2. package/dist/at.d.ts +2 -0
  3. package/dist/at.js +8 -0
  4. package/dist/at.js.map +1 -0
  5. package/dist/baked/codec.d.ts +6 -3
  6. package/dist/baked/codec.js +22 -16
  7. package/dist/baked/codec.js.map +1 -1
  8. package/dist/baked/index.d.ts +4 -0
  9. package/dist/baked/index.js +2 -2
  10. package/dist/baked/index.js.map +1 -1
  11. package/dist/baked/low.d.ts +2 -2
  12. package/dist/baked/low.js +4 -4
  13. package/dist/baked/low.js.map +1 -1
  14. package/dist/bounds.d.ts +12 -2
  15. package/dist/bounds.js +72 -10
  16. package/dist/bounds.js.map +1 -1
  17. package/dist/compile.d.ts +4 -0
  18. package/dist/compile.js +100 -0
  19. package/dist/compile.js.map +1 -0
  20. package/dist/deferred.d.ts +12 -0
  21. package/dist/deferred.js +27 -0
  22. package/dist/deferred.js.map +1 -0
  23. package/dist/dispose.d.ts +7 -3
  24. package/dist/dispose.js +33 -4
  25. package/dist/dispose.js.map +1 -1
  26. package/dist/fade.d.ts +5 -13
  27. package/dist/fade.js +62 -28
  28. package/dist/fade.js.map +1 -1
  29. package/dist/impostor/bake/index.d.ts +1 -0
  30. package/dist/impostor/bake/index.js +1 -0
  31. package/dist/impostor/bake/index.js.map +1 -1
  32. package/dist/impostor/bake/materials.js +11 -1
  33. package/dist/impostor/bake/materials.js.map +1 -1
  34. package/dist/impostor/codec.d.ts +2 -7
  35. package/dist/impostor/codec.js +16 -27
  36. package/dist/impostor/codec.js.map +1 -1
  37. package/dist/impostor/mesh/card.js +4 -1
  38. package/dist/impostor/mesh/card.js.map +1 -1
  39. package/dist/impostor/mesh/index.d.ts +6 -4
  40. package/dist/impostor/mesh/index.js +8 -10
  41. package/dist/impostor/mesh/index.js.map +1 -1
  42. package/dist/impostor/mesh/material.d.ts +7 -5
  43. package/dist/impostor/mesh/material.js +29 -26
  44. package/dist/impostor/mesh/material.js.map +1 -1
  45. package/dist/impostor/mesh/surface.d.ts +20 -16
  46. package/dist/impostor/mesh/surface.js +74 -55
  47. package/dist/impostor/mesh/surface.js.map +1 -1
  48. package/dist/impostor/octahedral.d.ts +1 -8
  49. package/dist/impostor/octahedral.js +3 -18
  50. package/dist/impostor/octahedral.js.map +1 -1
  51. package/dist/index.d.ts +7 -6
  52. package/dist/index.js +5 -4
  53. package/dist/index.js.map +1 -1
  54. package/dist/instanced/args.js +2 -2
  55. package/dist/instanced/args.js.map +1 -1
  56. package/dist/instanced/{bounds.d.ts → blocks.d.ts} +25 -9
  57. package/dist/instanced/{bounds.js → blocks.js} +76 -53
  58. package/dist/instanced/blocks.js.map +1 -0
  59. package/dist/instanced/dirty.d.ts +3 -0
  60. package/dist/instanced/dirty.js +40 -5
  61. package/dist/instanced/dirty.js.map +1 -1
  62. package/dist/instanced/index.d.ts +25 -51
  63. package/dist/instanced/index.js +189 -413
  64. package/dist/instanced/index.js.map +1 -1
  65. package/dist/instanced/meshes.d.ts +54 -13
  66. package/dist/instanced/meshes.js +178 -41
  67. package/dist/instanced/meshes.js.map +1 -1
  68. package/dist/instanced/parts.d.ts +14 -0
  69. package/dist/instanced/parts.js +79 -0
  70. package/dist/instanced/parts.js.map +1 -0
  71. package/dist/instanced/raycast.d.ts +13 -0
  72. package/dist/instanced/raycast.js +53 -0
  73. package/dist/instanced/raycast.js.map +1 -0
  74. package/dist/instanced/select.d.ts +17 -9
  75. package/dist/instanced/select.js +114 -63
  76. package/dist/instanced/select.js.map +1 -1
  77. package/dist/instanced/store.d.ts +31 -0
  78. package/dist/instanced/store.js +96 -0
  79. package/dist/instanced/store.js.map +1 -0
  80. package/dist/levels.d.ts +71 -48
  81. package/dist/levels.js +99 -74
  82. package/dist/levels.js.map +1 -1
  83. package/dist/loader/bundle.d.ts +25 -0
  84. package/dist/loader/bundle.js +241 -0
  85. package/dist/loader/bundle.js.map +1 -0
  86. package/dist/loader/cache.d.ts +15 -15
  87. package/dist/loader/cache.js +71 -33
  88. package/dist/loader/cache.js.map +1 -1
  89. package/dist/loader/provenance.d.ts +30 -0
  90. package/dist/loader/provenance.js +105 -0
  91. package/dist/loader/provenance.js.map +1 -0
  92. package/dist/loader/url.d.ts +13 -0
  93. package/dist/loader/url.js +31 -0
  94. package/dist/loader/url.js.map +1 -0
  95. package/dist/loader.d.ts +30 -74
  96. package/dist/loader.js +191 -186
  97. package/dist/loader.js.map +1 -1
  98. package/dist/lod.d.ts +20 -31
  99. package/dist/lod.js +105 -96
  100. package/dist/lod.js.map +1 -1
  101. package/dist/material.js +9 -4
  102. package/dist/material.js.map +1 -1
  103. package/dist/mesh/codec.d.ts +4 -0
  104. package/dist/mesh/codec.js +192 -0
  105. package/dist/mesh/codec.js.map +1 -0
  106. package/dist/queue.d.ts +2 -0
  107. package/dist/queue.js +33 -0
  108. package/dist/queue.js.map +1 -0
  109. package/dist/residency.d.ts +44 -0
  110. package/dist/residency.js +205 -0
  111. package/dist/residency.js.map +1 -0
  112. package/dist/simplify.js +5 -3
  113. package/dist/simplify.js.map +1 -1
  114. package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
  115. package/dist/source/{error.js → deviation.js} +6 -6
  116. package/dist/source/deviation.js.map +1 -0
  117. package/dist/source/source.d.ts +1 -1
  118. package/dist/source/source.js +1 -1
  119. package/dist/three.d.ts +17 -5
  120. package/dist/three.js +24 -3
  121. package/dist/three.js.map +1 -1
  122. package/dist/tsl.d.ts +5 -5
  123. package/dist/tsl.js +12 -19
  124. package/dist/tsl.js.map +1 -1
  125. package/dist/view.d.ts +16 -1
  126. package/dist/view.js +57 -1
  127. package/dist/view.js.map +1 -1
  128. package/dist/wind/index.d.ts +2 -2
  129. package/dist/wind/index.js +31 -28
  130. package/dist/wind/index.js.map +1 -1
  131. package/dist/wind/sway.d.ts +2 -1
  132. package/package.json +9 -3
  133. package/skills/lod/SKILL.md +71 -109
  134. package/dist/impostor/cache.d.ts +0 -15
  135. package/dist/impostor/cache.js +0 -44
  136. package/dist/impostor/cache.js.map +0 -1
  137. package/dist/instanced/bounds.js.map +0 -1
  138. package/dist/lazy.d.ts +0 -64
  139. package/dist/lazy.js +0 -187
  140. package/dist/lazy.js.map +0 -1
  141. package/dist/loader/dispose.d.ts +0 -3
  142. package/dist/loader/dispose.js +0 -25
  143. package/dist/loader/dispose.js.map +0 -1
  144. 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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"}
@@ -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 error of
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.
@@ -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 error of
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 isLazyImpostor: (node: Object3D) => node is LazyImpostor;
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: Object3D;
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 instance matrices of `object` when it keeps them in a storage buffer (an ImpostorMesh, or such an InstancedMesh); else null. */
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 isLazyImpostor = (node) => flag(node, "isLazyImpostor");
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 instance matrices of `object` when it keeps them in a storage buffer (an ImpostorMesh, or such an InstancedMesh); else null. */
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":"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"}
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
- export interface Affine {
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
- export declare const instanceFades: (attribute: BufferAttribute) => StorageBufferNode<"float">;
37
- export declare const instanceColors: (attribute: BufferAttribute) => StorageBufferNode<"vec4">;
38
- export declare const instanceMatrices: (attribute: BufferAttribute) => StorageBufferNode<"mat4">;
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
- * 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
- };
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
- 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");
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":"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"}
1
+ {"version":3,"file":"tsl.js","sourceRoot":"","sources":["../src/tsl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACrJ,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,kFAAkF;AAClF,wFAAwF;AACxF,sFAAsF;AAEtF,gCAAgC;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAe,EAAE,CAAgB,EAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3J,mDAAmD;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAe,EAAiB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEtJ,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAe,EAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAgBzF,MAAM,UAAU,MAAM,CAAC,CAAe;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,KAAK;QACL,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,WAAW,CAAC,OAAoB,EAAE,GAAG,IAAc;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAU,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7I,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpG,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAoB,EAAE,MAAY;IACzD,MAAM,UAAU,GAAY,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxG,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACtI,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAyD,IAAU,EAAE,IAAO,EAAE,OAAoB;IACxH,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAC5C,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,OAAO,EAA8C,CAAC;AAEzE,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,SAA0B;IACnD,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAClG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,mFAAmF;AACnF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AAEpF,iFAAiF;AACjF,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5G,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAmB;IAChD,OAAO,OAAO,CAAC;QACb,eAAe,EAAE,CAAC,IAAiB,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACtC,oEAAoE;YACpE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpF,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
package/dist/view.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Vector3, type Camera, type Matrix4, type Mesh, type Sphere } from "three/webgpu";
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":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
@@ -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 installed by a lazy level; existing meshes retain their bounds. */
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;
@@ -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 installed by a lazy level; existing meshes retain their bounds. */
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
- root.traverse((node) => {
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
- throw new Error("Wind: object has no meshes");
111
+ if (!isLOD(root))
112
+ throw new Error("Wind: object has no meshes");
118
113
  }
119
- root.updateWorldMatrix(true, true);
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) && (!refreshing || isInstancedLod(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 = swayMatrix();
139
- mesh.material.needsUpdate = true;
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 { object } of root.levels) {
155
- const box = boundingBox(object);
156
- if (box.isEmpty())
157
- continue;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wind/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wind/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export interface Breeze {
10
10
  direction: Vector2;
11
11
  }
12
12
  /** How one mesh sways. */
13
- export interface Sway {
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 {};