angular-three-soba 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/distort.vert.glsl +1 -0
- package/esm2020/materials/angular-three-soba-materials.mjs +5 -0
- package/esm2020/materials/index.mjs +4 -0
- package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +74 -0
- package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +328 -0
- package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +67 -0
- package/esm2020/shaders/index.mjs +6 -1
- package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +61 -0
- package/esm2020/shaders/lib/convolution-material/convolution-material.mjs +94 -0
- package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +55 -0
- package/esm2020/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
- package/esm2020/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
- package/fesm2015/angular-three-soba-materials.mjs +468 -0
- package/fesm2015/angular-three-soba-materials.mjs.map +1 -0
- package/fesm2015/angular-three-soba-shaders.mjs +467 -1
- package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2020/angular-three-soba-materials.mjs +468 -0
- package/fesm2020/angular-three-soba-materials.mjs.map +1 -0
- package/fesm2020/angular-three-soba-shaders.mjs +466 -1
- package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
- package/materials/README.md +3 -0
- package/materials/index.d.ts +3 -0
- package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +19 -0
- package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +41 -0
- package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +14 -0
- package/package.json +39 -28
- package/plugin/package.json +1 -1
- package/shaders/index.d.ts +5 -0
- package/shaders/lib/blur-pass/blur-pass.d.ts +23 -0
- package/shaders/lib/convolution-material/convolution-material.d.ts +7 -0
- package/shaders/lib/mesh-distort-material/mesh-distort-material.d.ts +144 -0
- package/shaders/lib/mesh-reflector-material/mesh-reflector-material.d.ts +50 -0
- package/shaders/lib/mesh-wobble-material/mesh-wobble-material.d.ts +15 -0
|
@@ -1,4 +1,470 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
|
+
import { ShaderMaterial, Uniform, Vector2, NoBlending, WebGLRenderTarget, LinearFilter, Scene, Camera, BufferGeometry, BufferAttribute, Mesh, MeshStandardMaterial } from 'three';
|
|
3
|
+
import { InjectionToken } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
class ConvolutionMaterial extends ShaderMaterial {
|
|
6
|
+
constructor(texelSize = new Vector2()) {
|
|
7
|
+
super({
|
|
8
|
+
uniforms: {
|
|
9
|
+
inputBuffer: new Uniform(null),
|
|
10
|
+
depthBuffer: new Uniform(null),
|
|
11
|
+
resolution: new Uniform(new Vector2()),
|
|
12
|
+
texelSize: new Uniform(new Vector2()),
|
|
13
|
+
halfTexelSize: new Uniform(new Vector2()),
|
|
14
|
+
kernel: new Uniform(0.0),
|
|
15
|
+
scale: new Uniform(1.0),
|
|
16
|
+
cameraNear: new Uniform(0.0),
|
|
17
|
+
cameraFar: new Uniform(1.0),
|
|
18
|
+
minDepthThreshold: new Uniform(0.0),
|
|
19
|
+
maxDepthThreshold: new Uniform(1.0),
|
|
20
|
+
depthScale: new Uniform(0.0),
|
|
21
|
+
depthToBlurRatioBias: new Uniform(0.25),
|
|
22
|
+
},
|
|
23
|
+
fragmentShader: `#include <common>
|
|
24
|
+
#include <dithering_pars_fragment>
|
|
25
|
+
uniform sampler2D inputBuffer;
|
|
26
|
+
uniform sampler2D depthBuffer;
|
|
27
|
+
uniform float cameraNear;
|
|
28
|
+
uniform float cameraFar;
|
|
29
|
+
uniform float minDepthThreshold;
|
|
30
|
+
uniform float maxDepthThreshold;
|
|
31
|
+
uniform float depthScale;
|
|
32
|
+
uniform float depthToBlurRatioBias;
|
|
33
|
+
varying vec2 vUv;
|
|
34
|
+
varying vec2 vUv0;
|
|
35
|
+
varying vec2 vUv1;
|
|
36
|
+
varying vec2 vUv2;
|
|
37
|
+
varying vec2 vUv3;
|
|
38
|
+
|
|
39
|
+
void main() {
|
|
40
|
+
float depthFactor = 0.0;
|
|
41
|
+
|
|
42
|
+
#ifdef USE_DEPTH
|
|
43
|
+
vec4 depth = texture2D(depthBuffer, vUv);
|
|
44
|
+
depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
|
|
45
|
+
depthFactor *= depthScale;
|
|
46
|
+
depthFactor = max(0.0, min(1.0, depthFactor + 0.25));
|
|
47
|
+
#endif
|
|
48
|
+
|
|
49
|
+
vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));
|
|
50
|
+
sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));
|
|
51
|
+
sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));
|
|
52
|
+
sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));
|
|
53
|
+
gl_FragColor = sum * 0.25 ;
|
|
54
|
+
|
|
55
|
+
#include <dithering_fragment>
|
|
56
|
+
#include <tonemapping_fragment>
|
|
57
|
+
#include <encodings_fragment>
|
|
58
|
+
}`,
|
|
59
|
+
vertexShader: `uniform vec2 texelSize;
|
|
60
|
+
uniform vec2 halfTexelSize;
|
|
61
|
+
uniform float kernel;
|
|
62
|
+
uniform float scale;
|
|
63
|
+
varying vec2 vUv;
|
|
64
|
+
varying vec2 vUv0;
|
|
65
|
+
varying vec2 vUv1;
|
|
66
|
+
varying vec2 vUv2;
|
|
67
|
+
varying vec2 vUv3;
|
|
68
|
+
|
|
69
|
+
void main() {
|
|
70
|
+
vec2 uv = position.xy * 0.5 + 0.5;
|
|
71
|
+
vUv = uv;
|
|
72
|
+
|
|
73
|
+
vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;
|
|
74
|
+
vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);
|
|
75
|
+
vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);
|
|
76
|
+
vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);
|
|
77
|
+
vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);
|
|
78
|
+
|
|
79
|
+
gl_Position = vec4(position.xy, 1.0, 1.0);
|
|
80
|
+
}`,
|
|
81
|
+
blending: NoBlending,
|
|
82
|
+
depthWrite: false,
|
|
83
|
+
depthTest: false,
|
|
84
|
+
});
|
|
85
|
+
this.toneMapped = false;
|
|
86
|
+
this.setTexelSize(texelSize.x, texelSize.y);
|
|
87
|
+
this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);
|
|
88
|
+
}
|
|
89
|
+
setTexelSize(x, y) {
|
|
90
|
+
this.uniforms['texelSize'].value.set(x, y);
|
|
91
|
+
this.uniforms['halfTexelSize'].value.set(x, y).multiplyScalar(0.5);
|
|
92
|
+
}
|
|
93
|
+
setResolution(resolution) {
|
|
94
|
+
this.uniforms['resolution'].value.copy(resolution);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
class BlurPass {
|
|
99
|
+
constructor({ gl, resolution, width = 500, height = 500, minDepthThreshold = 0, maxDepthThreshold = 1, depthScale = 0, depthToBlurRatioBias = 0.25, }) {
|
|
100
|
+
this.renderToScreen = false;
|
|
101
|
+
this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {
|
|
102
|
+
minFilter: LinearFilter,
|
|
103
|
+
magFilter: LinearFilter,
|
|
104
|
+
stencilBuffer: false,
|
|
105
|
+
depthBuffer: false,
|
|
106
|
+
encoding: gl.outputEncoding,
|
|
107
|
+
});
|
|
108
|
+
this.renderTargetB = this.renderTargetA.clone();
|
|
109
|
+
this.convolutionMaterial = new ConvolutionMaterial();
|
|
110
|
+
this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);
|
|
111
|
+
this.convolutionMaterial.setResolution(new Vector2(width, height));
|
|
112
|
+
this.scene = new Scene();
|
|
113
|
+
this.camera = new Camera();
|
|
114
|
+
this.convolutionMaterial.uniforms['minDepthThreshold'].value = minDepthThreshold;
|
|
115
|
+
this.convolutionMaterial.uniforms['maxDepthThreshold'].value = maxDepthThreshold;
|
|
116
|
+
this.convolutionMaterial.uniforms['depthScale'].value = depthScale;
|
|
117
|
+
this.convolutionMaterial.uniforms['depthToBlurRatioBias'].value = depthToBlurRatioBias;
|
|
118
|
+
this.convolutionMaterial.defines['USE_DEPTH'] = depthScale > 0;
|
|
119
|
+
const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);
|
|
120
|
+
const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);
|
|
121
|
+
const geometry = new BufferGeometry();
|
|
122
|
+
geometry.setAttribute('position', new BufferAttribute(vertices, 3));
|
|
123
|
+
geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
|
|
124
|
+
this.screen = new Mesh(geometry, this.convolutionMaterial);
|
|
125
|
+
this.screen.frustumCulled = false;
|
|
126
|
+
this.scene.add(this.screen);
|
|
127
|
+
}
|
|
128
|
+
render(renderer, inputBuffer, outputBuffer) {
|
|
129
|
+
const scene = this.scene;
|
|
130
|
+
const camera = this.camera;
|
|
131
|
+
const renderTargetA = this.renderTargetA;
|
|
132
|
+
const renderTargetB = this.renderTargetB;
|
|
133
|
+
const material = this.convolutionMaterial;
|
|
134
|
+
const uniforms = material.uniforms;
|
|
135
|
+
uniforms['depthBuffer'].value = inputBuffer.depthTexture;
|
|
136
|
+
const kernel = material.kernel;
|
|
137
|
+
let lastRT = inputBuffer;
|
|
138
|
+
let destRT;
|
|
139
|
+
let i, l;
|
|
140
|
+
// Apply the multi-pass blur.
|
|
141
|
+
for (i = 0, l = kernel.length - 1; i < l; ++i) {
|
|
142
|
+
// Alternate between targets.
|
|
143
|
+
destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;
|
|
144
|
+
uniforms['kernel'].value = kernel[i];
|
|
145
|
+
uniforms['inputBuffer'].value = lastRT.texture;
|
|
146
|
+
renderer.setRenderTarget(destRT);
|
|
147
|
+
renderer.render(scene, camera);
|
|
148
|
+
lastRT = destRT;
|
|
149
|
+
}
|
|
150
|
+
uniforms['kernel'].value = kernel[i];
|
|
151
|
+
uniforms['inputBuffer'].value = lastRT.texture;
|
|
152
|
+
renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);
|
|
153
|
+
renderer.render(scene, camera);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
|
|
158
|
+
function provideDistortMaterialShader(distortShader) {
|
|
159
|
+
return {
|
|
160
|
+
provide: NGTS_DISTORT_MATERIAL_SHADER,
|
|
161
|
+
useFactory: () => {
|
|
162
|
+
return class MeshDistortMaterial extends THREE.MeshPhysicalMaterial {
|
|
163
|
+
constructor(parameters = {}) {
|
|
164
|
+
super(parameters);
|
|
165
|
+
this.setValues(parameters);
|
|
166
|
+
this._time = { value: 0 };
|
|
167
|
+
this._distort = { value: 0.4 };
|
|
168
|
+
this._radius = { value: 1 };
|
|
169
|
+
}
|
|
170
|
+
onBeforeCompile(shader) {
|
|
171
|
+
shader.uniforms['time'] = this._time;
|
|
172
|
+
shader.uniforms['radius'] = this._radius;
|
|
173
|
+
shader.uniforms['distort'] = this._distort;
|
|
174
|
+
shader.vertexShader = `
|
|
175
|
+
uniform float time;
|
|
176
|
+
uniform float radius;
|
|
177
|
+
uniform float distort;
|
|
178
|
+
${distortShader}
|
|
179
|
+
${shader.vertexShader}
|
|
180
|
+
`;
|
|
181
|
+
shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
|
|
182
|
+
float updateTime = time / 50.0;
|
|
183
|
+
float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
|
|
184
|
+
vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
|
|
185
|
+
`);
|
|
186
|
+
}
|
|
187
|
+
get time() {
|
|
188
|
+
return this._time.value;
|
|
189
|
+
}
|
|
190
|
+
set time(v) {
|
|
191
|
+
this._time.value = v;
|
|
192
|
+
}
|
|
193
|
+
get distort() {
|
|
194
|
+
return this._distort.value;
|
|
195
|
+
}
|
|
196
|
+
set distort(v) {
|
|
197
|
+
this._distort.value = v;
|
|
198
|
+
}
|
|
199
|
+
get radius() {
|
|
200
|
+
return this._radius.value;
|
|
201
|
+
}
|
|
202
|
+
set radius(v) {
|
|
203
|
+
this._radius.value = v;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
class MeshReflectorMaterial extends MeshStandardMaterial {
|
|
211
|
+
constructor(parameters = {}) {
|
|
212
|
+
super(parameters);
|
|
213
|
+
this._tDepth = { value: null };
|
|
214
|
+
this._distortionMap = { value: null };
|
|
215
|
+
this._tDiffuse = { value: null };
|
|
216
|
+
this._tDiffuseBlur = { value: null };
|
|
217
|
+
this._textureMatrix = { value: null };
|
|
218
|
+
this._hasBlur = { value: false };
|
|
219
|
+
this._mirror = { value: 0.0 };
|
|
220
|
+
this._mixBlur = { value: 0.0 };
|
|
221
|
+
this._blurStrength = { value: 0.5 };
|
|
222
|
+
this._minDepthThreshold = { value: 0.9 };
|
|
223
|
+
this._maxDepthThreshold = { value: 1 };
|
|
224
|
+
this._depthScale = { value: 0 };
|
|
225
|
+
this._depthToBlurRatioBias = { value: 0.25 };
|
|
226
|
+
this._distortion = { value: 1 };
|
|
227
|
+
this._mixContrast = { value: 1.0 };
|
|
228
|
+
this.setValues(parameters);
|
|
229
|
+
}
|
|
230
|
+
onBeforeCompile(shader) {
|
|
231
|
+
var _a;
|
|
232
|
+
if (!((_a = shader.defines) === null || _a === void 0 ? void 0 : _a.USE_UV)) {
|
|
233
|
+
shader.defines.USE_UV = '';
|
|
234
|
+
}
|
|
235
|
+
shader.uniforms.hasBlur = this._hasBlur;
|
|
236
|
+
shader.uniforms.tDiffuse = this._tDiffuse;
|
|
237
|
+
shader.uniforms.tDepth = this._tDepth;
|
|
238
|
+
shader.uniforms.distortionMap = this._distortionMap;
|
|
239
|
+
shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;
|
|
240
|
+
shader.uniforms.textureMatrix = this._textureMatrix;
|
|
241
|
+
shader.uniforms.mirror = this._mirror;
|
|
242
|
+
shader.uniforms.mixBlur = this._mixBlur;
|
|
243
|
+
shader.uniforms.mixStrength = this._blurStrength;
|
|
244
|
+
shader.uniforms.minDepthThreshold = this._minDepthThreshold;
|
|
245
|
+
shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;
|
|
246
|
+
shader.uniforms.depthScale = this._depthScale;
|
|
247
|
+
shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;
|
|
248
|
+
shader.uniforms.distortion = this._distortion;
|
|
249
|
+
shader.uniforms.mixContrast = this._mixContrast;
|
|
250
|
+
shader.vertexShader = `
|
|
251
|
+
uniform mat4 textureMatrix;
|
|
252
|
+
varying vec4 my_vUv;
|
|
253
|
+
${shader.vertexShader}`;
|
|
254
|
+
shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>
|
|
255
|
+
my_vUv = textureMatrix * vec4( position, 1.0 );
|
|
256
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);
|
|
257
|
+
shader.fragmentShader = `
|
|
258
|
+
uniform sampler2D tDiffuse;
|
|
259
|
+
uniform sampler2D tDiffuseBlur;
|
|
260
|
+
uniform sampler2D tDepth;
|
|
261
|
+
uniform sampler2D distortionMap;
|
|
262
|
+
uniform float distortion;
|
|
263
|
+
uniform float cameraNear;
|
|
264
|
+
uniform float cameraFar;
|
|
265
|
+
uniform bool hasBlur;
|
|
266
|
+
uniform float mixBlur;
|
|
267
|
+
uniform float mirror;
|
|
268
|
+
uniform float mixStrength;
|
|
269
|
+
uniform float minDepthThreshold;
|
|
270
|
+
uniform float maxDepthThreshold;
|
|
271
|
+
uniform float mixContrast;
|
|
272
|
+
uniform float depthScale;
|
|
273
|
+
uniform float depthToBlurRatioBias;
|
|
274
|
+
varying vec4 my_vUv;
|
|
275
|
+
${shader.fragmentShader}`;
|
|
276
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
|
|
277
|
+
|
|
278
|
+
float distortionFactor = 0.0;
|
|
279
|
+
#ifdef USE_DISTORTION
|
|
280
|
+
distortionFactor = texture2D(distortionMap, vUv).r * distortion;
|
|
281
|
+
#endif
|
|
282
|
+
|
|
283
|
+
vec4 new_vUv = my_vUv;
|
|
284
|
+
new_vUv.x += distortionFactor;
|
|
285
|
+
new_vUv.y += distortionFactor;
|
|
286
|
+
|
|
287
|
+
vec4 base = texture2DProj(tDiffuse, new_vUv);
|
|
288
|
+
vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);
|
|
289
|
+
|
|
290
|
+
vec4 merge = base;
|
|
291
|
+
|
|
292
|
+
#ifdef USE_NORMALMAP
|
|
293
|
+
vec2 normal_uv = vec2(0.0);
|
|
294
|
+
vec4 normalColor = texture2D(normalMap, vUv * normalScale);
|
|
295
|
+
vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );
|
|
296
|
+
vec3 coord = new_vUv.xyz / new_vUv.w;
|
|
297
|
+
normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;
|
|
298
|
+
vec4 base_normal = texture2D(tDiffuse, normal_uv);
|
|
299
|
+
vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);
|
|
300
|
+
merge = base_normal;
|
|
301
|
+
blur = blur_normal;
|
|
302
|
+
#endif
|
|
303
|
+
|
|
304
|
+
float depthFactor = 0.0001;
|
|
305
|
+
float blurFactor = 0.0;
|
|
306
|
+
|
|
307
|
+
#ifdef USE_DEPTH
|
|
308
|
+
vec4 depth = texture2DProj(tDepth, new_vUv);
|
|
309
|
+
depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
|
|
310
|
+
depthFactor *= depthScale;
|
|
311
|
+
depthFactor = max(0.0001, min(1.0, depthFactor));
|
|
312
|
+
|
|
313
|
+
#ifdef USE_BLUR
|
|
314
|
+
blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);
|
|
315
|
+
merge = merge * min(1.0, depthFactor + 0.5);
|
|
316
|
+
#else
|
|
317
|
+
merge = merge * depthFactor;
|
|
318
|
+
#endif
|
|
319
|
+
|
|
320
|
+
#endif
|
|
321
|
+
|
|
322
|
+
float reflectorRoughnessFactor = roughness;
|
|
323
|
+
#ifdef USE_ROUGHNESSMAP
|
|
324
|
+
vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );
|
|
325
|
+
reflectorRoughnessFactor *= reflectorTexelRoughness.g;
|
|
326
|
+
#endif
|
|
327
|
+
|
|
328
|
+
#ifdef USE_BLUR
|
|
329
|
+
blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);
|
|
330
|
+
merge = mix(merge, blur, blurFactor);
|
|
331
|
+
#endif
|
|
332
|
+
|
|
333
|
+
vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);
|
|
334
|
+
newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;
|
|
335
|
+
newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;
|
|
336
|
+
newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;
|
|
337
|
+
|
|
338
|
+
diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);
|
|
339
|
+
`);
|
|
340
|
+
}
|
|
341
|
+
get tDiffuse() {
|
|
342
|
+
return this._tDiffuse.value;
|
|
343
|
+
}
|
|
344
|
+
set tDiffuse(v) {
|
|
345
|
+
this._tDiffuse.value = v;
|
|
346
|
+
}
|
|
347
|
+
get tDepth() {
|
|
348
|
+
return this._tDepth.value;
|
|
349
|
+
}
|
|
350
|
+
set tDepth(v) {
|
|
351
|
+
this._tDepth.value = v;
|
|
352
|
+
}
|
|
353
|
+
get distortionMap() {
|
|
354
|
+
return this._distortionMap.value;
|
|
355
|
+
}
|
|
356
|
+
set distortionMap(v) {
|
|
357
|
+
this._distortionMap.value = v;
|
|
358
|
+
}
|
|
359
|
+
get tDiffuseBlur() {
|
|
360
|
+
return this._tDiffuseBlur.value;
|
|
361
|
+
}
|
|
362
|
+
set tDiffuseBlur(v) {
|
|
363
|
+
this._tDiffuseBlur.value = v;
|
|
364
|
+
}
|
|
365
|
+
get textureMatrix() {
|
|
366
|
+
return this._textureMatrix.value;
|
|
367
|
+
}
|
|
368
|
+
set textureMatrix(v) {
|
|
369
|
+
this._textureMatrix.value = v;
|
|
370
|
+
}
|
|
371
|
+
get hasBlur() {
|
|
372
|
+
return this._hasBlur.value;
|
|
373
|
+
}
|
|
374
|
+
set hasBlur(v) {
|
|
375
|
+
this._hasBlur.value = v;
|
|
376
|
+
}
|
|
377
|
+
get mirror() {
|
|
378
|
+
return this._mirror.value;
|
|
379
|
+
}
|
|
380
|
+
set mirror(v) {
|
|
381
|
+
this._mirror.value = v;
|
|
382
|
+
}
|
|
383
|
+
get mixBlur() {
|
|
384
|
+
return this._mixBlur.value;
|
|
385
|
+
}
|
|
386
|
+
set mixBlur(v) {
|
|
387
|
+
this._mixBlur.value = v;
|
|
388
|
+
}
|
|
389
|
+
get mixStrength() {
|
|
390
|
+
return this._blurStrength.value;
|
|
391
|
+
}
|
|
392
|
+
set mixStrength(v) {
|
|
393
|
+
this._blurStrength.value = v;
|
|
394
|
+
}
|
|
395
|
+
get minDepthThreshold() {
|
|
396
|
+
return this._minDepthThreshold.value;
|
|
397
|
+
}
|
|
398
|
+
set minDepthThreshold(v) {
|
|
399
|
+
this._minDepthThreshold.value = v;
|
|
400
|
+
}
|
|
401
|
+
get maxDepthThreshold() {
|
|
402
|
+
return this._maxDepthThreshold.value;
|
|
403
|
+
}
|
|
404
|
+
set maxDepthThreshold(v) {
|
|
405
|
+
this._maxDepthThreshold.value = v;
|
|
406
|
+
}
|
|
407
|
+
get depthScale() {
|
|
408
|
+
return this._depthScale.value;
|
|
409
|
+
}
|
|
410
|
+
set depthScale(v) {
|
|
411
|
+
this._depthScale.value = v;
|
|
412
|
+
}
|
|
413
|
+
get depthToBlurRatioBias() {
|
|
414
|
+
return this._depthToBlurRatioBias.value;
|
|
415
|
+
}
|
|
416
|
+
set depthToBlurRatioBias(v) {
|
|
417
|
+
this._depthToBlurRatioBias.value = v;
|
|
418
|
+
}
|
|
419
|
+
get distortion() {
|
|
420
|
+
return this._distortion.value;
|
|
421
|
+
}
|
|
422
|
+
set distortion(v) {
|
|
423
|
+
this._distortion.value = v;
|
|
424
|
+
}
|
|
425
|
+
get mixContrast() {
|
|
426
|
+
return this._mixContrast.value;
|
|
427
|
+
}
|
|
428
|
+
set mixContrast(v) {
|
|
429
|
+
this._mixContrast.value = v;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
class MeshWobbleMaterial extends THREE.MeshStandardMaterial {
|
|
434
|
+
constructor(parameters = {}) {
|
|
435
|
+
super(parameters);
|
|
436
|
+
this.setValues(parameters);
|
|
437
|
+
this._time = { value: 0 };
|
|
438
|
+
this._factor = { value: 1 };
|
|
439
|
+
}
|
|
440
|
+
onBeforeCompile(shader) {
|
|
441
|
+
shader.uniforms['time'] = this._time;
|
|
442
|
+
shader.uniforms['factor'] = this._factor;
|
|
443
|
+
shader.vertexShader = `
|
|
444
|
+
uniform float time;
|
|
445
|
+
uniform float factor;
|
|
446
|
+
${shader.vertexShader}
|
|
447
|
+
`;
|
|
448
|
+
shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;
|
|
449
|
+
float c = cos( theta );
|
|
450
|
+
float s = sin( theta );
|
|
451
|
+
mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );
|
|
452
|
+
vec3 transformed = vec3( position ) * m;
|
|
453
|
+
vNormal = vNormal * m;`);
|
|
454
|
+
}
|
|
455
|
+
get time() {
|
|
456
|
+
return this._time.value;
|
|
457
|
+
}
|
|
458
|
+
set time(v) {
|
|
459
|
+
this._time.value = v;
|
|
460
|
+
}
|
|
461
|
+
get factor() {
|
|
462
|
+
return this._factor.value;
|
|
463
|
+
}
|
|
464
|
+
set factor(v) {
|
|
465
|
+
this._factor.value = v;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
2
468
|
|
|
3
469
|
function shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {
|
|
4
470
|
const material = class extends THREE.ShaderMaterial {
|
|
@@ -34,5 +500,5 @@ function shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {
|
|
|
34
500
|
* Generated bundle index. Do not edit.
|
|
35
501
|
*/
|
|
36
502
|
|
|
37
|
-
export { shaderMaterial };
|
|
503
|
+
export { BlurPass, ConvolutionMaterial, MeshReflectorMaterial, MeshWobbleMaterial, NGTS_DISTORT_MATERIAL_SHADER, provideDistortMaterialShader, shaderMaterial };
|
|
38
504
|
//# sourceMappingURL=angular-three-soba-shaders.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-soba-shaders.mjs","sources":["../../../../libs/angular-three-soba/shaders/src/lib/shader-material/shader-material.ts","../../../../libs/angular-three-soba/shaders/src/angular-three-soba-shaders.ts"],"sourcesContent":["import * as THREE from 'three';\n\nexport function shaderMaterial(\n uniforms: {\n [name: string]:\n | THREE.CubeTexture\n | THREE.Texture\n | Int32Array\n | Float32Array\n | THREE.Matrix4\n | THREE.Matrix3\n | THREE.Quaternion\n | THREE.Vector4\n | THREE.Vector3\n | THREE.Vector2\n | THREE.Color\n | number\n | boolean\n | Array<any>\n | null;\n },\n vertexShader: string,\n fragmentShader: string,\n onInit?: (material?: THREE.ShaderMaterial) => void\n) {\n const material = class extends THREE.ShaderMaterial {\n public key = '';\n constructor(parameters = {}) {\n const entries = Object.entries(uniforms);\n // Create unforms and shaders\n super({\n uniforms: entries.reduce((acc, [name, value]) => {\n const uniform = THREE.UniformsUtils.clone({ [name]: { value } });\n return {\n ...acc,\n ...uniform,\n };\n }, {}),\n vertexShader,\n fragmentShader,\n });\n // Create getter/setters\n entries.forEach(([name]) =>\n Object.defineProperty(this, name, {\n get: () => this.uniforms[name].value,\n set: (v) => (this.uniforms[name].value = v),\n })\n );\n\n // Assign parameters, this might include uniforms\n Object.assign(this, parameters);\n // Call onInit\n if (onInit) onInit(this);\n }\n } as unknown as typeof THREE.ShaderMaterial & { key: string };\n material.key = THREE.MathUtils.generateUUID();\n return material;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEM,SAAU,cAAc,CAC1B,QAiBC,EACD,YAAoB,EACpB,cAAsB,EACtB,MAAkD,EAAA;AAElD,IAAA,MAAM,QAAQ,GAAG,cAAc,KAAK,CAAC,cAAc,CAAA;QAE/C,WAAY,CAAA,UAAU,GAAG,EAAE,EAAA;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAEzC,YAAA,KAAK,CAAC;AACF,gBAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;AAC5C,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACjE,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,GAAG,CACH,EAAA,OAAO,CACZ,CAAA;iBACL,EAAE,EAAE,CAAC;gBACN,YAAY;gBACZ,cAAc;AACjB,aAAA,CAAC,CAAC;AAdA,YAAA,IAAG,CAAA,GAAA,GAAG,EAAE,CAAC;;AAgBZ,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KACnB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;gBAC9B,GAAG,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK;AACpC,gBAAA,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9C,aAAA,CAAC,CACL,CAAC;;AAGF,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;;AAEhC,YAAA,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5B;KACwD,CAAC;IAC9D,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAC9C,IAAA,OAAO,QAAQ,CAAC;AACpB;;ACzDA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"angular-three-soba-shaders.mjs","sources":["../../../../libs/angular-three-soba/shaders/src/lib/convolution-material/convolution-material.ts","../../../../libs/angular-three-soba/shaders/src/lib/blur-pass/blur-pass.ts","../../../../libs/angular-three-soba/shaders/src/lib/mesh-distort-material/mesh-distort-material.ts","../../../../libs/angular-three-soba/shaders/src/lib/mesh-reflector-material/mesh-reflector-material.ts","../../../../libs/angular-three-soba/shaders/src/lib/mesh-wobble-material/mesh-wobble-material.ts","../../../../libs/angular-three-soba/shaders/src/lib/shader-material/shader-material.ts","../../../../libs/angular-three-soba/shaders/src/angular-three-soba-shaders.ts"],"sourcesContent":["import { NoBlending, ShaderMaterial, Uniform, Vector2 } from 'three';\n\nexport class ConvolutionMaterial extends ShaderMaterial {\n readonly kernel: Float32Array;\n constructor(texelSize = new Vector2()) {\n super({\n uniforms: {\n inputBuffer: new Uniform(null),\n depthBuffer: new Uniform(null),\n resolution: new Uniform(new Vector2()),\n texelSize: new Uniform(new Vector2()),\n halfTexelSize: new Uniform(new Vector2()),\n kernel: new Uniform(0.0),\n scale: new Uniform(1.0),\n cameraNear: new Uniform(0.0),\n cameraFar: new Uniform(1.0),\n minDepthThreshold: new Uniform(0.0),\n maxDepthThreshold: new Uniform(1.0),\n depthScale: new Uniform(0.0),\n depthToBlurRatioBias: new Uniform(0.25),\n },\n fragmentShader: `#include <common>\n #include <dithering_pars_fragment>\n uniform sampler2D inputBuffer;\n uniform sampler2D depthBuffer;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n float depthFactor = 0.0;\n\n #ifdef USE_DEPTH\n vec4 depth = texture2D(depthBuffer, vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0, min(1.0, depthFactor + 0.25));\n #endif\n\n vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));\n gl_FragColor = sum * 0.25 ;\n\n #include <dithering_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }`,\n vertexShader: `uniform vec2 texelSize;\n uniform vec2 halfTexelSize;\n uniform float kernel;\n uniform float scale;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n vec2 uv = position.xy * 0.5 + 0.5;\n vUv = uv;\n\n vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;\n vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\n vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\n vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\n vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\n\n gl_Position = vec4(position.xy, 1.0, 1.0);\n }`,\n blending: NoBlending,\n depthWrite: false,\n depthTest: false,\n });\n\n this.toneMapped = false;\n this.setTexelSize(texelSize.x, texelSize.y);\n this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);\n }\n\n setTexelSize(x: number, y: number) {\n this.uniforms['texelSize'].value.set(x, y);\n this.uniforms['halfTexelSize'].value.set(x, y).multiplyScalar(0.5);\n }\n setResolution(resolution: Vector2) {\n this.uniforms['resolution'].value.copy(resolution);\n }\n}\n","import {\n BufferAttribute,\n BufferGeometry,\n Camera,\n LinearFilter,\n Mesh,\n Scene,\n Vector2,\n WebGLRenderer,\n WebGLRenderTarget,\n} from 'three';\n\nimport { ConvolutionMaterial } from '../convolution-material/convolution-material';\n\nexport interface BlurPassProps {\n gl: WebGLRenderer;\n resolution: number;\n width?: number;\n height?: number;\n minDepthThreshold?: number;\n maxDepthThreshold?: number;\n depthScale?: number;\n depthToBlurRatioBias?: number;\n}\n\nexport class BlurPass {\n readonly renderTargetA: WebGLRenderTarget;\n readonly renderTargetB: WebGLRenderTarget;\n readonly convolutionMaterial: ConvolutionMaterial;\n readonly scene: Scene;\n readonly camera: Camera;\n readonly screen: Mesh;\n renderToScreen = false;\n\n constructor({\n gl,\n resolution,\n width = 500,\n height = 500,\n minDepthThreshold = 0,\n maxDepthThreshold = 1,\n depthScale = 0,\n depthToBlurRatioBias = 0.25,\n }: BlurPassProps) {\n this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n stencilBuffer: false,\n depthBuffer: false,\n encoding: gl.outputEncoding,\n });\n this.renderTargetB = this.renderTargetA.clone();\n this.convolutionMaterial = new ConvolutionMaterial();\n this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);\n this.convolutionMaterial.setResolution(new Vector2(width, height));\n this.scene = new Scene();\n this.camera = new Camera();\n this.convolutionMaterial.uniforms['minDepthThreshold'].value = minDepthThreshold;\n this.convolutionMaterial.uniforms['maxDepthThreshold'].value = maxDepthThreshold;\n this.convolutionMaterial.uniforms['depthScale'].value = depthScale;\n this.convolutionMaterial.uniforms['depthToBlurRatioBias'].value = depthToBlurRatioBias;\n this.convolutionMaterial.defines['USE_DEPTH'] = depthScale > 0;\n const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);\n const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(vertices, 3));\n geometry.setAttribute('uv', new BufferAttribute(uvs, 2));\n this.screen = new Mesh(geometry, this.convolutionMaterial);\n this.screen.frustumCulled = false;\n this.scene.add(this.screen);\n }\n\n render(renderer: WebGLRenderer, inputBuffer: any, outputBuffer: any) {\n const scene = this.scene;\n const camera = this.camera;\n const renderTargetA = this.renderTargetA;\n const renderTargetB = this.renderTargetB;\n const material = this.convolutionMaterial;\n const uniforms = material.uniforms;\n uniforms['depthBuffer'].value = inputBuffer.depthTexture;\n const kernel = material.kernel;\n let lastRT = inputBuffer;\n let destRT;\n let i, l;\n // Apply the multi-pass blur.\n for (i = 0, l = kernel.length - 1; i < l; ++i) {\n // Alternate between targets.\n destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;\n uniforms['kernel'].value = kernel[i];\n uniforms['inputBuffer'].value = lastRT.texture;\n renderer.setRenderTarget(destRT);\n renderer.render(scene, camera);\n lastRT = destRT;\n }\n uniforms['kernel'].value = kernel[i];\n uniforms['inputBuffer'].value = lastRT.texture;\n renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);\n renderer.render(scene, camera);\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport * as THREE from 'three';\n\ninterface Uniform<T> {\n value: T;\n}\n\nexport type MeshDistortMaterial = Type<{ time: number; distort: number; radius: number } & THREE.MeshPhysicalMaterial>;\n\nexport const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken<MeshDistortMaterial>('DistortMaterialShader');\n\nexport function provideDistortMaterialShader(distortShader: string) {\n return {\n provide: NGTS_DISTORT_MATERIAL_SHADER,\n useFactory: () => {\n return class MeshDistortMaterial extends THREE.MeshPhysicalMaterial {\n _time: Uniform<number>;\n _distort: Uniform<number>;\n _radius: Uniform<number>;\n\n constructor(parameters: THREE.MeshPhysicalMaterialParameters = {}) {\n super(parameters);\n this.setValues(parameters);\n this._time = { value: 0 };\n this._distort = { value: 0.4 };\n this._radius = { value: 1 };\n }\n\n override onBeforeCompile(shader: THREE.Shader) {\n shader.uniforms['time'] = this._time;\n shader.uniforms['radius'] = this._radius;\n shader.uniforms['distort'] = this._distort;\n\n shader.vertexShader = `\n\t\t\t\t\t\t\t\t\t uniform float time;\n\t\t\t\t\t\t\t\t\t uniform float radius;\n\t\t\t\t\t\t\t\t\t uniform float distort;\n\t\t\t\t\t\t\t\t\t ${distortShader}\n\t\t\t\t\t\t\t\t\t ${shader.vertexShader}\n\t\t\t\t\t\t\t\t\t `;\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `\n\t\t\t\t\t\t\t\t\t float updateTime = time / 50.0;\n\t\t\t\t\t\t\t\t\t float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));\n\t\t\t\t\t\t\t\t\t vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));\n\t\t\t\t\t\t\t\t\t `\n );\n }\n\n get time() {\n return this._time.value;\n }\n\n set time(v) {\n this._time.value = v;\n }\n\n get distort() {\n return this._distort.value;\n }\n\n set distort(v) {\n this._distort.value = v;\n }\n\n get radius() {\n return this._radius.value;\n }\n\n set radius(v) {\n this._radius.value = v;\n }\n };\n },\n };\n}\n","import { Matrix4, MeshStandardMaterial, Texture } from 'three';\n\ntype UninitializedUniform<Value> = { value: Value | null };\n\nexport class MeshReflectorMaterial extends MeshStandardMaterial {\n private _tDepth: UninitializedUniform<Texture> = { value: null };\n private _distortionMap: UninitializedUniform<Texture> = { value: null };\n private _tDiffuse: UninitializedUniform<Texture> = { value: null };\n private _tDiffuseBlur: UninitializedUniform<Texture> = { value: null };\n private _textureMatrix: UninitializedUniform<Matrix4> = { value: null };\n private _hasBlur: { value: boolean } = { value: false };\n private _mirror: { value: number } = { value: 0.0 };\n private _mixBlur: { value: number } = { value: 0.0 };\n private _blurStrength: { value: number } = { value: 0.5 };\n private _minDepthThreshold: { value: number } = { value: 0.9 };\n private _maxDepthThreshold: { value: number } = { value: 1 };\n private _depthScale: { value: number } = { value: 0 };\n private _depthToBlurRatioBias: { value: number } = { value: 0.25 };\n private _distortion: { value: number } = { value: 1 };\n private _mixContrast: { value: number } = { value: 1.0 };\n\n constructor(parameters = {}) {\n super(parameters);\n this.setValues(parameters);\n }\n\n override onBeforeCompile(shader: any) {\n if (!shader.defines?.USE_UV) {\n shader.defines.USE_UV = '';\n }\n shader.uniforms.hasBlur = this._hasBlur;\n shader.uniforms.tDiffuse = this._tDiffuse;\n shader.uniforms.tDepth = this._tDepth;\n shader.uniforms.distortionMap = this._distortionMap;\n shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;\n shader.uniforms.textureMatrix = this._textureMatrix;\n shader.uniforms.mirror = this._mirror;\n shader.uniforms.mixBlur = this._mixBlur;\n shader.uniforms.mixStrength = this._blurStrength;\n shader.uniforms.minDepthThreshold = this._minDepthThreshold;\n shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;\n shader.uniforms.depthScale = this._depthScale;\n shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;\n shader.uniforms.distortion = this._distortion;\n shader.uniforms.mixContrast = this._mixContrast;\n shader.vertexShader = `\n uniform mat4 textureMatrix;\n varying vec4 my_vUv;\n ${shader.vertexShader}`;\n shader.vertexShader = shader.vertexShader.replace(\n '#include <project_vertex>',\n `#include <project_vertex>\n my_vUv = textureMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`\n );\n shader.fragmentShader = `\n uniform sampler2D tDiffuse;\n uniform sampler2D tDiffuseBlur;\n uniform sampler2D tDepth;\n uniform sampler2D distortionMap;\n uniform float distortion;\n uniform float cameraNear;\n\t\t\t uniform float cameraFar;\n uniform bool hasBlur;\n uniform float mixBlur;\n uniform float mirror;\n uniform float mixStrength;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float mixContrast;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec4 my_vUv;\n ${shader.fragmentShader}`;\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <emissivemap_fragment>',\n `#include <emissivemap_fragment>\n\n float distortionFactor = 0.0;\n #ifdef USE_DISTORTION\n distortionFactor = texture2D(distortionMap, vUv).r * distortion;\n #endif\n\n vec4 new_vUv = my_vUv;\n new_vUv.x += distortionFactor;\n new_vUv.y += distortionFactor;\n\n vec4 base = texture2DProj(tDiffuse, new_vUv);\n vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);\n\n vec4 merge = base;\n\n #ifdef USE_NORMALMAP\n vec2 normal_uv = vec2(0.0);\n vec4 normalColor = texture2D(normalMap, vUv * normalScale);\n vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n vec3 coord = new_vUv.xyz / new_vUv.w;\n normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;\n vec4 base_normal = texture2D(tDiffuse, normal_uv);\n vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);\n merge = base_normal;\n blur = blur_normal;\n #endif\n\n float depthFactor = 0.0001;\n float blurFactor = 0.0;\n\n #ifdef USE_DEPTH\n vec4 depth = texture2DProj(tDepth, new_vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0001, min(1.0, depthFactor));\n\n #ifdef USE_BLUR\n blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);\n merge = merge * min(1.0, depthFactor + 0.5);\n #else\n merge = merge * depthFactor;\n #endif\n\n #endif\n\n float reflectorRoughnessFactor = roughness;\n #ifdef USE_ROUGHNESSMAP\n vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );\n reflectorRoughnessFactor *= reflectorTexelRoughness.g;\n #endif\n\n #ifdef USE_BLUR\n blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);\n merge = mix(merge, blur, blurFactor);\n #endif\n\n vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);\n newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;\n newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;\n newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;\n\n diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);\n `\n );\n }\n get tDiffuse(): Texture | null {\n return this._tDiffuse.value;\n }\n set tDiffuse(v: Texture | null) {\n this._tDiffuse.value = v;\n }\n get tDepth(): Texture | null {\n return this._tDepth.value;\n }\n set tDepth(v: Texture | null) {\n this._tDepth.value = v;\n }\n get distortionMap(): Texture | null {\n return this._distortionMap.value;\n }\n set distortionMap(v: Texture | null) {\n this._distortionMap.value = v;\n }\n get tDiffuseBlur(): Texture | null {\n return this._tDiffuseBlur.value;\n }\n set tDiffuseBlur(v: Texture | null) {\n this._tDiffuseBlur.value = v;\n }\n get textureMatrix(): Matrix4 | null {\n return this._textureMatrix.value;\n }\n set textureMatrix(v: Matrix4 | null) {\n this._textureMatrix.value = v;\n }\n get hasBlur(): boolean {\n return this._hasBlur.value;\n }\n set hasBlur(v: boolean) {\n this._hasBlur.value = v;\n }\n get mirror(): number {\n return this._mirror.value;\n }\n set mirror(v: number) {\n this._mirror.value = v;\n }\n get mixBlur(): number {\n return this._mixBlur.value;\n }\n set mixBlur(v: number) {\n this._mixBlur.value = v;\n }\n get mixStrength(): number {\n return this._blurStrength.value;\n }\n set mixStrength(v: number) {\n this._blurStrength.value = v;\n }\n get minDepthThreshold(): number {\n return this._minDepthThreshold.value;\n }\n set minDepthThreshold(v: number) {\n this._minDepthThreshold.value = v;\n }\n get maxDepthThreshold(): number {\n return this._maxDepthThreshold.value;\n }\n set maxDepthThreshold(v: number) {\n this._maxDepthThreshold.value = v;\n }\n get depthScale(): number {\n return this._depthScale.value;\n }\n set depthScale(v: number) {\n this._depthScale.value = v;\n }\n get depthToBlurRatioBias(): number {\n return this._depthToBlurRatioBias.value;\n }\n set depthToBlurRatioBias(v: number) {\n this._depthToBlurRatioBias.value = v;\n }\n get distortion(): number {\n return this._distortion.value;\n }\n set distortion(v: number) {\n this._distortion.value = v;\n }\n get mixContrast(): number {\n return this._mixContrast.value;\n }\n set mixContrast(v: number) {\n this._mixContrast.value = v;\n }\n}\n","import * as THREE from 'three';\n\ninterface Uniform<T> {\n value: T;\n}\n\nexport class MeshWobbleMaterial extends THREE.MeshStandardMaterial {\n _time: Uniform<number>;\n _factor: Uniform<number>;\n\n constructor(parameters: THREE.MeshStandardMaterialParameters = {}) {\n super(parameters);\n this.setValues(parameters);\n this._time = { value: 0 };\n this._factor = { value: 1 };\n }\n\n override onBeforeCompile(shader: THREE.Shader) {\n shader.uniforms['time'] = this._time;\n shader.uniforms['factor'] = this._factor;\n\n shader.vertexShader = `\n uniform float time;\n uniform float factor;\n ${shader.vertexShader}\n `;\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n `float theta = sin( time + position.y ) / 2.0 * factor;\n float c = cos( theta );\n float s = sin( theta );\n mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );\n vec3 transformed = vec3( position ) * m;\n vNormal = vNormal * m;`\n );\n }\n\n get time() {\n return this._time.value;\n }\n\n set time(v) {\n this._time.value = v;\n }\n\n get factor() {\n return this._factor.value;\n }\n\n set factor(v) {\n this._factor.value = v;\n }\n}\n","import * as THREE from 'three';\n\nexport function shaderMaterial(\n uniforms: {\n [name: string]:\n | THREE.CubeTexture\n | THREE.Texture\n | Int32Array\n | Float32Array\n | THREE.Matrix4\n | THREE.Matrix3\n | THREE.Quaternion\n | THREE.Vector4\n | THREE.Vector3\n | THREE.Vector2\n | THREE.Color\n | number\n | boolean\n | Array<any>\n | null;\n },\n vertexShader: string,\n fragmentShader: string,\n onInit?: (material?: THREE.ShaderMaterial) => void\n) {\n const material = class extends THREE.ShaderMaterial {\n public key = '';\n constructor(parameters = {}) {\n const entries = Object.entries(uniforms);\n // Create unforms and shaders\n super({\n uniforms: entries.reduce((acc, [name, value]) => {\n const uniform = THREE.UniformsUtils.clone({ [name]: { value } });\n return {\n ...acc,\n ...uniform,\n };\n }, {}),\n vertexShader,\n fragmentShader,\n });\n // Create getter/setters\n entries.forEach(([name]) =>\n Object.defineProperty(this, name, {\n get: () => this.uniforms[name].value,\n set: (v) => (this.uniforms[name].value = v),\n })\n );\n\n // Assign parameters, this might include uniforms\n Object.assign(this, parameters);\n // Call onInit\n if (onInit) onInit(this);\n }\n } as unknown as typeof THREE.ShaderMaterial & { key: string };\n material.key = THREE.MathUtils.generateUUID();\n return material;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|