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