@tresjs/post-processing 2.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/pmndrs/ASCIIPmndrs.vue.d.ts +2 -2
- package/dist/tres-post-processing.js +1077 -797
- package/dist/tres-post-processing.umd.cjs +17 -17
- package/package.json +34 -40
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/post-processing
|
|
3
|
-
* version:
|
|
3
|
+
* version: v3.0.0
|
|
4
4
|
* (c) 2025
|
|
5
5
|
* description: Post-processing library for TresJS
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import { defineComponent as
|
|
9
|
-
import { EffectComposer as
|
|
10
|
-
import { useTresContext as
|
|
11
|
-
import { HalfFloatType as
|
|
12
|
-
import { useDevicePixelRatio as
|
|
13
|
-
class
|
|
8
|
+
import { defineComponent as c, shallowRef as W, provide as je, computed as L, watch as m, onUnmounted as N, renderSlot as Ve, inject as K, watchEffect as S, nextTick as fe, toRaw as me } from "vue";
|
|
9
|
+
import { EffectComposer as ve, RenderPass as Ze, NormalPass as $e, DepthDownsamplingPass as et, EffectPass as _e, BloomEffect as ge, DepthOfFieldEffect as xe, GlitchEffect as I, GlitchMode as tt, NoiseEffect as be, OutlineEffect as Se, PixelationEffect as we, VignetteEffect as Ae, Effect as J, BlendFunction as Z, ToneMappingEffect as ye, ChromaticAberrationEffect as te, HueSaturationEffect as Me, ScanlineEffect as oe, ColorAverageEffect as se, LensDistortionEffect as Te, ShockWaveEffect as Ce, TiltShiftEffect as Ee, DotScreenEffect as Pe, SepiaEffect as De, DepthPickingPass as ot, GodRaysEffect as ae, ColorDepthEffect as X, GridEffect as Le, BrightnessContrastEffect as Fe, SMAAEffect as re, TextureEffect as Y, FXAAEffect as ie, ASCIIEffect as ne, ASCIITexture as st } from "postprocessing";
|
|
10
|
+
import { useTresContext as G, useTres as T, useLoop as he, normalizeColor as le } from "@tresjs/core";
|
|
11
|
+
import { HalfFloatType as C, Uniform as M, Vector2 as d, Vector3 as F, Mesh as Ye, SphereGeometry as at, MeshBasicMaterial as ke, OrthographicCamera as rt, BufferGeometry as it, Float32BufferAttribute as Oe, ShaderMaterial as y, UniformsUtils as P, WebGLRenderTarget as D, NoBlending as nt, Clock as lt, Color as Q, MathUtils as A, DataTexture as ct, RedFormat as ut, FloatType as dt, MeshNormalMaterial as ft, NearestFilter as B, DepthTexture as ht, Vector4 as pt, RawShaderMaterial as mt, ColorManagement as vt, SRGBTransfer as gt, LinearToneMapping as xt, ReinhardToneMapping as bt, CineonToneMapping as St, ACESFilmicToneMapping as wt, AgXToneMapping as At, NeutralToneMapping as yt, CustomToneMapping as Mt, Texture as Be, LinearFilter as Tt, AdditiveBlending as Ct } from "three";
|
|
12
|
+
import { useDevicePixelRatio as qe } from "@vueuse/core";
|
|
13
|
+
class Re {
|
|
14
|
+
/**
|
|
15
|
+
* Returns `true` if WebGL 2 is available.
|
|
16
|
+
*
|
|
17
|
+
* @return {boolean} Whether WebGL 2 is available or not.
|
|
18
|
+
*/
|
|
14
19
|
static isWebGL2Available() {
|
|
15
20
|
try {
|
|
16
21
|
const t = document.createElement("canvas");
|
|
@@ -19,44 +24,45 @@ class Fe {
|
|
|
19
24
|
return !1;
|
|
20
25
|
}
|
|
21
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns `true` if the given color space is available. This method can only be used
|
|
29
|
+
* if WebGL 2 is supported.
|
|
30
|
+
*
|
|
31
|
+
* @param {string} colorSpace - The color space to test.
|
|
32
|
+
* @return {boolean} Whether the given color space is available or not.
|
|
33
|
+
*/
|
|
22
34
|
static isColorSpaceAvailable(t) {
|
|
23
35
|
try {
|
|
24
|
-
const e = document.createElement("canvas"),
|
|
25
|
-
return
|
|
36
|
+
const e = document.createElement("canvas"), s = window.WebGL2RenderingContext && e.getContext("webgl2");
|
|
37
|
+
return s.drawingBufferColorSpace = t, s.drawingBufferColorSpace === t;
|
|
26
38
|
} catch {
|
|
27
39
|
return !1;
|
|
28
40
|
}
|
|
29
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns a `div` element representing a formatted error message that can be appended in
|
|
44
|
+
* web sites if WebGL 2 isn't supported.
|
|
45
|
+
*
|
|
46
|
+
* @return {HTMLDivElement} A `div` element representing a formatted error message that WebGL 2 isn't supported.
|
|
47
|
+
*/
|
|
30
48
|
static getWebGL2ErrorMessage() {
|
|
31
|
-
return this.
|
|
49
|
+
return this._getErrorMessage(2);
|
|
32
50
|
}
|
|
33
|
-
|
|
51
|
+
// private
|
|
52
|
+
static _getErrorMessage(t) {
|
|
34
53
|
const e = {
|
|
35
54
|
1: "WebGL",
|
|
36
55
|
2: "WebGL 2"
|
|
37
|
-
},
|
|
56
|
+
}, s = {
|
|
38
57
|
1: window.WebGLRenderingContext,
|
|
39
58
|
2: window.WebGL2RenderingContext
|
|
40
59
|
};
|
|
41
|
-
let
|
|
60
|
+
let o = 'Your $0 does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">$1</a>';
|
|
42
61
|
const a = document.createElement("div");
|
|
43
|
-
return a.id = "webglmessage", a.style.fontFamily = "monospace", a.style.fontSize = "13px", a.style.fontWeight = "normal", a.style.textAlign = "center", a.style.background = "#fff", a.style.color = "#000", a.style.padding = "1.5em", a.style.width = "400px", a.style.margin = "5em auto 0",
|
|
44
|
-
}
|
|
45
|
-
// @deprecated, r168
|
|
46
|
-
static isWebGLAvailable() {
|
|
47
|
-
console.warn("isWebGLAvailable() has been deprecated and will be removed in r178. Use isWebGL2Available() instead.");
|
|
48
|
-
try {
|
|
49
|
-
const t = document.createElement("canvas");
|
|
50
|
-
return !!(window.WebGLRenderingContext && (t.getContext("webgl") || t.getContext("experimental-webgl")));
|
|
51
|
-
} catch {
|
|
52
|
-
return !1;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
static getWebGLErrorMessage() {
|
|
56
|
-
return console.warn("getWebGLErrorMessage() has been deprecated and will be removed in r178. Use getWebGL2ErrorMessage() instead."), this.getErrorMessage(1);
|
|
62
|
+
return a.id = "webglmessage", a.style.fontFamily = "monospace", a.style.fontSize = "13px", a.style.fontWeight = "normal", a.style.textAlign = "center", a.style.background = "#fff", a.style.color = "#000", a.style.padding = "1.5em", a.style.width = "400px", a.style.margin = "5em auto 0", s[t] ? o = o.replace("$0", "graphics card") : o = o.replace("$0", "browser"), o = o.replace("$1", e[t]), a.innerHTML = o, a;
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
|
-
const $ = Symbol("effectComposerPmndrs"),
|
|
65
|
+
const $ = Symbol("effectComposerPmndrs"), _t = /* @__PURE__ */ c({
|
|
60
66
|
__name: "EffectComposerPmndrs",
|
|
61
67
|
props: {
|
|
62
68
|
enabled: { type: Boolean, default: !0 },
|
|
@@ -66,109 +72,96 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
66
72
|
resolutionScale: {},
|
|
67
73
|
autoClear: { type: Boolean, default: !0 },
|
|
68
74
|
multisampling: { default: 0 },
|
|
69
|
-
frameBufferType: { default:
|
|
75
|
+
frameBufferType: { default: C }
|
|
70
76
|
},
|
|
71
77
|
emits: ["render"],
|
|
72
|
-
setup(
|
|
73
|
-
const
|
|
74
|
-
let
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
normalBuffer:
|
|
79
|
-
resolutionScale:
|
|
80
|
-
}),
|
|
81
|
-
},
|
|
82
|
-
const
|
|
83
|
-
depthBuffer:
|
|
84
|
-
stencilBuffer:
|
|
85
|
-
multisampling:
|
|
86
|
-
frameBufferType:
|
|
78
|
+
setup(r, { expose: t, emit: e }) {
|
|
79
|
+
const s = r, o = e, { scene: a, camera: i, renderer: n, sizes: l } = G(), u = W(null);
|
|
80
|
+
let h = null, x = null;
|
|
81
|
+
je($, u), t({ composer: u });
|
|
82
|
+
const w = () => {
|
|
83
|
+
u.value && (x = new $e(a.value, i.activeCamera.value), x.enabled = !1, u.value.addPass(x), s.resolutionScale !== void 0 && Re.isWebGL2Available() && (h = new et({
|
|
84
|
+
normalBuffer: x.texture,
|
|
85
|
+
resolutionScale: s.resolutionScale
|
|
86
|
+
}), h.enabled = !1, u.value.addPass(h)));
|
|
87
|
+
}, U = L(() => {
|
|
88
|
+
const v = new ve(), b = {
|
|
89
|
+
depthBuffer: s.depthBuffer !== void 0 ? s.depthBuffer : v.inputBuffer.depthBuffer,
|
|
90
|
+
stencilBuffer: s.stencilBuffer !== void 0 ? s.stencilBuffer : v.inputBuffer.stencilBuffer,
|
|
91
|
+
multisampling: Re.isWebGL2Available() ? s.multisampling !== void 0 ? s.multisampling : v.multisampling : 0,
|
|
92
|
+
frameBufferType: s.frameBufferType !== void 0 ? s.frameBufferType : C
|
|
87
93
|
};
|
|
88
|
-
return
|
|
89
|
-
}),
|
|
90
|
-
|
|
91
|
-
!i.value && !a.value && !r.value || ((x = p.value) == null || x.dispose(), p.value = new he(i.value, m.value), p.value.addPass(new Je(a.value, r.value)), o.disableNormalPass || S());
|
|
94
|
+
return v.dispose(), b;
|
|
95
|
+
}), g = () => {
|
|
96
|
+
!n.instance && !a.value && !i.activeCamera.value || (u.value?.dispose(), u.value = new ve(n.instance, U.value), u.value.addPass(new Ze(a.value, i.activeCamera.value)), s.disableNormalPass || w());
|
|
92
97
|
};
|
|
93
|
-
|
|
94
|
-
!l.width.value || !l.height.value ||
|
|
95
|
-
}),
|
|
96
|
-
!
|
|
98
|
+
return m([a, i.activeCamera, () => s.disableNormalPass], () => {
|
|
99
|
+
!l.width.value || !l.height.value || g();
|
|
100
|
+
}), m(() => [l.width.value, l.height.value], ([v, b]) => {
|
|
101
|
+
!v && !b || (u.value ? u.value.setSize(v, b) : g());
|
|
97
102
|
}, {
|
|
98
103
|
immediate: !0
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const x = i.value.autoClear;
|
|
104
|
-
i.value.autoClear = o.autoClear, o.stencilBuffer && !o.autoClear && i.value.clearStencil(), p.value.render(), s("render", p.value), i.value.autoClear = x;
|
|
104
|
+
}), n.replaceRenderFunction((v) => {
|
|
105
|
+
if (s.enabled && n.instance && u.value && l.width.value && l.height.value) {
|
|
106
|
+
const b = n.instance.autoClear;
|
|
107
|
+
n.instance.autoClear = s.autoClear, s.stencilBuffer && !s.autoClear && n.instance.clearStencil(), u.value.render(), o("render", u.value), n.instance.autoClear = b, v();
|
|
105
108
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
s.value && ((c = o == null ? void 0 : o.value) == null || c.removePass(s.value)), (S = a.value) == null || S.dispose(), (m = s.value) == null || m.dispose();
|
|
118
|
-
}, p = (c) => {
|
|
119
|
-
!i.value || !(o != null && o.value) || !r.value || (a.value = n(), s.value = new Xe(i.value, a.value), o.value.addPass(s.value, c));
|
|
109
|
+
}), N(() => {
|
|
110
|
+
u.value?.dispose();
|
|
111
|
+
}), (v, b) => Ve(v.$slots, "default");
|
|
112
|
+
}
|
|
113
|
+
}), f = (r, t, e) => {
|
|
114
|
+
const s = K($), o = W(null), a = W(null), { scene: i, camera: n, invalidate: l } = T();
|
|
115
|
+
m(t, () => l());
|
|
116
|
+
const u = () => {
|
|
117
|
+
o.value && s?.value?.removePass(o.value), a.value?.dispose(), o.value?.dispose();
|
|
118
|
+
}, h = (w) => {
|
|
119
|
+
!n.value || !s?.value || !i.value || (a.value = r(), o.value = new _e(n.value, a.value), s.value.addPass(o.value, w));
|
|
120
120
|
};
|
|
121
|
-
e &&
|
|
122
|
-
() => e.map((
|
|
121
|
+
e && m(
|
|
122
|
+
() => e.map((w) => t[w]),
|
|
123
123
|
() => {
|
|
124
|
-
|
|
125
|
-
if (!(o != null && o.value))
|
|
124
|
+
if (!s?.value)
|
|
126
125
|
return;
|
|
127
|
-
const
|
|
128
|
-
~
|
|
126
|
+
const w = s.value?.passes.findIndex((U) => U === o.value);
|
|
127
|
+
~w && (u(), h(w));
|
|
129
128
|
}
|
|
130
|
-
),
|
|
131
|
-
!
|
|
129
|
+
), S(() => {
|
|
130
|
+
!n.value || !a?.value || (a.value.mainCamera = n.value);
|
|
132
131
|
});
|
|
133
|
-
const
|
|
134
|
-
!
|
|
132
|
+
const x = S(() => {
|
|
133
|
+
!n.value || !s?.value || !i.value || (fe(() => x()), !a.value && h());
|
|
135
134
|
});
|
|
136
|
-
return
|
|
137
|
-
|
|
135
|
+
return N(() => {
|
|
136
|
+
u();
|
|
138
137
|
}), {
|
|
139
|
-
pass:
|
|
138
|
+
pass: o,
|
|
140
139
|
effect: a
|
|
141
140
|
};
|
|
142
|
-
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
o && o.reduce((s, a, r) => (s[a] === void 0 && (s[a] = {}), r === o.length - 1 && (s[a] = e), s[a]), n);
|
|
150
|
-
}, Ct = (n, t) => {
|
|
151
|
-
const e = { ...n };
|
|
152
|
-
return t.forEach((o) => delete e[o]), e;
|
|
153
|
-
}, X = (n, t, e, o, s = {}) => g(n, (a) => {
|
|
154
|
-
var r;
|
|
141
|
+
}, Qe = /([^[.\]])+/g, Et = (r, t) => t ? (Array.isArray(t) ? t : t.match(Qe))?.reduce((s, o) => s && s[o], r) : void 0, Ne = (r, t, e) => {
|
|
142
|
+
const s = Array.isArray(t) ? t : t.match(Qe);
|
|
143
|
+
s && s.reduce((o, a, i) => (o[a] === void 0 && (o[a] = {}), i === s.length - 1 && (o[a] = e), o[a]), r);
|
|
144
|
+
}, Pt = (r, t) => {
|
|
145
|
+
const e = { ...r };
|
|
146
|
+
return t.forEach((s) => delete e[s]), e;
|
|
147
|
+
}, H = (r, t, e, s, o = {}) => m(r, (a) => {
|
|
155
148
|
if (t.value)
|
|
156
149
|
if (a === void 0) {
|
|
157
|
-
const i =
|
|
158
|
-
|
|
150
|
+
const i = s();
|
|
151
|
+
Ne(t.value, e, Et(i, e)), i.dispose?.();
|
|
159
152
|
} else
|
|
160
|
-
|
|
161
|
-
},
|
|
162
|
-
o,
|
|
163
|
-
t,
|
|
153
|
+
Ne(t.value, e, r());
|
|
154
|
+
}, o), p = (r, t, e) => r.map(([s, o]) => H(
|
|
164
155
|
s,
|
|
165
|
-
e
|
|
166
|
-
)), de = (n, t, e) => Object.keys(n).map((o) => X(
|
|
167
|
-
() => n[o],
|
|
168
156
|
t,
|
|
169
157
|
o,
|
|
170
158
|
e
|
|
171
|
-
)),
|
|
159
|
+
)), pe = (r, t, e) => Object.keys(r).map((s) => H(
|
|
160
|
+
() => r[s],
|
|
161
|
+
t,
|
|
162
|
+
s,
|
|
163
|
+
e
|
|
164
|
+
)), Yt = /* @__PURE__ */ c({
|
|
172
165
|
__name: "BloomPmndrs",
|
|
173
166
|
props: {
|
|
174
167
|
blendFunction: {},
|
|
@@ -178,9 +171,9 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
178
171
|
luminanceSmoothing: {},
|
|
179
172
|
mipmapBlur: { type: Boolean, default: void 0 }
|
|
180
173
|
},
|
|
181
|
-
setup(
|
|
182
|
-
const e =
|
|
183
|
-
return t({ pass:
|
|
174
|
+
setup(r, { expose: t }) {
|
|
175
|
+
const e = r, { pass: s, effect: o } = f(() => new ge(e), e, ["mipmapBlur"]);
|
|
176
|
+
return t({ pass: s, effect: o }), p(
|
|
184
177
|
[
|
|
185
178
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
186
179
|
[() => e.intensity, "intensity"],
|
|
@@ -188,12 +181,12 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
188
181
|
[() => e.luminanceSmoothing, "luminanceMaterial.smoothing"],
|
|
189
182
|
[() => e.luminanceThreshold, "luminanceMaterial.threshold"]
|
|
190
183
|
],
|
|
191
|
-
|
|
192
|
-
() => new
|
|
184
|
+
o,
|
|
185
|
+
() => new ge()
|
|
193
186
|
), () => {
|
|
194
187
|
};
|
|
195
188
|
}
|
|
196
|
-
}),
|
|
189
|
+
}), kt = /* @__PURE__ */ c({
|
|
197
190
|
__name: "DepthOfFieldPmndrs",
|
|
198
191
|
props: {
|
|
199
192
|
blendFunction: {},
|
|
@@ -206,9 +199,9 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
206
199
|
resolutionX: {},
|
|
207
200
|
resolutionY: {}
|
|
208
201
|
},
|
|
209
|
-
setup(
|
|
210
|
-
const e =
|
|
211
|
-
return t({ pass:
|
|
202
|
+
setup(r, { expose: t }) {
|
|
203
|
+
const e = r, { camera: s } = T(), { pass: o, effect: a } = f(() => new xe(s.value, e), e);
|
|
204
|
+
return t({ pass: o, effect: a }), p(
|
|
212
205
|
[
|
|
213
206
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
214
207
|
[() => e.worldFocusDistance, "circleOfConfusionMaterial.worldFocusDistance"],
|
|
@@ -221,11 +214,11 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
221
214
|
[() => e.resolutionY, "resolution.height"]
|
|
222
215
|
],
|
|
223
216
|
a,
|
|
224
|
-
() => new
|
|
217
|
+
() => new xe()
|
|
225
218
|
), () => {
|
|
226
219
|
};
|
|
227
220
|
}
|
|
228
|
-
}),
|
|
221
|
+
}), qt = /* @__PURE__ */ c({
|
|
229
222
|
__name: "GlitchPmndrs",
|
|
230
223
|
props: {
|
|
231
224
|
blendFunction: {},
|
|
@@ -240,51 +233,51 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
240
233
|
perturbationMap: {},
|
|
241
234
|
dtSize: {}
|
|
242
235
|
},
|
|
243
|
-
setup(
|
|
244
|
-
const e =
|
|
245
|
-
t({ pass:
|
|
246
|
-
const {
|
|
247
|
-
return
|
|
248
|
-
const
|
|
236
|
+
setup(r, { expose: t }) {
|
|
237
|
+
const e = r, { pass: s, effect: o } = f(() => new I(e), e, ["dtSize"]);
|
|
238
|
+
t({ pass: s, effect: o });
|
|
239
|
+
const { invalidate: a } = T(), { onBeforeRender: i } = he();
|
|
240
|
+
return i(() => a()), S(() => {
|
|
241
|
+
const n = () => {
|
|
249
242
|
if (e.mode !== void 0)
|
|
250
|
-
return e.active === !1 ?
|
|
251
|
-
const
|
|
252
|
-
return
|
|
243
|
+
return e.active === !1 ? tt.DISABLED : e.mode;
|
|
244
|
+
const l = new I(), u = l.mode;
|
|
245
|
+
return l.dispose(), u;
|
|
253
246
|
};
|
|
254
|
-
|
|
255
|
-
}),
|
|
247
|
+
o.value && (o.value.mode = n());
|
|
248
|
+
}), H(
|
|
256
249
|
() => e.blendFunction,
|
|
257
|
-
|
|
250
|
+
o,
|
|
258
251
|
"blendMode.blendFunction",
|
|
259
|
-
() => new
|
|
260
|
-
),
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
() => new
|
|
252
|
+
() => new I()
|
|
253
|
+
), pe(
|
|
254
|
+
Pt(e, ["active", "blendFunction"]),
|
|
255
|
+
o,
|
|
256
|
+
() => new I()
|
|
264
257
|
), () => {
|
|
265
258
|
};
|
|
266
259
|
}
|
|
267
|
-
}),
|
|
260
|
+
}), Qt = /* @__PURE__ */ c({
|
|
268
261
|
__name: "NoisePmndrs",
|
|
269
262
|
props: {
|
|
270
263
|
premultiply: { type: Boolean, default: void 0 },
|
|
271
264
|
blendFunction: {}
|
|
272
265
|
},
|
|
273
|
-
setup(
|
|
274
|
-
const e =
|
|
275
|
-
t({ pass:
|
|
276
|
-
const {
|
|
277
|
-
return
|
|
266
|
+
setup(r, { expose: t }) {
|
|
267
|
+
const e = r, { pass: s, effect: o } = f(() => new be(e), e);
|
|
268
|
+
t({ pass: s, effect: o });
|
|
269
|
+
const { invalidate: a } = T(), { onBeforeRender: i } = he();
|
|
270
|
+
return i(() => a()), p(
|
|
278
271
|
[
|
|
279
272
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
280
273
|
[() => e.premultiply, "premultiply"]
|
|
281
274
|
],
|
|
282
|
-
|
|
283
|
-
() => new
|
|
275
|
+
o,
|
|
276
|
+
() => new be()
|
|
284
277
|
), () => {
|
|
285
278
|
};
|
|
286
279
|
}
|
|
287
|
-
}),
|
|
280
|
+
}), Kt = /* @__PURE__ */ c({
|
|
288
281
|
__name: "OutlinePmndrs",
|
|
289
282
|
props: {
|
|
290
283
|
outlinedObjects: {},
|
|
@@ -303,11 +296,11 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
303
296
|
hiddenEdgeColor: {},
|
|
304
297
|
visibleEdgeColor: {}
|
|
305
298
|
},
|
|
306
|
-
setup(
|
|
307
|
-
const e =
|
|
308
|
-
() => new
|
|
299
|
+
setup(r, { expose: t }) {
|
|
300
|
+
const e = r, s = (u) => u !== void 0 ? le(u).getHex() : void 0, { camera: o, scene: a } = T(), { pass: i, effect: n } = f(
|
|
301
|
+
() => new Se(
|
|
309
302
|
a.value,
|
|
310
|
-
|
|
303
|
+
o.value,
|
|
311
304
|
{
|
|
312
305
|
blur: e.blur,
|
|
313
306
|
xRay: e.xRay,
|
|
@@ -321,29 +314,28 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
321
314
|
multisampling: e.multisampling,
|
|
322
315
|
patternTexture: e.patternTexture,
|
|
323
316
|
resolutionScale: e.resolutionScale,
|
|
324
|
-
hiddenEdgeColor:
|
|
325
|
-
visibleEdgeColor:
|
|
317
|
+
hiddenEdgeColor: s(e.hiddenEdgeColor),
|
|
318
|
+
visibleEdgeColor: s(e.visibleEdgeColor)
|
|
326
319
|
// width and height are explicitly omitted, because they are deprecated in postprocessing's OutlineEffect
|
|
327
320
|
}
|
|
328
321
|
),
|
|
329
322
|
e
|
|
330
323
|
);
|
|
331
|
-
t({ pass:
|
|
332
|
-
[() => e.outlinedObjects,
|
|
324
|
+
t({ pass: i, effect: n }), m(
|
|
325
|
+
[() => e.outlinedObjects, n],
|
|
333
326
|
// watchEffect is intentionally not used here as it would result in an endless loop
|
|
334
327
|
() => {
|
|
335
|
-
|
|
336
|
-
(d = i.value) == null || d.selection.set(e.outlinedObjects || []);
|
|
328
|
+
n.value?.selection.set(e.outlinedObjects || []);
|
|
337
329
|
},
|
|
338
330
|
{
|
|
339
331
|
immediate: !0
|
|
340
332
|
}
|
|
341
333
|
);
|
|
342
|
-
const l =
|
|
343
|
-
hiddenEdgeColor: e.hiddenEdgeColor ?
|
|
344
|
-
visibleEdgeColor: e.visibleEdgeColor ?
|
|
334
|
+
const l = L(() => ({
|
|
335
|
+
hiddenEdgeColor: e.hiddenEdgeColor ? le(e.hiddenEdgeColor) : void 0,
|
|
336
|
+
visibleEdgeColor: e.visibleEdgeColor ? le(e.visibleEdgeColor) : void 0
|
|
345
337
|
}));
|
|
346
|
-
return
|
|
338
|
+
return p(
|
|
347
339
|
[
|
|
348
340
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
349
341
|
[() => e.blur, "blur"],
|
|
@@ -360,26 +352,26 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
360
352
|
[() => l.value.hiddenEdgeColor, "hiddenEdgeColor"],
|
|
361
353
|
[() => l.value.visibleEdgeColor, "visibleEdgeColor"]
|
|
362
354
|
],
|
|
363
|
-
|
|
364
|
-
() => new
|
|
355
|
+
n,
|
|
356
|
+
() => new Se()
|
|
365
357
|
), () => {
|
|
366
358
|
};
|
|
367
359
|
}
|
|
368
|
-
}),
|
|
360
|
+
}), Jt = /* @__PURE__ */ c({
|
|
369
361
|
__name: "PixelationPmndrs",
|
|
370
362
|
props: {
|
|
371
363
|
granularity: {}
|
|
372
364
|
},
|
|
373
|
-
setup(
|
|
374
|
-
const e =
|
|
375
|
-
return t({ pass:
|
|
365
|
+
setup(r, { expose: t }) {
|
|
366
|
+
const e = r, { pass: s, effect: o } = f(() => new we(e.granularity), e);
|
|
367
|
+
return t({ pass: s, effect: o }), pe(
|
|
376
368
|
e,
|
|
377
|
-
|
|
378
|
-
() => new
|
|
369
|
+
o,
|
|
370
|
+
() => new we()
|
|
379
371
|
), () => {
|
|
380
372
|
};
|
|
381
373
|
}
|
|
382
|
-
}),
|
|
374
|
+
}), Zt = /* @__PURE__ */ c({
|
|
383
375
|
__name: "VignettePmndrs",
|
|
384
376
|
props: {
|
|
385
377
|
technique: {},
|
|
@@ -387,22 +379,22 @@ const $ = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ u({
|
|
|
387
379
|
offset: {},
|
|
388
380
|
darkness: {}
|
|
389
381
|
},
|
|
390
|
-
setup(
|
|
391
|
-
const e =
|
|
392
|
-
return t({ pass:
|
|
382
|
+
setup(r, { expose: t }) {
|
|
383
|
+
const e = r, { pass: s, effect: o } = f(() => new Ae(e), e);
|
|
384
|
+
return t({ pass: s, effect: o }), p(
|
|
393
385
|
[
|
|
394
386
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
395
387
|
[() => e.offset, "offset"],
|
|
396
388
|
[() => e.darkness, "darkness"],
|
|
397
389
|
[() => e.technique, "technique"]
|
|
398
390
|
],
|
|
399
|
-
|
|
400
|
-
() => new
|
|
391
|
+
o,
|
|
392
|
+
() => new Ae()
|
|
401
393
|
), () => {
|
|
402
394
|
};
|
|
403
395
|
}
|
|
404
396
|
});
|
|
405
|
-
class
|
|
397
|
+
class ze extends J {
|
|
406
398
|
/**
|
|
407
399
|
* Creates a new BarrelBlurEffect instance.
|
|
408
400
|
*
|
|
@@ -412,7 +404,7 @@ class Be extends Z {
|
|
|
412
404
|
* @param {Vector2} [options.offset] - Offset of the barrel distortion center (0 to 1 for both x and y). This allows you to change the position of the distortion effect.
|
|
413
405
|
*
|
|
414
406
|
*/
|
|
415
|
-
constructor({ blendFunction: t =
|
|
407
|
+
constructor({ blendFunction: t = Z.NORMAL, amount: e = 0.15, offset: s = new d(0.5, 0.5) } = {}) {
|
|
416
408
|
super("BarrelBlurEffect", `
|
|
417
409
|
uniform float amount;
|
|
418
410
|
uniform vec2 offset;
|
|
@@ -460,9 +452,9 @@ class Be extends Z {
|
|
|
460
452
|
`, {
|
|
461
453
|
blendFunction: t,
|
|
462
454
|
uniforms: /* @__PURE__ */ new Map([
|
|
463
|
-
["amount", new
|
|
455
|
+
["amount", new M(e)],
|
|
464
456
|
// Uniform controlling the intensity of distortion
|
|
465
|
-
["offset", new
|
|
457
|
+
["offset", new M(s)]
|
|
466
458
|
// Uniform controlling the offset of distortion
|
|
467
459
|
])
|
|
468
460
|
});
|
|
@@ -473,8 +465,7 @@ class Be extends Z {
|
|
|
473
465
|
* @type {number}
|
|
474
466
|
*/
|
|
475
467
|
get amount() {
|
|
476
|
-
|
|
477
|
-
return (t = this.uniforms.get("amount")) == null ? void 0 : t.value;
|
|
468
|
+
return this.uniforms.get("amount")?.value;
|
|
478
469
|
}
|
|
479
470
|
set amount(t) {
|
|
480
471
|
this.uniforms.get("amount").value = t;
|
|
@@ -485,40 +476,39 @@ class Be extends Z {
|
|
|
485
476
|
* @type {Vector2}
|
|
486
477
|
*/
|
|
487
478
|
get offset() {
|
|
488
|
-
|
|
489
|
-
return (t = this.uniforms.get("offset")) == null ? void 0 : t.value;
|
|
479
|
+
return this.uniforms.get("offset")?.value;
|
|
490
480
|
}
|
|
491
481
|
set offset(t) {
|
|
492
482
|
this.uniforms.get("offset").value = t;
|
|
493
483
|
}
|
|
494
484
|
}
|
|
495
|
-
const $t = /* @__PURE__ */
|
|
485
|
+
const $t = /* @__PURE__ */ c({
|
|
496
486
|
__name: "BarrelBlurPmndrs",
|
|
497
487
|
props: {
|
|
498
488
|
blendFunction: {},
|
|
499
489
|
amount: {},
|
|
500
490
|
offset: {}
|
|
501
491
|
},
|
|
502
|
-
setup(
|
|
503
|
-
const e =
|
|
504
|
-
() => new
|
|
492
|
+
setup(r, { expose: t }) {
|
|
493
|
+
const e = r, { pass: s, effect: o } = f(
|
|
494
|
+
() => new ze({
|
|
505
495
|
...e,
|
|
506
|
-
offset: Array.isArray(e.offset) ? new
|
|
496
|
+
offset: Array.isArray(e.offset) ? new d(...e.offset) : e.offset
|
|
507
497
|
}),
|
|
508
498
|
e
|
|
509
499
|
);
|
|
510
|
-
return t({ pass:
|
|
500
|
+
return t({ pass: s, effect: o }), p(
|
|
511
501
|
[
|
|
512
502
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
513
503
|
[() => e.amount, "amount"],
|
|
514
504
|
[() => e.offset, "offset"]
|
|
515
505
|
],
|
|
516
|
-
|
|
517
|
-
() => new
|
|
506
|
+
o,
|
|
507
|
+
() => new ze()
|
|
518
508
|
), () => {
|
|
519
509
|
};
|
|
520
510
|
}
|
|
521
|
-
}), eo = /* @__PURE__ */
|
|
511
|
+
}), eo = /* @__PURE__ */ c({
|
|
522
512
|
__name: "ToneMappingPmndrs",
|
|
523
513
|
props: {
|
|
524
514
|
mode: {},
|
|
@@ -529,9 +519,9 @@ const $t = /* @__PURE__ */ u({
|
|
|
529
519
|
minLuminance: {},
|
|
530
520
|
whitePoint: {}
|
|
531
521
|
},
|
|
532
|
-
setup(
|
|
533
|
-
const e =
|
|
534
|
-
return t({ pass:
|
|
522
|
+
setup(r, { expose: t }) {
|
|
523
|
+
const e = r, { pass: s, effect: o } = f(() => new ye(e), e);
|
|
524
|
+
return t({ pass: s, effect: o }), p(
|
|
535
525
|
[
|
|
536
526
|
[() => e.mode, "mode"],
|
|
537
527
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
@@ -541,12 +531,12 @@ const $t = /* @__PURE__ */ u({
|
|
|
541
531
|
[() => e.minLuminance, "adaptiveLuminanceMaterial.minLuminance"],
|
|
542
532
|
[() => e.whitePoint, "whitePoint"]
|
|
543
533
|
],
|
|
544
|
-
|
|
545
|
-
() => new
|
|
534
|
+
o,
|
|
535
|
+
() => new ye()
|
|
546
536
|
), () => {
|
|
547
537
|
};
|
|
548
538
|
}
|
|
549
|
-
}), to = /* @__PURE__ */
|
|
539
|
+
}), to = /* @__PURE__ */ c({
|
|
550
540
|
__name: "ChromaticAberrationPmndrs",
|
|
551
541
|
props: {
|
|
552
542
|
blendFunction: {},
|
|
@@ -554,15 +544,15 @@ const $t = /* @__PURE__ */ u({
|
|
|
554
544
|
radialModulation: { type: Boolean, default: void 0 },
|
|
555
545
|
modulationOffset: {}
|
|
556
546
|
},
|
|
557
|
-
setup(
|
|
558
|
-
const e =
|
|
547
|
+
setup(r, { expose: t }) {
|
|
548
|
+
const e = r, s = new te(), { pass: o, effect: a } = f(() => new te({
|
|
559
549
|
...e,
|
|
560
550
|
// Unfortunately, these defaults must be set this way as the type in postprocessing is not correct.
|
|
561
551
|
// The arguments are optional in the actual constructor, but not in the type.
|
|
562
|
-
radialModulation: e.radialModulation ??
|
|
563
|
-
modulationOffset: e.modulationOffset ??
|
|
552
|
+
radialModulation: e.radialModulation ?? s.radialModulation,
|
|
553
|
+
modulationOffset: e.modulationOffset ?? s.modulationOffset
|
|
564
554
|
}), e);
|
|
565
|
-
return
|
|
555
|
+
return s.dispose(), t({ pass: o, effect: a }), p(
|
|
566
556
|
[
|
|
567
557
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
568
558
|
[() => e.offset, "offset"],
|
|
@@ -570,31 +560,31 @@ const $t = /* @__PURE__ */ u({
|
|
|
570
560
|
[() => e.modulationOffset, "modulationOffset"]
|
|
571
561
|
],
|
|
572
562
|
a,
|
|
573
|
-
() => new
|
|
563
|
+
() => new te()
|
|
574
564
|
), () => {
|
|
575
565
|
};
|
|
576
566
|
}
|
|
577
|
-
}), oo = /* @__PURE__ */
|
|
567
|
+
}), oo = /* @__PURE__ */ c({
|
|
578
568
|
__name: "HueSaturationPmndrs",
|
|
579
569
|
props: {
|
|
580
570
|
saturation: {},
|
|
581
571
|
hue: {},
|
|
582
572
|
blendFunction: {}
|
|
583
573
|
},
|
|
584
|
-
setup(
|
|
585
|
-
const e =
|
|
586
|
-
return t({ pass:
|
|
574
|
+
setup(r, { expose: t }) {
|
|
575
|
+
const e = r, { pass: s, effect: o } = f(() => new Me(e), e);
|
|
576
|
+
return t({ pass: s, effect: o }), p(
|
|
587
577
|
[
|
|
588
578
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
589
579
|
[() => e.hue, "hue"],
|
|
590
580
|
[() => e.saturation, "saturation"]
|
|
591
581
|
],
|
|
592
|
-
|
|
593
|
-
() => new
|
|
582
|
+
o,
|
|
583
|
+
() => new Me()
|
|
594
584
|
), () => {
|
|
595
585
|
};
|
|
596
586
|
}
|
|
597
|
-
}), so = /* @__PURE__ */
|
|
587
|
+
}), so = /* @__PURE__ */ c({
|
|
598
588
|
__name: "ScanlinePmndrs",
|
|
599
589
|
props: {
|
|
600
590
|
blendFunction: {},
|
|
@@ -602,25 +592,24 @@ const $t = /* @__PURE__ */ u({
|
|
|
602
592
|
scrollSpeed: {},
|
|
603
593
|
opacity: {}
|
|
604
594
|
},
|
|
605
|
-
setup(
|
|
606
|
-
const e =
|
|
607
|
-
return t({ pass:
|
|
595
|
+
setup(r, { expose: t }) {
|
|
596
|
+
const e = r, { pass: s, effect: o } = f(() => new oe(e), e);
|
|
597
|
+
return t({ pass: s, effect: o }), p(
|
|
608
598
|
[
|
|
609
599
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
610
600
|
[() => e.density, "density"],
|
|
611
601
|
[() => e.scrollSpeed, "scrollSpeed"]
|
|
612
602
|
],
|
|
613
|
-
|
|
614
|
-
() => new
|
|
615
|
-
),
|
|
603
|
+
o,
|
|
604
|
+
() => new oe()
|
|
605
|
+
), m(
|
|
616
606
|
[() => e.opacity],
|
|
617
607
|
() => {
|
|
618
|
-
var a, r;
|
|
619
608
|
if (e.opacity !== void 0)
|
|
620
|
-
|
|
609
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
621
610
|
else {
|
|
622
|
-
const
|
|
623
|
-
|
|
611
|
+
const a = new oe();
|
|
612
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
624
613
|
}
|
|
625
614
|
},
|
|
626
615
|
{
|
|
@@ -629,7 +618,7 @@ const $t = /* @__PURE__ */ u({
|
|
|
629
618
|
), () => {
|
|
630
619
|
};
|
|
631
620
|
}
|
|
632
|
-
}),
|
|
621
|
+
}), Dt = `
|
|
633
622
|
uniform float radius;
|
|
634
623
|
uniform int sectorCount;
|
|
635
624
|
|
|
@@ -726,7 +715,7 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
|
|
|
726
715
|
outputColor = vec4(finalColor, inputColor.a);
|
|
727
716
|
}
|
|
728
717
|
`;
|
|
729
|
-
class
|
|
718
|
+
class Ue extends J {
|
|
730
719
|
/**
|
|
731
720
|
* Creates a new KuwaharaEffect instance.
|
|
732
721
|
*
|
|
@@ -736,12 +725,12 @@ class Re extends Z {
|
|
|
736
725
|
* @param {number} [options.sectorCount] - Number of sectors.
|
|
737
726
|
*
|
|
738
727
|
*/
|
|
739
|
-
constructor({ blendFunction: t =
|
|
740
|
-
super("KuwaharaEffect",
|
|
728
|
+
constructor({ blendFunction: t = Z.NORMAL, radius: e = 1, sectorCount: s = 4 } = {}) {
|
|
729
|
+
super("KuwaharaEffect", Dt, {
|
|
741
730
|
blendFunction: t,
|
|
742
731
|
uniforms: /* @__PURE__ */ new Map([
|
|
743
|
-
["radius", new
|
|
744
|
-
["sectorCount", new
|
|
732
|
+
["radius", new M(e)],
|
|
733
|
+
["sectorCount", new M(s)]
|
|
745
734
|
])
|
|
746
735
|
});
|
|
747
736
|
}
|
|
@@ -751,8 +740,7 @@ class Re extends Z {
|
|
|
751
740
|
* @type {number}
|
|
752
741
|
*/
|
|
753
742
|
get radius() {
|
|
754
|
-
|
|
755
|
-
return (t = this.uniforms.get("radius")) == null ? void 0 : t.value;
|
|
743
|
+
return this.uniforms.get("radius")?.value;
|
|
756
744
|
}
|
|
757
745
|
set radius(t) {
|
|
758
746
|
this.uniforms.get("radius").value = t;
|
|
@@ -763,65 +751,63 @@ class Re extends Z {
|
|
|
763
751
|
* @type {number}
|
|
764
752
|
*/
|
|
765
753
|
get sectorCount() {
|
|
766
|
-
|
|
767
|
-
return (t = this.uniforms.get("sectorCount")) == null ? void 0 : t.value;
|
|
754
|
+
return this.uniforms.get("sectorCount")?.value;
|
|
768
755
|
}
|
|
769
756
|
set sectorCount(t) {
|
|
770
757
|
this.uniforms.get("sectorCount").value = t;
|
|
771
758
|
}
|
|
772
759
|
}
|
|
773
|
-
const ao = /* @__PURE__ */
|
|
760
|
+
const ao = /* @__PURE__ */ c({
|
|
774
761
|
__name: "KuwaharaPmndrs",
|
|
775
762
|
props: {
|
|
776
763
|
blendFunction: {},
|
|
777
764
|
radius: {},
|
|
778
765
|
sectorCount: {}
|
|
779
766
|
},
|
|
780
|
-
setup(
|
|
781
|
-
const e =
|
|
782
|
-
() => new
|
|
767
|
+
setup(r, { expose: t }) {
|
|
768
|
+
const e = r, { pass: s, effect: o } = f(
|
|
769
|
+
() => new Ue(e),
|
|
783
770
|
e
|
|
784
771
|
);
|
|
785
|
-
return t({ pass:
|
|
772
|
+
return t({ pass: s, effect: o }), p(
|
|
786
773
|
[
|
|
787
774
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
788
775
|
[() => e.radius, "radius"],
|
|
789
776
|
[() => e.sectorCount, "sectorCount"]
|
|
790
777
|
],
|
|
791
|
-
|
|
792
|
-
() => new
|
|
778
|
+
o,
|
|
779
|
+
() => new Ue()
|
|
793
780
|
), () => {
|
|
794
781
|
};
|
|
795
782
|
}
|
|
796
|
-
}), ro = /* @__PURE__ */
|
|
783
|
+
}), ro = /* @__PURE__ */ c({
|
|
797
784
|
__name: "ColorAveragePmndrs",
|
|
798
785
|
props: {
|
|
799
786
|
blendFunction: {},
|
|
800
787
|
opacity: {}
|
|
801
788
|
},
|
|
802
|
-
setup(
|
|
803
|
-
const e =
|
|
804
|
-
return t({ pass:
|
|
789
|
+
setup(r, { expose: t }) {
|
|
790
|
+
const e = r, { pass: s, effect: o } = f(() => new se(e.blendFunction), e);
|
|
791
|
+
return t({ pass: s, effect: o }), H(
|
|
805
792
|
() => e.blendFunction,
|
|
806
|
-
|
|
793
|
+
o,
|
|
807
794
|
"blendMode.blendFunction",
|
|
808
|
-
() => new
|
|
809
|
-
),
|
|
810
|
-
[
|
|
795
|
+
() => new se()
|
|
796
|
+
), m(
|
|
797
|
+
[o, () => e.opacity],
|
|
811
798
|
() => {
|
|
812
|
-
|
|
813
|
-
if (s.value)
|
|
799
|
+
if (o.value)
|
|
814
800
|
if (e.opacity !== void 0)
|
|
815
|
-
|
|
801
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
816
802
|
else {
|
|
817
|
-
const
|
|
818
|
-
|
|
803
|
+
const a = new se();
|
|
804
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
819
805
|
}
|
|
820
806
|
}
|
|
821
807
|
), () => {
|
|
822
808
|
};
|
|
823
809
|
}
|
|
824
|
-
}),
|
|
810
|
+
}), io = /* @__PURE__ */ c({
|
|
825
811
|
__name: "LensDistortionPmndrs",
|
|
826
812
|
props: {
|
|
827
813
|
distortion: {},
|
|
@@ -829,24 +815,24 @@ const ao = /* @__PURE__ */ u({
|
|
|
829
815
|
focalLength: {},
|
|
830
816
|
skew: {}
|
|
831
817
|
},
|
|
832
|
-
setup(
|
|
833
|
-
const e =
|
|
834
|
-
() => new
|
|
818
|
+
setup(r, { expose: t }) {
|
|
819
|
+
const e = r, { pass: s, effect: o } = f(
|
|
820
|
+
() => new Te({
|
|
835
821
|
...e,
|
|
836
|
-
distortion: e.distortion ? Array.isArray(e.distortion) ? new
|
|
837
|
-
principalPoint: e.principalPoint ? Array.isArray(e.principalPoint) ? new
|
|
838
|
-
focalLength: e.focalLength ? Array.isArray(e.focalLength) ? new
|
|
822
|
+
distortion: e.distortion ? Array.isArray(e.distortion) ? new d(...e.distortion) : e.distortion : new d(),
|
|
823
|
+
principalPoint: e.principalPoint ? Array.isArray(e.principalPoint) ? new d(...e.principalPoint) : e.principalPoint : new d(),
|
|
824
|
+
focalLength: e.focalLength ? Array.isArray(e.focalLength) ? new d(...e.focalLength) : e.focalLength : new d()
|
|
839
825
|
}),
|
|
840
826
|
e
|
|
841
827
|
);
|
|
842
|
-
return t({ pass:
|
|
828
|
+
return t({ pass: s, effect: o }), pe(
|
|
843
829
|
e,
|
|
844
|
-
|
|
845
|
-
() => new
|
|
830
|
+
o,
|
|
831
|
+
() => new Te()
|
|
846
832
|
), () => {
|
|
847
833
|
};
|
|
848
834
|
}
|
|
849
|
-
}),
|
|
835
|
+
}), no = /* @__PURE__ */ c({
|
|
850
836
|
__name: "ShockWavePmndrs",
|
|
851
837
|
props: {
|
|
852
838
|
position: {},
|
|
@@ -855,18 +841,18 @@ const ao = /* @__PURE__ */ u({
|
|
|
855
841
|
maxRadius: {},
|
|
856
842
|
waveSize: {}
|
|
857
843
|
},
|
|
858
|
-
setup(
|
|
859
|
-
const e =
|
|
860
|
-
() => new
|
|
844
|
+
setup(r, { expose: t }) {
|
|
845
|
+
const e = r, { camera: s } = T(), { pass: o, effect: a } = f(
|
|
846
|
+
() => new Ce(s.value, Array.isArray(e.position) ? new F(...e.position) : e.position, e),
|
|
861
847
|
e
|
|
862
848
|
);
|
|
863
|
-
return t({ pass:
|
|
849
|
+
return t({ pass: o, effect: a }), m(
|
|
864
850
|
() => e.position,
|
|
865
|
-
(
|
|
866
|
-
a.value && (Array.isArray(
|
|
851
|
+
(i) => {
|
|
852
|
+
a.value && (Array.isArray(i) ? a.value.position.set(...i) : i instanceof F && a.value.position.copy(i));
|
|
867
853
|
},
|
|
868
854
|
{ immediate: !0 }
|
|
869
|
-
),
|
|
855
|
+
), p(
|
|
870
856
|
[
|
|
871
857
|
[() => e.amplitude, "amplitude"],
|
|
872
858
|
[() => e.waveSize, "waveSize"],
|
|
@@ -874,11 +860,11 @@ const ao = /* @__PURE__ */ u({
|
|
|
874
860
|
[() => e.speed, "speed"]
|
|
875
861
|
],
|
|
876
862
|
a,
|
|
877
|
-
() => new
|
|
863
|
+
() => new Ce()
|
|
878
864
|
), () => {
|
|
879
865
|
};
|
|
880
866
|
}
|
|
881
|
-
}), lo = /* @__PURE__ */
|
|
867
|
+
}), lo = /* @__PURE__ */ c({
|
|
882
868
|
__name: "TiltShiftPmndrs",
|
|
883
869
|
props: {
|
|
884
870
|
blendFunction: {},
|
|
@@ -891,9 +877,9 @@ const ao = /* @__PURE__ */ u({
|
|
|
891
877
|
resolutionX: {},
|
|
892
878
|
resolutionY: {}
|
|
893
879
|
},
|
|
894
|
-
setup(
|
|
895
|
-
const e =
|
|
896
|
-
return t({ pass:
|
|
880
|
+
setup(r, { expose: t }) {
|
|
881
|
+
const e = r, { pass: s, effect: o } = f(() => new Ee(e), e);
|
|
882
|
+
return t({ pass: s, effect: o }), p(
|
|
897
883
|
[
|
|
898
884
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
899
885
|
[() => e.offset, "offset"],
|
|
@@ -905,59 +891,59 @@ const ao = /* @__PURE__ */ u({
|
|
|
905
891
|
[() => e.resolutionX, "resolution.width"],
|
|
906
892
|
[() => e.resolutionY, "resolution.height"]
|
|
907
893
|
],
|
|
908
|
-
|
|
909
|
-
() => new
|
|
894
|
+
o,
|
|
895
|
+
() => new Ee()
|
|
910
896
|
), () => {
|
|
911
897
|
};
|
|
912
898
|
}
|
|
913
|
-
}),
|
|
899
|
+
}), co = /* @__PURE__ */ c({
|
|
914
900
|
__name: "DotScreenPmndrs",
|
|
915
901
|
props: {
|
|
916
902
|
angle: {},
|
|
917
903
|
scale: {},
|
|
918
904
|
blendFunction: {}
|
|
919
905
|
},
|
|
920
|
-
setup(
|
|
921
|
-
const e =
|
|
922
|
-
return t({ pass:
|
|
906
|
+
setup(r, { expose: t }) {
|
|
907
|
+
const e = r, { pass: s, effect: o } = f(() => new Pe(e), e);
|
|
908
|
+
return t({ pass: s, effect: o }), p(
|
|
923
909
|
[
|
|
924
910
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
925
911
|
[() => e.angle, "angle"],
|
|
926
912
|
[() => e.scale, "scale"]
|
|
927
913
|
],
|
|
928
|
-
|
|
929
|
-
() => new
|
|
914
|
+
o,
|
|
915
|
+
() => new Pe()
|
|
930
916
|
), () => {
|
|
931
917
|
};
|
|
932
918
|
}
|
|
933
|
-
}),
|
|
919
|
+
}), uo = /* @__PURE__ */ c({
|
|
934
920
|
__name: "SepiaPmndrs",
|
|
935
921
|
props: {
|
|
936
922
|
blendFunction: {},
|
|
937
923
|
intensity: {}
|
|
938
924
|
},
|
|
939
|
-
setup(
|
|
940
|
-
const e =
|
|
941
|
-
return t({ pass:
|
|
925
|
+
setup(r, { expose: t }) {
|
|
926
|
+
const e = r, { pass: s, effect: o } = f(() => new De(e), e);
|
|
927
|
+
return t({ pass: s, effect: o }), p(
|
|
942
928
|
[
|
|
943
929
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
944
930
|
[() => e.intensity, "intensity"]
|
|
945
931
|
],
|
|
946
|
-
|
|
947
|
-
() => new
|
|
932
|
+
o,
|
|
933
|
+
() => new De()
|
|
948
934
|
), () => {
|
|
949
935
|
};
|
|
950
936
|
}
|
|
951
937
|
});
|
|
952
|
-
class
|
|
938
|
+
class We extends J {
|
|
953
939
|
/**
|
|
954
940
|
* Creates a new LinocutEffect instance.
|
|
955
941
|
*
|
|
956
942
|
* @param {LinocutPmndrsProps} [options] - Configuration options for the effect.
|
|
957
943
|
*
|
|
958
944
|
*/
|
|
959
|
-
constructor({ blendFunction: t =
|
|
960
|
-
const
|
|
945
|
+
constructor({ blendFunction: t = Z.NORMAL, scale: e = 0.85, noiseScale: s = 0, center: o = [0.5, 0.5], rotation: a = 0 } = {}) {
|
|
946
|
+
const i = Array.isArray(o) ? new d().fromArray(o) : o;
|
|
961
947
|
super("LinocutEffect", `
|
|
962
948
|
uniform float scale;
|
|
963
949
|
uniform float noiseScale;
|
|
@@ -1021,43 +1007,39 @@ class Ne extends Z {
|
|
|
1021
1007
|
`, {
|
|
1022
1008
|
blendFunction: t,
|
|
1023
1009
|
uniforms: /* @__PURE__ */ new Map([
|
|
1024
|
-
["scale", new
|
|
1025
|
-
["noiseScale", new
|
|
1026
|
-
["center", new
|
|
1027
|
-
["rotation", new
|
|
1010
|
+
["scale", new M(e)],
|
|
1011
|
+
["noiseScale", new M(s)],
|
|
1012
|
+
["center", new M(i)],
|
|
1013
|
+
["rotation", new M(a)]
|
|
1028
1014
|
])
|
|
1029
1015
|
});
|
|
1030
1016
|
}
|
|
1031
1017
|
get scale() {
|
|
1032
|
-
|
|
1033
|
-
return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
|
|
1018
|
+
return this.uniforms.get("scale")?.value;
|
|
1034
1019
|
}
|
|
1035
1020
|
set scale(t) {
|
|
1036
1021
|
this.uniforms.get("scale").value = t;
|
|
1037
1022
|
}
|
|
1038
1023
|
get noiseScale() {
|
|
1039
|
-
|
|
1040
|
-
return (t = this.uniforms.get("noiseScale")) == null ? void 0 : t.value;
|
|
1024
|
+
return this.uniforms.get("noiseScale")?.value;
|
|
1041
1025
|
}
|
|
1042
1026
|
set noiseScale(t) {
|
|
1043
1027
|
this.uniforms.get("noiseScale").value = t;
|
|
1044
1028
|
}
|
|
1045
1029
|
get center() {
|
|
1046
|
-
|
|
1047
|
-
return (t = this.uniforms.get("center")) == null ? void 0 : t.value;
|
|
1030
|
+
return this.uniforms.get("center")?.value;
|
|
1048
1031
|
}
|
|
1049
1032
|
set center(t) {
|
|
1050
|
-
this.uniforms.get("center").value = Array.isArray(t) ? new
|
|
1033
|
+
this.uniforms.get("center").value = Array.isArray(t) ? new d().fromArray(t) : t;
|
|
1051
1034
|
}
|
|
1052
1035
|
get rotation() {
|
|
1053
|
-
|
|
1054
|
-
return (t = this.uniforms.get("rotation")) == null ? void 0 : t.value;
|
|
1036
|
+
return this.uniforms.get("rotation")?.value;
|
|
1055
1037
|
}
|
|
1056
1038
|
set rotation(t) {
|
|
1057
1039
|
this.uniforms.get("rotation").value = t;
|
|
1058
1040
|
}
|
|
1059
1041
|
}
|
|
1060
|
-
const fo = /* @__PURE__ */
|
|
1042
|
+
const fo = /* @__PURE__ */ c({
|
|
1061
1043
|
__name: "LinocutPmndrs",
|
|
1062
1044
|
props: {
|
|
1063
1045
|
blendFunction: {},
|
|
@@ -1066,15 +1048,15 @@ const fo = /* @__PURE__ */ u({
|
|
|
1066
1048
|
center: {},
|
|
1067
1049
|
rotation: {}
|
|
1068
1050
|
},
|
|
1069
|
-
setup(
|
|
1070
|
-
const e =
|
|
1071
|
-
() => new
|
|
1051
|
+
setup(r, { expose: t }) {
|
|
1052
|
+
const e = r, { pass: s, effect: o } = f(
|
|
1053
|
+
() => new We({
|
|
1072
1054
|
...e,
|
|
1073
|
-
center: e.center instanceof
|
|
1055
|
+
center: e.center instanceof d ? [e.center.x, e.center.y] : e.center
|
|
1074
1056
|
}),
|
|
1075
1057
|
e
|
|
1076
1058
|
);
|
|
1077
|
-
return t({ pass:
|
|
1059
|
+
return t({ pass: s, effect: o }), p(
|
|
1078
1060
|
[
|
|
1079
1061
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1080
1062
|
[() => e.scale, "scale"],
|
|
@@ -1082,28 +1064,27 @@ const fo = /* @__PURE__ */ u({
|
|
|
1082
1064
|
[() => e.center, "center"],
|
|
1083
1065
|
[() => e.rotation, "rotation"]
|
|
1084
1066
|
],
|
|
1085
|
-
|
|
1086
|
-
() => new
|
|
1067
|
+
o,
|
|
1068
|
+
() => new We()
|
|
1087
1069
|
), () => {
|
|
1088
1070
|
};
|
|
1089
1071
|
}
|
|
1090
|
-
}), ho = /* @__PURE__ */
|
|
1072
|
+
}), ho = /* @__PURE__ */ c({
|
|
1091
1073
|
__name: "DepthPickingPassPmndrs",
|
|
1092
1074
|
props: {
|
|
1093
1075
|
depthPacking: {},
|
|
1094
1076
|
mode: {}
|
|
1095
1077
|
},
|
|
1096
|
-
setup(
|
|
1097
|
-
const e =
|
|
1098
|
-
|
|
1078
|
+
setup(r, { expose: t }) {
|
|
1079
|
+
const e = r, s = K($), o = new ot(e), a = S(() => {
|
|
1080
|
+
s?.value && (fe(() => a()), s.value.addPass(o));
|
|
1099
1081
|
});
|
|
1100
|
-
return
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
}), t({ pass: s }), () => {
|
|
1082
|
+
return N(() => {
|
|
1083
|
+
!s?.value || !o || (s?.value?.removePass(o), o.dispose());
|
|
1084
|
+
}), t({ pass: o }), () => {
|
|
1104
1085
|
};
|
|
1105
1086
|
}
|
|
1106
|
-
}), po = /* @__PURE__ */
|
|
1087
|
+
}), po = /* @__PURE__ */ c({
|
|
1107
1088
|
__name: "GodRaysPmndrs",
|
|
1108
1089
|
props: {
|
|
1109
1090
|
blendFunction: {},
|
|
@@ -1121,17 +1102,17 @@ const fo = /* @__PURE__ */ u({
|
|
|
1121
1102
|
samples: {},
|
|
1122
1103
|
clampMax: {}
|
|
1123
1104
|
},
|
|
1124
|
-
setup(
|
|
1125
|
-
const e =
|
|
1126
|
-
() => e.lightSource ?? new
|
|
1127
|
-
new
|
|
1128
|
-
new
|
|
1105
|
+
setup(r, { expose: t }) {
|
|
1106
|
+
const e = r, { camera: s } = T(), o = L(
|
|
1107
|
+
() => e.lightSource ?? new Ye(
|
|
1108
|
+
new at(1e-5),
|
|
1109
|
+
new ke({ visible: !1 })
|
|
1129
1110
|
)
|
|
1130
|
-
), { pass: a, effect:
|
|
1131
|
-
() => new
|
|
1111
|
+
), { pass: a, effect: i } = f(
|
|
1112
|
+
() => new ae(s.value, o.value, e),
|
|
1132
1113
|
e
|
|
1133
1114
|
);
|
|
1134
|
-
return t({ pass: a, effect:
|
|
1115
|
+
return t({ pass: a, effect: i }), p(
|
|
1135
1116
|
[
|
|
1136
1117
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1137
1118
|
[() => e.density, "godRaysMaterial.density"],
|
|
@@ -1146,26 +1127,25 @@ const fo = /* @__PURE__ */ u({
|
|
|
1146
1127
|
[() => e.kernelSize, "blurPass.kernelSize"],
|
|
1147
1128
|
[() => e.blur, "blurPass.enabled"]
|
|
1148
1129
|
],
|
|
1149
|
-
|
|
1150
|
-
() => new
|
|
1151
|
-
),
|
|
1152
|
-
[() => e.lightSource,
|
|
1130
|
+
i,
|
|
1131
|
+
() => new ae()
|
|
1132
|
+
), m(
|
|
1133
|
+
[() => e.lightSource, i],
|
|
1153
1134
|
() => {
|
|
1154
|
-
|
|
1135
|
+
i.value && (i.value.lightSource = me(o.value));
|
|
1155
1136
|
},
|
|
1156
1137
|
{ immediate: !0 }
|
|
1157
|
-
),
|
|
1138
|
+
), m(
|
|
1158
1139
|
[() => e.opacity],
|
|
1159
1140
|
() => {
|
|
1160
|
-
var i, l;
|
|
1161
1141
|
if (e.opacity !== void 0)
|
|
1162
|
-
|
|
1142
|
+
i.value?.blendMode.setOpacity(e.opacity);
|
|
1163
1143
|
else {
|
|
1164
|
-
const
|
|
1165
|
-
|
|
1166
|
-
|
|
1144
|
+
const n = new ae(
|
|
1145
|
+
s.value,
|
|
1146
|
+
me(o.value)
|
|
1167
1147
|
);
|
|
1168
|
-
|
|
1148
|
+
i.value?.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
|
|
1169
1149
|
}
|
|
1170
1150
|
},
|
|
1171
1151
|
{
|
|
@@ -1174,69 +1154,67 @@ const fo = /* @__PURE__ */ u({
|
|
|
1174
1154
|
), () => {
|
|
1175
1155
|
};
|
|
1176
1156
|
}
|
|
1177
|
-
}), mo = /* @__PURE__ */
|
|
1157
|
+
}), mo = /* @__PURE__ */ c({
|
|
1178
1158
|
__name: "ColorDepthPmndrs",
|
|
1179
1159
|
props: {
|
|
1180
1160
|
blendFunction: {},
|
|
1181
1161
|
bits: {},
|
|
1182
1162
|
opacity: {}
|
|
1183
1163
|
},
|
|
1184
|
-
setup(
|
|
1185
|
-
const e =
|
|
1186
|
-
return t({ pass:
|
|
1164
|
+
setup(r, { expose: t }) {
|
|
1165
|
+
const e = r, { pass: s, effect: o } = f(() => new X(e), e);
|
|
1166
|
+
return t({ pass: s, effect: o }), H(
|
|
1187
1167
|
() => e.blendFunction,
|
|
1188
|
-
|
|
1168
|
+
o,
|
|
1189
1169
|
"blendMode.blendFunction",
|
|
1190
|
-
() => new
|
|
1191
|
-
),
|
|
1192
|
-
[
|
|
1170
|
+
() => new X()
|
|
1171
|
+
), m(
|
|
1172
|
+
[o, () => e.bits],
|
|
1193
1173
|
() => {
|
|
1194
|
-
|
|
1195
|
-
if (s.value)
|
|
1174
|
+
if (o.value)
|
|
1196
1175
|
if (e.bits !== void 0)
|
|
1197
|
-
|
|
1176
|
+
o.value?.setBitDepth(e.bits);
|
|
1198
1177
|
else {
|
|
1199
|
-
const
|
|
1200
|
-
|
|
1178
|
+
const a = new X();
|
|
1179
|
+
o.value?.setBitDepth(a.getBitDepth()), a.dispose();
|
|
1201
1180
|
}
|
|
1202
1181
|
}
|
|
1203
|
-
),
|
|
1204
|
-
[
|
|
1182
|
+
), m(
|
|
1183
|
+
[o, () => e.opacity],
|
|
1205
1184
|
() => {
|
|
1206
|
-
|
|
1207
|
-
if (s.value)
|
|
1185
|
+
if (o.value)
|
|
1208
1186
|
if (e.opacity !== void 0)
|
|
1209
|
-
|
|
1187
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
1210
1188
|
else {
|
|
1211
|
-
const
|
|
1212
|
-
|
|
1189
|
+
const a = new X();
|
|
1190
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
1213
1191
|
}
|
|
1214
1192
|
}
|
|
1215
1193
|
), () => {
|
|
1216
1194
|
};
|
|
1217
1195
|
}
|
|
1218
|
-
}), vo = /* @__PURE__ */
|
|
1196
|
+
}), vo = /* @__PURE__ */ c({
|
|
1219
1197
|
__name: "GridPmndrs",
|
|
1220
1198
|
props: {
|
|
1221
1199
|
blendFunction: {},
|
|
1222
1200
|
scale: {},
|
|
1223
1201
|
lineWidth: {}
|
|
1224
1202
|
},
|
|
1225
|
-
setup(
|
|
1226
|
-
const e =
|
|
1227
|
-
return t({ pass:
|
|
1203
|
+
setup(r, { expose: t }) {
|
|
1204
|
+
const e = r, { pass: s, effect: o } = f(() => new Le(e), e);
|
|
1205
|
+
return t({ pass: s, effect: o }), p(
|
|
1228
1206
|
[
|
|
1229
1207
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1230
1208
|
[() => e.scale, "scale"],
|
|
1231
1209
|
[() => e.lineWidth, "lineWidth"]
|
|
1232
1210
|
],
|
|
1233
|
-
|
|
1234
|
-
() => new
|
|
1211
|
+
o,
|
|
1212
|
+
() => new Le()
|
|
1235
1213
|
), () => {
|
|
1236
1214
|
};
|
|
1237
1215
|
}
|
|
1238
1216
|
});
|
|
1239
|
-
class
|
|
1217
|
+
class Ge extends J {
|
|
1240
1218
|
/**
|
|
1241
1219
|
* Creates a new FishEyeEffect instance.
|
|
1242
1220
|
*
|
|
@@ -1247,7 +1225,7 @@ class ze extends Z {
|
|
|
1247
1225
|
* @param {number} [options.scale] - Scale.
|
|
1248
1226
|
*
|
|
1249
1227
|
*/
|
|
1250
|
-
constructor({ blendFunction: t =
|
|
1228
|
+
constructor({ blendFunction: t = Z.NORMAL, lensS: e = new d(1, 1), lensF: s = new d(0, 1), scale: o = 1 } = {}) {
|
|
1251
1229
|
super("FishEyeEffect", `
|
|
1252
1230
|
uniform vec2 lensS;
|
|
1253
1231
|
uniform vec2 lensF;
|
|
@@ -1269,9 +1247,9 @@ class ze extends Z {
|
|
|
1269
1247
|
`, {
|
|
1270
1248
|
blendFunction: t,
|
|
1271
1249
|
uniforms: /* @__PURE__ */ new Map([
|
|
1272
|
-
["lensS", new
|
|
1273
|
-
["lensF", new
|
|
1274
|
-
["scale", new
|
|
1250
|
+
["lensS", new M(e)],
|
|
1251
|
+
["lensF", new M(s)],
|
|
1252
|
+
["scale", new M(o)]
|
|
1275
1253
|
])
|
|
1276
1254
|
});
|
|
1277
1255
|
}
|
|
@@ -1281,8 +1259,7 @@ class ze extends Z {
|
|
|
1281
1259
|
* @type {Vector2}
|
|
1282
1260
|
*/
|
|
1283
1261
|
get lensS() {
|
|
1284
|
-
|
|
1285
|
-
return (t = this.uniforms.get("lensS")) == null ? void 0 : t.value;
|
|
1262
|
+
return this.uniforms.get("lensS")?.value;
|
|
1286
1263
|
}
|
|
1287
1264
|
set lensS(t) {
|
|
1288
1265
|
this.uniforms.get("lensS").value = t;
|
|
@@ -1293,8 +1270,7 @@ class ze extends Z {
|
|
|
1293
1270
|
* @type {Vector2}
|
|
1294
1271
|
*/
|
|
1295
1272
|
get lensF() {
|
|
1296
|
-
|
|
1297
|
-
return (t = this.uniforms.get("lensF")) == null ? void 0 : t.value;
|
|
1273
|
+
return this.uniforms.get("lensF")?.value;
|
|
1298
1274
|
}
|
|
1299
1275
|
set lensF(t) {
|
|
1300
1276
|
this.uniforms.get("lensF").value = t;
|
|
@@ -1305,14 +1281,13 @@ class ze extends Z {
|
|
|
1305
1281
|
* @type {number}
|
|
1306
1282
|
*/
|
|
1307
1283
|
get scale() {
|
|
1308
|
-
|
|
1309
|
-
return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
|
|
1284
|
+
return this.uniforms.get("scale")?.value;
|
|
1310
1285
|
}
|
|
1311
1286
|
set scale(t) {
|
|
1312
1287
|
this.uniforms.get("scale").value = t;
|
|
1313
1288
|
}
|
|
1314
1289
|
}
|
|
1315
|
-
const go = /* @__PURE__ */
|
|
1290
|
+
const go = /* @__PURE__ */ c({
|
|
1316
1291
|
__name: "FishEyePmndrs",
|
|
1317
1292
|
props: {
|
|
1318
1293
|
blendFunction: {},
|
|
@@ -1320,56 +1295,56 @@ const go = /* @__PURE__ */ u({
|
|
|
1320
1295
|
lensF: {},
|
|
1321
1296
|
scale: {}
|
|
1322
1297
|
},
|
|
1323
|
-
setup(
|
|
1324
|
-
const e =
|
|
1325
|
-
() => Array.isArray(e.lensS) ? new
|
|
1326
|
-
),
|
|
1327
|
-
() => Array.isArray(e.lensF) ? new
|
|
1328
|
-
), { pass: a, effect:
|
|
1329
|
-
() => new
|
|
1298
|
+
setup(r, { expose: t }) {
|
|
1299
|
+
const e = r, s = L(
|
|
1300
|
+
() => Array.isArray(e.lensS) ? new d(...e.lensS) : e.lensS
|
|
1301
|
+
), o = L(
|
|
1302
|
+
() => Array.isArray(e.lensF) ? new d(...e.lensF) : e.lensF
|
|
1303
|
+
), { pass: a, effect: i } = f(
|
|
1304
|
+
() => new Ge({
|
|
1330
1305
|
...e,
|
|
1331
|
-
lensS:
|
|
1332
|
-
lensF:
|
|
1306
|
+
lensS: s.value,
|
|
1307
|
+
lensF: o.value
|
|
1333
1308
|
}),
|
|
1334
1309
|
e
|
|
1335
1310
|
);
|
|
1336
|
-
return t({ pass: a, effect:
|
|
1311
|
+
return t({ pass: a, effect: i }), p(
|
|
1337
1312
|
[
|
|
1338
1313
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1339
|
-
[() =>
|
|
1340
|
-
[() =>
|
|
1314
|
+
[() => s.value, "lensS"],
|
|
1315
|
+
[() => o.value, "lensF"],
|
|
1341
1316
|
[() => e.scale, "scale"]
|
|
1342
1317
|
],
|
|
1343
|
-
|
|
1344
|
-
() => new
|
|
1318
|
+
i,
|
|
1319
|
+
() => new Ge()
|
|
1345
1320
|
), () => {
|
|
1346
1321
|
};
|
|
1347
1322
|
}
|
|
1348
|
-
}), xo = /* @__PURE__ */
|
|
1323
|
+
}), xo = /* @__PURE__ */ c({
|
|
1349
1324
|
__name: "BrightnessContrastPmndrs",
|
|
1350
1325
|
props: {
|
|
1351
1326
|
blendFunction: {},
|
|
1352
1327
|
brightness: {},
|
|
1353
1328
|
contrast: {}
|
|
1354
1329
|
},
|
|
1355
|
-
setup(
|
|
1356
|
-
const e =
|
|
1357
|
-
return t({ pass:
|
|
1330
|
+
setup(r, { expose: t }) {
|
|
1331
|
+
const e = r, { pass: s, effect: o } = f(() => new Fe(e), e);
|
|
1332
|
+
return t({ pass: s, effect: o }), p(
|
|
1358
1333
|
[
|
|
1359
1334
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1360
1335
|
[() => e.brightness, "brightness"],
|
|
1361
1336
|
[() => e.contrast, "contrast"]
|
|
1362
1337
|
],
|
|
1363
|
-
|
|
1364
|
-
() => new
|
|
1338
|
+
o,
|
|
1339
|
+
() => new Fe()
|
|
1365
1340
|
), () => {
|
|
1366
1341
|
};
|
|
1367
1342
|
}
|
|
1368
|
-
}),
|
|
1343
|
+
}), ce = {
|
|
1369
1344
|
OFF: 0,
|
|
1370
1345
|
EDGES: 1,
|
|
1371
1346
|
WEIGHTS: 2
|
|
1372
|
-
}, bo = /* @__PURE__ */
|
|
1347
|
+
}, bo = /* @__PURE__ */ c({
|
|
1373
1348
|
__name: "SMAAPmndrs",
|
|
1374
1349
|
props: {
|
|
1375
1350
|
blendFunction: {},
|
|
@@ -1379,56 +1354,56 @@ const go = /* @__PURE__ */ u({
|
|
|
1379
1354
|
predicationMode: {},
|
|
1380
1355
|
debug: {}
|
|
1381
1356
|
},
|
|
1382
|
-
setup(
|
|
1383
|
-
const e =
|
|
1384
|
-
t({ pass:
|
|
1385
|
-
const
|
|
1386
|
-
|
|
1357
|
+
setup(r, { expose: t }) {
|
|
1358
|
+
const e = r, { pass: s, effect: o } = f(() => new re(e), e), { camera: a } = T(), i = K($);
|
|
1359
|
+
t({ pass: s, effect: o });
|
|
1360
|
+
const n = new re();
|
|
1361
|
+
p(
|
|
1387
1362
|
[
|
|
1388
1363
|
[() => Number(e.blendFunction), "blendMode.blendFunction"],
|
|
1389
1364
|
[() => Number(e.predicationMode), "edgeDetectionMaterial.predicationMode"],
|
|
1390
1365
|
[() => Number(e.edgeDetectionMode), "edgeDetectionMaterial.edgeDetectionMode"]
|
|
1391
1366
|
],
|
|
1392
|
-
|
|
1393
|
-
() => new
|
|
1394
|
-
),
|
|
1395
|
-
[
|
|
1367
|
+
o,
|
|
1368
|
+
() => new re()
|
|
1369
|
+
), m(
|
|
1370
|
+
[o, () => e.opacity],
|
|
1396
1371
|
() => {
|
|
1397
|
-
|
|
1372
|
+
o.value && (e.opacity !== void 0 ? o.value.blendMode.setOpacity(e.opacity) : o.value.blendMode.setOpacity(n.blendMode.getOpacity()));
|
|
1398
1373
|
},
|
|
1399
1374
|
{ immediate: !0 }
|
|
1400
|
-
),
|
|
1401
|
-
[
|
|
1375
|
+
), m(
|
|
1376
|
+
[o, () => e.preset],
|
|
1402
1377
|
() => {
|
|
1403
|
-
|
|
1378
|
+
o.value && o.value.applyPreset(Number(e.preset));
|
|
1404
1379
|
}
|
|
1405
1380
|
);
|
|
1406
|
-
let l = null,
|
|
1407
|
-
const
|
|
1408
|
-
if (!s.value)
|
|
1409
|
-
return null;
|
|
1410
|
-
const A = m === "edges" ? s.value.edgesTexture : s.value.weightsTexture, E = new Xe(a.value, s.value, new q({ texture: A }));
|
|
1411
|
-
return E.renderToScreen = !1, E.enabled = !1, E.fullscreenMaterial.encodeOutput = !1, E;
|
|
1412
|
-
}, b = (m) => {
|
|
1413
|
-
m === "edges" && !l ? l = p("edges") : m === "weights" && !d && (d = p("weights"));
|
|
1414
|
-
}, c = (m, A) => {
|
|
1415
|
-
!m || !(r != null && r.value) || m.enabled !== A && (m.enabled = A, m.renderToScreen = A, A && !(r != null && r.value.passes.includes(m)) ? r == null || r.value.addPass(m) : !A && (r != null && r.value.passes.includes(m)) && (r == null || r.value.removePass(m), m.dispose()));
|
|
1416
|
-
}, S = (m) => {
|
|
1381
|
+
let l = null, u = null;
|
|
1382
|
+
const h = (g) => {
|
|
1417
1383
|
if (!o.value)
|
|
1384
|
+
return null;
|
|
1385
|
+
const v = g === "edges" ? o.value.edgesTexture : o.value.weightsTexture, b = new _e(a.value, o.value, new Y({ texture: v }));
|
|
1386
|
+
return b.renderToScreen = !1, b.enabled = !1, b.fullscreenMaterial.encodeOutput = !1, b;
|
|
1387
|
+
}, x = (g) => {
|
|
1388
|
+
g === "edges" && !l ? l = h("edges") : g === "weights" && !u && (u = h("weights"));
|
|
1389
|
+
}, w = (g, v) => {
|
|
1390
|
+
!g || !i?.value || g.enabled !== v && (g.enabled = v, g.renderToScreen = v, v && !i?.value.passes.includes(g) ? i?.value.addPass(g) : !v && i?.value.passes.includes(g) && (i?.value.removePass(g), g.dispose()));
|
|
1391
|
+
}, U = (g) => {
|
|
1392
|
+
if (!s.value)
|
|
1418
1393
|
return;
|
|
1419
|
-
const
|
|
1420
|
-
|
|
1394
|
+
const v = g === ce.OFF, b = g === ce.EDGES, ee = g === ce.WEIGHTS;
|
|
1395
|
+
s.value.enabled = v, s.value.renderToScreen = v, b && x("edges"), ee && x("weights"), w(l, b), w(u, ee), b || (l = null), ee || (u = null);
|
|
1421
1396
|
};
|
|
1422
|
-
return
|
|
1397
|
+
return m(
|
|
1423
1398
|
() => e.debug,
|
|
1424
1399
|
() => {
|
|
1425
|
-
!
|
|
1400
|
+
!s.value || e.debug === void 0 || U(e.debug);
|
|
1426
1401
|
},
|
|
1427
1402
|
{ immediate: !0 }
|
|
1428
1403
|
), () => {
|
|
1429
1404
|
};
|
|
1430
1405
|
}
|
|
1431
|
-
}), So = /* @__PURE__ */
|
|
1406
|
+
}), So = /* @__PURE__ */ c({
|
|
1432
1407
|
__name: "FXAAPmndrs",
|
|
1433
1408
|
props: {
|
|
1434
1409
|
blendFunction: {},
|
|
@@ -1438,9 +1413,9 @@ const go = /* @__PURE__ */ u({
|
|
|
1438
1413
|
maxEdgeThreshold: {},
|
|
1439
1414
|
subpixelQuality: {}
|
|
1440
1415
|
},
|
|
1441
|
-
setup(
|
|
1442
|
-
const e =
|
|
1443
|
-
return t({ pass:
|
|
1416
|
+
setup(r, { expose: t }) {
|
|
1417
|
+
const e = r, { pass: s, effect: o } = f(() => new ie(e), e);
|
|
1418
|
+
return t({ pass: s, effect: o }), p(
|
|
1444
1419
|
[
|
|
1445
1420
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1446
1421
|
[() => e.samples, "samples"],
|
|
@@ -1448,51 +1423,49 @@ const go = /* @__PURE__ */ u({
|
|
|
1448
1423
|
[() => e.maxEdgeThreshold, "maxEdgeThreshold"],
|
|
1449
1424
|
[() => e.subpixelQuality, "subpixelQuality"]
|
|
1450
1425
|
],
|
|
1451
|
-
|
|
1452
|
-
() => new
|
|
1453
|
-
),
|
|
1454
|
-
[
|
|
1426
|
+
o,
|
|
1427
|
+
() => new ie()
|
|
1428
|
+
), m(
|
|
1429
|
+
[o, () => e.opacity],
|
|
1455
1430
|
() => {
|
|
1456
|
-
|
|
1457
|
-
if (s.value)
|
|
1431
|
+
if (o.value)
|
|
1458
1432
|
if (e.opacity !== void 0)
|
|
1459
|
-
|
|
1433
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
1460
1434
|
else {
|
|
1461
|
-
const
|
|
1462
|
-
|
|
1435
|
+
const a = new ie();
|
|
1436
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
1463
1437
|
}
|
|
1464
1438
|
},
|
|
1465
1439
|
{ immediate: !0 }
|
|
1466
1440
|
), () => {
|
|
1467
1441
|
};
|
|
1468
1442
|
}
|
|
1469
|
-
}), wo = /* @__PURE__ */
|
|
1443
|
+
}), wo = /* @__PURE__ */ c({
|
|
1470
1444
|
__name: "TexturePmndrs",
|
|
1471
1445
|
props: {
|
|
1472
1446
|
blendFunction: {},
|
|
1473
1447
|
texture: {},
|
|
1474
1448
|
opacity: {}
|
|
1475
1449
|
},
|
|
1476
|
-
setup(
|
|
1477
|
-
const e =
|
|
1450
|
+
setup(r, { expose: t }) {
|
|
1451
|
+
const e = r, { pass: s, effect: o } = f(() => new Y(e), e);
|
|
1478
1452
|
return t({
|
|
1479
|
-
pass:
|
|
1480
|
-
effect:
|
|
1481
|
-
}),
|
|
1453
|
+
pass: s,
|
|
1454
|
+
effect: o
|
|
1455
|
+
}), p(
|
|
1482
1456
|
[
|
|
1483
1457
|
[() => e.blendFunction, "blendMode.blendFunction"]
|
|
1484
1458
|
],
|
|
1485
|
-
|
|
1486
|
-
() => new
|
|
1487
|
-
),
|
|
1459
|
+
o,
|
|
1460
|
+
() => new Y()
|
|
1461
|
+
), m(
|
|
1488
1462
|
[() => e.opacity],
|
|
1489
1463
|
() => {
|
|
1490
|
-
var a, r;
|
|
1491
1464
|
if (e.opacity !== void 0)
|
|
1492
|
-
|
|
1465
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
1493
1466
|
else {
|
|
1494
|
-
const
|
|
1495
|
-
|
|
1467
|
+
const a = new Y();
|
|
1468
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
1496
1469
|
}
|
|
1497
1470
|
},
|
|
1498
1471
|
{
|
|
@@ -1501,7 +1474,7 @@ const go = /* @__PURE__ */ u({
|
|
|
1501
1474
|
), () => {
|
|
1502
1475
|
};
|
|
1503
1476
|
}
|
|
1504
|
-
}), Ao = /* @__PURE__ */
|
|
1477
|
+
}), Ao = /* @__PURE__ */ c({
|
|
1505
1478
|
__name: "ASCIIPmndrs",
|
|
1506
1479
|
props: {
|
|
1507
1480
|
blendFunction: {},
|
|
@@ -1512,55 +1485,55 @@ const go = /* @__PURE__ */ u({
|
|
|
1512
1485
|
useSceneColor: { type: Boolean },
|
|
1513
1486
|
asciiTexture: {}
|
|
1514
1487
|
},
|
|
1515
|
-
setup(
|
|
1516
|
-
const e =
|
|
1517
|
-
return t({ pass:
|
|
1518
|
-
|
|
1519
|
-
}),
|
|
1488
|
+
setup(r, { expose: t }) {
|
|
1489
|
+
const e = r, s = new ne(), { asciiTexture: o, ...a } = e, { pass: i, effect: n } = f(() => new ne(a), e);
|
|
1490
|
+
return t({ pass: i, effect: n }), N(() => {
|
|
1491
|
+
s.dispose();
|
|
1492
|
+
}), p(
|
|
1520
1493
|
[
|
|
1521
1494
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1522
1495
|
[() => e.cellSize, "cellSize"],
|
|
1523
1496
|
[() => e.inverted, "inverted"]
|
|
1524
1497
|
],
|
|
1525
|
-
|
|
1498
|
+
n,
|
|
1526
1499
|
() => new ne()
|
|
1527
|
-
),
|
|
1528
|
-
[
|
|
1500
|
+
), m(
|
|
1501
|
+
[n, () => e.useSceneColor],
|
|
1529
1502
|
() => {
|
|
1530
|
-
|
|
1503
|
+
n.value && (e.useSceneColor ? n.value.color = null : n.value.color = e.color ?? s.color);
|
|
1531
1504
|
},
|
|
1532
1505
|
{ immediate: !0 }
|
|
1533
|
-
),
|
|
1534
|
-
[
|
|
1506
|
+
), m(
|
|
1507
|
+
[n, () => e.opacity],
|
|
1535
1508
|
() => {
|
|
1536
|
-
|
|
1509
|
+
n.value && n.value.blendMode.setOpacity(e.opacity ?? s.blendMode.getOpacity());
|
|
1537
1510
|
},
|
|
1538
1511
|
{ immediate: !0 }
|
|
1539
|
-
),
|
|
1540
|
-
[
|
|
1512
|
+
), m(
|
|
1513
|
+
[n, () => e.color],
|
|
1541
1514
|
() => {
|
|
1542
|
-
|
|
1515
|
+
n.value && (e.useSceneColor || (n.value.color = e.color ?? null));
|
|
1543
1516
|
},
|
|
1544
1517
|
{ immediate: !0 }
|
|
1545
|
-
),
|
|
1546
|
-
[
|
|
1518
|
+
), m(
|
|
1519
|
+
[n, () => e.asciiTexture],
|
|
1547
1520
|
() => {
|
|
1548
|
-
if (!
|
|
1521
|
+
if (!n.value)
|
|
1549
1522
|
return;
|
|
1550
|
-
const l = e.asciiTexture ? new
|
|
1551
|
-
|
|
1523
|
+
const l = e.asciiTexture ? new st(e.asciiTexture) : s.asciiTexture;
|
|
1524
|
+
n.value.asciiTexture = l;
|
|
1552
1525
|
},
|
|
1553
1526
|
{ immediate: !0 }
|
|
1554
|
-
),
|
|
1555
|
-
[
|
|
1527
|
+
), m(
|
|
1528
|
+
[n, () => e.blendFunction],
|
|
1556
1529
|
() => {
|
|
1557
|
-
|
|
1530
|
+
n.value && (n.value.blendMode.blendFunction = e.blendFunction ? Number(e.blendFunction) : Number(s.blendMode.blendFunction));
|
|
1558
1531
|
},
|
|
1559
1532
|
{ immediate: !0 }
|
|
1560
1533
|
), () => {
|
|
1561
1534
|
};
|
|
1562
1535
|
}
|
|
1563
|
-
}),
|
|
1536
|
+
}), k = {
|
|
1564
1537
|
name: "CopyShader",
|
|
1565
1538
|
uniforms: {
|
|
1566
1539
|
tDiffuse: { value: null },
|
|
@@ -1598,35 +1571,82 @@ const go = /* @__PURE__ */ u({
|
|
|
1598
1571
|
}`
|
|
1599
1572
|
)
|
|
1600
1573
|
};
|
|
1601
|
-
class
|
|
1574
|
+
class E {
|
|
1575
|
+
/**
|
|
1576
|
+
* Constructs a new pass.
|
|
1577
|
+
*/
|
|
1602
1578
|
constructor() {
|
|
1603
1579
|
this.isPass = !0, this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.renderToScreen = !1;
|
|
1604
1580
|
}
|
|
1581
|
+
/**
|
|
1582
|
+
* Sets the size of the pass.
|
|
1583
|
+
*
|
|
1584
|
+
* @abstract
|
|
1585
|
+
* @param {number} width - The width to set.
|
|
1586
|
+
* @param {number} height - The height to set.
|
|
1587
|
+
*/
|
|
1605
1588
|
setSize() {
|
|
1606
1589
|
}
|
|
1590
|
+
/**
|
|
1591
|
+
* This method holds the render logic of a pass. It must be implemented in all derived classes.
|
|
1592
|
+
*
|
|
1593
|
+
* @abstract
|
|
1594
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1595
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
1596
|
+
* destination for the pass.
|
|
1597
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
1598
|
+
* previous pass from this buffer.
|
|
1599
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
1600
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
1601
|
+
*/
|
|
1607
1602
|
render() {
|
|
1608
1603
|
console.error("THREE.Pass: .render() must be implemented in derived pass.");
|
|
1609
1604
|
}
|
|
1605
|
+
/**
|
|
1606
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
1607
|
+
* method whenever the pass is no longer used in your app.
|
|
1608
|
+
*
|
|
1609
|
+
* @abstract
|
|
1610
|
+
*/
|
|
1610
1611
|
dispose() {
|
|
1611
1612
|
}
|
|
1612
1613
|
}
|
|
1613
|
-
const
|
|
1614
|
-
class
|
|
1614
|
+
const Lt = new rt(-1, 1, 1, -1, 0, 1);
|
|
1615
|
+
class Ft extends it {
|
|
1615
1616
|
constructor() {
|
|
1616
|
-
super(), this.setAttribute("position", new
|
|
1617
|
+
super(), this.setAttribute("position", new Oe([-1, 3, 0, -1, -1, 0, 3, -1, 0], 3)), this.setAttribute("uv", new Oe([0, 2, 0, 0, 2, 0], 2));
|
|
1617
1618
|
}
|
|
1618
1619
|
}
|
|
1619
|
-
const
|
|
1620
|
-
class
|
|
1620
|
+
const Ot = new Ft();
|
|
1621
|
+
class O {
|
|
1622
|
+
/**
|
|
1623
|
+
* Constructs a new full screen quad.
|
|
1624
|
+
*
|
|
1625
|
+
* @param {?Material} material - The material to render te full screen quad with.
|
|
1626
|
+
*/
|
|
1621
1627
|
constructor(t) {
|
|
1622
|
-
this._mesh = new
|
|
1628
|
+
this._mesh = new Ye(Ot, t);
|
|
1623
1629
|
}
|
|
1630
|
+
/**
|
|
1631
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
1632
|
+
* method whenever the instance is no longer used in your app.
|
|
1633
|
+
*/
|
|
1624
1634
|
dispose() {
|
|
1625
1635
|
this._mesh.geometry.dispose();
|
|
1626
1636
|
}
|
|
1637
|
+
/**
|
|
1638
|
+
* Renders the full screen quad.
|
|
1639
|
+
*
|
|
1640
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1641
|
+
*/
|
|
1627
1642
|
render(t) {
|
|
1628
|
-
t.render(this._mesh,
|
|
1643
|
+
t.render(this._mesh, Lt);
|
|
1629
1644
|
}
|
|
1645
|
+
/**
|
|
1646
|
+
* The quad's material.
|
|
1647
|
+
*
|
|
1648
|
+
* @type {?Material}
|
|
1649
|
+
*/
|
|
1630
1650
|
get material() {
|
|
1631
1651
|
return this._mesh.material;
|
|
1632
1652
|
}
|
|
@@ -1634,178 +1654,308 @@ class R {
|
|
|
1634
1654
|
this._mesh.material = t;
|
|
1635
1655
|
}
|
|
1636
1656
|
}
|
|
1637
|
-
class
|
|
1638
|
-
|
|
1639
|
-
|
|
1657
|
+
class Bt extends E {
|
|
1658
|
+
/**
|
|
1659
|
+
* Constructs a new shader pass.
|
|
1660
|
+
*
|
|
1661
|
+
* @param {Object|ShaderMaterial} [shader] - A shader object holding vertex and fragment shader as well as
|
|
1662
|
+
* defines and uniforms. It's also valid to pass a custom shader material.
|
|
1663
|
+
* @param {string} [textureID='tDiffuse'] - The name of the texture uniform that should sample
|
|
1664
|
+
* the read buffer.
|
|
1665
|
+
*/
|
|
1666
|
+
constructor(t, e = "tDiffuse") {
|
|
1667
|
+
super(), this.textureID = e, this.uniforms = null, this.material = null, t instanceof y ? (this.uniforms = t.uniforms, this.material = t) : t && (this.uniforms = P.clone(t.uniforms), this.material = new y({
|
|
1640
1668
|
name: t.name !== void 0 ? t.name : "unspecified",
|
|
1641
1669
|
defines: Object.assign({}, t.defines),
|
|
1642
1670
|
uniforms: this.uniforms,
|
|
1643
1671
|
vertexShader: t.vertexShader,
|
|
1644
1672
|
fragmentShader: t.fragmentShader
|
|
1645
|
-
})), this.
|
|
1673
|
+
})), this._fsQuad = new O(this.material);
|
|
1646
1674
|
}
|
|
1647
|
-
|
|
1648
|
-
|
|
1675
|
+
/**
|
|
1676
|
+
* Performs the shader pass.
|
|
1677
|
+
*
|
|
1678
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1679
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
1680
|
+
* destination for the pass.
|
|
1681
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
1682
|
+
* previous pass from this buffer.
|
|
1683
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
1684
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
1685
|
+
*/
|
|
1686
|
+
render(t, e, s) {
|
|
1687
|
+
this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = s.texture), this._fsQuad.material = this.material, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), this._fsQuad.render(t));
|
|
1649
1688
|
}
|
|
1689
|
+
/**
|
|
1690
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
1691
|
+
* method whenever the pass is no longer used in your app.
|
|
1692
|
+
*/
|
|
1650
1693
|
dispose() {
|
|
1651
|
-
this.material.dispose(), this.
|
|
1694
|
+
this.material.dispose(), this._fsQuad.dispose();
|
|
1652
1695
|
}
|
|
1653
1696
|
}
|
|
1654
|
-
class
|
|
1697
|
+
class He extends E {
|
|
1698
|
+
/**
|
|
1699
|
+
* Constructs a new mask pass.
|
|
1700
|
+
*
|
|
1701
|
+
* @param {Scene} scene - The 3D objects in this scene will define the mask.
|
|
1702
|
+
* @param {Camera} camera - The camera.
|
|
1703
|
+
*/
|
|
1655
1704
|
constructor(t, e) {
|
|
1656
1705
|
super(), this.scene = t, this.camera = e, this.clear = !0, this.needsSwap = !1, this.inverse = !1;
|
|
1657
1706
|
}
|
|
1658
|
-
|
|
1659
|
-
|
|
1707
|
+
/**
|
|
1708
|
+
* Performs a mask pass with the configured scene and camera.
|
|
1709
|
+
*
|
|
1710
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1711
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
1712
|
+
* destination for the pass.
|
|
1713
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
1714
|
+
* previous pass from this buffer.
|
|
1715
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
1716
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
1717
|
+
*/
|
|
1718
|
+
render(t, e, s) {
|
|
1719
|
+
const o = t.getContext(), a = t.state;
|
|
1660
1720
|
a.buffers.color.setMask(!1), a.buffers.depth.setMask(!1), a.buffers.color.setLocked(!0), a.buffers.depth.setLocked(!0);
|
|
1661
|
-
let
|
|
1662
|
-
this.inverse ? (
|
|
1721
|
+
let i, n;
|
|
1722
|
+
this.inverse ? (i = 0, n = 1) : (i = 1, n = 0), a.buffers.stencil.setTest(!0), a.buffers.stencil.setOp(o.REPLACE, o.REPLACE, o.REPLACE), a.buffers.stencil.setFunc(o.ALWAYS, i, 4294967295), a.buffers.stencil.setClear(n), a.buffers.stencil.setLocked(!0), t.setRenderTarget(s), this.clear && t.clear(), t.render(this.scene, this.camera), t.setRenderTarget(e), this.clear && t.clear(), t.render(this.scene, this.camera), a.buffers.color.setLocked(!1), a.buffers.depth.setLocked(!1), a.buffers.color.setMask(!0), a.buffers.depth.setMask(!0), a.buffers.stencil.setLocked(!1), a.buffers.stencil.setFunc(o.EQUAL, 1, 4294967295), a.buffers.stencil.setOp(o.KEEP, o.KEEP, o.KEEP), a.buffers.stencil.setLocked(!0);
|
|
1663
1723
|
}
|
|
1664
1724
|
}
|
|
1665
|
-
class
|
|
1725
|
+
class Rt extends E {
|
|
1726
|
+
/**
|
|
1727
|
+
* Constructs a new clear mask pass.
|
|
1728
|
+
*/
|
|
1666
1729
|
constructor() {
|
|
1667
1730
|
super(), this.needsSwap = !1;
|
|
1668
1731
|
}
|
|
1732
|
+
/**
|
|
1733
|
+
* Performs the clear of the currently defined mask.
|
|
1734
|
+
*
|
|
1735
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1736
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
1737
|
+
* destination for the pass.
|
|
1738
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
1739
|
+
* previous pass from this buffer.
|
|
1740
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
1741
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
1742
|
+
*/
|
|
1669
1743
|
render(t) {
|
|
1670
1744
|
t.state.buffers.stencil.setLocked(!1), t.state.buffers.stencil.setTest(!1);
|
|
1671
1745
|
}
|
|
1672
1746
|
}
|
|
1673
|
-
class
|
|
1747
|
+
class Nt {
|
|
1748
|
+
/**
|
|
1749
|
+
* Constructs a new effect composer.
|
|
1750
|
+
*
|
|
1751
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1752
|
+
* @param {WebGLRenderTarget} [renderTarget] - This render target and a clone will
|
|
1753
|
+
* be used as the internal read and write buffers. If not given, the composer creates
|
|
1754
|
+
* the buffers automatically.
|
|
1755
|
+
*/
|
|
1674
1756
|
constructor(t, e) {
|
|
1675
1757
|
if (this.renderer = t, this._pixelRatio = t.getPixelRatio(), e === void 0) {
|
|
1676
|
-
const
|
|
1677
|
-
this._width =
|
|
1758
|
+
const s = t.getSize(new d());
|
|
1759
|
+
this._width = s.width, this._height = s.height, e = new D(this._width * this._pixelRatio, this._height * this._pixelRatio, { type: C }), e.texture.name = "EffectComposer.rt1";
|
|
1678
1760
|
} else
|
|
1679
1761
|
this._width = e.width, this._height = e.height;
|
|
1680
|
-
this.renderTarget1 = e, this.renderTarget2 = e.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], this.copyPass = new
|
|
1762
|
+
this.renderTarget1 = e, this.renderTarget2 = e.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], this.copyPass = new Bt(k), this.copyPass.material.blending = nt, this.clock = new lt();
|
|
1681
1763
|
}
|
|
1764
|
+
/**
|
|
1765
|
+
* Swaps the internal read/write buffers.
|
|
1766
|
+
*/
|
|
1682
1767
|
swapBuffers() {
|
|
1683
1768
|
const t = this.readBuffer;
|
|
1684
1769
|
this.readBuffer = this.writeBuffer, this.writeBuffer = t;
|
|
1685
1770
|
}
|
|
1771
|
+
/**
|
|
1772
|
+
* Adds the given pass to the pass chain.
|
|
1773
|
+
*
|
|
1774
|
+
* @param {Pass} pass - The pass to add.
|
|
1775
|
+
*/
|
|
1686
1776
|
addPass(t) {
|
|
1687
1777
|
this.passes.push(t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
|
|
1688
1778
|
}
|
|
1779
|
+
/**
|
|
1780
|
+
* Inserts the given pass at a given index.
|
|
1781
|
+
*
|
|
1782
|
+
* @param {Pass} pass - The pass to insert.
|
|
1783
|
+
* @param {number} index - The index into the pass chain.
|
|
1784
|
+
*/
|
|
1689
1785
|
insertPass(t, e) {
|
|
1690
1786
|
this.passes.splice(e, 0, t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
|
|
1691
1787
|
}
|
|
1788
|
+
/**
|
|
1789
|
+
* Removes the given pass from the pass chain.
|
|
1790
|
+
*
|
|
1791
|
+
* @param {Pass} pass - The pass to remove.
|
|
1792
|
+
*/
|
|
1692
1793
|
removePass(t) {
|
|
1693
1794
|
const e = this.passes.indexOf(t);
|
|
1694
1795
|
e !== -1 && this.passes.splice(e, 1);
|
|
1695
1796
|
}
|
|
1797
|
+
/**
|
|
1798
|
+
* Returns `true` if the pass for the given index is the last enabled pass in the pass chain.
|
|
1799
|
+
*
|
|
1800
|
+
* @param {number} passIndex - The pass index.
|
|
1801
|
+
* @return {boolean} Whether the pass for the given index is the last pass in the pass chain.
|
|
1802
|
+
*/
|
|
1696
1803
|
isLastEnabledPass(t) {
|
|
1697
1804
|
for (let e = t + 1; e < this.passes.length; e++)
|
|
1698
1805
|
if (this.passes[e].enabled)
|
|
1699
1806
|
return !1;
|
|
1700
1807
|
return !0;
|
|
1701
1808
|
}
|
|
1809
|
+
/**
|
|
1810
|
+
* Executes all enabled post-processing passes in order to produce the final frame.
|
|
1811
|
+
*
|
|
1812
|
+
* @param {number} deltaTime - The delta time in seconds. If not given, the composer computes
|
|
1813
|
+
* its own time delta value.
|
|
1814
|
+
*/
|
|
1702
1815
|
render(t) {
|
|
1703
1816
|
t === void 0 && (t = this.clock.getDelta());
|
|
1704
1817
|
const e = this.renderer.getRenderTarget();
|
|
1705
|
-
let
|
|
1706
|
-
for (let
|
|
1707
|
-
const
|
|
1708
|
-
if (
|
|
1709
|
-
if (
|
|
1710
|
-
if (
|
|
1711
|
-
const
|
|
1712
|
-
l.setFunc(
|
|
1818
|
+
let s = !1;
|
|
1819
|
+
for (let o = 0, a = this.passes.length; o < a; o++) {
|
|
1820
|
+
const i = this.passes[o];
|
|
1821
|
+
if (i.enabled !== !1) {
|
|
1822
|
+
if (i.renderToScreen = this.renderToScreen && this.isLastEnabledPass(o), i.render(this.renderer, this.writeBuffer, this.readBuffer, t, s), i.needsSwap) {
|
|
1823
|
+
if (s) {
|
|
1824
|
+
const n = this.renderer.getContext(), l = this.renderer.state.buffers.stencil;
|
|
1825
|
+
l.setFunc(n.NOTEQUAL, 1, 4294967295), this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, t), l.setFunc(n.EQUAL, 1, 4294967295);
|
|
1713
1826
|
}
|
|
1714
1827
|
this.swapBuffers();
|
|
1715
1828
|
}
|
|
1716
|
-
|
|
1829
|
+
He !== void 0 && (i instanceof He ? s = !0 : i instanceof Rt && (s = !1));
|
|
1717
1830
|
}
|
|
1718
1831
|
}
|
|
1719
1832
|
this.renderer.setRenderTarget(e);
|
|
1720
1833
|
}
|
|
1834
|
+
/**
|
|
1835
|
+
* Resets the internal state of the EffectComposer.
|
|
1836
|
+
*
|
|
1837
|
+
* @param {WebGLRenderTarget} [renderTarget] - This render target has the same purpose like
|
|
1838
|
+
* the one from the constructor. If set, it is used to setup the read and write buffers.
|
|
1839
|
+
*/
|
|
1721
1840
|
reset(t) {
|
|
1722
1841
|
if (t === void 0) {
|
|
1723
|
-
const e = this.renderer.getSize(new
|
|
1842
|
+
const e = this.renderer.getSize(new d());
|
|
1724
1843
|
this._pixelRatio = this.renderer.getPixelRatio(), this._width = e.width, this._height = e.height, t = this.renderTarget1.clone(), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
|
|
1725
1844
|
}
|
|
1726
1845
|
this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2;
|
|
1727
1846
|
}
|
|
1847
|
+
/**
|
|
1848
|
+
* Resizes the internal read and write buffers as well as all passes. Similar to {@link WebGLRenderer#setSize},
|
|
1849
|
+
* this method honors the current pixel ration.
|
|
1850
|
+
*
|
|
1851
|
+
* @param {number} width - The width in logical pixels.
|
|
1852
|
+
* @param {number} height - The height in logical pixels.
|
|
1853
|
+
*/
|
|
1728
1854
|
setSize(t, e) {
|
|
1729
1855
|
this._width = t, this._height = e;
|
|
1730
|
-
const
|
|
1731
|
-
this.renderTarget1.setSize(
|
|
1856
|
+
const s = this._width * this._pixelRatio, o = this._height * this._pixelRatio;
|
|
1857
|
+
this.renderTarget1.setSize(s, o), this.renderTarget2.setSize(s, o);
|
|
1732
1858
|
for (let a = 0; a < this.passes.length; a++)
|
|
1733
|
-
this.passes[a].setSize(
|
|
1859
|
+
this.passes[a].setSize(s, o);
|
|
1734
1860
|
}
|
|
1861
|
+
/**
|
|
1862
|
+
* Sets device pixel ratio. This is usually used for HiDPI device to prevent blurring output.
|
|
1863
|
+
* Setting the pixel ratio will automatically resize the composer.
|
|
1864
|
+
*
|
|
1865
|
+
* @param {number} pixelRatio - The pixel ratio to set.
|
|
1866
|
+
*/
|
|
1735
1867
|
setPixelRatio(t) {
|
|
1736
1868
|
this._pixelRatio = t, this.setSize(this._width, this._height);
|
|
1737
1869
|
}
|
|
1870
|
+
/**
|
|
1871
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
1872
|
+
* method whenever the composer is no longer used in your app.
|
|
1873
|
+
*/
|
|
1738
1874
|
dispose() {
|
|
1739
1875
|
this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.copyPass.dispose();
|
|
1740
1876
|
}
|
|
1741
1877
|
}
|
|
1742
|
-
class
|
|
1743
|
-
|
|
1744
|
-
|
|
1878
|
+
class zt extends E {
|
|
1879
|
+
/**
|
|
1880
|
+
* Constructs a new render pass.
|
|
1881
|
+
*
|
|
1882
|
+
* @param {Scene} scene - The scene to render.
|
|
1883
|
+
* @param {Camera} camera - The camera.
|
|
1884
|
+
* @param {?Material} [overrideMaterial=null] - The override material. If set, this material is used
|
|
1885
|
+
* for all objects in the scene.
|
|
1886
|
+
* @param {?(number|Color|string)} [clearColor=null] - The clear color of the render pass.
|
|
1887
|
+
* @param {?number} [clearAlpha=null] - The clear alpha of the render pass.
|
|
1888
|
+
*/
|
|
1889
|
+
constructor(t, e, s = null, o = null, a = null) {
|
|
1890
|
+
super(), this.scene = t, this.camera = e, this.overrideMaterial = s, this.clearColor = o, this.clearAlpha = a, this.clear = !0, this.clearDepth = !1, this.needsSwap = !1, this._oldClearColor = new Q();
|
|
1745
1891
|
}
|
|
1746
|
-
|
|
1747
|
-
|
|
1892
|
+
/**
|
|
1893
|
+
* Performs a beauty pass with the configured scene and camera.
|
|
1894
|
+
*
|
|
1895
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1896
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
1897
|
+
* destination for the pass.
|
|
1898
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
1899
|
+
* previous pass from this buffer.
|
|
1900
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
1901
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
1902
|
+
*/
|
|
1903
|
+
render(t, e, s) {
|
|
1904
|
+
const o = t.autoClear;
|
|
1748
1905
|
t.autoClear = !1;
|
|
1749
|
-
let a,
|
|
1750
|
-
this.overrideMaterial !== null && (
|
|
1906
|
+
let a, i;
|
|
1907
|
+
this.overrideMaterial !== null && (i = this.scene.overrideMaterial, this.scene.overrideMaterial = this.overrideMaterial), this.clearColor !== null && (t.getClearColor(this._oldClearColor), t.setClearColor(this.clearColor, t.getClearAlpha())), this.clearAlpha !== null && (a = t.getClearAlpha(), t.setClearAlpha(this.clearAlpha)), this.clearDepth == !0 && t.clearDepth(), t.setRenderTarget(this.renderToScreen ? null : s), this.clear === !0 && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), t.render(this.scene, this.camera), this.clearColor !== null && t.setClearColor(this._oldClearColor), this.clearAlpha !== null && t.setClearAlpha(a), this.overrideMaterial !== null && (this.scene.overrideMaterial = i), t.autoClear = o;
|
|
1751
1908
|
}
|
|
1752
1909
|
}
|
|
1753
|
-
const
|
|
1910
|
+
const Ke = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
|
|
1754
1911
|
__name: "EffectComposer",
|
|
1755
1912
|
props: {
|
|
1756
1913
|
enabled: { type: Boolean, default: !0 },
|
|
1757
1914
|
withoutRenderPass: { type: Boolean }
|
|
1758
1915
|
},
|
|
1759
|
-
setup(
|
|
1760
|
-
const e =
|
|
1761
|
-
|
|
1762
|
-
const { renderer:
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
const { width: c, height: S } = a;
|
|
1769
|
-
S.value && c.value && ((m = o.value) == null || m.setSize(c.value, S.value));
|
|
1770
|
-
});
|
|
1771
|
-
const { pixelRatio: p } = Ye();
|
|
1772
|
-
w(() => {
|
|
1773
|
-
var c;
|
|
1774
|
-
(c = o.value) == null || c.setPixelRatio(p.value);
|
|
1775
|
-
}), e.withoutRenderPass || w(() => {
|
|
1776
|
-
i.value && r.value && o.value && o.value.addPass(new Rt(r.value, i.value));
|
|
1916
|
+
setup(r, { expose: t }) {
|
|
1917
|
+
const e = r, s = W(null);
|
|
1918
|
+
je(Ke, s), t({ composer: s });
|
|
1919
|
+
const { renderer: o, sizes: a, scene: i, camera: n } = G();
|
|
1920
|
+
S(() => {
|
|
1921
|
+
s.value?.dispose(), s.value = new Nt(o.instance);
|
|
1922
|
+
}), S(() => {
|
|
1923
|
+
const { width: h, height: x } = a;
|
|
1924
|
+
x.value && h.value && s.value?.setSize(h.value, x.value);
|
|
1777
1925
|
});
|
|
1778
|
-
const {
|
|
1779
|
-
return
|
|
1780
|
-
|
|
1781
|
-
}),
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1926
|
+
const { pixelRatio: u } = qe();
|
|
1927
|
+
return S(() => {
|
|
1928
|
+
s.value?.setPixelRatio(u.value);
|
|
1929
|
+
}), e.withoutRenderPass || S(() => {
|
|
1930
|
+
n.activeCamera.value && i.value && s.value && s.value.addPass(new zt(i.value, n.activeCamera.value));
|
|
1931
|
+
}), o.replaceRenderFunction((h) => {
|
|
1932
|
+
s.value && e.enabled && (s.value.render(), h());
|
|
1933
|
+
}), N(() => {
|
|
1934
|
+
s.value?.dispose();
|
|
1935
|
+
}), (h, x) => Ve(h.$slots, "default");
|
|
1936
|
+
}
|
|
1937
|
+
}), z = (r, t, e) => {
|
|
1787
1938
|
if (!t && e)
|
|
1788
1939
|
throw new Error("passDependencies is required when dependencyFieldsTriggeringRecreation is provided");
|
|
1789
|
-
const
|
|
1790
|
-
t &&
|
|
1791
|
-
const
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
!(o != null && o.value) || !a.height.value || !a.width.value || (o.value.addPass(s.value), ce(() => l()));
|
|
1940
|
+
const s = K(Ke), o = W(r()), { sizes: a, invalidate: i } = T();
|
|
1941
|
+
t && m(t, () => i());
|
|
1942
|
+
const n = () => {
|
|
1943
|
+
s?.value?.removePass(o.value), o.value.dispose();
|
|
1944
|
+
}, l = S(() => {
|
|
1945
|
+
!s?.value || !a.height.value || !a.width.value || (s.value.addPass(o.value), fe(() => l()));
|
|
1796
1946
|
});
|
|
1797
|
-
return e &&
|
|
1798
|
-
() => e.map((
|
|
1947
|
+
return e && m(
|
|
1948
|
+
() => e.map((u) => t?.[u]),
|
|
1799
1949
|
() => {
|
|
1800
|
-
if (!
|
|
1950
|
+
if (!s?.value)
|
|
1801
1951
|
return;
|
|
1802
|
-
const
|
|
1803
|
-
~
|
|
1952
|
+
const u = s.value.passes.findIndex((h) => h === o.value);
|
|
1953
|
+
~u && (n(), o.value = r(), s.value.insertPass(o.value, u));
|
|
1804
1954
|
}
|
|
1805
|
-
),
|
|
1806
|
-
|
|
1807
|
-
}), { pass:
|
|
1808
|
-
},
|
|
1955
|
+
), N(() => {
|
|
1956
|
+
n();
|
|
1957
|
+
}), { pass: o };
|
|
1958
|
+
}, ue = {
|
|
1809
1959
|
uniforms: {
|
|
1810
1960
|
tDiffuse: { value: null },
|
|
1811
1961
|
//diffuse texture
|
|
@@ -1900,54 +2050,73 @@ const Qe = Symbol("effectComposerThree"), yo = /* @__PURE__ */ u({
|
|
|
1900
2050
|
}`
|
|
1901
2051
|
)
|
|
1902
2052
|
};
|
|
1903
|
-
class
|
|
2053
|
+
class Ie extends E {
|
|
2054
|
+
/**
|
|
2055
|
+
* Constructs a new glitch pass.
|
|
2056
|
+
*
|
|
2057
|
+
* @param {number} [dt_size=64] - The size of the displacement texture
|
|
2058
|
+
* for digital glitch squares.
|
|
2059
|
+
*/
|
|
1904
2060
|
constructor(t = 64) {
|
|
1905
|
-
super()
|
|
1906
|
-
const e = Nt;
|
|
1907
|
-
this.uniforms = L.clone(e.uniforms), this.heightMap = this.generateHeightmap(t), this.uniforms.tDisp.value = this.heightMap, this.material = new T({
|
|
2061
|
+
super(), this.uniforms = P.clone(ue.uniforms), this.material = new y({
|
|
1908
2062
|
uniforms: this.uniforms,
|
|
1909
|
-
vertexShader:
|
|
1910
|
-
fragmentShader:
|
|
1911
|
-
}), this.
|
|
2063
|
+
vertexShader: ue.vertexShader,
|
|
2064
|
+
fragmentShader: ue.fragmentShader
|
|
2065
|
+
}), this.goWild = !1, this._heightMap = this._generateHeightmap(t), this.uniforms.tDisp.value = this.heightMap, this._fsQuad = new O(this.material), this._curF = 0, this._randX = 0, this._generateTrigger();
|
|
1912
2066
|
}
|
|
1913
|
-
|
|
1914
|
-
|
|
2067
|
+
/**
|
|
2068
|
+
* Performs the glitch pass.
|
|
2069
|
+
*
|
|
2070
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
2071
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
2072
|
+
* destination for the pass.
|
|
2073
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
2074
|
+
* previous pass from this buffer.
|
|
2075
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
2076
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
2077
|
+
*/
|
|
2078
|
+
render(t, e, s) {
|
|
2079
|
+
this.uniforms.tDiffuse.value = s.texture, this.uniforms.seed.value = Math.random(), this.uniforms.byp.value = 0, this._curF % this._randX == 0 || this.goWild == !0 ? (this.uniforms.amount.value = Math.random() / 30, this.uniforms.angle.value = A.randFloat(-Math.PI, Math.PI), this.uniforms.seed_x.value = A.randFloat(-1, 1), this.uniforms.seed_y.value = A.randFloat(-1, 1), this.uniforms.distortion_x.value = A.randFloat(0, 1), this.uniforms.distortion_y.value = A.randFloat(0, 1), this._curF = 0, this._generateTrigger()) : this._curF % this._randX < this._randX / 5 ? (this.uniforms.amount.value = Math.random() / 90, this.uniforms.angle.value = A.randFloat(-Math.PI, Math.PI), this.uniforms.distortion_x.value = A.randFloat(0, 1), this.uniforms.distortion_y.value = A.randFloat(0, 1), this.uniforms.seed_x.value = A.randFloat(-0.3, 0.3), this.uniforms.seed_y.value = A.randFloat(-0.3, 0.3)) : this.goWild == !1 && (this.uniforms.byp.value = 1), this._curF++, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this._fsQuad.render(t));
|
|
1915
2080
|
}
|
|
1916
|
-
|
|
1917
|
-
|
|
2081
|
+
/**
|
|
2082
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
2083
|
+
* method whenever the pass is no longer used in your app.
|
|
2084
|
+
*/
|
|
2085
|
+
dispose() {
|
|
2086
|
+
this.material.dispose(), this.heightMap.dispose(), this._fsQuad.dispose();
|
|
1918
2087
|
}
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
const r = M.randFloat(0, 1);
|
|
1923
|
-
e[a] = r;
|
|
1924
|
-
}
|
|
1925
|
-
const s = new it(e, t, t, lt, ut);
|
|
1926
|
-
return s.needsUpdate = !0, s;
|
|
2088
|
+
// internals
|
|
2089
|
+
_generateTrigger() {
|
|
2090
|
+
this._randX = A.randInt(120, 240);
|
|
1927
2091
|
}
|
|
1928
|
-
|
|
1929
|
-
|
|
2092
|
+
_generateHeightmap(t) {
|
|
2093
|
+
const e = new Float32Array(t * t), s = t * t;
|
|
2094
|
+
for (let a = 0; a < s; a++) {
|
|
2095
|
+
const i = A.randFloat(0, 1);
|
|
2096
|
+
e[a] = i;
|
|
2097
|
+
}
|
|
2098
|
+
const o = new ct(e, t, t, ut, dt);
|
|
2099
|
+
return o.needsUpdate = !0, o;
|
|
1930
2100
|
}
|
|
1931
2101
|
}
|
|
1932
|
-
const Mo = /* @__PURE__ */
|
|
2102
|
+
const Mo = /* @__PURE__ */ c({
|
|
1933
2103
|
__name: "Glitch",
|
|
1934
2104
|
props: {
|
|
1935
2105
|
dtSize: {},
|
|
1936
2106
|
goWild: { type: Boolean }
|
|
1937
2107
|
},
|
|
1938
|
-
setup(
|
|
1939
|
-
const e =
|
|
1940
|
-
t({ pass:
|
|
1941
|
-
const { onBeforeRender:
|
|
1942
|
-
return
|
|
2108
|
+
setup(r, { expose: t }) {
|
|
2109
|
+
const e = r, { pass: s } = z(() => new Ie(e.dtSize), e, ["dtSize"]), { invalidate: o } = T();
|
|
2110
|
+
t({ pass: s });
|
|
2111
|
+
const { onBeforeRender: a } = he();
|
|
2112
|
+
return a(() => o()), p(
|
|
1943
2113
|
[[() => e.goWild, "goWild"]],
|
|
1944
|
-
|
|
1945
|
-
() => new
|
|
2114
|
+
s,
|
|
2115
|
+
() => new Ie()
|
|
1946
2116
|
), () => {
|
|
1947
2117
|
};
|
|
1948
2118
|
}
|
|
1949
|
-
}),
|
|
1950
|
-
name: "HalftoneShader",
|
|
2119
|
+
}), q = {
|
|
1951
2120
|
uniforms: {
|
|
1952
2121
|
tDiffuse: { value: null },
|
|
1953
2122
|
shape: { value: 1 },
|
|
@@ -2250,28 +2419,54 @@ const Mo = /* @__PURE__ */ u({
|
|
|
2250
2419
|
}`
|
|
2251
2420
|
)
|
|
2252
2421
|
};
|
|
2253
|
-
class
|
|
2254
|
-
|
|
2255
|
-
|
|
2422
|
+
class Ut extends E {
|
|
2423
|
+
/**
|
|
2424
|
+
* Constructs a new halftone pass.
|
|
2425
|
+
*
|
|
2426
|
+
* @param {Object} params - The halftone shader parameter.
|
|
2427
|
+
*/
|
|
2428
|
+
constructor(t) {
|
|
2429
|
+
super(), this.uniforms = P.clone(q.uniforms), this.material = new y({
|
|
2256
2430
|
uniforms: this.uniforms,
|
|
2257
|
-
fragmentShader:
|
|
2258
|
-
vertexShader:
|
|
2259
|
-
})
|
|
2260
|
-
for (const
|
|
2261
|
-
|
|
2262
|
-
this.
|
|
2431
|
+
fragmentShader: q.fragmentShader,
|
|
2432
|
+
vertexShader: q.vertexShader
|
|
2433
|
+
});
|
|
2434
|
+
for (const e in t)
|
|
2435
|
+
t.hasOwnProperty(e) && this.uniforms.hasOwnProperty(e) && (this.uniforms[e].value = t[e]);
|
|
2436
|
+
this._fsQuad = new O(this.material);
|
|
2263
2437
|
}
|
|
2264
|
-
|
|
2265
|
-
|
|
2438
|
+
/**
|
|
2439
|
+
* Performs the halftone pass.
|
|
2440
|
+
*
|
|
2441
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
2442
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
2443
|
+
* destination for the pass.
|
|
2444
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
2445
|
+
* previous pass from this buffer.
|
|
2446
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
2447
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
2448
|
+
*/
|
|
2449
|
+
render(t, e, s) {
|
|
2450
|
+
this.material.uniforms.tDiffuse.value = s.texture, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this._fsQuad.render(t));
|
|
2266
2451
|
}
|
|
2452
|
+
/**
|
|
2453
|
+
* Sets the size of the pass.
|
|
2454
|
+
*
|
|
2455
|
+
* @param {number} width - The width to set.
|
|
2456
|
+
* @param {number} height - The height to set.
|
|
2457
|
+
*/
|
|
2267
2458
|
setSize(t, e) {
|
|
2268
2459
|
this.uniforms.width.value = t, this.uniforms.height.value = e;
|
|
2269
2460
|
}
|
|
2461
|
+
/**
|
|
2462
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
2463
|
+
* method whenever the pass is no longer used in your app.
|
|
2464
|
+
*/
|
|
2270
2465
|
dispose() {
|
|
2271
|
-
this.material.dispose(), this.
|
|
2466
|
+
this.material.dispose(), this._fsQuad.dispose();
|
|
2272
2467
|
}
|
|
2273
2468
|
}
|
|
2274
|
-
const To = /* @__PURE__ */
|
|
2469
|
+
const To = /* @__PURE__ */ c({
|
|
2275
2470
|
__name: "Halftone",
|
|
2276
2471
|
props: {
|
|
2277
2472
|
shape: {},
|
|
@@ -2284,61 +2479,85 @@ const To = /* @__PURE__ */ u({
|
|
|
2284
2479
|
greyscale: { type: Boolean },
|
|
2285
2480
|
blendingMode: {}
|
|
2286
2481
|
},
|
|
2287
|
-
setup(
|
|
2288
|
-
const e =
|
|
2482
|
+
setup(r, { expose: t }) {
|
|
2483
|
+
const e = r, { sizes: s } = G(), o = L(
|
|
2289
2484
|
() => Object.fromEntries(
|
|
2290
|
-
Object.entries(e).filter(([
|
|
2485
|
+
Object.entries(e).filter(([i, n]) => n !== void 0)
|
|
2291
2486
|
)
|
|
2292
|
-
), { pass: a } =
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
a.value.setSize(o.width.value, o.height.value);
|
|
2299
|
-
}), w(() => {
|
|
2300
|
-
Object.entries(e).forEach(([r, i]) => {
|
|
2301
|
-
r in a.value.uniforms && (a.value.uniforms[r].value = i ?? Q.uniforms[r].value);
|
|
2487
|
+
), { pass: a } = z(() => new Ut(o.value), e);
|
|
2488
|
+
return t({ pass: a }), S(() => {
|
|
2489
|
+
a.value.setSize(s.width.value, s.height.value);
|
|
2490
|
+
}), S(() => {
|
|
2491
|
+
Object.entries(e).forEach(([i, n]) => {
|
|
2492
|
+
i in a.value.uniforms && (a.value.uniforms[i].value = n ?? q.uniforms[i].value);
|
|
2302
2493
|
});
|
|
2303
2494
|
}), () => {
|
|
2304
2495
|
};
|
|
2305
2496
|
}
|
|
2306
2497
|
});
|
|
2307
|
-
class
|
|
2308
|
-
|
|
2309
|
-
|
|
2498
|
+
class Xe extends E {
|
|
2499
|
+
/**
|
|
2500
|
+
* Constructs a new render pixelated pass.
|
|
2501
|
+
*
|
|
2502
|
+
* @param {number} pixelSize - The effect's pixel size.
|
|
2503
|
+
* @param {Scene} scene - The scene to render.
|
|
2504
|
+
* @param {Camera} camera - The camera.
|
|
2505
|
+
* @param {{normalEdgeStrength:number,depthEdgeStrength:number}} options - The pass options.
|
|
2506
|
+
*/
|
|
2507
|
+
constructor(t, e, s, o = {}) {
|
|
2508
|
+
super(), this.pixelSize = t, this.scene = e, this.camera = s, this.normalEdgeStrength = o.normalEdgeStrength || 0.3, this.depthEdgeStrength = o.depthEdgeStrength || 0.4, this.pixelatedMaterial = this._createPixelatedMaterial(), this._resolution = new d(), this._renderResolution = new d(), this._normalMaterial = new ft(), this._beautyRenderTarget = new D(), this._beautyRenderTarget.texture.minFilter = B, this._beautyRenderTarget.texture.magFilter = B, this._beautyRenderTarget.texture.type = C, this._beautyRenderTarget.depthTexture = new ht(), this._normalRenderTarget = new D(), this._normalRenderTarget.texture.minFilter = B, this._normalRenderTarget.texture.magFilter = B, this._normalRenderTarget.texture.type = C, this._fsQuad = new O(this.pixelatedMaterial);
|
|
2310
2509
|
}
|
|
2510
|
+
/**
|
|
2511
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
2512
|
+
* method whenever the pass is no longer used in your app.
|
|
2513
|
+
*/
|
|
2311
2514
|
dispose() {
|
|
2312
|
-
this.
|
|
2515
|
+
this._beautyRenderTarget.dispose(), this._normalRenderTarget.dispose(), this.pixelatedMaterial.dispose(), this._normalMaterial.dispose(), this._fsQuad.dispose();
|
|
2313
2516
|
}
|
|
2517
|
+
/**
|
|
2518
|
+
* Sets the size of the pass.
|
|
2519
|
+
*
|
|
2520
|
+
* @param {number} width - The width to set.
|
|
2521
|
+
* @param {number} height - The height to set.
|
|
2522
|
+
*/
|
|
2314
2523
|
setSize(t, e) {
|
|
2315
|
-
this.
|
|
2316
|
-
const { x:
|
|
2317
|
-
this.
|
|
2524
|
+
this._resolution.set(t, e), this._renderResolution.set(t / this.pixelSize | 0, e / this.pixelSize | 0);
|
|
2525
|
+
const { x: s, y: o } = this._renderResolution;
|
|
2526
|
+
this._beautyRenderTarget.setSize(s, o), this._normalRenderTarget.setSize(s, o), this._fsQuad.material.uniforms.resolution.value.set(s, o, 1 / s, 1 / o);
|
|
2318
2527
|
}
|
|
2528
|
+
/**
|
|
2529
|
+
* Sets the effect's pixel size.
|
|
2530
|
+
*
|
|
2531
|
+
* @param {number} pixelSize - The pixel size to set.
|
|
2532
|
+
*/
|
|
2319
2533
|
setPixelSize(t) {
|
|
2320
|
-
this.pixelSize = t, this.setSize(this.
|
|
2534
|
+
this.pixelSize = t, this.setSize(this._resolution.x, this._resolution.y);
|
|
2321
2535
|
}
|
|
2536
|
+
/**
|
|
2537
|
+
* Performs the pixelation pass.
|
|
2538
|
+
*
|
|
2539
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
2540
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
2541
|
+
* destination for the pass.
|
|
2542
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
2543
|
+
* previous pass from this buffer.
|
|
2544
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
2545
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
2546
|
+
*/
|
|
2322
2547
|
render(t, e) {
|
|
2323
|
-
const
|
|
2324
|
-
|
|
2325
|
-
const
|
|
2326
|
-
t.setRenderTarget(this.
|
|
2327
|
-
}
|
|
2328
|
-
|
|
2329
|
-
|
|
2548
|
+
const s = this._fsQuad.material.uniforms;
|
|
2549
|
+
s.normalEdgeStrength.value = this.normalEdgeStrength, s.depthEdgeStrength.value = this.depthEdgeStrength, t.setRenderTarget(this._beautyRenderTarget), t.render(this.scene, this.camera);
|
|
2550
|
+
const o = this.scene.overrideMaterial;
|
|
2551
|
+
t.setRenderTarget(this._normalRenderTarget), this.scene.overrideMaterial = this._normalMaterial, t.render(this.scene, this.camera), this.scene.overrideMaterial = o, s.tDiffuse.value = this._beautyRenderTarget.texture, s.tDepth.value = this._beautyRenderTarget.depthTexture, s.tNormal.value = this._normalRenderTarget.texture, this.renderToScreen ? t.setRenderTarget(null) : (t.setRenderTarget(e), this.clear && t.clear()), this._fsQuad.render(t);
|
|
2552
|
+
}
|
|
2553
|
+
// internals
|
|
2554
|
+
_createPixelatedMaterial() {
|
|
2555
|
+
return new y({
|
|
2330
2556
|
uniforms: {
|
|
2331
2557
|
tDiffuse: { value: null },
|
|
2332
2558
|
tDepth: { value: null },
|
|
2333
2559
|
tNormal: { value: null },
|
|
2334
|
-
resolution: {
|
|
2335
|
-
value: new ft(
|
|
2336
|
-
this.renderResolution.x,
|
|
2337
|
-
this.renderResolution.y,
|
|
2338
|
-
1 / this.renderResolution.x,
|
|
2339
|
-
1 / this.renderResolution.y
|
|
2340
|
-
)
|
|
2341
|
-
},
|
|
2560
|
+
resolution: { value: new pt() },
|
|
2342
2561
|
normalEdgeStrength: { value: 0 },
|
|
2343
2562
|
depthEdgeStrength: { value: 0 }
|
|
2344
2563
|
},
|
|
@@ -2451,28 +2670,28 @@ class Ge extends D {
|
|
|
2451
2670
|
});
|
|
2452
2671
|
}
|
|
2453
2672
|
}
|
|
2454
|
-
const Co = /* @__PURE__ */
|
|
2673
|
+
const Co = /* @__PURE__ */ c({
|
|
2455
2674
|
__name: "Pixelation",
|
|
2456
2675
|
props: {
|
|
2457
2676
|
pixelSize: {},
|
|
2458
2677
|
depthEdgeStrength: {},
|
|
2459
2678
|
normalEdgeStrength: {}
|
|
2460
2679
|
},
|
|
2461
|
-
setup(
|
|
2462
|
-
const e =
|
|
2463
|
-
return t({ pass: a }),
|
|
2680
|
+
setup(r, { expose: t }) {
|
|
2681
|
+
const e = r, { scene: s, camera: o } = T(), { pass: a } = z(() => new Xe(e.pixelSize, s.value, o.value), e);
|
|
2682
|
+
return t({ pass: a }), S(() => {
|
|
2464
2683
|
a.value.setPixelSize(e.pixelSize);
|
|
2465
|
-
}),
|
|
2684
|
+
}), p(
|
|
2466
2685
|
[
|
|
2467
2686
|
[() => e.depthEdgeStrength, "depthEdgeStrength"],
|
|
2468
2687
|
[() => e.normalEdgeStrength, "normalEdgeStrength"]
|
|
2469
2688
|
],
|
|
2470
2689
|
a,
|
|
2471
|
-
() => new
|
|
2690
|
+
() => new Xe(1, s.value, o.value)
|
|
2472
2691
|
), () => {
|
|
2473
2692
|
};
|
|
2474
2693
|
}
|
|
2475
|
-
}),
|
|
2694
|
+
}), j = {
|
|
2476
2695
|
name: "OutputShader",
|
|
2477
2696
|
uniforms: {
|
|
2478
2697
|
tDiffuse: { value: null },
|
|
@@ -2558,39 +2777,54 @@ const Co = /* @__PURE__ */ u({
|
|
|
2558
2777
|
}`
|
|
2559
2778
|
)
|
|
2560
2779
|
};
|
|
2561
|
-
class
|
|
2780
|
+
class Wt extends E {
|
|
2781
|
+
/**
|
|
2782
|
+
* Constructs a new output pass.
|
|
2783
|
+
*/
|
|
2562
2784
|
constructor() {
|
|
2563
|
-
super()
|
|
2564
|
-
|
|
2565
|
-
this.uniforms = L.clone(t.uniforms), this.material = new ht({
|
|
2566
|
-
name: t.name,
|
|
2785
|
+
super(), this.uniforms = P.clone(j.uniforms), this.material = new mt({
|
|
2786
|
+
name: j.name,
|
|
2567
2787
|
uniforms: this.uniforms,
|
|
2568
|
-
vertexShader:
|
|
2569
|
-
fragmentShader:
|
|
2570
|
-
}), this.
|
|
2788
|
+
vertexShader: j.vertexShader,
|
|
2789
|
+
fragmentShader: j.fragmentShader
|
|
2790
|
+
}), this._fsQuad = new O(this.material), this._outputColorSpace = null, this._toneMapping = null;
|
|
2571
2791
|
}
|
|
2572
|
-
|
|
2573
|
-
|
|
2792
|
+
/**
|
|
2793
|
+
* Performs the output pass.
|
|
2794
|
+
*
|
|
2795
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
2796
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
2797
|
+
* destination for the pass.
|
|
2798
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
2799
|
+
* previous pass from this buffer.
|
|
2800
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
2801
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
2802
|
+
*/
|
|
2803
|
+
render(t, e, s) {
|
|
2804
|
+
this.uniforms.tDiffuse.value = s.texture, this.uniforms.toneMappingExposure.value = t.toneMappingExposure, (this._outputColorSpace !== t.outputColorSpace || this._toneMapping !== t.toneMapping) && (this._outputColorSpace = t.outputColorSpace, this._toneMapping = t.toneMapping, this.material.defines = {}, vt.getTransfer(this._outputColorSpace) === gt && (this.material.defines.SRGB_TRANSFER = ""), this._toneMapping === xt ? this.material.defines.LINEAR_TONE_MAPPING = "" : this._toneMapping === bt ? this.material.defines.REINHARD_TONE_MAPPING = "" : this._toneMapping === St ? this.material.defines.CINEON_TONE_MAPPING = "" : this._toneMapping === wt ? this.material.defines.ACES_FILMIC_TONE_MAPPING = "" : this._toneMapping === At ? this.material.defines.AGX_TONE_MAPPING = "" : this._toneMapping === yt ? this.material.defines.NEUTRAL_TONE_MAPPING = "" : this._toneMapping === Mt && (this.material.defines.CUSTOM_TONE_MAPPING = ""), this.material.needsUpdate = !0), this.renderToScreen === !0 ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), this._fsQuad.render(t));
|
|
2574
2805
|
}
|
|
2806
|
+
/**
|
|
2807
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
2808
|
+
* method whenever the pass is no longer used in your app.
|
|
2809
|
+
*/
|
|
2575
2810
|
dispose() {
|
|
2576
|
-
this.material.dispose(), this.
|
|
2811
|
+
this.material.dispose(), this._fsQuad.dispose();
|
|
2577
2812
|
}
|
|
2578
2813
|
}
|
|
2579
|
-
const Eo = /* @__PURE__ */
|
|
2814
|
+
const Eo = /* @__PURE__ */ c({
|
|
2580
2815
|
__name: "Output",
|
|
2581
|
-
setup(
|
|
2582
|
-
const { pass: e } =
|
|
2816
|
+
setup(r, { expose: t }) {
|
|
2817
|
+
const { pass: e } = z(() => new Wt());
|
|
2583
2818
|
return t({ pass: e }), () => {
|
|
2584
2819
|
};
|
|
2585
2820
|
}
|
|
2586
|
-
}),
|
|
2587
|
-
name: "SMAAEdgesShader",
|
|
2821
|
+
}), V = {
|
|
2588
2822
|
defines: {
|
|
2589
2823
|
SMAA_THRESHOLD: "0.1"
|
|
2590
2824
|
},
|
|
2591
2825
|
uniforms: {
|
|
2592
2826
|
tDiffuse: { value: null },
|
|
2593
|
-
resolution: { value: new
|
|
2827
|
+
resolution: { value: new d(1 / 1024, 1 / 512) }
|
|
2594
2828
|
},
|
|
2595
2829
|
vertexShader: (
|
|
2596
2830
|
/* glsl */
|
|
@@ -2684,8 +2918,7 @@ const Eo = /* @__PURE__ */ u({
|
|
|
2684
2918
|
|
|
2685
2919
|
}`
|
|
2686
2920
|
)
|
|
2687
|
-
},
|
|
2688
|
-
name: "SMAAWeightsShader",
|
|
2921
|
+
}, _ = {
|
|
2689
2922
|
defines: {
|
|
2690
2923
|
SMAA_MAX_SEARCH_STEPS: "8",
|
|
2691
2924
|
SMAA_AREATEX_MAX_DISTANCE: "16",
|
|
@@ -2696,7 +2929,7 @@ const Eo = /* @__PURE__ */ u({
|
|
|
2696
2929
|
tDiffuse: { value: null },
|
|
2697
2930
|
tArea: { value: null },
|
|
2698
2931
|
tSearch: { value: null },
|
|
2699
|
-
resolution: { value: new
|
|
2932
|
+
resolution: { value: new d(1 / 1024, 1 / 512) }
|
|
2700
2933
|
},
|
|
2701
2934
|
vertexShader: (
|
|
2702
2935
|
/* glsl */
|
|
@@ -2934,12 +3167,11 @@ const Eo = /* @__PURE__ */ u({
|
|
|
2934
3167
|
|
|
2935
3168
|
}`
|
|
2936
3169
|
)
|
|
2937
|
-
},
|
|
2938
|
-
name: "SMAABlendShader",
|
|
3170
|
+
}, de = {
|
|
2939
3171
|
uniforms: {
|
|
2940
3172
|
tDiffuse: { value: null },
|
|
2941
3173
|
tColor: { value: null },
|
|
2942
|
-
resolution: { value: new
|
|
3174
|
+
resolution: { value: new d(1 / 1024, 1 / 512) }
|
|
2943
3175
|
},
|
|
2944
3176
|
vertexShader: (
|
|
2945
3177
|
/* glsl */
|
|
@@ -3024,75 +3256,98 @@ const Eo = /* @__PURE__ */ u({
|
|
|
3024
3256
|
}`
|
|
3025
3257
|
)
|
|
3026
3258
|
};
|
|
3027
|
-
class Gt extends
|
|
3028
|
-
|
|
3029
|
-
|
|
3259
|
+
class Gt extends E {
|
|
3260
|
+
/**
|
|
3261
|
+
* Constructs a new SMAA pass.
|
|
3262
|
+
*/
|
|
3263
|
+
constructor() {
|
|
3264
|
+
super(), this._edgesRT = new D(1, 1, {
|
|
3030
3265
|
depthBuffer: !1,
|
|
3031
|
-
type:
|
|
3032
|
-
}), this.
|
|
3266
|
+
type: C
|
|
3267
|
+
}), this._edgesRT.texture.name = "SMAAPass.edges", this._weightsRT = new D(1, 1, {
|
|
3033
3268
|
depthBuffer: !1,
|
|
3034
|
-
type:
|
|
3035
|
-
}), this.
|
|
3036
|
-
const
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
}, this.
|
|
3040
|
-
const
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
}, this.
|
|
3044
|
-
defines: Object.assign({},
|
|
3045
|
-
uniforms: this.
|
|
3046
|
-
vertexShader:
|
|
3047
|
-
fragmentShader:
|
|
3048
|
-
}), this.
|
|
3049
|
-
defines: Object.assign({},
|
|
3050
|
-
uniforms: this.
|
|
3051
|
-
vertexShader:
|
|
3052
|
-
fragmentShader:
|
|
3053
|
-
}), this.
|
|
3054
|
-
uniforms: this.
|
|
3055
|
-
vertexShader:
|
|
3056
|
-
fragmentShader:
|
|
3057
|
-
}), this.
|
|
3269
|
+
type: C
|
|
3270
|
+
}), this._weightsRT.texture.name = "SMAAPass.weights";
|
|
3271
|
+
const t = this, e = new Image();
|
|
3272
|
+
e.src = this._getAreaTexture(), e.onload = function() {
|
|
3273
|
+
t._areaTexture.needsUpdate = !0;
|
|
3274
|
+
}, this._areaTexture = new Be(), this._areaTexture.name = "SMAAPass.area", this._areaTexture.image = e, this._areaTexture.minFilter = Tt, this._areaTexture.generateMipmaps = !1, this._areaTexture.flipY = !1;
|
|
3275
|
+
const s = new Image();
|
|
3276
|
+
s.src = this._getSearchTexture(), s.onload = function() {
|
|
3277
|
+
t._searchTexture.needsUpdate = !0;
|
|
3278
|
+
}, this._searchTexture = new Be(), this._searchTexture.name = "SMAAPass.search", this._searchTexture.image = s, this._searchTexture.magFilter = B, this._searchTexture.minFilter = B, this._searchTexture.generateMipmaps = !1, this._searchTexture.flipY = !1, this._uniformsEdges = P.clone(V.uniforms), this._materialEdges = new y({
|
|
3279
|
+
defines: Object.assign({}, V.defines),
|
|
3280
|
+
uniforms: this._uniformsEdges,
|
|
3281
|
+
vertexShader: V.vertexShader,
|
|
3282
|
+
fragmentShader: V.fragmentShader
|
|
3283
|
+
}), this._uniformsWeights = P.clone(_.uniforms), this._uniformsWeights.tDiffuse.value = this._edgesRT.texture, this._uniformsWeights.tArea.value = this._areaTexture, this._uniformsWeights.tSearch.value = this._searchTexture, this._materialWeights = new y({
|
|
3284
|
+
defines: Object.assign({}, _.defines),
|
|
3285
|
+
uniforms: this._uniformsWeights,
|
|
3286
|
+
vertexShader: _.vertexShader,
|
|
3287
|
+
fragmentShader: _.fragmentShader
|
|
3288
|
+
}), this._uniformsBlend = P.clone(de.uniforms), this._uniformsBlend.tDiffuse.value = this._weightsRT.texture, this._materialBlend = new y({
|
|
3289
|
+
uniforms: this._uniformsBlend,
|
|
3290
|
+
vertexShader: de.vertexShader,
|
|
3291
|
+
fragmentShader: de.fragmentShader
|
|
3292
|
+
}), this._fsQuad = new O(null);
|
|
3058
3293
|
}
|
|
3059
|
-
|
|
3060
|
-
|
|
3294
|
+
/**
|
|
3295
|
+
* Performs the SMAA pass.
|
|
3296
|
+
*
|
|
3297
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
3298
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
3299
|
+
* destination for the pass.
|
|
3300
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
3301
|
+
* previous pass from this buffer.
|
|
3302
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
3303
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
3304
|
+
*/
|
|
3305
|
+
render(t, e, s) {
|
|
3306
|
+
this._uniformsEdges.tDiffuse.value = s.texture, this._fsQuad.material = this._materialEdges, t.setRenderTarget(this._edgesRT), this.clear && t.clear(), this._fsQuad.render(t), this._fsQuad.material = this._materialWeights, t.setRenderTarget(this._weightsRT), this.clear && t.clear(), this._fsQuad.render(t), this._uniformsBlend.tColor.value = s.texture, this._fsQuad.material = this._materialBlend, this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(e), this.clear && t.clear(), this._fsQuad.render(t));
|
|
3061
3307
|
}
|
|
3308
|
+
/**
|
|
3309
|
+
* Sets the size of the pass.
|
|
3310
|
+
*
|
|
3311
|
+
* @param {number} width - The width to set.
|
|
3312
|
+
* @param {number} height - The height to set.
|
|
3313
|
+
*/
|
|
3062
3314
|
setSize(t, e) {
|
|
3063
|
-
this.
|
|
3315
|
+
this._edgesRT.setSize(t, e), this._weightsRT.setSize(t, e), this._materialEdges.uniforms.resolution.value.set(1 / t, 1 / e), this._materialWeights.uniforms.resolution.value.set(1 / t, 1 / e), this._materialBlend.uniforms.resolution.value.set(1 / t, 1 / e);
|
|
3064
3316
|
}
|
|
3065
|
-
|
|
3317
|
+
/**
|
|
3318
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
3319
|
+
* method whenever the pass is no longer used in your app.
|
|
3320
|
+
*/
|
|
3321
|
+
dispose() {
|
|
3322
|
+
this._edgesRT.dispose(), this._weightsRT.dispose(), this._areaTexture.dispose(), this._searchTexture.dispose(), this._materialEdges.dispose(), this._materialWeights.dispose(), this._materialBlend.dispose(), this._fsQuad.dispose();
|
|
3323
|
+
}
|
|
3324
|
+
// internals
|
|
3325
|
+
_getAreaTexture() {
|
|
3066
3326
|
return "data:image/png;base64,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";
|
|
3067
3327
|
}
|
|
3068
|
-
|
|
3328
|
+
_getSearchTexture() {
|
|
3069
3329
|
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=";
|
|
3070
3330
|
}
|
|
3071
|
-
dispose() {
|
|
3072
|
-
this.edgesRT.dispose(), this.weightsRT.dispose(), this.areaTexture.dispose(), this.searchTexture.dispose(), this.materialEdges.dispose(), this.materialWeights.dispose(), this.materialBlend.dispose(), this.fsQuad.dispose();
|
|
3073
|
-
}
|
|
3074
3331
|
}
|
|
3075
|
-
const Po = /* @__PURE__ */
|
|
3332
|
+
const Po = /* @__PURE__ */ c({
|
|
3076
3333
|
__name: "SMAA",
|
|
3077
3334
|
props: {
|
|
3078
3335
|
width: {},
|
|
3079
3336
|
height: {}
|
|
3080
3337
|
},
|
|
3081
|
-
setup(
|
|
3082
|
-
const e =
|
|
3083
|
-
return t({ pass:
|
|
3084
|
-
|
|
3338
|
+
setup(r, { expose: t }) {
|
|
3339
|
+
const e = r, { sizes: s } = G(), { pixelRatio: o } = qe(), a = L(() => e.width ?? s.width.value * o.value), i = L(() => e.height ?? s.height.value * o.value), { pass: n } = z(() => new Gt(), e);
|
|
3340
|
+
return t({ pass: n }), S(() => {
|
|
3341
|
+
n.value.setSize(a.value, i.value);
|
|
3085
3342
|
}), () => {
|
|
3086
3343
|
};
|
|
3087
3344
|
}
|
|
3088
|
-
}),
|
|
3089
|
-
name: "LuminosityHighPassShader",
|
|
3090
|
-
shaderID: "luminosityHighPass",
|
|
3345
|
+
}), Je = {
|
|
3091
3346
|
uniforms: {
|
|
3092
3347
|
tDiffuse: { value: null },
|
|
3093
3348
|
luminosityThreshold: { value: 1 },
|
|
3094
3349
|
smoothWidth: { value: 1 },
|
|
3095
|
-
defaultColor: { value: new
|
|
3350
|
+
defaultColor: { value: new Q(0) },
|
|
3096
3351
|
defaultOpacity: { value: 0 }
|
|
3097
3352
|
},
|
|
3098
3353
|
vertexShader: (
|
|
@@ -3136,41 +3391,51 @@ const Po = /* @__PURE__ */ u({
|
|
|
3136
3391
|
}`
|
|
3137
3392
|
)
|
|
3138
3393
|
};
|
|
3139
|
-
class
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3394
|
+
class R extends E {
|
|
3395
|
+
/**
|
|
3396
|
+
* Constructs a new Unreal Bloom pass.
|
|
3397
|
+
*
|
|
3398
|
+
* @param {Vector2} [resolution] - The effect's resolution.
|
|
3399
|
+
* @param {number} [strength=1] - The Bloom strength.
|
|
3400
|
+
* @param {number} radius - The Bloom radius.
|
|
3401
|
+
* @param {number} threshold - The luminance threshold limits which bright areas contribute to the Bloom effect.
|
|
3402
|
+
*/
|
|
3403
|
+
constructor(t, e = 1, s, o) {
|
|
3404
|
+
super(), this.strength = e, this.radius = s, this.threshold = o, this.resolution = t !== void 0 ? new d(t.x, t.y) : new d(256, 256), this.clearColor = new Q(0, 0, 0), this.needsSwap = !1, this.renderTargetsHorizontal = [], this.renderTargetsVertical = [], this.nMips = 5;
|
|
3405
|
+
let a = Math.round(this.resolution.x / 2), i = Math.round(this.resolution.y / 2);
|
|
3406
|
+
this.renderTargetBright = new D(a, i, { type: C }), this.renderTargetBright.texture.name = "UnrealBloomPass.bright", this.renderTargetBright.texture.generateMipmaps = !1;
|
|
3407
|
+
for (let h = 0; h < this.nMips; h++) {
|
|
3408
|
+
const x = new D(a, i, { type: C });
|
|
3409
|
+
x.texture.name = "UnrealBloomPass.h" + h, x.texture.generateMipmaps = !1, this.renderTargetsHorizontal.push(x);
|
|
3410
|
+
const w = new D(a, i, { type: C });
|
|
3411
|
+
w.texture.name = "UnrealBloomPass.v" + h, w.texture.generateMipmaps = !1, this.renderTargetsVertical.push(w), a = Math.round(a / 2), i = Math.round(i / 2);
|
|
3149
3412
|
}
|
|
3150
|
-
const
|
|
3151
|
-
this.highPassUniforms =
|
|
3413
|
+
const n = Je;
|
|
3414
|
+
this.highPassUniforms = P.clone(n.uniforms), this.highPassUniforms.luminosityThreshold.value = o, this.highPassUniforms.smoothWidth.value = 0.01, this.materialHighPassFilter = new y({
|
|
3152
3415
|
uniforms: this.highPassUniforms,
|
|
3153
|
-
vertexShader:
|
|
3154
|
-
fragmentShader:
|
|
3416
|
+
vertexShader: n.vertexShader,
|
|
3417
|
+
fragmentShader: n.fragmentShader
|
|
3155
3418
|
}), this.separableBlurMaterials = [];
|
|
3156
3419
|
const l = [3, 5, 7, 9, 11];
|
|
3157
|
-
a = Math.round(this.resolution.x / 2),
|
|
3158
|
-
for (let
|
|
3159
|
-
this.separableBlurMaterials.push(this.
|
|
3160
|
-
this.compositeMaterial = this.
|
|
3161
|
-
const
|
|
3162
|
-
this.compositeMaterial.uniforms.bloomFactors.value =
|
|
3163
|
-
const p = qe;
|
|
3164
|
-
this.copyUniforms = L.clone(p.uniforms), this.blendMaterial = new T({
|
|
3420
|
+
a = Math.round(this.resolution.x / 2), i = Math.round(this.resolution.y / 2);
|
|
3421
|
+
for (let h = 0; h < this.nMips; h++)
|
|
3422
|
+
this.separableBlurMaterials.push(this._getSeparableBlurMaterial(l[h])), this.separableBlurMaterials[h].uniforms.invSize.value = new d(1 / a, 1 / i), a = Math.round(a / 2), i = Math.round(i / 2);
|
|
3423
|
+
this.compositeMaterial = this._getCompositeMaterial(this.nMips), this.compositeMaterial.uniforms.blurTexture1.value = this.renderTargetsVertical[0].texture, this.compositeMaterial.uniforms.blurTexture2.value = this.renderTargetsVertical[1].texture, this.compositeMaterial.uniforms.blurTexture3.value = this.renderTargetsVertical[2].texture, this.compositeMaterial.uniforms.blurTexture4.value = this.renderTargetsVertical[3].texture, this.compositeMaterial.uniforms.blurTexture5.value = this.renderTargetsVertical[4].texture, this.compositeMaterial.uniforms.bloomStrength.value = e, this.compositeMaterial.uniforms.bloomRadius.value = 0.1;
|
|
3424
|
+
const u = [1, 0.8, 0.6, 0.4, 0.2];
|
|
3425
|
+
this.compositeMaterial.uniforms.bloomFactors.value = u, this.bloomTintColors = [new F(1, 1, 1), new F(1, 1, 1), new F(1, 1, 1), new F(1, 1, 1), new F(1, 1, 1)], this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors, this.copyUniforms = P.clone(k.uniforms), this.blendMaterial = new y({
|
|
3165
3426
|
uniforms: this.copyUniforms,
|
|
3166
|
-
vertexShader:
|
|
3167
|
-
fragmentShader:
|
|
3168
|
-
blending:
|
|
3427
|
+
vertexShader: k.vertexShader,
|
|
3428
|
+
fragmentShader: k.fragmentShader,
|
|
3429
|
+
blending: Ct,
|
|
3169
3430
|
depthTest: !1,
|
|
3170
3431
|
depthWrite: !1,
|
|
3171
3432
|
transparent: !0
|
|
3172
|
-
}), this.
|
|
3433
|
+
}), this._oldClearColor = new Q(), this._oldClearAlpha = 1, this._basic = new ke(), this._fsQuad = new O(null);
|
|
3173
3434
|
}
|
|
3435
|
+
/**
|
|
3436
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
3437
|
+
* method whenever the pass is no longer used in your app.
|
|
3438
|
+
*/
|
|
3174
3439
|
dispose() {
|
|
3175
3440
|
for (let t = 0; t < this.renderTargetsHorizontal.length; t++)
|
|
3176
3441
|
this.renderTargetsHorizontal[t].dispose();
|
|
@@ -3179,36 +3444,54 @@ class z extends D {
|
|
|
3179
3444
|
this.renderTargetBright.dispose();
|
|
3180
3445
|
for (let t = 0; t < this.separableBlurMaterials.length; t++)
|
|
3181
3446
|
this.separableBlurMaterials[t].dispose();
|
|
3182
|
-
this.compositeMaterial.dispose(), this.blendMaterial.dispose(), this.
|
|
3447
|
+
this.compositeMaterial.dispose(), this.blendMaterial.dispose(), this._basic.dispose(), this._fsQuad.dispose();
|
|
3183
3448
|
}
|
|
3449
|
+
/**
|
|
3450
|
+
* Sets the size of the pass.
|
|
3451
|
+
*
|
|
3452
|
+
* @param {number} width - The width to set.
|
|
3453
|
+
* @param {number} height - The height to set.
|
|
3454
|
+
*/
|
|
3184
3455
|
setSize(t, e) {
|
|
3185
|
-
let
|
|
3186
|
-
this.renderTargetBright.setSize(
|
|
3456
|
+
let s = Math.round(t / 2), o = Math.round(e / 2);
|
|
3457
|
+
this.renderTargetBright.setSize(s, o);
|
|
3187
3458
|
for (let a = 0; a < this.nMips; a++)
|
|
3188
|
-
this.renderTargetsHorizontal[a].setSize(
|
|
3459
|
+
this.renderTargetsHorizontal[a].setSize(s, o), this.renderTargetsVertical[a].setSize(s, o), this.separableBlurMaterials[a].uniforms.invSize.value = new d(1 / s, 1 / o), s = Math.round(s / 2), o = Math.round(o / 2);
|
|
3189
3460
|
}
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3461
|
+
/**
|
|
3462
|
+
* Performs the Bloom pass.
|
|
3463
|
+
*
|
|
3464
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
3465
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
3466
|
+
* destination for the pass.
|
|
3467
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
3468
|
+
* previous pass from this buffer.
|
|
3469
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
3470
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
3471
|
+
*/
|
|
3472
|
+
render(t, e, s, o, a) {
|
|
3473
|
+
t.getClearColor(this._oldClearColor), this._oldClearAlpha = t.getClearAlpha();
|
|
3474
|
+
const i = t.autoClear;
|
|
3475
|
+
t.autoClear = !1, t.setClearColor(this.clearColor, 0), a && t.state.buffers.stencil.setTest(!1), this.renderToScreen && (this._fsQuad.material = this._basic, this._basic.map = s.texture, t.setRenderTarget(null), t.clear(), this._fsQuad.render(t)), this.highPassUniforms.tDiffuse.value = s.texture, this.highPassUniforms.luminosityThreshold.value = this.threshold, this._fsQuad.material = this.materialHighPassFilter, t.setRenderTarget(this.renderTargetBright), t.clear(), this._fsQuad.render(t);
|
|
3476
|
+
let n = this.renderTargetBright;
|
|
3195
3477
|
for (let l = 0; l < this.nMips; l++)
|
|
3196
|
-
this.
|
|
3197
|
-
this.
|
|
3478
|
+
this._fsQuad.material = this.separableBlurMaterials[l], this.separableBlurMaterials[l].uniforms.colorTexture.value = n.texture, this.separableBlurMaterials[l].uniforms.direction.value = R.BlurDirectionX, t.setRenderTarget(this.renderTargetsHorizontal[l]), t.clear(), this._fsQuad.render(t), this.separableBlurMaterials[l].uniforms.colorTexture.value = this.renderTargetsHorizontal[l].texture, this.separableBlurMaterials[l].uniforms.direction.value = R.BlurDirectionY, t.setRenderTarget(this.renderTargetsVertical[l]), t.clear(), this._fsQuad.render(t), n = this.renderTargetsVertical[l];
|
|
3479
|
+
this._fsQuad.material = this.compositeMaterial, this.compositeMaterial.uniforms.bloomStrength.value = this.strength, this.compositeMaterial.uniforms.bloomRadius.value = this.radius, this.compositeMaterial.uniforms.bloomTintColors.value = this.bloomTintColors, t.setRenderTarget(this.renderTargetsHorizontal[0]), t.clear(), this._fsQuad.render(t), this._fsQuad.material = this.blendMaterial, this.copyUniforms.tDiffuse.value = this.renderTargetsHorizontal[0].texture, a && t.state.buffers.stencil.setTest(!0), this.renderToScreen ? (t.setRenderTarget(null), this._fsQuad.render(t)) : (t.setRenderTarget(s), this._fsQuad.render(t)), t.setClearColor(this._oldClearColor, this._oldClearAlpha), t.autoClear = i;
|
|
3198
3480
|
}
|
|
3199
|
-
|
|
3481
|
+
// internals
|
|
3482
|
+
_getSeparableBlurMaterial(t) {
|
|
3200
3483
|
const e = [];
|
|
3201
|
-
for (let
|
|
3202
|
-
e.push(0.39894 * Math.exp(-0.5 *
|
|
3203
|
-
return new
|
|
3484
|
+
for (let s = 0; s < t; s++)
|
|
3485
|
+
e.push(0.39894 * Math.exp(-0.5 * s * s / (t * t)) / t);
|
|
3486
|
+
return new y({
|
|
3204
3487
|
defines: {
|
|
3205
3488
|
KERNEL_RADIUS: t
|
|
3206
3489
|
},
|
|
3207
3490
|
uniforms: {
|
|
3208
3491
|
colorTexture: { value: null },
|
|
3209
|
-
invSize: { value: new
|
|
3492
|
+
invSize: { value: new d(0.5, 0.5) },
|
|
3210
3493
|
// inverse texture size
|
|
3211
|
-
direction: { value: new
|
|
3494
|
+
direction: { value: new d(0.5, 0.5) },
|
|
3212
3495
|
gaussianCoefficients: { value: e }
|
|
3213
3496
|
// precomputed Gaussian coefficients
|
|
3214
3497
|
},
|
|
@@ -3240,8 +3523,8 @@ class z extends D {
|
|
|
3240
3523
|
}`
|
|
3241
3524
|
});
|
|
3242
3525
|
}
|
|
3243
|
-
|
|
3244
|
-
return new
|
|
3526
|
+
_getCompositeMaterial(t) {
|
|
3527
|
+
return new y({
|
|
3245
3528
|
defines: {
|
|
3246
3529
|
NUM_MIPS: t
|
|
3247
3530
|
},
|
|
@@ -3287,31 +3570,28 @@ class z extends D {
|
|
|
3287
3570
|
});
|
|
3288
3571
|
}
|
|
3289
3572
|
}
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
const Do = /* @__PURE__ */
|
|
3573
|
+
R.BlurDirectionX = new d(1, 0);
|
|
3574
|
+
R.BlurDirectionY = new d(0, 1);
|
|
3575
|
+
const Do = /* @__PURE__ */ c({
|
|
3293
3576
|
__name: "UnrealBloom",
|
|
3294
3577
|
props: {
|
|
3295
3578
|
radius: { default: 0 },
|
|
3296
3579
|
strength: { default: 1 },
|
|
3297
3580
|
threshold: { default: 0 }
|
|
3298
3581
|
},
|
|
3299
|
-
setup(
|
|
3300
|
-
const e =
|
|
3301
|
-
new
|
|
3582
|
+
setup(r, { expose: t }) {
|
|
3583
|
+
const e = r, { sizes: s } = G(), { pass: o } = z(() => new R(
|
|
3584
|
+
new d(s.width.value, s.height.value),
|
|
3302
3585
|
e.radius,
|
|
3303
3586
|
e.strength,
|
|
3304
3587
|
e.threshold
|
|
3305
3588
|
), e);
|
|
3306
|
-
return t({ pass:
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
}), w(() => {
|
|
3313
|
-
var a;
|
|
3314
|
-
s.value.threshold = e.threshold ?? ((a = Ke.uniforms.luminosityThreshold) == null ? void 0 : a.value) ?? 1;
|
|
3589
|
+
return t({ pass: o }), S(() => {
|
|
3590
|
+
o.value.radius = e.radius ?? o.value.getCompositeMaterial().uniforms.bloomRadius?.value ?? 0.1;
|
|
3591
|
+
}), S(() => {
|
|
3592
|
+
o.value.strength = e.strength ?? o.value.getCompositeMaterial().uniforms.bloomStrength?.value ?? 1;
|
|
3593
|
+
}), S(() => {
|
|
3594
|
+
o.value.threshold = e.threshold ?? Je.uniforms.luminosityThreshold?.value ?? 1;
|
|
3315
3595
|
}), () => {
|
|
3316
3596
|
};
|
|
3317
3597
|
}
|
|
@@ -3319,42 +3599,42 @@ const Do = /* @__PURE__ */ u({
|
|
|
3319
3599
|
export {
|
|
3320
3600
|
Ao as ASCIIPmndrs,
|
|
3321
3601
|
$t as BarrelBlurPmndrs,
|
|
3322
|
-
|
|
3602
|
+
Yt as BloomPmndrs,
|
|
3323
3603
|
xo as BrightnessContrastPmndrs,
|
|
3324
3604
|
to as ChromaticAberrationPmndrs,
|
|
3325
3605
|
ro as ColorAveragePmndrs,
|
|
3326
3606
|
mo as ColorDepthPmndrs,
|
|
3327
|
-
|
|
3607
|
+
kt as DepthOfFieldPmndrs,
|
|
3328
3608
|
ho as DepthPickingPassPmndrs,
|
|
3329
|
-
|
|
3609
|
+
co as DotScreenPmndrs,
|
|
3330
3610
|
yo as EffectComposer,
|
|
3331
|
-
|
|
3611
|
+
_t as EffectComposerPmndrs,
|
|
3332
3612
|
So as FXAAPmndrs,
|
|
3333
3613
|
go as FishEyePmndrs,
|
|
3334
3614
|
Mo as Glitch,
|
|
3335
|
-
|
|
3615
|
+
qt as GlitchPmndrs,
|
|
3336
3616
|
po as GodRaysPmndrs,
|
|
3337
3617
|
vo as GridPmndrs,
|
|
3338
3618
|
To as Halftone,
|
|
3339
3619
|
oo as HueSaturationPmndrs,
|
|
3340
3620
|
ao as KuwaharaPmndrs,
|
|
3341
|
-
|
|
3621
|
+
io as LensDistortionPmndrs,
|
|
3342
3622
|
fo as LinocutPmndrs,
|
|
3343
|
-
|
|
3344
|
-
|
|
3623
|
+
Qt as NoisePmndrs,
|
|
3624
|
+
Kt as OutlinePmndrs,
|
|
3345
3625
|
Eo as Output,
|
|
3346
3626
|
Co as Pixelation,
|
|
3347
|
-
|
|
3627
|
+
Jt as PixelationPmndrs,
|
|
3348
3628
|
Po as SMAA,
|
|
3349
3629
|
bo as SMAAPmndrs,
|
|
3350
3630
|
so as ScanlinePmndrs,
|
|
3351
|
-
|
|
3352
|
-
|
|
3631
|
+
uo as SepiaPmndrs,
|
|
3632
|
+
no as ShockWavePmndrs,
|
|
3353
3633
|
wo as TexturePmndrs,
|
|
3354
3634
|
lo as TiltShiftPmndrs,
|
|
3355
3635
|
eo as ToneMappingPmndrs,
|
|
3356
3636
|
Do as UnrealBloom,
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3637
|
+
Zt as VignettePmndrs,
|
|
3638
|
+
z as useEffect,
|
|
3639
|
+
f as useEffectPmndrs
|
|
3360
3640
|
};
|