angular-three-soba 1.7.0 → 1.8.1
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 +37 -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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BufferAttribute, BufferGeometry, Camera, LinearFilter, Mesh, Scene, Vector2, WebGLRenderTarget, } from 'three';
|
|
2
|
+
import { ConvolutionMaterial } from '../convolution-material/convolution-material';
|
|
3
|
+
export class BlurPass {
|
|
4
|
+
constructor({ gl, resolution, width = 500, height = 500, minDepthThreshold = 0, maxDepthThreshold = 1, depthScale = 0, depthToBlurRatioBias = 0.25, }) {
|
|
5
|
+
this.renderToScreen = false;
|
|
6
|
+
this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {
|
|
7
|
+
minFilter: LinearFilter,
|
|
8
|
+
magFilter: LinearFilter,
|
|
9
|
+
stencilBuffer: false,
|
|
10
|
+
depthBuffer: false,
|
|
11
|
+
encoding: gl.outputEncoding,
|
|
12
|
+
});
|
|
13
|
+
this.renderTargetB = this.renderTargetA.clone();
|
|
14
|
+
this.convolutionMaterial = new ConvolutionMaterial();
|
|
15
|
+
this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);
|
|
16
|
+
this.convolutionMaterial.setResolution(new Vector2(width, height));
|
|
17
|
+
this.scene = new Scene();
|
|
18
|
+
this.camera = new Camera();
|
|
19
|
+
this.convolutionMaterial.uniforms['minDepthThreshold'].value = minDepthThreshold;
|
|
20
|
+
this.convolutionMaterial.uniforms['maxDepthThreshold'].value = maxDepthThreshold;
|
|
21
|
+
this.convolutionMaterial.uniforms['depthScale'].value = depthScale;
|
|
22
|
+
this.convolutionMaterial.uniforms['depthToBlurRatioBias'].value = depthToBlurRatioBias;
|
|
23
|
+
this.convolutionMaterial.defines['USE_DEPTH'] = depthScale > 0;
|
|
24
|
+
const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);
|
|
25
|
+
const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);
|
|
26
|
+
const geometry = new BufferGeometry();
|
|
27
|
+
geometry.setAttribute('position', new BufferAttribute(vertices, 3));
|
|
28
|
+
geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
|
|
29
|
+
this.screen = new Mesh(geometry, this.convolutionMaterial);
|
|
30
|
+
this.screen.frustumCulled = false;
|
|
31
|
+
this.scene.add(this.screen);
|
|
32
|
+
}
|
|
33
|
+
render(renderer, inputBuffer, outputBuffer) {
|
|
34
|
+
const scene = this.scene;
|
|
35
|
+
const camera = this.camera;
|
|
36
|
+
const renderTargetA = this.renderTargetA;
|
|
37
|
+
const renderTargetB = this.renderTargetB;
|
|
38
|
+
const material = this.convolutionMaterial;
|
|
39
|
+
const uniforms = material.uniforms;
|
|
40
|
+
uniforms['depthBuffer'].value = inputBuffer.depthTexture;
|
|
41
|
+
const kernel = material.kernel;
|
|
42
|
+
let lastRT = inputBuffer;
|
|
43
|
+
let destRT;
|
|
44
|
+
let i, l;
|
|
45
|
+
// Apply the multi-pass blur.
|
|
46
|
+
for (i = 0, l = kernel.length - 1; i < l; ++i) {
|
|
47
|
+
// Alternate between targets.
|
|
48
|
+
destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;
|
|
49
|
+
uniforms['kernel'].value = kernel[i];
|
|
50
|
+
uniforms['inputBuffer'].value = lastRT.texture;
|
|
51
|
+
renderer.setRenderTarget(destRT);
|
|
52
|
+
renderer.render(scene, camera);
|
|
53
|
+
lastRT = destRT;
|
|
54
|
+
}
|
|
55
|
+
uniforms['kernel'].value = kernel[i];
|
|
56
|
+
uniforms['inputBuffer'].value = lastRT.texture;
|
|
57
|
+
renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);
|
|
58
|
+
renderer.render(scene, camera);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ci1wYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL2JsdXItcGFzcy9ibHVyLXBhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZixjQUFjLEVBQ2QsTUFBTSxFQUNOLFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sRUFFUCxpQkFBaUIsR0FDcEIsTUFBTSxPQUFPLENBQUM7QUFFZixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQWFuRixNQUFNLE9BQU8sUUFBUTtJQVNqQixZQUFZLEVBQ1IsRUFBRSxFQUNGLFVBQVUsRUFDVixLQUFLLEdBQUcsR0FBRyxFQUNYLE1BQU0sR0FBRyxHQUFHLEVBQ1osaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixpQkFBaUIsR0FBRyxDQUFDLEVBQ3JCLFVBQVUsR0FBRyxDQUFDLEVBQ2Qsb0JBQW9CLEdBQUcsSUFBSSxHQUNmO1FBWGhCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBWW5CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQy9ELFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFFBQVEsRUFBRSxFQUFFLENBQUMsY0FBYztTQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVB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QUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMzQyw2QkFBNkI7WUFDN0IsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDdkQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0IsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUNuQjtRQUNELFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCdWZmZXJBdHRyaWJ1dGUsXG4gICAgQnVmZmVyR2VvbWV0cnksXG4gICAgQ2FtZXJhLFxuICAgIExpbmVhckZpbHRlcixcbiAgICBNZXNoLFxuICAgIFNjZW5lLFxuICAgIFZlY3RvcjIsXG4gICAgV2ViR0xSZW5kZXJlcixcbiAgICBXZWJHTFJlbmRlclRhcmdldCxcbn0gZnJvbSAndGhyZWUnO1xuXG5pbXBvcnQgeyBDb252b2x1dGlvbk1hdGVyaWFsIH0gZnJvbSAnLi4vY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsdXJQYXNzUHJvcHMge1xuICAgIGdsOiBXZWJHTFJlbmRlcmVyO1xuICAgIHJlc29sdXRpb246IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBoZWlnaHQ/OiBudW1iZXI7XG4gICAgbWluRGVwdGhUaHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgbWF4RGVwdGhUaHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgZGVwdGhTY2FsZT86IG51bWJlcjtcbiAgICBkZXB0aFRvQmx1clJhdGlvQmlhcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEJsdXJQYXNzIHtcbiAgICByZWFkb25seSByZW5kZXJUYXJnZXRBOiBXZWJHTFJlbmRlclRhcmdldDtcbiAgICByZWFkb25seSByZW5kZXJUYXJnZXRCOiBXZWJHTFJlbmRlclRhcmdldDtcbiAgICByZWFkb25seSBjb252b2x1dGlvbk1hdGVyaWFsOiBDb252b2x1dGlvbk1hdGVyaWFsO1xuICAgIHJlYWRvbmx5IHNjZW5lOiBTY2VuZTtcbiAgICByZWFkb25seSBjYW1lcmE6IENhbWVyYTtcbiAgICByZWFkb25seSBzY3JlZW46IE1lc2g7XG4gICAgcmVuZGVyVG9TY3JlZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgZ2wsXG4gICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgIHdpZHRoID0gNTAwLFxuICAgICAgICBoZWlnaHQgPSA1MDAsXG4gICAgICAgIG1pbkRlcHRoVGhyZXNob2xkID0gMCxcbiAgICAgICAgbWF4RGVwdGhUaHJlc2hvbGQgPSAxLFxuICAgICAgICBkZXB0aFNjYWxlID0gMCxcbiAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXMgPSAwLjI1LFxuICAgIH06IEJsdXJQYXNzUHJvcHMpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJUYXJnZXRBID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHtcbiAgICAgICAgICAgIG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxuICAgICAgICAgICAgbWFnRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG4gICAgICAgICAgICBzdGVuY2lsQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgICAgIGVuY29kaW5nOiBnbC5vdXRwdXRFbmNvZGluZyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVuZGVyVGFyZ2V0QiA9IHRoaXMucmVuZGVyVGFyZ2V0QS5jbG9uZSgpO1xuICAgICAgICB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwgPSBuZXcgQ29udm9sdXRpb25NYXRlcmlhbCgpO1xuICAgICAgICB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwuc2V0VGV4ZWxTaXplKDEuMCAvIHdpZHRoLCAxLjAgLyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwuc2V0UmVzb2x1dGlvbihuZXcgVmVjdG9yMih3aWR0aCwgaGVpZ2h0KSk7XG4gICAgICAgIHRoaXMuc2NlbmUgPSBuZXcgU2NlbmUoKTtcbiAgICAgICAgdGhpcy5jYW1lcmEgPSBuZXcgQ2FtZXJhKCk7XG4gICAgICAgIHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snbWluRGVwdGhUaHJlc2hvbGQnXS52YWx1ZSA9IG1pbkRlcHRoVGhyZXNob2xkO1xuICAgICAgICB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ21heERlcHRoVGhyZXNob2xkJ10udmFsdWUgPSBtYXhEZXB0aFRocmVzaG9sZDtcbiAgICAgICAgdGhpcy5jb252b2x1dGlvbk1hdGVyaWFsLnVuaWZvcm1zWydkZXB0aFNjYWxlJ10udmFsdWUgPSBkZXB0aFNjYWxlO1xuICAgICAgICB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJ10udmFsdWUgPSBkZXB0aFRvQmx1clJhdGlvQmlhcztcbiAgICAgICAgdGhpcy5jb252b2x1dGlvbk1hdGVyaWFsLmRlZmluZXNbJ1VTRV9ERVBUSCddID0gZGVwdGhTY2FsZSA+IDA7XG4gICAgICAgIGNvbnN0IHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbLTEsIC0xLCAwLCAzLCAtMSwgMCwgLTEsIDMsIDBdKTtcbiAgICAgICAgY29uc3QgdXZzID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMiwgMCwgMCwgMl0pO1xuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpO1xuICAgICAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSh2ZXJ0aWNlcywgMykpO1xuICAgICAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKTtcbiAgICAgICAgdGhpcy5zY3JlZW4gPSBuZXcgTWVzaChnZW9tZXRyeSwgdGhpcy5jb252b2x1dGlvbk1hdGVyaWFsKTtcbiAgICAgICAgdGhpcy5zY3JlZW4uZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjZW5lLmFkZCh0aGlzLnNjcmVlbik7XG4gICAgfVxuXG4gICAgcmVuZGVyKHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBpbnB1dEJ1ZmZlcjogYW55LCBvdXRwdXRCdWZmZXI6IGFueSkge1xuICAgICAgICBjb25zdCBzY2VuZSA9IHRoaXMuc2NlbmU7XG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhO1xuICAgICAgICBjb25zdCByZW5kZXJUYXJnZXRBID0gdGhpcy5yZW5kZXJUYXJnZXRBO1xuICAgICAgICBjb25zdCByZW5kZXJUYXJnZXRCID0gdGhpcy5yZW5kZXJUYXJnZXRCO1xuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMuY29udm9sdXRpb25NYXRlcmlhbDtcbiAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBtYXRlcmlhbC51bmlmb3JtcztcbiAgICAgICAgdW5pZm9ybXNbJ2RlcHRoQnVmZmVyJ10udmFsdWUgPSBpbnB1dEJ1ZmZlci5kZXB0aFRleHR1cmU7XG4gICAgICAgIGNvbnN0IGtlcm5lbCA9IG1hdGVyaWFsLmtlcm5lbDtcbiAgICAgICAgbGV0IGxhc3RSVCA9IGlucHV0QnVmZmVyO1xuICAgICAgICBsZXQgZGVzdFJUO1xuICAgICAgICBsZXQgaSwgbDtcbiAgICAgICAgLy8gQXBwbHkgdGhlIG11bHRpLXBhc3MgYmx1ci5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGtlcm5lbC5sZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyBBbHRlcm5hdGUgYmV0d2VlbiB0YXJnZXRzLlxuICAgICAgICAgICAgZGVzdFJUID0gKGkgJiAxKSA9PT0gMCA/IHJlbmRlclRhcmdldEEgOiByZW5kZXJUYXJnZXRCO1xuICAgICAgICAgICAgdW5pZm9ybXNbJ2tlcm5lbCddLnZhbHVlID0ga2VybmVsW2ldO1xuICAgICAgICAgICAgdW5pZm9ybXNbJ2lucHV0QnVmZmVyJ10udmFsdWUgPSBsYXN0UlQudGV4dHVyZTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChkZXN0UlQpO1xuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuICAgICAgICAgICAgbGFzdFJUID0gZGVzdFJUO1xuICAgICAgICB9XG4gICAgICAgIHVuaWZvcm1zWydrZXJuZWwnXS52YWx1ZSA9IGtlcm5lbFtpXTtcbiAgICAgICAgdW5pZm9ybXNbJ2lucHV0QnVmZmVyJ10udmFsdWUgPSBsYXN0UlQudGV4dHVyZTtcbiAgICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyVG9TY3JlZW4gPyBudWxsIDogb3V0cHV0QnVmZmVyKTtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { NoBlending, ShaderMaterial, Uniform, Vector2 } from 'three';
|
|
2
|
+
export class ConvolutionMaterial extends ShaderMaterial {
|
|
3
|
+
constructor(texelSize = new Vector2()) {
|
|
4
|
+
super({
|
|
5
|
+
uniforms: {
|
|
6
|
+
inputBuffer: new Uniform(null),
|
|
7
|
+
depthBuffer: new Uniform(null),
|
|
8
|
+
resolution: new Uniform(new Vector2()),
|
|
9
|
+
texelSize: new Uniform(new Vector2()),
|
|
10
|
+
halfTexelSize: new Uniform(new Vector2()),
|
|
11
|
+
kernel: new Uniform(0.0),
|
|
12
|
+
scale: new Uniform(1.0),
|
|
13
|
+
cameraNear: new Uniform(0.0),
|
|
14
|
+
cameraFar: new Uniform(1.0),
|
|
15
|
+
minDepthThreshold: new Uniform(0.0),
|
|
16
|
+
maxDepthThreshold: new Uniform(1.0),
|
|
17
|
+
depthScale: new Uniform(0.0),
|
|
18
|
+
depthToBlurRatioBias: new Uniform(0.25),
|
|
19
|
+
},
|
|
20
|
+
fragmentShader: `#include <common>
|
|
21
|
+
#include <dithering_pars_fragment>
|
|
22
|
+
uniform sampler2D inputBuffer;
|
|
23
|
+
uniform sampler2D depthBuffer;
|
|
24
|
+
uniform float cameraNear;
|
|
25
|
+
uniform float cameraFar;
|
|
26
|
+
uniform float minDepthThreshold;
|
|
27
|
+
uniform float maxDepthThreshold;
|
|
28
|
+
uniform float depthScale;
|
|
29
|
+
uniform float depthToBlurRatioBias;
|
|
30
|
+
varying vec2 vUv;
|
|
31
|
+
varying vec2 vUv0;
|
|
32
|
+
varying vec2 vUv1;
|
|
33
|
+
varying vec2 vUv2;
|
|
34
|
+
varying vec2 vUv3;
|
|
35
|
+
|
|
36
|
+
void main() {
|
|
37
|
+
float depthFactor = 0.0;
|
|
38
|
+
|
|
39
|
+
#ifdef USE_DEPTH
|
|
40
|
+
vec4 depth = texture2D(depthBuffer, vUv);
|
|
41
|
+
depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
|
|
42
|
+
depthFactor *= depthScale;
|
|
43
|
+
depthFactor = max(0.0, min(1.0, depthFactor + 0.25));
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));
|
|
47
|
+
sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));
|
|
48
|
+
sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));
|
|
49
|
+
sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));
|
|
50
|
+
gl_FragColor = sum * 0.25 ;
|
|
51
|
+
|
|
52
|
+
#include <dithering_fragment>
|
|
53
|
+
#include <tonemapping_fragment>
|
|
54
|
+
#include <encodings_fragment>
|
|
55
|
+
}`,
|
|
56
|
+
vertexShader: `uniform vec2 texelSize;
|
|
57
|
+
uniform vec2 halfTexelSize;
|
|
58
|
+
uniform float kernel;
|
|
59
|
+
uniform float scale;
|
|
60
|
+
varying vec2 vUv;
|
|
61
|
+
varying vec2 vUv0;
|
|
62
|
+
varying vec2 vUv1;
|
|
63
|
+
varying vec2 vUv2;
|
|
64
|
+
varying vec2 vUv3;
|
|
65
|
+
|
|
66
|
+
void main() {
|
|
67
|
+
vec2 uv = position.xy * 0.5 + 0.5;
|
|
68
|
+
vUv = uv;
|
|
69
|
+
|
|
70
|
+
vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;
|
|
71
|
+
vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);
|
|
72
|
+
vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);
|
|
73
|
+
vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);
|
|
74
|
+
vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);
|
|
75
|
+
|
|
76
|
+
gl_Position = vec4(position.xy, 1.0, 1.0);
|
|
77
|
+
}`,
|
|
78
|
+
blending: NoBlending,
|
|
79
|
+
depthWrite: false,
|
|
80
|
+
depthTest: false,
|
|
81
|
+
});
|
|
82
|
+
this.toneMapped = false;
|
|
83
|
+
this.setTexelSize(texelSize.x, texelSize.y);
|
|
84
|
+
this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);
|
|
85
|
+
}
|
|
86
|
+
setTexelSize(x, y) {
|
|
87
|
+
this.uniforms['texelSize'].value.set(x, y);
|
|
88
|
+
this.uniforms['halfTexelSize'].value.set(x, y).multiplyScalar(0.5);
|
|
89
|
+
}
|
|
90
|
+
setResolution(resolution) {
|
|
91
|
+
this.uniforms['resolution'].value.copy(resolution);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udm9sdXRpb24tbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVyRSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsY0FBYztJQUVuRCxZQUFZLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRTtRQUNqQyxLQUFLLENBQUM7WUFDRixRQUFRLEVBQUU7Z0JBQ04sV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDOUIsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDOUIsVUFBVSxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNyQyxhQUFhLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDdkIsVUFBVSxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDM0IsaUJBQWlCLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNuQyxpQkFBaUIsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ25DLFVBQVUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzVCLG9CQUFvQixFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQzthQUMxQztZQUNELGNBQWMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUFtQ2xCO1lBQ0UsWUFBWSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUFxQmhCO1lBQ0UsUUFBUSxFQUFFLFVBQVU7WUFDcEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxhQUFhLENBQUMsVUFBbUI7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vQmxlbmRpbmcsIFNoYWRlck1hdGVyaWFsLCBVbmlmb3JtLCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgY2xhc3MgQ29udm9sdXRpb25NYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcbiAgICByZWFkb25seSBrZXJuZWw6IEZsb2F0MzJBcnJheTtcbiAgICBjb25zdHJ1Y3Rvcih0ZXhlbFNpemUgPSBuZXcgVmVjdG9yMigpKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHVuaWZvcm1zOiB7XG4gICAgICAgICAgICAgICAgaW5wdXRCdWZmZXI6IG5ldyBVbmlmb3JtKG51bGwpLFxuICAgICAgICAgICAgICAgIGRlcHRoQnVmZmVyOiBuZXcgVW5pZm9ybShudWxsKSxcbiAgICAgICAgICAgICAgICByZXNvbHV0aW9uOiBuZXcgVW5pZm9ybShuZXcgVmVjdG9yMigpKSxcbiAgICAgICAgICAgICAgICB0ZXhlbFNpemU6IG5ldyBVbmlmb3JtKG5ldyBWZWN0b3IyKCkpLFxuICAgICAgICAgICAgICAgIGhhbGZUZXhlbFNpemU6IG5ldyBVbmlmb3JtKG5ldyBWZWN0b3IyKCkpLFxuICAgICAgICAgICAgICAgIGtlcm5lbDogbmV3IFVuaWZvcm0oMC4wKSxcbiAgICAgICAgICAgICAgICBzY2FsZTogbmV3IFVuaWZvcm0oMS4wKSxcbiAgICAgICAgICAgICAgICBjYW1lcmFOZWFyOiBuZXcgVW5pZm9ybSgwLjApLFxuICAgICAgICAgICAgICAgIGNhbWVyYUZhcjogbmV3IFVuaWZvcm0oMS4wKSxcbiAgICAgICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZDogbmV3IFVuaWZvcm0oMC4wKSxcbiAgICAgICAgICAgICAgICBtYXhEZXB0aFRocmVzaG9sZDogbmV3IFVuaWZvcm0oMS4wKSxcbiAgICAgICAgICAgICAgICBkZXB0aFNjYWxlOiBuZXcgVW5pZm9ybSgwLjApLFxuICAgICAgICAgICAgICAgIGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBuZXcgVW5pZm9ybSgwLjI1KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogYCNpbmNsdWRlIDxjb21tb24+XG4gICAgICAgICNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRCdWZmZXI7XG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoQnVmZmVyO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGNhbWVyYU5lYXI7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgY2FtZXJhRmFyO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1pbkRlcHRoVGhyZXNob2xkO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1heERlcHRoVGhyZXNob2xkO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGRlcHRoU2NhbGU7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGVwdGhUb0JsdXJSYXRpb0JpYXM7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYwO1xuICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2MTtcbiAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjI7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYzO1xuXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICBmbG9hdCBkZXB0aEZhY3RvciA9IDAuMDtcblxuICAgICAgICAgICNpZmRlZiBVU0VfREVQVEhcbiAgICAgICAgICAgIHZlYzQgZGVwdGggPSB0ZXh0dXJlMkQoZGVwdGhCdWZmZXIsIHZVdik7XG4gICAgICAgICAgICBkZXB0aEZhY3RvciA9IHNtb290aHN0ZXAobWluRGVwdGhUaHJlc2hvbGQsIG1heERlcHRoVGhyZXNob2xkLCAxLjAtKGRlcHRoLnIgKiBkZXB0aC5hKSk7XG4gICAgICAgICAgICBkZXB0aEZhY3RvciAqPSBkZXB0aFNjYWxlO1xuICAgICAgICAgICAgZGVwdGhGYWN0b3IgPSBtYXgoMC4wLCBtaW4oMS4wLCBkZXB0aEZhY3RvciArIDAuMjUpKTtcbiAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgIHZlYzQgc3VtID0gdGV4dHVyZTJEKGlucHV0QnVmZmVyLCBtaXgodlV2MCwgdlV2LCBkZXB0aEZhY3RvcikpO1xuICAgICAgICAgIHN1bSArPSB0ZXh0dXJlMkQoaW5wdXRCdWZmZXIsIG1peCh2VXYxLCB2VXYsIGRlcHRoRmFjdG9yKSk7XG4gICAgICAgICAgc3VtICs9IHRleHR1cmUyRChpbnB1dEJ1ZmZlciwgbWl4KHZVdjIsIHZVdiwgZGVwdGhGYWN0b3IpKTtcbiAgICAgICAgICBzdW0gKz0gdGV4dHVyZTJEKGlucHV0QnVmZmVyLCBtaXgodlV2MywgdlV2LCBkZXB0aEZhY3RvcikpO1xuICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHN1bSAqIDAuMjUgO1xuXG4gICAgICAgICAgI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbiAgICAgICAgICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG4gICAgICAgICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbiAgICAgICAgfWAsXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IGB1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuICAgICAgICB1bmlmb3JtIHZlYzIgaGFsZlRleGVsU2l6ZTtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBrZXJuZWw7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgc2NhbGU7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYwO1xuICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2MTtcbiAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjI7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYzO1xuXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICB2ZWMyIHV2ID0gcG9zaXRpb24ueHkgKiAwLjUgKyAwLjU7XG4gICAgICAgICAgdlV2ID0gdXY7XG5cbiAgICAgICAgICB2ZWMyIGRVdiA9ICh0ZXhlbFNpemUgKiB2ZWMyKGtlcm5lbCkgKyBoYWxmVGV4ZWxTaXplKSAqIHNjYWxlO1xuICAgICAgICAgIHZVdjAgPSB2ZWMyKHV2LnggLSBkVXYueCwgdXYueSArIGRVdi55KTtcbiAgICAgICAgICB2VXYxID0gdmVjMih1di54ICsgZFV2LngsIHV2LnkgKyBkVXYueSk7XG4gICAgICAgICAgdlV2MiA9IHZlYzIodXYueCArIGRVdi54LCB1di55IC0gZFV2LnkpO1xuICAgICAgICAgIHZVdjMgPSB2ZWMyKHV2LnggLSBkVXYueCwgdXYueSAtIGRVdi55KTtcblxuICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eSwgMS4wLCAxLjApO1xuICAgICAgICB9YCxcbiAgICAgICAgICAgIGJsZW5kaW5nOiBOb0JsZW5kaW5nLFxuICAgICAgICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXG4gICAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRvbmVNYXBwZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXRUZXhlbFNpemUodGV4ZWxTaXplLngsIHRleGVsU2l6ZS55KTtcbiAgICAgICAgdGhpcy5rZXJuZWwgPSBuZXcgRmxvYXQzMkFycmF5KFswLjAsIDEuMCwgMi4wLCAyLjAsIDMuMF0pO1xuICAgIH1cblxuICAgIHNldFRleGVsU2l6ZSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnVuaWZvcm1zWyd0ZXhlbFNpemUnXS52YWx1ZS5zZXQoeCwgeSk7XG4gICAgICAgIHRoaXMudW5pZm9ybXNbJ2hhbGZUZXhlbFNpemUnXS52YWx1ZS5zZXQoeCwgeSkubXVsdGlwbHlTY2FsYXIoMC41KTtcbiAgICB9XG4gICAgc2V0UmVzb2x1dGlvbihyZXNvbHV0aW9uOiBWZWN0b3IyKSB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNbJ3Jlc29sdXRpb24nXS52YWx1ZS5jb3B5KHJlc29sdXRpb24pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
export const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
|
|
4
|
+
export function provideDistortMaterialShader(distortShader) {
|
|
5
|
+
return {
|
|
6
|
+
provide: NGTS_DISTORT_MATERIAL_SHADER,
|
|
7
|
+
useFactory: () => {
|
|
8
|
+
return class MeshDistortMaterial extends THREE.MeshPhysicalMaterial {
|
|
9
|
+
constructor(parameters = {}) {
|
|
10
|
+
super(parameters);
|
|
11
|
+
this.setValues(parameters);
|
|
12
|
+
this._time = { value: 0 };
|
|
13
|
+
this._distort = { value: 0.4 };
|
|
14
|
+
this._radius = { value: 1 };
|
|
15
|
+
}
|
|
16
|
+
onBeforeCompile(shader) {
|
|
17
|
+
shader.uniforms['time'] = this._time;
|
|
18
|
+
shader.uniforms['radius'] = this._radius;
|
|
19
|
+
shader.uniforms['distort'] = this._distort;
|
|
20
|
+
shader.vertexShader = `
|
|
21
|
+
uniform float time;
|
|
22
|
+
uniform float radius;
|
|
23
|
+
uniform float distort;
|
|
24
|
+
${distortShader}
|
|
25
|
+
${shader.vertexShader}
|
|
26
|
+
`;
|
|
27
|
+
shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
|
|
28
|
+
float updateTime = time / 50.0;
|
|
29
|
+
float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
|
|
30
|
+
vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
|
|
31
|
+
`);
|
|
32
|
+
}
|
|
33
|
+
get time() {
|
|
34
|
+
return this._time.value;
|
|
35
|
+
}
|
|
36
|
+
set time(v) {
|
|
37
|
+
this._time.value = v;
|
|
38
|
+
}
|
|
39
|
+
get distort() {
|
|
40
|
+
return this._distort.value;
|
|
41
|
+
}
|
|
42
|
+
set distort(v) {
|
|
43
|
+
this._distort.value = v;
|
|
44
|
+
}
|
|
45
|
+
get radius() {
|
|
46
|
+
return this._radius.value;
|
|
47
|
+
}
|
|
48
|
+
set radius(v) {
|
|
49
|
+
this._radius.value = v;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVEvQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLENBQUMsQ0FBQztBQUU3RyxNQUFNLFVBQVUsNEJBQTRCLENBQUMsYUFBcUI7SUFDOUQsT0FBTztRQUNILE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sTUFBTSxtQkFBb0IsU0FBUSxLQUFLLENBQUMsb0JBQW9CO2dCQUsvRCxZQUFZLGFBQW1ELEVBQUU7b0JBQzdELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztnQkFFUSxlQUFlLENBQUMsTUFBb0I7b0JBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBRTNDLE1BQU0sQ0FBQyxZQUFZLEdBQUc7Ozs7ZUFJM0IsYUFBYTtlQUNiLE1BQU0sQ0FBQyxZQUFZO1lBQ3RCLENBQUM7b0JBQ08sTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDN0MseUJBQXlCLEVBQ3pCOzs7O2dCQUlSLENBQ0ssQ0FBQztnQkFDTixDQUFDO2dCQUVELElBQUksSUFBSTtvQkFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM1QixDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLENBQUM7b0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUVELElBQUksT0FBTztvQkFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUVELElBQUksT0FBTyxDQUFDLENBQUM7b0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUVELElBQUksTUFBTTtvQkFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUM5QixDQUFDO2dCQUVELElBQUksTUFBTSxDQUFDLENBQUM7b0JBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2FBQ0osQ0FBQztRQUNOLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmludGVyZmFjZSBVbmlmb3JtPFQ+IHtcbiAgICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IHR5cGUgTWVzaERpc3RvcnRNYXRlcmlhbCA9IFR5cGU8eyB0aW1lOiBudW1iZXI7IGRpc3RvcnQ6IG51bWJlcjsgcmFkaXVzOiBudW1iZXIgfSAmIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsPjtcblxuZXhwb3J0IGNvbnN0IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVzaERpc3RvcnRNYXRlcmlhbD4oJ0Rpc3RvcnRNYXRlcmlhbFNoYWRlcicpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZURpc3RvcnRNYXRlcmlhbFNoYWRlcihkaXN0b3J0U2hhZGVyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBOR1RTX0RJU1RPUlRfTUFURVJJQUxfU0hBREVSLFxuICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2xhc3MgTWVzaERpc3RvcnRNYXRlcmlhbCBleHRlbmRzIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsIHtcbiAgICAgICAgICAgICAgICBfdGltZTogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICAgICAgICAgIF9kaXN0b3J0OiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgICAgICAgICAgX3JhZGl1czogVW5pZm9ybTxudW1iZXI+O1xuXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lID0geyB2YWx1ZTogMCB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0ID0geyB2YWx1ZTogMC40IH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHsgdmFsdWU6IDEgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ3JhZGl1cyddID0gdGhpcy5fcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2Rpc3RvcnQnXSA9IHRoaXMuX2Rpc3RvcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnZlcnRleFNoYWRlciA9IGBcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICR7ZGlzdG9ydFNoYWRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdCAgICAke3NoYWRlci52ZXJ0ZXhTaGFkZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHQgIGA7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgdXBkYXRlVGltZSA9IHRpbWUgLyA1MC4wO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgbm9pc2UgPSBzbm9pc2UodmVjMyhwb3NpdGlvbiAvIDIuMCArIHVwZGF0ZVRpbWUgKiA1LjApKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIHZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKHBvc2l0aW9uICogKG5vaXNlICogcG93KGRpc3RvcnQsIDIuMCkgKyByYWRpdXMpKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgdGltZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IHRpbWUodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lLnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgZGlzdG9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IGRpc3RvcnQodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0LnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgcmFkaXVzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVzLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldCByYWRpdXModikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYWRpdXMudmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { MeshStandardMaterial } from 'three';
|
|
2
|
+
export class MeshReflectorMaterial extends MeshStandardMaterial {
|
|
3
|
+
constructor(parameters = {}) {
|
|
4
|
+
super(parameters);
|
|
5
|
+
this._tDepth = { value: null };
|
|
6
|
+
this._distortionMap = { value: null };
|
|
7
|
+
this._tDiffuse = { value: null };
|
|
8
|
+
this._tDiffuseBlur = { value: null };
|
|
9
|
+
this._textureMatrix = { value: null };
|
|
10
|
+
this._hasBlur = { value: false };
|
|
11
|
+
this._mirror = { value: 0.0 };
|
|
12
|
+
this._mixBlur = { value: 0.0 };
|
|
13
|
+
this._blurStrength = { value: 0.5 };
|
|
14
|
+
this._minDepthThreshold = { value: 0.9 };
|
|
15
|
+
this._maxDepthThreshold = { value: 1 };
|
|
16
|
+
this._depthScale = { value: 0 };
|
|
17
|
+
this._depthToBlurRatioBias = { value: 0.25 };
|
|
18
|
+
this._distortion = { value: 1 };
|
|
19
|
+
this._mixContrast = { value: 1.0 };
|
|
20
|
+
this.setValues(parameters);
|
|
21
|
+
}
|
|
22
|
+
onBeforeCompile(shader) {
|
|
23
|
+
if (!shader.defines?.USE_UV) {
|
|
24
|
+
shader.defines.USE_UV = '';
|
|
25
|
+
}
|
|
26
|
+
shader.uniforms.hasBlur = this._hasBlur;
|
|
27
|
+
shader.uniforms.tDiffuse = this._tDiffuse;
|
|
28
|
+
shader.uniforms.tDepth = this._tDepth;
|
|
29
|
+
shader.uniforms.distortionMap = this._distortionMap;
|
|
30
|
+
shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;
|
|
31
|
+
shader.uniforms.textureMatrix = this._textureMatrix;
|
|
32
|
+
shader.uniforms.mirror = this._mirror;
|
|
33
|
+
shader.uniforms.mixBlur = this._mixBlur;
|
|
34
|
+
shader.uniforms.mixStrength = this._blurStrength;
|
|
35
|
+
shader.uniforms.minDepthThreshold = this._minDepthThreshold;
|
|
36
|
+
shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;
|
|
37
|
+
shader.uniforms.depthScale = this._depthScale;
|
|
38
|
+
shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;
|
|
39
|
+
shader.uniforms.distortion = this._distortion;
|
|
40
|
+
shader.uniforms.mixContrast = this._mixContrast;
|
|
41
|
+
shader.vertexShader = `
|
|
42
|
+
uniform mat4 textureMatrix;
|
|
43
|
+
varying vec4 my_vUv;
|
|
44
|
+
${shader.vertexShader}`;
|
|
45
|
+
shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>
|
|
46
|
+
my_vUv = textureMatrix * vec4( position, 1.0 );
|
|
47
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);
|
|
48
|
+
shader.fragmentShader = `
|
|
49
|
+
uniform sampler2D tDiffuse;
|
|
50
|
+
uniform sampler2D tDiffuseBlur;
|
|
51
|
+
uniform sampler2D tDepth;
|
|
52
|
+
uniform sampler2D distortionMap;
|
|
53
|
+
uniform float distortion;
|
|
54
|
+
uniform float cameraNear;
|
|
55
|
+
uniform float cameraFar;
|
|
56
|
+
uniform bool hasBlur;
|
|
57
|
+
uniform float mixBlur;
|
|
58
|
+
uniform float mirror;
|
|
59
|
+
uniform float mixStrength;
|
|
60
|
+
uniform float minDepthThreshold;
|
|
61
|
+
uniform float maxDepthThreshold;
|
|
62
|
+
uniform float mixContrast;
|
|
63
|
+
uniform float depthScale;
|
|
64
|
+
uniform float depthToBlurRatioBias;
|
|
65
|
+
varying vec4 my_vUv;
|
|
66
|
+
${shader.fragmentShader}`;
|
|
67
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
|
|
68
|
+
|
|
69
|
+
float distortionFactor = 0.0;
|
|
70
|
+
#ifdef USE_DISTORTION
|
|
71
|
+
distortionFactor = texture2D(distortionMap, vUv).r * distortion;
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
vec4 new_vUv = my_vUv;
|
|
75
|
+
new_vUv.x += distortionFactor;
|
|
76
|
+
new_vUv.y += distortionFactor;
|
|
77
|
+
|
|
78
|
+
vec4 base = texture2DProj(tDiffuse, new_vUv);
|
|
79
|
+
vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);
|
|
80
|
+
|
|
81
|
+
vec4 merge = base;
|
|
82
|
+
|
|
83
|
+
#ifdef USE_NORMALMAP
|
|
84
|
+
vec2 normal_uv = vec2(0.0);
|
|
85
|
+
vec4 normalColor = texture2D(normalMap, vUv * normalScale);
|
|
86
|
+
vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );
|
|
87
|
+
vec3 coord = new_vUv.xyz / new_vUv.w;
|
|
88
|
+
normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;
|
|
89
|
+
vec4 base_normal = texture2D(tDiffuse, normal_uv);
|
|
90
|
+
vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);
|
|
91
|
+
merge = base_normal;
|
|
92
|
+
blur = blur_normal;
|
|
93
|
+
#endif
|
|
94
|
+
|
|
95
|
+
float depthFactor = 0.0001;
|
|
96
|
+
float blurFactor = 0.0;
|
|
97
|
+
|
|
98
|
+
#ifdef USE_DEPTH
|
|
99
|
+
vec4 depth = texture2DProj(tDepth, new_vUv);
|
|
100
|
+
depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
|
|
101
|
+
depthFactor *= depthScale;
|
|
102
|
+
depthFactor = max(0.0001, min(1.0, depthFactor));
|
|
103
|
+
|
|
104
|
+
#ifdef USE_BLUR
|
|
105
|
+
blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);
|
|
106
|
+
merge = merge * min(1.0, depthFactor + 0.5);
|
|
107
|
+
#else
|
|
108
|
+
merge = merge * depthFactor;
|
|
109
|
+
#endif
|
|
110
|
+
|
|
111
|
+
#endif
|
|
112
|
+
|
|
113
|
+
float reflectorRoughnessFactor = roughness;
|
|
114
|
+
#ifdef USE_ROUGHNESSMAP
|
|
115
|
+
vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );
|
|
116
|
+
reflectorRoughnessFactor *= reflectorTexelRoughness.g;
|
|
117
|
+
#endif
|
|
118
|
+
|
|
119
|
+
#ifdef USE_BLUR
|
|
120
|
+
blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);
|
|
121
|
+
merge = mix(merge, blur, blurFactor);
|
|
122
|
+
#endif
|
|
123
|
+
|
|
124
|
+
vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);
|
|
125
|
+
newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;
|
|
126
|
+
newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;
|
|
127
|
+
newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;
|
|
128
|
+
|
|
129
|
+
diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);
|
|
130
|
+
`);
|
|
131
|
+
}
|
|
132
|
+
get tDiffuse() {
|
|
133
|
+
return this._tDiffuse.value;
|
|
134
|
+
}
|
|
135
|
+
set tDiffuse(v) {
|
|
136
|
+
this._tDiffuse.value = v;
|
|
137
|
+
}
|
|
138
|
+
get tDepth() {
|
|
139
|
+
return this._tDepth.value;
|
|
140
|
+
}
|
|
141
|
+
set tDepth(v) {
|
|
142
|
+
this._tDepth.value = v;
|
|
143
|
+
}
|
|
144
|
+
get distortionMap() {
|
|
145
|
+
return this._distortionMap.value;
|
|
146
|
+
}
|
|
147
|
+
set distortionMap(v) {
|
|
148
|
+
this._distortionMap.value = v;
|
|
149
|
+
}
|
|
150
|
+
get tDiffuseBlur() {
|
|
151
|
+
return this._tDiffuseBlur.value;
|
|
152
|
+
}
|
|
153
|
+
set tDiffuseBlur(v) {
|
|
154
|
+
this._tDiffuseBlur.value = v;
|
|
155
|
+
}
|
|
156
|
+
get textureMatrix() {
|
|
157
|
+
return this._textureMatrix.value;
|
|
158
|
+
}
|
|
159
|
+
set textureMatrix(v) {
|
|
160
|
+
this._textureMatrix.value = v;
|
|
161
|
+
}
|
|
162
|
+
get hasBlur() {
|
|
163
|
+
return this._hasBlur.value;
|
|
164
|
+
}
|
|
165
|
+
set hasBlur(v) {
|
|
166
|
+
this._hasBlur.value = v;
|
|
167
|
+
}
|
|
168
|
+
get mirror() {
|
|
169
|
+
return this._mirror.value;
|
|
170
|
+
}
|
|
171
|
+
set mirror(v) {
|
|
172
|
+
this._mirror.value = v;
|
|
173
|
+
}
|
|
174
|
+
get mixBlur() {
|
|
175
|
+
return this._mixBlur.value;
|
|
176
|
+
}
|
|
177
|
+
set mixBlur(v) {
|
|
178
|
+
this._mixBlur.value = v;
|
|
179
|
+
}
|
|
180
|
+
get mixStrength() {
|
|
181
|
+
return this._blurStrength.value;
|
|
182
|
+
}
|
|
183
|
+
set mixStrength(v) {
|
|
184
|
+
this._blurStrength.value = v;
|
|
185
|
+
}
|
|
186
|
+
get minDepthThreshold() {
|
|
187
|
+
return this._minDepthThreshold.value;
|
|
188
|
+
}
|
|
189
|
+
set minDepthThreshold(v) {
|
|
190
|
+
this._minDepthThreshold.value = v;
|
|
191
|
+
}
|
|
192
|
+
get maxDepthThreshold() {
|
|
193
|
+
return this._maxDepthThreshold.value;
|
|
194
|
+
}
|
|
195
|
+
set maxDepthThreshold(v) {
|
|
196
|
+
this._maxDepthThreshold.value = v;
|
|
197
|
+
}
|
|
198
|
+
get depthScale() {
|
|
199
|
+
return this._depthScale.value;
|
|
200
|
+
}
|
|
201
|
+
set depthScale(v) {
|
|
202
|
+
this._depthScale.value = v;
|
|
203
|
+
}
|
|
204
|
+
get depthToBlurRatioBias() {
|
|
205
|
+
return this._depthToBlurRatioBias.value;
|
|
206
|
+
}
|
|
207
|
+
set depthToBlurRatioBias(v) {
|
|
208
|
+
this._depthToBlurRatioBias.value = v;
|
|
209
|
+
}
|
|
210
|
+
get distortion() {
|
|
211
|
+
return this._distortion.value;
|
|
212
|
+
}
|
|
213
|
+
set distortion(v) {
|
|
214
|
+
this._distortion.value = v;
|
|
215
|
+
}
|
|
216
|
+
get mixContrast() {
|
|
217
|
+
return this._mixContrast.value;
|
|
218
|
+
}
|
|
219
|
+
set mixContrast(v) {
|
|
220
|
+
this._mixContrast.value = v;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLG9CQUFvQixFQUFXLE1BQU0sT0FBTyxDQUFDO0FBSS9ELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFpQjNELFlBQVksVUFBVSxHQUFHLEVBQUU7UUFDdkIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBakJkLFlBQU8sR0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekQsbUJBQWMsR0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEUsY0FBUyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxrQkFBYSxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRCxtQkFBYyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoRSxhQUFRLEdBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2hELFlBQU8sR0FBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3QyxrQkFBYSxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNsRCx1QkFBa0IsR0FBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdkQsdUJBQWtCLEdBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JELGdCQUFXLEdBQXNCLEVBQUUsS0FB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VUFBVSxDQUFDLENBQVM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxDQUFTO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXRyaXg0LCBNZXNoU3RhbmRhcmRNYXRlcmlhbCwgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxudHlwZSBVbmluaXRpYWxpemVkVW5pZm9ybTxWYWx1ZT4gPSB7IHZhbHVlOiBWYWx1ZSB8IG51bGwgfTtcblxuZXhwb3J0IGNsYXNzIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCBleHRlbmRzIE1lc2hTdGFuZGFyZE1hdGVyaWFsIHtcbiAgICBwcml2YXRlIF90RGVwdGg6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX2Rpc3RvcnRpb25NYXA6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX3REaWZmdXNlOiBVbmluaXRpYWxpemVkVW5pZm9ybTxUZXh0dXJlPiA9IHsgdmFsdWU6IG51bGwgfTtcbiAgICBwcml2YXRlIF90RGlmZnVzZUJsdXI6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX3RleHR1cmVNYXRyaXg6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPE1hdHJpeDQ+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX2hhc0JsdXI6IHsgdmFsdWU6IGJvb2xlYW4gfSA9IHsgdmFsdWU6IGZhbHNlIH07XG4gICAgcHJpdmF0ZSBfbWlycm9yOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuMCB9O1xuICAgIHByaXZhdGUgX21peEJsdXI6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMC4wIH07XG4gICAgcHJpdmF0ZSBfYmx1clN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuNSB9O1xuICAgIHByaXZhdGUgX21pbkRlcHRoVGhyZXNob2xkOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuOSB9O1xuICAgIHByaXZhdGUgX21heERlcHRoVGhyZXNob2xkOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDEgfTtcbiAgICBwcml2YXRlIF9kZXB0aFNjYWxlOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAgfTtcbiAgICBwcml2YXRlIF9kZXB0aFRvQmx1clJhdGlvQmlhczogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAwLjI1IH07XG4gICAgcHJpdmF0ZSBfZGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAxIH07XG4gICAgcHJpdmF0ZSBfbWl4Q29udHJhc3Q6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMS4wIH07XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG9uQmVmb3JlQ29tcGlsZShzaGFkZXI6IGFueSkge1xuICAgICAgICBpZiAoIXNoYWRlci5kZWZpbmVzPy5VU0VfVVYpIHtcbiAgICAgICAgICAgIHNoYWRlci5kZWZpbmVzLlVTRV9VViA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5oYXNCbHVyID0gdGhpcy5faGFzQmx1cjtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlID0gdGhpcy5fdERpZmZ1c2U7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy50RGVwdGggPSB0aGlzLl90RGVwdGg7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5kaXN0b3J0aW9uTWFwID0gdGhpcy5fZGlzdG9ydGlvbk1hcDtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlQmx1ciA9IHRoaXMuX3REaWZmdXNlQmx1cjtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRleHR1cmVNYXRyaXggPSB0aGlzLl90ZXh0dXJlTWF0cml4O1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMubWlycm9yID0gdGhpcy5fbWlycm9yO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMubWl4Qmx1ciA9IHRoaXMuX21peEJsdXI7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5taXhTdHJlbmd0aCA9IHRoaXMuX2JsdXJTdHJlbmd0aDtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLm1pbkRlcHRoVGhyZXNob2xkID0gdGhpcy5fbWluRGVwdGhUaHJlc2hvbGQ7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5tYXhEZXB0aFRocmVzaG9sZCA9IHRoaXMuX21heERlcHRoVGhyZXNob2xkO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuZGVwdGhTY2FsZSA9IHRoaXMuX2RlcHRoU2NhbGU7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5kZXB0aFRvQmx1clJhdGlvQmlhcyA9IHRoaXMuX2RlcHRoVG9CbHVyUmF0aW9CaWFzO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuZGlzdG9ydGlvbiA9IHRoaXMuX2Rpc3RvcnRpb247XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5taXhDb250cmFzdCA9IHRoaXMuX21peENvbnRyYXN0O1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gYFxuICAgICAgICB1bmlmb3JtIG1hdDQgdGV4dHVyZU1hdHJpeDtcbiAgICAgICAgdmFyeWluZyB2ZWM0IG15X3ZVdjtcbiAgICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1gO1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgJyNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4nLFxuICAgICAgICAgICAgYCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbiAgICAgICAgbXlfdlV2ID0gdGV4dHVyZU1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO2BcbiAgICAgICAgKTtcbiAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID0gYFxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0RGlmZnVzZTtcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdERpZmZ1c2VCbHVyO1xuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0RGVwdGg7XG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGRpc3RvcnRpb25NYXA7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbjtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuXHRcdFx0ICB1bmlmb3JtIGZsb2F0IGNhbWVyYUZhcjtcbiAgICAgICAgdW5pZm9ybSBib29sIGhhc0JsdXI7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWl4Qmx1cjtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtaXJyb3I7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWl4U3RyZW5ndGg7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWluRGVwdGhUaHJlc2hvbGQ7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWF4RGVwdGhUaHJlc2hvbGQ7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWl4Q29udHJhc3Q7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGVwdGhTY2FsZTtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBkZXB0aFRvQmx1clJhdGlvQmlhcztcbiAgICAgICAgdmFyeWluZyB2ZWM0IG15X3ZVdjtcbiAgICAgICAgJHtzaGFkZXIuZnJhZ21lbnRTaGFkZXJ9YDtcbiAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAnI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PicsXG4gICAgICAgICAgICBgI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXG4gICAgICBmbG9hdCBkaXN0b3J0aW9uRmFjdG9yID0gMC4wO1xuICAgICAgI2lmZGVmIFVTRV9ESVNUT1JUSU9OXG4gICAgICAgIGRpc3RvcnRpb25GYWN0b3IgPSB0ZXh0dXJlMkQoZGlzdG9ydGlvbk1hcCwgdlV2KS5yICogZGlzdG9ydGlvbjtcbiAgICAgICNlbmRpZlxuXG4gICAgICB2ZWM0IG5ld192VXYgPSBteV92VXY7XG4gICAgICBuZXdfdlV2LnggKz0gZGlzdG9ydGlvbkZhY3RvcjtcbiAgICAgIG5ld192VXYueSArPSBkaXN0b3J0aW9uRmFjdG9yO1xuXG4gICAgICB2ZWM0IGJhc2UgPSB0ZXh0dXJlMkRQcm9qKHREaWZmdXNlLCBuZXdfdlV2KTtcbiAgICAgIHZlYzQgYmx1ciA9IHRleHR1cmUyRFByb2oodERpZmZ1c2VCbHVyLCBuZXdfdlV2KTtcblxuICAgICAgdmVjNCBtZXJnZSA9IGJhc2U7XG5cbiAgICAgICNpZmRlZiBVU0VfTk9STUFMTUFQXG4gICAgICAgIHZlYzIgbm9ybWFsX3V2ID0gdmVjMigwLjApO1xuICAgICAgICB2ZWM0IG5vcm1hbENvbG9yID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdlV2ICogbm9ybWFsU2NhbGUpO1xuICAgICAgICB2ZWMzIG15X25vcm1hbCA9IG5vcm1hbGl6ZSggdmVjMyggbm9ybWFsQ29sb3IuciAqIDIuMCAtIDEuMCwgbm9ybWFsQ29sb3IuYiwgIG5vcm1hbENvbG9yLmcgKiAyLjAgLSAxLjAgKSApO1xuICAgICAgICB2ZWMzIGNvb3JkID0gbmV3X3ZVdi54eXogLyBuZXdfdlV2Lnc7XG4gICAgICAgIG5vcm1hbF91diA9IGNvb3JkLnh5ICsgY29vcmQueiAqIG15X25vcm1hbC54eiAqIDAuMDU7XG4gICAgICAgIHZlYzQgYmFzZV9ub3JtYWwgPSB0ZXh0dXJlMkQodERpZmZ1c2UsIG5vcm1hbF91dik7XG4gICAgICAgIHZlYzQgYmx1cl9ub3JtYWwgPSB0ZXh0dXJlMkQodERpZmZ1c2VCbHVyLCBub3JtYWxfdXYpO1xuICAgICAgICBtZXJnZSA9IGJhc2Vfbm9ybWFsO1xuICAgICAgICBibHVyID0gYmx1cl9ub3JtYWw7XG4gICAgICAjZW5kaWZcblxuICAgICAgZmxvYXQgZGVwdGhGYWN0b3IgPSAwLjAwMDE7XG4gICAgICBmbG9hdCBibHVyRmFjdG9yID0gMC4wO1xuXG4gICAgICAjaWZkZWYgVVNFX0RFUFRIXG4gICAgICAgIHZlYzQgZGVwdGggPSB0ZXh0dXJlMkRQcm9qKHREZXB0aCwgbmV3X3ZVdik7XG4gICAgICAgIGRlcHRoRmFjdG9yID0gc21vb3Roc3RlcChtaW5EZXB0aFRocmVzaG9sZCwgbWF4RGVwdGhUaHJlc2hvbGQsIDEuMC0oZGVwdGguciAqIGRlcHRoLmEpKTtcbiAgICAgICAgZGVwdGhGYWN0b3IgKj0gZGVwdGhTY2FsZTtcbiAgICAgICAgZGVwdGhGYWN0b3IgPSBtYXgoMC4wMDAxLCBtaW4oMS4wLCBkZXB0aEZhY3RvcikpO1xuXG4gICAgICAgICNpZmRlZiBVU0VfQkxVUlxuICAgICAgICAgIGJsdXIgPSBibHVyICogbWluKDEuMCwgZGVwdGhGYWN0b3IgKyBkZXB0aFRvQmx1clJhdGlvQmlhcyk7XG4gICAgICAgICAgbWVyZ2UgPSBtZXJnZSAqIG1pbigxLjAsIGRlcHRoRmFjdG9yICsgMC41KTtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICBtZXJnZSA9IG1lcmdlICogZGVwdGhGYWN0b3I7XG4gICAgICAgICNlbmRpZlxuXG4gICAgICAjZW5kaWZcblxuICAgICAgZmxvYXQgcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuICAgICAgI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcbiAgICAgICAgdmVjNCByZWZsZWN0b3JUZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcbiAgICAgICAgcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yICo9IHJlZmxlY3RvclRleGVsUm91Z2huZXNzLmc7XG4gICAgICAjZW5kaWZcblxuICAgICAgI2lmZGVmIFVTRV9CTFVSXG4gICAgICAgIGJsdXJGYWN0b3IgPSBtaW4oMS4wLCBtaXhCbHVyICogcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yKTtcbiAgICAgICAgbWVyZ2UgPSBtaXgobWVyZ2UsIGJsdXIsIGJsdXJGYWN0b3IpO1xuICAgICAgI2VuZGlmXG5cbiAgICAgIHZlYzQgbmV3TWVyZ2UgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgICBuZXdNZXJnZS5yID0gKG1lcmdlLnIgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG4gICAgICBuZXdNZXJnZS5nID0gKG1lcmdlLmcgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG4gICAgICBuZXdNZXJnZS5iID0gKG1lcmdlLmIgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG5cbiAgICAgIGRpZmZ1c2VDb2xvci5yZ2IgPSBkaWZmdXNlQ29sb3IucmdiICogKCgxLjAgLSBtaW4oMS4wLCBtaXJyb3IpKSArIG5ld01lcmdlLnJnYiAqIG1peFN0cmVuZ3RoKTtcbiAgICAgIGBcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0IHREaWZmdXNlKCk6IFRleHR1cmUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3REaWZmdXNlLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgdERpZmZ1c2UodjogVGV4dHVyZSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdERpZmZ1c2UudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgdERlcHRoKCk6IFRleHR1cmUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3REZXB0aC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IHREZXB0aCh2OiBUZXh0dXJlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl90RGVwdGgudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgZGlzdG9ydGlvbk1hcCgpOiBUZXh0dXJlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXN0b3J0aW9uTWFwLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgZGlzdG9ydGlvbk1hcCh2OiBUZXh0dXJlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kaXN0b3J0aW9uTWFwLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IHREaWZmdXNlQmx1cigpOiBUZXh0dXJlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90RGlmZnVzZUJsdXIudmFsdWU7XG4gICAgfVxuICAgIHNldCB0RGlmZnVzZUJsdXIodjogVGV4dHVyZSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdERpZmZ1c2VCbHVyLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IHRleHR1cmVNYXRyaXgoKTogTWF0cml4NCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZU1hdHJpeC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IHRleHR1cmVNYXRyaXgodjogTWF0cml4NCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZU1hdHJpeC52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGdldCBoYXNCbHVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQmx1ci52YWx1ZTtcbiAgICB9XG4gICAgc2V0IGhhc0JsdXIodjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCbHVyLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IG1pcnJvcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWlycm9yLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgbWlycm9yKHY6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taXJyb3IudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWl4Qmx1cigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWl4Qmx1ci52YWx1ZTtcbiAgICB9XG4gICAgc2V0IG1peEJsdXIodjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21peEJsdXIudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWl4U3RyZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJTdHJlbmd0aC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IG1peFN0cmVuZ3RoKHY6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9ibHVyU3RyZW5ndGgudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWluRGVwdGhUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRlcHRoVGhyZXNob2xkLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgbWluRGVwdGhUaHJlc2hvbGQodjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbkRlcHRoVGhyZXNob2xkLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IG1heERlcHRoVGhyZXNob2xkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEZXB0aFRocmVzaG9sZC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IG1heERlcHRoVGhyZXNob2xkKHY6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9tYXhEZXB0aFRocmVzaG9sZC52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGdldCBkZXB0aFNjYWxlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXB0aFNjYWxlLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgZGVwdGhTY2FsZSh2OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZGVwdGhTY2FsZS52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGdldCBkZXB0aFRvQmx1clJhdGlvQmlhcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhUb0JsdXJSYXRpb0JpYXMudmFsdWU7XG4gICAgfVxuICAgIHNldCBkZXB0aFRvQmx1clJhdGlvQmlhcyh2OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZGVwdGhUb0JsdXJSYXRpb0JpYXMudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgZGlzdG9ydGlvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbi52YWx1ZTtcbiAgICB9XG4gICAgc2V0IGRpc3RvcnRpb24odjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2Rpc3RvcnRpb24udmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWl4Q29udHJhc3QoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21peENvbnRyYXN0LnZhbHVlO1xuICAgIH1cbiAgICBzZXQgbWl4Q29udHJhc3QodjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21peENvbnRyYXN0LnZhbHVlID0gdjtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export class MeshWobbleMaterial extends THREE.MeshStandardMaterial {
|
|
3
|
+
constructor(parameters = {}) {
|
|
4
|
+
super(parameters);
|
|
5
|
+
this.setValues(parameters);
|
|
6
|
+
this._time = { value: 0 };
|
|
7
|
+
this._factor = { value: 1 };
|
|
8
|
+
}
|
|
9
|
+
onBeforeCompile(shader) {
|
|
10
|
+
shader.uniforms['time'] = this._time;
|
|
11
|
+
shader.uniforms['factor'] = this._factor;
|
|
12
|
+
shader.vertexShader = `
|
|
13
|
+
uniform float time;
|
|
14
|
+
uniform float factor;
|
|
15
|
+
${shader.vertexShader}
|
|
16
|
+
`;
|
|
17
|
+
shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;
|
|
18
|
+
float c = cos( theta );
|
|
19
|
+
float s = sin( theta );
|
|
20
|
+
mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );
|
|
21
|
+
vec3 transformed = vec3( position ) * m;
|
|
22
|
+
vNormal = vNormal * m;`);
|
|
23
|
+
}
|
|
24
|
+
get time() {
|
|
25
|
+
return this._time.value;
|
|
26
|
+
}
|
|
27
|
+
set time(v) {
|
|
28
|
+
this._time.value = v;
|
|
29
|
+
}
|
|
30
|
+
get factor() {
|
|
31
|
+
return this._factor.value;
|
|
32
|
+
}
|
|
33
|
+
set factor(v) {
|
|
34
|
+
this._factor.value = v;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC13b2JibGUtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvbWVzaC13b2JibGUtbWF0ZXJpYWwvbWVzaC13b2JibGUtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFNL0IsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUssQ0FBQyxvQkFBb0I7SUFJOUQsWUFBWSxhQUFtRCxFQUFFO1FBQzdELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRVEsZUFBZSxDQUFDLE1BQW9CO1FBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFekMsTUFBTSxDQUFDLFlBQVksR0FBRzs7O1FBR3RCLE1BQU0sQ0FBQyxZQUFZO0tBQ3RCLENBQUM7UUFDRSxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3Qyx5QkFBeUIsRUFDekI7Ozs7OytCQUttQixDQUN0QixDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgVW5pZm9ybTxUPiB7XG4gICAgdmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNZXNoV29iYmxlTWF0ZXJpYWwgZXh0ZW5kcyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCB7XG4gICAgX3RpbWU6IFVuaWZvcm08bnVtYmVyPjtcbiAgICBfZmFjdG9yOiBVbmlmb3JtPG51bWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7fSkge1xuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMuX3RpbWUgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIHRoaXMuX2ZhY3RvciA9IHsgdmFsdWU6IDEgfTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2ZhY3RvciddID0gdGhpcy5fZmFjdG9yO1xuXG4gICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBgXG4gICAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG4gICAgICB1bmlmb3JtIGZsb2F0IGZhY3RvcjtcbiAgICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1cbiAgICBgO1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgJyNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+JyxcbiAgICAgICAgICAgIGBmbG9hdCB0aGV0YSA9IHNpbiggdGltZSArIHBvc2l0aW9uLnkgKSAvIDIuMCAqIGZhY3RvcjtcbiAgICAgICAgZmxvYXQgYyA9IGNvcyggdGhldGEgKTtcbiAgICAgICAgZmxvYXQgcyA9IHNpbiggdGhldGEgKTtcbiAgICAgICAgbWF0MyBtID0gbWF0MyggYywgMCwgcywgMCwgMSwgMCwgLXMsIDAsIGMgKTtcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICkgKiBtO1xuICAgICAgICB2Tm9ybWFsID0gdk5vcm1hbCAqIG07YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCB0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGltZS52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdGltZSh2KSB7XG4gICAgICAgIHRoaXMuX3RpbWUudmFsdWUgPSB2O1xuICAgIH1cblxuICAgIGdldCBmYWN0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3IudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGZhY3Rvcih2KSB7XG4gICAgICAgIHRoaXMuX2ZhY3Rvci52YWx1ZSA9IHY7XG4gICAgfVxufVxuIl19
|