angular-three-postprocessing 2.0.0-beta.25 → 2.0.0-beta.250
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/esm2022/lib/effect-composer.mjs +118 -167
- package/esm2022/lib/effect.mjs +43 -71
- package/esm2022/lib/effects/ascii.mjs +120 -0
- package/esm2022/lib/effects/bloom.mjs +39 -0
- package/esm2022/lib/effects/brightness-contrast.mjs +38 -0
- package/esm2022/lib/effects/chromatic-abberation.mjs +38 -0
- package/esm2022/lib/effects/color-average.mjs +33 -0
- package/esm2022/lib/effects/color-depth.mjs +38 -0
- package/esm2022/lib/effects/depth-of-field.mjs +56 -0
- package/esm2022/lib/effects/depth.mjs +38 -0
- package/esm2022/lib/effects/dot-screen.mjs +38 -0
- package/esm2022/lib/effects/fxaa.mjs +38 -0
- package/esm2022/lib/effects/glitch.mjs +63 -0
- package/esm2022/lib/effects/god-rays.mjs +41 -0
- package/esm2022/lib/effects/grid.mjs +44 -0
- package/esm2022/lib/effects/hue-saturation.mjs +38 -0
- package/esm2022/lib/effects/index.mjs +27 -18
- package/esm2022/lib/effects/lens-flare.mjs +194 -0
- package/esm2022/lib/effects/lut.mjs +50 -0
- package/esm2022/lib/effects/noise.mjs +39 -0
- package/esm2022/lib/effects/pixelation.mjs +30 -0
- package/esm2022/lib/effects/scanline.mjs +43 -0
- package/esm2022/lib/effects/sepia.mjs +38 -0
- package/esm2022/lib/effects/shock-wave.mjs +38 -0
- package/esm2022/lib/effects/smaa.mjs +38 -0
- package/esm2022/lib/effects/tilt-shift-2.mjs +121 -0
- package/esm2022/lib/effects/tilt-shift.mjs +39 -0
- package/esm2022/lib/effects/vignette.mjs +38 -0
- package/esm2022/lib/effects/water.mjs +64 -0
- package/fesm2022/angular-three-postprocessing.mjs +1147 -654
- package/fesm2022/angular-three-postprocessing.mjs.map +1 -1
- package/lib/effect-composer.d.ts +63 -66
- package/lib/effect.d.ts +54 -25
- package/lib/effects/ascii.d.ts +23 -0
- package/lib/effects/bloom.d.ts +10 -0
- package/lib/effects/brightness-contrast.d.ts +15 -0
- package/lib/effects/chromatic-abberation.d.ts +16 -0
- package/lib/effects/color-average.d.ts +11 -0
- package/lib/effects/color-depth.d.ts +14 -0
- package/lib/effects/depth-of-field.d.ts +29 -0
- package/lib/effects/depth.d.ts +14 -0
- package/lib/effects/dot-screen.d.ts +15 -0
- package/lib/effects/fxaa.d.ts +13 -0
- package/lib/effects/glitch.d.ts +29 -0
- package/lib/effects/god-rays.d.ts +37 -0
- package/lib/effects/grid.d.ts +23 -0
- package/lib/effects/hue-saturation.d.ts +15 -0
- package/lib/effects/index.d.ts +26 -17
- package/lib/effects/lens-flare.d.ts +110 -0
- package/lib/effects/lut.d.ts +19 -0
- package/lib/effects/noise.d.ts +14 -0
- package/lib/effects/pixelation.d.ts +16 -0
- package/lib/effects/scanline.d.ts +17 -0
- package/lib/effects/sepia.d.ts +14 -0
- package/lib/effects/shock-wave.d.ts +11 -0
- package/lib/effects/smaa.d.ts +15 -0
- package/lib/effects/tilt-shift-2.d.ts +35 -0
- package/lib/effects/tilt-shift.d.ts +22 -0
- package/lib/effects/vignette.d.ts +17 -0
- package/lib/effects/water.d.ts +20 -0
- package/package.json +13 -6
- package/esm2022/lib/effects/bloom/bloom.mjs +0 -33
- package/esm2022/lib/effects/brightness-contrast/brightness-contrast.mjs +0 -29
- package/esm2022/lib/effects/color-depth/color-depth.mjs +0 -29
- package/esm2022/lib/effects/depth/depth.mjs +0 -29
- package/esm2022/lib/effects/dot-screen/dot-screen.mjs +0 -29
- package/esm2022/lib/effects/hue-saturation/hue-saturation.mjs +0 -29
- package/esm2022/lib/effects/lut/lut.mjs +0 -74
- package/esm2022/lib/effects/noise/noise.mjs +0 -33
- package/esm2022/lib/effects/pixelation/pixelation.mjs +0 -37
- package/esm2022/lib/effects/scanline/scanline.mjs +0 -33
- package/esm2022/lib/effects/sepia/sepia.mjs +0 -29
- package/esm2022/lib/effects/shock-wave/shock-wave.mjs +0 -29
- package/esm2022/lib/effects/smaa/smaa.mjs +0 -29
- package/esm2022/lib/effects/ssao/ssao.mjs +0 -217
- package/esm2022/lib/effects/tilt-shift/tilt-shift.mjs +0 -33
- package/esm2022/lib/effects/tone-mapping/tone-mapping.mjs +0 -29
- package/esm2022/lib/effects/vignette/vignette.mjs +0 -29
- package/lib/effects/bloom/bloom.d.ts +0 -13
- package/lib/effects/brightness-contrast/brightness-contrast.d.ts +0 -15
- package/lib/effects/color-depth/color-depth.d.ts +0 -14
- package/lib/effects/depth/depth.d.ts +0 -14
- package/lib/effects/dot-screen/dot-screen.d.ts +0 -15
- package/lib/effects/hue-saturation/hue-saturation.d.ts +0 -15
- package/lib/effects/lut/lut.d.ts +0 -29
- package/lib/effects/noise/noise.d.ts +0 -15
- package/lib/effects/pixelation/pixelation.d.ts +0 -20
- package/lib/effects/scanline/scanline.d.ts +0 -15
- package/lib/effects/sepia/sepia.d.ts +0 -14
- package/lib/effects/shock-wave/shock-wave.d.ts +0 -17
- package/lib/effects/smaa/smaa.d.ts +0 -16
- package/lib/effects/ssao/ssao.d.ts +0 -42
- package/lib/effects/tilt-shift/tilt-shift.d.ts +0 -23
- package/lib/effects/tone-mapping/tone-mapping.d.ts +0 -22
- package/lib/effects/vignette/vignette.d.ts +0 -17
|
@@ -1,223 +1,203 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
2
|
+
import { inject, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, input, Directive, Injector, computed, viewChild, afterNextRender } from '@angular/core';
|
|
3
|
+
import { injectStore, extend, createApiToken, pick, injectBeforeRender, getLocalState, NgtArgs, vector2, is } from 'angular-three';
|
|
4
|
+
import { createNoopInjectionToken } from 'ngxtension/create-injection-token';
|
|
5
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
|
+
import { EffectAttribute, EffectComposer, RenderPass, NormalPass, DepthDownsamplingPass, Effect, EffectPass, Pass, BloomEffect, BlendFunction, BrightnessContrastEffect, ChromaticAberrationEffect, ColorAverageEffect, ColorDepthEffect, DepthEffect, DepthOfFieldEffect, MaskFunction, DotScreenEffect, FXAAEffect, GlitchEffect, GlitchMode, GodRaysEffect, GridEffect, HueSaturationEffect, LUT3DEffect, NoiseEffect, PixelationEffect, ScanlineEffect, SepiaEffect, ShockWaveEffect, SMAAEffect, TiltShiftEffect, VignetteEffect } from 'postprocessing';
|
|
8
|
+
import { Group, HalfFloatType, NoToneMapping, Uniform, Texture, Color, CanvasTexture, RepeatWrapping, NearestFilter, Vector3, Vector2, Mesh } from 'three';
|
|
7
9
|
import { isWebGL2Available } from 'three-stdlib';
|
|
10
|
+
import { easing } from 'maath';
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
set _opacity(opacity) {
|
|
14
|
-
this.inputs.set({ opacity });
|
|
12
|
+
const [injectDefaultEffectOptions, provideDefaultEffectOptions] = createNoopInjectionToken('Default Effect options');
|
|
13
|
+
class NgtpEffectBlendMode {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.effect = inject(NgtpEffect, { optional: true });
|
|
15
16
|
}
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpEffectBlendMode, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: NgtpEffectBlendMode, isStandalone: true, selector: "ngtp-effect-blend-mode", ngImport: i0, template: `
|
|
19
|
+
@if (effect) {
|
|
20
|
+
<ngt-value [rawValue]="effect.blendFunction()" attach="blendMode.blendFunction" />
|
|
21
|
+
<ngt-value [rawValue]="effect.opacity()" attach="blendMode.opacity.value" />
|
|
22
|
+
}
|
|
23
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpEffectBlendMode, decorators: [{
|
|
26
|
+
type: Component,
|
|
27
|
+
args: [{
|
|
28
|
+
selector: 'ngtp-effect-blend-mode',
|
|
29
|
+
standalone: true,
|
|
30
|
+
template: `
|
|
31
|
+
@if (effect) {
|
|
32
|
+
<ngt-value [rawValue]="effect.blendFunction()" attach="blendMode.blendFunction" />
|
|
33
|
+
<ngt-value [rawValue]="effect.opacity()" attach="blendMode.opacity.value" />
|
|
34
|
+
}
|
|
35
|
+
`,
|
|
36
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
37
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
38
|
+
}]
|
|
39
|
+
}] });
|
|
40
|
+
class NgtpEffect {
|
|
16
41
|
constructor() {
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.blendFunction = this.inputs.select('blendFunction');
|
|
22
|
-
this.opacity = this.inputs.select('opacity');
|
|
23
|
-
this.store = injectNgtStore();
|
|
42
|
+
this.defaultEffectOptions = injectDefaultEffectOptions({ optional: true });
|
|
43
|
+
this.blendFunction = input(this.defaultEffectOptions?.blendFunction);
|
|
44
|
+
this.opacity = input(this.defaultEffectOptions?.opacity);
|
|
45
|
+
this.store = injectStore();
|
|
24
46
|
this.camera = this.store.select('camera');
|
|
25
47
|
this.invalidate = this.store.select('invalidate');
|
|
26
|
-
this.nativeInputs = computed(() => {
|
|
27
|
-
const effect = this.effectRef.nativeElement;
|
|
28
|
-
if (!effect)
|
|
29
|
-
return this.previousInputs || null;
|
|
30
|
-
const localState = getLocalState(effect);
|
|
31
|
-
if (!localState)
|
|
32
|
-
return this.previousInputs || null;
|
|
33
|
-
const nativeProps = localState.nativeProps.state();
|
|
34
|
-
delete nativeProps['__ngt_dummy_state__'];
|
|
35
|
-
if ('camera' in nativeProps) {
|
|
36
|
-
delete nativeProps['camera'];
|
|
37
|
-
}
|
|
38
|
-
if (!Object.keys(nativeProps).length)
|
|
39
|
-
return this.previousInputs || null;
|
|
40
|
-
return (this.previousInputs = nativeProps);
|
|
41
|
-
}, { equal: (a, b) => is.equ(a, b, { objects: 'shallow' }) });
|
|
42
|
-
this.args = computed(() => {
|
|
43
|
-
const [nativeInputs, nativeArgs] = [this.nativeInputs(), this.nativeArgs()];
|
|
44
|
-
if (nativeInputs) {
|
|
45
|
-
nativeArgs.push(nativeInputs);
|
|
46
|
-
}
|
|
47
|
-
return nativeArgs;
|
|
48
|
-
});
|
|
49
|
-
this.setBlendMode();
|
|
50
|
-
}
|
|
51
|
-
setBlendMode() {
|
|
52
|
-
effect(() => {
|
|
53
|
-
const [blendFunction, opacity, effect, invalidate] = [
|
|
54
|
-
this.blendFunction(),
|
|
55
|
-
this.opacity(),
|
|
56
|
-
this.effectRef.nativeElement,
|
|
57
|
-
this.invalidate(),
|
|
58
|
-
];
|
|
59
|
-
if (!effect)
|
|
60
|
-
return;
|
|
61
|
-
effect.blendMode.blendFunction =
|
|
62
|
-
!blendFunction && blendFunction !== 0 ? this.defaultBlendFunction : blendFunction;
|
|
63
|
-
if (opacity !== undefined)
|
|
64
|
-
effect.blendMode.opacity.value = opacity;
|
|
65
|
-
invalidate();
|
|
66
|
-
});
|
|
67
48
|
}
|
|
68
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
69
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
70
|
-
}
|
|
71
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
72
|
-
type: Directive
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
type: Input,
|
|
77
|
-
args: [{ alias: 'blendFunction' }]
|
|
78
|
-
}], _opacity: [{
|
|
79
|
-
type: Input,
|
|
80
|
-
args: [{ alias: 'opacity' }]
|
|
81
|
-
}] } });
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpEffect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
50
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: NgtpEffect, isStandalone: true, inputs: { blendFunction: { classPropertyName: "blendFunction", publicName: "blendFunction", isSignal: true, isRequired: false, transformFunction: null }, opacity: { classPropertyName: "opacity", publicName: "opacity", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpEffect, decorators: [{
|
|
53
|
+
type: Directive,
|
|
54
|
+
args: [{ standalone: true }]
|
|
55
|
+
}] });
|
|
56
|
+
const NgtpEffectHostDirective = { directive: NgtpEffect, inputs: ['blendFunction', 'opacity'] };
|
|
82
57
|
|
|
83
58
|
extend({ Group });
|
|
84
|
-
const [
|
|
59
|
+
const [injectEffectComposerApi, provideEffectComposerApi] = createApiToken(() => NgtpEffectComposer);
|
|
60
|
+
const defaultOptions$3 = {
|
|
61
|
+
enabled: true,
|
|
62
|
+
renderPriority: 1,
|
|
63
|
+
autoClear: true,
|
|
64
|
+
multisampling: 8,
|
|
65
|
+
frameBufferType: HalfFloatType,
|
|
66
|
+
};
|
|
67
|
+
function isConvolution(effect) {
|
|
68
|
+
return (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION;
|
|
69
|
+
}
|
|
85
70
|
class NgtpEffectComposer {
|
|
86
|
-
set _enabled(enabled) {
|
|
87
|
-
this.inputs.set({ enabled });
|
|
88
|
-
}
|
|
89
|
-
set _depthBuffer(depthBuffer) {
|
|
90
|
-
this.inputs.set({ depthBuffer });
|
|
91
|
-
}
|
|
92
|
-
set _disableNormalPass(disableNormalPass) {
|
|
93
|
-
this.inputs.set({ disableNormalPass });
|
|
94
|
-
}
|
|
95
|
-
set _stencilBuffer(stencilBuffer) {
|
|
96
|
-
this.inputs.set({ stencilBuffer });
|
|
97
|
-
}
|
|
98
|
-
set _autoClear(autoClear) {
|
|
99
|
-
this.inputs.set({ autoClear });
|
|
100
|
-
}
|
|
101
|
-
set _resolutionScale(resolutionScale) {
|
|
102
|
-
this.inputs.set({ resolutionScale });
|
|
103
|
-
}
|
|
104
|
-
set _multisampling(multisampling) {
|
|
105
|
-
this.inputs.set({ multisampling });
|
|
106
|
-
}
|
|
107
|
-
set _frameBufferType(frameBufferType) {
|
|
108
|
-
this.inputs.set({ frameBufferType });
|
|
109
|
-
}
|
|
110
|
-
set _renderPriority(renderPriority) {
|
|
111
|
-
this.inputs.set({ renderPriority });
|
|
112
|
-
}
|
|
113
|
-
set _camera(camera) {
|
|
114
|
-
this.inputs.set({ camera });
|
|
115
|
-
}
|
|
116
|
-
set _scene(scene) {
|
|
117
|
-
this.inputs.set({ scene });
|
|
118
|
-
}
|
|
119
71
|
constructor() {
|
|
120
|
-
this.
|
|
121
|
-
enabled: true,
|
|
122
|
-
renderPriority: 1,
|
|
123
|
-
autoClear: true,
|
|
124
|
-
multisampling: 8,
|
|
125
|
-
frameBufferType: THREE.HalfFloatType,
|
|
126
|
-
});
|
|
127
|
-
this.composerRef = injectNgtRef();
|
|
72
|
+
this.options = input(defaultOptions$3, { transform: mergeInputs(defaultOptions$3) });
|
|
128
73
|
this.injector = inject(Injector);
|
|
129
|
-
this.
|
|
74
|
+
this.autoEffect = injectAutoEffect();
|
|
75
|
+
this.store = injectStore();
|
|
76
|
+
this.size = this.store.select('size');
|
|
130
77
|
this.gl = this.store.select('gl');
|
|
131
78
|
this.defaultScene = this.store.select('scene');
|
|
132
79
|
this.defaultCamera = this.store.select('camera');
|
|
133
|
-
this.
|
|
134
|
-
this.
|
|
135
|
-
this.
|
|
136
|
-
this.
|
|
137
|
-
this.
|
|
138
|
-
this.
|
|
139
|
-
this.
|
|
140
|
-
this.
|
|
141
|
-
this.
|
|
142
|
-
this.
|
|
143
|
-
this.activeScene = computed(() => this.scene() || this.defaultScene());
|
|
144
|
-
this.activeCamera = computed(() => this.camera() || this.defaultCamera());
|
|
145
|
-
this.composerEntities = computed(() => {
|
|
80
|
+
this.depthBuffer = pick(this.options, 'depthBuffer');
|
|
81
|
+
this.stencilBuffer = pick(this.options, 'stencilBuffer');
|
|
82
|
+
this.multisampling = pick(this.options, 'multisampling');
|
|
83
|
+
this.frameBufferType = pick(this.options, 'frameBufferType');
|
|
84
|
+
this.scene = computed(() => this.options().scene ?? this.defaultScene());
|
|
85
|
+
this.camera = computed(() => this.options().camera ?? this.defaultCamera());
|
|
86
|
+
this.enableNormalPass = pick(this.options, 'enableNormalPass');
|
|
87
|
+
this.resolutionScale = pick(this.options, 'resolutionScale');
|
|
88
|
+
this.group = viewChild.required('group');
|
|
89
|
+
this.composerData = computed(() => {
|
|
146
90
|
const webGL2Available = isWebGL2Available();
|
|
147
|
-
const [gl, depthBuffer, stencilBuffer, multisampling, frameBufferType,
|
|
91
|
+
const [gl, scene, camera, depthBuffer, stencilBuffer, multisampling, frameBufferType, enableNormalPass, resolutionScale,] = [
|
|
148
92
|
this.gl(),
|
|
93
|
+
this.scene(),
|
|
94
|
+
this.camera(),
|
|
149
95
|
this.depthBuffer(),
|
|
150
96
|
this.stencilBuffer(),
|
|
151
97
|
this.multisampling(),
|
|
152
98
|
this.frameBufferType(),
|
|
153
|
-
this.
|
|
154
|
-
this.activeCamera(),
|
|
155
|
-
this.disableNormalPass(),
|
|
99
|
+
this.enableNormalPass(),
|
|
156
100
|
this.resolutionScale(),
|
|
157
101
|
];
|
|
158
|
-
//
|
|
159
|
-
const
|
|
102
|
+
// initialize composer
|
|
103
|
+
const composer = new EffectComposer(gl, {
|
|
160
104
|
depthBuffer,
|
|
161
105
|
stencilBuffer,
|
|
162
106
|
multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
|
|
163
107
|
frameBufferType,
|
|
164
108
|
});
|
|
165
|
-
//
|
|
166
|
-
|
|
167
|
-
//
|
|
109
|
+
// add render pass
|
|
110
|
+
composer.addPass(new RenderPass(scene, camera));
|
|
111
|
+
// create normal pass
|
|
168
112
|
let downSamplingPass = null;
|
|
169
113
|
let normalPass = null;
|
|
170
|
-
if (
|
|
114
|
+
if (enableNormalPass) {
|
|
171
115
|
normalPass = new NormalPass(scene, camera);
|
|
172
116
|
normalPass.enabled = false;
|
|
173
|
-
|
|
117
|
+
composer.addPass(normalPass);
|
|
174
118
|
if (resolutionScale !== undefined && webGL2Available) {
|
|
175
119
|
downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale });
|
|
176
120
|
downSamplingPass.enabled = false;
|
|
177
|
-
|
|
121
|
+
composer.addPass(downSamplingPass);
|
|
178
122
|
}
|
|
179
123
|
}
|
|
180
|
-
return {
|
|
124
|
+
return { composer, normalPass, downSamplingPass };
|
|
181
125
|
});
|
|
182
|
-
this.composer = computed(() => this.composerEntities().effectComposer);
|
|
183
126
|
this.api = computed(() => {
|
|
184
|
-
const [{
|
|
185
|
-
this.
|
|
127
|
+
const [{ composer, normalPass, downSamplingPass }, camera, scene, resolutionScale] = [
|
|
128
|
+
this.composerData(),
|
|
129
|
+
this.camera(),
|
|
130
|
+
this.scene(),
|
|
186
131
|
this.resolutionScale(),
|
|
187
|
-
this.activeCamera(),
|
|
188
|
-
this.activeScene(),
|
|
189
132
|
];
|
|
190
|
-
return { composer,
|
|
133
|
+
return { composer, camera, scene, normalPass, downSamplingPass, resolutionScale };
|
|
134
|
+
});
|
|
135
|
+
afterNextRender(() => {
|
|
136
|
+
this.disableToneMapping();
|
|
137
|
+
this.setComposerSize();
|
|
138
|
+
this.updatePasses();
|
|
139
|
+
injectBeforeRender(({ delta }) => {
|
|
140
|
+
const [{ composer }, { enabled, autoClear, stencilBuffer }, gl] = [
|
|
141
|
+
this.composerData(),
|
|
142
|
+
this.options(),
|
|
143
|
+
this.gl(),
|
|
144
|
+
];
|
|
145
|
+
if (enabled) {
|
|
146
|
+
const currentAutoClear = gl.autoClear;
|
|
147
|
+
gl.autoClear = autoClear;
|
|
148
|
+
if (stencilBuffer && !autoClear)
|
|
149
|
+
gl.clearStencil();
|
|
150
|
+
composer.render(delta);
|
|
151
|
+
gl.autoClear = currentAutoClear;
|
|
152
|
+
}
|
|
153
|
+
}, { injector: this.injector, priority: this.options().enabled ? this.options().renderPriority : 0 });
|
|
191
154
|
});
|
|
192
|
-
this.setComposerSize();
|
|
193
|
-
this.updatePasses();
|
|
194
155
|
}
|
|
195
|
-
|
|
196
|
-
|
|
156
|
+
// NOTE: Disable tone mapping because threejs disallows tonemapping on render targets
|
|
157
|
+
disableToneMapping() {
|
|
158
|
+
this.autoEffect(() => {
|
|
159
|
+
const gl = this.gl();
|
|
160
|
+
const currentTonemapping = gl.toneMapping;
|
|
161
|
+
gl.toneMapping = NoToneMapping;
|
|
162
|
+
return () => {
|
|
163
|
+
gl.toneMapping = currentTonemapping;
|
|
164
|
+
};
|
|
165
|
+
});
|
|
197
166
|
}
|
|
198
167
|
setComposerSize() {
|
|
199
|
-
|
|
200
|
-
const [composer,
|
|
201
|
-
composer
|
|
168
|
+
this.autoEffect(() => {
|
|
169
|
+
const [{ composer }, { width, height }] = [this.composerData(), this.size()];
|
|
170
|
+
if (composer) {
|
|
171
|
+
composer.setSize(width, height);
|
|
172
|
+
}
|
|
202
173
|
});
|
|
203
174
|
}
|
|
204
175
|
updatePasses() {
|
|
205
|
-
|
|
206
|
-
const [{
|
|
207
|
-
this.
|
|
208
|
-
this.
|
|
209
|
-
this.
|
|
210
|
-
this.activeCamera(),
|
|
176
|
+
this.autoEffect(() => {
|
|
177
|
+
const [group, { composer, normalPass, downSamplingPass }, camera] = [
|
|
178
|
+
this.group(),
|
|
179
|
+
this.composerData(),
|
|
180
|
+
this.camera(),
|
|
211
181
|
];
|
|
212
182
|
const passes = [];
|
|
213
|
-
if (
|
|
183
|
+
if (group.nativeElement && composer) {
|
|
184
|
+
const localState = getLocalState(group.nativeElement);
|
|
185
|
+
if (!localState)
|
|
186
|
+
return;
|
|
187
|
+
const children = localState.nonObjects();
|
|
214
188
|
for (let i = 0; i < children.length; i++) {
|
|
215
189
|
const child = children[i];
|
|
216
190
|
if (child instanceof Effect) {
|
|
217
|
-
const effects = [];
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
191
|
+
const effects = [child];
|
|
192
|
+
if (!isConvolution(child)) {
|
|
193
|
+
let next = null;
|
|
194
|
+
while ((next = children[i + 1]) instanceof Effect) {
|
|
195
|
+
if (isConvolution(next))
|
|
196
|
+
break;
|
|
197
|
+
effects.push(next);
|
|
198
|
+
i++;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
221
201
|
const pass = new EffectPass(camera, ...effects);
|
|
222
202
|
passes.push(pass);
|
|
223
203
|
}
|
|
@@ -225,766 +205,1279 @@ class NgtpEffectComposer {
|
|
|
225
205
|
passes.push(child);
|
|
226
206
|
}
|
|
227
207
|
}
|
|
228
|
-
for (const pass of passes)
|
|
208
|
+
for (const pass of passes) {
|
|
229
209
|
composer.addPass(pass);
|
|
210
|
+
}
|
|
230
211
|
if (normalPass)
|
|
231
212
|
normalPass.enabled = true;
|
|
232
213
|
if (downSamplingPass)
|
|
233
214
|
downSamplingPass.enabled = true;
|
|
234
215
|
}
|
|
235
|
-
|
|
216
|
+
return () => {
|
|
236
217
|
for (const pass of passes)
|
|
237
218
|
composer?.removePass(pass);
|
|
238
219
|
if (normalPass)
|
|
239
220
|
normalPass.enabled = false;
|
|
240
221
|
if (downSamplingPass)
|
|
241
222
|
downSamplingPass.enabled = false;
|
|
242
|
-
}
|
|
223
|
+
};
|
|
243
224
|
});
|
|
244
225
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
this.inputs.get('enabled'),
|
|
249
|
-
this.gl(),
|
|
250
|
-
this.autoClear(),
|
|
251
|
-
this.stencilBuffer(),
|
|
252
|
-
this.composer(),
|
|
253
|
-
];
|
|
254
|
-
if (enabled) {
|
|
255
|
-
const currentAutoClear = gl.autoClear;
|
|
256
|
-
gl.autoClear = autoClear;
|
|
257
|
-
if (stencilBuffer && !autoClear)
|
|
258
|
-
gl.clearStencil();
|
|
259
|
-
composer.render(delta);
|
|
260
|
-
gl.autoClear = currentAutoClear;
|
|
261
|
-
}
|
|
262
|
-
}, {
|
|
263
|
-
injector: this.injector,
|
|
264
|
-
priority: this.inputs.get('enabled') ? this.inputs.get('renderPriority') : 0,
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
268
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { composerRef: "composerRef", _enabled: ["enabled", "_enabled"], _depthBuffer: ["depthBuffer", "_depthBuffer"], _disableNormalPass: ["disableNormalPass", "_disableNormalPass"], _stencilBuffer: ["stencilBuffer", "_stencilBuffer"], _autoClear: ["autoClear", "_autoClear"], _resolutionScale: ["resolutionScale", "_resolutionScale"], _multisampling: ["multisampling", "_multisampling"], _frameBufferType: ["frameBufferType", "_frameBufferType"], _renderPriority: ["renderPriority", "_renderPriority"], _camera: ["camera", "_camera"], _scene: ["scene", "_scene"] }, providers: [provideNgtpEffectComposerApi()], ngImport: i0, template: `
|
|
269
|
-
<ngt-group [ref]="composerRef">
|
|
226
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
227
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.6", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideEffectComposerApi()], viewQueries: [{ propertyName: "group", first: true, predicate: ["group"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
228
|
+
<ngt-group #group>
|
|
270
229
|
<ng-content />
|
|
271
230
|
</ngt-group>
|
|
272
|
-
`, isInline: true }); }
|
|
231
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
273
232
|
}
|
|
274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpEffectComposer, decorators: [{
|
|
275
234
|
type: Component,
|
|
276
235
|
args: [{
|
|
277
236
|
selector: 'ngtp-effect-composer',
|
|
278
237
|
standalone: true,
|
|
279
238
|
template: `
|
|
280
|
-
<ngt-group
|
|
239
|
+
<ngt-group #group>
|
|
281
240
|
<ng-content />
|
|
282
241
|
</ngt-group>
|
|
283
242
|
`,
|
|
284
|
-
providers: [
|
|
243
|
+
providers: [provideEffectComposerApi()],
|
|
285
244
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
245
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
286
246
|
}]
|
|
287
|
-
}], ctorParameters:
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
247
|
+
}], ctorParameters: () => [] });
|
|
248
|
+
|
|
249
|
+
const fragment = `
|
|
250
|
+
uniform sampler2D uCharacters;
|
|
251
|
+
uniform float uCharactersCount;
|
|
252
|
+
uniform float uCellSize;
|
|
253
|
+
uniform bool uInvert;
|
|
254
|
+
uniform vec3 uColor;
|
|
255
|
+
|
|
256
|
+
const vec2 SIZE = vec2(16.);
|
|
257
|
+
|
|
258
|
+
vec3 greyscale(vec3 color, float strength) {
|
|
259
|
+
float g = dot(color, vec3(0.299, 0.587, 0.114));
|
|
260
|
+
return mix(color, vec3(g), strength);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
vec3 greyscale(vec3 color) {
|
|
264
|
+
return greyscale(color, 1.0);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
268
|
+
vec2 cell = resolution / uCellSize;
|
|
269
|
+
vec2 grid = 1.0 / cell;
|
|
270
|
+
vec2 pixelizedUV = grid * (0.5 + floor(uv / grid));
|
|
271
|
+
vec4 pixelized = texture2D(inputBuffer, pixelizedUV);
|
|
272
|
+
float greyscaled = greyscale(pixelized.rgb).r;
|
|
273
|
+
|
|
274
|
+
if (uInvert) {
|
|
275
|
+
greyscaled = 1.0 - greyscaled;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
float characterIndex = floor((uCharactersCount - 1.0) * greyscaled);
|
|
279
|
+
vec2 characterPosition = vec2(mod(characterIndex, SIZE.x), floor(characterIndex / SIZE.y));
|
|
280
|
+
vec2 offset = vec2(characterPosition.x, -characterPosition.y) / SIZE;
|
|
281
|
+
vec2 charUV = mod(uv * (cell / SIZE), 1.0 / SIZE) - vec2(0., 1.0 / SIZE) + offset;
|
|
282
|
+
vec4 asciiCharacter = texture2D(uCharacters, charUV);
|
|
283
|
+
|
|
284
|
+
asciiCharacter.rgb = uColor * asciiCharacter.r;
|
|
285
|
+
asciiCharacter.a = pixelized.a;
|
|
286
|
+
outputColor = asciiCharacter;
|
|
287
|
+
}
|
|
288
|
+
`;
|
|
289
|
+
class ASCIIEffect extends Effect {
|
|
290
|
+
constructor({ font = 'arial', characters = ` .:,'-^=*+?!|0#X%WM@`, fontSize = 54, cellSize = 16, color = '#ffffff', invert = false, } = {}) {
|
|
291
|
+
const uniforms = new Map([
|
|
292
|
+
['uCharacters', new Uniform(new Texture())],
|
|
293
|
+
['uCellSize', new Uniform(cellSize)],
|
|
294
|
+
['uCharactersCount', new Uniform(characters.length)],
|
|
295
|
+
['uColor', new Uniform(new Color(color))],
|
|
296
|
+
['uInvert', new Uniform(invert)],
|
|
297
|
+
]);
|
|
298
|
+
super('ASCIIEffect', fragment, { uniforms });
|
|
299
|
+
const charactersTextureUniform = this.uniforms.get('uCharacters');
|
|
300
|
+
if (charactersTextureUniform) {
|
|
301
|
+
charactersTextureUniform.value = this.createCharactersTexture(characters, font, fontSize);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** Draws the characters on a Canvas and returns a texture */
|
|
305
|
+
createCharactersTexture(characters, font, fontSize) {
|
|
306
|
+
const canvas = document.createElement('canvas');
|
|
307
|
+
const SIZE = 1024;
|
|
308
|
+
const MAX_PER_ROW = 16;
|
|
309
|
+
const CELL = SIZE / MAX_PER_ROW;
|
|
310
|
+
canvas.width = canvas.height = SIZE;
|
|
311
|
+
const texture = new CanvasTexture(canvas, undefined, RepeatWrapping, RepeatWrapping, NearestFilter, NearestFilter);
|
|
312
|
+
const context = canvas.getContext('2d');
|
|
313
|
+
if (!context) {
|
|
314
|
+
throw new Error('Context not available');
|
|
315
|
+
}
|
|
316
|
+
context.clearRect(0, 0, SIZE, SIZE);
|
|
317
|
+
context.font = `${fontSize}px ${font}`;
|
|
318
|
+
context.textAlign = 'center';
|
|
319
|
+
context.textBaseline = 'middle';
|
|
320
|
+
context.fillStyle = '#fff';
|
|
321
|
+
for (let i = 0; i < characters.length; i++) {
|
|
322
|
+
const char = characters[i];
|
|
323
|
+
const x = i % MAX_PER_ROW;
|
|
324
|
+
const y = Math.floor(i / MAX_PER_ROW);
|
|
325
|
+
context.fillText(char, x * CELL + CELL / 2, y * CELL + CELL / 2);
|
|
326
|
+
}
|
|
327
|
+
texture.needsUpdate = true;
|
|
328
|
+
return texture;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const defaultOptions$2 = {
|
|
332
|
+
font: 'arial',
|
|
333
|
+
characters: ` .:,'-^=*+?!|0#X%WM@`,
|
|
334
|
+
fontSize: 54,
|
|
335
|
+
cellSize: 16,
|
|
336
|
+
color: '#ffffff',
|
|
337
|
+
invert: false,
|
|
338
|
+
};
|
|
339
|
+
class NgtpASCII {
|
|
340
|
+
constructor() {
|
|
341
|
+
this.options = input(defaultOptions$2, { transform: mergeInputs(defaultOptions$2) });
|
|
342
|
+
this.effect = computed(() => new ASCIIEffect(this.options()));
|
|
343
|
+
}
|
|
344
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpASCII, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
345
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpASCII, isStandalone: true, selector: "ngtp-ascii", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
346
|
+
<ngt-primitive *args="[effect()]" />
|
|
347
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
348
|
+
}
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpASCII, decorators: [{
|
|
350
|
+
type: Component,
|
|
351
|
+
args: [{
|
|
352
|
+
selector: 'ngtp-ascii',
|
|
353
|
+
standalone: true,
|
|
354
|
+
template: `
|
|
355
|
+
<ngt-primitive *args="[effect()]" />
|
|
356
|
+
`,
|
|
357
|
+
imports: [NgtArgs],
|
|
358
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
359
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
360
|
+
}]
|
|
361
|
+
}] });
|
|
323
362
|
|
|
324
363
|
extend({ BloomEffect });
|
|
325
|
-
class NgtpBloom
|
|
364
|
+
class NgtpBloom {
|
|
326
365
|
constructor() {
|
|
327
|
-
|
|
328
|
-
this.
|
|
366
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
367
|
+
this.options = input({});
|
|
329
368
|
}
|
|
330
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
331
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
332
|
-
<ngt-bloom-effect
|
|
369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpBloom, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
370
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpBloom, isStandalone: true, selector: "ngtp-bloom", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.ADD })], hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
371
|
+
<ngt-bloom-effect *args="[options()]" [camera]="effect.camera()">
|
|
372
|
+
<ngtp-effect-blend-mode />
|
|
333
373
|
<ng-content />
|
|
334
374
|
</ngt-bloom-effect>
|
|
335
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
375
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
336
376
|
}
|
|
337
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
377
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpBloom, decorators: [{
|
|
338
378
|
type: Component,
|
|
339
379
|
args: [{
|
|
340
380
|
selector: 'ngtp-bloom',
|
|
341
381
|
standalone: true,
|
|
342
382
|
template: `
|
|
343
|
-
<ngt-bloom-effect
|
|
383
|
+
<ngt-bloom-effect *args="[options()]" [camera]="effect.camera()">
|
|
384
|
+
<ngtp-effect-blend-mode />
|
|
344
385
|
<ng-content />
|
|
345
386
|
</ngt-bloom-effect>
|
|
346
387
|
`,
|
|
347
|
-
imports: [NgtArgs],
|
|
388
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
348
389
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
390
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
391
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
392
|
+
providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.ADD })],
|
|
349
393
|
}]
|
|
350
394
|
}] });
|
|
351
395
|
|
|
352
396
|
extend({ BrightnessContrastEffect });
|
|
353
|
-
class NgtpBrightnessContrast
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
397
|
+
class NgtpBrightnessContrast {
|
|
398
|
+
constructor() {
|
|
399
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
400
|
+
this.options = input({});
|
|
401
|
+
}
|
|
402
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpBrightnessContrast, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
403
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpBrightnessContrast, isStandalone: true, selector: "ngtp-brightness-contrast", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
404
|
+
<ngt-brightness-contrast-effect *args="[options()]" [camera]="effect.camera()">
|
|
405
|
+
<ngtp-effect-blend-mode />
|
|
357
406
|
<ng-content />
|
|
358
407
|
</ngt-brightness-contrast-effect>
|
|
359
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
408
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
360
409
|
}
|
|
361
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
410
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpBrightnessContrast, decorators: [{
|
|
362
411
|
type: Component,
|
|
363
412
|
args: [{
|
|
364
413
|
selector: 'ngtp-brightness-contrast',
|
|
365
414
|
standalone: true,
|
|
366
415
|
template: `
|
|
367
|
-
<ngt-brightness-contrast-effect
|
|
416
|
+
<ngt-brightness-contrast-effect *args="[options()]" [camera]="effect.camera()">
|
|
417
|
+
<ngtp-effect-blend-mode />
|
|
368
418
|
<ng-content />
|
|
369
419
|
</ngt-brightness-contrast-effect>
|
|
420
|
+
`,
|
|
421
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
422
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
423
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
424
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
425
|
+
}]
|
|
426
|
+
}] });
|
|
427
|
+
|
|
428
|
+
extend({ ChromaticAberrationEffect });
|
|
429
|
+
class NgtpChromaticAberration {
|
|
430
|
+
constructor() {
|
|
431
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
432
|
+
this.options = input({});
|
|
433
|
+
}
|
|
434
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpChromaticAberration, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
435
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpChromaticAberration, isStandalone: true, selector: "ngtp-chromatic-aberration", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
436
|
+
<ngt-chromatic-aberration-effect *args="[options()]" [camera]="effect.camera()">
|
|
437
|
+
<ngtp-effect-blend-mode />
|
|
438
|
+
<ng-content />
|
|
439
|
+
</ngt-chromatic-aberration-effect>
|
|
440
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
441
|
+
}
|
|
442
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpChromaticAberration, decorators: [{
|
|
443
|
+
type: Component,
|
|
444
|
+
args: [{
|
|
445
|
+
selector: 'ngtp-chromatic-aberration',
|
|
446
|
+
template: `
|
|
447
|
+
<ngt-chromatic-aberration-effect *args="[options()]" [camera]="effect.camera()">
|
|
448
|
+
<ngtp-effect-blend-mode />
|
|
449
|
+
<ng-content />
|
|
450
|
+
</ngt-chromatic-aberration-effect>
|
|
451
|
+
`,
|
|
452
|
+
standalone: true,
|
|
453
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
454
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
455
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
456
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
457
|
+
}]
|
|
458
|
+
}] });
|
|
459
|
+
|
|
460
|
+
extend({ ColorAverageEffect });
|
|
461
|
+
class NgtpColorAverage {
|
|
462
|
+
constructor() {
|
|
463
|
+
this.options = input({ blendFunction: BlendFunction.NORMAL }, { transform: mergeInputs({ blendFunction: BlendFunction.NORMAL }) });
|
|
464
|
+
}
|
|
465
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpColorAverage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
466
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpColorAverage, isStandalone: true, selector: "ngtp-color-average", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
467
|
+
<ngt-color-average-effect *args="[options().blendFunction]">
|
|
468
|
+
<ng-content />
|
|
469
|
+
</ngt-color-average-effect>
|
|
470
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
471
|
+
}
|
|
472
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpColorAverage, decorators: [{
|
|
473
|
+
type: Component,
|
|
474
|
+
args: [{
|
|
475
|
+
selector: 'ngtp-color-average',
|
|
476
|
+
standalone: true,
|
|
477
|
+
template: `
|
|
478
|
+
<ngt-color-average-effect *args="[options().blendFunction]">
|
|
479
|
+
<ng-content />
|
|
480
|
+
</ngt-color-average-effect>
|
|
370
481
|
`,
|
|
371
482
|
imports: [NgtArgs],
|
|
372
483
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
484
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
373
485
|
}]
|
|
374
486
|
}] });
|
|
375
487
|
|
|
376
488
|
extend({ ColorDepthEffect });
|
|
377
|
-
class NgtpColorDepth
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
489
|
+
class NgtpColorDepth {
|
|
490
|
+
constructor() {
|
|
491
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
492
|
+
this.options = input({});
|
|
493
|
+
}
|
|
494
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpColorDepth, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
495
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpColorDepth, isStandalone: true, selector: "ngtp-color-depth", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
496
|
+
<ngt-color-depth-effect *args="[options()]" [camera]="effect.camera()">
|
|
497
|
+
<ngtp-effect-blend-mode />
|
|
381
498
|
<ng-content />
|
|
382
499
|
</ngt-color-depth-effect>
|
|
383
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
500
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
384
501
|
}
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
502
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpColorDepth, decorators: [{
|
|
386
503
|
type: Component,
|
|
387
504
|
args: [{
|
|
388
505
|
selector: 'ngtp-color-depth',
|
|
389
|
-
standalone: true,
|
|
390
506
|
template: `
|
|
391
|
-
<ngt-color-depth-effect
|
|
507
|
+
<ngt-color-depth-effect *args="[options()]" [camera]="effect.camera()">
|
|
508
|
+
<ngtp-effect-blend-mode />
|
|
392
509
|
<ng-content />
|
|
393
510
|
</ngt-color-depth-effect>
|
|
394
511
|
`,
|
|
395
|
-
|
|
512
|
+
standalone: true,
|
|
396
513
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
514
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
515
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
516
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
397
517
|
}]
|
|
398
518
|
}] });
|
|
399
519
|
|
|
400
520
|
extend({ DepthEffect });
|
|
401
|
-
class NgtpDepth
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
521
|
+
class NgtpDepth {
|
|
522
|
+
constructor() {
|
|
523
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
524
|
+
this.options = input({});
|
|
525
|
+
}
|
|
526
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpDepth, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
527
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpDepth, isStandalone: true, selector: "ngtp-depth", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
528
|
+
<ngt-depth-effect *args="[options()]" [camera]="effect.camera()">
|
|
529
|
+
<ngtp-effect-blend-mode />
|
|
405
530
|
<ng-content />
|
|
406
531
|
</ngt-depth-effect>
|
|
407
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
532
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
408
533
|
}
|
|
409
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
534
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpDepth, decorators: [{
|
|
410
535
|
type: Component,
|
|
411
536
|
args: [{
|
|
412
537
|
selector: 'ngtp-depth',
|
|
413
|
-
standalone: true,
|
|
414
538
|
template: `
|
|
415
|
-
<ngt-depth-effect
|
|
539
|
+
<ngt-depth-effect *args="[options()]" [camera]="effect.camera()">
|
|
540
|
+
<ngtp-effect-blend-mode />
|
|
416
541
|
<ng-content />
|
|
417
542
|
</ngt-depth-effect>
|
|
418
543
|
`,
|
|
419
|
-
|
|
544
|
+
standalone: true,
|
|
420
545
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
546
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
547
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
548
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
421
549
|
}]
|
|
422
550
|
}] });
|
|
423
551
|
|
|
552
|
+
class NgtpDepthOfField {
|
|
553
|
+
constructor() {
|
|
554
|
+
this.autoEffect = injectAutoEffect();
|
|
555
|
+
this.composerApi = injectEffectComposerApi();
|
|
556
|
+
this.options = input({});
|
|
557
|
+
this.autoFocus = computed(() => this.options().target != null);
|
|
558
|
+
this.effect = computed(() => {
|
|
559
|
+
const [{ camera }, options, autoFocus] = [this.composerApi(), this.options(), this.autoFocus()];
|
|
560
|
+
const effect = new DepthOfFieldEffect(camera, options);
|
|
561
|
+
// Creating a target enables autofocus, R3F will set via props
|
|
562
|
+
if (autoFocus)
|
|
563
|
+
effect.target = new Vector3();
|
|
564
|
+
// Depth texture for depth picking with optional packing strategy
|
|
565
|
+
if (options.depthTexture) {
|
|
566
|
+
effect.setDepthTexture(options.depthTexture.texture, options.depthTexture.packing);
|
|
567
|
+
}
|
|
568
|
+
// Temporary fix that restores DOF 6.21.3 behavior, everything since then lets shapes leak through the blur
|
|
569
|
+
const maskPass = effect.maskPass;
|
|
570
|
+
maskPass.maskFunction = MaskFunction.MULTIPLY_RGB_SET_ALPHA;
|
|
571
|
+
return effect;
|
|
572
|
+
});
|
|
573
|
+
afterNextRender(() => {
|
|
574
|
+
this.autoEffect(() => {
|
|
575
|
+
const effect = this.effect();
|
|
576
|
+
return () => {
|
|
577
|
+
effect.dispose();
|
|
578
|
+
};
|
|
579
|
+
});
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpDepthOfField, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
583
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpDepthOfField, isStandalone: true, selector: "ngtp-depth-of-field", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
584
|
+
<ngt-primitive *args="[effect()]" />
|
|
585
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
586
|
+
}
|
|
587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpDepthOfField, decorators: [{
|
|
588
|
+
type: Component,
|
|
589
|
+
args: [{
|
|
590
|
+
selector: 'ngtp-depth-of-field',
|
|
591
|
+
standalone: true,
|
|
592
|
+
template: `
|
|
593
|
+
<ngt-primitive *args="[effect()]" />
|
|
594
|
+
`,
|
|
595
|
+
imports: [NgtArgs],
|
|
596
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
597
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
598
|
+
}]
|
|
599
|
+
}], ctorParameters: () => [] });
|
|
600
|
+
|
|
424
601
|
extend({ DotScreenEffect });
|
|
425
|
-
class NgtpDotScreen
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
602
|
+
class NgtpDotScreen {
|
|
603
|
+
constructor() {
|
|
604
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
605
|
+
this.options = input({});
|
|
606
|
+
}
|
|
607
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpDotScreen, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
608
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpDotScreen, isStandalone: true, selector: "ngtp-dot-screen", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
609
|
+
<ngt-dot-screen-effect *args="[options()]" [camera]="effect.camera()">
|
|
610
|
+
<ngtp-effect-blend-mode />
|
|
429
611
|
<ng-content />
|
|
430
612
|
</ngt-dot-screen-effect>
|
|
431
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
613
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
432
614
|
}
|
|
433
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
615
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpDotScreen, decorators: [{
|
|
434
616
|
type: Component,
|
|
435
617
|
args: [{
|
|
436
618
|
selector: 'ngtp-dot-screen',
|
|
437
|
-
standalone: true,
|
|
438
619
|
template: `
|
|
439
|
-
<ngt-dot-screen-effect
|
|
620
|
+
<ngt-dot-screen-effect *args="[options()]" [camera]="effect.camera()">
|
|
621
|
+
<ngtp-effect-blend-mode />
|
|
440
622
|
<ng-content />
|
|
441
623
|
</ngt-dot-screen-effect>
|
|
442
624
|
`,
|
|
443
|
-
|
|
625
|
+
standalone: true,
|
|
444
626
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
627
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
628
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
629
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
445
630
|
}]
|
|
446
631
|
}] });
|
|
447
632
|
|
|
633
|
+
extend({ FXAAEffect });
|
|
634
|
+
class NgtpFXAA {
|
|
635
|
+
constructor() {
|
|
636
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
637
|
+
this.options = input({});
|
|
638
|
+
}
|
|
639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpFXAA, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
640
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpFXAA, isStandalone: true, selector: "ngtp-fxaa", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
641
|
+
<ngt-fXAA-effect *args="[options()]" [camera]="effect.camera()">
|
|
642
|
+
<ngtp-effect-blend-mode />
|
|
643
|
+
<ng-content />
|
|
644
|
+
</ngt-fXAA-effect>
|
|
645
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
646
|
+
}
|
|
647
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpFXAA, decorators: [{
|
|
648
|
+
type: Component,
|
|
649
|
+
args: [{
|
|
650
|
+
selector: 'ngtp-fxaa',
|
|
651
|
+
template: `
|
|
652
|
+
<ngt-fXAA-effect *args="[options()]" [camera]="effect.camera()">
|
|
653
|
+
<ngtp-effect-blend-mode />
|
|
654
|
+
<ng-content />
|
|
655
|
+
</ngt-fXAA-effect>
|
|
656
|
+
`,
|
|
657
|
+
standalone: true,
|
|
658
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
659
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
660
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
661
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
662
|
+
}]
|
|
663
|
+
}] });
|
|
664
|
+
|
|
665
|
+
class NgtpGlitch {
|
|
666
|
+
constructor() {
|
|
667
|
+
this.autoEffect = injectAutoEffect();
|
|
668
|
+
this.store = injectStore();
|
|
669
|
+
this.invalidate = this.store.select('invalidate');
|
|
670
|
+
this.options = input({ active: true }, { transform: mergeInputs({ active: true }) });
|
|
671
|
+
this.active = pick(this.options, 'active');
|
|
672
|
+
this.mode = pick(this.options, 'mode');
|
|
673
|
+
this.delay = vector2(this.options, 'delay');
|
|
674
|
+
this.duration = vector2(this.options, 'duration');
|
|
675
|
+
this.chromaticAberrationOffset = vector2(this.options, 'chromaticAberrationOffset');
|
|
676
|
+
this.strength = vector2(this.options, 'strength');
|
|
677
|
+
this.effect = computed(() => {
|
|
678
|
+
const [{ ratio, dtSize, columns, blendFunction, perturbationMap }, delay, duration, chromaticAberrationOffset, strength,] = [this.options(), this.delay(), this.duration(), this.chromaticAberrationOffset(), this.strength()];
|
|
679
|
+
return new GlitchEffect({
|
|
680
|
+
ratio,
|
|
681
|
+
dtSize,
|
|
682
|
+
columns,
|
|
683
|
+
blendFunction,
|
|
684
|
+
perturbationMap,
|
|
685
|
+
delay,
|
|
686
|
+
duration,
|
|
687
|
+
chromaticAberrationOffset,
|
|
688
|
+
strength,
|
|
689
|
+
});
|
|
690
|
+
});
|
|
691
|
+
afterNextRender(() => {
|
|
692
|
+
this.autoEffect(() => {
|
|
693
|
+
const effect = this.effect();
|
|
694
|
+
return () => effect.dispose();
|
|
695
|
+
});
|
|
696
|
+
this.autoEffect(() => {
|
|
697
|
+
const [effect, invalidate, mode, active] = [this.effect(), this.invalidate(), this.mode(), this.active()];
|
|
698
|
+
effect.mode = active ? mode || GlitchMode.SPORADIC : GlitchMode.DISABLED;
|
|
699
|
+
invalidate();
|
|
700
|
+
});
|
|
701
|
+
});
|
|
702
|
+
}
|
|
703
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpGlitch, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
704
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpGlitch, isStandalone: true, selector: "ngtp-glitch", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
705
|
+
<ngt-primitive *args="[effect()]" />
|
|
706
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
707
|
+
}
|
|
708
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpGlitch, decorators: [{
|
|
709
|
+
type: Component,
|
|
710
|
+
args: [{
|
|
711
|
+
selector: 'ngtp-glitch',
|
|
712
|
+
standalone: true,
|
|
713
|
+
template: `
|
|
714
|
+
<ngt-primitive *args="[effect()]" />
|
|
715
|
+
`,
|
|
716
|
+
imports: [NgtArgs],
|
|
717
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
718
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
719
|
+
}]
|
|
720
|
+
}], ctorParameters: () => [] });
|
|
721
|
+
|
|
722
|
+
class NgtpGodRays {
|
|
723
|
+
constructor() {
|
|
724
|
+
this.autoEffect = injectAutoEffect();
|
|
725
|
+
this.composerApi = injectEffectComposerApi();
|
|
726
|
+
this.options = input({});
|
|
727
|
+
this.effect = computed(() => {
|
|
728
|
+
const [{ camera }, { sun, ...options }] = [this.composerApi(), this.options()];
|
|
729
|
+
return new GodRaysEffect(camera, is.ref(sun) ? sun.nativeElement : sun, options);
|
|
730
|
+
});
|
|
731
|
+
afterNextRender(() => {
|
|
732
|
+
this.autoEffect(() => {
|
|
733
|
+
const [sun, effect] = [this.options().sun, this.effect()];
|
|
734
|
+
effect.lightSource = is.ref(sun) ? sun.nativeElement : sun;
|
|
735
|
+
});
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpGodRays, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
739
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpGodRays, isStandalone: true, selector: "ngtp-god-rays", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
740
|
+
<ngt-primitive *args="[effect()]" />
|
|
741
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
742
|
+
}
|
|
743
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpGodRays, decorators: [{
|
|
744
|
+
type: Component,
|
|
745
|
+
args: [{
|
|
746
|
+
selector: 'ngtp-god-rays',
|
|
747
|
+
standalone: true,
|
|
748
|
+
template: `
|
|
749
|
+
<ngt-primitive *args="[effect()]" />
|
|
750
|
+
`,
|
|
751
|
+
imports: [NgtArgs],
|
|
752
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
753
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
754
|
+
}]
|
|
755
|
+
}], ctorParameters: () => [] });
|
|
756
|
+
|
|
757
|
+
class NgtpGrid {
|
|
758
|
+
constructor() {
|
|
759
|
+
this.autoEffect = injectAutoEffect();
|
|
760
|
+
this.store = injectStore();
|
|
761
|
+
this.invalidate = this.store.select('invalidate');
|
|
762
|
+
this.options = input({});
|
|
763
|
+
this.size = pick(this.options, 'size');
|
|
764
|
+
this.effect = computed(() => {
|
|
765
|
+
const { size: _, ...options } = this.options();
|
|
766
|
+
return new GridEffect(options);
|
|
767
|
+
});
|
|
768
|
+
afterNextRender(() => {
|
|
769
|
+
this.autoEffect(() => {
|
|
770
|
+
const [size, effect] = [this.size(), this.effect()];
|
|
771
|
+
if (size) {
|
|
772
|
+
effect.setSize(size.width, size.height);
|
|
773
|
+
}
|
|
774
|
+
});
|
|
775
|
+
});
|
|
776
|
+
}
|
|
777
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
778
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpGrid, isStandalone: true, selector: "ngtp-grid", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
779
|
+
<ngt-primitive *args="[effect()]" />
|
|
780
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
781
|
+
}
|
|
782
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpGrid, decorators: [{
|
|
783
|
+
type: Component,
|
|
784
|
+
args: [{
|
|
785
|
+
selector: 'ngtp-grid',
|
|
786
|
+
standalone: true,
|
|
787
|
+
template: `
|
|
788
|
+
<ngt-primitive *args="[effect()]" />
|
|
789
|
+
`,
|
|
790
|
+
imports: [NgtArgs],
|
|
791
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
792
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
793
|
+
}]
|
|
794
|
+
}], ctorParameters: () => [] });
|
|
795
|
+
|
|
448
796
|
extend({ HueSaturationEffect });
|
|
449
|
-
class NgtpHueSaturation
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
797
|
+
class NgtpHueSaturation {
|
|
798
|
+
constructor() {
|
|
799
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
800
|
+
this.options = input({});
|
|
801
|
+
}
|
|
802
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpHueSaturation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
803
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpHueSaturation, isStandalone: true, selector: "ngtp-hue-saturation", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
804
|
+
<ngt-hue-saturation-effect *args="[options()]" [camera]="effect.camera()">
|
|
805
|
+
<ngtp-effect-blend-mode />
|
|
453
806
|
<ng-content />
|
|
454
807
|
</ngt-hue-saturation-effect>
|
|
455
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
808
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
456
809
|
}
|
|
457
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
810
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpHueSaturation, decorators: [{
|
|
458
811
|
type: Component,
|
|
459
812
|
args: [{
|
|
460
813
|
selector: 'ngtp-hue-saturation',
|
|
461
|
-
standalone: true,
|
|
462
814
|
template: `
|
|
463
|
-
<ngt-hue-saturation-effect
|
|
815
|
+
<ngt-hue-saturation-effect *args="[options()]" [camera]="effect.camera()">
|
|
816
|
+
<ngtp-effect-blend-mode />
|
|
464
817
|
<ng-content />
|
|
465
818
|
</ngt-hue-saturation-effect>
|
|
466
819
|
`,
|
|
467
|
-
|
|
820
|
+
standalone: true,
|
|
468
821
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
822
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
823
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
824
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
469
825
|
}]
|
|
470
826
|
}] });
|
|
471
827
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
828
|
+
// Created by Anderson Mancini 2023
|
|
829
|
+
// React Three Fiber Ultimate LensFlare
|
|
830
|
+
const LensFlareShader = {
|
|
831
|
+
fragmentShader: /* glsl */ `
|
|
832
|
+
|
|
833
|
+
uniform float iTime;
|
|
834
|
+
uniform vec2 lensPosition;
|
|
835
|
+
uniform vec2 iResolution;
|
|
836
|
+
uniform vec3 colorGain;
|
|
837
|
+
uniform float starPoints;
|
|
838
|
+
uniform float glareSize;
|
|
839
|
+
uniform float flareSize;
|
|
840
|
+
uniform float flareSpeed;
|
|
841
|
+
uniform float flareShape;
|
|
842
|
+
uniform float haloScale;
|
|
843
|
+
uniform float opacity;
|
|
844
|
+
uniform bool animated;
|
|
845
|
+
uniform bool anamorphic;
|
|
846
|
+
uniform bool enabled;
|
|
847
|
+
uniform bool secondaryGhosts;
|
|
848
|
+
uniform bool starBurst;
|
|
849
|
+
uniform float ghostScale;
|
|
850
|
+
uniform bool aditionalStreaks;
|
|
851
|
+
uniform sampler2D lensDirtTexture;
|
|
852
|
+
vec2 vxtC;
|
|
853
|
+
|
|
854
|
+
float rndf(float n){return fract(sin(n) * 43758.5453123);}float niz(float p){float fl = floor(p);float fc = fract(p);return mix(rndf(fl),rndf(fl + 1.0), fc);}
|
|
855
|
+
vec3 hsv2rgb(vec3 c){vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);vec3 p = abs(fract(c.xxx + k.xyz) * 6.0 - k.www);return c.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), c.y);}
|
|
856
|
+
float satU(float x){return clamp(x, 0.,1.);}vec2 rtU(vec2 naz, float rtn){return vec2(cos(rtn) * naz.x + sin(rtn) * naz.y,cos(rtn) * naz.y - sin(rtn) * naz.x);}
|
|
857
|
+
vec3 drwF(vec2 p, float intensity, float rnd, float speed, int id){float flhos = (1. / 32.) * float(id) * 0.1;float lingrad = distance(vec2(0.), p);float expg = 1. / exp(lingrad * (fract(rnd) * 0.66 + 0.33));vec3 qzTg = hsv2rgb(vec3( fract( (expg * 8.) + speed * flareSpeed + flhos), pow(1.-abs(expg*2.-1.), 0.45), 20.0 * expg * intensity));float internalStarPoints;if(anamorphic){internalStarPoints = 1.0;} else{internalStarPoints = starPoints;}float ams = length(p * flareShape * sin(internalStarPoints * atan(p.x, p.y)));float kJhg = pow(1.-satU(ams), ( anamorphic ? 100. : 12.));kJhg += satU(expg-0.9) * 3.;kJhg = pow(kJhg * expg, 8. + (1.-intensity) * 5.);if(flareSpeed > 0.0){return vec3(kJhg) * qzTg;} else{return vec3(kJhg) * flareSize * 15.;}}
|
|
858
|
+
float ams2(vec3 a, vec3 b) { return abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z);}vec3 satU(vec3 x){return clamp(x, vec3(0.0), vec3(1.0));}
|
|
859
|
+
float glR(vec2 naz, vec2 pos, float zsi){vec2 mni;if(animated){mni = rtU(naz-pos, iTime * 0.1);} else{mni = naz-pos;}float ang = atan(mni.y, mni.x) * (anamorphic ? 1.0 : starPoints);float ams2 = length(mni);ams2 = pow(ams2, .9);float f0 = 1.0/(length(naz-pos)*(1.0/zsi*16.0)+.2);return f0+f0*(sin((ang))*.2 +.3);}
|
|
860
|
+
float sdHex(vec2 p){p = abs(p);vec2 q = vec2(p.x*2.0*0.5773503, p.y + p.x*0.5773503);return dot(step(q.xy,q.yx), 1.0-q.yx);}float fpow(float x, float k){return x > k ? pow((x-k)/(1.0-k),2.0) : 0.0;}
|
|
861
|
+
vec3 rHx(vec2 naz, vec2 p, float s, vec3 col){naz -= p;if (abs(naz.x) < 0.2*s && abs(naz.y) < 0.2*s){return mix(vec3(0),mix(vec3(0),col,0.1 + fpow(length(naz/s),0.1)*10.0),smoothstep(0.0,0.1,sdHex(naz*20.0/s)));}return vec3(0);}
|
|
862
|
+
vec3 mLs(vec2 naz, vec2 pos){vec2 mni = naz-pos;vec2 zxMp = naz*(length(naz));float ang = atan(mni.x,mni.y);float f0 = .3/(length(naz-pos)*16.0+1.0);f0 = f0*(sin(niz(sin(ang*3.9-(animated ? iTime : 0.0) * 0.3) * starPoints))*.2 );float f1 = max(0.01-pow(length(naz+1.2*pos),1.9),.0)*7.0;float f2 = max(.9/(10.0+32.0*pow(length(zxMp+0.99*pos),2.0)),.0)*0.35;float f22 = max(.9/(11.0+32.0*pow(length(zxMp+0.85*pos),2.0)),.0)*0.23;float f23 = max(.9/(12.0+32.0*pow(length(zxMp+0.95*pos),2.0)),.0)*0.6;vec2 ztX = mix(naz,zxMp, 0.1);float f4 = max(0.01-pow(length(ztX+0.4*pos),2.9),.0)*4.02;float f42 = max(0.0-pow(length(ztX+0.45*pos),2.9),.0)*4.1;float f43 = max(0.01-pow(length(ztX+0.5*pos),2.9),.0)*4.6;ztX = mix(naz,zxMp,-.4);float f5 = max(0.01-pow(length(ztX+0.1*pos),5.5),.0)*2.0;float f52 = max(0.01-pow(length(ztX+0.2*pos),5.5),.0)*2.0;float f53 = max(0.01-pow(length(ztX+0.1*pos),5.5),.0)*2.0;ztX = mix(naz,zxMp, 2.1);float f6 = max(0.01-pow(length(ztX-0.3*pos),1.61),.0)*3.159;float f62 = max(0.01-pow(length(ztX-0.325*pos),1.614),.0)*3.14;float f63 = max(0.01-pow(length(ztX-0.389*pos),1.623),.0)*3.12;vec3 c = vec3(glR(naz,pos, glareSize));vec2 prot;if(animated){prot = rtU(naz - pos, (iTime * 0.1));} else if(anamorphic){prot = rtU(naz - pos, 1.570796);} else {prot = naz - pos;}c += drwF(prot, (anamorphic ? flareSize * 10. : flareSize), 0.1, iTime, 1);c.r+=f1+f2+f4+f5+f6; c.g+=f1+f22+f42+f52+f62; c.b+=f1+f23+f43+f53+f63;c = c*1.3 * vec3(length(zxMp)+.09);c+=vec3(f0);return c;}
|
|
863
|
+
vec3 cc(vec3 clr, float fct,float fct2){float w = clr.x+clr.y+clr.z;return mix(clr,vec3(w)*fct,w*fct2);}float rnd(vec2 p){float f = fract(sin(dot(p, vec2(12.1234, 72.8392) )*45123.2));return f;}float rnd(float w){float f = fract(sin(w)*1000.);return f;}
|
|
864
|
+
float rShp(vec2 p, int N){float f;float a=atan(p.x,p.y)+.2;float b=6.28319/float(N);f=smoothstep(.5,.51, cos(floor(.5+a/b)*b-a)*length(p.xy)* 2.0 -ghostScale);return f;}
|
|
865
|
+
vec3 drC(vec2 p, float zsi, float dCy, vec3 clr, vec3 clr2, float ams2, vec2 esom){float l = length(p + esom*(ams2*2.))+zsi/2.;float l2 = length(p + esom*(ams2*4.))+zsi/3.;float c = max(0.01-pow(length(p + esom*ams2), zsi*ghostScale), 0.0)*10.;float c1 = max(0.001-pow(l-0.3, 1./40.)+sin(l*20.), 0.0)*3.;float c2 = max(0.09/pow(length(p-esom*ams2/.5)*1., .95), 0.0)/20.;float s = max(0.02-pow(rShp(p*5. + esom*ams2*5. + dCy, 6) , 1.), 0.0)*1.5;clr = cos(vec3(0.44, .24, .2)*8. + ams2*4.)*0.5+.5;vec3 f = c*clr;f += c1*clr;f += c2*clr;f += s*clr;return f-0.01;}
|
|
866
|
+
vec4 geLC(float x){return vec4(vec3(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(vec3(0., 0., 0.),vec3(0., 0., 0.), smoothstep(0.0, 0.063, x)),vec3(0., 0., 0.), smoothstep(0.063, 0.125, x)),vec3(0.0, 0., 0.), smoothstep(0.125, 0.188, x)),vec3(0.188, 0.131, 0.116), smoothstep(0.188, 0.227, x)),vec3(0.31, 0.204, 0.537), smoothstep(0.227, 0.251, x)),vec3(0.192, 0.106, 0.286), smoothstep(0.251, 0.314, x)),vec3(0.102, 0.008, 0.341), smoothstep(0.314, 0.392, x)),vec3(0.086, 0.0, 0.141), smoothstep(0.392, 0.502, x)),vec3(1.0, 0.31, 0.0), smoothstep(0.502, 0.604, x)),vec3(.1, 0.1, 0.1), smoothstep(0.604, 0.643, x)),vec3(1.0, 0.929, 0.0), smoothstep(0.643, 0.761, x)),vec3(1.0, 0.086, 0.424), smoothstep(0.761, 0.847, x)),vec3(1.0, 0.49, 0.0), smoothstep(0.847, 0.89, x)),vec3(0.945, 0.275, 0.475), smoothstep(0.89, 0.941, x)),vec3(0.251, 0.275, 0.796), smoothstep(0.941, 1.0, x))),1.0);}
|
|
867
|
+
float diTN(vec2 p){vec2 f = fract(p);f = (f * f) * (3.0 - (2.0 * f));float n = dot(floor(p), vec2(1.0, 157.0));vec4 a = fract(sin(vec4(n + 0.0, n + 1.0, n + 157.0, n + 158.0)) * 43758.5453123);return mix(mix(a.x, a.y, f.x), mix(a.z, a.w, f.x), f.y);}
|
|
868
|
+
float fbm(vec2 p){const mat2 m = mat2(0.80, -0.60, 0.60, 0.80);float f = 0.0;f += 0.5000*diTN(p); p = m*p*2.02;f += 0.2500*diTN(p); p = m*p*2.03;f += 0.1250*diTN(p); p = m*p*2.01;f += 0.0625*diTN(p);return f/0.9375;}
|
|
869
|
+
vec4 geLS(vec2 p){vec2 pp = (p - vec2(0.5)) * 2.0;float a = atan(pp.y, pp.x);vec4 cp = vec4(sin(a * 1.0), length(pp), sin(a * 13.0), sin(a * 53.0));float d = sin(clamp(pow(length(vec2(0.5) - p) * 0.5 + haloScale /2., 5.0), 0.0, 1.0) * 3.14159);vec3 c = vec3(d) * vec3(fbm(cp.xy * 16.0) * fbm(cp.zw * 9.0) * max(max(max(max(0.5, sin(a * 1.0)), sin(a * 3.0) * 0.8), sin(a * 7.0) * 0.8), sin(a * 9.0) * 10.6));c *= vec3(mix(2.0, (sin(length(pp.xy) * 256.0) * 0.5) + 0.5, sin((clamp((length(pp.xy) - 0.875) / 0.1, 0.0, 1.0) + 0.0) * 2.0 * 3.14159) * 1.5) + 0.5) * 0.3275;return vec4(vec3(c * 1.0), d);}
|
|
870
|
+
vec4 geLD(vec2 p){p.xy += vec2(fbm(p.yx * 3.0), fbm(p.yx * 2.0)) * 0.0825;vec3 o = vec3(mix(0.125, 0.25, max(max(smoothstep(0.1, 0.0, length(p - vec2(0.25))),smoothstep(0.4, 0.0, length(p - vec2(0.75)))),smoothstep(0.8, 0.0, length(p - vec2(0.875, 0.125))))));o += vec3(max(fbm(p * 1.0) - 0.5, 0.0)) * 0.5;o += vec3(max(fbm(p * 2.0) - 0.5, 0.0)) * 0.5;o += vec3(max(fbm(p * 4.0) - 0.5, 0.0)) * 0.25;o += vec3(max(fbm(p * 8.0) - 0.75, 0.0)) * 1.0;o += vec3(max(fbm(p * 16.0) - 0.75, 0.0)) * 0.75;o += vec3(max(fbm(p * 64.0) - 0.75, 0.0)) * 0.5;return vec4(clamp(o, vec3(0.15), vec3(1.0)), 1.0);}
|
|
871
|
+
vec4 txL(sampler2D tex, vec2 xtC){if(((xtC.x < 0.) || (xtC.y < 0.)) || ((xtC.x > 1.) || (xtC.y > 1.))){return vec4(0.0);}else{return texture(tex, xtC); }}
|
|
872
|
+
vec4 txD(sampler2D tex, vec2 xtC, vec2 dir, vec3 ditn) {return vec4(txL(tex, (xtC + (dir * ditn.r))).r,txL(tex, (xtC + (dir * ditn.g))).g,txL(tex, (xtC + (dir * ditn.b))).b,1.0);}
|
|
873
|
+
vec4 strB(){vec2 aspXtc = vec2(1.0) - (((vxtC - vec2(0.5)) * vec2(1.0)) + vec2(0.5)); vec2 xtC = vec2(1.0) - vxtC; vec2 ghvc = (vec2(0.5) - xtC) * 0.3 - lensPosition; vec2 ghNm = normalize(ghvc * vec2(1.0)) * vec2(1.0);vec2 haloVec = normalize(ghvc) * 0.6;vec2 hlNm = ghNm * 0.6;vec2 texelSize = vec2(1.0) / vec2(iResolution.xy);vec3 ditn = vec3(-(texelSize.x * 1.5), 0.2, texelSize.x * 1.5);vec4 c = vec4(0.0);for (int i = 0; i < 8; i++) {vec2 offset = xtC + (ghvc * float(i));c += txD(lensDirtTexture, offset, ghNm, ditn) * pow(max(0.0, 1.0 - (length(vec2(0.5) - offset) / length(vec2(0.5)))), 10.0);}vec2 uyTrz = xtC + hlNm; return (c * geLC((length(vec2(0.5) - aspXtc) / length(vec2(haloScale))))) +(txD(lensDirtTexture, uyTrz, ghNm, ditn) * pow(max(0.0, 1.0 - (length(vec2(0.5) - uyTrz) / length(vec2(0.5)))), 10.0));}
|
|
874
|
+
void mainImage(vec4 v,vec2 r,out vec4 i){vec2 g=r-.5;g.y*=iResolution.y/iResolution.x;vec2 l=lensPosition*.5;l.y*=iResolution.y/iResolution.x;vec3 f=mLs(g,l)*20.*colorGain/256.;if(aditionalStreaks){vec3 o=vec3(.9,.2,.1),p=vec3(.3,.1,.9);for(float n=0.;n<10.;n++)f+=drC(g,pow(rnd(n*2e3)*2.8,.1)+1.41,0.,o+n,p+n,rnd(n*20.)*3.+.2-.5,lensPosition);}if(secondaryGhosts){vec3 n=vec3(0);n+=rHx(g,-lensPosition*.25,ghostScale*1.4,vec3(.25,.35,0));n+=rHx(g,lensPosition*.25,ghostScale*.5,vec3(1,.5,.5));n+=rHx(g,lensPosition*.1,ghostScale*1.6,vec3(1));n+=rHx(g,lensPosition*1.8,ghostScale*2.,vec3(0,.5,.75));n+=rHx(g,lensPosition*1.25,ghostScale*.8,vec3(1,1,.5));n+=rHx(g,-lensPosition*1.25,ghostScale*5.,vec3(.5,.5,.25));n+=fpow(1.-abs(distance(lensPosition*.8,g)-.7),.985)*colorGain/2100.;f+=n;}if(starBurst){vxtC=g+.5;vec4 n=geLD(g);float o=1.-clamp(0.5,0.,.5)*2.;n+=mix(n,pow(n*2.,vec4(2))*.5,o);float s=(g.x+g.y)*(1./6.);vec2 d=mat2(cos(s),-sin(s),sin(s),cos(s))*vxtC;n+=geLS(d)*2.;f+=clamp(n.xyz*strB().xyz,.01,1.);}i=enabled?vec4(mix(f,vec3(0),opacity)+v.xyz,v.w):vec4(v);}
|
|
875
|
+
`,
|
|
876
|
+
};
|
|
877
|
+
class LensFlareEffect extends Effect {
|
|
878
|
+
constructor({ blendFunction = BlendFunction.NORMAL, enabled = true, glareSize = 0.2, lensPosition = [0.01, 0.01], iResolution = [0, 0], starPoints = 6, flareSize = 0.01, flareSpeed = 0.01, flareShape = 0.01, animated = true, anamorphic = false, colorGain = new Color(20, 20, 20), lensDirtTexture = null, haloScale = 0.5, secondaryGhosts = true, aditionalStreaks = true, ghostScale = 0.0, opacity = 1.0, starBurst = false, } = {}) {
|
|
879
|
+
super('LensFlareEffect', LensFlareShader.fragmentShader, {
|
|
880
|
+
blendFunction,
|
|
881
|
+
uniforms: new Map([
|
|
882
|
+
['enabled', new Uniform(enabled)],
|
|
883
|
+
['glareSize', new Uniform(glareSize)],
|
|
884
|
+
['lensPosition', new Uniform(lensPosition)],
|
|
885
|
+
['iTime', new Uniform(0)],
|
|
886
|
+
['iResolution', new Uniform(iResolution)],
|
|
887
|
+
['starPoints', new Uniform(starPoints)],
|
|
888
|
+
['flareSize', new Uniform(flareSize)],
|
|
889
|
+
['flareSpeed', new Uniform(flareSpeed)],
|
|
890
|
+
['flareShape', new Uniform(flareShape)],
|
|
891
|
+
['animated', new Uniform(animated)],
|
|
892
|
+
['anamorphic', new Uniform(anamorphic)],
|
|
893
|
+
['colorGain', new Uniform(colorGain)],
|
|
894
|
+
['lensDirtTexture', new Uniform(lensDirtTexture)],
|
|
895
|
+
['haloScale', new Uniform(haloScale)],
|
|
896
|
+
['secondaryGhosts', new Uniform(secondaryGhosts)],
|
|
897
|
+
['aditionalStreaks', new Uniform(aditionalStreaks)],
|
|
898
|
+
['ghostScale', new Uniform(ghostScale)],
|
|
899
|
+
['starBurst', new Uniform(starBurst)],
|
|
900
|
+
['opacity', new Uniform(opacity)],
|
|
901
|
+
]),
|
|
902
|
+
});
|
|
478
903
|
}
|
|
479
|
-
|
|
480
|
-
this.
|
|
904
|
+
update(_renderer, _inputBuffer, deltaTime) {
|
|
905
|
+
const iTime = this.uniforms.get('iTime');
|
|
906
|
+
if (iTime) {
|
|
907
|
+
iTime.value += deltaTime;
|
|
908
|
+
}
|
|
481
909
|
}
|
|
910
|
+
}
|
|
911
|
+
const defaultOptions$1 = {
|
|
912
|
+
position: new Vector3(-25, 6, -60),
|
|
913
|
+
followMouse: false,
|
|
914
|
+
smoothTime: 0.7,
|
|
915
|
+
};
|
|
916
|
+
class NgtpLensFlare {
|
|
482
917
|
constructor() {
|
|
483
|
-
this.
|
|
484
|
-
this.
|
|
485
|
-
this.
|
|
486
|
-
this.
|
|
487
|
-
this.
|
|
488
|
-
this.
|
|
489
|
-
this.
|
|
490
|
-
this.
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
918
|
+
this.autoEffect = injectAutoEffect();
|
|
919
|
+
this.store = injectStore();
|
|
920
|
+
this.viewport = this.store.select('viewport');
|
|
921
|
+
this.raycaster = this.store.select('raycaster');
|
|
922
|
+
this.pointer = this.store.select('pointer');
|
|
923
|
+
this.composerApi = injectEffectComposerApi();
|
|
924
|
+
this.options = input(defaultOptions$1, { transform: mergeInputs(defaultOptions$1) });
|
|
925
|
+
this.projectedPosition = new Vector3();
|
|
926
|
+
this.mouse2d = new Vector2();
|
|
927
|
+
this.effect = computed(() => {
|
|
928
|
+
const { position: _, followMouse: __, smoothTime: ___, ...options } = this.options();
|
|
929
|
+
return new LensFlareEffect(options);
|
|
930
|
+
});
|
|
931
|
+
afterNextRender(() => {
|
|
932
|
+
this.autoEffect(() => {
|
|
933
|
+
const [effect, viewport] = [this.effect(), this.viewport()];
|
|
934
|
+
const iResolution = effect.uniforms.get('iResolution');
|
|
935
|
+
if (iResolution) {
|
|
936
|
+
iResolution.value.x = viewport.width;
|
|
937
|
+
iResolution.value.y = viewport.height;
|
|
938
|
+
}
|
|
939
|
+
});
|
|
940
|
+
});
|
|
941
|
+
injectBeforeRender(({ delta }) => {
|
|
942
|
+
const [effect] = [this.effect()];
|
|
504
943
|
if (!effect)
|
|
505
944
|
return;
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
945
|
+
const [{ followMouse, position, smoothTime }, pointer, { camera, scene }, raycaster] = [
|
|
946
|
+
this.options(),
|
|
947
|
+
this.pointer(),
|
|
948
|
+
this.composerApi(),
|
|
949
|
+
this.raycaster(),
|
|
950
|
+
];
|
|
951
|
+
const uLensPosition = effect.uniforms.get('lensPosition');
|
|
952
|
+
const uOpacity = effect.uniforms.get('opacity');
|
|
953
|
+
if (!uLensPosition || !uOpacity)
|
|
954
|
+
return;
|
|
955
|
+
let target = 1;
|
|
956
|
+
if (followMouse) {
|
|
957
|
+
uLensPosition.value.x = pointer.x;
|
|
958
|
+
uLensPosition.value.y = pointer.y;
|
|
959
|
+
target = 0;
|
|
960
|
+
}
|
|
961
|
+
else {
|
|
962
|
+
this.projectedPosition.copy(position).project(camera);
|
|
963
|
+
if (this.projectedPosition.z > 1)
|
|
964
|
+
return;
|
|
965
|
+
uLensPosition.value.x = this.projectedPosition.x;
|
|
966
|
+
uLensPosition.value.y = this.projectedPosition.y;
|
|
967
|
+
this.mouse2d.set(this.projectedPosition.x, this.projectedPosition.y);
|
|
968
|
+
raycaster.setFromCamera(this.mouse2d, camera);
|
|
969
|
+
const intersects = raycaster.intersectObjects(scene.children, true);
|
|
970
|
+
const { object } = intersects[0] ?? {};
|
|
971
|
+
if (object) {
|
|
972
|
+
if (object.userData?.['lensflare'] === 'no-occlusion') {
|
|
973
|
+
target = 0;
|
|
974
|
+
}
|
|
975
|
+
else if (object instanceof Mesh) {
|
|
976
|
+
if (object.material.uniforms?._transmission?.value > 0.2) {
|
|
977
|
+
//Check for MeshTransmissionMaterial
|
|
978
|
+
target = 0.2;
|
|
979
|
+
}
|
|
980
|
+
else if (object.material._transmission && object.material._transmission > 0.2) {
|
|
981
|
+
//Check for MeshPhysicalMaterial with transmission setting
|
|
982
|
+
target = 0.2;
|
|
983
|
+
}
|
|
984
|
+
else if (object.material.transparent) {
|
|
985
|
+
// Check for OtherMaterials with transparent parameter
|
|
986
|
+
target = object.material.opacity;
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
easing.damp(uOpacity, 'value', target, smoothTime, delta);
|
|
511
992
|
});
|
|
512
993
|
}
|
|
513
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
514
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
515
|
-
<ngt-primitive *args="[effect()]" [
|
|
516
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
994
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpLensFlare, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
995
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpLensFlare, isStandalone: true, selector: "ngtp-lens-flare", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
996
|
+
<ngt-primitive *args="[effect()]" [dispose]="null" />
|
|
997
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
517
998
|
}
|
|
518
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
999
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpLensFlare, decorators: [{
|
|
519
1000
|
type: Component,
|
|
520
1001
|
args: [{
|
|
521
|
-
selector: 'ngtp-
|
|
1002
|
+
selector: 'ngtp-lens-flare',
|
|
522
1003
|
standalone: true,
|
|
523
1004
|
template: `
|
|
524
|
-
<ngt-primitive *args="[effect()]" [
|
|
1005
|
+
<ngt-primitive *args="[effect()]" [dispose]="null" />
|
|
525
1006
|
`,
|
|
526
1007
|
imports: [NgtArgs],
|
|
527
1008
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1009
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
528
1010
|
}]
|
|
529
|
-
}], ctorParameters:
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
1011
|
+
}], ctorParameters: () => [] });
|
|
1012
|
+
|
|
1013
|
+
class NgtpLUT {
|
|
1014
|
+
constructor() {
|
|
1015
|
+
this.autoEffect = injectAutoEffect();
|
|
1016
|
+
this.store = injectStore();
|
|
1017
|
+
this.invalidate = this.store.select('invalidate');
|
|
1018
|
+
this.options = input({});
|
|
1019
|
+
this.lut = pick(this.options, 'lut');
|
|
1020
|
+
this.effect = computed(() => {
|
|
1021
|
+
const [lut, { lut: _, ...options }] = [this.lut(), this.options()];
|
|
1022
|
+
return new LUT3DEffect(lut, options);
|
|
1023
|
+
});
|
|
1024
|
+
afterNextRender(() => {
|
|
1025
|
+
this.autoEffect(() => {
|
|
1026
|
+
const [effect, { lut, tetrahedralInterpolation }, invalidate] = [
|
|
1027
|
+
this.effect(),
|
|
1028
|
+
this.options(),
|
|
1029
|
+
this.invalidate(),
|
|
1030
|
+
];
|
|
1031
|
+
if (tetrahedralInterpolation)
|
|
1032
|
+
effect.tetrahedralInterpolation = tetrahedralInterpolation;
|
|
1033
|
+
if (lut)
|
|
1034
|
+
effect.lut = lut;
|
|
1035
|
+
invalidate();
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpLUT, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1040
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpLUT, isStandalone: true, selector: "ngtp-lut", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1041
|
+
<ngt-primitive *args="[effect()]" [dispose]="null" />
|
|
1042
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1043
|
+
}
|
|
1044
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpLUT, decorators: [{
|
|
1045
|
+
type: Component,
|
|
1046
|
+
args: [{
|
|
1047
|
+
selector: 'ngtp-lut',
|
|
1048
|
+
template: `
|
|
1049
|
+
<ngt-primitive *args="[effect()]" [dispose]="null" />
|
|
1050
|
+
`,
|
|
1051
|
+
imports: [NgtArgs],
|
|
1052
|
+
standalone: true,
|
|
1053
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1054
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1055
|
+
}]
|
|
1056
|
+
}], ctorParameters: () => [] });
|
|
541
1057
|
|
|
542
1058
|
extend({ NoiseEffect });
|
|
543
|
-
class NgtpNoise
|
|
1059
|
+
class NgtpNoise {
|
|
544
1060
|
constructor() {
|
|
545
|
-
|
|
546
|
-
this.
|
|
1061
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1062
|
+
this.options = input({});
|
|
547
1063
|
}
|
|
548
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
549
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
550
|
-
<ngt-noise-effect
|
|
1064
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpNoise, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1065
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpNoise, isStandalone: true, selector: "ngtp-noise", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.COLOR_DODGE })], hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1066
|
+
<ngt-noise-effect *args="[options()]" [camera]="effect.camera()">
|
|
1067
|
+
<ngtp-effect-blend-mode />
|
|
551
1068
|
<ng-content />
|
|
552
1069
|
</ngt-noise-effect>
|
|
553
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1070
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
554
1071
|
}
|
|
555
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1072
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpNoise, decorators: [{
|
|
556
1073
|
type: Component,
|
|
557
1074
|
args: [{
|
|
558
1075
|
selector: 'ngtp-noise',
|
|
559
|
-
standalone: true,
|
|
560
1076
|
template: `
|
|
561
|
-
<ngt-noise-effect
|
|
1077
|
+
<ngt-noise-effect *args="[options()]" [camera]="effect.camera()">
|
|
1078
|
+
<ngtp-effect-blend-mode />
|
|
562
1079
|
<ng-content />
|
|
563
1080
|
</ngt-noise-effect>
|
|
564
1081
|
`,
|
|
565
|
-
|
|
1082
|
+
standalone: true,
|
|
566
1083
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1084
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1085
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1086
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
1087
|
+
providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.COLOR_DODGE })],
|
|
567
1088
|
}]
|
|
568
1089
|
}] });
|
|
569
1090
|
|
|
570
1091
|
class NgtpPixelation {
|
|
571
1092
|
constructor() {
|
|
572
|
-
this.
|
|
573
|
-
this.
|
|
574
|
-
this.granularity = this.inputs.select('granularity');
|
|
1093
|
+
this.options = input({ granularity: 5 }, { transform: mergeInputs({ granularity: 5 }) });
|
|
1094
|
+
this.granularity = pick(this.options, 'granularity');
|
|
575
1095
|
this.effect = computed(() => new PixelationEffect(this.granularity()));
|
|
576
1096
|
}
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtpPixelation, isStandalone: true, selector: "ngtp-pixelation", inputs: { effectRef: "effectRef", _granularity: ["granularity", "_granularity"] }, ngImport: i0, template: `
|
|
582
|
-
<ngt-primitive *args="[effect()]" [ref]="effectRef" />
|
|
583
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1097
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpPixelation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1098
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpPixelation, isStandalone: true, selector: "ngtp-pixelation", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1099
|
+
<ngt-primitive *args="[effect()]" />
|
|
1100
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
584
1101
|
}
|
|
585
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpPixelation, decorators: [{
|
|
586
1103
|
type: Component,
|
|
587
1104
|
args: [{
|
|
588
1105
|
selector: 'ngtp-pixelation',
|
|
589
|
-
standalone: true,
|
|
590
1106
|
template: `
|
|
591
|
-
<ngt-primitive *args="[effect()]"
|
|
1107
|
+
<ngt-primitive *args="[effect()]" />
|
|
592
1108
|
`,
|
|
593
|
-
|
|
1109
|
+
standalone: true,
|
|
1110
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
594
1111
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1112
|
+
imports: [NgtArgs],
|
|
595
1113
|
}]
|
|
596
|
-
}]
|
|
597
|
-
type: Input
|
|
598
|
-
}], _granularity: [{
|
|
599
|
-
type: Input,
|
|
600
|
-
args: [{ alias: 'granularity' }]
|
|
601
|
-
}] } });
|
|
1114
|
+
}] });
|
|
602
1115
|
|
|
603
1116
|
extend({ ScanlineEffect });
|
|
604
|
-
|
|
1117
|
+
const defaultOptions = {
|
|
1118
|
+
density: 1.25,
|
|
1119
|
+
};
|
|
1120
|
+
class NgtpScanline {
|
|
605
1121
|
constructor() {
|
|
606
|
-
|
|
607
|
-
this.
|
|
1122
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1123
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
608
1124
|
}
|
|
609
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
610
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
611
|
-
<ngt-scanline-effect
|
|
1125
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpScanline, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1126
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpScanline, isStandalone: true, selector: "ngtp-scanline", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.OVERLAY })], hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1127
|
+
<ngt-scanline-effect *args="[options()]" [camera]="effect.camera()">
|
|
1128
|
+
<ngtp-effect-blend-mode />
|
|
612
1129
|
<ng-content />
|
|
613
1130
|
</ngt-scanline-effect>
|
|
614
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1131
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
615
1132
|
}
|
|
616
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpScanline, decorators: [{
|
|
617
1134
|
type: Component,
|
|
618
1135
|
args: [{
|
|
619
1136
|
selector: 'ngtp-scanline',
|
|
620
|
-
standalone: true,
|
|
621
1137
|
template: `
|
|
622
|
-
<ngt-scanline-effect
|
|
1138
|
+
<ngt-scanline-effect *args="[options()]" [camera]="effect.camera()">
|
|
1139
|
+
<ngtp-effect-blend-mode />
|
|
623
1140
|
<ng-content />
|
|
624
1141
|
</ngt-scanline-effect>
|
|
625
1142
|
`,
|
|
626
|
-
|
|
1143
|
+
standalone: true,
|
|
627
1144
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1145
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1146
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1147
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
1148
|
+
providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.OVERLAY })],
|
|
628
1149
|
}]
|
|
629
1150
|
}] });
|
|
630
1151
|
|
|
631
1152
|
extend({ SepiaEffect });
|
|
632
|
-
class NgtpSepia
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
1153
|
+
class NgtpSepia {
|
|
1154
|
+
constructor() {
|
|
1155
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1156
|
+
this.options = input({});
|
|
1157
|
+
}
|
|
1158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpSepia, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1159
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpSepia, isStandalone: true, selector: "ngtp-sepia", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1160
|
+
<ngt-sepia-effect *args="[options()]" [camera]="effect.camera()">
|
|
1161
|
+
<ngtp-effect-blend-mode />
|
|
636
1162
|
<ng-content />
|
|
637
1163
|
</ngt-sepia-effect>
|
|
638
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1164
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
639
1165
|
}
|
|
640
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpSepia, decorators: [{
|
|
641
1167
|
type: Component,
|
|
642
1168
|
args: [{
|
|
643
1169
|
selector: 'ngtp-sepia',
|
|
644
|
-
standalone: true,
|
|
645
1170
|
template: `
|
|
646
|
-
<ngt-sepia-effect
|
|
1171
|
+
<ngt-sepia-effect *args="[options()]" [camera]="effect.camera()">
|
|
1172
|
+
<ngtp-effect-blend-mode />
|
|
647
1173
|
<ng-content />
|
|
648
1174
|
</ngt-sepia-effect>
|
|
649
1175
|
`,
|
|
650
|
-
|
|
1176
|
+
standalone: true,
|
|
651
1177
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1178
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1179
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1180
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
652
1181
|
}]
|
|
653
1182
|
}] });
|
|
654
1183
|
|
|
655
1184
|
extend({ ShockWaveEffect });
|
|
656
|
-
class NgtpShockWave
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
1185
|
+
class NgtpShockWave {
|
|
1186
|
+
constructor() {
|
|
1187
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1188
|
+
this.options = input({});
|
|
1189
|
+
}
|
|
1190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpShockWave, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1191
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpShockWave, isStandalone: true, selector: "ngtp-shock-wave", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1192
|
+
<ngt-shock-wave-effect *args="[options()]" [camera]="effect.camera()">
|
|
1193
|
+
<ngtp-effect-blend-mode />
|
|
660
1194
|
<ng-content />
|
|
661
1195
|
</ngt-shock-wave-effect>
|
|
662
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1196
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
663
1197
|
}
|
|
664
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpShockWave, decorators: [{
|
|
665
1199
|
type: Component,
|
|
666
1200
|
args: [{
|
|
667
1201
|
selector: 'ngtp-shock-wave',
|
|
668
|
-
standalone: true,
|
|
669
1202
|
template: `
|
|
670
|
-
<ngt-shock-wave-effect
|
|
1203
|
+
<ngt-shock-wave-effect *args="[options()]" [camera]="effect.camera()">
|
|
1204
|
+
<ngtp-effect-blend-mode />
|
|
671
1205
|
<ng-content />
|
|
672
1206
|
</ngt-shock-wave-effect>
|
|
673
1207
|
`,
|
|
674
|
-
|
|
1208
|
+
standalone: true,
|
|
675
1209
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1210
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1211
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1212
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
676
1213
|
}]
|
|
677
1214
|
}] });
|
|
678
1215
|
|
|
679
1216
|
extend({ SMAAEffect });
|
|
680
|
-
class NgtpSMAA
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
1217
|
+
class NgtpSMAA {
|
|
1218
|
+
constructor() {
|
|
1219
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1220
|
+
this.options = input({});
|
|
1221
|
+
}
|
|
1222
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpSMAA, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1223
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpSMAA, isStandalone: true, selector: "ngtp-smaa", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1224
|
+
<ngt-sMAA-effect *args="[options()]" [camera]="effect.camera()">
|
|
1225
|
+
<ngtp-effect-blend-mode />
|
|
684
1226
|
<ng-content />
|
|
685
|
-
</ngt-
|
|
686
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1227
|
+
</ngt-sMAA-effect>
|
|
1228
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
687
1229
|
}
|
|
688
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpSMAA, decorators: [{
|
|
689
1231
|
type: Component,
|
|
690
1232
|
args: [{
|
|
691
|
-
selector: 'ngtp-
|
|
692
|
-
standalone: true,
|
|
1233
|
+
selector: 'ngtp-smaa',
|
|
693
1234
|
template: `
|
|
694
|
-
<ngt-
|
|
1235
|
+
<ngt-sMAA-effect *args="[options()]" [camera]="effect.camera()">
|
|
1236
|
+
<ngtp-effect-blend-mode />
|
|
695
1237
|
<ng-content />
|
|
696
|
-
</ngt-
|
|
1238
|
+
</ngt-sMAA-effect>
|
|
697
1239
|
`,
|
|
698
|
-
|
|
1240
|
+
standalone: true,
|
|
699
1241
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1242
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1243
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1244
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
700
1245
|
}]
|
|
701
1246
|
}] });
|
|
702
1247
|
|
|
703
|
-
|
|
1248
|
+
extend({ TiltShiftEffect });
|
|
1249
|
+
class NgtpTiltShift {
|
|
704
1250
|
constructor() {
|
|
705
|
-
this.
|
|
706
|
-
|
|
707
|
-
samples: 30,
|
|
708
|
-
rings: 4,
|
|
709
|
-
distanceThreshold: 1.0,
|
|
710
|
-
distanceFalloff: 0.0,
|
|
711
|
-
rangeThreshold: 0.5,
|
|
712
|
-
rangeFalloff: 0.1,
|
|
713
|
-
luminanceInfluence: 0.9,
|
|
714
|
-
radius: 20,
|
|
715
|
-
bias: 0.5,
|
|
716
|
-
intensity: 1.0,
|
|
717
|
-
depthAwareUpsampling: true,
|
|
718
|
-
});
|
|
719
|
-
this.effectRef = injectNgtRef();
|
|
720
|
-
this.effectComposerApi = injectNgtpEffectComposerApi();
|
|
721
|
-
this.effect = computed(() => {
|
|
722
|
-
const [state, { camera, normalPass, downSamplingPass, resolutionScale }] = [
|
|
723
|
-
this.inputs.state(),
|
|
724
|
-
this.effectComposerApi(),
|
|
725
|
-
];
|
|
726
|
-
if (normalPass === null && downSamplingPass === null) {
|
|
727
|
-
console.error('Please enable the NormalPass in the NgtpEffectComposer in order to use NgtpSSAO.');
|
|
728
|
-
return null;
|
|
729
|
-
}
|
|
730
|
-
return new SSAOEffect(camera, normalPass && !downSamplingPass ? normalPass.texture : null, {
|
|
731
|
-
...state,
|
|
732
|
-
// @ts-expect-error
|
|
733
|
-
normalDepthBuffer: state.normalDepthBuffer || (downSamplingPass ? downSamplingPass.texture : null),
|
|
734
|
-
resolutionScale: state.resolutionScale || (resolutionScale ?? 1),
|
|
735
|
-
depthAwareUpsampling: state.depthAwareUpsampling ?? true,
|
|
736
|
-
});
|
|
737
|
-
});
|
|
738
|
-
}
|
|
739
|
-
set _blendFunction(blendFunction) {
|
|
740
|
-
this.inputs.set({ blendFunction });
|
|
741
|
-
}
|
|
742
|
-
set _distanceScaling(distanceScaling) {
|
|
743
|
-
this.inputs.set({ distanceScaling });
|
|
744
|
-
}
|
|
745
|
-
set _depthAwareUpsampling(depthAwareUpsampling) {
|
|
746
|
-
this.inputs.set({ depthAwareUpsampling });
|
|
747
|
-
}
|
|
748
|
-
set _normalDepthBuffer(normalDepthBuffer) {
|
|
749
|
-
this.inputs.set({ normalDepthBuffer });
|
|
750
|
-
}
|
|
751
|
-
set _samples(samples) {
|
|
752
|
-
this.inputs.set({ samples });
|
|
753
|
-
}
|
|
754
|
-
set _rings(rings) {
|
|
755
|
-
this.inputs.set({ rings });
|
|
756
|
-
}
|
|
757
|
-
set _worldDistanceThreshold(worldDistanceThreshold) {
|
|
758
|
-
this.inputs.set({ worldDistanceThreshold });
|
|
1251
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1252
|
+
this.options = input({});
|
|
759
1253
|
}
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
this.inputs.set({ worldProximityFalloff });
|
|
768
|
-
}
|
|
769
|
-
set _distanceThreshold(distanceThreshold) {
|
|
770
|
-
this.inputs.set({ distanceThreshold });
|
|
771
|
-
}
|
|
772
|
-
set _distanceFalloff(distanceFalloff) {
|
|
773
|
-
this.inputs.set({ distanceFalloff });
|
|
774
|
-
}
|
|
775
|
-
set _rangeThreshold(rangeThreshold) {
|
|
776
|
-
this.inputs.set({ rangeThreshold });
|
|
777
|
-
}
|
|
778
|
-
set _rangeFalloff(rangeFalloff) {
|
|
779
|
-
this.inputs.set({ rangeFalloff });
|
|
780
|
-
}
|
|
781
|
-
set _minRadiusScale(minRadiusScale) {
|
|
782
|
-
this.inputs.set({ minRadiusScale });
|
|
783
|
-
}
|
|
784
|
-
set _luminanceInfluence(luminanceInfluence) {
|
|
785
|
-
this.inputs.set({ luminanceInfluence });
|
|
786
|
-
}
|
|
787
|
-
set _radius(radius) {
|
|
788
|
-
this.inputs.set({ radius });
|
|
789
|
-
}
|
|
790
|
-
set _intensity(intensity) {
|
|
791
|
-
this.inputs.set({ intensity });
|
|
792
|
-
}
|
|
793
|
-
set _bias(bias) {
|
|
794
|
-
this.inputs.set({ bias });
|
|
795
|
-
}
|
|
796
|
-
set _fade(fade) {
|
|
797
|
-
this.inputs.set({ fade });
|
|
798
|
-
}
|
|
799
|
-
set _color(color) {
|
|
800
|
-
this.inputs.set({ color });
|
|
801
|
-
}
|
|
802
|
-
set _resolutionScale(resolutionScale) {
|
|
803
|
-
this.inputs.set({ resolutionScale });
|
|
804
|
-
}
|
|
805
|
-
set _resolutionX(resolutionX) {
|
|
806
|
-
this.inputs.set({ resolutionX });
|
|
807
|
-
}
|
|
808
|
-
set _resolutionY(resolutionY) {
|
|
809
|
-
this.inputs.set({ resolutionY });
|
|
810
|
-
}
|
|
811
|
-
set _width(width) {
|
|
812
|
-
this.inputs.set({ width });
|
|
813
|
-
}
|
|
814
|
-
set _height(height) {
|
|
815
|
-
this.inputs.set({ height });
|
|
816
|
-
}
|
|
817
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpSSAO, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
818
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtpSSAO, isStandalone: true, selector: "ngtp-SSAO", inputs: { effectRef: "effectRef", _blendFunction: ["blendFunction", "_blendFunction"], _distanceScaling: ["distanceScaling", "_distanceScaling"], _depthAwareUpsampling: ["depthAwareUpsampling", "_depthAwareUpsampling"], _normalDepthBuffer: ["normalDepthBuffer", "_normalDepthBuffer"], _samples: ["samples", "_samples"], _rings: ["rings", "_rings"], _worldDistanceThreshold: ["worldDistanceThreshold", "_worldDistanceThreshold"], _worldDistanceFalloff: ["worldDistanceFalloff", "_worldDistanceFalloff"], _worldProximityThreshold: ["worldProximityThreshold", "_worldProximityThreshold"], _worldProximityFalloff: ["worldProximityFalloff", "_worldProximityFalloff"], _distanceThreshold: ["distanceThreshold", "_distanceThreshold"], _distanceFalloff: ["distanceFalloff", "_distanceFalloff"], _rangeThreshold: ["rangeThreshold", "_rangeThreshold"], _rangeFalloff: ["rangeFalloff", "_rangeFalloff"], _minRadiusScale: ["minRadiusScale", "_minRadiusScale"], _luminanceInfluence: ["luminanceInfluence", "_luminanceInfluence"], _radius: ["radius", "_radius"], _intensity: ["intensity", "_intensity"], _bias: ["bias", "_bias"], _fade: ["fade", "_fade"], _color: ["color", "_color"], _resolutionScale: ["resolutionScale", "_resolutionScale"], _resolutionX: ["resolutionX", "_resolutionX"], _resolutionY: ["resolutionY", "_resolutionY"], _width: ["width", "_width"], _height: ["height", "_height"] }, ngImport: i0, template: `
|
|
819
|
-
<ngt-primitive *args="[effect()]" [ref]="effectRef" />
|
|
820
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1254
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpTiltShift, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1255
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpTiltShift, isStandalone: true, selector: "ngtp-tilt-shift", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.ADD })], hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1256
|
+
<ngt-tilt-shift-effect *args="[options()]" [camera]="effect.camera()">
|
|
1257
|
+
<ngtp-effect-blend-mode />
|
|
1258
|
+
<ng-content />
|
|
1259
|
+
</ngt-tilt-shift-effect>
|
|
1260
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
821
1261
|
}
|
|
822
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpTiltShift, decorators: [{
|
|
823
1263
|
type: Component,
|
|
824
1264
|
args: [{
|
|
825
|
-
selector: 'ngtp-
|
|
826
|
-
standalone: true,
|
|
1265
|
+
selector: 'ngtp-tilt-shift',
|
|
827
1266
|
template: `
|
|
828
|
-
<ngt-
|
|
1267
|
+
<ngt-tilt-shift-effect *args="[options()]" [camera]="effect.camera()">
|
|
1268
|
+
<ngtp-effect-blend-mode />
|
|
1269
|
+
<ng-content />
|
|
1270
|
+
</ngt-tilt-shift-effect>
|
|
829
1271
|
`,
|
|
830
|
-
|
|
1272
|
+
standalone: true,
|
|
831
1273
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1274
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1275
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1276
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
1277
|
+
providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.ADD })],
|
|
832
1278
|
}]
|
|
833
|
-
}]
|
|
834
|
-
type: Input
|
|
835
|
-
}], _blendFunction: [{
|
|
836
|
-
type: Input,
|
|
837
|
-
args: [{ alias: 'blendFunction' }]
|
|
838
|
-
}], _distanceScaling: [{
|
|
839
|
-
type: Input,
|
|
840
|
-
args: [{ alias: 'distanceScaling' }]
|
|
841
|
-
}], _depthAwareUpsampling: [{
|
|
842
|
-
type: Input,
|
|
843
|
-
args: [{ alias: 'depthAwareUpsampling' }]
|
|
844
|
-
}], _normalDepthBuffer: [{
|
|
845
|
-
type: Input,
|
|
846
|
-
args: [{ alias: 'normalDepthBuffer' }]
|
|
847
|
-
}], _samples: [{
|
|
848
|
-
type: Input,
|
|
849
|
-
args: [{ alias: 'samples' }]
|
|
850
|
-
}], _rings: [{
|
|
851
|
-
type: Input,
|
|
852
|
-
args: [{ alias: 'rings' }]
|
|
853
|
-
}], _worldDistanceThreshold: [{
|
|
854
|
-
type: Input,
|
|
855
|
-
args: [{ alias: 'worldDistanceThreshold' }]
|
|
856
|
-
}], _worldDistanceFalloff: [{
|
|
857
|
-
type: Input,
|
|
858
|
-
args: [{ alias: 'worldDistanceFalloff' }]
|
|
859
|
-
}], _worldProximityThreshold: [{
|
|
860
|
-
type: Input,
|
|
861
|
-
args: [{ alias: 'worldProximityThreshold' }]
|
|
862
|
-
}], _worldProximityFalloff: [{
|
|
863
|
-
type: Input,
|
|
864
|
-
args: [{ alias: 'worldProximityFalloff' }]
|
|
865
|
-
}], _distanceThreshold: [{
|
|
866
|
-
type: Input,
|
|
867
|
-
args: [{ alias: 'distanceThreshold' }]
|
|
868
|
-
}], _distanceFalloff: [{
|
|
869
|
-
type: Input,
|
|
870
|
-
args: [{ alias: 'distanceFalloff' }]
|
|
871
|
-
}], _rangeThreshold: [{
|
|
872
|
-
type: Input,
|
|
873
|
-
args: [{ alias: 'rangeThreshold' }]
|
|
874
|
-
}], _rangeFalloff: [{
|
|
875
|
-
type: Input,
|
|
876
|
-
args: [{ alias: 'rangeFalloff' }]
|
|
877
|
-
}], _minRadiusScale: [{
|
|
878
|
-
type: Input,
|
|
879
|
-
args: [{ alias: 'minRadiusScale' }]
|
|
880
|
-
}], _luminanceInfluence: [{
|
|
881
|
-
type: Input,
|
|
882
|
-
args: [{ alias: 'luminanceInfluence' }]
|
|
883
|
-
}], _radius: [{
|
|
884
|
-
type: Input,
|
|
885
|
-
args: [{ alias: 'radius' }]
|
|
886
|
-
}], _intensity: [{
|
|
887
|
-
type: Input,
|
|
888
|
-
args: [{ alias: 'intensity' }]
|
|
889
|
-
}], _bias: [{
|
|
890
|
-
type: Input,
|
|
891
|
-
args: [{ alias: 'bias' }]
|
|
892
|
-
}], _fade: [{
|
|
893
|
-
type: Input,
|
|
894
|
-
args: [{ alias: 'fade' }]
|
|
895
|
-
}], _color: [{
|
|
896
|
-
type: Input,
|
|
897
|
-
args: [{ alias: 'color' }]
|
|
898
|
-
}], _resolutionScale: [{
|
|
899
|
-
type: Input,
|
|
900
|
-
args: [{ alias: 'resolutionScale' }]
|
|
901
|
-
}], _resolutionX: [{
|
|
902
|
-
type: Input,
|
|
903
|
-
args: [{ alias: 'resolutionX' }]
|
|
904
|
-
}], _resolutionY: [{
|
|
905
|
-
type: Input,
|
|
906
|
-
args: [{ alias: 'resolutionY' }]
|
|
907
|
-
}], _width: [{
|
|
908
|
-
type: Input,
|
|
909
|
-
args: [{ alias: 'width' }]
|
|
910
|
-
}], _height: [{
|
|
911
|
-
type: Input,
|
|
912
|
-
args: [{ alias: 'height' }]
|
|
913
|
-
}] } });
|
|
1279
|
+
}] });
|
|
914
1280
|
|
|
915
|
-
|
|
916
|
-
|
|
1281
|
+
const TiltShiftShader = {
|
|
1282
|
+
fragmentShader: `
|
|
1283
|
+
|
|
1284
|
+
// original shader by Evan Wallace
|
|
1285
|
+
|
|
1286
|
+
#define MAX_ITERATIONS 100
|
|
1287
|
+
|
|
1288
|
+
uniform float blur;
|
|
1289
|
+
uniform float taper;
|
|
1290
|
+
uniform vec2 start;
|
|
1291
|
+
uniform vec2 end;
|
|
1292
|
+
uniform vec2 direction;
|
|
1293
|
+
uniform int samples;
|
|
1294
|
+
|
|
1295
|
+
float random(vec3 scale, float seed) {
|
|
1296
|
+
/* use the fragment position for a different seed per-pixel */
|
|
1297
|
+
return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1301
|
+
vec4 color = vec4(0.0);
|
|
1302
|
+
float total = 0.0;
|
|
1303
|
+
vec2 startPixel = vec2(start.x * resolution.x, start.y * resolution.y);
|
|
1304
|
+
vec2 endPixel = vec2(end.x * resolution.x, end.y * resolution.y);
|
|
1305
|
+
float f_samples = float(samples);
|
|
1306
|
+
float half_samples = f_samples / 2.0;
|
|
1307
|
+
|
|
1308
|
+
// use screen diagonal to normalize blur radii
|
|
1309
|
+
float maxScreenDistance = distance(vec2(0.0), resolution); // diagonal distance
|
|
1310
|
+
float gradientRadius = taper * (maxScreenDistance);
|
|
1311
|
+
float blurRadius = blur * (maxScreenDistance / 16.0);
|
|
1312
|
+
|
|
1313
|
+
/* randomize the lookup values to hide the fixed number of samples */
|
|
1314
|
+
float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);
|
|
1315
|
+
vec2 normal = normalize(vec2(startPixel.y - endPixel.y, endPixel.x - startPixel.x));
|
|
1316
|
+
float radius = smoothstep(0.0, 1.0, abs(dot(uv * resolution - startPixel, normal)) / gradientRadius) * blurRadius;
|
|
1317
|
+
|
|
1318
|
+
#pragma unroll_loop_start
|
|
1319
|
+
for (int i = 0; i <= MAX_ITERATIONS; i++) {
|
|
1320
|
+
if (i >= samples) { break; } // return early if over sample count
|
|
1321
|
+
float f_i = float(i);
|
|
1322
|
+
float s_i = -half_samples + f_i;
|
|
1323
|
+
float percent = (s_i + offset - 0.5) / half_samples;
|
|
1324
|
+
float weight = 1.0 - abs(percent);
|
|
1325
|
+
vec4 sample_i = texture2D(inputBuffer, uv + normalize(direction) / resolution * percent * radius);
|
|
1326
|
+
/* switch to pre-multiplied alpha to correctly blur transparent images */
|
|
1327
|
+
sample_i.rgb *= sample_i.a;
|
|
1328
|
+
color += sample_i * weight;
|
|
1329
|
+
total += weight;
|
|
1330
|
+
}
|
|
1331
|
+
#pragma unroll_loop_end
|
|
1332
|
+
|
|
1333
|
+
outputColor = color / total;
|
|
1334
|
+
|
|
1335
|
+
/* switch back from pre-multiplied alpha */
|
|
1336
|
+
outputColor.rgb /= outputColor.a + 0.00001;
|
|
1337
|
+
}
|
|
1338
|
+
`,
|
|
1339
|
+
};
|
|
1340
|
+
class TiltShift2Effect extends Effect {
|
|
1341
|
+
constructor({ blendFunction = BlendFunction.NORMAL, blur = 0.15, // [0, 1], can go beyond 1 for extra
|
|
1342
|
+
taper = 0.5, // [0, 1], can go beyond 1 for extra
|
|
1343
|
+
start = [0.5, 0.0], // [0,1] percentage x,y of screenspace
|
|
1344
|
+
end = [0.5, 1.0], // [0,1] percentage x,y of screenspace
|
|
1345
|
+
samples = 10.0, // number of blur samples
|
|
1346
|
+
direction = [1, 1], // direction of blur
|
|
1347
|
+
} = {}) {
|
|
1348
|
+
super('TiltShiftEffect', TiltShiftShader.fragmentShader, {
|
|
1349
|
+
blendFunction,
|
|
1350
|
+
attributes: EffectAttribute.CONVOLUTION,
|
|
1351
|
+
uniforms: new Map([
|
|
1352
|
+
['blur', new Uniform(blur)],
|
|
1353
|
+
['taper', new Uniform(taper)],
|
|
1354
|
+
['start', new Uniform(start)],
|
|
1355
|
+
['end', new Uniform(end)],
|
|
1356
|
+
['samples', new Uniform(samples)],
|
|
1357
|
+
['direction', new Uniform(direction)],
|
|
1358
|
+
]),
|
|
1359
|
+
});
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
extend({ TiltShift2Effect });
|
|
1363
|
+
class NgtpTiltShift2 {
|
|
917
1364
|
constructor() {
|
|
918
|
-
|
|
919
|
-
this.
|
|
1365
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1366
|
+
this.options = input({});
|
|
920
1367
|
}
|
|
921
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
922
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
923
|
-
<ngt-tilt-
|
|
1368
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpTiltShift2, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1369
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpTiltShift2, isStandalone: true, selector: "ngtp-tilt-shift2", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.NORMAL })], hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1370
|
+
<ngt-tilt-shift2-effect *args="[options()]" [camera]="effect.camera()">
|
|
1371
|
+
<ngtp-effect-blend-mode />
|
|
924
1372
|
<ng-content />
|
|
925
|
-
</ngt-tilt-
|
|
926
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1373
|
+
</ngt-tilt-shift2-effect>
|
|
1374
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
927
1375
|
}
|
|
928
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1376
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpTiltShift2, decorators: [{
|
|
929
1377
|
type: Component,
|
|
930
1378
|
args: [{
|
|
931
|
-
selector: 'ngtp-tilt-
|
|
1379
|
+
selector: 'ngtp-tilt-shift2',
|
|
932
1380
|
standalone: true,
|
|
933
1381
|
template: `
|
|
934
|
-
<ngt-tilt-
|
|
1382
|
+
<ngt-tilt-shift2-effect *args="[options()]" [camera]="effect.camera()">
|
|
1383
|
+
<ngtp-effect-blend-mode />
|
|
935
1384
|
<ng-content />
|
|
936
|
-
</ngt-tilt-
|
|
1385
|
+
</ngt-tilt-shift2-effect>
|
|
937
1386
|
`,
|
|
938
|
-
imports: [NgtArgs],
|
|
939
1387
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1388
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1389
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1390
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
1391
|
+
providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.NORMAL })],
|
|
940
1392
|
}]
|
|
941
1393
|
}] });
|
|
942
1394
|
|
|
943
|
-
extend({
|
|
944
|
-
class
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
1395
|
+
extend({ VignetteEffect });
|
|
1396
|
+
class NgtpVignette {
|
|
1397
|
+
constructor() {
|
|
1398
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1399
|
+
this.options = input({});
|
|
1400
|
+
}
|
|
1401
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpVignette, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1402
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpVignette, isStandalone: true, selector: "ngtp-vignette", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1403
|
+
<ngt-vignette-effect *args="[options()]" [camera]="effect.camera()">
|
|
1404
|
+
<ngtp-effect-blend-mode />
|
|
948
1405
|
<ng-content />
|
|
949
|
-
</ngt-
|
|
950
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1406
|
+
</ngt-vignette-effect>
|
|
1407
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
951
1408
|
}
|
|
952
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1409
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpVignette, decorators: [{
|
|
953
1410
|
type: Component,
|
|
954
1411
|
args: [{
|
|
955
|
-
selector: 'ngtp-
|
|
956
|
-
standalone: true,
|
|
1412
|
+
selector: 'ngtp-vignette',
|
|
957
1413
|
template: `
|
|
958
|
-
<ngt-
|
|
1414
|
+
<ngt-vignette-effect *args="[options()]" [camera]="effect.camera()">
|
|
1415
|
+
<ngtp-effect-blend-mode />
|
|
959
1416
|
<ng-content />
|
|
960
|
-
</ngt-
|
|
1417
|
+
</ngt-vignette-effect>
|
|
961
1418
|
`,
|
|
962
|
-
|
|
1419
|
+
standalone: true,
|
|
963
1420
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1421
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1422
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1423
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
964
1424
|
}]
|
|
965
1425
|
}] });
|
|
966
1426
|
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
1427
|
+
const WaterShader = {
|
|
1428
|
+
fragmentShader: `
|
|
1429
|
+
uniform float factor;
|
|
1430
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1431
|
+
vec2 vUv = uv;
|
|
1432
|
+
float frequency = 6.0 * factor;
|
|
1433
|
+
float amplitude = 0.015 * factor;
|
|
1434
|
+
float x = vUv.y * frequency + time * .7;
|
|
1435
|
+
float y = vUv.x * frequency + time * .3;
|
|
1436
|
+
vUv.x += cos(x+y) * amplitude * cos(y);
|
|
1437
|
+
vUv.y += sin(x-y) * amplitude * cos(y);
|
|
1438
|
+
vec4 rgba = texture2D(inputBuffer, vUv);
|
|
1439
|
+
outputColor = rgba;
|
|
1440
|
+
}`,
|
|
1441
|
+
};
|
|
1442
|
+
class WaterEffect extends Effect {
|
|
1443
|
+
constructor({ blendFunction = BlendFunction.NORMAL, factor = 0 } = {}) {
|
|
1444
|
+
super('WaterEffect', WaterShader.fragmentShader, {
|
|
1445
|
+
blendFunction,
|
|
1446
|
+
attributes: EffectAttribute.CONVOLUTION,
|
|
1447
|
+
uniforms: new Map([['factor', new Uniform(factor)]]),
|
|
1448
|
+
});
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
extend({ WaterEffect });
|
|
1452
|
+
class NgtpWater {
|
|
1453
|
+
constructor() {
|
|
1454
|
+
this.effect = inject(NgtpEffect, { host: true });
|
|
1455
|
+
this.options = input({});
|
|
1456
|
+
}
|
|
1457
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpWater, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1458
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtpWater, isStandalone: true, selector: "ngtp-water", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.NORMAL })], hostDirectives: [{ directive: NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
|
|
1459
|
+
<ngt-water-effect *args="[options()]" [camera]="effect.camera()">
|
|
1460
|
+
<ngtp-effect-blend-mode />
|
|
972
1461
|
<ng-content />
|
|
973
|
-
</ngt-
|
|
974
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
1462
|
+
</ngt-water-effect>
|
|
1463
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
975
1464
|
}
|
|
976
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1465
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtpWater, decorators: [{
|
|
977
1466
|
type: Component,
|
|
978
1467
|
args: [{
|
|
979
|
-
selector: 'ngtp-
|
|
1468
|
+
selector: 'ngtp-water',
|
|
980
1469
|
standalone: true,
|
|
981
1470
|
template: `
|
|
982
|
-
<ngt-
|
|
1471
|
+
<ngt-water-effect *args="[options()]" [camera]="effect.camera()">
|
|
1472
|
+
<ngtp-effect-blend-mode />
|
|
983
1473
|
<ng-content />
|
|
984
|
-
</ngt-
|
|
1474
|
+
</ngt-water-effect>
|
|
985
1475
|
`,
|
|
986
|
-
imports: [NgtArgs],
|
|
987
1476
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
1477
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1478
|
+
imports: [NgtArgs, NgtpEffectBlendMode],
|
|
1479
|
+
hostDirectives: [NgtpEffectHostDirective],
|
|
1480
|
+
providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.NORMAL })],
|
|
988
1481
|
}]
|
|
989
1482
|
}] });
|
|
990
1483
|
|
|
@@ -992,5 +1485,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
|
|
|
992
1485
|
* Generated bundle index. Do not edit.
|
|
993
1486
|
*/
|
|
994
1487
|
|
|
995
|
-
export { NgtpBloom, NgtpBrightnessContrast, NgtpColorDepth, NgtpDepth, NgtpDotScreen, NgtpEffect, NgtpEffectComposer, NgtpHueSaturation, NgtpLUT, NgtpNoise, NgtpPixelation, NgtpSMAA,
|
|
1488
|
+
export { ASCIIEffect, LensFlareEffect, NgtpASCII, NgtpBloom, NgtpBrightnessContrast, NgtpChromaticAberration, NgtpColorAverage, NgtpColorDepth, NgtpDepth, NgtpDepthOfField, NgtpDotScreen, NgtpEffect, NgtpEffectBlendMode, NgtpEffectComposer, NgtpEffectHostDirective, NgtpFXAA, NgtpGlitch, NgtpGodRays, NgtpGrid, NgtpHueSaturation, NgtpLUT, NgtpLensFlare, NgtpNoise, NgtpPixelation, NgtpSMAA, NgtpScanline, NgtpSepia, NgtpShockWave, NgtpTiltShift, NgtpTiltShift2, NgtpVignette, NgtpWater, TiltShift2Effect, WaterEffect, injectDefaultEffectOptions, injectEffectComposerApi, provideDefaultEffectOptions, provideEffectComposerApi };
|
|
996
1489
|
//# sourceMappingURL=angular-three-postprocessing.mjs.map
|