@tresjs/post-processing 3.0.0-next.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/tres-post-processing.js +1020 -729
- 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: v3.0.0
|
|
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 c, shallowRef as
|
|
9
|
-
import { EffectComposer as
|
|
10
|
-
import { useTresContext as G, useTres 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
|
|
65
|
+
const $ = Symbol("effectComposerPmndrs"), _t = /* @__PURE__ */ c({
|
|
60
66
|
__name: "EffectComposerPmndrs",
|
|
61
67
|
props: {
|
|
62
68
|
enabled: { type: Boolean, default: !0 },
|
|
@@ -66,106 +72,96 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
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
|
+
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({
|
|
78
84
|
normalBuffer: x.texture,
|
|
79
|
-
resolutionScale:
|
|
80
|
-
}),
|
|
81
|
-
},
|
|
82
|
-
const
|
|
83
|
-
depthBuffer:
|
|
84
|
-
stencilBuffer:
|
|
85
|
-
multisampling:
|
|
86
|
-
frameBufferType:
|
|
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
|
-
!n.instance && !a.value && !r.activeCamera.value || ((p = l.value) == null || p.dispose(), l.value = new he(n.instance, A.value), l.value.addPass(new Je(a.value, r.activeCamera.value)), o.disableNormalPass || b());
|
|
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
|
-
return
|
|
94
|
-
!
|
|
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
|
-
}), n.replaceRenderFunction((
|
|
100
|
-
if (
|
|
101
|
-
const
|
|
102
|
-
n.instance.autoClear =
|
|
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();
|
|
103
108
|
}
|
|
104
|
-
}),
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}, d = (b) => {
|
|
116
|
-
!n.value || !(o != null && o.value) || !r.value || (a.value = i(), s.value = new Xe(n.value, a.value), o.value.addPass(s.value, b));
|
|
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));
|
|
117
120
|
};
|
|
118
|
-
e &&
|
|
119
|
-
() => e.map((
|
|
121
|
+
e && m(
|
|
122
|
+
() => e.map((w) => t[w]),
|
|
120
123
|
() => {
|
|
121
|
-
|
|
122
|
-
if (!(o != null && o.value))
|
|
124
|
+
if (!s?.value)
|
|
123
125
|
return;
|
|
124
|
-
const
|
|
125
|
-
~
|
|
126
|
+
const w = s.value?.passes.findIndex((U) => U === o.value);
|
|
127
|
+
~w && (u(), h(w));
|
|
126
128
|
}
|
|
127
129
|
), S(() => {
|
|
128
|
-
!n.value || !
|
|
130
|
+
!n.value || !a?.value || (a.value.mainCamera = n.value);
|
|
129
131
|
});
|
|
130
132
|
const x = S(() => {
|
|
131
|
-
!n.value || !
|
|
133
|
+
!n.value || !s?.value || !i.value || (fe(() => x()), !a.value && h());
|
|
132
134
|
});
|
|
133
|
-
return
|
|
134
|
-
|
|
135
|
+
return N(() => {
|
|
136
|
+
u();
|
|
135
137
|
}), {
|
|
136
|
-
pass:
|
|
138
|
+
pass: o,
|
|
137
139
|
effect: a
|
|
138
140
|
};
|
|
139
|
-
},
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
o && o.reduce((s, a, r) => (s[a] === void 0 && (s[a] = {}), r === o.length - 1 && (s[a] = e), s[a]), i);
|
|
147
|
-
}, Ct = (i, t) => {
|
|
148
|
-
const e = { ...i };
|
|
149
|
-
return t.forEach((o) => delete e[o]), e;
|
|
150
|
-
}, H = (i, t, e, o, s = {}) => g(i, (a) => {
|
|
151
|
-
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) => {
|
|
152
148
|
if (t.value)
|
|
153
149
|
if (a === void 0) {
|
|
154
|
-
const
|
|
155
|
-
|
|
150
|
+
const i = s();
|
|
151
|
+
Ne(t.value, e, Et(i, e)), i.dispose?.();
|
|
156
152
|
} else
|
|
157
|
-
|
|
158
|
-
},
|
|
159
|
-
o,
|
|
160
|
-
t,
|
|
153
|
+
Ne(t.value, e, r());
|
|
154
|
+
}, o), p = (r, t, e) => r.map(([s, o]) => H(
|
|
161
155
|
s,
|
|
162
|
-
e
|
|
163
|
-
)), de = (i, t, e) => Object.keys(i).map((o) => H(
|
|
164
|
-
() => i[o],
|
|
165
156
|
t,
|
|
166
157
|
o,
|
|
167
158
|
e
|
|
168
|
-
)),
|
|
159
|
+
)), pe = (r, t, e) => Object.keys(r).map((s) => H(
|
|
160
|
+
() => r[s],
|
|
161
|
+
t,
|
|
162
|
+
s,
|
|
163
|
+
e
|
|
164
|
+
)), Yt = /* @__PURE__ */ c({
|
|
169
165
|
__name: "BloomPmndrs",
|
|
170
166
|
props: {
|
|
171
167
|
blendFunction: {},
|
|
@@ -175,9 +171,9 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
175
171
|
luminanceSmoothing: {},
|
|
176
172
|
mipmapBlur: { type: Boolean, default: void 0 }
|
|
177
173
|
},
|
|
178
|
-
setup(
|
|
179
|
-
const e =
|
|
180
|
-
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(
|
|
181
177
|
[
|
|
182
178
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
183
179
|
[() => e.intensity, "intensity"],
|
|
@@ -185,12 +181,12 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
185
181
|
[() => e.luminanceSmoothing, "luminanceMaterial.smoothing"],
|
|
186
182
|
[() => e.luminanceThreshold, "luminanceMaterial.threshold"]
|
|
187
183
|
],
|
|
188
|
-
|
|
189
|
-
() => new
|
|
184
|
+
o,
|
|
185
|
+
() => new ge()
|
|
190
186
|
), () => {
|
|
191
187
|
};
|
|
192
188
|
}
|
|
193
|
-
}),
|
|
189
|
+
}), kt = /* @__PURE__ */ c({
|
|
194
190
|
__name: "DepthOfFieldPmndrs",
|
|
195
191
|
props: {
|
|
196
192
|
blendFunction: {},
|
|
@@ -203,9 +199,9 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
203
199
|
resolutionX: {},
|
|
204
200
|
resolutionY: {}
|
|
205
201
|
},
|
|
206
|
-
setup(
|
|
207
|
-
const e =
|
|
208
|
-
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(
|
|
209
205
|
[
|
|
210
206
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
211
207
|
[() => e.worldFocusDistance, "circleOfConfusionMaterial.worldFocusDistance"],
|
|
@@ -218,11 +214,11 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
218
214
|
[() => e.resolutionY, "resolution.height"]
|
|
219
215
|
],
|
|
220
216
|
a,
|
|
221
|
-
() => new
|
|
217
|
+
() => new xe()
|
|
222
218
|
), () => {
|
|
223
219
|
};
|
|
224
220
|
}
|
|
225
|
-
}),
|
|
221
|
+
}), qt = /* @__PURE__ */ c({
|
|
226
222
|
__name: "GlitchPmndrs",
|
|
227
223
|
props: {
|
|
228
224
|
blendFunction: {},
|
|
@@ -237,51 +233,51 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
237
233
|
perturbationMap: {},
|
|
238
234
|
dtSize: {}
|
|
239
235
|
},
|
|
240
|
-
setup(
|
|
241
|
-
const e =
|
|
242
|
-
t({ pass:
|
|
243
|
-
const { invalidate: a } =
|
|
244
|
-
return
|
|
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(() => {
|
|
245
241
|
const n = () => {
|
|
246
242
|
if (e.mode !== void 0)
|
|
247
|
-
return e.active === !1 ?
|
|
248
|
-
const
|
|
249
|
-
return
|
|
243
|
+
return e.active === !1 ? tt.DISABLED : e.mode;
|
|
244
|
+
const l = new I(), u = l.mode;
|
|
245
|
+
return l.dispose(), u;
|
|
250
246
|
};
|
|
251
|
-
|
|
247
|
+
o.value && (o.value.mode = n());
|
|
252
248
|
}), H(
|
|
253
249
|
() => e.blendFunction,
|
|
254
|
-
|
|
250
|
+
o,
|
|
255
251
|
"blendMode.blendFunction",
|
|
256
252
|
() => new I()
|
|
257
|
-
),
|
|
258
|
-
|
|
259
|
-
|
|
253
|
+
), pe(
|
|
254
|
+
Pt(e, ["active", "blendFunction"]),
|
|
255
|
+
o,
|
|
260
256
|
() => new I()
|
|
261
257
|
), () => {
|
|
262
258
|
};
|
|
263
259
|
}
|
|
264
|
-
}),
|
|
260
|
+
}), Qt = /* @__PURE__ */ c({
|
|
265
261
|
__name: "NoisePmndrs",
|
|
266
262
|
props: {
|
|
267
263
|
premultiply: { type: Boolean, default: void 0 },
|
|
268
264
|
blendFunction: {}
|
|
269
265
|
},
|
|
270
|
-
setup(
|
|
271
|
-
const e =
|
|
272
|
-
t({ pass:
|
|
273
|
-
const { invalidate: a } =
|
|
274
|
-
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(
|
|
275
271
|
[
|
|
276
272
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
277
273
|
[() => e.premultiply, "premultiply"]
|
|
278
274
|
],
|
|
279
|
-
|
|
280
|
-
() => new
|
|
275
|
+
o,
|
|
276
|
+
() => new be()
|
|
281
277
|
), () => {
|
|
282
278
|
};
|
|
283
279
|
}
|
|
284
|
-
}),
|
|
280
|
+
}), Kt = /* @__PURE__ */ c({
|
|
285
281
|
__name: "OutlinePmndrs",
|
|
286
282
|
props: {
|
|
287
283
|
outlinedObjects: {},
|
|
@@ -300,11 +296,11 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
300
296
|
hiddenEdgeColor: {},
|
|
301
297
|
visibleEdgeColor: {}
|
|
302
298
|
},
|
|
303
|
-
setup(
|
|
304
|
-
const e =
|
|
305
|
-
() => 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(
|
|
306
302
|
a.value,
|
|
307
|
-
|
|
303
|
+
o.value,
|
|
308
304
|
{
|
|
309
305
|
blur: e.blur,
|
|
310
306
|
xRay: e.xRay,
|
|
@@ -318,29 +314,28 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
318
314
|
multisampling: e.multisampling,
|
|
319
315
|
patternTexture: e.patternTexture,
|
|
320
316
|
resolutionScale: e.resolutionScale,
|
|
321
|
-
hiddenEdgeColor:
|
|
322
|
-
visibleEdgeColor:
|
|
317
|
+
hiddenEdgeColor: s(e.hiddenEdgeColor),
|
|
318
|
+
visibleEdgeColor: s(e.visibleEdgeColor)
|
|
323
319
|
// width and height are explicitly omitted, because they are deprecated in postprocessing's OutlineEffect
|
|
324
320
|
}
|
|
325
321
|
),
|
|
326
322
|
e
|
|
327
323
|
);
|
|
328
|
-
t({ pass:
|
|
324
|
+
t({ pass: i, effect: n }), m(
|
|
329
325
|
[() => e.outlinedObjects, n],
|
|
330
326
|
// watchEffect is intentionally not used here as it would result in an endless loop
|
|
331
327
|
() => {
|
|
332
|
-
|
|
333
|
-
(l = n.value) == null || l.selection.set(e.outlinedObjects || []);
|
|
328
|
+
n.value?.selection.set(e.outlinedObjects || []);
|
|
334
329
|
},
|
|
335
330
|
{
|
|
336
331
|
immediate: !0
|
|
337
332
|
}
|
|
338
333
|
);
|
|
339
|
-
const
|
|
340
|
-
hiddenEdgeColor: e.hiddenEdgeColor ?
|
|
341
|
-
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
|
|
342
337
|
}));
|
|
343
|
-
return
|
|
338
|
+
return p(
|
|
344
339
|
[
|
|
345
340
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
346
341
|
[() => e.blur, "blur"],
|
|
@@ -354,29 +349,29 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
354
349
|
[() => e.resolutionY, "resolution.height"],
|
|
355
350
|
[() => e.patternTexture, "patternTexture"],
|
|
356
351
|
[() => e.resolutionScale, "resolution.scale"],
|
|
357
|
-
[() =>
|
|
358
|
-
[() =>
|
|
352
|
+
[() => l.value.hiddenEdgeColor, "hiddenEdgeColor"],
|
|
353
|
+
[() => l.value.visibleEdgeColor, "visibleEdgeColor"]
|
|
359
354
|
],
|
|
360
355
|
n,
|
|
361
|
-
() => new
|
|
356
|
+
() => new Se()
|
|
362
357
|
), () => {
|
|
363
358
|
};
|
|
364
359
|
}
|
|
365
|
-
}),
|
|
360
|
+
}), Jt = /* @__PURE__ */ c({
|
|
366
361
|
__name: "PixelationPmndrs",
|
|
367
362
|
props: {
|
|
368
363
|
granularity: {}
|
|
369
364
|
},
|
|
370
|
-
setup(
|
|
371
|
-
const e =
|
|
372
|
-
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(
|
|
373
368
|
e,
|
|
374
|
-
|
|
375
|
-
() => new
|
|
369
|
+
o,
|
|
370
|
+
() => new we()
|
|
376
371
|
), () => {
|
|
377
372
|
};
|
|
378
373
|
}
|
|
379
|
-
}),
|
|
374
|
+
}), Zt = /* @__PURE__ */ c({
|
|
380
375
|
__name: "VignettePmndrs",
|
|
381
376
|
props: {
|
|
382
377
|
technique: {},
|
|
@@ -384,22 +379,22 @@ const Z = Symbol("effectComposerPmndrs"), Yt = /* @__PURE__ */ c({
|
|
|
384
379
|
offset: {},
|
|
385
380
|
darkness: {}
|
|
386
381
|
},
|
|
387
|
-
setup(
|
|
388
|
-
const e =
|
|
389
|
-
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(
|
|
390
385
|
[
|
|
391
386
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
392
387
|
[() => e.offset, "offset"],
|
|
393
388
|
[() => e.darkness, "darkness"],
|
|
394
389
|
[() => e.technique, "technique"]
|
|
395
390
|
],
|
|
396
|
-
|
|
397
|
-
() => new
|
|
391
|
+
o,
|
|
392
|
+
() => new Ae()
|
|
398
393
|
), () => {
|
|
399
394
|
};
|
|
400
395
|
}
|
|
401
396
|
});
|
|
402
|
-
class
|
|
397
|
+
class ze extends J {
|
|
403
398
|
/**
|
|
404
399
|
* Creates a new BarrelBlurEffect instance.
|
|
405
400
|
*
|
|
@@ -409,7 +404,7 @@ class Re extends K {
|
|
|
409
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.
|
|
410
405
|
*
|
|
411
406
|
*/
|
|
412
|
-
constructor({ blendFunction: t =
|
|
407
|
+
constructor({ blendFunction: t = Z.NORMAL, amount: e = 0.15, offset: s = new d(0.5, 0.5) } = {}) {
|
|
413
408
|
super("BarrelBlurEffect", `
|
|
414
409
|
uniform float amount;
|
|
415
410
|
uniform vec2 offset;
|
|
@@ -457,9 +452,9 @@ class Re extends K {
|
|
|
457
452
|
`, {
|
|
458
453
|
blendFunction: t,
|
|
459
454
|
uniforms: /* @__PURE__ */ new Map([
|
|
460
|
-
["amount", new
|
|
455
|
+
["amount", new M(e)],
|
|
461
456
|
// Uniform controlling the intensity of distortion
|
|
462
|
-
["offset", new
|
|
457
|
+
["offset", new M(s)]
|
|
463
458
|
// Uniform controlling the offset of distortion
|
|
464
459
|
])
|
|
465
460
|
});
|
|
@@ -470,8 +465,7 @@ class Re extends K {
|
|
|
470
465
|
* @type {number}
|
|
471
466
|
*/
|
|
472
467
|
get amount() {
|
|
473
|
-
|
|
474
|
-
return (t = this.uniforms.get("amount")) == null ? void 0 : t.value;
|
|
468
|
+
return this.uniforms.get("amount")?.value;
|
|
475
469
|
}
|
|
476
470
|
set amount(t) {
|
|
477
471
|
this.uniforms.get("amount").value = t;
|
|
@@ -482,8 +476,7 @@ class Re extends K {
|
|
|
482
476
|
* @type {Vector2}
|
|
483
477
|
*/
|
|
484
478
|
get offset() {
|
|
485
|
-
|
|
486
|
-
return (t = this.uniforms.get("offset")) == null ? void 0 : t.value;
|
|
479
|
+
return this.uniforms.get("offset")?.value;
|
|
487
480
|
}
|
|
488
481
|
set offset(t) {
|
|
489
482
|
this.uniforms.get("offset").value = t;
|
|
@@ -496,22 +489,22 @@ const $t = /* @__PURE__ */ c({
|
|
|
496
489
|
amount: {},
|
|
497
490
|
offset: {}
|
|
498
491
|
},
|
|
499
|
-
setup(
|
|
500
|
-
const e =
|
|
501
|
-
() => new
|
|
492
|
+
setup(r, { expose: t }) {
|
|
493
|
+
const e = r, { pass: s, effect: o } = f(
|
|
494
|
+
() => new ze({
|
|
502
495
|
...e,
|
|
503
|
-
offset: Array.isArray(e.offset) ? new
|
|
496
|
+
offset: Array.isArray(e.offset) ? new d(...e.offset) : e.offset
|
|
504
497
|
}),
|
|
505
498
|
e
|
|
506
499
|
);
|
|
507
|
-
return t({ pass:
|
|
500
|
+
return t({ pass: s, effect: o }), p(
|
|
508
501
|
[
|
|
509
502
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
510
503
|
[() => e.amount, "amount"],
|
|
511
504
|
[() => e.offset, "offset"]
|
|
512
505
|
],
|
|
513
|
-
|
|
514
|
-
() => new
|
|
506
|
+
o,
|
|
507
|
+
() => new ze()
|
|
515
508
|
), () => {
|
|
516
509
|
};
|
|
517
510
|
}
|
|
@@ -526,9 +519,9 @@ const $t = /* @__PURE__ */ c({
|
|
|
526
519
|
minLuminance: {},
|
|
527
520
|
whitePoint: {}
|
|
528
521
|
},
|
|
529
|
-
setup(
|
|
530
|
-
const e =
|
|
531
|
-
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(
|
|
532
525
|
[
|
|
533
526
|
[() => e.mode, "mode"],
|
|
534
527
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
@@ -538,8 +531,8 @@ const $t = /* @__PURE__ */ c({
|
|
|
538
531
|
[() => e.minLuminance, "adaptiveLuminanceMaterial.minLuminance"],
|
|
539
532
|
[() => e.whitePoint, "whitePoint"]
|
|
540
533
|
],
|
|
541
|
-
|
|
542
|
-
() => new
|
|
534
|
+
o,
|
|
535
|
+
() => new ye()
|
|
543
536
|
), () => {
|
|
544
537
|
};
|
|
545
538
|
}
|
|
@@ -551,15 +544,15 @@ const $t = /* @__PURE__ */ c({
|
|
|
551
544
|
radialModulation: { type: Boolean, default: void 0 },
|
|
552
545
|
modulationOffset: {}
|
|
553
546
|
},
|
|
554
|
-
setup(
|
|
555
|
-
const e =
|
|
547
|
+
setup(r, { expose: t }) {
|
|
548
|
+
const e = r, s = new te(), { pass: o, effect: a } = f(() => new te({
|
|
556
549
|
...e,
|
|
557
550
|
// Unfortunately, these defaults must be set this way as the type in postprocessing is not correct.
|
|
558
551
|
// The arguments are optional in the actual constructor, but not in the type.
|
|
559
|
-
radialModulation: e.radialModulation ??
|
|
560
|
-
modulationOffset: e.modulationOffset ??
|
|
552
|
+
radialModulation: e.radialModulation ?? s.radialModulation,
|
|
553
|
+
modulationOffset: e.modulationOffset ?? s.modulationOffset
|
|
561
554
|
}), e);
|
|
562
|
-
return
|
|
555
|
+
return s.dispose(), t({ pass: o, effect: a }), p(
|
|
563
556
|
[
|
|
564
557
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
565
558
|
[() => e.offset, "offset"],
|
|
@@ -567,7 +560,7 @@ const $t = /* @__PURE__ */ c({
|
|
|
567
560
|
[() => e.modulationOffset, "modulationOffset"]
|
|
568
561
|
],
|
|
569
562
|
a,
|
|
570
|
-
() => new
|
|
563
|
+
() => new te()
|
|
571
564
|
), () => {
|
|
572
565
|
};
|
|
573
566
|
}
|
|
@@ -578,16 +571,16 @@ const $t = /* @__PURE__ */ c({
|
|
|
578
571
|
hue: {},
|
|
579
572
|
blendFunction: {}
|
|
580
573
|
},
|
|
581
|
-
setup(
|
|
582
|
-
const e =
|
|
583
|
-
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(
|
|
584
577
|
[
|
|
585
578
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
586
579
|
[() => e.hue, "hue"],
|
|
587
580
|
[() => e.saturation, "saturation"]
|
|
588
581
|
],
|
|
589
|
-
|
|
590
|
-
() => new
|
|
582
|
+
o,
|
|
583
|
+
() => new Me()
|
|
591
584
|
), () => {
|
|
592
585
|
};
|
|
593
586
|
}
|
|
@@ -599,25 +592,24 @@ const $t = /* @__PURE__ */ c({
|
|
|
599
592
|
scrollSpeed: {},
|
|
600
593
|
opacity: {}
|
|
601
594
|
},
|
|
602
|
-
setup(
|
|
603
|
-
const e =
|
|
604
|
-
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(
|
|
605
598
|
[
|
|
606
599
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
607
600
|
[() => e.density, "density"],
|
|
608
601
|
[() => e.scrollSpeed, "scrollSpeed"]
|
|
609
602
|
],
|
|
610
|
-
|
|
611
|
-
() => new
|
|
612
|
-
),
|
|
603
|
+
o,
|
|
604
|
+
() => new oe()
|
|
605
|
+
), m(
|
|
613
606
|
[() => e.opacity],
|
|
614
607
|
() => {
|
|
615
|
-
var a, r;
|
|
616
608
|
if (e.opacity !== void 0)
|
|
617
|
-
|
|
609
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
618
610
|
else {
|
|
619
|
-
const
|
|
620
|
-
|
|
611
|
+
const a = new oe();
|
|
612
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
621
613
|
}
|
|
622
614
|
},
|
|
623
615
|
{
|
|
@@ -626,7 +618,7 @@ const $t = /* @__PURE__ */ c({
|
|
|
626
618
|
), () => {
|
|
627
619
|
};
|
|
628
620
|
}
|
|
629
|
-
}),
|
|
621
|
+
}), Dt = `
|
|
630
622
|
uniform float radius;
|
|
631
623
|
uniform int sectorCount;
|
|
632
624
|
|
|
@@ -723,7 +715,7 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
|
|
|
723
715
|
outputColor = vec4(finalColor, inputColor.a);
|
|
724
716
|
}
|
|
725
717
|
`;
|
|
726
|
-
class
|
|
718
|
+
class Ue extends J {
|
|
727
719
|
/**
|
|
728
720
|
* Creates a new KuwaharaEffect instance.
|
|
729
721
|
*
|
|
@@ -733,12 +725,12 @@ class Be extends K {
|
|
|
733
725
|
* @param {number} [options.sectorCount] - Number of sectors.
|
|
734
726
|
*
|
|
735
727
|
*/
|
|
736
|
-
constructor({ blendFunction: t =
|
|
737
|
-
super("KuwaharaEffect",
|
|
728
|
+
constructor({ blendFunction: t = Z.NORMAL, radius: e = 1, sectorCount: s = 4 } = {}) {
|
|
729
|
+
super("KuwaharaEffect", Dt, {
|
|
738
730
|
blendFunction: t,
|
|
739
731
|
uniforms: /* @__PURE__ */ new Map([
|
|
740
|
-
["radius", new
|
|
741
|
-
["sectorCount", new
|
|
732
|
+
["radius", new M(e)],
|
|
733
|
+
["sectorCount", new M(s)]
|
|
742
734
|
])
|
|
743
735
|
});
|
|
744
736
|
}
|
|
@@ -748,8 +740,7 @@ class Be extends K {
|
|
|
748
740
|
* @type {number}
|
|
749
741
|
*/
|
|
750
742
|
get radius() {
|
|
751
|
-
|
|
752
|
-
return (t = this.uniforms.get("radius")) == null ? void 0 : t.value;
|
|
743
|
+
return this.uniforms.get("radius")?.value;
|
|
753
744
|
}
|
|
754
745
|
set radius(t) {
|
|
755
746
|
this.uniforms.get("radius").value = t;
|
|
@@ -760,8 +751,7 @@ class Be extends K {
|
|
|
760
751
|
* @type {number}
|
|
761
752
|
*/
|
|
762
753
|
get sectorCount() {
|
|
763
|
-
|
|
764
|
-
return (t = this.uniforms.get("sectorCount")) == null ? void 0 : t.value;
|
|
754
|
+
return this.uniforms.get("sectorCount")?.value;
|
|
765
755
|
}
|
|
766
756
|
set sectorCount(t) {
|
|
767
757
|
this.uniforms.get("sectorCount").value = t;
|
|
@@ -774,19 +764,19 @@ const ao = /* @__PURE__ */ c({
|
|
|
774
764
|
radius: {},
|
|
775
765
|
sectorCount: {}
|
|
776
766
|
},
|
|
777
|
-
setup(
|
|
778
|
-
const e =
|
|
779
|
-
() => new
|
|
767
|
+
setup(r, { expose: t }) {
|
|
768
|
+
const e = r, { pass: s, effect: o } = f(
|
|
769
|
+
() => new Ue(e),
|
|
780
770
|
e
|
|
781
771
|
);
|
|
782
|
-
return t({ pass:
|
|
772
|
+
return t({ pass: s, effect: o }), p(
|
|
783
773
|
[
|
|
784
774
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
785
775
|
[() => e.radius, "radius"],
|
|
786
776
|
[() => e.sectorCount, "sectorCount"]
|
|
787
777
|
],
|
|
788
|
-
|
|
789
|
-
() => new
|
|
778
|
+
o,
|
|
779
|
+
() => new Ue()
|
|
790
780
|
), () => {
|
|
791
781
|
};
|
|
792
782
|
}
|
|
@@ -796,23 +786,22 @@ const ao = /* @__PURE__ */ c({
|
|
|
796
786
|
blendFunction: {},
|
|
797
787
|
opacity: {}
|
|
798
788
|
},
|
|
799
|
-
setup(
|
|
800
|
-
const e =
|
|
801
|
-
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(
|
|
802
792
|
() => e.blendFunction,
|
|
803
|
-
|
|
793
|
+
o,
|
|
804
794
|
"blendMode.blendFunction",
|
|
805
|
-
() => new
|
|
806
|
-
),
|
|
807
|
-
[
|
|
795
|
+
() => new se()
|
|
796
|
+
), m(
|
|
797
|
+
[o, () => e.opacity],
|
|
808
798
|
() => {
|
|
809
|
-
|
|
810
|
-
if (s.value)
|
|
799
|
+
if (o.value)
|
|
811
800
|
if (e.opacity !== void 0)
|
|
812
|
-
|
|
801
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
813
802
|
else {
|
|
814
|
-
const
|
|
815
|
-
|
|
803
|
+
const a = new se();
|
|
804
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
816
805
|
}
|
|
817
806
|
}
|
|
818
807
|
), () => {
|
|
@@ -826,20 +815,20 @@ const ao = /* @__PURE__ */ c({
|
|
|
826
815
|
focalLength: {},
|
|
827
816
|
skew: {}
|
|
828
817
|
},
|
|
829
|
-
setup(
|
|
830
|
-
const e =
|
|
831
|
-
() => new
|
|
818
|
+
setup(r, { expose: t }) {
|
|
819
|
+
const e = r, { pass: s, effect: o } = f(
|
|
820
|
+
() => new Te({
|
|
832
821
|
...e,
|
|
833
|
-
distortion: e.distortion ? Array.isArray(e.distortion) ? new
|
|
834
|
-
principalPoint: e.principalPoint ? Array.isArray(e.principalPoint) ? new
|
|
835
|
-
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()
|
|
836
825
|
}),
|
|
837
826
|
e
|
|
838
827
|
);
|
|
839
|
-
return t({ pass:
|
|
828
|
+
return t({ pass: s, effect: o }), pe(
|
|
840
829
|
e,
|
|
841
|
-
|
|
842
|
-
() => new
|
|
830
|
+
o,
|
|
831
|
+
() => new Te()
|
|
843
832
|
), () => {
|
|
844
833
|
};
|
|
845
834
|
}
|
|
@@ -852,18 +841,18 @@ const ao = /* @__PURE__ */ c({
|
|
|
852
841
|
maxRadius: {},
|
|
853
842
|
waveSize: {}
|
|
854
843
|
},
|
|
855
|
-
setup(
|
|
856
|
-
const e =
|
|
857
|
-
() => 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),
|
|
858
847
|
e
|
|
859
848
|
);
|
|
860
|
-
return t({ pass:
|
|
849
|
+
return t({ pass: o, effect: a }), m(
|
|
861
850
|
() => e.position,
|
|
862
|
-
(
|
|
863
|
-
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));
|
|
864
853
|
},
|
|
865
854
|
{ immediate: !0 }
|
|
866
|
-
),
|
|
855
|
+
), p(
|
|
867
856
|
[
|
|
868
857
|
[() => e.amplitude, "amplitude"],
|
|
869
858
|
[() => e.waveSize, "waveSize"],
|
|
@@ -871,7 +860,7 @@ const ao = /* @__PURE__ */ c({
|
|
|
871
860
|
[() => e.speed, "speed"]
|
|
872
861
|
],
|
|
873
862
|
a,
|
|
874
|
-
() => new
|
|
863
|
+
() => new Ce()
|
|
875
864
|
), () => {
|
|
876
865
|
};
|
|
877
866
|
}
|
|
@@ -888,9 +877,9 @@ const ao = /* @__PURE__ */ c({
|
|
|
888
877
|
resolutionX: {},
|
|
889
878
|
resolutionY: {}
|
|
890
879
|
},
|
|
891
|
-
setup(
|
|
892
|
-
const e =
|
|
893
|
-
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(
|
|
894
883
|
[
|
|
895
884
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
896
885
|
[() => e.offset, "offset"],
|
|
@@ -902,59 +891,59 @@ const ao = /* @__PURE__ */ c({
|
|
|
902
891
|
[() => e.resolutionX, "resolution.width"],
|
|
903
892
|
[() => e.resolutionY, "resolution.height"]
|
|
904
893
|
],
|
|
905
|
-
|
|
906
|
-
() => new
|
|
894
|
+
o,
|
|
895
|
+
() => new Ee()
|
|
907
896
|
), () => {
|
|
908
897
|
};
|
|
909
898
|
}
|
|
910
|
-
}),
|
|
899
|
+
}), co = /* @__PURE__ */ c({
|
|
911
900
|
__name: "DotScreenPmndrs",
|
|
912
901
|
props: {
|
|
913
902
|
angle: {},
|
|
914
903
|
scale: {},
|
|
915
904
|
blendFunction: {}
|
|
916
905
|
},
|
|
917
|
-
setup(
|
|
918
|
-
const e =
|
|
919
|
-
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(
|
|
920
909
|
[
|
|
921
910
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
922
911
|
[() => e.angle, "angle"],
|
|
923
912
|
[() => e.scale, "scale"]
|
|
924
913
|
],
|
|
925
|
-
|
|
926
|
-
() => new
|
|
914
|
+
o,
|
|
915
|
+
() => new Pe()
|
|
927
916
|
), () => {
|
|
928
917
|
};
|
|
929
918
|
}
|
|
930
|
-
}),
|
|
919
|
+
}), uo = /* @__PURE__ */ c({
|
|
931
920
|
__name: "SepiaPmndrs",
|
|
932
921
|
props: {
|
|
933
922
|
blendFunction: {},
|
|
934
923
|
intensity: {}
|
|
935
924
|
},
|
|
936
|
-
setup(
|
|
937
|
-
const e =
|
|
938
|
-
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(
|
|
939
928
|
[
|
|
940
929
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
941
930
|
[() => e.intensity, "intensity"]
|
|
942
931
|
],
|
|
943
|
-
|
|
944
|
-
() => new
|
|
932
|
+
o,
|
|
933
|
+
() => new De()
|
|
945
934
|
), () => {
|
|
946
935
|
};
|
|
947
936
|
}
|
|
948
937
|
});
|
|
949
|
-
class
|
|
938
|
+
class We extends J {
|
|
950
939
|
/**
|
|
951
940
|
* Creates a new LinocutEffect instance.
|
|
952
941
|
*
|
|
953
942
|
* @param {LinocutPmndrsProps} [options] - Configuration options for the effect.
|
|
954
943
|
*
|
|
955
944
|
*/
|
|
956
|
-
constructor({ blendFunction: t =
|
|
957
|
-
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;
|
|
958
947
|
super("LinocutEffect", `
|
|
959
948
|
uniform float scale;
|
|
960
949
|
uniform float noiseScale;
|
|
@@ -1018,37 +1007,33 @@ class Ne extends K {
|
|
|
1018
1007
|
`, {
|
|
1019
1008
|
blendFunction: t,
|
|
1020
1009
|
uniforms: /* @__PURE__ */ new Map([
|
|
1021
|
-
["scale", new
|
|
1022
|
-
["noiseScale", new
|
|
1023
|
-
["center", new
|
|
1024
|
-
["rotation", new
|
|
1010
|
+
["scale", new M(e)],
|
|
1011
|
+
["noiseScale", new M(s)],
|
|
1012
|
+
["center", new M(i)],
|
|
1013
|
+
["rotation", new M(a)]
|
|
1025
1014
|
])
|
|
1026
1015
|
});
|
|
1027
1016
|
}
|
|
1028
1017
|
get scale() {
|
|
1029
|
-
|
|
1030
|
-
return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
|
|
1018
|
+
return this.uniforms.get("scale")?.value;
|
|
1031
1019
|
}
|
|
1032
1020
|
set scale(t) {
|
|
1033
1021
|
this.uniforms.get("scale").value = t;
|
|
1034
1022
|
}
|
|
1035
1023
|
get noiseScale() {
|
|
1036
|
-
|
|
1037
|
-
return (t = this.uniforms.get("noiseScale")) == null ? void 0 : t.value;
|
|
1024
|
+
return this.uniforms.get("noiseScale")?.value;
|
|
1038
1025
|
}
|
|
1039
1026
|
set noiseScale(t) {
|
|
1040
1027
|
this.uniforms.get("noiseScale").value = t;
|
|
1041
1028
|
}
|
|
1042
1029
|
get center() {
|
|
1043
|
-
|
|
1044
|
-
return (t = this.uniforms.get("center")) == null ? void 0 : t.value;
|
|
1030
|
+
return this.uniforms.get("center")?.value;
|
|
1045
1031
|
}
|
|
1046
1032
|
set center(t) {
|
|
1047
|
-
this.uniforms.get("center").value = Array.isArray(t) ? new
|
|
1033
|
+
this.uniforms.get("center").value = Array.isArray(t) ? new d().fromArray(t) : t;
|
|
1048
1034
|
}
|
|
1049
1035
|
get rotation() {
|
|
1050
|
-
|
|
1051
|
-
return (t = this.uniforms.get("rotation")) == null ? void 0 : t.value;
|
|
1036
|
+
return this.uniforms.get("rotation")?.value;
|
|
1052
1037
|
}
|
|
1053
1038
|
set rotation(t) {
|
|
1054
1039
|
this.uniforms.get("rotation").value = t;
|
|
@@ -1063,15 +1048,15 @@ const fo = /* @__PURE__ */ c({
|
|
|
1063
1048
|
center: {},
|
|
1064
1049
|
rotation: {}
|
|
1065
1050
|
},
|
|
1066
|
-
setup(
|
|
1067
|
-
const e =
|
|
1068
|
-
() => new
|
|
1051
|
+
setup(r, { expose: t }) {
|
|
1052
|
+
const e = r, { pass: s, effect: o } = f(
|
|
1053
|
+
() => new We({
|
|
1069
1054
|
...e,
|
|
1070
|
-
center: e.center instanceof
|
|
1055
|
+
center: e.center instanceof d ? [e.center.x, e.center.y] : e.center
|
|
1071
1056
|
}),
|
|
1072
1057
|
e
|
|
1073
1058
|
);
|
|
1074
|
-
return t({ pass:
|
|
1059
|
+
return t({ pass: s, effect: o }), p(
|
|
1075
1060
|
[
|
|
1076
1061
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1077
1062
|
[() => e.scale, "scale"],
|
|
@@ -1079,8 +1064,8 @@ const fo = /* @__PURE__ */ c({
|
|
|
1079
1064
|
[() => e.center, "center"],
|
|
1080
1065
|
[() => e.rotation, "rotation"]
|
|
1081
1066
|
],
|
|
1082
|
-
|
|
1083
|
-
() => new
|
|
1067
|
+
o,
|
|
1068
|
+
() => new We()
|
|
1084
1069
|
), () => {
|
|
1085
1070
|
};
|
|
1086
1071
|
}
|
|
@@ -1090,14 +1075,13 @@ const fo = /* @__PURE__ */ c({
|
|
|
1090
1075
|
depthPacking: {},
|
|
1091
1076
|
mode: {}
|
|
1092
1077
|
},
|
|
1093
|
-
setup(
|
|
1094
|
-
const e =
|
|
1095
|
-
|
|
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));
|
|
1096
1081
|
});
|
|
1097
|
-
return
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
}), t({ pass: s }), () => {
|
|
1082
|
+
return N(() => {
|
|
1083
|
+
!s?.value || !o || (s?.value?.removePass(o), o.dispose());
|
|
1084
|
+
}), t({ pass: o }), () => {
|
|
1101
1085
|
};
|
|
1102
1086
|
}
|
|
1103
1087
|
}), po = /* @__PURE__ */ c({
|
|
@@ -1118,17 +1102,17 @@ const fo = /* @__PURE__ */ c({
|
|
|
1118
1102
|
samples: {},
|
|
1119
1103
|
clampMax: {}
|
|
1120
1104
|
},
|
|
1121
|
-
setup(
|
|
1122
|
-
const e =
|
|
1123
|
-
() => e.lightSource ?? new
|
|
1124
|
-
new
|
|
1125
|
-
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 })
|
|
1126
1110
|
)
|
|
1127
|
-
), { pass: a, effect:
|
|
1128
|
-
() => new
|
|
1111
|
+
), { pass: a, effect: i } = f(
|
|
1112
|
+
() => new ae(s.value, o.value, e),
|
|
1129
1113
|
e
|
|
1130
1114
|
);
|
|
1131
|
-
return t({ pass: a, effect:
|
|
1115
|
+
return t({ pass: a, effect: i }), p(
|
|
1132
1116
|
[
|
|
1133
1117
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1134
1118
|
[() => e.density, "godRaysMaterial.density"],
|
|
@@ -1143,26 +1127,25 @@ const fo = /* @__PURE__ */ c({
|
|
|
1143
1127
|
[() => e.kernelSize, "blurPass.kernelSize"],
|
|
1144
1128
|
[() => e.blur, "blurPass.enabled"]
|
|
1145
1129
|
],
|
|
1146
|
-
|
|
1147
|
-
() => new
|
|
1148
|
-
),
|
|
1149
|
-
[() => e.lightSource,
|
|
1130
|
+
i,
|
|
1131
|
+
() => new ae()
|
|
1132
|
+
), m(
|
|
1133
|
+
[() => e.lightSource, i],
|
|
1150
1134
|
() => {
|
|
1151
|
-
|
|
1135
|
+
i.value && (i.value.lightSource = me(o.value));
|
|
1152
1136
|
},
|
|
1153
1137
|
{ immediate: !0 }
|
|
1154
|
-
),
|
|
1138
|
+
), m(
|
|
1155
1139
|
[() => e.opacity],
|
|
1156
1140
|
() => {
|
|
1157
|
-
var n, u;
|
|
1158
1141
|
if (e.opacity !== void 0)
|
|
1159
|
-
|
|
1142
|
+
i.value?.blendMode.setOpacity(e.opacity);
|
|
1160
1143
|
else {
|
|
1161
|
-
const
|
|
1162
|
-
|
|
1163
|
-
|
|
1144
|
+
const n = new ae(
|
|
1145
|
+
s.value,
|
|
1146
|
+
me(o.value)
|
|
1164
1147
|
);
|
|
1165
|
-
|
|
1148
|
+
i.value?.blendMode.setOpacity(n.blendMode.getOpacity()), n.dispose();
|
|
1166
1149
|
}
|
|
1167
1150
|
},
|
|
1168
1151
|
{
|
|
@@ -1178,35 +1161,33 @@ const fo = /* @__PURE__ */ c({
|
|
|
1178
1161
|
bits: {},
|
|
1179
1162
|
opacity: {}
|
|
1180
1163
|
},
|
|
1181
|
-
setup(
|
|
1182
|
-
const e =
|
|
1183
|
-
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(
|
|
1184
1167
|
() => e.blendFunction,
|
|
1185
|
-
|
|
1168
|
+
o,
|
|
1186
1169
|
"blendMode.blendFunction",
|
|
1187
1170
|
() => new X()
|
|
1188
|
-
),
|
|
1189
|
-
[
|
|
1171
|
+
), m(
|
|
1172
|
+
[o, () => e.bits],
|
|
1190
1173
|
() => {
|
|
1191
|
-
|
|
1192
|
-
if (s.value)
|
|
1174
|
+
if (o.value)
|
|
1193
1175
|
if (e.bits !== void 0)
|
|
1194
|
-
|
|
1176
|
+
o.value?.setBitDepth(e.bits);
|
|
1195
1177
|
else {
|
|
1196
|
-
const
|
|
1197
|
-
|
|
1178
|
+
const a = new X();
|
|
1179
|
+
o.value?.setBitDepth(a.getBitDepth()), a.dispose();
|
|
1198
1180
|
}
|
|
1199
1181
|
}
|
|
1200
|
-
),
|
|
1201
|
-
[
|
|
1182
|
+
), m(
|
|
1183
|
+
[o, () => e.opacity],
|
|
1202
1184
|
() => {
|
|
1203
|
-
|
|
1204
|
-
if (s.value)
|
|
1185
|
+
if (o.value)
|
|
1205
1186
|
if (e.opacity !== void 0)
|
|
1206
|
-
|
|
1187
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
1207
1188
|
else {
|
|
1208
|
-
const
|
|
1209
|
-
|
|
1189
|
+
const a = new X();
|
|
1190
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
1210
1191
|
}
|
|
1211
1192
|
}
|
|
1212
1193
|
), () => {
|
|
@@ -1219,21 +1200,21 @@ const fo = /* @__PURE__ */ c({
|
|
|
1219
1200
|
scale: {},
|
|
1220
1201
|
lineWidth: {}
|
|
1221
1202
|
},
|
|
1222
|
-
setup(
|
|
1223
|
-
const e =
|
|
1224
|
-
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(
|
|
1225
1206
|
[
|
|
1226
1207
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1227
1208
|
[() => e.scale, "scale"],
|
|
1228
1209
|
[() => e.lineWidth, "lineWidth"]
|
|
1229
1210
|
],
|
|
1230
|
-
|
|
1231
|
-
() => new
|
|
1211
|
+
o,
|
|
1212
|
+
() => new Le()
|
|
1232
1213
|
), () => {
|
|
1233
1214
|
};
|
|
1234
1215
|
}
|
|
1235
1216
|
});
|
|
1236
|
-
class
|
|
1217
|
+
class Ge extends J {
|
|
1237
1218
|
/**
|
|
1238
1219
|
* Creates a new FishEyeEffect instance.
|
|
1239
1220
|
*
|
|
@@ -1244,7 +1225,7 @@ class ze extends K {
|
|
|
1244
1225
|
* @param {number} [options.scale] - Scale.
|
|
1245
1226
|
*
|
|
1246
1227
|
*/
|
|
1247
|
-
constructor({ blendFunction: t =
|
|
1228
|
+
constructor({ blendFunction: t = Z.NORMAL, lensS: e = new d(1, 1), lensF: s = new d(0, 1), scale: o = 1 } = {}) {
|
|
1248
1229
|
super("FishEyeEffect", `
|
|
1249
1230
|
uniform vec2 lensS;
|
|
1250
1231
|
uniform vec2 lensF;
|
|
@@ -1266,9 +1247,9 @@ class ze extends K {
|
|
|
1266
1247
|
`, {
|
|
1267
1248
|
blendFunction: t,
|
|
1268
1249
|
uniforms: /* @__PURE__ */ new Map([
|
|
1269
|
-
["lensS", new
|
|
1270
|
-
["lensF", new
|
|
1271
|
-
["scale", new
|
|
1250
|
+
["lensS", new M(e)],
|
|
1251
|
+
["lensF", new M(s)],
|
|
1252
|
+
["scale", new M(o)]
|
|
1272
1253
|
])
|
|
1273
1254
|
});
|
|
1274
1255
|
}
|
|
@@ -1278,8 +1259,7 @@ class ze extends K {
|
|
|
1278
1259
|
* @type {Vector2}
|
|
1279
1260
|
*/
|
|
1280
1261
|
get lensS() {
|
|
1281
|
-
|
|
1282
|
-
return (t = this.uniforms.get("lensS")) == null ? void 0 : t.value;
|
|
1262
|
+
return this.uniforms.get("lensS")?.value;
|
|
1283
1263
|
}
|
|
1284
1264
|
set lensS(t) {
|
|
1285
1265
|
this.uniforms.get("lensS").value = t;
|
|
@@ -1290,8 +1270,7 @@ class ze extends K {
|
|
|
1290
1270
|
* @type {Vector2}
|
|
1291
1271
|
*/
|
|
1292
1272
|
get lensF() {
|
|
1293
|
-
|
|
1294
|
-
return (t = this.uniforms.get("lensF")) == null ? void 0 : t.value;
|
|
1273
|
+
return this.uniforms.get("lensF")?.value;
|
|
1295
1274
|
}
|
|
1296
1275
|
set lensF(t) {
|
|
1297
1276
|
this.uniforms.get("lensF").value = t;
|
|
@@ -1302,8 +1281,7 @@ class ze extends K {
|
|
|
1302
1281
|
* @type {number}
|
|
1303
1282
|
*/
|
|
1304
1283
|
get scale() {
|
|
1305
|
-
|
|
1306
|
-
return (t = this.uniforms.get("scale")) == null ? void 0 : t.value;
|
|
1284
|
+
return this.uniforms.get("scale")?.value;
|
|
1307
1285
|
}
|
|
1308
1286
|
set scale(t) {
|
|
1309
1287
|
this.uniforms.get("scale").value = t;
|
|
@@ -1317,28 +1295,28 @@ const go = /* @__PURE__ */ c({
|
|
|
1317
1295
|
lensF: {},
|
|
1318
1296
|
scale: {}
|
|
1319
1297
|
},
|
|
1320
|
-
setup(
|
|
1321
|
-
const e =
|
|
1322
|
-
() => Array.isArray(e.lensS) ? new
|
|
1323
|
-
),
|
|
1324
|
-
() => Array.isArray(e.lensF) ? new
|
|
1325
|
-
), { pass: a, effect:
|
|
1326
|
-
() => 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({
|
|
1327
1305
|
...e,
|
|
1328
|
-
lensS:
|
|
1329
|
-
lensF:
|
|
1306
|
+
lensS: s.value,
|
|
1307
|
+
lensF: o.value
|
|
1330
1308
|
}),
|
|
1331
1309
|
e
|
|
1332
1310
|
);
|
|
1333
|
-
return t({ pass: a, effect:
|
|
1311
|
+
return t({ pass: a, effect: i }), p(
|
|
1334
1312
|
[
|
|
1335
1313
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1336
|
-
[() =>
|
|
1337
|
-
[() =>
|
|
1314
|
+
[() => s.value, "lensS"],
|
|
1315
|
+
[() => o.value, "lensF"],
|
|
1338
1316
|
[() => e.scale, "scale"]
|
|
1339
1317
|
],
|
|
1340
|
-
|
|
1341
|
-
() => new
|
|
1318
|
+
i,
|
|
1319
|
+
() => new Ge()
|
|
1342
1320
|
), () => {
|
|
1343
1321
|
};
|
|
1344
1322
|
}
|
|
@@ -1349,20 +1327,20 @@ const go = /* @__PURE__ */ c({
|
|
|
1349
1327
|
brightness: {},
|
|
1350
1328
|
contrast: {}
|
|
1351
1329
|
},
|
|
1352
|
-
setup(
|
|
1353
|
-
const e =
|
|
1354
|
-
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(
|
|
1355
1333
|
[
|
|
1356
1334
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1357
1335
|
[() => e.brightness, "brightness"],
|
|
1358
1336
|
[() => e.contrast, "contrast"]
|
|
1359
1337
|
],
|
|
1360
|
-
|
|
1361
|
-
() => new
|
|
1338
|
+
o,
|
|
1339
|
+
() => new Fe()
|
|
1362
1340
|
), () => {
|
|
1363
1341
|
};
|
|
1364
1342
|
}
|
|
1365
|
-
}),
|
|
1343
|
+
}), ce = {
|
|
1366
1344
|
OFF: 0,
|
|
1367
1345
|
EDGES: 1,
|
|
1368
1346
|
WEIGHTS: 2
|
|
@@ -1376,56 +1354,56 @@ const go = /* @__PURE__ */ c({
|
|
|
1376
1354
|
predicationMode: {},
|
|
1377
1355
|
debug: {}
|
|
1378
1356
|
},
|
|
1379
|
-
setup(
|
|
1380
|
-
const e =
|
|
1381
|
-
t({ pass:
|
|
1382
|
-
const n = new
|
|
1383
|
-
|
|
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(
|
|
1384
1362
|
[
|
|
1385
1363
|
[() => Number(e.blendFunction), "blendMode.blendFunction"],
|
|
1386
1364
|
[() => Number(e.predicationMode), "edgeDetectionMaterial.predicationMode"],
|
|
1387
1365
|
[() => Number(e.edgeDetectionMode), "edgeDetectionMaterial.edgeDetectionMode"]
|
|
1388
1366
|
],
|
|
1389
|
-
|
|
1390
|
-
() => new
|
|
1391
|
-
),
|
|
1392
|
-
[
|
|
1367
|
+
o,
|
|
1368
|
+
() => new re()
|
|
1369
|
+
), m(
|
|
1370
|
+
[o, () => e.opacity],
|
|
1393
1371
|
() => {
|
|
1394
|
-
|
|
1372
|
+
o.value && (e.opacity !== void 0 ? o.value.blendMode.setOpacity(e.opacity) : o.value.blendMode.setOpacity(n.blendMode.getOpacity()));
|
|
1395
1373
|
},
|
|
1396
1374
|
{ immediate: !0 }
|
|
1397
|
-
),
|
|
1398
|
-
[
|
|
1375
|
+
), m(
|
|
1376
|
+
[o, () => e.preset],
|
|
1399
1377
|
() => {
|
|
1400
|
-
|
|
1378
|
+
o.value && o.value.applyPreset(Number(e.preset));
|
|
1401
1379
|
}
|
|
1402
1380
|
);
|
|
1403
|
-
let
|
|
1404
|
-
const
|
|
1405
|
-
if (!s.value)
|
|
1406
|
-
return null;
|
|
1407
|
-
const p = m === "edges" ? s.value.edgesTexture : s.value.weightsTexture, w = new Xe(a.value, s.value, new Y({ texture: p }));
|
|
1408
|
-
return w.renderToScreen = !1, w.enabled = !1, w.fullscreenMaterial.encodeOutput = !1, w;
|
|
1409
|
-
}, x = (m) => {
|
|
1410
|
-
m === "edges" && !u ? u = d("edges") : m === "weights" && !l && (l = d("weights"));
|
|
1411
|
-
}, b = (m, p) => {
|
|
1412
|
-
!m || !(r != null && r.value) || m.enabled !== p && (m.enabled = p, m.renderToScreen = p, p && !(r != null && r.value.passes.includes(m)) ? r == null || r.value.addPass(m) : !p && (r != null && r.value.passes.includes(m)) && (r == null || r.value.removePass(m), m.dispose()));
|
|
1413
|
-
}, A = (m) => {
|
|
1381
|
+
let l = null, u = null;
|
|
1382
|
+
const h = (g) => {
|
|
1414
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)
|
|
1415
1393
|
return;
|
|
1416
|
-
const
|
|
1417
|
-
|
|
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);
|
|
1418
1396
|
};
|
|
1419
|
-
return
|
|
1397
|
+
return m(
|
|
1420
1398
|
() => e.debug,
|
|
1421
1399
|
() => {
|
|
1422
|
-
!
|
|
1400
|
+
!s.value || e.debug === void 0 || U(e.debug);
|
|
1423
1401
|
},
|
|
1424
1402
|
{ immediate: !0 }
|
|
1425
1403
|
), () => {
|
|
1426
1404
|
};
|
|
1427
1405
|
}
|
|
1428
|
-
}),
|
|
1406
|
+
}), So = /* @__PURE__ */ c({
|
|
1429
1407
|
__name: "FXAAPmndrs",
|
|
1430
1408
|
props: {
|
|
1431
1409
|
blendFunction: {},
|
|
@@ -1435,9 +1413,9 @@ const go = /* @__PURE__ */ c({
|
|
|
1435
1413
|
maxEdgeThreshold: {},
|
|
1436
1414
|
subpixelQuality: {}
|
|
1437
1415
|
},
|
|
1438
|
-
setup(
|
|
1439
|
-
const e =
|
|
1440
|
-
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(
|
|
1441
1419
|
[
|
|
1442
1420
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1443
1421
|
[() => e.samples, "samples"],
|
|
@@ -1445,51 +1423,49 @@ const go = /* @__PURE__ */ c({
|
|
|
1445
1423
|
[() => e.maxEdgeThreshold, "maxEdgeThreshold"],
|
|
1446
1424
|
[() => e.subpixelQuality, "subpixelQuality"]
|
|
1447
1425
|
],
|
|
1448
|
-
|
|
1449
|
-
() => new
|
|
1450
|
-
),
|
|
1451
|
-
[
|
|
1426
|
+
o,
|
|
1427
|
+
() => new ie()
|
|
1428
|
+
), m(
|
|
1429
|
+
[o, () => e.opacity],
|
|
1452
1430
|
() => {
|
|
1453
|
-
|
|
1454
|
-
if (s.value)
|
|
1431
|
+
if (o.value)
|
|
1455
1432
|
if (e.opacity !== void 0)
|
|
1456
|
-
|
|
1433
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
1457
1434
|
else {
|
|
1458
|
-
const
|
|
1459
|
-
|
|
1435
|
+
const a = new ie();
|
|
1436
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
1460
1437
|
}
|
|
1461
1438
|
},
|
|
1462
1439
|
{ immediate: !0 }
|
|
1463
1440
|
), () => {
|
|
1464
1441
|
};
|
|
1465
1442
|
}
|
|
1466
|
-
}),
|
|
1443
|
+
}), wo = /* @__PURE__ */ c({
|
|
1467
1444
|
__name: "TexturePmndrs",
|
|
1468
1445
|
props: {
|
|
1469
1446
|
blendFunction: {},
|
|
1470
1447
|
texture: {},
|
|
1471
1448
|
opacity: {}
|
|
1472
1449
|
},
|
|
1473
|
-
setup(
|
|
1474
|
-
const e =
|
|
1450
|
+
setup(r, { expose: t }) {
|
|
1451
|
+
const e = r, { pass: s, effect: o } = f(() => new Y(e), e);
|
|
1475
1452
|
return t({
|
|
1476
|
-
pass:
|
|
1477
|
-
effect:
|
|
1478
|
-
}),
|
|
1453
|
+
pass: s,
|
|
1454
|
+
effect: o
|
|
1455
|
+
}), p(
|
|
1479
1456
|
[
|
|
1480
1457
|
[() => e.blendFunction, "blendMode.blendFunction"]
|
|
1481
1458
|
],
|
|
1482
|
-
|
|
1459
|
+
o,
|
|
1483
1460
|
() => new Y()
|
|
1484
|
-
),
|
|
1461
|
+
), m(
|
|
1485
1462
|
[() => e.opacity],
|
|
1486
1463
|
() => {
|
|
1487
|
-
var a, r;
|
|
1488
1464
|
if (e.opacity !== void 0)
|
|
1489
|
-
|
|
1465
|
+
o.value?.blendMode.setOpacity(e.opacity);
|
|
1490
1466
|
else {
|
|
1491
|
-
const
|
|
1492
|
-
|
|
1467
|
+
const a = new Y();
|
|
1468
|
+
o.value?.blendMode.setOpacity(a.blendMode.getOpacity()), a.dispose();
|
|
1493
1469
|
}
|
|
1494
1470
|
},
|
|
1495
1471
|
{
|
|
@@ -1509,55 +1485,55 @@ const go = /* @__PURE__ */ c({
|
|
|
1509
1485
|
useSceneColor: { type: Boolean },
|
|
1510
1486
|
asciiTexture: {}
|
|
1511
1487
|
},
|
|
1512
|
-
setup(
|
|
1513
|
-
const e =
|
|
1514
|
-
return t({ pass:
|
|
1515
|
-
|
|
1516
|
-
}),
|
|
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(
|
|
1517
1493
|
[
|
|
1518
1494
|
[() => e.blendFunction, "blendMode.blendFunction"],
|
|
1519
1495
|
[() => e.cellSize, "cellSize"],
|
|
1520
1496
|
[() => e.inverted, "inverted"]
|
|
1521
1497
|
],
|
|
1522
1498
|
n,
|
|
1523
|
-
() => new
|
|
1524
|
-
),
|
|
1499
|
+
() => new ne()
|
|
1500
|
+
), m(
|
|
1525
1501
|
[n, () => e.useSceneColor],
|
|
1526
1502
|
() => {
|
|
1527
|
-
n.value && (e.useSceneColor ? n.value.color = null : n.value.color = e.color ??
|
|
1503
|
+
n.value && (e.useSceneColor ? n.value.color = null : n.value.color = e.color ?? s.color);
|
|
1528
1504
|
},
|
|
1529
1505
|
{ immediate: !0 }
|
|
1530
|
-
),
|
|
1506
|
+
), m(
|
|
1531
1507
|
[n, () => e.opacity],
|
|
1532
1508
|
() => {
|
|
1533
|
-
n.value && n.value.blendMode.setOpacity(e.opacity ??
|
|
1509
|
+
n.value && n.value.blendMode.setOpacity(e.opacity ?? s.blendMode.getOpacity());
|
|
1534
1510
|
},
|
|
1535
1511
|
{ immediate: !0 }
|
|
1536
|
-
),
|
|
1512
|
+
), m(
|
|
1537
1513
|
[n, () => e.color],
|
|
1538
1514
|
() => {
|
|
1539
1515
|
n.value && (e.useSceneColor || (n.value.color = e.color ?? null));
|
|
1540
1516
|
},
|
|
1541
1517
|
{ immediate: !0 }
|
|
1542
|
-
),
|
|
1518
|
+
), m(
|
|
1543
1519
|
[n, () => e.asciiTexture],
|
|
1544
1520
|
() => {
|
|
1545
1521
|
if (!n.value)
|
|
1546
1522
|
return;
|
|
1547
|
-
const
|
|
1548
|
-
n.value.asciiTexture =
|
|
1523
|
+
const l = e.asciiTexture ? new st(e.asciiTexture) : s.asciiTexture;
|
|
1524
|
+
n.value.asciiTexture = l;
|
|
1549
1525
|
},
|
|
1550
1526
|
{ immediate: !0 }
|
|
1551
|
-
),
|
|
1527
|
+
), m(
|
|
1552
1528
|
[n, () => e.blendFunction],
|
|
1553
1529
|
() => {
|
|
1554
|
-
n.value && (n.value.blendMode.blendFunction = e.blendFunction ? Number(e.blendFunction) : Number(
|
|
1530
|
+
n.value && (n.value.blendMode.blendFunction = e.blendFunction ? Number(e.blendFunction) : Number(s.blendMode.blendFunction));
|
|
1555
1531
|
},
|
|
1556
1532
|
{ immediate: !0 }
|
|
1557
1533
|
), () => {
|
|
1558
1534
|
};
|
|
1559
1535
|
}
|
|
1560
|
-
}),
|
|
1536
|
+
}), k = {
|
|
1561
1537
|
name: "CopyShader",
|
|
1562
1538
|
uniforms: {
|
|
1563
1539
|
tDiffuse: { value: null },
|
|
@@ -1595,35 +1571,82 @@ const go = /* @__PURE__ */ c({
|
|
|
1595
1571
|
}`
|
|
1596
1572
|
)
|
|
1597
1573
|
};
|
|
1598
|
-
class
|
|
1574
|
+
class E {
|
|
1575
|
+
/**
|
|
1576
|
+
* Constructs a new pass.
|
|
1577
|
+
*/
|
|
1599
1578
|
constructor() {
|
|
1600
1579
|
this.isPass = !0, this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.renderToScreen = !1;
|
|
1601
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
|
+
*/
|
|
1602
1588
|
setSize() {
|
|
1603
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
|
+
*/
|
|
1604
1602
|
render() {
|
|
1605
1603
|
console.error("THREE.Pass: .render() must be implemented in derived pass.");
|
|
1606
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
|
+
*/
|
|
1607
1611
|
dispose() {
|
|
1608
1612
|
}
|
|
1609
1613
|
}
|
|
1610
|
-
const
|
|
1611
|
-
class
|
|
1614
|
+
const Lt = new rt(-1, 1, 1, -1, 0, 1);
|
|
1615
|
+
class Ft extends it {
|
|
1612
1616
|
constructor() {
|
|
1613
|
-
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));
|
|
1614
1618
|
}
|
|
1615
1619
|
}
|
|
1616
|
-
const
|
|
1617
|
-
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
|
+
*/
|
|
1618
1627
|
constructor(t) {
|
|
1619
|
-
this._mesh = new
|
|
1628
|
+
this._mesh = new Ye(Ot, t);
|
|
1620
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
|
+
*/
|
|
1621
1634
|
dispose() {
|
|
1622
1635
|
this._mesh.geometry.dispose();
|
|
1623
1636
|
}
|
|
1637
|
+
/**
|
|
1638
|
+
* Renders the full screen quad.
|
|
1639
|
+
*
|
|
1640
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
1641
|
+
*/
|
|
1624
1642
|
render(t) {
|
|
1625
|
-
t.render(this._mesh,
|
|
1643
|
+
t.render(this._mesh, Lt);
|
|
1626
1644
|
}
|
|
1645
|
+
/**
|
|
1646
|
+
* The quad's material.
|
|
1647
|
+
*
|
|
1648
|
+
* @type {?Material}
|
|
1649
|
+
*/
|
|
1627
1650
|
get material() {
|
|
1628
1651
|
return this._mesh.material;
|
|
1629
1652
|
}
|
|
@@ -1631,176 +1654,308 @@ class R {
|
|
|
1631
1654
|
this._mesh.material = t;
|
|
1632
1655
|
}
|
|
1633
1656
|
}
|
|
1634
|
-
class
|
|
1635
|
-
|
|
1636
|
-
|
|
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({
|
|
1637
1668
|
name: t.name !== void 0 ? t.name : "unspecified",
|
|
1638
1669
|
defines: Object.assign({}, t.defines),
|
|
1639
1670
|
uniforms: this.uniforms,
|
|
1640
1671
|
vertexShader: t.vertexShader,
|
|
1641
1672
|
fragmentShader: t.fragmentShader
|
|
1642
|
-
})), this.
|
|
1673
|
+
})), this._fsQuad = new O(this.material);
|
|
1643
1674
|
}
|
|
1644
|
-
|
|
1645
|
-
|
|
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));
|
|
1646
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
|
+
*/
|
|
1647
1693
|
dispose() {
|
|
1648
|
-
this.material.dispose(), this.
|
|
1694
|
+
this.material.dispose(), this._fsQuad.dispose();
|
|
1649
1695
|
}
|
|
1650
1696
|
}
|
|
1651
|
-
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
|
+
*/
|
|
1652
1704
|
constructor(t, e) {
|
|
1653
1705
|
super(), this.scene = t, this.camera = e, this.clear = !0, this.needsSwap = !1, this.inverse = !1;
|
|
1654
1706
|
}
|
|
1655
|
-
|
|
1656
|
-
|
|
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;
|
|
1657
1720
|
a.buffers.color.setMask(!1), a.buffers.depth.setMask(!1), a.buffers.color.setLocked(!0), a.buffers.depth.setLocked(!0);
|
|
1658
|
-
let
|
|
1659
|
-
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);
|
|
1660
1723
|
}
|
|
1661
1724
|
}
|
|
1662
|
-
class
|
|
1725
|
+
class Rt extends E {
|
|
1726
|
+
/**
|
|
1727
|
+
* Constructs a new clear mask pass.
|
|
1728
|
+
*/
|
|
1663
1729
|
constructor() {
|
|
1664
1730
|
super(), this.needsSwap = !1;
|
|
1665
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
|
+
*/
|
|
1666
1743
|
render(t) {
|
|
1667
1744
|
t.state.buffers.stencil.setLocked(!1), t.state.buffers.stencil.setTest(!1);
|
|
1668
1745
|
}
|
|
1669
1746
|
}
|
|
1670
|
-
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
|
+
*/
|
|
1671
1756
|
constructor(t, e) {
|
|
1672
1757
|
if (this.renderer = t, this._pixelRatio = t.getPixelRatio(), e === void 0) {
|
|
1673
|
-
const
|
|
1674
|
-
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";
|
|
1675
1760
|
} else
|
|
1676
1761
|
this._width = e.width, this._height = e.height;
|
|
1677
|
-
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();
|
|
1678
1763
|
}
|
|
1764
|
+
/**
|
|
1765
|
+
* Swaps the internal read/write buffers.
|
|
1766
|
+
*/
|
|
1679
1767
|
swapBuffers() {
|
|
1680
1768
|
const t = this.readBuffer;
|
|
1681
1769
|
this.readBuffer = this.writeBuffer, this.writeBuffer = t;
|
|
1682
1770
|
}
|
|
1771
|
+
/**
|
|
1772
|
+
* Adds the given pass to the pass chain.
|
|
1773
|
+
*
|
|
1774
|
+
* @param {Pass} pass - The pass to add.
|
|
1775
|
+
*/
|
|
1683
1776
|
addPass(t) {
|
|
1684
1777
|
this.passes.push(t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
|
|
1685
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
|
+
*/
|
|
1686
1785
|
insertPass(t, e) {
|
|
1687
1786
|
this.passes.splice(e, 0, t), t.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
|
|
1688
1787
|
}
|
|
1788
|
+
/**
|
|
1789
|
+
* Removes the given pass from the pass chain.
|
|
1790
|
+
*
|
|
1791
|
+
* @param {Pass} pass - The pass to remove.
|
|
1792
|
+
*/
|
|
1689
1793
|
removePass(t) {
|
|
1690
1794
|
const e = this.passes.indexOf(t);
|
|
1691
1795
|
e !== -1 && this.passes.splice(e, 1);
|
|
1692
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
|
+
*/
|
|
1693
1803
|
isLastEnabledPass(t) {
|
|
1694
1804
|
for (let e = t + 1; e < this.passes.length; e++)
|
|
1695
1805
|
if (this.passes[e].enabled)
|
|
1696
1806
|
return !1;
|
|
1697
1807
|
return !0;
|
|
1698
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
|
+
*/
|
|
1699
1815
|
render(t) {
|
|
1700
1816
|
t === void 0 && (t = this.clock.getDelta());
|
|
1701
1817
|
const e = this.renderer.getRenderTarget();
|
|
1702
|
-
let
|
|
1703
|
-
for (let
|
|
1704
|
-
const
|
|
1705
|
-
if (
|
|
1706
|
-
if (
|
|
1707
|
-
if (
|
|
1708
|
-
const n = this.renderer.getContext(),
|
|
1709
|
-
|
|
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);
|
|
1710
1826
|
}
|
|
1711
1827
|
this.swapBuffers();
|
|
1712
1828
|
}
|
|
1713
|
-
|
|
1829
|
+
He !== void 0 && (i instanceof He ? s = !0 : i instanceof Rt && (s = !1));
|
|
1714
1830
|
}
|
|
1715
1831
|
}
|
|
1716
1832
|
this.renderer.setRenderTarget(e);
|
|
1717
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
|
+
*/
|
|
1718
1840
|
reset(t) {
|
|
1719
1841
|
if (t === void 0) {
|
|
1720
|
-
const e = this.renderer.getSize(new
|
|
1842
|
+
const e = this.renderer.getSize(new d());
|
|
1721
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);
|
|
1722
1844
|
}
|
|
1723
1845
|
this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2;
|
|
1724
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
|
+
*/
|
|
1725
1854
|
setSize(t, e) {
|
|
1726
1855
|
this._width = t, this._height = e;
|
|
1727
|
-
const
|
|
1728
|
-
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);
|
|
1729
1858
|
for (let a = 0; a < this.passes.length; a++)
|
|
1730
|
-
this.passes[a].setSize(
|
|
1859
|
+
this.passes[a].setSize(s, o);
|
|
1731
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
|
+
*/
|
|
1732
1867
|
setPixelRatio(t) {
|
|
1733
1868
|
this._pixelRatio = t, this.setSize(this._width, this._height);
|
|
1734
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
|
+
*/
|
|
1735
1874
|
dispose() {
|
|
1736
1875
|
this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.copyPass.dispose();
|
|
1737
1876
|
}
|
|
1738
1877
|
}
|
|
1739
|
-
class
|
|
1740
|
-
|
|
1741
|
-
|
|
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();
|
|
1742
1891
|
}
|
|
1743
|
-
|
|
1744
|
-
|
|
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;
|
|
1745
1905
|
t.autoClear = !1;
|
|
1746
|
-
let a,
|
|
1747
|
-
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;
|
|
1748
1908
|
}
|
|
1749
1909
|
}
|
|
1750
|
-
const
|
|
1910
|
+
const Ke = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
|
|
1751
1911
|
__name: "EffectComposer",
|
|
1752
1912
|
props: {
|
|
1753
1913
|
enabled: { type: Boolean, default: !0 },
|
|
1754
1914
|
withoutRenderPass: { type: Boolean }
|
|
1755
1915
|
},
|
|
1756
|
-
setup(
|
|
1757
|
-
const e =
|
|
1758
|
-
|
|
1759
|
-
const { renderer:
|
|
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();
|
|
1760
1920
|
S(() => {
|
|
1761
|
-
|
|
1762
|
-
(d = o.value) == null || d.dispose(), o.value = new Rt(s.instance);
|
|
1921
|
+
s.value?.dispose(), s.value = new Nt(o.instance);
|
|
1763
1922
|
}), S(() => {
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
x.value && d.value && ((b = o.value) == null || b.setSize(d.value, x.value));
|
|
1923
|
+
const { width: h, height: x } = a;
|
|
1924
|
+
x.value && h.value && s.value?.setSize(h.value, x.value);
|
|
1767
1925
|
});
|
|
1768
|
-
const { pixelRatio:
|
|
1926
|
+
const { pixelRatio: u } = qe();
|
|
1769
1927
|
return S(() => {
|
|
1770
|
-
|
|
1771
|
-
(d = o.value) == null || d.setPixelRatio(l.value);
|
|
1928
|
+
s.value?.setPixelRatio(u.value);
|
|
1772
1929
|
}), e.withoutRenderPass || S(() => {
|
|
1773
|
-
n.activeCamera.value &&
|
|
1774
|
-
}),
|
|
1775
|
-
|
|
1776
|
-
}),
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
}), W = (i, t, e) => {
|
|
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) => {
|
|
1782
1938
|
if (!t && e)
|
|
1783
1939
|
throw new Error("passDependencies is required when dependencyFieldsTriggeringRecreation is provided");
|
|
1784
|
-
const
|
|
1785
|
-
t &&
|
|
1940
|
+
const s = K(Ke), o = W(r()), { sizes: a, invalidate: i } = T();
|
|
1941
|
+
t && m(t, () => i());
|
|
1786
1942
|
const n = () => {
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
!(o != null && o.value) || !a.height.value || !a.width.value || (o.value.addPass(s.value), ue(() => u()));
|
|
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()));
|
|
1791
1946
|
});
|
|
1792
|
-
return e &&
|
|
1793
|
-
() => e.map((
|
|
1947
|
+
return e && m(
|
|
1948
|
+
() => e.map((u) => t?.[u]),
|
|
1794
1949
|
() => {
|
|
1795
|
-
if (!
|
|
1950
|
+
if (!s?.value)
|
|
1796
1951
|
return;
|
|
1797
|
-
const
|
|
1798
|
-
~
|
|
1952
|
+
const u = s.value.passes.findIndex((h) => h === o.value);
|
|
1953
|
+
~u && (n(), o.value = r(), s.value.insertPass(o.value, u));
|
|
1799
1954
|
}
|
|
1800
|
-
),
|
|
1955
|
+
), N(() => {
|
|
1801
1956
|
n();
|
|
1802
|
-
}), { pass:
|
|
1803
|
-
},
|
|
1957
|
+
}), { pass: o };
|
|
1958
|
+
}, ue = {
|
|
1804
1959
|
uniforms: {
|
|
1805
1960
|
tDiffuse: { value: null },
|
|
1806
1961
|
//diffuse texture
|
|
@@ -1895,33 +2050,53 @@ const Qe = Symbol("effectComposerThree"), yo = /* @__PURE__ */ c({
|
|
|
1895
2050
|
}`
|
|
1896
2051
|
)
|
|
1897
2052
|
};
|
|
1898
|
-
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
|
+
*/
|
|
1899
2060
|
constructor(t = 64) {
|
|
1900
|
-
super()
|
|
1901
|
-
const e = Nt;
|
|
1902
|
-
this.uniforms = D.clone(e.uniforms), this.heightMap = this.generateHeightmap(t), this.uniforms.tDisp.value = this.heightMap, this.material = new M({
|
|
2061
|
+
super(), this.uniforms = P.clone(ue.uniforms), this.material = new y({
|
|
1903
2062
|
uniforms: this.uniforms,
|
|
1904
|
-
vertexShader:
|
|
1905
|
-
fragmentShader:
|
|
1906
|
-
}), 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();
|
|
2066
|
+
}
|
|
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));
|
|
1907
2080
|
}
|
|
1908
|
-
|
|
1909
|
-
|
|
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();
|
|
1910
2087
|
}
|
|
1911
|
-
|
|
1912
|
-
|
|
2088
|
+
// internals
|
|
2089
|
+
_generateTrigger() {
|
|
2090
|
+
this._randX = A.randInt(120, 240);
|
|
1913
2091
|
}
|
|
1914
|
-
|
|
1915
|
-
const e = new Float32Array(t * t),
|
|
1916
|
-
for (let a = 0; a <
|
|
1917
|
-
const
|
|
1918
|
-
e[a] =
|
|
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;
|
|
1919
2097
|
}
|
|
1920
|
-
const
|
|
1921
|
-
return
|
|
1922
|
-
}
|
|
1923
|
-
dispose() {
|
|
1924
|
-
this.material.dispose(), this.heightMap.dispose(), this.fsQuad.dispose();
|
|
2098
|
+
const o = new ct(e, t, t, ut, dt);
|
|
2099
|
+
return o.needsUpdate = !0, o;
|
|
1925
2100
|
}
|
|
1926
2101
|
}
|
|
1927
2102
|
const Mo = /* @__PURE__ */ c({
|
|
@@ -1930,18 +2105,18 @@ const Mo = /* @__PURE__ */ c({
|
|
|
1930
2105
|
dtSize: {},
|
|
1931
2106
|
goWild: { type: Boolean }
|
|
1932
2107
|
},
|
|
1933
|
-
setup(
|
|
1934
|
-
const e =
|
|
1935
|
-
t({ pass:
|
|
1936
|
-
const { onBeforeRender: a } =
|
|
1937
|
-
return a(() =>
|
|
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(
|
|
1938
2113
|
[[() => e.goWild, "goWild"]],
|
|
1939
|
-
|
|
1940
|
-
() => new
|
|
2114
|
+
s,
|
|
2115
|
+
() => new Ie()
|
|
1941
2116
|
), () => {
|
|
1942
2117
|
};
|
|
1943
2118
|
}
|
|
1944
|
-
}),
|
|
2119
|
+
}), q = {
|
|
1945
2120
|
uniforms: {
|
|
1946
2121
|
tDiffuse: { value: null },
|
|
1947
2122
|
shape: { value: 1 },
|
|
@@ -2244,25 +2419,51 @@ const Mo = /* @__PURE__ */ c({
|
|
|
2244
2419
|
}`
|
|
2245
2420
|
)
|
|
2246
2421
|
};
|
|
2247
|
-
class
|
|
2248
|
-
|
|
2249
|
-
|
|
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({
|
|
2250
2430
|
uniforms: this.uniforms,
|
|
2251
|
-
fragmentShader:
|
|
2252
|
-
vertexShader:
|
|
2253
|
-
})
|
|
2254
|
-
for (const
|
|
2255
|
-
|
|
2256
|
-
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);
|
|
2257
2437
|
}
|
|
2258
|
-
|
|
2259
|
-
|
|
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));
|
|
2260
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
|
+
*/
|
|
2261
2458
|
setSize(t, e) {
|
|
2262
2459
|
this.uniforms.width.value = t, this.uniforms.height.value = e;
|
|
2263
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
|
+
*/
|
|
2264
2465
|
dispose() {
|
|
2265
|
-
this.material.dispose(), this.
|
|
2466
|
+
this.material.dispose(), this._fsQuad.dispose();
|
|
2266
2467
|
}
|
|
2267
2468
|
}
|
|
2268
2469
|
const To = /* @__PURE__ */ c({
|
|
@@ -2278,61 +2479,85 @@ const To = /* @__PURE__ */ c({
|
|
|
2278
2479
|
greyscale: { type: Boolean },
|
|
2279
2480
|
blendingMode: {}
|
|
2280
2481
|
},
|
|
2281
|
-
setup(
|
|
2282
|
-
const e =
|
|
2482
|
+
setup(r, { expose: t }) {
|
|
2483
|
+
const e = r, { sizes: s } = G(), o = L(
|
|
2283
2484
|
() => Object.fromEntries(
|
|
2284
|
-
Object.entries(e).filter(([
|
|
2485
|
+
Object.entries(e).filter(([i, n]) => n !== void 0)
|
|
2285
2486
|
)
|
|
2286
|
-
), { pass: a } =
|
|
2287
|
-
o.width.value,
|
|
2288
|
-
o.height.value,
|
|
2289
|
-
s.value
|
|
2290
|
-
), e);
|
|
2487
|
+
), { pass: a } = z(() => new Ut(o.value), e);
|
|
2291
2488
|
return t({ pass: a }), S(() => {
|
|
2292
|
-
a.value.setSize(
|
|
2489
|
+
a.value.setSize(s.width.value, s.height.value);
|
|
2293
2490
|
}), S(() => {
|
|
2294
|
-
Object.entries(e).forEach(([
|
|
2295
|
-
|
|
2491
|
+
Object.entries(e).forEach(([i, n]) => {
|
|
2492
|
+
i in a.value.uniforms && (a.value.uniforms[i].value = n ?? q.uniforms[i].value);
|
|
2296
2493
|
});
|
|
2297
2494
|
}), () => {
|
|
2298
2495
|
};
|
|
2299
2496
|
}
|
|
2300
2497
|
});
|
|
2301
|
-
class
|
|
2302
|
-
|
|
2303
|
-
|
|
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);
|
|
2304
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
|
+
*/
|
|
2305
2514
|
dispose() {
|
|
2306
|
-
this.
|
|
2515
|
+
this._beautyRenderTarget.dispose(), this._normalRenderTarget.dispose(), this.pixelatedMaterial.dispose(), this._normalMaterial.dispose(), this._fsQuad.dispose();
|
|
2307
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
|
+
*/
|
|
2308
2523
|
setSize(t, e) {
|
|
2309
|
-
this.
|
|
2310
|
-
const { x:
|
|
2311
|
-
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);
|
|
2312
2527
|
}
|
|
2528
|
+
/**
|
|
2529
|
+
* Sets the effect's pixel size.
|
|
2530
|
+
*
|
|
2531
|
+
* @param {number} pixelSize - The pixel size to set.
|
|
2532
|
+
*/
|
|
2313
2533
|
setPixelSize(t) {
|
|
2314
|
-
this.pixelSize = t, this.setSize(this.
|
|
2534
|
+
this.pixelSize = t, this.setSize(this._resolution.x, this._resolution.y);
|
|
2315
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
|
+
*/
|
|
2316
2547
|
render(t, e) {
|
|
2317
|
-
const
|
|
2318
|
-
|
|
2319
|
-
const
|
|
2320
|
-
t.setRenderTarget(this.
|
|
2321
|
-
}
|
|
2322
|
-
|
|
2323
|
-
|
|
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({
|
|
2324
2556
|
uniforms: {
|
|
2325
2557
|
tDiffuse: { value: null },
|
|
2326
2558
|
tDepth: { value: null },
|
|
2327
2559
|
tNormal: { value: null },
|
|
2328
|
-
resolution: {
|
|
2329
|
-
value: new ft(
|
|
2330
|
-
this.renderResolution.x,
|
|
2331
|
-
this.renderResolution.y,
|
|
2332
|
-
1 / this.renderResolution.x,
|
|
2333
|
-
1 / this.renderResolution.y
|
|
2334
|
-
)
|
|
2335
|
-
},
|
|
2560
|
+
resolution: { value: new pt() },
|
|
2336
2561
|
normalEdgeStrength: { value: 0 },
|
|
2337
2562
|
depthEdgeStrength: { value: 0 }
|
|
2338
2563
|
},
|
|
@@ -2452,21 +2677,21 @@ const Co = /* @__PURE__ */ c({
|
|
|
2452
2677
|
depthEdgeStrength: {},
|
|
2453
2678
|
normalEdgeStrength: {}
|
|
2454
2679
|
},
|
|
2455
|
-
setup(
|
|
2456
|
-
const e =
|
|
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);
|
|
2457
2682
|
return t({ pass: a }), S(() => {
|
|
2458
2683
|
a.value.setPixelSize(e.pixelSize);
|
|
2459
|
-
}),
|
|
2684
|
+
}), p(
|
|
2460
2685
|
[
|
|
2461
2686
|
[() => e.depthEdgeStrength, "depthEdgeStrength"],
|
|
2462
2687
|
[() => e.normalEdgeStrength, "normalEdgeStrength"]
|
|
2463
2688
|
],
|
|
2464
2689
|
a,
|
|
2465
|
-
() => new
|
|
2690
|
+
() => new Xe(1, s.value, o.value)
|
|
2466
2691
|
), () => {
|
|
2467
2692
|
};
|
|
2468
2693
|
}
|
|
2469
|
-
}),
|
|
2694
|
+
}), j = {
|
|
2470
2695
|
name: "OutputShader",
|
|
2471
2696
|
uniforms: {
|
|
2472
2697
|
tDiffuse: { value: null },
|
|
@@ -2552,38 +2777,54 @@ const Co = /* @__PURE__ */ c({
|
|
|
2552
2777
|
}`
|
|
2553
2778
|
)
|
|
2554
2779
|
};
|
|
2555
|
-
class
|
|
2780
|
+
class Wt extends E {
|
|
2781
|
+
/**
|
|
2782
|
+
* Constructs a new output pass.
|
|
2783
|
+
*/
|
|
2556
2784
|
constructor() {
|
|
2557
|
-
super()
|
|
2558
|
-
|
|
2559
|
-
this.uniforms = D.clone(t.uniforms), this.material = new ht({
|
|
2560
|
-
name: t.name,
|
|
2785
|
+
super(), this.uniforms = P.clone(j.uniforms), this.material = new mt({
|
|
2786
|
+
name: j.name,
|
|
2561
2787
|
uniforms: this.uniforms,
|
|
2562
|
-
vertexShader:
|
|
2563
|
-
fragmentShader:
|
|
2564
|
-
}), this.
|
|
2788
|
+
vertexShader: j.vertexShader,
|
|
2789
|
+
fragmentShader: j.fragmentShader
|
|
2790
|
+
}), this._fsQuad = new O(this.material), this._outputColorSpace = null, this._toneMapping = null;
|
|
2565
2791
|
}
|
|
2566
|
-
|
|
2567
|
-
|
|
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));
|
|
2568
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
|
+
*/
|
|
2569
2810
|
dispose() {
|
|
2570
|
-
this.material.dispose(), this.
|
|
2811
|
+
this.material.dispose(), this._fsQuad.dispose();
|
|
2571
2812
|
}
|
|
2572
2813
|
}
|
|
2573
2814
|
const Eo = /* @__PURE__ */ c({
|
|
2574
2815
|
__name: "Output",
|
|
2575
|
-
setup(
|
|
2576
|
-
const { pass: e } =
|
|
2816
|
+
setup(r, { expose: t }) {
|
|
2817
|
+
const { pass: e } = z(() => new Wt());
|
|
2577
2818
|
return t({ pass: e }), () => {
|
|
2578
2819
|
};
|
|
2579
2820
|
}
|
|
2580
|
-
}),
|
|
2821
|
+
}), V = {
|
|
2581
2822
|
defines: {
|
|
2582
2823
|
SMAA_THRESHOLD: "0.1"
|
|
2583
2824
|
},
|
|
2584
2825
|
uniforms: {
|
|
2585
2826
|
tDiffuse: { value: null },
|
|
2586
|
-
resolution: { value: new
|
|
2827
|
+
resolution: { value: new d(1 / 1024, 1 / 512) }
|
|
2587
2828
|
},
|
|
2588
2829
|
vertexShader: (
|
|
2589
2830
|
/* glsl */
|
|
@@ -2677,7 +2918,7 @@ const Eo = /* @__PURE__ */ c({
|
|
|
2677
2918
|
|
|
2678
2919
|
}`
|
|
2679
2920
|
)
|
|
2680
|
-
},
|
|
2921
|
+
}, _ = {
|
|
2681
2922
|
defines: {
|
|
2682
2923
|
SMAA_MAX_SEARCH_STEPS: "8",
|
|
2683
2924
|
SMAA_AREATEX_MAX_DISTANCE: "16",
|
|
@@ -2688,7 +2929,7 @@ const Eo = /* @__PURE__ */ c({
|
|
|
2688
2929
|
tDiffuse: { value: null },
|
|
2689
2930
|
tArea: { value: null },
|
|
2690
2931
|
tSearch: { value: null },
|
|
2691
|
-
resolution: { value: new
|
|
2932
|
+
resolution: { value: new d(1 / 1024, 1 / 512) }
|
|
2692
2933
|
},
|
|
2693
2934
|
vertexShader: (
|
|
2694
2935
|
/* glsl */
|
|
@@ -2926,11 +3167,11 @@ const Eo = /* @__PURE__ */ c({
|
|
|
2926
3167
|
|
|
2927
3168
|
}`
|
|
2928
3169
|
)
|
|
2929
|
-
},
|
|
3170
|
+
}, de = {
|
|
2930
3171
|
uniforms: {
|
|
2931
3172
|
tDiffuse: { value: null },
|
|
2932
3173
|
tColor: { value: null },
|
|
2933
|
-
resolution: { value: new
|
|
3174
|
+
resolution: { value: new d(1 / 1024, 1 / 512) }
|
|
2934
3175
|
},
|
|
2935
3176
|
vertexShader: (
|
|
2936
3177
|
/* glsl */
|
|
@@ -3015,53 +3256,78 @@ const Eo = /* @__PURE__ */ c({
|
|
|
3015
3256
|
}`
|
|
3016
3257
|
)
|
|
3017
3258
|
};
|
|
3018
|
-
class Gt extends
|
|
3019
|
-
|
|
3020
|
-
|
|
3259
|
+
class Gt extends E {
|
|
3260
|
+
/**
|
|
3261
|
+
* Constructs a new SMAA pass.
|
|
3262
|
+
*/
|
|
3263
|
+
constructor() {
|
|
3264
|
+
super(), this._edgesRT = new D(1, 1, {
|
|
3021
3265
|
depthBuffer: !1,
|
|
3022
|
-
type:
|
|
3023
|
-
}), this.
|
|
3266
|
+
type: C
|
|
3267
|
+
}), this._edgesRT.texture.name = "SMAAPass.edges", this._weightsRT = new D(1, 1, {
|
|
3024
3268
|
depthBuffer: !1,
|
|
3025
|
-
type:
|
|
3026
|
-
}), this.
|
|
3027
|
-
const
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
}, this.
|
|
3031
|
-
const
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
}, this.
|
|
3035
|
-
defines: Object.assign({}, j.defines),
|
|
3036
|
-
uniforms: this.uniformsEdges,
|
|
3037
|
-
vertexShader: j.vertexShader,
|
|
3038
|
-
fragmentShader: j.fragmentShader
|
|
3039
|
-
}), this.uniformsWeights = D.clone(V.uniforms), this.uniformsWeights.resolution.value.set(1 / t, 1 / e), this.uniformsWeights.tDiffuse.value = this.edgesRT.texture, this.uniformsWeights.tArea.value = this.areaTexture, this.uniformsWeights.tSearch.value = this.searchTexture, this.materialWeights = new M({
|
|
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({
|
|
3040
3279
|
defines: Object.assign({}, V.defines),
|
|
3041
|
-
uniforms: this.
|
|
3280
|
+
uniforms: this._uniformsEdges,
|
|
3042
3281
|
vertexShader: V.vertexShader,
|
|
3043
3282
|
fragmentShader: V.fragmentShader
|
|
3044
|
-
}), this.
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
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);
|
|
3049
3293
|
}
|
|
3050
|
-
|
|
3051
|
-
|
|
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));
|
|
3052
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
|
+
*/
|
|
3053
3314
|
setSize(t, e) {
|
|
3054
|
-
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);
|
|
3055
3316
|
}
|
|
3056
|
-
|
|
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() {
|
|
3057
3326
|
return "data:image/png;base64,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";
|
|
3058
3327
|
}
|
|
3059
|
-
|
|
3328
|
+
_getSearchTexture() {
|
|
3060
3329
|
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=";
|
|
3061
3330
|
}
|
|
3062
|
-
dispose() {
|
|
3063
|
-
this.edgesRT.dispose(), this.weightsRT.dispose(), this.areaTexture.dispose(), this.searchTexture.dispose(), this.materialEdges.dispose(), this.materialWeights.dispose(), this.materialBlend.dispose(), this.fsQuad.dispose();
|
|
3064
|
-
}
|
|
3065
3331
|
}
|
|
3066
3332
|
const Po = /* @__PURE__ */ c({
|
|
3067
3333
|
__name: "SMAA",
|
|
@@ -3069,19 +3335,19 @@ const Po = /* @__PURE__ */ c({
|
|
|
3069
3335
|
width: {},
|
|
3070
3336
|
height: {}
|
|
3071
3337
|
},
|
|
3072
|
-
setup(
|
|
3073
|
-
const e =
|
|
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);
|
|
3074
3340
|
return t({ pass: n }), S(() => {
|
|
3075
|
-
n.value.setSize(a.value,
|
|
3341
|
+
n.value.setSize(a.value, i.value);
|
|
3076
3342
|
}), () => {
|
|
3077
3343
|
};
|
|
3078
3344
|
}
|
|
3079
|
-
}),
|
|
3345
|
+
}), Je = {
|
|
3080
3346
|
uniforms: {
|
|
3081
3347
|
tDiffuse: { value: null },
|
|
3082
3348
|
luminosityThreshold: { value: 1 },
|
|
3083
3349
|
smoothWidth: { value: 1 },
|
|
3084
|
-
defaultColor: { value: new
|
|
3350
|
+
defaultColor: { value: new Q(0) },
|
|
3085
3351
|
defaultOpacity: { value: 0 }
|
|
3086
3352
|
},
|
|
3087
3353
|
vertexShader: (
|
|
@@ -3125,41 +3391,51 @@ const Po = /* @__PURE__ */ c({
|
|
|
3125
3391
|
}`
|
|
3126
3392
|
)
|
|
3127
3393
|
};
|
|
3128
|
-
class
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
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);
|
|
3138
3412
|
}
|
|
3139
|
-
const n =
|
|
3140
|
-
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({
|
|
3141
3415
|
uniforms: this.highPassUniforms,
|
|
3142
3416
|
vertexShader: n.vertexShader,
|
|
3143
3417
|
fragmentShader: n.fragmentShader
|
|
3144
3418
|
}), this.separableBlurMaterials = [];
|
|
3145
|
-
const
|
|
3146
|
-
a = Math.round(this.resolution.x / 2),
|
|
3147
|
-
for (let
|
|
3148
|
-
this.separableBlurMaterials.push(this.
|
|
3149
|
-
this.compositeMaterial = this.
|
|
3150
|
-
const
|
|
3151
|
-
this.compositeMaterial.uniforms.bloomFactors.value =
|
|
3152
|
-
const d = qe;
|
|
3153
|
-
this.copyUniforms = D.clone(d.uniforms), this.blendMaterial = new M({
|
|
3419
|
+
const l = [3, 5, 7, 9, 11];
|
|
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({
|
|
3154
3426
|
uniforms: this.copyUniforms,
|
|
3155
|
-
vertexShader:
|
|
3156
|
-
fragmentShader:
|
|
3157
|
-
blending:
|
|
3427
|
+
vertexShader: k.vertexShader,
|
|
3428
|
+
fragmentShader: k.fragmentShader,
|
|
3429
|
+
blending: Ct,
|
|
3158
3430
|
depthTest: !1,
|
|
3159
3431
|
depthWrite: !1,
|
|
3160
3432
|
transparent: !0
|
|
3161
|
-
}), this.
|
|
3433
|
+
}), this._oldClearColor = new Q(), this._oldClearAlpha = 1, this._basic = new ke(), this._fsQuad = new O(null);
|
|
3162
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
|
+
*/
|
|
3163
3439
|
dispose() {
|
|
3164
3440
|
for (let t = 0; t < this.renderTargetsHorizontal.length; t++)
|
|
3165
3441
|
this.renderTargetsHorizontal[t].dispose();
|
|
@@ -3168,36 +3444,54 @@ class N extends P {
|
|
|
3168
3444
|
this.renderTargetBright.dispose();
|
|
3169
3445
|
for (let t = 0; t < this.separableBlurMaterials.length; t++)
|
|
3170
3446
|
this.separableBlurMaterials[t].dispose();
|
|
3171
|
-
this.compositeMaterial.dispose(), this.blendMaterial.dispose(), this.
|
|
3447
|
+
this.compositeMaterial.dispose(), this.blendMaterial.dispose(), this._basic.dispose(), this._fsQuad.dispose();
|
|
3172
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
|
+
*/
|
|
3173
3455
|
setSize(t, e) {
|
|
3174
|
-
let
|
|
3175
|
-
this.renderTargetBright.setSize(
|
|
3456
|
+
let s = Math.round(t / 2), o = Math.round(e / 2);
|
|
3457
|
+
this.renderTargetBright.setSize(s, o);
|
|
3176
3458
|
for (let a = 0; a < this.nMips; a++)
|
|
3177
|
-
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);
|
|
3178
3460
|
}
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
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);
|
|
3183
3476
|
let n = this.renderTargetBright;
|
|
3184
|
-
for (let
|
|
3185
|
-
this.
|
|
3186
|
-
this.
|
|
3477
|
+
for (let l = 0; l < this.nMips; l++)
|
|
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;
|
|
3187
3480
|
}
|
|
3188
|
-
|
|
3481
|
+
// internals
|
|
3482
|
+
_getSeparableBlurMaterial(t) {
|
|
3189
3483
|
const e = [];
|
|
3190
|
-
for (let
|
|
3191
|
-
e.push(0.39894 * Math.exp(-0.5 *
|
|
3192
|
-
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({
|
|
3193
3487
|
defines: {
|
|
3194
3488
|
KERNEL_RADIUS: t
|
|
3195
3489
|
},
|
|
3196
3490
|
uniforms: {
|
|
3197
3491
|
colorTexture: { value: null },
|
|
3198
|
-
invSize: { value: new
|
|
3492
|
+
invSize: { value: new d(0.5, 0.5) },
|
|
3199
3493
|
// inverse texture size
|
|
3200
|
-
direction: { value: new
|
|
3494
|
+
direction: { value: new d(0.5, 0.5) },
|
|
3201
3495
|
gaussianCoefficients: { value: e }
|
|
3202
3496
|
// precomputed Gaussian coefficients
|
|
3203
3497
|
},
|
|
@@ -3229,8 +3523,8 @@ class N extends P {
|
|
|
3229
3523
|
}`
|
|
3230
3524
|
});
|
|
3231
3525
|
}
|
|
3232
|
-
|
|
3233
|
-
return new
|
|
3526
|
+
_getCompositeMaterial(t) {
|
|
3527
|
+
return new y({
|
|
3234
3528
|
defines: {
|
|
3235
3529
|
NUM_MIPS: t
|
|
3236
3530
|
},
|
|
@@ -3276,8 +3570,8 @@ class N extends P {
|
|
|
3276
3570
|
});
|
|
3277
3571
|
}
|
|
3278
3572
|
}
|
|
3279
|
-
|
|
3280
|
-
|
|
3573
|
+
R.BlurDirectionX = new d(1, 0);
|
|
3574
|
+
R.BlurDirectionY = new d(0, 1);
|
|
3281
3575
|
const Do = /* @__PURE__ */ c({
|
|
3282
3576
|
__name: "UnrealBloom",
|
|
3283
3577
|
props: {
|
|
@@ -3285,22 +3579,19 @@ const Do = /* @__PURE__ */ c({
|
|
|
3285
3579
|
strength: { default: 1 },
|
|
3286
3580
|
threshold: { default: 0 }
|
|
3287
3581
|
},
|
|
3288
|
-
setup(
|
|
3289
|
-
const e =
|
|
3290
|
-
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),
|
|
3291
3585
|
e.radius,
|
|
3292
3586
|
e.strength,
|
|
3293
3587
|
e.threshold
|
|
3294
3588
|
), e);
|
|
3295
|
-
return t({ pass:
|
|
3296
|
-
|
|
3297
|
-
s.value.radius = e.radius ?? ((a = s.value.getCompositeMaterial().uniforms.bloomRadius) == null ? void 0 : a.value) ?? 0.1;
|
|
3589
|
+
return t({ pass: o }), S(() => {
|
|
3590
|
+
o.value.radius = e.radius ?? o.value.getCompositeMaterial().uniforms.bloomRadius?.value ?? 0.1;
|
|
3298
3591
|
}), S(() => {
|
|
3299
|
-
|
|
3300
|
-
s.value.strength = e.strength ?? ((a = s.value.getCompositeMaterial().uniforms.bloomStrength) == null ? void 0 : a.value) ?? 1;
|
|
3592
|
+
o.value.strength = e.strength ?? o.value.getCompositeMaterial().uniforms.bloomStrength?.value ?? 1;
|
|
3301
3593
|
}), S(() => {
|
|
3302
|
-
|
|
3303
|
-
s.value.threshold = e.threshold ?? ((a = Ke.uniforms.luminosityThreshold) == null ? void 0 : a.value) ?? 1;
|
|
3594
|
+
o.value.threshold = e.threshold ?? Je.uniforms.luminosityThreshold?.value ?? 1;
|
|
3304
3595
|
}), () => {
|
|
3305
3596
|
};
|
|
3306
3597
|
}
|
|
@@ -3308,20 +3599,20 @@ const Do = /* @__PURE__ */ c({
|
|
|
3308
3599
|
export {
|
|
3309
3600
|
Ao as ASCIIPmndrs,
|
|
3310
3601
|
$t as BarrelBlurPmndrs,
|
|
3311
|
-
|
|
3602
|
+
Yt as BloomPmndrs,
|
|
3312
3603
|
xo as BrightnessContrastPmndrs,
|
|
3313
3604
|
to as ChromaticAberrationPmndrs,
|
|
3314
3605
|
ro as ColorAveragePmndrs,
|
|
3315
3606
|
mo as ColorDepthPmndrs,
|
|
3316
|
-
|
|
3607
|
+
kt as DepthOfFieldPmndrs,
|
|
3317
3608
|
ho as DepthPickingPassPmndrs,
|
|
3318
|
-
|
|
3609
|
+
co as DotScreenPmndrs,
|
|
3319
3610
|
yo as EffectComposer,
|
|
3320
|
-
|
|
3321
|
-
|
|
3611
|
+
_t as EffectComposerPmndrs,
|
|
3612
|
+
So as FXAAPmndrs,
|
|
3322
3613
|
go as FishEyePmndrs,
|
|
3323
3614
|
Mo as Glitch,
|
|
3324
|
-
|
|
3615
|
+
qt as GlitchPmndrs,
|
|
3325
3616
|
po as GodRaysPmndrs,
|
|
3326
3617
|
vo as GridPmndrs,
|
|
3327
3618
|
To as Halftone,
|
|
@@ -3329,21 +3620,21 @@ export {
|
|
|
3329
3620
|
ao as KuwaharaPmndrs,
|
|
3330
3621
|
io as LensDistortionPmndrs,
|
|
3331
3622
|
fo as LinocutPmndrs,
|
|
3332
|
-
|
|
3333
|
-
|
|
3623
|
+
Qt as NoisePmndrs,
|
|
3624
|
+
Kt as OutlinePmndrs,
|
|
3334
3625
|
Eo as Output,
|
|
3335
3626
|
Co as Pixelation,
|
|
3336
|
-
|
|
3627
|
+
Jt as PixelationPmndrs,
|
|
3337
3628
|
Po as SMAA,
|
|
3338
3629
|
bo as SMAAPmndrs,
|
|
3339
3630
|
so as ScanlinePmndrs,
|
|
3340
|
-
|
|
3631
|
+
uo as SepiaPmndrs,
|
|
3341
3632
|
no as ShockWavePmndrs,
|
|
3342
|
-
|
|
3633
|
+
wo as TexturePmndrs,
|
|
3343
3634
|
lo as TiltShiftPmndrs,
|
|
3344
3635
|
eo as ToneMappingPmndrs,
|
|
3345
3636
|
Do as UnrealBloom,
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3637
|
+
Zt as VignettePmndrs,
|
|
3638
|
+
z as useEffect,
|
|
3639
|
+
f as useEffectPmndrs
|
|
3349
3640
|
};
|