@takram/three-geospatial 0.7.1 → 0.9.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 (71) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +1 -1
  3. package/build/index.cjs +1 -1
  4. package/build/index.cjs.map +1 -1
  5. package/build/index.js +580 -598
  6. package/build/index.js.map +1 -1
  7. package/build/r3f.cjs +1 -1
  8. package/build/r3f.js +1 -1
  9. package/build/shared2.cjs +1 -1
  10. package/build/shared2.cjs.map +1 -1
  11. package/build/shared2.js +27 -212
  12. package/build/shared2.js.map +1 -1
  13. package/build/shared3.cjs +1 -1
  14. package/build/shared3.cjs.map +1 -1
  15. package/build/shared3.js +213 -8
  16. package/build/shared3.js.map +1 -1
  17. package/build/webgpu.cjs +6 -1
  18. package/build/webgpu.cjs.map +1 -1
  19. package/build/webgpu.js +1111 -768
  20. package/build/webgpu.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/EllipsoidGeometry.ts +1 -1
  23. package/src/PointOfView.ts +12 -5
  24. package/src/STBNLoader.ts +41 -19
  25. package/src/unrollLoops.ts +1 -1
  26. package/src/webgpu/CascadedShadowMapsNode.ts +48 -0
  27. package/src/webgpu/DualMipmapFilterNode.ts +8 -4
  28. package/src/webgpu/FilterNode.ts +5 -3
  29. package/src/webgpu/FnLayout.ts +17 -16
  30. package/src/webgpu/HighpVelocityNode.ts +9 -4
  31. package/src/webgpu/LensFlareNode.ts +12 -16
  32. package/src/webgpu/LensGlareNode.ts +28 -32
  33. package/src/webgpu/LensHaloNode.ts +2 -1
  34. package/src/webgpu/OutputTexture3DNode.ts +10 -0
  35. package/src/webgpu/OutputTextureNode.ts +10 -0
  36. package/src/webgpu/STBNTextureNode.ts +58 -0
  37. package/src/webgpu/ScreenSpaceShadowNode.ts +685 -0
  38. package/src/webgpu/SeparableFilterNode.ts +8 -5
  39. package/src/webgpu/SingleFilterNode.ts +5 -2
  40. package/src/webgpu/StorageTexture3DNode.ts +30 -0
  41. package/src/webgpu/TemporalAntialiasNode.ts +178 -137
  42. package/src/webgpu/accessors.ts +75 -36
  43. package/src/webgpu/debug.ts +38 -47
  44. package/src/webgpu/events.ts +18 -0
  45. package/src/webgpu/index.ts +5 -1
  46. package/src/webgpu/math.ts +116 -15
  47. package/src/webgpu/sampling.ts +39 -5
  48. package/src/webgpu/transformations.ts +71 -44
  49. package/types/PointOfView.d.ts +1 -1
  50. package/types/STBNLoader.d.ts +3 -4
  51. package/types/webgpu/CascadedShadowMapsNode.d.ts +13 -0
  52. package/types/webgpu/DualMipmapFilterNode.d.ts +1 -2
  53. package/types/webgpu/FnLayout.d.ts +4 -4
  54. package/types/webgpu/HighpVelocityNode.d.ts +1 -0
  55. package/types/webgpu/LensFlareNode.d.ts +2 -3
  56. package/types/webgpu/LensGlareNode.d.ts +1 -1
  57. package/types/webgpu/STBNTextureNode.d.ts +9 -0
  58. package/types/webgpu/ScreenSpaceShadowNode.d.ts +33 -0
  59. package/types/webgpu/SeparableFilterNode.d.ts +2 -3
  60. package/types/webgpu/SingleFilterNode.d.ts +1 -2
  61. package/types/webgpu/StorageTexture3DNode.d.ts +9 -0
  62. package/types/webgpu/TemporalAntialiasNode.d.ts +9 -10
  63. package/types/webgpu/accessors.d.ts +9 -8
  64. package/types/webgpu/debug.d.ts +4 -3
  65. package/types/webgpu/events.d.ts +3 -0
  66. package/types/webgpu/index.d.ts +5 -1
  67. package/types/webgpu/math.d.ts +3 -0
  68. package/types/webgpu/sampling.d.ts +2 -1
  69. package/types/webgpu/transformations.d.ts +7 -10
  70. package/src/webgpu/RTTextureNode.ts +0 -130
  71. package/types/webgpu/RTTextureNode.d.ts +0 -22
