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.
Files changed (33) hide show
  1. package/assets/distort.vert.glsl +1 -0
  2. package/esm2020/materials/angular-three-soba-materials.mjs +5 -0
  3. package/esm2020/materials/index.mjs +4 -0
  4. package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +74 -0
  5. package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +328 -0
  6. package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +67 -0
  7. package/esm2020/shaders/index.mjs +6 -1
  8. package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +61 -0
  9. package/esm2020/shaders/lib/convolution-material/convolution-material.mjs +94 -0
  10. package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +55 -0
  11. package/esm2020/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  12. package/esm2020/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  13. package/fesm2015/angular-three-soba-materials.mjs +468 -0
  14. package/fesm2015/angular-three-soba-materials.mjs.map +1 -0
  15. package/fesm2015/angular-three-soba-shaders.mjs +467 -1
  16. package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
  17. package/fesm2020/angular-three-soba-materials.mjs +468 -0
  18. package/fesm2020/angular-three-soba-materials.mjs.map +1 -0
  19. package/fesm2020/angular-three-soba-shaders.mjs +466 -1
  20. package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
  21. package/materials/README.md +3 -0
  22. package/materials/index.d.ts +3 -0
  23. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +19 -0
  24. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +41 -0
  25. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +14 -0
  26. package/package.json +37 -28
  27. package/plugin/package.json +1 -1
  28. package/shaders/index.d.ts +5 -0
  29. package/shaders/lib/blur-pass/blur-pass.d.ts +23 -0
  30. package/shaders/lib/convolution-material/convolution-material.d.ts +7 -0
  31. package/shaders/lib/mesh-distort-material/mesh-distort-material.d.ts +144 -0
  32. package/shaders/lib/mesh-reflector-material/mesh-reflector-material.d.ts +50 -0
  33. 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