@takram/three-geospatial 0.8.0 → 0.9.1

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