package/build/webgpu.js CHANGED
@@ -1,82 +1,181 @@
1
- import { Vector3 as qe, Mesh as J, Scene as Ze, Camera as Qe, RenderTarget as Se, RGBAFormat as Me, HalfFloatType as Re, LinearFilter as Z, Vector2 as z, Matrix4 as W, AdditiveBlending as Ke, PlaneGeometry as Je, PerspectiveCamera as Ye, SRGBColorSpace as _e, CanvasTexture as Xe, DepthTexture as et } from "three";
2
- import { reference as $, uniform as v, vec4 as w, positionGeometry as be, texture as I, uv as V, vec2 as p, add as N, luminance as tt, smoothstep as ze, Fn as C, screenCoordinate as Be, time as st, vec3 as y, equirectUV as ot, fwidth as nt, abs as Ve, positionLocal as rt, positionPrevious as it, sub as k, nodeImmutable as at, instancedArray as ue, storage as ut, uvec2 as Ce, If as F, globalId as X, Return as lt, atomicAdd as ct, instanceIndex as ht, mat3 as Pe, struct as oe, min as dt, mul as pt, fract as mt, distance as ft, mix as te, sqrt as Y, dot as Q, color as gt, mat4 as xt, mat2 as vt, bvec4 as yt, uvec4 as wt, ivec4 as Tt, bvec3 as Nt, uvec3 as St, ivec3 as Mt, bvec2 as Rt, ivec2 as T, bool as bt, uint as zt, int as H, float as ne, textureSize as Ae, viewZToLogarithmicDepth as Fe, logarithmicDepthToViewZ as De, perspectiveDepthToViewZ as je, orthographicDepthToViewZ as Bt, PI2 as Vt, PI as Ct, cos as le, sin as ce, viewZToPerspectiveDepth as Pt, screenUV as At, step as Ft, and as Dt, screenSize as jt, max as Ue, select as Ut } from "three/tsl";
3
- import { NodeMaterial as P, TextureNode as se, TempNode as E, NodeUpdateType as A, RendererUtils as O, QuadMesh as q, Vector2 as It, RenderTarget as kt, RGBAFormat as $t, HalfFloatType as Et, LinearFilter as he, StorageBufferAttribute as Ot, MeshBasicNodeMaterial as Gt, NodeBuilder as Lt, Node as Wt, Texture3DNode as Ht } from "three/webgpu";
4
- import { Q as re } from "./shared3.js";
5
- import { i as x } from "./shared.js";
6
- import { hash as Ie } from "three/src/nodes/core/NodeUtils.js";
7
- let ee;
8
- function D(o, e, t) {
9
- ee ??= /* @__PURE__ */ new WeakMap();
10
- let s = ee.get(o);
11
- return s == null && (s = {}, ee.set(o, s)), s[e] ??= t();
1
+ import { Fn as U, logarithmicDepthToViewZ as ct, perspectiveDepthToViewZ as ut, orthographicDepthToViewZ as Et, viewZToLogarithmicDepth as lt, sub as ie, PI2 as kt, PI as It, cos as Xe, vec3 as M, sin as Ze, viewZToPerspectiveDepth as Lt, int as K, vec4 as z, cameraNear as je, cameraFar as Ee, depth as Wt, cameraPosition as $t, cameraProjectionMatrixInverse as qt, cameraWorldMatrix as Gt, cameraProjectionMatrix as Ht, cameraViewMatrix as Yt, uniform as g, reference as le, positionGeometry as ht, texture as oe, uv as I, vec2 as f, add as B, luminance as Xt, smoothstep as dt, OnBeforeObjectUpdate as Zt, OnObjectUpdate as _t, screenCoordinate as ke, time as Kt, equirectUV as Qt, fwidth as Jt, abs as _, positionLocal as es, positionPrevious as ts, nodeImmutable as pt, instancedArray as _e, storage as ss, uvec2 as re, If as ae, globalId as Ae, Return as os, atomicAdd as ns, instanceIndex as is, mat3 as mt, struct as Ie, min as ft, mul as rs, fract as as, distance as cs, mix as ne, rtt as us, convertToTexture as Oe, overloadingFn as Le, sqrt as be, dot as Ne, bvec2 as xt, bvec3 as gt, uvec3 as pe, bvec4 as vt, uvec4 as me, bool as Me, color as ls, mat4 as hs, mat2 as ds, ivec4 as yt, ivec3 as ps, ivec2 as O, uint as ms, float as G, workgroupArray as fs, greaterThan as xs, invocationLocalIndex as we, workgroupBarrier as gs, textureStore as vs, workgroupId as Ke, and as wt, frameId as ys, screenUV as ws, step as Ts, textureSize as Ns, max as Tt } from "three/tsl";
2
+ import { StructTypeNode as Ss, NodeMaterial as ce, TextureNode as bs, TempNode as Q, NodeUpdateType as H, RendererUtils as ge, QuadMesh as ze, IndirectStorageBufferAttribute as Ms, MeshBasicNodeMaterial as zs, NodeBuilder as Cs, Node as Rs, Texture3DNode as Nt, StorageTexture as Ds, Data3DTexture as Bs, RedFormat as As, NearestFilter as Qe, RepeatWrapping as Ve, StorageTextureNode as Vs } from "three/webgpu";
3
+ import { Vector3 as St, Plane as Ps, Mesh as bt, Scene as Fs, Camera as Os, RenderTarget as Mt, RGBAFormat as zt, HalfFloatType as Ct, LinearFilter as ue, Matrix4 as Se, Vector2 as ve, AdditiveBlending as Us, PlaneGeometry as js, PerspectiveCamera as Es, SRGBColorSpace as ks, CanvasTexture as Is, NoColorSpace as Ls, Vector4 as Ws, DepthTexture as $s } from "three";
4
+ import { CSMShadowNode as qs } from "three/examples/jsm/csm/CSMShadowNode.js";
5
+ import { Q as Gs, D as Hs, S as Ys } from "./shared2.js";
6
+ import { i as y } from "./shared.js";
7
+ import { hash as We, hashString as Xs } from "three/src/nodes/core/NodeUtils.js";
8
+ function Je(s) {
9
+ if (typeof s == "string")
10
+ return s;
11
+ if ("layout" in s && s.layout instanceof Ss) {
12
+ if (s.layout.name == null)
13
+ throw new Error("Struct name is required.");
14
+ return s.layout.name;
15
+ }
16
+ throw new Error(`Unsupported layout type: ${s}`);
12
17
  }
13
- const Os = (o) => D(
14
- o,
18
+ function V({
19
+ typeOnly: s = !1,
20
+ ...e
21
+ }) {
22
+ return s ? (t) => U(t) : (t) => U(t).setLayout({
23
+ ...e,
24
+ type: Je(e.type),
25
+ inputs: e.inputs?.map((o) => ({
26
+ ...o,
27
+ type: Je(o.type)
28
+ })) ?? []
29
+ });
30
+ }
31
+ function L(s) {
32
+ return U((e, t) => {
33
+ const o = s(...e);
34
+ return typeof o == "function" ? o(t) : o;
35
+ });
36
+ }
37
+ const Rt = /* @__PURE__ */ L(
38
+ (s, e, t, o) => (n) => {
39
+ t ??= fe(e), o ??= xe(e);
40
+ const i = e?.isPerspectiveCamera === !0;
41
+ return n.renderer.logarithmicDepthBuffer ? ct(s, t, o) : i ? ut(s, t, o) : Et(s, t, o);
42
+ }
43
+ ), Ue = (s, e, t) => {
44
+ e ??= je, t ??= Ee;
45
+ const o = ct(s, e, t);
46
+ return Lt(o, e, t);
47
+ }, un = (s, e, t) => {
48
+ e ??= je, t ??= Ee;
49
+ const o = ut(s, e, t);
50
+ return lt(o, e, t);
51
+ }, ln = (s, e, t, o, n) => {
52
+ const i = o.element(K(2)).element(K(3)), r = o.element(K(3)).element(K(3)), a = z(M(s.flipY(), e).mul(2).sub(1), 1).mul(t.mul(i).add(r));
53
+ return n.mul(a).xyz;
54
+ }, Pe = [
55
+ [58.1375, 2.7747, 26.8183],
56
+ [-150.5666, 4.2109, -88.5066],
57
+ [130.5887, -14.0195, 109.0745],
58
+ [-42.3277, 4.8052, -60.1097],
59
+ [4.5974, 2.1856, 12.5925],
60
+ [0.1357, 0.0914, 0.1067]
61
+ ], Zs = /* @__PURE__ */ V({
62
+ name: "turbo",
63
+ type: "vec3",
64
+ inputs: [{ name: "x", type: "float" }]
65
+ })(([s]) => {
66
+ const e = M(...Pe[0]).toVar();
67
+ for (let t = 1; t < Pe.length; ++t)
68
+ e.assign(M(...Pe[t]).add(s.mul(e)));
69
+ return e;
70
+ }), hn = L(
71
+ (s, e, t, o) => {
72
+ t ??= fe(e), o ??= xe(e);
73
+ const n = Rt(s, e, t, o);
74
+ return Zs(lt(n, t, o));
75
+ }
76
+ ), dn = /* @__PURE__ */ V({
77
+ name: "equirectToDirectionWorld",
78
+ type: "vec3",
79
+ inputs: [{ name: "uv", type: "vec2" }]
80
+ })(([s]) => {
81
+ const e = ie(0.5, s.x).mul(kt), t = ie(s.y, 0.5).mul(It), o = Xe(t);
82
+ return M(o.mul(Xe(e)), Ze(t), o.mul(Ze(e)));
83
+ });
84
+ let Fe;
85
+ function J(s, e, t) {
86
+ Fe ??= /* @__PURE__ */ new WeakMap();
87
+ let o = Fe.get(s);
88
+ return o == null && (o = {}, Fe.set(s, o)), o[e] ??= t();
89
+ }
90
+ const pn = (s) => s != null ? J(
91
+ s,
15
92
  "projectionMatrix",
16
- () => $("projectionMatrix", "mat4", o).setName("projectionMatrix")
17
- ), Gs = (o) => D(
18
- o,
93
+ () => le("projectionMatrix", "mat4", s).setName(
94
+ "projectionMatrix"
95
+ )
96
+ ) : Ht, mn = (s) => s != null ? J(
97
+ s,
19
98
  "viewMatrix",
20
- () => $("matrixWorldInverse", "mat4", o).setName("viewMatrix")
21
- ), Ls = (o) => D(
22
- o,
99
+ () => le("matrixWorldInverse", "mat4", s).setName("viewMatrix")
100
+ ) : Yt, fn = (s) => s != null ? J(
101
+ s,
23
102
  "inverseProjectionMatrix",
24
- () => $("projectionMatrixInverse", "mat4", o).setName(
103
+ () => le("projectionMatrixInverse", "mat4", s).setName(
25
104
  "inverseProjectionMatrix"
26
105
  )
27
- ), Ws = (o) => D(
28
- o,
106
+ ) : qt, xn = (s) => s != null ? J(
107
+ s,
29
108
  "inverseViewMatrix",
30
- () => $("matrixWorld", "mat4", o).setName("inverseViewMatrix")
31
- ), Hs = (o) => D(
32
- o,
109
+ () => le("matrixWorld", "mat4", s).setName("inverseViewMatrix")
110
+ ) : Gt, gn = (s) => s != null ? J(
111
+ s,
33
112
  "cameraPositionWorld",
34
- () => v(new qe()).setName("cameraPositionWorld").onRenderUpdate((e, { value: t }) => {
35
- t.setFromMatrixPosition(o.matrixWorld);
113
+ () => g("vec3").setName("cameraPositionWorld").onRenderUpdate((e, { value: t }) => {
114
+ t.setFromMatrixPosition(s.matrixWorld);
36
115
  })
37
- ), de = (o) => D(
38
- o,
116
+ ) : $t, fe = (s) => s != null ? J(
117
+ s,
39
118
  "cameraNear",
40
- () => $("near", "float", o).setName("cameraNear")
41
- ), pe = (o) => D(
42
- o,
119
+ () => le("near", "float", s).setName("cameraNear")
120
+ ) : je, xe = (s) => s != null ? J(
121
+ s,
43
122
  "cameraFar",
44
- () => $("far", "float", o).setName("cameraFar")
45
- );
46
- async function ie(o, e) {
47
- return await o.debug.getShaderAsync(new Ze(), new Qe(), e).then((t) => t).catch((t) => (console.error(t), { fragmentShader: null, vertexShader: null }));
123
+ () => le("far", "float", s).setName("cameraFar")
124
+ ) : Ee, vn = U(
125
+ ({ camera: s }) => Rt(Wt, s)
126
+ ).once()().toVar("viewZ"), _s = /* @__PURE__ */ new St(), Ks = /* @__PURE__ */ new Ps();
127
+ class yn extends qs {
128
+ updateBefore(e) {
129
+ super.updateBefore(e);
130
+ const { lights: t } = this;
131
+ if (t.length < 2)
132
+ return;
133
+ const o = t[t.length - 1], n = _s.subVectors(o.target.position, o.position).normalize(), i = Ks.setFromNormalAndCoplanarPoint(
134
+ n,
135
+ o.position
136
+ );
137
+ for (let r = 0; r < t.length - 1; ++r) {
138
+ const c = t[r];
139
+ i.projectPoint(c.position, c.position), c.target.position.copy(c.position).add(n);
140
+ }
141
+ }
48
142
  }
49
- function qs(o, e) {
50
- const t = new J(new re(), e);
51
- ie(o, t).then((s) => {
52
- console.log(s.fragmentShader);
53
- }).finally(() => {
143
+ async function Ce(s, e) {
144
+ const t = new bt(new Gs(), e);
145
+ try {
146
+ return await s.debug.getShaderAsync(new Fs(), new Os(), t);
147
+ } catch (o) {
148
+ return console.error(o), { vertexShader: null, fragmentShader: null };
149
+ } finally {
54
150
  t.geometry.dispose();
55
- });
151
+ }
56
152
  }
57
- function Zs(o, e) {
58
- const t = new J(new re(), e);
59
- ie(o, t).then((s) => {
60
- console.log(s.vertexShader);
61
- }).finally(() => {
62
- t.geometry.dispose();
63
- });
153
+ async function wn(s, e) {
154
+ const { vertexShader: t, fragmentShader: o } = await Ce(s, e);
155
+ return t != null && o != null ? `// Vertex shader
156
+
157
+ ${t}
158
+ // Fragment shader
159
+
160
+ ${o}` : null;
64
161
  }
65
- function Qs(o, e) {
66
- const t = new P();
67
- t.vertexNode = w(be.xy, 0, 1), t.fragmentNode = e;
68
- const s = new J(new re(), t);
69
- ie(o, s).then((n) => {
70
- console.log(n.fragmentShader);
71
- }).finally(() => {
72
- t.dispose(), s.geometry.dispose();
73
- });
162
+ async function Tn(s, e) {
163
+ return (await Ce(s, e)).vertexShader;
164
+ }
165
+ async function Nn(s, e) {
166
+ return (await Ce(s, e)).fragmentShader;
167
+ }
168
+ async function Sn(s, e) {
169
+ const t = new ce();
170
+ t.vertexNode = z(ht.xy, 0, 1), t.fragmentNode = e.toConst("debugNode");
171
+ const o = await Ce(s, t);
172
+ return t.dispose(), o.fragmentShader;
74
173
  }
75
- function Ks(o, e, t) {
76
- const s = o[e];
77
- return o[e] = ((...n) => (t(...n), s.apply(o, n))), o;
174
+ function bn(s, e, t) {
175
+ const o = s[e];
176
+ return s[e] = ((...n) => (t(...n), o.apply(s, n))), s;
78
177
  }
79
- class qt extends se {
178
+ class Qs extends bs {
80
179
  static get type() {
81
180
  return "OutputTextureNode";
82
181
  }
@@ -90,26 +189,26 @@ class qt extends se {
90
189
  return new this.constructor(this.owner, this.value);
91
190
  }
92
191
  }
93
- const ke = (...o) => new qt(...o);
94
- class _ extends E {
192
+ const $e = (...s) => new Qs(...s);
193
+ class Re extends Q {
95
194
  constructor(e) {
96
- super("vec4"), this.resolutionScale = 1, this.renderTargets = [], this.inputNode = e, this.updateBeforeType = A.FRAME;
195
+ super("vec4"), this.resolutionScale = 1, this.renderTargets = [], this.updateBeforeType = H.FRAME, this.inputNode = e;
97
196
  }
98
197
  static get type() {
99
198
  return "FilterNode";
100
199
  }
101
200
  createRenderTarget(e) {
102
- const t = new Se(1, 1, {
201
+ const t = new Mt(1, 1, {
103
202
  depthBuffer: !1,
104
- type: Re,
105
- format: Me
106
- }), s = t.texture;
107
- s.minFilter = Z, s.magFilter = Z, s.generateMipmaps = !1;
203
+ type: Ct,
204
+ format: zt
205
+ }), o = t.texture;
206
+ o.minFilter = ue, o.magFilter = ue, o.generateMipmaps = !1;
108
207
  const n = this.constructor.type;
109
- return s.name = e != null ? `${n}.${e}` : n, this.renderTargets.push(t), t;
208
+ return o.name = e != null ? `${n}_${e}` : n, this.renderTargets.push(t), t;
110
209
  }
111
210
  getTextureNode() {
112
- return x(
211
+ return y(
113
212
  this.textureNode != null,
114
213
  "outputTexture must be specified before getTextureNode() is called."
115
214
  ), this.textureNode;
@@ -118,17 +217,17 @@ class _ extends E {
118
217
  return this.textureNode?.value ?? null;
119
218
  }
120
219
  set outputTexture(e) {
121
- this.textureNode = e != null ? ke(this, e) : void 0;
220
+ this.textureNode = e != null ? $e(this, e) : void 0;
122
221
  }
123
222
  setup(e) {
124
- const { inputNode: t, textureNode: s } = this;
125
- return x(
223
+ const { inputNode: t, textureNode: o } = this;
224
+ return y(
126
225
  t != null,
127
226
  "inputNode must be specified before being setup."
128
- ), x(
129
- s != null,
227
+ ), y(
228
+ o != null,
130
229
  "outputTexture must be specified before being setup."
131
- ), s.uvNode = t.uvNode, s;
230
+ ), o.uvNode = t.uvNode, o;
132
231
  }
133
232
  dispose() {
134
233
  for (const e of this.renderTargets)
@@ -136,20 +235,22 @@ class _ extends E {
136
235
  super.dispose();
137
236
  }
138
237
  }
139
- const { resetRendererState: Zt, restoreRendererState: Qt } = O;
140
- class ae extends _ {
238
+ const { resetRendererState: Js, restoreRendererState: eo } = ge;
239
+ class qe extends Re {
141
240
  constructor(e, t) {
142
- super(e), this.downsampleRTs = [], this.upsampleRTs = [], this.downsampleMaterial = new P(), this.upsampleMaterial = new P(), this.mesh = new q(), this.inputTexelSize = v(new z()), this.downsampleNode = I();
143
- for (let s = 0; s < t; ++s)
144
- this.downsampleRTs[s] = this.createRenderTarget(`Downsample${s}`), s < t - 1 && (this.upsampleRTs[s] = this.createRenderTarget(`Upsample${s}`));
241
+ super(e), this.downsampleRTs = [], this.upsampleRTs = [], this.downsampleMaterial = new ce(), this.upsampleMaterial = new ce(), this.mesh = new ze(), this.inputTexelSize = g("vec2"), this.downsampleNode = oe();
242
+ const o = this.constructor.type.replace(/Node$/, "");
243
+ this.downsampleMaterial.name = `${o}_downsample`, this.upsampleMaterial.name = `${o}_upsample`, this.mesh.name = o;
244
+ for (let n = 0; n < t; ++n)
245
+ this.downsampleRTs[n] = this.createRenderTarget(`downsample${n}`), n < t - 1 && (this.upsampleRTs[n] = this.createRenderTarget(`upsample${n}`));
145
246
  this.outputTexture = this.upsampleRTs[0].texture;
146
247
  }
147
248
  setSize(e, t) {
148
- const { resolutionScale: s } = this;
149
- let n = Math.max(Math.round(e * s), 1), r = Math.max(Math.round(t * s), 1);
150
- const { downsampleRTs: i, upsampleRTs: u } = this;
151
- for (let a = 0; a < i.length; ++a)
152
- n = Math.max(Math.round(n / 2), 1), r = Math.max(Math.round(r / 2), 1), i[a].setSize(n, r), a < u.length && u[a].setSize(n, r);
249
+ const { resolutionScale: o } = this;
250
+ let n = Math.max(Math.round(e * o), 1), i = Math.max(Math.round(t * o), 1);
251
+ const { downsampleRTs: r, upsampleRTs: c } = this;
252
+ for (let a = 0; a < r.length; ++a)
253
+ n = Math.max(Math.round(n / 2), 1), i = Math.max(Math.round(i / 2), 1), r[a].setSize(n, i), a < c.length && c[a].setSize(n, i);
153
254
  return this;
154
255
  }
155
256
  updateBefore({ renderer: e }) {
@@ -157,33 +258,33 @@ class ae extends _ {
157
258
  return;
158
259
  const {
159
260
  downsampleRTs: t,
160
- upsampleRTs: s,
261
+ upsampleRTs: o,
161
262
  mesh: n,
162
- inputNode: r,
163
- inputTexelSize: i,
164
- downsampleNode: u
263
+ inputNode: i,
264
+ inputTexelSize: r,
265
+ downsampleNode: c
165
266
  } = this;
166
- x(r != null);
167
- const { width: a, height: h } = r.value;
267
+ y(i != null);
268
+ const { width: a, height: h } = i.value;
168
269
  this.setSize(a, h);
169
- const c = r.value;
170
- this.rendererState = Zt(e, this.rendererState), n.material = this.downsampleMaterial;
171
- for (const l of t) {
172
- const { width: d, height: m } = r.value;
173
- i.value.set(1 / d, 1 / m), e.setRenderTarget(l), n.render(e), r.value = l.texture;
270
+ const l = i.value;
271
+ this.rendererState = Js(e, this.rendererState), n.material = this.downsampleMaterial;
272
+ for (const u of t) {
273
+ const { width: p, height: d } = i.value;
274
+ r.value.set(1 / p, 1 / d), e.setRenderTarget(u), n.render(e), i.value = u.texture;
174
275
  }
175
276
  n.material = this.upsampleMaterial;
176
- for (let l = s.length - 1; l >= 0; --l) {
177
- const d = s[l], { width: m, height: f } = r.value;
178
- i.value.set(1 / m, 1 / f), u.value = t[l].texture, e.setRenderTarget(d), n.render(e), r.value = d.texture;
277
+ for (let u = o.length - 1; u >= 0; --u) {
278
+ const p = o[u], { width: d, height: m } = i.value;
279
+ r.value.set(1 / d, 1 / m), c.value = t[u].texture, e.setRenderTarget(p), n.render(e), i.value = p.texture;
179
280
  }
180
- Qt(e, this.rendererState), r.value = c;
281
+ eo(e, this.rendererState), i.value = l;
181
282
  }
182
283
  setup(e) {
183
284
  const { inputNode: t } = this;
184
- x(t != null);
185
- const { downsampleMaterial: s, upsampleMaterial: n } = this;
186
- return s.fragmentNode = this.setupDownsampleNode(e), n.fragmentNode = this.setupUpsampleNode(e), s.needsUpdate = !0, n.needsUpdate = !0, super.setup(e);
285
+ y(t != null);
286
+ const { downsampleMaterial: o, upsampleMaterial: n } = this;
287
+ return o.fragmentNode = this.setupDownsampleNode(e), n.fragmentNode = this.setupUpsampleNode(e), o.needsUpdate = !0, n.needsUpdate = !0, super.setup(e);
187
288
  }
188
289
  dispose() {
189
290
  for (const e of this.downsampleRTs)
@@ -193,48 +294,48 @@ class ae extends _ {
193
294
  this.downsampleMaterial.dispose(), this.upsampleMaterial.dispose(), this.mesh.geometry.dispose(), super.dispose();
194
295
  }
195
296
  }
196
- const $e = (o, e) => {
197
- const t = V(), s = w(1, 1, -1, -1).mul(e.xyxy).add(t.xyxy).toVertexStage(), n = w(2, 2, -2, -2).mul(e.xyxy).add(t.xyxy).toVertexStage(), r = s.zy, i = s.xy, u = s.zw, a = s.xw, h = p(t.x, n.y), c = p(n.z, t.y), l = p(n.x, t.y), d = p(t.x, n.w), m = n.zy, f = n.xy, g = n.zw, R = n.xw;
198
- return N(
199
- N(
200
- o.sample(t),
201
- o.sample(r),
202
- o.sample(i),
203
- o.sample(u),
204
- o.sample(a)
297
+ const Dt = (s, e) => {
298
+ const t = I(), o = z(1, 1, -1, -1).mul(e.xyxy).add(t.xyxy).toVertexStage(), n = z(2, 2, -2, -2).mul(e.xyxy).add(t.xyxy).toVertexStage(), i = o.zy, r = o.xy, c = o.zw, a = o.xw, h = f(t.x, n.y), l = f(n.z, t.y), u = f(n.x, t.y), p = f(t.x, n.w), d = n.zy, m = n.xy, x = n.zw, w = n.xw;
299
+ return B(
300
+ B(
301
+ s.sample(t),
302
+ s.sample(i),
303
+ s.sample(r),
304
+ s.sample(c),
305
+ s.sample(a)
205
306
  ).mul(1 / 8),
206
- N(
207
- o.sample(h),
208
- o.sample(c),
209
- o.sample(l),
210
- o.sample(d)
307
+ B(
308
+ s.sample(h),
309
+ s.sample(l),
310
+ s.sample(u),
311
+ s.sample(p)
211
312
  ).mul(1 / 16),
212
- N(
213
- o.sample(m),
214
- o.sample(f),
215
- o.sample(g),
216
- o.sample(R)
313
+ B(
314
+ s.sample(d),
315
+ s.sample(m),
316
+ s.sample(x),
317
+ s.sample(w)
217
318
  ).mul(1 / 32)
218
319
  );
219
- }, Kt = (o, e) => {
220
- const t = V(), s = w(1, 1, -1, -1).mul(e.xyxy).add(t.xyxy).toVertexStage(), n = p(t.x, s.y), r = p(s.z, t.y), i = p(s.x, t.y), u = p(t.x, s.w), a = s.zy, h = s.xy, c = s.zw, l = s.xw;
221
- return N(
222
- o.sample(t).mul(0.25),
223
- N(
224
- o.sample(n),
225
- o.sample(r),
226
- o.sample(i),
227
- o.sample(u)
320
+ }, to = (s, e) => {
321
+ const t = I(), o = z(1, 1, -1, -1).mul(e.xyxy).add(t.xyxy).toVertexStage(), n = f(t.x, o.y), i = f(o.z, t.y), r = f(o.x, t.y), c = f(t.x, o.w), a = o.zy, h = o.xy, l = o.zw, u = o.xw;
322
+ return B(
323
+ s.sample(t).mul(0.25),
324
+ B(
325
+ s.sample(n),
326
+ s.sample(i),
327
+ s.sample(r),
328
+ s.sample(c)
228
329
  ).mul(0.125),
229
- N(
230
- o.sample(a),
231
- o.sample(h),
232
- o.sample(c),
233
- o.sample(l)
330
+ B(
331
+ s.sample(a),
332
+ s.sample(h),
333
+ s.sample(l),
334
+ s.sample(u)
234
335
  ).mul(0.0625)
235
336
  );
236
337
  };
237
- class Jt extends ae {
338
+ class so extends qe {
238
339
  static get type() {
239
340
  return "MipmapBlurNode";
240
341
  }
@@ -242,149 +343,132 @@ class Jt extends ae {
242
343
  super(e, t), this.resolutionScale = 0.5;
243
344
  }
244
345
  setupDownsampleNode(e) {
245
- return x(this.inputNode != null), $e(this.inputNode, this.inputTexelSize);
346
+ return y(this.inputNode != null), Dt(this.inputNode, this.inputTexelSize);
246
347
  }
247
348
  setupUpsampleNode(e) {
248
- return x(this.inputNode != null), Kt(this.inputNode, this.inputTexelSize);
349
+ return y(this.inputNode != null), to(this.inputNode, this.inputTexelSize);
249
350
  }
250
351
  }
251
- const Js = (...o) => new Jt(...o), { resetRendererState: Yt, restoreRendererState: _t } = O;
252
- class Xt extends _ {
352
+ const Mn = (...s) => new so(...s), { resetRendererState: oo, restoreRendererState: no } = ge;
353
+ class io extends Re {
253
354
  constructor(e) {
254
- super(e), this.material = new P(), this.mesh = new q(this.material), this.inputTexelSize = v(new z()), this.renderTarget = this.createRenderTarget(), this.outputTexture = this.renderTarget.texture;
355
+ super(e), this.material = new ce(), this.mesh = new ze(this.material), this.inputTexelSize = g("vec2");
356
+ const t = this.constructor.type.replace(/Node$/, "");
357
+ this.material.name = t, this.mesh.name = t, this.renderTarget = this.createRenderTarget(), this.outputTexture = this.renderTarget.texture;
255
358
  }
256
359
  setSize(e, t) {
257
- const { resolutionScale: s } = this, n = Math.max(Math.round(e * s), 1), r = Math.max(Math.round(t * s), 1);
258
- return this.renderTarget.setSize(n, r), this;
360
+ const { resolutionScale: o } = this, n = Math.max(Math.round(e * o), 1), i = Math.max(Math.round(t * o), 1);
361
+ return this.renderTarget.setSize(n, i), this;
259
362
  }
260
363
  updateBefore({ renderer: e }) {
261
364
  if (e == null)
262
365
  return;
263
366
  const { inputNode: t } = this;
264
- x(t != null);
265
- const { width: s, height: n } = t.value;
266
- this.setSize(s, n), this.inputTexelSize.value.set(1 / s, 1 / n), this.rendererState = Yt(e, this.rendererState), e.setRenderTarget(this.renderTarget), this.mesh.render(e), _t(e, this.rendererState);
367
+ y(t != null);
368
+ const { width: o, height: n } = t.value;
369
+ this.setSize(o, n), this.inputTexelSize.value.set(1 / o, 1 / n), this.rendererState = oo(e, this.rendererState), e.setRenderTarget(this.renderTarget), this.mesh.render(e), no(e, this.rendererState);
267
370
  }
268
371
  setup(e) {
269
372
  const { inputNode: t } = this;
270
- x(t != null);
271
- const { material: s } = this;
272
- return s.fragmentNode = this.setupOutputNode(e), s.needsUpdate = !0, super.setup(e);
373
+ y(t != null);
374
+ const { material: o } = this;
375
+ return o.fragmentNode = this.setupOutputNode(e), o.needsUpdate = !0, super.setup(e);
273
376
  }
274
377
  dispose() {
275
378
  this.renderTarget.dispose(), this.material.dispose(), this.mesh.geometry.dispose(), super.dispose();
276
379
  }
277
380
  }
278
- class Ee extends Xt {
381
+ class Bt extends io {
279
382
  constructor(e) {
280
- super(e), this.thresholdLevel = v(5), this.thresholdRange = v(1), this.resolutionScale = 0.5;
383
+ super(e), this.thresholdLevel = g(5), this.thresholdRange = g(1), this.resolutionScale = 0.5;
281
384
  }
282
385
  static get type() {
283
386
  return "DownsampleThresholdNode";
284
387
  }
285
388
  setupOutputNode() {
286
- const { inputNode: e, thresholdLevel: t, thresholdRange: s, inputTexelSize: n } = this;
287
- x(e != null);
288
- const r = $e(e, n), i = tt(r.rgb), u = ze(
389
+ const { inputNode: e, thresholdLevel: t, thresholdRange: o, inputTexelSize: n } = this;
390
+ y(e != null);
391
+ const i = Dt(e, n), r = Xt(i.rgb), c = dt(
289
392
  t,
290
- t.add(s),
291
- i
393
+ t.add(o),
394
+ r
292
395
  );
293
- return w(r.rgb, i).mul(u);
396
+ return z(i.rgb, r).mul(c);
294
397
  }
295
398
  }
296
- const Ys = (...o) => new Ee(...o);
297
- function me(o) {
298
- if (typeof o == "string")
299
- return o;
300
- if (o.layout.name == null)
301
- throw new Error("Struct name is required.");
302
- return o.layout.name;
303
- }
304
- function K({
305
- typeOnly: o = !1,
306
- ...e
307
- }) {
308
- return o ? (t) => C(t) : (t) => C(t).setLayout({
309
- ...e,
310
- type: me(e.type),
311
- inputs: e.inputs?.map((s) => ({
312
- ...s,
313
- type: me(s.type)
314
- })) ?? []
315
- });
316
- }
317
- function G(o) {
318
- return C((e, t) => {
319
- const s = o(...e);
320
- return typeof s == "function" ? s(t) : s;
321
- });
322
- }
323
- const { resetRendererState: es, restoreRendererState: ts } = O;
324
- class ss extends _ {
399
+ const zn = (...s) => new Bt(...s), Cn = (s) => {
400
+ const e = _t(s);
401
+ return e.updateType = H.NONE, e;
402
+ }, Rn = (s) => {
403
+ const e = Zt(s);
404
+ return e.updateBeforeType = H.FRAME, e;
405
+ }, { resetRendererState: ro, restoreRendererState: ao } = ge;
406
+ class co extends Re {
325
407
  constructor(e) {
326
- super(e), this.iterations = 1, this.material = new P(), this.mesh = new q(this.material), this.inputTexelSize = v(new z()), this.direction = v(new z()), this.horizontalRT = this.createRenderTarget("Horizontal"), this.verticalRT = this.createRenderTarget("Vertical"), this.outputTexture = this.verticalRT.texture;
408
+ super(e), this.iterations = 1, this.material = new ce(), this.mesh = new ze(this.material), this.inputTexelSize = g("vec2"), this.direction = g("vec2");
409
+ const t = this.constructor.type.replace(/Node$/, "");
410
+ this.material.name = t, this.mesh.name = t, this.horizontalRT = this.createRenderTarget("horizontal"), this.verticalRT = this.createRenderTarget("vertical"), this.outputTexture = this.verticalRT.texture;
327
411
  }
328
412
  setSize(e, t) {
329
- const { resolutionScale: s } = this, n = Math.max(Math.round(e * s), 1), r = Math.max(Math.round(t * s), 1);
330
- return this.horizontalRT.setSize(n, r), this.verticalRT.setSize(n, r), this;
413
+ const { resolutionScale: o } = this, n = Math.max(Math.round(e * o), 1), i = Math.max(Math.round(t * o), 1);
414
+ return this.horizontalRT.setSize(n, i), this.verticalRT.setSize(n, i), this;
331
415
  }
332
416
  updateBefore({ renderer: e }) {
333
417
  if (e == null)
334
418
  return;
335
- const { horizontalRT: t, verticalRT: s, mesh: n, inputNode: r, direction: i } = this;
336
- x(r != null);
337
- const { width: u, height: a } = r.value;
338
- this.setSize(u, a), this.inputTexelSize.value.set(1 / u, 1 / a);
339
- const h = r.value;
340
- this.rendererState = es(e, this.rendererState);
341
- for (let c = 0; c < this.iterations; ++c)
342
- i.value.set(1, 0), e.setRenderTarget(t), n.render(e), r.value = t.texture, i.value.set(0, 1), e.setRenderTarget(s), n.render(e), r.value = s.texture;
343
- ts(e, this.rendererState), r.value = h;
419
+ const { horizontalRT: t, verticalRT: o, mesh: n, inputNode: i, direction: r } = this;
420
+ y(i != null);
421
+ const { width: c, height: a } = i.value;
422
+ this.setSize(c, a), this.inputTexelSize.value.set(1 / c, 1 / a);
423
+ const h = i.value;
424
+ this.rendererState = ro(e, this.rendererState);
425
+ for (let l = 0; l < this.iterations; ++l)
426
+ r.value.set(1, 0), e.setRenderTarget(t), n.render(e), i.value = t.texture, r.value.set(0, 1), e.setRenderTarget(o), n.render(e), i.value = o.texture;
427
+ ao(e, this.rendererState), i.value = h;
344
428
  }
345
429
  setup(e) {
346
430
  const { inputNode: t } = this;
347
- x(t != null);
348
- const { material: s } = this;
349
- return s.fragmentNode = this.setupOutputNode(e), s.needsUpdate = !0, super.setup(e);
431
+ y(t != null);
432
+ const { material: o } = this;
433
+ return o.fragmentNode = this.setupOutputNode(e), o.needsUpdate = !0, super.setup(e);
350
434
  }
351
435
  dispose() {
352
436
  this.horizontalRT.dispose(), this.verticalRT.dispose(), this.material.dispose(), this.mesh.geometry.dispose(), super.dispose();
353
437
  }
354
438
  }
355
- function fe(o) {
356
- if (x(o >= 0), o === 0)
439
+ function et(s) {
440
+ if (y(s >= 0), s === 0)
357
441
  return new Float64Array(0);
358
- if (o === 1)
442
+ if (s === 1)
359
443
  return new Float64Array([1]);
360
- let e = new Float64Array(o), t = new Float64Array(o), s = t;
361
- for (let n = 1; n <= o; ++n) {
362
- for (let r = 0; r < n; ++r)
363
- t[r] = r === 0 || r === n - 1 ? 1 : e[r - 1] + e[r];
364
- s = t, t = e, e = s;
444
+ let e = new Float64Array(s), t = new Float64Array(s), o = t;
445
+ for (let n = 1; n <= s; ++n) {
446
+ for (let i = 0; i < n; ++i)
447
+ t[i] = i === 0 || i === n - 1 ? 1 : e[i - 1] + e[i];
448
+ o = t, t = e, e = o;
365
449
  }
366
- return s;
450
+ return o;
367
451
  }
368
- function os(o, e = 2) {
369
- x(o >= 3);
370
- const t = o + e * 2, s = e > 0 ? fe(t).slice(e, -e) : fe(t), n = Math.floor((s.length - 1) / 2), r = s.reduce((l, d) => l + d, 0), i = s.slice(n), u = [...Array(n + 1).keys()], a = new Float64Array(Math.floor(u.length / 2)), h = new Float64Array(a.length);
371
- a[0] = i[0] / r;
372
- for (let l = 1, d = 1; l < u.length - 1; l += 2, ++d) {
373
- const m = u[l], f = u[l + 1], g = i[l], R = i[l + 1], S = g + R, B = (m * g + f * R) / S;
374
- a[d] = S / r, h[d] = B;
375
- }
376
- const c = (a.reduce((l, d) => l + d, 0) - a[0] * 0.5) * 2;
377
- if (c !== 0) {
378
- const l = 1 / c;
379
- for (let d = 0; d < a.length; ++d)
380
- a[d] *= l;
452
+ function uo(s, e = 2) {
453
+ y(s >= 3);
454
+ const t = s + e * 2, o = e > 0 ? et(t).slice(e, -e) : et(t), n = Math.floor((o.length - 1) / 2), i = o.reduce((u, p) => u + p, 0), r = o.slice(n), c = [...Array(n + 1).keys()], a = new Float64Array(Math.floor(c.length / 2)), h = new Float64Array(a.length);
455
+ a[0] = r[0] / i;
456
+ for (let u = 1, p = 1; u < c.length - 1; u += 2, ++p) {
457
+ const d = c[u], m = c[u + 1], x = r[u], w = r[u + 1], T = x + w, C = (d * x + m * w) / T;
458
+ a[p] = T / i, h[p] = C;
459
+ }
460
+ const l = (a.reduce((u, p) => u + p, 0) - a[0] * 0.5) * 2;
461
+ if (l !== 0) {
462
+ const u = 1 / l;
463
+ for (let p = 0; p < a.length; ++p)
464
+ a[p] *= u;
381
465
  }
382
466
  return {
383
467
  offsets: h,
384
468
  weights: a
385
469
  };
386
470
  }
387
- class Oe extends ss {
471
+ class At extends co {
388
472
  static get type() {
389
473
  return "GaussianBlurNode";
390
474
  }
@@ -392,61 +476,64 @@ class Oe extends ss {
392
476
  super(e), this.kernelSize = t;
393
477
  }
394
478
  setupOutputNode(e) {
395
- const { inputNode: t, inputTexelSize: s, direction: n } = this;
396
- x(t != null);
397
- const { offsets: r, weights: i } = os(this.kernelSize);
398
- return C(() => {
399
- const u = V(), a = n.mul(s).toVertexStage(), h = t.sample(u).mul(i[0]);
400
- for (let c = 1; c < r.length; ++c) {
401
- const l = a.mul(r[c]);
479
+ const { inputNode: t, inputTexelSize: o, direction: n } = this;
480
+ y(t != null);
481
+ const { offsets: i, weights: r } = uo(this.kernelSize);
482
+ return U(() => {
483
+ const c = I(), a = n.mul(o).toVertexStage(), h = t.sample(c).mul(r[0]);
484
+ for (let l = 1; l < i.length; ++l) {
485
+ const u = a.mul(i[l]);
402
486
  h.addAssign(
403
- N(
404
- t.sample(u.add(l)),
405
- t.sample(u.sub(l))
406
- ).mul(i[c])
487
+ B(
488
+ t.sample(c.add(u)),
489
+ t.sample(c.sub(u))
490
+ ).mul(r[l])
407
491
  );
408
492
  }
409
493
  return h;
410
494
  })();
411
495
  }
412
496
  }
413
- const _s = (...o) => new Oe(...o), ns = (o) => o.dot(p(0.06711056, 583715e-8)).fract().mul(52.9829189).fract(), Xs = /* @__PURE__ */ C(() => {
414
- const o = p(Be.xy).add(st.fract().mul(1337)), e = ns(o);
415
- return y(e, e.oneMinus(), e).sub(0.5).div(255);
416
- }).once()(), eo = (o, e, t = p(90, 45)) => {
417
- const s = ot(o), n = nt(s), r = e.mul(n).mul(0.5), i = Ve(s.mul(t).fract().sub(0.5)).div(t), u = ze(r, r.add(n), i).oneMinus();
418
- return u.x.add(u.y).clamp(0, 1);
497
+ const Dn = (...s) => new At(...s), lo = (s) => s.dot(f(0.06711056, 583715e-8)).fract().mul(52.9829189).fract(), Bn = /* @__PURE__ */ U(() => {
498
+ const s = f(ke.xy).add(Kt.fract().mul(1337)), e = lo(s);
499
+ return M(e, e.oneMinus(), e).sub(0.5).div(255);
500
+ }).once()(), An = (s, e, t = f(90, 45)) => {
501
+ const o = Qt(s), n = Jt(o), i = e.mul(n).mul(0.5), r = _(o.mul(t).fract().sub(0.5)).div(t), c = dt(i, i.add(n), r).oneMinus();
502
+ return c.x.add(c.y).clamp(0, 1);
419
503
  };
420
- class rs extends E {
504
+ class ho extends Q {
421
505
  constructor() {
422
- super("vec3"), this.currentProjectionMatrix = v(new W()), this.previousProjectionMatrix = v("mat4"), this.currentModelViewMatrix = v(new W()), this.previousModelViewMatrix = v("mat4"), this.objectModelViewMatrices = /* @__PURE__ */ new WeakMap(), this.updateType = A.FRAME, this.updateBeforeType = A.OBJECT, this.updateAfterType = A.OBJECT;
506
+ super("vec3"), this.currentProjectionMatrix = g("mat4"), this.previousProjectionMatrix = g("mat4"), this.currentModelViewMatrix = g("mat4"), this.previousModelViewMatrix = g("mat4"), this.objectModelViewMatrices = /* @__PURE__ */ new WeakMap(), this.updateType = H.FRAME, this.updateBeforeType = H.OBJECT, this.updateAfterType = H.OBJECT;
423
507
  }
424
508
  static get type() {
425
509
  return "HighpVelocityNode";
426
510
  }
511
+ setProjectionMatrix(e) {
512
+ return this.projectionMatrix = e, this;
513
+ }
427
514
  // Executed once per frame:
428
515
  update({ camera: e }) {
429
516
  if (e == null)
430
517
  return;
431
518
  const {
432
519
  currentProjectionMatrix: t,
433
- previousProjectionMatrix: s
520
+ previousProjectionMatrix: o
434
521
  } = this, n = this.projectionMatrix ?? e.projectionMatrix;
435
- s.value == null ? s.value = new W().copy(n) : s.value.copy(t.value), t.value.copy(n);
522
+ o.value == null ? o.value = new Se().copy(n) : o.value.copy(t.value), t.value.copy(n);
436
523
  }
437
524
  // Executed once per object before rendering:
438
525
  updateBefore({ object: e, camera: t }) {
439
526
  if (e == null || t == null)
440
527
  return;
441
528
  const {
442
- currentModelViewMatrix: s,
529
+ currentModelViewMatrix: o,
443
530
  previousModelViewMatrix: n,
444
- objectModelViewMatrices: r
531
+ objectModelViewMatrices: i
445
532
  } = this;
446
- s.value.multiplyMatrices(
533
+ o.value.multiplyMatrices(
447
534
  t.matrixWorldInverse,
448
535
  e.matrixWorld
449
- ), n.value = r.get(e) ?? s.value;
536
+ ), n.value = i.get(e) ?? o.value;
450
537
  }
451
538
  // Executed once per object after rendering:
452
539
  updateAfter({ object: e }) {
@@ -454,18 +541,18 @@ class rs extends E {
454
541
  return;
455
542
  const {
456
543
  currentModelViewMatrix: t,
457
- objectModelViewMatrices: s
544
+ objectModelViewMatrices: o
458
545
  } = this;
459
- let n = s.get(e);
460
- n == null && (n = new W(), s.set(e, n)), n.copy(t.value);
546
+ let n = o.get(e);
547
+ n == null && (n = new Se(), o.set(e, n)), n.copy(t.value);
461
548
  }
462
549
  setup(e) {
463
- const t = this.currentProjectionMatrix.mul(this.currentModelViewMatrix).mul(rt).toVertexStage(), s = this.previousProjectionMatrix.mul(this.previousModelViewMatrix).mul(it).toVertexStage(), n = t.xyz.div(t.w), r = s.xyz.div(s.w);
464
- return k(n, r);
550
+ const t = this.currentProjectionMatrix.mul(this.currentModelViewMatrix).mul(es).toVertexStage(), o = this.previousProjectionMatrix.mul(this.previousModelViewMatrix).mul(ts).toVertexStage(), n = t.xyz.div(t.w), i = o.xyz.div(o.w);
551
+ return ie(n, i);
465
552
  }
466
553
  }
467
- const to = /* @__PURE__ */ at(rs);
468
- class is extends ae {
554
+ const tt = /* @__PURE__ */ pt(ho);
555
+ class po extends qe {
469
556
  static get type() {
470
557
  return "KawaseBlurNode";
471
558
  }
@@ -473,49 +560,49 @@ class is extends ae {
473
560
  super(e, t), this.resolutionScale = 0.5;
474
561
  }
475
562
  setupDownsampleNode(e) {
476
- const { inputNode: t, inputTexelSize: s } = this;
477
- x(t != null);
478
- const n = V(), r = w(1, 1, -1, -1).mul(s.xyxy.mul(0.5)).add(n.xyxy).toVertexStage(), i = r.zy, u = r.xy, a = r.xw, h = r.zw;
479
- return N(
563
+ const { inputNode: t, inputTexelSize: o } = this;
564
+ y(t != null);
565
+ const n = I(), i = z(1, 1, -1, -1).mul(o.xyxy.mul(0.5)).add(n.xyxy).toVertexStage(), r = i.zy, c = i.xy, a = i.xw, h = i.zw;
566
+ return B(
480
567
  t.sample(n).mul(4),
481
- t.sample(i),
482
- t.sample(u),
568
+ t.sample(r),
569
+ t.sample(c),
483
570
  t.sample(a),
484
571
  t.sample(h)
485
572
  ).mul(1 / 8);
486
573
  }
487
574
  setupUpsampleNode(e) {
488
- const { inputNode: t, inputTexelSize: s } = this;
489
- x(t != null);
490
- const n = V(), r = w(1, 1, -1, -1).mul(s.xyxy.mul(0.5)).add(n.xyxy).toVertexStage(), i = r.zy, u = r.xy, a = r.xw, h = r.zw, c = p(r.z, n.y), l = p(r.x, n.y), d = p(n.x, r.y), m = p(n.x, r.w);
491
- return N(
492
- N(
493
- t.sample(i),
494
- t.sample(u),
575
+ const { inputNode: t, inputTexelSize: o } = this;
576
+ y(t != null);
577
+ const n = I(), i = z(1, 1, -1, -1).mul(o.xyxy.mul(0.5)).add(n.xyxy).toVertexStage(), r = i.zy, c = i.xy, a = i.xw, h = i.zw, l = f(i.z, n.y), u = f(i.x, n.y), p = f(n.x, i.y), d = f(n.x, i.w);
578
+ return B(
579
+ B(
580
+ t.sample(r),
581
+ t.sample(c),
495
582
  t.sample(a),
496
583
  t.sample(h)
497
584
  ).mul(1 / 12),
498
- N(
499
- t.sample(c),
585
+ B(
500
586
  t.sample(l),
501
- t.sample(d),
502
- t.sample(m)
587
+ t.sample(u),
588
+ t.sample(p),
589
+ t.sample(d)
503
590
  ).mul(1 / 6)
504
591
  );
505
592
  }
506
593
  }
507
- const so = (...o) => new is(...o);
508
- class as extends E {
594
+ const Vn = (...s) => new po(...s);
595
+ class mo extends Q {
509
596
  constructor(e) {
510
- super("vec3"), this.intensity = v(1e-5), this.inputNode = e;
597
+ super("vec3"), this.intensity = g(1e-5), this.inputNode = e;
511
598
  }
512
599
  static get type() {
513
600
  return "LensGhostNode";
514
601
  }
515
602
  setup(e) {
516
- const { inputNode: t, intensity: s } = this;
517
- x(t != null);
518
- const n = K({
603
+ const { inputNode: t, intensity: o } = this;
604
+ y(t != null);
605
+ const n = V({
519
606
  name: "sampleGhost",
520
607
  type: "vec3",
521
608
  inputs: [
@@ -524,77 +611,33 @@ class as extends E {
524
611
  { name: "color", type: "vec3" },
525
612
  { name: "offset", type: "float" }
526
613
  ]
527
- })(([a, h, c, l]) => {
528
- const d = h.mul(l).add(a.oneMinus()).saturate(), m = t.sample(d).rgb.mul(c), f = k(0.5, d).length().mul(1 / (Math.SQRT2 / 4)).saturate();
529
- return m.mulAssign(f.oneMinus().pow(3)), m;
530
- }), r = V(), i = r.sub(0.5);
531
- return N(
532
- n(r, i, y(0.8, 0.8, 1), -5),
533
- n(r, i, y(1, 0.8, 0.4), -1.5),
534
- n(r, i, y(0.9, 1, 0.8), -0.4),
535
- n(r, i, y(1, 0.8, 0.4), -0.2),
536
- n(r, i, y(0.9, 0.7, 0.7), -0.1),
537
- n(r, i, y(0.5, 1, 0.4), 0.7),
538
- n(r, i, y(0.5, 0.5, 0.5), 1),
539
- n(r, i, y(1, 1, 0.6), 2.5),
540
- n(r, i, y(0.5, 0.8, 1), 10)
541
- ).mul(s);
542
- }
543
- }
544
- const { resetRendererState: us, restoreRendererState: ls } = O;
545
- function cs() {
546
- const o = new kt(1, 1, {
547
- depthBuffer: !1,
548
- type: Et,
549
- format: $t
550
- }), e = o.texture;
551
- return e.minFilter = he, e.magFilter = he, e.generateMipmaps = !1, o;
552
- }
553
- const hs = /* @__PURE__ */ new It();
554
- class Ge extends se {
555
- constructor(e, t) {
556
- const s = cs();
557
- super(s.texture, t ?? V()), this.resolutionScale = 1, this.material = new P(), this.mesh = new q(this.material), this.node = e, this.renderTarget = s, this.updateBeforeType = A.FRAME;
558
- }
559
- static get type() {
560
- return "RTTextureNode";
561
- }
562
- setSize(e, t) {
563
- const { resolutionScale: s } = this, n = Math.max(Math.round(e * s), 1), r = Math.max(Math.round(t * s), 1);
564
- return this.renderTarget.setSize(n, r), this;
565
- }
566
- updateBefore({ renderer: e }) {
567
- if (e == null)
568
- return;
569
- const t = e.getDrawingBufferSize(hs);
570
- this.setSize(t.x, t.y), this.rendererState = us(e, this.rendererState), e.setRenderTarget(this.renderTarget), this.mesh.render(e), ls(e, this.rendererState);
571
- }
572
- setup(e) {
573
- const { material: t } = this;
574
- return t.fragmentNode = this.node.context(e.getContext()), t.needsUpdate = !0, super.setup(e);
575
- }
576
- dispose() {
577
- this.renderTarget.dispose(), this.material.dispose(), this.mesh.geometry.dispose(), super.dispose();
578
- }
579
- // @ts-expect-error Ignore
580
- clone() {
581
- const e = new se(this.value, this.uvNode, this.levelNode);
582
- return e.sampler = this.sampler, e.referenceNode = this, e;
614
+ })(([a, h, l, u]) => {
615
+ const p = h.mul(u).add(a.oneMinus()).saturate(), d = t.sample(p).rgb.mul(l), m = ie(0.5, p).length().mul(1 / (Math.SQRT2 / 4)).saturate();
616
+ return d.mulAssign(m.oneMinus().pow(3)), d;
617
+ }), i = I(), r = i.sub(0.5);
618
+ return B(
619
+ n(i, r, M(0.8, 0.8, 1), -5),
620
+ n(i, r, M(1, 0.8, 0.4), -1.5),
621
+ n(i, r, M(0.9, 1, 0.8), -0.4),
622
+ n(i, r, M(1, 0.8, 0.4), -0.2),
623
+ n(i, r, M(0.9, 0.7, 0.7), -0.1),
624
+ n(i, r, M(0.5, 1, 0.4), 0.7),
625
+ n(i, r, M(0.5, 0.5, 0.5), 1),
626
+ n(i, r, M(1, 1, 0.6), 2.5),
627
+ n(i, r, M(0.5, 0.8, 1), 10)
628
+ ).mul(o);
583
629
  }
584
630
  }
585
- const ds = (...o) => new Ge(...o), Le = (o, e) => {
586
- let t;
587
- return o.isTextureNode === !0 || o.isSampleNode === !0 ? t = o : o.getTextureNode != null ? t = o.getTextureNode() : (t = new Ge(o), e != null && (t.value.name = e)), t;
588
- }, { resetRendererState: ps, restoreRendererState: ms } = O;
589
- function fs() {
590
- const s = document.createElement("canvas");
591
- s.width = 256, s.height = 32;
592
- const n = s.getContext("2d");
593
- x(n != null), n.beginPath(), n.moveTo(0, 32 / 2), n.lineTo(256 / 2, 5), n.lineTo(256, 32 / 2), n.lineTo(256 / 2, 27), n.closePath();
594
- const r = n.createLinearGradient(0, 0, 256, 0);
595
- return r.addColorStop(0, "#000000"), r.addColorStop(0.5, "#ffffff"), r.addColorStop(1, "#000000"), n.fillStyle = r, n.fill(), new Xe(s);
631
+ const { resetRendererState: fo, restoreRendererState: xo } = ge;
632
+ function go() {
633
+ const o = document.createElement("canvas");
634
+ o.width = 256, o.height = 32;
635
+ const n = o.getContext("2d");
636
+ y(n != null), n.beginPath(), n.moveTo(0, 32 / 2), n.lineTo(256 / 2, 5), n.lineTo(256, 32 / 2), n.lineTo(256 / 2, 27), n.closePath();
637
+ const i = n.createLinearGradient(0, 0, 256, 0);
638
+ return i.addColorStop(0, "#000000"), i.addColorStop(0.5, "#ffffff"), i.addColorStop(1, "#000000"), n.fillStyle = i, n.fill(), new Is(o);
596
639
  }
597
- const ge = /* @__PURE__ */ oe({
640
+ const st = /* @__PURE__ */ Ie({
598
641
  color: "vec3",
599
642
  luminance: "float",
600
643
  position: "vec2",
@@ -602,69 +645,71 @@ const ge = /* @__PURE__ */ oe({
602
645
  sin: "float",
603
646
  cos: "float"
604
647
  });
605
- class gs extends _ {
648
+ class vo extends Re {
606
649
  constructor(e) {
607
- super(e), this.spikePairCount = 6, this.wireframe = !1, this.intensity = v(1e-5), this.sizeScale = v(new z(1.5, 0.01)), this.luminanceThreshold = v(100), this.counterBuffer = new Ot(1, 1), this.instanceBuffer = ue(1, ge), this.renderTarget = this.createRenderTarget(), this.material = new Gt({
650
+ super(e), this.spikePairCount = 6, this.wireframe = !1, this.intensity = g(1e-5), this.sizeScale = g(new ve(1.5, 0.01)), this.luminanceThreshold = g(100), this.indirectBuffer = new Ms(
651
+ new Uint32Array([6, 0, 0, 0, 0]),
652
+ 1
653
+ ), this.instanceBuffer = _e(1, st), this.renderTarget = this.createRenderTarget(), this.material = new zs({
608
654
  depthTest: !1,
609
655
  depthWrite: !1,
610
656
  transparent: !0,
611
- blending: Ke
612
- }), this.mesh = new J(new Je(1, 1), this.material), this.camera = new Ye(), this.inputTexelSize = v(new z()), this.outputTexelSize = v(new z()), this.geometryRatio = v(new z()), this.inputNode = e, this.resolutionScale = 0.5, this.outputTexture = this.renderTarget.texture;
657
+ blending: Us
658
+ }), this.mesh = new bt(new js(1, 1), this.material), this.camera = new Es(), this.inputTexelSize = g("vec2"), this.outputTexelSize = g("vec2"), this.geometryRatio = g("vec2"), this.material.name = "LensGlare", this.inputNode = e, this.resolutionScale = 0.5, this.outputTexture = this.renderTarget.texture, this.mesh.geometry.indirect = this.indirectBuffer;
613
659
  }
614
660
  customCacheKey() {
615
- return Ie(this.spikePairCount, +this.wireframe);
661
+ return We(this.spikePairCount, +this.wireframe);
616
662
  }
617
663
  setSize(e, t) {
618
- const { resolutionScale: s } = this, n = Math.max(Math.round(e * s), 1), r = Math.max(Math.round(t * s), 1);
619
- this.renderTarget.setSize(n, r);
620
- const i = Math.floor(n / 2), u = Math.floor(r / 2), a = i * u;
621
- return this.instanceBuffer.bufferCount < a && (this.instanceBuffer.dispose(), this.instanceBuffer = ue(a, ge), this.setupCompute(i, u), this.setupMaterial()), this;
664
+ const { resolutionScale: o } = this, n = Math.max(Math.round(e * o), 1), i = Math.max(Math.round(t * o), 1);
665
+ this.renderTarget.setSize(n, i);
666
+ const r = Math.floor(n / 2), c = Math.floor(i / 2), a = r * c;
667
+ return this.instanceBuffer.bufferCount < a && (this.instanceBuffer.dispose(), this.instanceBuffer = _e(a, st), this.setupCompute(r, c), this.setupMaterial()), this;
622
668
  }
623
669
  updateBefore({ renderer: e }) {
624
670
  if (e == null)
625
671
  return;
626
672
  const { inputNode: t } = this;
627
- x(t != null);
628
- const { width: s, height: n } = t.value;
629
- this.setSize(s, n);
630
- const { computeNode: r, counterBuffer: i, renderTarget: u } = this;
631
- x(r != null), this.inputTexelSize.value.set(1 / s, 1 / n);
632
- const a = s / n;
673
+ y(t != null);
674
+ const { width: o, height: n } = t.value;
675
+ this.setSize(o, n);
676
+ const { computeNode: i, indirectBuffer: r, renderTarget: c } = this;
677
+ y(i != null), this.inputTexelSize.value.set(1 / o, 1 / n);
678
+ const a = o / n;
633
679
  a > 1 ? this.geometryRatio.value.set(1 / a, 1) : this.geometryRatio.value.set(1, a);
634
- const { width: h, height: c } = u;
635
- this.outputTexelSize.value.set(1 / h, 1 / c), i.array[0] = 0, i.needsUpdate = !0, e.compute(r), e.getArrayBufferAsync(i).then((l) => {
636
- this.mesh.count = new Uint32Array(l)[0];
637
- }).catch((l) => {
638
- console.error(l);
639
- }), this.rendererState = ps(e, this.rendererState), e.setRenderTarget(u), e.render(this.mesh, this.camera), ms(e, this.rendererState);
680
+ const { width: h, height: l } = c;
681
+ this.outputTexelSize.value.set(1 / h, 1 / l), r.array[1] = 0, r.needsUpdate = !0, e.compute(i), this.rendererState = fo(e, this.rendererState), e.setRenderTarget(c), e.render(this.mesh, this.camera), xo(e, this.rendererState);
640
682
  }
641
683
  setupCompute(e, t) {
642
684
  const {
643
- spikePairCount: s,
685
+ spikePairCount: o,
644
686
  inputNode: n,
645
- counterBuffer: r,
646
- instanceBuffer: i,
647
- outputTexelSize: u
687
+ indirectBuffer: i,
688
+ instanceBuffer: r,
689
+ outputTexelSize: c
648
690
  } = this;
649
- x(n != null);
650
- const a = ut(
651
- r,
691
+ y(n != null);
692
+ const a = ss(
693
+ i,
652
694
  "uint",
653
- r.count
695
+ i.count
654
696
  ).toAtomic();
655
- this.computeNode = C(() => {
656
- const h = Ce(e, t);
657
- F(X.xy.greaterThanEqual(h).any(), () => {
658
- lt();
697
+ this.computeNode = U(() => {
698
+ const h = re(e, t);
699
+ ae(Ae.xy.greaterThanEqual(h).any(), () => {
700
+ os();
659
701
  });
660
- const c = p(X.xy).mul(u).mul(2), l = n.sample(c), d = l.a;
661
- F(d.greaterThan(0.1), () => {
662
- const m = ct(a.element(0), s);
663
- for (let f = 0; f < s; ++f) {
664
- const g = i.element(m.add(f));
665
- g.get("color").assign(l.rgb), g.get("luminance").assign(d), g.get("position").assign(X.xy), g.get("scale").assign(f % 2 === 0 ? 1 : 0.5);
666
- const R = Math.PI * (3 - Math.sqrt(5)), S = Math.PI / s * f + R;
667
- g.get("sin").assign(Math.sin(S)), g.get("cos").assign(Math.cos(S));
702
+ const l = f(Ae.xy).mul(c).mul(2), u = n.sample(l), p = u.a;
703
+ ae(p.greaterThan(0.1), () => {
704
+ const d = ns(
705
+ a.element(1),
706
+ o
707
+ );
708
+ for (let m = 0; m < o; ++m) {
709
+ const x = r.element(d.add(m));
710
+ x.get("color").assign(u.rgb), x.get("luminance").assign(p), x.get("position").assign(Ae.xy), x.get("scale").assign(m % 2 === 0 ? 1 : 0.5);
711
+ const w = Math.PI * (3 - Math.sqrt(5)), T = Math.PI / o * m + w;
712
+ x.get("sin").assign(Math.sin(T)), x.get("cos").assign(Math.cos(T));
668
713
  }
669
714
  });
670
715
  })().compute(
@@ -677,29 +722,29 @@ class gs extends _ {
677
722
  const {
678
723
  inputNode: e,
679
724
  spikeNode: t,
680
- instanceBuffer: s,
725
+ instanceBuffer: o,
681
726
  luminanceThreshold: n,
682
- intensity: r,
683
- sizeScale: i,
684
- outputTexelSize: u,
727
+ intensity: i,
728
+ sizeScale: r,
729
+ outputTexelSize: c,
685
730
  geometryRatio: a
686
731
  } = this;
687
- x(e != null), x(t != null);
688
- const h = s.element(ht);
689
- this.material.colorNode = this.wireframe ? w(1) : t.mul(h.get("color").mul(r)), this.material.vertexNode = C(() => {
690
- const c = h.get("sin"), l = h.get("cos"), d = Pe(l, c, 0, c.negate(), l, 0, 0, 0, 1), f = h.get("position").mul(u).mul(2), g = f.flipY().mul(2).sub(1), S = h.get("luminance").div(n).saturate(), B = p(S, 1).mul(
732
+ y(e != null), y(t != null);
733
+ const h = o.element(is);
734
+ this.material.colorNode = this.wireframe ? z(1) : t.mul(h.get("color").mul(i)), this.material.vertexNode = U(() => {
735
+ const l = h.get("sin"), u = h.get("cos"), p = mt(u, l, 0, l.negate(), u, 0, 0, 0, 1), m = h.get("position").mul(c).mul(2), x = m.flipY().mul(2).sub(1), T = h.get("luminance").div(n).saturate(), C = f(T, 1).mul(
691
736
  h.get("scale"),
692
- i,
737
+ r,
693
738
  // Make the spike to shrink at screen borders:
694
- f.sub(0.5).length().mul(2).oneMinus().mul(0.5).add(0.5)
695
- ), L = d.mul(be.mul(w(B, 1, 1))).mul(a).add(y(g, 0));
696
- return w(L, 1);
739
+ m.sub(0.5).length().mul(2).oneMinus().mul(0.5).add(0.5)
740
+ ), j = p.mul(ht.mul(z(C, 1, 1))).mul(a).add(M(x, 0));
741
+ return z(j, 1);
697
742
  })(), this.material.wireframe = this.wireframe, this.material.needsUpdate = !0;
698
743
  }
699
744
  setup(e) {
700
745
  if (this.spikeNode == null) {
701
- const t = fs();
702
- t.colorSpace = _e, this.spikeNode = I(t);
746
+ const t = go();
747
+ t.colorSpace = ks, this.spikeNode = oe(t);
703
748
  }
704
749
  return this.setupMaterial(), super.setup(e);
705
750
  }
@@ -707,10 +752,10 @@ class gs extends _ {
707
752
  this.renderTarget.dispose(), this.material.dispose(), this.mesh.geometry.dispose(), super.dispose();
708
753
  }
709
754
  }
710
- const xs = /* @__PURE__ */ new z();
711
- class vs extends E {
755
+ const yo = /* @__PURE__ */ new ve();
756
+ class wo extends Q {
712
757
  constructor(e) {
713
- super("vec3"), this.intensity = v(1e-5), this.chromaticAberration = v(5e-3), this.aspectRatio = v(0), this.inputNode = e, this.updateBeforeType = A.FRAME;
758
+ super("vec3"), this.intensity = g(1e-5), this.chromaticAberration = g(5e-3), this.aspectRatio = g(0), this.updateBeforeType = H.FRAME, this.inputNode = e;
714
759
  }
715
760
  static get type() {
716
761
  return "LensHaloNode";
@@ -718,13 +763,13 @@ class vs extends E {
718
763
  updateBefore({ renderer: e }) {
719
764
  if (e == null)
720
765
  return;
721
- const { width: t, height: s } = e.getDrawingBufferSize(xs);
722
- this.aspectRatio.value = t / s;
766
+ const { width: t, height: o } = e.getDrawingBufferSize(yo);
767
+ this.aspectRatio.value = t / o;
723
768
  }
724
769
  setup(e) {
725
- const { inputNode: t, intensity: s, chromaticAberration: n, aspectRatio: r } = this;
726
- x(t != null);
727
- const i = K({
770
+ const { inputNode: t, intensity: o, chromaticAberration: n, aspectRatio: i } = this;
771
+ y(t != null);
772
+ const r = V({
728
773
  name: "cubicRingMask",
729
774
  type: "float",
730
775
  inputs: [
@@ -732,101 +777,101 @@ class vs extends E {
732
777
  { name: "radius", type: "float" },
733
778
  { name: "thickness", type: "float" }
734
779
  ]
735
- })(([c, l, d]) => {
736
- const m = dt(Ve(c.sub(l)).div(d), 1);
737
- return pt(m, m, k(3, m.mul(2))).oneMinus();
738
- }), u = K({
780
+ })(([l, u, p]) => {
781
+ const d = ft(_(l.sub(u)).div(p), 1);
782
+ return rs(d, d, ie(3, d.mul(2))).oneMinus();
783
+ }), c = V({
739
784
  name: "sampleHalo",
740
785
  type: "vec3",
741
786
  inputs: [
742
787
  { name: "uv", type: "vec2" },
743
788
  { name: "radius", type: "float" }
744
789
  ]
745
- })(([c, l]) => {
746
- const d = p(r, 1), m = c.sub(0.5).mul(d).normalize().div(d), f = y(n).mul(y(-1, 0, 1)), g = mt(m.mul(l).add(c.oneMinus())), R = y(
747
- t.sample(m.mul(f.r).add(g)).r,
748
- t.sample(m.mul(f.g).add(g)).g,
749
- t.sample(m.mul(f.b).add(g)).b
750
- ), S = c.sub(p(0.5, 0)).mul(d).add(p(0.5, 0)), B = ft(S, p(0.5)).saturate();
751
- return R.mulAssign(i(B, 0.45, 0.25)), R;
752
- }), a = V();
753
- return u(a, 0.3).mul(s);
790
+ })(([l, u]) => {
791
+ const p = f(i, 1), d = l.sub(0.5).mul(p).normalize().div(p), m = M(n).mul(M(-1, 0, 1)), x = as(d.mul(u).add(l.oneMinus())), w = M(
792
+ t.sample(d.mul(m.r).add(x)).r,
793
+ t.sample(d.mul(m.g).add(x)).g,
794
+ t.sample(d.mul(m.b).add(x)).b
795
+ ), T = l.sub(f(0.5, 0)).mul(p).add(f(0.5, 0)), C = cs(T, f(0.5)).saturate();
796
+ return w.mulAssign(r(C, 0.45, 0.25)), w;
797
+ }), a = I();
798
+ return c(a, 0.3).mul(o);
754
799
  }
755
800
  }
756
- const b = (o) => o.greaterThanEqual(0).all().and(o.lessThanEqual(1).all()).toFloat();
757
- class We extends ae {
801
+ const E = (s) => s.greaterThanEqual(0).all().and(s.lessThanEqual(1).all()).toFloat();
802
+ class Vt extends qe {
758
803
  constructor(e, t = 4) {
759
- super(e, t), this.blendAmount = v(0.85), this.resolutionScale = 0.5;
804
+ super(e, t), this.blendAmount = g(0.85), this.resolutionScale = 0.5;
760
805
  }
761
806
  static get type() {
762
807
  return "MipmapSurfaceBlurNode";
763
808
  }
764
809
  setupDownsampleNode(e) {
765
- const { inputNode: t, inputTexelSize: s } = this;
766
- return x(t != null), C(() => {
767
- const n = V(), r = w(1, 1, -1, -1).mul(s.xyxy).add(n.xyxy).toVertexStage(), i = w(2, 2, -2, -2).mul(s.xyxy).add(n.xyxy).toVertexStage(), u = r.zy, a = r.xy, h = r.zw, c = r.xw, l = i.zy, d = i.xy, m = i.zw, f = i.xw, g = p(n.x, i.y), R = p(i.z, n.y), S = p(i.x, n.y), B = p(n.x, i.w), L = 1 / 4 / 2, j = 1 / 9 / 2, U = t.sample(n).mul(j);
768
- let M;
769
- return M = w(
770
- b(u),
771
- b(a),
772
- b(h),
773
- b(c)
774
- ).mul(L), U.addAssign(
775
- t.sample(u).mul(M.x),
776
- t.sample(a).mul(M.y),
777
- t.sample(h).mul(M.z),
778
- t.sample(c).mul(M.w)
779
- ), M = w(
780
- b(l),
781
- b(d),
782
- b(m),
783
- b(f)
784
- ).mul(j), U.addAssign(
785
- t.sample(l).mul(M.x),
786
- t.sample(d).mul(M.y),
787
- t.sample(m).mul(M.z),
788
- t.sample(f).mul(M.w)
789
- ), M = w(
790
- b(g),
791
- b(R),
792
- b(S),
793
- b(B)
794
- ).mul(j), U.addAssign(
795
- t.sample(g).mul(M.x),
796
- t.sample(R).mul(M.y),
797
- t.sample(S).mul(M.z),
798
- t.sample(B).mul(M.w)
799
- ), U;
810
+ const { inputNode: t, inputTexelSize: o } = this;
811
+ return y(t != null), U(() => {
812
+ const n = I(), i = z(1, 1, -1, -1).mul(o.xyxy).add(n.xyxy).toVertexStage(), r = z(2, 2, -2, -2).mul(o.xyxy).add(n.xyxy).toVertexStage(), c = i.zy, a = i.xy, h = i.zw, l = i.xw, u = r.zy, p = r.xy, d = r.zw, m = r.xw, x = f(n.x, r.y), w = f(r.z, n.y), T = f(r.x, n.y), C = f(n.x, r.w), j = 1 / 4 / 2, R = 1 / 9 / 2, F = t.sample(n).mul(R);
813
+ let b;
814
+ return b = z(
815
+ E(c),
816
+ E(a),
817
+ E(h),
818
+ E(l)
819
+ ).mul(j), F.addAssign(
820
+ t.sample(c).mul(b.x),
821
+ t.sample(a).mul(b.y),
822
+ t.sample(h).mul(b.z),
823
+ t.sample(l).mul(b.w)
824
+ ), b = z(
825
+ E(u),
826
+ E(p),
827
+ E(d),
828
+ E(m)
829
+ ).mul(R), F.addAssign(
830
+ t.sample(u).mul(b.x),
831
+ t.sample(p).mul(b.y),
832
+ t.sample(d).mul(b.z),
833
+ t.sample(m).mul(b.w)
834
+ ), b = z(
835
+ E(x),
836
+ E(w),
837
+ E(T),
838
+ E(C)
839
+ ).mul(R), F.addAssign(
840
+ t.sample(x).mul(b.x),
841
+ t.sample(w).mul(b.y),
842
+ t.sample(T).mul(b.z),
843
+ t.sample(C).mul(b.w)
844
+ ), F;
800
845
  })();
801
846
  }
802
847
  setupUpsampleNode(e) {
803
- const { inputNode: t, inputTexelSize: s, downsampleNode: n } = this;
804
- x(t != null);
805
- const r = V(), i = w(1, 1, -1, -1).mul(s.xyxy).add(r.xyxy).toVertexStage(), u = p(r.x, i.y), a = p(i.z, r.y), h = p(i.x, r.y), c = p(r.x, i.w), l = i.zy, d = i.xy, m = i.zw, f = i.xw, g = N(
806
- t.sample(r).mul(1 / 4),
807
- N(
808
- t.sample(u),
848
+ const { inputNode: t, inputTexelSize: o, downsampleNode: n } = this;
849
+ y(t != null);
850
+ const i = I(), r = z(1, 1, -1, -1).mul(o.xyxy).add(i.xyxy).toVertexStage(), c = f(i.x, r.y), a = f(r.z, i.y), h = f(r.x, i.y), l = f(i.x, r.w), u = r.zy, p = r.xy, d = r.zw, m = r.xw, x = B(
851
+ t.sample(i).mul(1 / 4),
852
+ B(
853
+ t.sample(c),
809
854
  t.sample(a),
810
855
  t.sample(h),
811
- t.sample(c)
856
+ t.sample(l)
812
857
  ).mul(1 / 8),
813
- N(
814
- t.sample(l),
858
+ B(
859
+ t.sample(u),
860
+ t.sample(p),
815
861
  t.sample(d),
816
- t.sample(m),
817
- t.sample(f)
862
+ t.sample(m)
818
863
  ).mul(1 / 16)
819
864
  );
820
- return te(n.sample(r), g, this.blendAmount);
865
+ return ne(n.sample(i), x, this.blendAmount);
821
866
  }
822
867
  }
823
- const oo = (...o) => new We(...o);
824
- function He(o) {
825
- return (o instanceof Lt ? o.renderer.backend : "backend" in o ? o.backend : o).isWebGPUBackend === !0;
868
+ const Pn = (...s) => new Vt(...s);
869
+ function Pt(s) {
870
+ return (s instanceof Cs ? s.renderer.backend : "backend" in s ? s.backend : s).isWebGPUBackend === !0;
826
871
  }
827
- class ys extends E {
872
+ class To extends Q {
828
873
  constructor(e) {
829
- super("vec4"), this.bloomIntensity = v(0.05), this.inputNode = e, this.thresholdNode = new Ee(), this.blurNode = new Oe(), this.ghostNode = new as(), this.haloNode = new vs(), this.bloomNode = new We(null, 8), this.glareNode = new gs(), this.featuresNode = ds(N(this.ghostNode, this.haloNode)), this.featuresNode.value.name = "LensFlareNode.Features", this.featuresNode.resolutionScale = 0.5, this.blurNode.resolutionScale = 1, this.bloomNode.resolutionScale = 1, this.glareNode.resolutionScale = 1;
874
+ super("vec4"), this.bloomIntensity = g(0.05), this.inputNode = e, this.thresholdNode = new Bt(), this.blurNode = new At(), this.ghostNode = new mo(), this.haloNode = new wo(), this.bloomNode = new Vt(null, 8), this.glareNode = new vo(), this.featuresNode = us(B(this.ghostNode, this.haloNode)), this.featuresNode.value.name = "LensFlare_features", this.featuresNode.pixelRatio = 0.5, this.blurNode.resolutionScale = 1, this.bloomNode.resolutionScale = 1, this.glareNode.resolutionScale = 1;
830
875
  }
831
876
  static get type() {
832
877
  return "LensFlareNode";
@@ -834,82 +879,139 @@ class ys extends E {
834
879
  setup(e) {
835
880
  const {
836
881
  inputNode: t,
837
- thresholdNode: s,
882
+ thresholdNode: o,
838
883
  blurNode: n,
839
- ghostNode: r,
840
- haloNode: i,
841
- bloomNode: u,
884
+ ghostNode: i,
885
+ haloNode: r,
886
+ bloomNode: c,
842
887
  featuresNode: a,
843
888
  glareNode: h
844
889
  } = this;
845
- x(t != null);
846
- const c = s.getTextureNode(), l = n.getTextureNode();
847
- s.inputNode = t, n.inputNode = c, r.inputNode = l, i.inputNode = l, u.inputNode = c, h.inputNode = c;
848
- const d = u.getTextureNode().mul(this.bloomIntensity), m = h.getTextureNode();
849
- return C(() => {
850
- const f = t;
851
- return f.addAssign(d), He(e) && f.addAssign(m), f.add(a);
890
+ y(t != null);
891
+ const l = o.getTextureNode(), u = n.getTextureNode();
892
+ o.inputNode = t, n.inputNode = l, i.inputNode = u, r.inputNode = u, c.inputNode = l, h.inputNode = l;
893
+ const p = c.getTextureNode().mul(this.bloomIntensity), d = h.getTextureNode();
894
+ return U(() => {
895
+ const m = t;
896
+ return m.addAssign(p), Pt(e) && m.addAssign(d), m.add(a);
852
897
  })();
853
898
  }
854
899
  dispose() {
855
900
  this.thresholdNode.dispose(), this.blurNode.dispose(), this.ghostNode.dispose(), this.haloNode.dispose(), this.bloomNode.dispose(), this.glareNode.dispose(), this.featuresNode.dispose(), super.dispose();
856
901
  }
857
902
  }
858
- const no = (o) => new ys(
859
- o != null ? Le(o, "LensFlareNode.Input") : null
860
- ), ro = /* @__PURE__ */ G(
861
- (o, e, t, s) => {
862
- const n = o.sub(t), r = Q(e, n), i = Q(n, n).sub(s.pow2()), u = r.pow2().sub(i).toVar(), a = p(-1);
863
- return F(u.greaterThanEqual(0), () => {
864
- const h = Y(u);
865
- a.assign(p(r.negate().sub(h), r.negate().add(h)));
903
+ const Fn = (s) => new To(s != null ? Oe(s) : null), No = /* @__PURE__ */ V({
904
+ name: "bvec2Not",
905
+ type: "bvec2",
906
+ inputs: [{ name: "x", type: "bvec2" }]
907
+ })(([s]) => s.notEqual(Me(!0))), So = /* @__PURE__ */ V({
908
+ name: "bvec3Not",
909
+ type: "bvec3",
910
+ inputs: [{ name: "x", type: "bvec3" }]
911
+ })(([s]) => s.notEqual(Me(!0))), bo = /* @__PURE__ */ V({
912
+ name: "bvec4Not",
913
+ type: "bvec4",
914
+ inputs: [{ name: "x", type: "bvec4" }]
915
+ })(([s]) => s.notEqual(Me(!0))), On = /* @__PURE__ */ Le([
916
+ No,
917
+ So,
918
+ bo
919
+ ]), Mo = /* @__PURE__ */ V({
920
+ name: "bvec2And",
921
+ type: "bvec2",
922
+ inputs: [
923
+ { name: "x", type: "bvec2" },
924
+ { name: "y", type: "bvec2" }
925
+ ]
926
+ })(([s, e]) => xt(re(s).mul(re(e)))), zo = /* @__PURE__ */ V({
927
+ name: "bvec3And",
928
+ type: "bvec3",
929
+ inputs: [
930
+ { name: "x", type: "bvec3" },
931
+ { name: "y", type: "bvec3" }
932
+ ]
933
+ })(([s, e]) => gt(pe(s).mul(pe(e)))), Co = /* @__PURE__ */ V({
934
+ name: "bvec4And",
935
+ type: "bvec4",
936
+ inputs: [
937
+ { name: "x", type: "bvec4" },
938
+ { name: "y", type: "bvec4" }
939
+ ]
940
+ })(([s, e]) => vt(me(s).mul(me(e)))), Un = /* @__PURE__ */ Le([
941
+ Mo,
942
+ zo,
943
+ Co
944
+ ]), Ro = /* @__PURE__ */ V({
945
+ name: "bvec2Or",
946
+ type: "bvec2",
947
+ inputs: [
948
+ { name: "x", type: "bvec2" },
949
+ { name: "y", type: "bvec2" }
950
+ ]
951
+ })(([s, e]) => re(s).add(re(e)).notEqual(0)), Do = /* @__PURE__ */ V({
952
+ name: "bvec3Or",
953
+ type: "bvec3",
954
+ inputs: [
955
+ { name: "x", type: "bvec3" },
956
+ { name: "y", type: "bvec3" }
957
+ ]
958
+ })(([s, e]) => pe(s).add(pe(e)).notEqual(0)), Bo = /* @__PURE__ */ V({
959
+ name: "bvec4Or",
960
+ type: "bvec4",
961
+ inputs: [
962
+ { name: "x", type: "bvec4" },
963
+ { name: "y", type: "bvec4" }
964
+ ]
965
+ })(([s, e]) => me(s).add(me(e)).notEqual(0)), jn = /* @__PURE__ */ Le([Ro, Do, Bo]), En = /* @__PURE__ */ L(
966
+ (s, e, t, o) => {
967
+ const n = s.sub(t), i = Ne(e, n), r = Ne(n, n).sub(o.pow2()), c = i.pow2().sub(r).toConst(), a = f(-1);
968
+ return ae(c.greaterThanEqual(0), () => {
969
+ const h = be(c);
970
+ a.assign(f(i.negate().sub(h), i.negate().add(h)));
866
971
  }), a;
867
972
  }
868
- ), ws = /* @__PURE__ */ oe(
869
- { near: "vec4", far: "vec4" },
870
- "raySpheresIntersections"
871
- ), io = /* @__PURE__ */ G(
872
- (o, e, t, s) => {
873
- const n = o.sub(t), r = Q(e, n), i = Q(n, n).sub(s.pow2()), u = r.pow2().sub(i).toVar(), a = w(-1), h = w(-1);
874
- return F(u.greaterThanEqual(0), () => {
875
- const c = Y(u);
876
- a.assign(r.negate().sub(c)), h.assign(r.negate().add(c));
877
- }), ws(a, h);
878
- }
879
- ), ao = /* @__PURE__ */ G(
880
- (o, e, t) => {
881
- const s = o.div(t), n = e.div(t), r = n.dot(n), i = s.dot(n), u = s.dot(s), a = i.pow2().sub(r.mul(u.sub(1))).toVar(), h = p(-1);
882
- return F(a.greaterThanEqual(0), () => {
883
- const c = Y(a);
884
- h.assign(p(i.negate().sub(c), i.negate().add(c)).div(r));
973
+ ), Ao = /* @__PURE__ */ Ie({
974
+ near: "vec4",
975
+ far: "vec4"
976
+ }), kn = /* @__PURE__ */ L(
977
+ (s, e, t, o) => {
978
+ const n = s.sub(t), i = Ne(e, n), r = Ne(n, n).sub(o.pow2()), c = i.pow2().sub(r).toConst(), a = f(c.greaterThanEqual(0)).toConst(), h = a.oneMinus().toConst(), l = be(c.max(0)).toConst(), u = a.mul(i.negate().sub(l)).sub(h), p = a.mul(i.negate().add(l)).sub(h);
979
+ return Ao(u, p);
980
+ }
981
+ ), In = /* @__PURE__ */ L(
982
+ (s, e, t) => {
983
+ const o = s.div(t), n = e.div(t), i = n.dot(n), r = o.dot(n), c = o.dot(o), a = r.pow2().sub(i.mul(c.sub(1))).toConst(), h = f(-1);
984
+ return ae(a.greaterThanEqual(0), () => {
985
+ const l = be(a);
986
+ h.assign(f(r.negate().sub(l), r.negate().add(l)).div(i));
885
987
  }), h;
886
988
  }
887
- ), Ts = {
888
- float: ne,
889
- int: H,
890
- uint: zt,
891
- bool: bt,
892
- vec2: p,
893
- ivec2: T,
894
- uvec2: Ce,
895
- bvec2: Rt,
896
- vec3: y,
897
- ivec3: Mt,
898
- uvec3: St,
899
- bvec3: Nt,
900
- vec4: w,
901
- ivec4: Tt,
902
- uvec4: wt,
903
- bvec4: yt,
904
- mat2: vt,
905
- mat3: Pe,
906
- mat4: xt,
907
- color: gt
908
- }, uo = Wt;
909
- function lo(o) {
910
- return Ts[o];
989
+ ), Vo = {
990
+ float: G,
991
+ int: K,
992
+ uint: ms,
993
+ bool: Me,
994
+ vec2: f,
995
+ ivec2: O,
996
+ uvec2: re,
997
+ bvec2: xt,
998
+ vec3: M,
999
+ ivec3: ps,
1000
+ uvec3: pe,
1001
+ bvec3: gt,
1002
+ vec4: z,
1003
+ ivec4: yt,
1004
+ uvec4: me,
1005
+ bvec4: vt,
1006
+ mat2: ds,
1007
+ mat3: mt,
1008
+ mat4: hs,
1009
+ color: ls
1010
+ }, Ln = Rs;
1011
+ function Wn(s) {
1012
+ return Vo[s];
911
1013
  }
912
- class Ns extends Ht {
1014
+ class Po extends Nt {
913
1015
  static get type() {
914
1016
  return "OutputTexture3DNode";
915
1017
  }
@@ -923,58 +1025,276 @@ class Ns extends Ht {
923
1025
  return new this.constructor(this.owner, this.value);
924
1026
  }
925
1027
  }
926
- const co = (...o) => new Ns(...o), ho = /* @__PURE__ */ G(
927
- (o, e) => {
928
- const t = p(Ae(o)), s = t.reciprocal(), n = e.mul(t), r = n.sub(0.5).floor().add(0.5), i = n.sub(r), u = i.mul(i.mul(i.mul(0.5).oneMinus()).sub(0.5)), a = i.mul(i).mul(i.mul(1.5).sub(2.5)).add(1), h = i.mul(i.mul(k(2, i.mul(1.5))).add(0.5)), c = i.mul(i).mul(i.mul(0.5).sub(0.5)), l = a.add(h), d = h.div(a.add(h)), m = r.sub(1).mul(s), f = r.add(2).mul(s), g = r.add(d).mul(s);
929
- return N(
930
- o.sample(p(m.x, m.y)).mul(u.x).mul(u.y),
931
- o.sample(p(g.x, m.y)).mul(l.x).mul(u.y),
932
- o.sample(p(f.x, m.y)).mul(c.x).mul(u.y),
933
- o.sample(p(m.x, g.y)).mul(u.x).mul(l.y),
934
- o.sample(p(g.x, g.y)).mul(l.x).mul(l.y),
935
- o.sample(p(f.x, g.y)).mul(c.x).mul(l.y),
936
- o.sample(p(m.x, f.y)).mul(u.x).mul(c.y),
937
- o.sample(p(g.x, f.y)).mul(l.x).mul(c.y),
938
- o.sample(p(f.x, f.y)).mul(c.x).mul(c.y)
1028
+ const $n = (...s) => new Po(...s), Fo = ["x", "y", "z", "w"], qn = /* @__PURE__ */ L(
1029
+ (s, e, t = 0) => {
1030
+ let o;
1031
+ if (typeof t == "number")
1032
+ o = t;
1033
+ else if (t?.isConstNode === !0)
1034
+ o = t.value;
1035
+ else
1036
+ throw new Error("Component must be a constant.");
1037
+ const n = s.size(), i = O(e.mul(n).sub(0.5).floor()).toConst(), r = yt(i, i.add(1)).toConst(), c = Fo[o];
1038
+ return z(
1039
+ s.load(r.xw)[c],
1040
+ // min, max
1041
+ s.load(r.zw)[c],
1042
+ // max, max
1043
+ s.load(r.zy)[c],
1044
+ // max, min
1045
+ s.load(r.xy)[c]
1046
+ // min, min
1047
+ );
1048
+ }
1049
+ ), Gn = /* @__PURE__ */ L(
1050
+ (s, e = I()) => {
1051
+ const t = f(s.size()), o = t.reciprocal(), n = e.mul(t), i = n.sub(0.5).floor().add(0.5), r = n.sub(i), c = r.mul(r.mul(r.mul(0.5).oneMinus()).sub(0.5)), a = r.mul(r).mul(r.mul(1.5).sub(2.5)).add(1), h = r.mul(r.mul(ie(2, r.mul(1.5))).add(0.5)), l = r.mul(r).mul(r.mul(0.5).sub(0.5)), u = a.add(h), p = h.div(a.add(h)), d = i.sub(1).mul(o), m = i.add(2).mul(o), x = i.add(p).mul(o);
1052
+ return B(
1053
+ s.sample(f(d.x, d.y)).mul(c.x).mul(c.y),
1054
+ s.sample(f(x.x, d.y)).mul(u.x).mul(c.y),
1055
+ s.sample(f(m.x, d.y)).mul(l.x).mul(c.y),
1056
+ s.sample(f(d.x, x.y)).mul(c.x).mul(u.y),
1057
+ s.sample(f(x.x, x.y)).mul(u.x).mul(u.y),
1058
+ s.sample(f(m.x, x.y)).mul(l.x).mul(u.y),
1059
+ s.sample(f(d.x, m.y)).mul(c.x).mul(l.y),
1060
+ s.sample(f(x.x, m.y)).mul(u.x).mul(l.y),
1061
+ s.sample(f(m.x, m.y)).mul(l.x).mul(l.y)
1062
+ );
1063
+ }
1064
+ ), D = 64;
1065
+ function Te(s) {
1066
+ return Math.floor(Math.max(0, s) / D);
1067
+ }
1068
+ class Oo {
1069
+ constructor() {
1070
+ this.size = [0, 0, 0], this.offset = { x: 0, y: 0 };
1071
+ }
1072
+ copy(e) {
1073
+ return [this.size[0], this.size[1], this.size[2]] = e.size, this.offset.x = e.offset.x, this.offset.y = e.offset.y, this;
1074
+ }
1075
+ }
1076
+ const Uo = /* @__PURE__ */ new St(), jo = /* @__PURE__ */ new Ws(), Eo = /* @__PURE__ */ new ve(), ko = /* @__PURE__ */ new Se();
1077
+ class Io extends Q {
1078
+ constructor(e, t, o) {
1079
+ super("float"), this.sampleCount = 60, this.hardShadowSamples = 4, this.fadeOutSamples = 8, this.thickness = g(5e-3), this.shadowContrast = g(4), this.shadowIntensity = g(1), this.bilinearThreshold = g(0.02), this.lightCoordinate = g("vec4"), this.dispatchOffset = g("ivec2"), this.dispatchIndex = g(0), this.dispatches = Array.from(
1080
+ // Populate the max number of dispatches
1081
+ { length: 8 },
1082
+ () => new Oo()
1083
+ ), this.dispatchCount = 0, this.updateBeforeType = H.FRAME, this.depthNode = e, this.camera = t, this.mainLight = o;
1084
+ const n = new Ds(1, 1);
1085
+ n.colorSpace = Ls, n.minFilter = ue, n.magFilter = ue, n.generateMipmaps = !1, n.name = "ScreenSpaceShadow", this.outputTexture = n, this.textureNode = $e(this, n), this.computeNode = this.createComputeNode();
1086
+ }
1087
+ get type() {
1088
+ return "ScreenSpaceShadowNode";
1089
+ }
1090
+ customCacheKey() {
1091
+ return We(
1092
+ this.camera?.id ?? -1,
1093
+ this.mainLight?.id ?? -1,
1094
+ this.sampleCount,
1095
+ this.hardShadowSamples,
1096
+ this.fadeOutSamples
939
1097
  );
940
1098
  }
941
- );
942
- function xe(o, e) {
943
- let t = 1, s = 0;
944
- for (; o > 0; )
945
- t /= e, s += t * (o % e), o = Math.floor(o / e);
946
- return s;
1099
+ getTextureNode() {
1100
+ return this.textureNode;
1101
+ }
1102
+ setSize(e, t) {
1103
+ const { outputTexture: o } = this;
1104
+ return (e !== o.width || t !== o.height) && (o.setSize(e, t, 0), o.needsUpdate = !0), this;
1105
+ }
1106
+ updateBefore(e) {
1107
+ const { renderer: t } = e;
1108
+ if (t == null)
1109
+ return;
1110
+ const o = t.getDrawingBufferSize(Eo);
1111
+ this.setSize(o.width, o.height);
1112
+ const { camera: n, mainLight: i } = this, r = ko.multiplyMatrices(
1113
+ n.projectionMatrix,
1114
+ n.matrixWorldInverse
1115
+ ), c = Uo.copy(i.position).sub(i.target.position).normalize(), a = jo.set(c.x, c.y, c.z, 0).applyMatrix4(r);
1116
+ this.updateDispatchList(a, o);
1117
+ for (let h = 0; h < this.dispatchCount; ++h) {
1118
+ const l = this.dispatches[h];
1119
+ this.dispatchOffset.value.set(l.offset.x, l.offset.y), this.dispatchIndex.value = h, t.compute(this.computeNode, l.size);
1120
+ }
1121
+ }
1122
+ // See bend_sss_cpu.h
1123
+ updateDispatchList(e, { width: t, height: o }) {
1124
+ let n = e.w;
1125
+ const i = 2e-6 * D;
1126
+ n >= 0 && n < i ? n = i : n < 0 && n > -i && (n = -i), this.lightCoordinate.value.set(
1127
+ (e.x / n * 0.5 + 0.5) * t,
1128
+ (e.y / n * -0.5 + 0.5) * o,
1129
+ e.w === 0 ? 0 : e.z / e.w,
1130
+ e.w > 0 ? 1 : -1
1131
+ );
1132
+ const r = Math.round(this.lightCoordinate.value.x), c = Math.round(this.lightCoordinate.value.y), a = -r, h = -(o - c), l = t - r, u = c;
1133
+ let p = 0;
1134
+ for (let d = 0; d < 4; ++d) {
1135
+ const m = d === 0 || d === 3, x = (d & 1) > 0, w = (d & 2) > 0, T = Te(x ? a : -l), C = Te(w ? h : -u), j = D * (m ? 1 : 2) - 1, R = D * (m ? 2 : 1) - 1, F = Te((x ? l : -a) + j), b = Te((w ? u : -h) + R);
1136
+ if (F - T > 0 && b - C > 0) {
1137
+ const k = d === 2 || d === 3 ? 1 : 0, W = d === 1 || d === 3 ? 1 : 0, v = this.dispatches[p++];
1138
+ v.size[0] = D, v.size[1] = F - T, v.size[2] = b - C, v.offset.x = (x ? T : -F) + k, v.offset.y = (w ? -b : C) + W;
1139
+ let A;
1140
+ if (d === 0 ? A = a - h : d === 1 ? A = l + h : d === 2 ? A = -a - u : A = -l + u, A = (A + D - 1) / D | 0, A > 0) {
1141
+ const N = this.dispatches[p++].copy(v);
1142
+ d === 0 ? (N.size[2] = Math.min(v.size[2], A), v.size[2] -= N.size[2], N.offset.y = v.offset.y + v.size[2], N.offset.x -= 1, N.size[1] += 1) : d === 1 ? (N.size[1] = Math.min(v.size[1], A), v.size[1] -= N.size[1], N.offset.x = v.offset.x + v.size[1], N.size[2] += 1) : d === 2 ? (N.size[1] = Math.min(v.size[1], A), v.size[1] -= N.size[1], v.offset.x += N.size[1], N.size[2] += 1, N.offset.y -= 1) : d === 3 && (N.size[2] = Math.min(v.size[2], A), v.size[2] -= N.size[2], v.offset.y += N.size[2], ++N.size[1]), (N.size[1] <= 0 || N.size[2] <= 0) && N.copy(this.dispatches[--p]), (v.size[1] <= 0 || v.size[2] <= 0) && v.copy(this.dispatches[--p]);
1143
+ }
1144
+ }
1145
+ }
1146
+ for (let d = 0; d < p; ++d) {
1147
+ const m = this.dispatches[d];
1148
+ m.offset.x *= D, m.offset.y *= D;
1149
+ }
1150
+ this.dispatchCount = p;
1151
+ }
1152
+ // See bend_sss_gpu.h
1153
+ createComputeNode() {
1154
+ const {
1155
+ depthNode: e,
1156
+ camera: t,
1157
+ sampleCount: o,
1158
+ hardShadowSamples: n,
1159
+ fadeOutSamples: i,
1160
+ outputTexture: r,
1161
+ thickness: c,
1162
+ shadowContrast: a,
1163
+ shadowIntensity: h,
1164
+ bilinearThreshold: l,
1165
+ lightCoordinate: u,
1166
+ dispatchOffset: p
1167
+ } = this, d = Math.floor(o / D) + 2, m = fs("float", d * D), x = () => {
1168
+ const w = O(Ke.yz).mul(D).add(p).toConst(), T = u.xy.floor().add(0.5).toConst(), C = u.xy.sub(T).toConst(), j = u.w.greaterThan(0), R = O(w.sign()).toConst(), F = _(w.x.add(R.y)).lessThan(_(w.y.sub(R.x))).toConst(), b = O(
1169
+ F.select(R.y, 0),
1170
+ F.select(0, R.x.negate())
1171
+ ), k = f(b.mul(Ke.x).add(w)).toConst(), W = _(k.x).greaterThan(_(k.y)).toConst(), v = W.select(k.x, k.y).toConst(), A = v.abs().toConst(), N = A.sub(D), $ = W.select(C.x, C.y).toVar();
1172
+ $.assign(
1173
+ v.greaterThan(0).select($.negate(), $)
1174
+ );
1175
+ const Y = k.add(T).toConst(), X = ne(
1176
+ u.xy,
1177
+ Y,
1178
+ N.add($).div(A.add($))
1179
+ ).toConst(), ee = Y.sub(X).toConst(), te = G(
1180
+ j.select(
1181
+ we,
1182
+ we.bitXor(D - 1)
1183
+ )
1184
+ ).toConst(), Z = ne(Y, X, te.div(D)).toVar(), q = A.sub(te).add($).toConst();
1185
+ return { pixelXY: Z, pixelDistance: q, xyDelta: ee, xAxisMajor: W };
1186
+ };
1187
+ return U((w) => {
1188
+ const [T, C] = w.renderer.reversedDepthBuffer ? [G(1), G(0)] : [G(0), G(1)], j = (S) => {
1189
+ let P = e.load(S);
1190
+ return w.renderer.logarithmicDepthBuffer && (P = Ue(
1191
+ P,
1192
+ fe(t),
1193
+ xe(t)
1194
+ )), P = P.toConst(), wt(
1195
+ S.greaterThanEqual(0).all(),
1196
+ S.lessThan(e.size()).all()
1197
+ ).select(P, C);
1198
+ }, { pixelXY: R, xyDelta: F, pixelDistance: b, xAxisMajor: k } = x(), W = u.w.negate(), v = T.greaterThan(C).select(-1, 1).toConst(), A = O(R.floor()).toConst();
1199
+ let N, $, Y;
1200
+ for (let S = 0; S < d; ++S) {
1201
+ const P = O(R.floor()).toConst(), de = k.select(R.y, R.x).fract().sub(0.5).greaterThan(0).select(1, -1).toConst(), Ft = O(
1202
+ k.select(0, de),
1203
+ k.select(de, 0)
1204
+ ), se = j(P).toConst(), He = j(P.add(Ft)).toConst(), Ye = C.sub(se).abs().toConst(), Ot = xs(
1205
+ se.sub(He).abs(),
1206
+ Ye.mul(l)
1207
+ ), Ut = se.add(
1208
+ _(se.sub(He)).mul(v)
1209
+ ), jt = Ot.select(se, Ut), De = S === 0 ? b : W.mul(D * S).add(b).toConst();
1210
+ let Be = jt.sub(u.z).div(De).toConst();
1211
+ S > 0 && (Be = De.greaterThan(0).select(Be, 1e10).toConst()), m.element(we.add(D * S)).assign(Be), S === 0 && (N = se, $ = Ye, Y = De), R.addAssign(F.mul(W));
1212
+ }
1213
+ gs();
1214
+ const X = N.sub(u.z).div(Y).toVar(), ee = Y.add(W).min(c.reciprocal()).mul(Y).div($).toConst();
1215
+ X.assign(X.mul(ee).sub(v));
1216
+ const te = we.add(1).toConst(), Z = G(1).toVar();
1217
+ for (let S = 0; S < n; ++S) {
1218
+ const P = X.sub(m.element(te.add(S)).mul(ee)).abs();
1219
+ Z.assign(Z.min(P));
1220
+ }
1221
+ const q = z(1).toVar();
1222
+ for (let S = n; S < o - i; ++S) {
1223
+ const P = X.sub(m.element(te.add(S)).mul(ee)).abs(), he = K(S & 3).toConst();
1224
+ q.element(he).assign(q.element(he).min(P));
1225
+ }
1226
+ for (let S = o - i; S < o; ++S) {
1227
+ const P = X.sub(m.element(te.add(S)).mul(ee)).abs(), he = (S + 1 - (o - i)) / (i + 1) * 0.75, de = K(S & 3).toConst();
1228
+ q.element(de).assign(q.element(de).min(P.add(he)));
1229
+ }
1230
+ const Ge = a.oneMinus().toConst();
1231
+ Z.assign(
1232
+ Z.mul(a).add(Ge).saturate()
1233
+ ), q.assign(
1234
+ q.mul(a).add(Ge).saturate()
1235
+ );
1236
+ const ye = G(0).toVar();
1237
+ ye.assign(q.dot(z(0.25))), ye.assign(ft(Z, ye)), vs(r, A, ne(1, ye, h));
1238
+ })().computeKernel([D, 1, 1]);
1239
+ }
1240
+ setup(e) {
1241
+ return this.textureNode;
1242
+ }
1243
+ dispose() {
1244
+ this.outputTexture.dispose();
1245
+ }
1246
+ }
1247
+ const Hn = (...s) => new Io(...s), Lo = /* @__PURE__ */ (() => {
1248
+ const s = new Bs(new Uint8Array(1));
1249
+ return s.format = As, s.minFilter = Qe, s.magFilter = Qe, s.wrapS = Ve, s.wrapT = Ve, s.wrapR = Ve, s.needsUpdate = !0, s;
1250
+ })();
1251
+ class Wo extends Nt {
1252
+ constructor() {
1253
+ super(Lo), this.url = Hs;
1254
+ }
1255
+ customCacheKey() {
1256
+ return Xs(this.url);
1257
+ }
1258
+ setup(e) {
1259
+ return new Ys().loadAsync(this.url).then((t) => {
1260
+ this.value = t;
1261
+ }).catch((t) => {
1262
+ console.error(t);
1263
+ }), super.setup(e);
1264
+ }
1265
+ }
1266
+ const $o = /* @__PURE__ */ pt(Wo), Yn = /* @__PURE__ */ U(() => $o.sample(M(ke.xy, ys.mod(64)).div(M(128, 128, 64))).r.toConst("stbn")).once()();
1267
+ class qo extends Vs {
1268
+ static get type() {
1269
+ return "StorageTexture3DNode";
1270
+ }
1271
+ getDefaultUV() {
1272
+ return M(0.5, 0.5, 0.5);
1273
+ }
1274
+ setUpdateMatrix(e) {
1275
+ }
1276
+ generateUV(e, t) {
1277
+ return t.build(e, this.sampler ? "vec3" : "ivec3");
1278
+ }
1279
+ generateOffset(e, t) {
1280
+ return t.build(e, "ivec3");
1281
+ }
1282
+ }
1283
+ const Xn = (...s) => new qo(...s);
1284
+ function ot(s, e) {
1285
+ let t = 1, o = 0;
1286
+ for (; s > 0; )
1287
+ t /= e, o += t * (s % e), s = Math.floor(s / e);
1288
+ return o;
947
1289
  }
948
- const ve = /* @__PURE__ */ Array.from(
1290
+ const nt = /* @__PURE__ */ Array.from(
949
1291
  { length: 16 },
950
- (o, e) => new z(xe(e + 1, 2), xe(e + 1, 3))
951
- ), Ss = (o, e, t, { perspective: s = !0, logarithmic: n = !1 } = {}) => n ? De(o, e, t) : s ? je(o, e, t) : Bt(o, e, t), ye = (o, e, t) => {
952
- const s = De(o, e, t);
953
- return Pt(s, e, t);
954
- }, po = (o, e, t) => {
955
- const s = je(o, e, t);
956
- return Fe(s, e, t);
957
- }, mo = (o, e, t, s, n) => {
958
- const r = s.element(H(2)).element(H(3)), i = s.element(H(3)).element(H(3)), a = w(y(o.flipY(), e).mul(2).sub(1), 1).mul(t.mul(r).add(i));
959
- return n.mul(a).xyz;
960
- }, we = [
961
- /* @__PURE__ */ y(58.1375, 2.7747, 26.8183),
962
- /* @__PURE__ */ y(-150.5666, 4.2109, -88.5066),
963
- /* @__PURE__ */ y(130.5887, -14.0195, 109.0745),
964
- /* @__PURE__ */ y(-42.3277, 4.8052, -60.1097),
965
- /* @__PURE__ */ y(4.5974, 2.1856, 12.5925),
966
- /* @__PURE__ */ y(0.1357, 0.0914, 0.1067)
967
- ], Ms = (o) => we.slice(1).reduce((e, t) => t.add(o.mul(e)), we[0]), fo = (o, e, t, s) => {
968
- const n = Ss(o, e, t, s);
969
- return Ms(Fe(n, e, t));
970
- }, go = (o) => {
971
- const e = k(0.5, o.x).mul(Vt), t = k(o.y, 0.5).mul(Ct), s = le(t);
972
- return y(s.mul(le(e)), ce(t), s.mul(ce(e)));
973
- }, { resetRendererState: Rs, restoreRendererState: bs } = O;
974
- function zs(o) {
975
- return o.isPerspectiveCamera === !0 || o.isOrthographicCamera === !0 || "updateProjectionMatrix" in o && "setViewOffset" in o && "clearViewOffset" in o;
1292
+ (s, e) => new ve(ot(e + 1, 2), ot(e + 1, 3))
1293
+ ), { resetRendererState: Go, restoreRendererState: Ho } = ge;
1294
+ function Yo(s) {
1295
+ return s.isPerspectiveCamera === !0 || s.isOrthographicCamera === !0 || "updateProjectionMatrix" in s && "setViewOffset" in s && "clearViewOffset" in s;
976
1296
  }
977
- const Bs = /* @__PURE__ */ K({
1297
+ const Xo = /* @__PURE__ */ V({
978
1298
  name: "clipAABB",
979
1299
  type: "vec4",
980
1300
  inputs: [
@@ -983,105 +1303,103 @@ const Bs = /* @__PURE__ */ K({
983
1303
  { name: "minColor", type: "vec4" },
984
1304
  { name: "maxColor", type: "vec4" }
985
1305
  ]
986
- })(([o, e, t, s]) => {
987
- const n = s.rgb.add(t.rgb).mul(0.5), r = s.rgb.sub(t.rgb).mul(0.5).add(1e-7), i = e.sub(w(n, o.a)), a = i.xyz.div(r).abs(), h = Ue(a.x, a.y, a.z);
988
- return Ut(
989
- h.greaterThan(1),
990
- w(n, o.a).add(i.div(h)),
991
- e
992
- );
993
- }), Te = [
994
- /* @__PURE__ */ T(-1, -1),
995
- /* @__PURE__ */ T(-1, 1),
996
- /* @__PURE__ */ T(1, -1),
997
- /* @__PURE__ */ T(1, 1),
998
- /* @__PURE__ */ T(1, 0),
999
- /* @__PURE__ */ T(0, -1),
1000
- /* @__PURE__ */ T(0, 1),
1001
- /* @__PURE__ */ T(-1, 0)
1002
- ], Vs = /* @__PURE__ */ G(
1003
- (o, e, t, s, n) => {
1004
- const r = t.toVar(), i = t.pow2().toVar();
1005
- for (const d of Te) {
1006
- const m = o.load(e.add(d));
1007
- r.addAssign(m), i.addAssign(m.pow2());
1306
+ })(([s, e, t, o]) => {
1307
+ const n = o.rgb.add(t.rgb).mul(0.5).toConst(), i = o.rgb.sub(t.rgb).mul(0.5).add(1e-7), r = e.sub(z(n, s.a)).toConst(), a = r.xyz.div(i).abs().toConst(), h = Tt(a.x, a.y, a.z).toConst();
1308
+ return h.greaterThan(1).select(z(n, s.a).add(r.div(h)), e);
1309
+ }), it = [
1310
+ [-1, -1],
1311
+ [-1, 1],
1312
+ [1, -1],
1313
+ [1, 1],
1314
+ [1, 0],
1315
+ [0, -1],
1316
+ [0, 1],
1317
+ [-1, 0]
1318
+ ], Zo = /* @__PURE__ */ L(
1319
+ (s, e, t, o, n) => {
1320
+ const i = t.toVar(), r = t.pow2().toVar();
1321
+ for (const [p, d] of it) {
1322
+ const m = s.load(e.add(O(p, d))).toConst();
1323
+ i.addAssign(m), r.addAssign(m.pow2());
1008
1324
  }
1009
- const u = ne(Te.length + 1), a = r.div(u), h = Y(i.div(u).sub(a.pow2()).max(0)).mul(n), c = a.sub(h), l = a.add(h);
1010
- return Bs(a.clamp(c, l), s, c, l);
1011
- }
1012
- ), Cs = [
1013
- /* @__PURE__ */ T(-1, -1),
1014
- /* @__PURE__ */ T(-1, 0),
1015
- /* @__PURE__ */ T(-1, 1),
1016
- /* @__PURE__ */ T(0, -1),
1017
- /* @__PURE__ */ T(0, 0),
1018
- /* @__PURE__ */ T(0, 1),
1019
- /* @__PURE__ */ T(1, -1),
1020
- /* @__PURE__ */ T(1, 0),
1021
- /* @__PURE__ */ T(1, 1)
1022
- ], Ps = /* @__PURE__ */ oe({
1023
- coord: "ivec2",
1024
- depth: "float"
1025
- }), As = /* @__PURE__ */ G(
1026
- (o, e) => {
1027
- const t = ne(1), s = T(0);
1028
- for (const n of Cs) {
1029
- const r = e.add(n).toVar(), i = o.load(r).toVar();
1030
- F(i.r.lessThan(t), () => {
1031
- s.assign(r), t.assign(i.r);
1325
+ const c = it.length + 1, a = i.div(c).toConst(), h = be(r.div(c).sub(a.pow2()).max(0)).mul(n).toConst(), l = a.sub(h).toConst(), u = a.add(h).toConst();
1326
+ return Xo(a.clamp(l, u), o, l, u);
1327
+ }
1328
+ ), _o = [
1329
+ [-1, -1],
1330
+ [-1, 0],
1331
+ [-1, 1],
1332
+ [0, -1],
1333
+ [0, 0],
1334
+ [0, 1],
1335
+ [1, -1],
1336
+ [1, 0],
1337
+ [1, 1]
1338
+ ], Ko = /* @__PURE__ */ Ie({
1339
+ closestCoord: "ivec2",
1340
+ closestDepth: "float"
1341
+ }), Qo = /* @__PURE__ */ L(
1342
+ (s, e) => (t) => {
1343
+ const o = O(0).toVar(), n = G(1).toVar();
1344
+ for (const [i, r] of _o) {
1345
+ const c = e.add(O(i, r)).toConst();
1346
+ let a = s.load(c).r;
1347
+ t.renderer.reversedDepthBuffer && (a = a.oneMinus()), a = a.toConst(), ae(a.lessThan(n), () => {
1348
+ o.assign(c), n.assign(a);
1032
1349
  });
1033
1350
  }
1034
- return Ps(s, t);
1351
+ return Ko(o, n);
1352
+ }
1353
+ ), Jo = /* @__PURE__ */ L(
1354
+ (s, e) => {
1355
+ const o = s.mul(e).fract().abs(), n = Tt(o, o.oneMinus());
1356
+ return n.x.mul(n.y).oneMinus().div(0.75);
1035
1357
  }
1036
- ), Ne = /* @__PURE__ */ new z(), Fs = /* @__PURE__ */ new et(1, 1);
1037
- class Ds extends E {
1038
- constructor(e, t, s, n, r) {
1039
- if (super("vec4"), this.temporalAlpha = v(0.05), this.varianceGamma = v(1), this.velocityThreshold = v(0.1), this.depthError = v(1e-3), this.debugShowRejection = !1, this.resolveRT = this.createRenderTarget("Resolve"), this.historyRT = this.createRenderTarget("History"), this.resolveMaterial = new P(), this.copyMaterial = new P(), this.mesh = new q(), this.needsSyncPostProcessing = !1, this.needsClearHistory = !1, this.resolveNode = I(this.resolveRT.texture), this.historyNode = I(this.historyRT.texture), this.previousDepthNode = I(Fs), this.originalProjectionMatrix = new W(), this.jitterIndex = 0, this.velocityNodeImmutable = e, this.inputNode = t, this.depthNode = s, this.velocityNode = n, !zs(r))
1358
+ ), rt = /* @__PURE__ */ new ve(), en = /* @__PURE__ */ new $s(1, 1);
1359
+ class at extends Q {
1360
+ constructor(e, t, o, n) {
1361
+ if (super("vec4"), this.temporalAlpha = g(0.05), this.varianceGamma = g(1), this.velocityThreshold = g(0.1), this.depthError = g(1e-3), this.debugShowRejection = !1, this.resolveRT = this.createRenderTarget("resolve"), this.historyRT = this.createRenderTarget("history"), this.resolveMaterial = new ce(), this.mesh = new ze(), this.needsSyncRenderPipeline = !1, this.needsClearHistory = !1, this.resolveNode = oe(this.resolveRT.texture), this.historyNode = oe(this.historyRT.texture), this.previousDepthNode = oe(en), this.originalProjectionMatrix = new Se(), this.jitterIndex = 0, this.updateBeforeType = H.FRAME, this.resolveMaterial.name = "TemporalAntialias_resolve", this.mesh.name = "TemporalAntialias", this.inputNode = e, this.depthNode = t, this.velocityNode = o, !Yo(n))
1040
1362
  throw new Error("The provided camera is not supported.");
1041
- this.camera = r, this.textureNode = ke(this, this.resolveRT.texture), this.updateBeforeType = A.FRAME;
1363
+ this.camera = n, this.textureNode = $e(this, this.resolveRT.texture);
1042
1364
  }
1043
1365
  static get type() {
1044
1366
  return "TemporalAntialiasNode";
1045
1367
  }
1046
1368
  customCacheKey() {
1047
- return Ie(this.camera.id, +this.debugShowRejection);
1369
+ return We(this.camera.id, +this.debugShowRejection);
1048
1370
  }
1049
1371
  createRenderTarget(e) {
1050
- const t = new Se(1, 1, {
1372
+ const t = new Mt(1, 1, {
1051
1373
  depthBuffer: !1,
1052
- type: Re,
1053
- format: Me
1054
- }), s = t.texture;
1055
- s.minFilter = Z, s.magFilter = Z, s.generateMipmaps = !1;
1374
+ type: Ct,
1375
+ format: zt
1376
+ }), o = t.texture;
1377
+ o.minFilter = ue, o.magFilter = ue, o.generateMipmaps = !1;
1056
1378
  const n = this.constructor.type;
1057
- return s.name = e != null ? `${n}.${e}` : n, t;
1379
+ return o.name = e != null ? `${n}_${e}` : n, t;
1058
1380
  }
1059
1381
  getTextureNode() {
1060
1382
  return this.textureNode;
1061
1383
  }
1062
- setProjectionMatrix(e) {
1063
- const { velocityNodeImmutable: t } = this;
1064
- t != null && (t.projectionMatrix = e);
1065
- }
1066
1384
  setSize(e, t) {
1067
- const { resolveRT: s, historyRT: n } = this;
1068
- return (e !== n.width || t !== n.height) && (s.setSize(e, t), n.setSize(e, t), this.needsClearHistory = !0), this;
1385
+ const { resolveRT: o, historyRT: n } = this;
1386
+ return (e !== n.width || t !== n.height) && (o.setSize(e, t), n.setSize(e, t), this.needsClearHistory = !0), this;
1069
1387
  }
1070
1388
  clearHistory(e) {
1071
- e.setRenderTarget(this.resolveRT), e.clear(), e.setRenderTarget(this.historyRT), e.clear(), e.setRenderTarget(this.historyRT), this.mesh.material = this.copyMaterial, this.mesh.render(e), this.needsClearHistory = !1;
1389
+ e.setRenderTarget(this.resolveRT), e.clear(), e.setRenderTarget(this.historyRT), e.clear(), this.needsClearHistory = !1;
1072
1390
  }
1073
1391
  setViewOffset(e, t) {
1074
- const { camera: s } = this;
1075
- s.updateProjectionMatrix(), this.originalProjectionMatrix.copy(s.projectionMatrix), this.setProjectionMatrix(this.originalProjectionMatrix);
1076
- const n = ve[this.jitterIndex], r = n.x - 0.5, i = n.y - 0.5;
1077
- s.setViewOffset(e, t, r, i, e, t);
1392
+ const { camera: o } = this;
1393
+ o.updateProjectionMatrix(), this.originalProjectionMatrix.copy(o.projectionMatrix), tt.setProjectionMatrix(this.originalProjectionMatrix);
1394
+ const n = nt[this.jitterIndex], i = n.x - 0.5, r = n.y - 0.5;
1395
+ o.setViewOffset(e, t, i, r, e, t);
1078
1396
  }
1079
1397
  clearViewOffset() {
1080
- this.camera.clearViewOffset(), this.setProjectionMatrix(null), this.jitterIndex = (this.jitterIndex + 1) % ve.length;
1398
+ this.camera.clearViewOffset(), tt.setProjectionMatrix(null), this.jitterIndex = (this.jitterIndex + 1) % nt.length;
1081
1399
  }
1082
1400
  copyDepthTexture(e) {
1083
- const t = this.depthNode.value, s = this.previousDepthTexture ??= t.clone();
1084
- (s.image.width !== t.width || s.image.height !== t.height) && (s.image.width = t.width, s.image.height = t.height, s.needsUpdate = !0), e.copyTextureToTexture(t, s), this.previousDepthNode.value = s;
1401
+ const t = this.depthNode.value, o = this.previousDepthTexture ??= t.clone();
1402
+ (o.image.width !== t.width || o.image.height !== t.height) && (o.image.width = t.width, o.image.height = t.height, o.needsUpdate = !0), e.copyTextureToTexture(t, o), this.previousDepthNode.value = o;
1085
1403
  }
1086
1404
  swapBuffers() {
1087
1405
  const { resolveRT: e, historyRT: t } = this;
@@ -1090,128 +1408,153 @@ class Ds extends E {
1090
1408
  updateBefore({ renderer: e }) {
1091
1409
  if (e == null)
1092
1410
  return;
1093
- const t = e.getDrawingBufferSize(Ne);
1094
- this.setSize(t.x, t.y), this.rendererState = Rs(e, this.rendererState), this.needsClearHistory && this.clearHistory(e), e.setRenderTarget(this.resolveRT), this.mesh.material = this.resolveMaterial, this.mesh.render(e), bs(e, this.rendererState), He(e) && this.copyDepthTexture(e), this.swapBuffers(), this.needsSyncPostProcessing && this.clearViewOffset();
1411
+ const t = e.getDrawingBufferSize(rt);
1412
+ this.setSize(t.x, t.y), this.rendererState = Go(e, this.rendererState), this.needsClearHistory && this.clearHistory(e), e.setRenderTarget(this.resolveRT), this.mesh.material = this.resolveMaterial, this.mesh.render(e), Ho(e, this.rendererState), Pt(e) && this.copyDepthTexture(e), this.swapBuffers(), this.needsSyncRenderPipeline && this.clearViewOffset();
1095
1413
  }
1096
1414
  setupResolveNode({ renderer: e }) {
1097
- const t = (s) => {
1098
- const { previousDepthNode: n } = this, r = n.load(T(s.mul(Ae(n)).sub(0.5))).toVar();
1099
- return e.logarithmicDepthBuffer ? ye(
1100
- r,
1101
- de(this.camera),
1102
- pe(this.camera)
1103
- ) : r;
1415
+ const t = (o) => {
1416
+ const { previousDepthNode: n } = this, i = n.load(O(o.mul(n.size()).sub(0.5))).toConst();
1417
+ return e.logarithmicDepthBuffer ? Ue(
1418
+ i,
1419
+ fe(this.camera),
1420
+ xe(this.camera)
1421
+ ) : e.reversedDepthBuffer ? i.oneMinus() : i;
1104
1422
  };
1105
- return C(() => {
1106
- const s = T(Be), n = At, r = this.inputNode.load(s), i = As(this.depthNode, s), u = i.get("coord"), a = this.velocityNode.load(u).xyz.mul(y(0.5, -0.5, 0.5)).toVar(), h = a.xy.length().div(this.velocityThreshold).oneMinus().saturate(), c = n.sub(a.xy).toVar(), l = t(c), d = e.logarithmicDepthBuffer ? ye(
1107
- i.get("depth"),
1108
- de(this.camera),
1109
- pe(this.camera)
1110
- ) : i.get("depth"), m = Ft(
1111
- d.add(a.z),
1112
- l.add(this.depthError)
1113
- ), f = h.mul(m), g = Dt(
1114
- c.greaterThanEqual(0).all(),
1115
- c.lessThanEqual(1).all()
1116
- ).toFloat(), R = i.get("depth").notEqual(1).toFloat(), S = w(0).toVar();
1117
- return F(g.mul(R).mul(f).greaterThan(0), () => {
1118
- const B = I(this.historyNode, c), L = Vs(
1423
+ return U(() => {
1424
+ const o = O(ke), n = ws, i = Qo(this.depthNode, o).toConst(), r = i.get("closestCoord"), c = i.get("closestDepth"), a = this.velocityNode.load(r).xyz.mul(M(0.5, -0.5, 0.5)).toConst(), h = a.xy.length().div(this.velocityThreshold).oneMinus().saturate(), l = n.sub(a.xy).toConst(), u = t(l), p = e.logarithmicDepthBuffer ? Ue(
1425
+ c,
1426
+ fe(this.camera),
1427
+ xe(this.camera)
1428
+ ) : c, d = Ts(
1429
+ p.add(a.z),
1430
+ u.add(this.depthError)
1431
+ ), m = h.mul(d), x = wt(
1432
+ l.greaterThanEqual(0).all(),
1433
+ l.lessThanEqual(1).all()
1434
+ ).toFloat(), w = c.notEqual(1).toFloat(), T = this.inputNode.load(o).toVar();
1435
+ return ae(x.mul(w).mul(m).greaterThan(0), () => {
1436
+ const C = oe(this.historyNode, l), j = Zo(
1119
1437
  this.inputNode,
1120
- s,
1121
- r,
1122
- B,
1438
+ o,
1439
+ T,
1440
+ C,
1123
1441
  this.varianceGamma
1124
- ), j = a.xy.abs().mul(jt), U = Ue(j.x, j.y).fract().mul(0.5), M = te(
1442
+ ), R = ne(
1125
1443
  this.temporalAlpha,
1126
- 0.8,
1127
- U
1444
+ 0.4,
1445
+ Jo(a.xy, Ns(this.inputNode))
1128
1446
  ).saturate();
1129
- S.assign(te(L, r, M));
1447
+ T.assign(ne(j, T, R));
1130
1448
  }).Else(() => {
1131
- S.assign(r), this.debugShowRejection && S.assign(y(1, 0, 0));
1132
- }), S;
1449
+ this.debugShowRejection && T.assign(M(1, 0, 0));
1450
+ }), T;
1133
1451
  })();
1134
1452
  }
1135
1453
  setup(e) {
1136
- const { context: t } = e.getContext().postProcessing ?? {};
1137
- if (t != null) {
1138
- const { onBeforePostProcessing: r } = t;
1139
- t.onBeforePostProcessing = () => {
1140
- r?.();
1141
- const i = e.renderer.getDrawingBufferSize(Ne);
1142
- this.setViewOffset(i.width, i.height);
1143
- }, this.needsSyncPostProcessing = !0;
1454
+ const t = () => {
1455
+ const n = e.renderer.getDrawingBufferSize(rt);
1456
+ this.setViewOffset(n.width, n.height);
1457
+ };
1458
+ if (e.context.renderPipeline != null) {
1459
+ const { context: n } = e.context.renderPipeline;
1460
+ n.onBeforeRenderPipeline = t, this.needsSyncRenderPipeline = !0;
1144
1461
  }
1145
- const { resolveMaterial: s, copyMaterial: n } = this;
1146
- return s.fragmentNode = this.setupResolveNode(e), s.needsUpdate = !0, n.fragmentNode = this.inputNode, n.needsUpdate = !0, this.textureNode.uvNode = this.inputNode.uvNode, this.textureNode;
1462
+ if (e.context.postProcessing != null) {
1463
+ const { context: n } = e.context.postProcessing;
1464
+ n.onBeforePostProcessing = t, this.needsSyncRenderPipeline = !0;
1465
+ }
1466
+ const { resolveMaterial: o } = this;
1467
+ return o.fragmentNode = this.setupResolveNode(e), o.needsUpdate = !0, this.textureNode.uvNode = this.inputNode.uvNode, this.textureNode;
1147
1468
  }
1148
1469
  dispose() {
1149
- this.resolveRT.dispose(), this.historyRT.dispose(), this.previousDepthTexture?.dispose(), this.resolveMaterial.dispose(), this.copyMaterial.dispose(), this.mesh.geometry.dispose(), super.dispose();
1470
+ this.resolveRT.dispose(), this.historyRT.dispose(), this.previousDepthTexture?.dispose(), this.resolveMaterial.dispose(), this.mesh.geometry.dispose(), super.dispose();
1150
1471
  }
1151
1472
  }
1152
- const xo = (o) => (e, t, s, n) => new Ds(
1153
- o,
1154
- Le(e, "TemporalAntialiasNode.Input"),
1155
- t,
1156
- s,
1157
- n
1158
- );
1473
+ function Zn(...s) {
1474
+ if (s.length === 1)
1475
+ return (i, r, c, a) => new at(
1476
+ Oe(i),
1477
+ r,
1478
+ c,
1479
+ a
1480
+ );
1481
+ const [e, t, o, n] = s;
1482
+ return new at(
1483
+ Oe(e),
1484
+ t,
1485
+ o,
1486
+ n
1487
+ );
1488
+ }
1159
1489
  export {
1160
- Ee as DownsampleThresholdNode,
1161
- K as FnLayout,
1162
- G as FnVar,
1163
- Oe as GaussianBlurNode,
1164
- rs as HighpVelocityNode,
1165
- is as KawaseBlurNode,
1166
- ys as LensFlareNode,
1167
- Jt as MipmapBlurNode,
1168
- We as MipmapSurfaceBlurNode,
1169
- uo as Node,
1170
- Ns as OutputTexture3DNode,
1171
- qt as OutputTextureNode,
1172
- Ge as RTTextureNode,
1173
- Ds as TemporalAntialiasNode,
1174
- pe as cameraFar,
1175
- de as cameraNear,
1176
- Hs as cameraPositionWorld,
1177
- Le as convertToTexture,
1178
- qs as debugFragmentNode,
1179
- Qs as debugNode,
1180
- Zs as debugVertexNode,
1181
- fo as depthToColor,
1182
- Ss as depthToViewZ,
1183
- Xs as dithering,
1184
- Ys as downsampleThreshold,
1185
- eo as equirectGrid,
1186
- go as equirectToDirectionWorld,
1187
- _s as gaussianBlur,
1188
- to as highpVelocity,
1189
- Ks as hookFunction,
1190
- ns as interleavedGradientNoise,
1191
- Ls as inverseProjectionMatrix,
1192
- Ws as inverseViewMatrix,
1193
- He as isWebGPU,
1194
- so as kawaseBlur,
1195
- no as lensFlare,
1196
- ye as logarithmicToPerspectiveDepth,
1197
- Js as mipmapBlur,
1198
- $e as mipmapBlurDownsample,
1199
- Kt as mipmapBlurUpsample,
1200
- oo as mipmapSurfaceBlur,
1201
- lo as node,
1202
- ke as outputTexture,
1203
- co as outputTexture3D,
1204
- po as perspectiveToLogarithmicDepth,
1205
- Os as projectionMatrix,
1206
- ao as rayEllipsoidIntersection,
1207
- ro as raySphereIntersection,
1208
- io as raySpheresIntersections,
1209
- ws as raySpheresIntersectionsStruct,
1210
- ds as rtTexture,
1211
- mo as screenToPositionView,
1212
- xo as temporalAntialias,
1213
- ho as textureCatmullRom,
1214
- Ms as turbo,
1215
- Gs as viewMatrix
1490
+ yn as CascadedShadowMapsNode,
1491
+ Bt as DownsampleThresholdNode,
1492
+ V as FnLayout,
1493
+ L as FnVar,
1494
+ At as GaussianBlurNode,
1495
+ ho as HighpVelocityNode,
1496
+ po as KawaseBlurNode,
1497
+ To as LensFlareNode,
1498
+ so as MipmapBlurNode,
1499
+ Vt as MipmapSurfaceBlurNode,
1500
+ Ln as Node,
1501
+ Rn as OnBeforeFrameUpdate,
1502
+ Cn as OnFrameUpdate,
1503
+ Po as OutputTexture3DNode,
1504
+ Qs as OutputTextureNode,
1505
+ Wo as STBNTextureNode,
1506
+ Io as ScreenSpaceShadowNode,
1507
+ qo as StorageTexture3DNode,
1508
+ at as TemporalAntialiasNode,
1509
+ Un as bvecAnd,
1510
+ On as bvecNot,
1511
+ jn as bvecOr,
1512
+ xe as cameraFar,
1513
+ fe as cameraNear,
1514
+ gn as cameraPositionWorld,
1515
+ Nn as debugFragmentNode,
1516
+ wn as debugMaterial,
1517
+ Sn as debugNode,
1518
+ Tn as debugVertexNode,
1519
+ hn as depthToColor,
1520
+ Rt as depthToViewZ,
1521
+ Bn as dithering,
1522
+ zn as downsampleThreshold,
1523
+ An as equirectGrid,
1524
+ dn as equirectToDirectionWorld,
1525
+ Dn as gaussianBlur,
1526
+ tt as highpVelocity,
1527
+ bn as hookFunction,
1528
+ lo as interleavedGradientNoise,
1529
+ fn as inverseProjectionMatrix,
1530
+ xn as inverseViewMatrix,
1531
+ Pt as isWebGPU,
1532
+ Vn as kawaseBlur,
1533
+ Fn as lensFlare,
1534
+ Ue as logarithmicToPerspectiveDepth,
1535
+ Mn as mipmapBlur,
1536
+ Dt as mipmapBlurDownsample,
1537
+ to as mipmapBlurUpsample,
1538
+ Pn as mipmapSurfaceBlur,
1539
+ Wn as node,
1540
+ $e as outputTexture,
1541
+ $n as outputTexture3D,
1542
+ un as perspectiveToLogarithmicDepth,
1543
+ pn as projectionMatrix,
1544
+ In as rayEllipsoidIntersection,
1545
+ En as raySphereIntersection,
1546
+ kn as raySpheresIntersections,
1547
+ Ao as raySpheresIntersectionsStruct,
1548
+ Hn as screenSpaceShadow,
1549
+ ln as screenToPositionView,
1550
+ Yn as stbn,
1551
+ $o as stbnTexture,
1552
+ Xn as storageTexture3D,
1553
+ Zn as temporalAntialias,
1554
+ Gn as textureCatmullRom,
1555
+ qn as textureGather,
1556
+ Zs as turbo,
1557
+ mn as viewMatrix,
1558
+ vn as viewZ
1216
1559
  };
1217
1560
  //# sourceMappingURL=webgpu.js.map