From 230174306c44486bc4f3da0a92c16b081fa67345 Mon Sep 17 00:00:00 2001 From: "Raoul v. R" Date: Fri, 18 Aug 2017 14:50:34 +0200 Subject: [PATCH] Version 2.3.0. --- build/postprocessing.js | 2 +- build/postprocessing.min.js | 2 +- package.json | 2 +- public/demo/index.js | 12 ++++++------ public/demo/index.min.js | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/postprocessing.js b/build/postprocessing.js index efa890c1e..5e232ef4d 100644 --- a/build/postprocessing.js +++ b/build/postprocessing.js @@ -1,5 +1,5 @@ /** - * postprocessing v2.2.0 build Aug 01 2017 + * postprocessing v2.3.0 build Aug 18 2017 * https://github.com/vanruesc/postprocessing * Copyright 2017 Raoul van RĂ¼schen, Zlib */ diff --git a/build/postprocessing.min.js b/build/postprocessing.min.js index 34d029aac..98d107bb2 100644 --- a/build/postprocessing.min.js +++ b/build/postprocessing.min.js @@ -1,5 +1,5 @@ /** - * postprocessing v2.2.0 build Aug 01 2017 + * postprocessing v2.3.0 build Aug 18 2017 * https://github.com/vanruesc/postprocessing * Copyright 2017 Raoul van RĂ¼schen, Zlib */ diff --git a/package.json b/package.json index f884b213d..8d55edfc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postprocessing", - "version": "2.2.0", + "version": "2.3.0", "description": "A post processing library that provides the means to implement 2D filter effects for three.js.", "homepage": "https://github.com/vanruesc/postprocessing", "main": "build/postprocessing.js", diff --git a/public/demo/index.js b/public/demo/index.js index 0ea93a7d1..5ee93d50f 100644 --- a/public/demo/index.js +++ b/public/demo/index.js @@ -3102,7 +3102,7 @@ material = new three.MeshPhongMaterial({ color: 0xffffff * Math.random(), - shading: three.FlatShading + flatShading: true }); mesh = new three.Mesh(geometry, material); @@ -3678,7 +3678,7 @@ material = new three.MeshPhongMaterial({ color: 0xffffff * Math.random(), - shading: three.FlatShading + flatShading: true }); mesh = new three.Mesh(geometry, material); @@ -3956,7 +3956,7 @@ material = new three.MeshPhongMaterial({ color: 0xffffff * Math.random(), - shading: three.FlatShading + flatShading: true }); mesh = new three.Mesh(geometry, material); @@ -4131,7 +4131,7 @@ material = new three.MeshPhongMaterial({ color: 0xffffff * Math.random(), - shading: three.FlatShading + flatShading: true }); mesh = new three.Mesh(geometry, material); @@ -4395,7 +4395,7 @@ material = new three.MeshPhongMaterial({ color: 0xffffff * Math.random(), - shading: three.FlatShading + flatShading: true }); mesh = new three.Mesh(geometry, material); @@ -4560,7 +4560,7 @@ material = new three.MeshPhongMaterial({ color: 0xffffff * Math.random(), - shading: three.FlatShading + flatShading: true }); mesh = new three.Mesh(geometry, material); diff --git a/public/demo/index.min.js b/public/demo/index.min.js index eae80e529..fe6ad1d18 100644 --- a/public/demo/index.min.js +++ b/public/demo/index.min.js @@ -1 +1 @@ -!function(e,t,n){"use strict";function r(e,t){return e+Math.floor(Math.random()*(t-e+1))}function i(e,t){return e+Math.random()*(t-e)}function a(e,t,n){return Math.max(t,Math.min(n,e))}function o(e){return Math.pow(2,Math.max(0,Math.ceil(Math.log2(e))))}t=t&&t.hasOwnProperty("default")?t.default:t,n=n&&n.hasOwnProperty("default")?n.default:n;var s="uniform sampler2D tPreviousLum;\r\nuniform sampler2D tCurrentLum;\r\nuniform float minLuminance;\r\nuniform float delta;\r\nuniform float tau;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tfloat previousLum = texture2D(tPreviousLum, vUv, MIP_LEVEL_1X1).r;\r\n\tfloat currentLum = texture2D(tCurrentLum, vUv, MIP_LEVEL_1X1).r;\r\n\r\n\tpreviousLum = max(minLuminance, previousLum);\r\n\tcurrentLum = max(minLuminance, currentLum);\r\n\r\n\t// Adapt the luminance using Pattanaik's technique.\r\n\tfloat adaptedLum = previousLum + (currentLum - previousLum) * (1.0 - exp(-delta * tau));\r\n\r\n\tgl_FragColor.r = adaptedLum;\r\n\r\n}\r\n",l="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",u=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},c=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,n),void 0===r.focus&&(r.focus=1),void 0===r.aperture&&(r.aperture=.025),void 0===r.maxBlur&&(r.maxBlur=1);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"BokehMaterial",uniforms:{cameraNear:new e.Uniform(.1),cameraFar:new e.Uniform(2e3),aspect:new e.Uniform(1),tDiffuse:new e.Uniform(null),tDepth:new e.Uniform(null),focus:new e.Uniform(r.focus),aperture:new e.Uniform(r.aperture),maxBlur:new e.Uniform(r.maxBlur)},fragmentShader:m,vertexShader:p,depthWrite:!1,depthTest:!1}));return null!==t&&i.adoptCameraSettings(t),i}return f(n,t),c(n,[{key:"adoptCameraSettings",value:function(e){this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,this.uniforms.aspect.value=e.aspect}}]),n}(e.ShaderMaterial),x="uniform sampler2D tDiffuse;\r\nuniform sampler2D tDepth;\r\n\r\nuniform vec2 texelSize;\r\nuniform vec2 halfTexelSize;\r\n\r\nuniform float cameraNear;\r\nuniform float cameraFar;\r\n\r\nuniform float focalLength;\r\nuniform float focalStop;\r\n\r\nuniform float maxBlur;\r\nuniform vec3 luminanceCoefficients;\r\nuniform float luminanceThreshold;\r\nuniform float luminanceGain;\r\nuniform float bias;\r\nuniform float fringe;\r\nuniform float ditherStrength;\r\n\r\n#ifdef SHADER_FOCUS\r\n\r\n\tuniform vec2 focusCoords;\r\n\r\n#else\r\n\r\n\tuniform float focalDepth;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\n#ifndef USE_LOGDEPTHBUF\r\n\r\n\t#include \r\n\r\n\tfloat readDepth(sampler2D depthSampler, vec2 coord) {\r\n\r\n\t\tfloat fragCoordZ = texture2D(depthSampler, coord).x;\r\n\t\tfloat viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t\treturn viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\n#ifdef PENTAGON\r\n\r\n\tfloat penta(vec2 coords) {\r\n\r\n\t\tconst vec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0);\r\n\t\tconst vec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0);\r\n\t\tconst vec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0);\r\n\t\tconst vec4 HS3 = vec4(-0.809016994, -0.587785252, 0.0, 1.0);\r\n\t\tconst vec4 HS4 = vec4( 0.309016994, -0.951056516, 0.0, 1.0);\r\n\t\tconst vec4 HS5 = vec4( 0.0, 0.0, 1.0, 1.0);\r\n\r\n\t\tconst vec4 ONE = vec4(1.0);\r\n\r\n\t\tconst float P_FEATHER = 0.4;\r\n\t\tconst float N_FEATHER = -P_FEATHER;\r\n\r\n\t\tfloat inOrOut = -4.0;\r\n\r\n\t\tvec4 P = vec4(coords, vec2(RINGS_FLOAT - 1.3));\r\n\r\n\t\tvec4 dist = vec4(\r\n\t\t\tdot(P, HS0),\r\n\t\t\tdot(P, HS1),\r\n\t\t\tdot(P, HS2),\r\n\t\t\tdot(P, HS3)\r\n\t\t);\r\n\r\n\t\tdist = smoothstep(N_FEATHER, P_FEATHER, dist);\r\n\r\n\t\tinOrOut += dot(dist, ONE);\r\n\r\n\t\tdist.x = dot(P, HS4);\r\n\t\tdist.y = HS5.w - abs(P.z);\r\n\r\n\t\tdist = smoothstep(N_FEATHER, P_FEATHER, dist);\r\n\t\tinOrOut += dist.x;\r\n\r\n\t\treturn clamp(inOrOut, 0.0, 1.0);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\n#ifdef SHOW_FOCUS\r\n\r\n\tvec3 debugFocus(vec3 c, float blur, float depth) {\r\n\r\n\t\tfloat edge = 0.002 * depth;\r\n\t\tfloat m = clamp(smoothstep(0.0, edge, blur), 0.0, 1.0);\r\n\t\tfloat e = clamp(smoothstep(1.0 - edge, 1.0, blur), 0.0, 1.0);\r\n\r\n\t\tc = mix(c, vec3(1.0, 0.5, 0.0), (1.0 - m) * 0.6);\r\n\t\tc = mix(c, vec3(0.0, 0.5, 1.0), ((1.0 - e) - (1.0 - m)) * 0.2);\r\n\r\n\t\treturn c;\r\n\r\n\t}\r\n\r\n#endif\r\n\r\n#ifdef VIGNETTE\r\n\r\n\tfloat vignette() {\r\n\r\n\t\tconst vec2 CENTER = vec2(0.5);\r\n\r\n\t\tconst float VIGNETTE_OUT = 1.3;\r\n\t\tconst float VIGNETTE_IN = 0.0;\r\n\t\tconst float VIGNETTE_FADE = 22.0; \r\n\r\n\t\tfloat d = distance(vUv, CENTER);\r\n\t\td = smoothstep(VIGNETTE_OUT + (focalStop / VIGNETTE_FADE), VIGNETTE_IN + (focalStop / VIGNETTE_FADE), d);\r\n\r\n\t\treturn clamp(d, 0.0, 1.0);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\nvec2 rand(vec2 coord) {\r\n\r\n\tvec2 noise;\r\n\r\n\t#ifdef NOISE\r\n\r\n\t\tconst float a = 12.9898;\r\n\t\tconst float b = 78.233;\r\n\t\tconst float c = 43758.5453;\r\n\r\n\t\tnoise.x = clamp(fract(sin(mod(dot(coord, vec2(a, b)), 3.14)) * c), 0.0, 1.0) * 2.0 - 1.0;\r\n\t\tnoise.y = clamp(fract(sin(mod(dot(coord, vec2(a, b) * 2.0), 3.14)) * c), 0.0, 1.0) * 2.0 - 1.0;\r\n\r\n\t#else\r\n\r\n\t\tnoise.x = ((fract(1.0 - coord.s * halfTexelSize.x) * 0.25) + (fract(coord.t * halfTexelSize.y) * 0.75)) * 2.0 - 1.0;\r\n\t\tnoise.y = ((fract(1.0 - coord.s * halfTexelSize.x) * 0.75) + (fract(coord.t * halfTexelSize.y) * 0.25)) * 2.0 - 1.0;\r\n\r\n\t#endif\r\n\r\n\treturn noise;\r\n\r\n}\r\n\r\nvec3 processTexel(vec2 coords, float blur) {\r\n\r\n\tvec3 c;\r\n\tc.r = texture2D(tDiffuse, coords + vec2(0.0, 1.0) * texelSize * fringe * blur).r;\r\n\tc.g = texture2D(tDiffuse, coords + vec2(-0.866, -0.5) * texelSize * fringe * blur).g;\r\n\tc.b = texture2D(tDiffuse, coords + vec2(0.866, -0.5) * texelSize * fringe * blur).b;\r\n\r\n\t// Calculate the luminance of the constructed colour.\r\n\tfloat luminance = dot(c, luminanceCoefficients);\r\n\tfloat threshold = max((luminance - luminanceThreshold) * luminanceGain, 0.0);\r\n\r\n\treturn c + mix(vec3(0.0), c, threshold * blur);\r\n\r\n}\r\n\r\nfloat linearize(float depth) {\r\n\r\n\treturn -cameraFar * cameraNear / (depth * (cameraFar - cameraNear) - cameraFar);\r\n\r\n}\r\n\r\nfloat gather(float i, float j, float ringSamples, inout vec3 color, float w, float h, float blur) {\r\n\r\n\tconst float TWO_PI = 6.28318531;\r\n\r\n\tfloat step = TWO_PI / ringSamples;\r\n\tfloat pw = cos(j * step) * i;\r\n\tfloat ph = sin(j * step) * i;\r\n\r\n\t#ifdef PENTAGON\r\n\r\n\t\tfloat p = penta(vec2(pw, ph));\r\n\r\n\t#else\r\n\r\n\t\tfloat p = 1.0;\r\n\r\n\t#endif\r\n\r\n\tcolor += processTexel(vUv + vec2(pw * w, ph * h), blur) * mix(1.0, i / RINGS_FLOAT, bias) * p;\r\n\r\n\treturn mix(1.0, i / RINGS_FLOAT, bias) * p;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\t#ifdef USE_LOGDEPTHBUF\r\n\r\n\t\tfloat depth = linearize(texture2D(tDepth, vUv).x);\r\n\r\n\t#else\r\n\r\n\t\tfloat depth = linearize(readDepth(tDepth, vUv));\r\n\r\n\t#endif\r\n\r\n\t#ifdef SHADER_FOCUS\r\n\r\n\t\t#ifdef USE_LOGDEPTHBUF\r\n\r\n\t\t\tfloat fDepth = linearize(texture2D(tDepth, focusCoords).x);\r\n\r\n\t\t#else\r\n\r\n\t\t\tfloat fDepth = linearize(readDepth(tDepth, focusCoords));\r\n\r\n\t\t#endif\r\n\r\n\t#else\r\n\r\n\t\tfloat fDepth = focalDepth;\r\n\r\n\t#endif\r\n\r\n\t#ifdef MANUAL_DOF\r\n\r\n\t\tconst float nDoFStart = 1.0; \r\n\t\tconst float nDoFDist = 2.0;\r\n\t\tconst float fDoFStart = 1.0;\r\n\t\tconst float fDoFDist = 3.0;\r\n\r\n\t\tfloat focalPlane = depth - fDepth;\r\n\t\tfloat farDoF = (focalPlane - fDoFStart) / fDoFDist;\r\n\t\tfloat nearDoF = (-focalPlane - nDoFStart) / nDoFDist;\r\n\r\n\t\tfloat blur = (focalPlane > 0.0) ? farDoF : nearDoF;\r\n\r\n\t#else\r\n\r\n\t\tconst float CIRCLE_OF_CONFUSION = 0.03; // 35mm film = 0.03mm CoC.\r\n\r\n\t\tfloat focalPlaneMM = fDepth * 1000.0;\r\n\t\tfloat depthMM = depth * 1000.0;\r\n\r\n\t\tfloat focalPlane = (depthMM * focalLength) / (depthMM - focalLength);\r\n\t\tfloat farDoF = (focalPlaneMM * focalLength) / (focalPlaneMM - focalLength);\r\n\t\tfloat nearDoF = (focalPlaneMM - focalLength) / (focalPlaneMM * focalStop * CIRCLE_OF_CONFUSION);\r\n\r\n\t\tfloat blur = abs(focalPlane - farDoF) * nearDoF;\r\n\r\n\t#endif\r\n\r\n\tblur = clamp(blur, 0.0, 1.0);\r\n\r\n\t// Dithering.\r\n\tvec2 noise = rand(vUv) * ditherStrength * blur;\r\n\r\n\tfloat blurFactorX = texelSize.x * blur * maxBlur + noise.x;\r\n\tfloat blurFactorY = texelSize.y * blur * maxBlur + noise.y;\r\n\r\n\tconst int MAX_RING_SAMPLES = RINGS_INT * SAMPLES_INT;\r\n\r\n\t// Calculation of final color.\r\n\tvec4 color;\r\n\r\n\tif(blur < 0.05) {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv);\r\n\r\n\t} else {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv);\r\n\r\n\t\tfloat s = 1.0;\r\n\t\tint ringSamples;\r\n\r\n\t\tfor(int i = 1; i <= RINGS_INT; ++i) {\r\n\r\n\t\t\tringSamples = i * SAMPLES_INT;\r\n\r\n\t\t\t// Constant loop.\r\n\t\t\tfor(int j = 0; j < MAX_RING_SAMPLES; ++j) {\r\n\r\n\t\t\t\t// Break earlier.\r\n\t\t\t\tif(j >= ringSamples) { break; }\r\n\r\n\t\t\t\ts += gather(float(i), float(j), float(ringSamples), color.rgb, blurFactorX, blurFactorY, blur);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tcolor.rgb /= s; // Divide by sample count.\r\n\r\n\t}\r\n\r\n\t#ifdef SHOW_FOCUS\r\n\r\n\t\tcolor.rgb = debugFocus(color.rgb, blur, depth);\r\n\r\n\t#endif\r\n\r\n\t#ifdef VIGNETTE\r\n\r\n\t\tcolor.rgb *= vignette();\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",y="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",M=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,n),void 0===r.rings&&(r.rings=3),void 0===r.samples&&(r.samples=2),void 0===r.showFocus&&(r.showFocus=!1),void 0===r.showFocus&&(r.showFocus=!1),void 0===r.manualDoF&&(r.manualDoF=!1),void 0===r.vignette&&(r.vignette=!1),void 0===r.pentagon&&(r.pentagon=!1),void 0===r.shaderFocus&&(r.shaderFocus=!0),void 0===r.noise&&(r.noise=!0);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"Bokeh2Material",defines:{RINGS_INT:r.rings.toFixed(0),RINGS_FLOAT:r.rings.toFixed(1),SAMPLES_INT:r.samples.toFixed(0),SAMPLES_FLOAT:r.samples.toFixed(1)},uniforms:{tDiffuse:new e.Uniform(null),tDepth:new e.Uniform(null),texelSize:new e.Uniform(new e.Vector2),halfTexelSize:new e.Uniform(new e.Vector2),cameraNear:new e.Uniform(.1),cameraFar:new e.Uniform(2e3),focalLength:new e.Uniform(24),focalStop:new e.Uniform(.9),maxBlur:new e.Uniform(1),luminanceThreshold:new e.Uniform(.5),luminanceGain:new e.Uniform(2),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722)),bias:new e.Uniform(.5),fringe:new e.Uniform(.7),ditherStrength:new e.Uniform(1e-4),focusCoords:new e.Uniform(new e.Vector2(.5,.5)),focalDepth:new e.Uniform(1)},fragmentShader:x,vertexShader:y,depthWrite:!1,depthTest:!1}));return r.showFocus&&(i.defines.SHOW_FOCUS="1"),r.manualDoF&&(i.defines.MANUAL_DOF="1"),r.vignette&&(i.defines.VIGNETTE="1"),r.pentagon&&(i.defines.PENTAGON="1"),r.shaderFocus&&(i.defines.SHADER_FOCUS="1"),r.noise&&(i.defines.NOISE="1"),void 0!==r.texelSize&&i.setTexelSize(r.texelSize.x,r.texelSize.y),null!==t&&i.adoptCameraSettings(t),i}return f(n,t),c(n,[{key:"setTexelSize",value:function(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}},{key:"adoptCameraSettings",value:function(e){this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,this.uniforms.focalLength.value=e.getFocalLength()}}]),n}(e.ShaderMaterial),w="uniform sampler2D texture1;\r\nuniform sampler2D texture2;\r\n\r\nuniform float opacity1;\r\nuniform float opacity2;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel1 = opacity1 * texture2D(texture1, vUv);\r\n\tvec4 texel2 = opacity2 * texture2D(texture2, vUv);\r\n\r\n\t#ifdef SCREEN_MODE\r\n\r\n\t\tvec3 invTexel1 = vec3(1.0) - texel1.rgb;\r\n\t\tvec3 invTexel2 = vec3(1.0) - texel2.rgb;\r\n\r\n\t\tvec4 color = vec4(\r\n\t\t\tvec3(1.0) - invTexel1 * invTexel2,\r\n\t\t\ttexel1.a + texel2.a\r\n\t\t);\r\n\r\n\t#else\r\n\r\n\t\tvec4 color = texel1 + texel2;\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",b="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",S=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"CombineMaterial",uniforms:{texture1:new e.Uniform(null),texture2:new e.Uniform(null),opacity1:new e.Uniform(1),opacity2:new e.Uniform(1)},fragmentShader:w,vertexShader:b,depthWrite:!1,depthTest:!1}));return t&&(r.defines.SCREEN_MODE="1"),r}return f(n,t),n}(e.ShaderMaterial),D="uniform sampler2D tDiffuse;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\t// Sample top left texel.\r\n\tvec4 sum = texture2D(tDiffuse, vUv0);\r\n\r\n\t// Sample top right texel.\r\n\tsum += texture2D(tDiffuse, vUv1);\r\n\r\n\t// Sample bottom right texel.\r\n\tsum += texture2D(tDiffuse, vUv2);\r\n\r\n\t// Sample bottom left texel.\r\n\tsum += texture2D(tDiffuse, vUv3);\r\n\r\n\t// Compute the average.\r\n\tgl_FragColor = sum * 0.25;\r\n\r\n}\r\n",P="uniform vec2 texelSize;\r\nuniform vec2 halfTexelSize;\r\nuniform float kernel;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\tvec2 dUv = (texelSize * vec2(kernel)) + halfTexelSize;\r\n\r\n\tvUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\r\n\tvUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\r\n\tvUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\r\n\tvUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",T=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"ConvolutionMaterial",uniforms:{tDiffuse:new e.Uniform(null),texelSize:new e.Uniform(new e.Vector2),halfTexelSize:new e.Uniform(new e.Vector2),kernel:new e.Uniform(0)},fragmentShader:D,vertexShader:P,depthWrite:!1,depthTest:!1}));return r.setTexelSize(t.x,t.y),r.kernelSize=C.LARGE,r}return f(n,t),c(n,[{key:"getKernel",value:function(){return A[this.kernelSize]}},{key:"setTexelSize",value:function(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}}]),n}(e.ShaderMaterial),A=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],C={VERY_SMALL:0,SMALL:1,MEDIUM:2,LARGE:3,VERY_LARGE:4,HUGE:5},O="uniform sampler2D tDiffuse;\r\nuniform float opacity;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tgl_FragColor = opacity * texel;\r\n\r\n}\r\n",L="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",E=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"CopyMaterial",uniforms:{tDiffuse:new e.Uniform(null),opacity:new e.Uniform(1)},fragmentShader:O,vertexShader:L,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),k="uniform sampler2D tDepth;\r\n\r\nvarying vec2 vUv;\r\n\r\n#ifndef USE_LOGDEPTHBUF\r\n\r\n\t#include \r\n\r\n\tuniform float cameraNear;\r\n\tuniform float cameraFar;\r\n\r\n\tfloat readDepth(sampler2D depthSampler, vec2 coord) {\r\n\r\n\t\tfloat fragCoordZ = texture2D(depthSampler, coord).x;\r\n\t\tfloat viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t\treturn viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\nvoid main() {\r\n\r\n\t#ifdef USE_LOGDEPTHBUF\r\n\r\n\t\tfloat depth = texture2D(tDepth, vUv).x;\r\n\r\n\t#else\r\n\r\n\t\tfloat depth = readDepth(tDepth, vUv);\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = vec4(depth, depth, depth, 1.0);\r\n\r\n}\r\n",U="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",z=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"DepthMaterial",uniforms:{cameraNear:new e.Uniform(.1),cameraFar:new e.Uniform(2e3),tDepth:new e.Uniform(null)},fragmentShader:k,vertexShader:U,depthWrite:!1,depthTest:!1}));return null!==t&&r.adoptCameraSettings(t),r}return f(n,t),c(n,[{key:"adoptCameraSettings",value:function(e){this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far}}]),n}(e.ShaderMaterial),F="uniform sampler2D tDiffuse;\r\n\r\nuniform float angle;\r\nuniform float scale;\r\nuniform float intensity;\r\n\r\nvarying vec2 vUv;\r\nvarying vec2 vUvPattern;\r\n\r\nfloat pattern() {\r\n\r\n\tfloat s = sin(angle);\r\n\tfloat c = cos(angle);\r\n\r\n\tvec2 point = vec2(c * vUvPattern.x - s * vUvPattern.y, s * vUvPattern.x + c * vUvPattern.y) * scale;\r\n\r\n\treturn (sin(point.x) * sin(point.y)) * 4.0;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tvec3 color = texel.rgb;\r\n\r\n\t#ifdef AVERAGE\r\n\r\n\t\tcolor = vec3((color.r + color.g + color.b) / 3.0);\r\n\r\n\t#endif\r\n\r\n\tcolor = vec3(color * 10.0 - 5.0 + pattern());\r\n\tcolor = texel.rgb + (color - texel.rgb) * intensity;\r\n\r\n\tgl_FragColor = vec4(color, texel.a);\r\n\r\n}\r\n",N="uniform vec4 offsetRepeat;\r\n\r\nvarying vec2 vUv;\r\nvarying vec2 vUvPattern;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tvUvPattern = uv * offsetRepeat.zw + offsetRepeat.xy;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",j=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"DotScreenMaterial",uniforms:{tDiffuse:new e.Uniform(null),angle:new e.Uniform(1.57),scale:new e.Uniform(1),intensity:new e.Uniform(1),offsetRepeat:new e.Uniform(new e.Vector4(.5,.5,1,1))},fragmentShader:F,vertexShader:N,depthWrite:!1,depthTest:!1}));return t&&(r.defines.AVERAGE="1"),r}return f(n,t),n}(e.ShaderMaterial),B="uniform sampler2D tDiffuse;\r\nuniform float time;\r\n\r\nvarying vec2 vUv;\r\n\r\n#ifdef NOISE\r\n\r\n\tuniform float noiseIntensity;\r\n\r\n#endif\r\n\r\n#ifdef SCANLINES\r\n\r\n\tuniform float scanlineIntensity;\r\n\tuniform float scanlineCount;\r\n\r\n#endif\r\n\r\n#ifdef GREYSCALE\r\n\r\n\tuniform vec3 luminanceCoefficients;\r\n\tuniform float greyscaleIntensity;\r\n\r\n#elif defined(SEPIA)\r\n\r\n\tuniform float sepiaIntensity;\r\n\r\n#endif\r\n\r\n#ifdef VIGNETTE\r\n\r\n\tuniform float vignetteOffset;\r\n\tuniform float vignetteDarkness;\r\n\r\n#endif\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tvec3 color = texel.rgb;\r\n\r\n\t#ifdef SCREEN_MODE\r\n\r\n\t\tvec3 invColor;\r\n\r\n\t#endif\r\n\r\n\t#ifdef NOISE\r\n\r\n\t\tfloat x = vUv.x * vUv.y * time * 1000.0;\r\n\t\tx = mod(x, 13.0) * mod(x, 123.0);\r\n\t\tx = mod(x, 0.01);\r\n\r\n\t\tvec3 noise = texel.rgb * clamp(0.1 + x * 100.0, 0.0, 1.0) * noiseIntensity;\r\n\r\n\t\t#ifdef SCREEN_MODE\r\n\r\n\t\t\tinvColor = vec3(1.0) - color;\r\n\t\t\tvec3 invNoise = vec3(1.0) - noise;\r\n\r\n\t\t\tcolor = vec3(1.0) - invColor * invNoise;\r\n\r\n\t\t#else\r\n\r\n\t\t\tcolor += noise;\r\n\r\n\t\t#endif\r\n\r\n\t#endif\r\n\r\n\t#ifdef SCANLINES\r\n\r\n\t\tvec2 sl = vec2(sin(vUv.y * scanlineCount), cos(vUv.y * scanlineCount));\r\n\t\tvec3 scanlines = texel.rgb * vec3(sl.x, sl.y, sl.x) * scanlineIntensity;\r\n\r\n\t\t#ifdef SCREEN_MODE\r\n\r\n\t\t\tinvColor = vec3(1.0) - color;\r\n\t\t\tvec3 invScanlines = vec3(1.0) - scanlines;\r\n\r\n\t\t\tcolor = vec3(1.0) - invColor * invScanlines;\r\n\r\n\t\t#else\r\n\r\n\t\t\tcolor += scanlines;\r\n\r\n\t\t#endif\r\n\r\n\t#endif\r\n\r\n\t#ifdef GREYSCALE\r\n\r\n\t\tcolor = mix(color, vec3(dot(color, luminanceCoefficients)), greyscaleIntensity);\r\n\r\n\t#elif defined(SEPIA)\r\n\r\n\t\tvec3 c = color.rgb;\r\n\r\n\t\tcolor.r = dot(c, vec3(1.0 - 0.607 * sepiaIntensity, 0.769 * sepiaIntensity, 0.189 * sepiaIntensity));\r\n\t\tcolor.g = dot(c, vec3(0.349 * sepiaIntensity, 1.0 - 0.314 * sepiaIntensity, 0.168 * sepiaIntensity));\r\n\t\tcolor.b = dot(c, vec3(0.272 * sepiaIntensity, 0.534 * sepiaIntensity, 1.0 - 0.869 * sepiaIntensity));\r\n\r\n\t#endif\r\n\r\n\t#ifdef VIGNETTE\r\n\r\n\t\tconst vec2 center = vec2(0.5);\r\n\r\n\t\t#ifdef ESKIL\r\n\r\n\t\t\tvec2 uv = (vUv - center) * vec2(vignetteOffset);\r\n\t\t\tcolor = mix(color.rgb, vec3(1.0 - vignetteDarkness), dot(uv, uv));\r\n\r\n\t\t#else\r\n\r\n\t\t\tfloat dist = distance(vUv, center);\r\n\t\t\tcolor *= smoothstep(0.8, vignetteOffset * 0.799, dist * (vignetteDarkness + vignetteOffset));\r\n\r\n\t\t#endif\t\t\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = vec4(clamp(color, 0.0, 1.0), texel.a);\r\n\r\n}\r\n",R="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",I=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n),void 0===t.screenMode&&(t.screenMode=!0),void 0===t.noise&&(t.noise=!0),void 0===t.scanlines&&(t.scanlines=!0),void 0===t.greyscale&&(t.greyscale=!1),void 0===t.sepia&&(t.sepia=!1),void 0===t.vignette&&(t.vignette=!1),void 0===t.eskil&&(t.eskil=!1),void 0===t.noiseIntensity&&(t.noiseIntensity=.5),void 0===t.scanlineIntensity&&(t.scanlineIntensity=.05),void 0===t.greyscaleIntensity&&(t.greyscaleIntensity=1),void 0===t.sepiaIntensity&&(t.sepiaIntensity=1),void 0===t.vignetteOffset&&(t.vignetteOffset=1),void 0===t.vignetteDarkness&&(t.vignetteDarkness=1);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"FilmMaterial",uniforms:{tDiffuse:new e.Uniform(null),time:new e.Uniform(0),noiseIntensity:new e.Uniform(t.noiseIntensity),scanlineIntensity:new e.Uniform(t.scanlineIntensity),scanlineCount:new e.Uniform(0),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722)),greyscaleIntensity:new e.Uniform(t.greyscaleIntensity),sepiaIntensity:new e.Uniform(t.sepiaIntensity),vignetteOffset:new e.Uniform(t.vignetteOffset),vignetteDarkness:new e.Uniform(t.vignetteDarkness)},fragmentShader:B,vertexShader:R,depthWrite:!1,depthTest:!1}));return t.greyscale&&(r.defines.GREYSCALE="1"),t.sepia&&(r.defines.SEPIA="1"),t.vignette&&(r.defines.VIGNETTE="1"),t.eskil&&(r.defines.ESKIL="1"),t.screenMode&&(r.defines.SCREEN_MODE="1"),t.noise&&(r.defines.NOISE="1"),t.scanlines&&(r.defines.SCANLINES="1"),r}return f(n,t),n}(e.ShaderMaterial),G="uniform sampler2D tDiffuse;\r\nuniform sampler2D tPerturb;\r\n\r\nuniform bool active;\r\n\r\nuniform float amount;\r\nuniform float angle;\r\nuniform float seed;\r\nuniform float seedX;\r\nuniform float seedY;\r\nuniform float distortionX;\r\nuniform float distortionY;\r\nuniform float colS;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat rand(vec2 tc) {\r\n\r\n\tconst float a = 12.9898;\r\n\tconst float b = 78.233;\r\n\tconst float c = 43758.5453;\r\n\r\n\tfloat dt = dot(tc, vec2(a, b));\r\n\tfloat sn = mod(dt, 3.14);\r\n\r\n\treturn fract(sin(sn) * c);\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec2 coord = vUv;\r\n\r\n\tfloat xs, ys;\r\n\tvec4 normal;\r\n\r\n\tvec2 offset;\r\n\tvec4 cr, cga, cb;\r\n\tvec4 snow, color;\r\n\r\n\tfloat sx, sy;\r\n\r\n\tif(active) {\r\n\r\n\t\txs = floor(gl_FragCoord.x / 0.5);\r\n\t\tys = floor(gl_FragCoord.y / 0.5);\r\n\r\n\t\tnormal = texture2D(tPerturb, coord * seed * seed);\r\n\r\n\t\tif(coord.y < distortionX + colS && coord.y > distortionX - colS * seed) {\r\n\r\n\t\t\tsx = clamp(ceil(seedX), 0.0, 1.0);\r\n\t\t\tcoord.y = sx * (1.0 - (coord.y + distortionY)) + (1.0 - sx) * distortionY;\r\n\r\n\t\t}\r\n\r\n\t\tif(coord.x < distortionY + colS && coord.x > distortionY - colS * seed) {\r\n\r\n\t\t\tsy = clamp(ceil(seedY), 0.0, 1.0);\r\n\t\t\tcoord.x = sy * distortionX + (1.0 - sy) * (1.0 - (coord.x + distortionX));\r\n\r\n\t\t}\r\n\r\n\t\tcoord.x += normal.x * seedX * (seed / 5.0);\r\n\t\tcoord.y += normal.y * seedY * (seed / 5.0);\r\n\r\n\t\toffset = amount * vec2(cos(angle), sin(angle));\r\n\r\n\t\tcr = texture2D(tDiffuse, coord + offset);\r\n\t\tcga = texture2D(tDiffuse, coord);\r\n\t\tcb = texture2D(tDiffuse, coord - offset);\r\n\r\n\t\tcolor = vec4(cr.r, cga.g, cb.b, cga.a);\r\n\t\tsnow = 200.0 * amount * vec4(rand(vec2(xs * seed, ys * seed * 50.0)) * 0.2);\r\n\t\tcolor += snow;\r\n\r\n\t} else {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv);\r\n\r\n\t}\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",W="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",H=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"GlitchMaterial",uniforms:{tDiffuse:new e.Uniform(null),tPerturb:new e.Uniform(null),active:new e.Uniform(1),amount:new e.Uniform(.8),angle:new e.Uniform(.02),seed:new e.Uniform(.02),seedX:new e.Uniform(.02),seedY:new e.Uniform(.02),distortionX:new e.Uniform(.5),distortionY:new e.Uniform(.6),colS:new e.Uniform(.05)},fragmentShader:G,vertexShader:W,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),X="uniform sampler2D tDiffuse;\r\nuniform vec3 lightPosition;\r\n\r\nuniform float exposure;\r\nuniform float decay;\r\nuniform float density;\r\nuniform float weight;\r\nuniform float clampMax;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec2 texCoord = vUv;\r\n\r\n\t// Calculate vector from pixel to light source in screen space.\r\n\tvec2 deltaTexCoord = texCoord - lightPosition.st;\r\n\tdeltaTexCoord *= 1.0 / NUM_SAMPLES_FLOAT * density;\r\n\r\n\t// A decreasing illumination factor.\r\n\tfloat illuminationDecay = 1.0;\r\n\r\n\tvec4 sample;\r\n\tvec4 color = vec4(0.0);\r\n\r\n\t// Estimate the probability of occlusion at each pixel by summing samples along a ray to the light source.\r\n\tfor(int i = 0; i < NUM_SAMPLES_INT; ++i) {\r\n\r\n\t\ttexCoord -= deltaTexCoord;\r\n\t\tsample = texture2D(tDiffuse, texCoord);\r\n\r\n\t\t// Apply sample attenuation scale/decay factors.\r\n\t\tsample *= illuminationDecay * weight;\r\n\r\n\t\tcolor += sample;\r\n\r\n\t\t// Update exponential decay factor.\r\n\t\tilluminationDecay *= decay;\r\n\r\n\t}\r\n\r\n\tgl_FragColor = clamp(color * exposure, 0.0, clampMax);\r\n\r\n}\r\n",V="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",Y=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"GodRaysMaterial",defines:{NUM_SAMPLES_FLOAT:"60.0",NUM_SAMPLES_INT:"60"},uniforms:{tDiffuse:new e.Uniform(null),lightPosition:new e.Uniform(null),exposure:new e.Uniform(.6),decay:new e.Uniform(.93),density:new e.Uniform(.96),weight:new e.Uniform(.4),clampMax:new e.Uniform(1)},fragmentShader:X,vertexShader:V,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),q="uniform sampler2D tDiffuse;\r\nuniform float distinction;\r\nuniform vec2 range;\r\nuniform vec3 luminanceCoefficients;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tfloat v = dot(texel.rgb, luminanceCoefficients);\r\n\r\n\t#ifdef RANGE\r\n\r\n\t\tfloat low = step(range.x, v);\r\n\t\tfloat high = step(v, range.y);\r\n\r\n\t\t// Apply the mask.\r\n\t\tv *= low * high;\r\n\r\n\t#endif\r\n\r\n\tv = pow(abs(v), distinction);\r\n\r\n\t#ifdef COLOR\r\n\r\n\t\tgl_FragColor = vec4(texel.rgb * v, texel.a);\r\n\r\n\t#else\r\n\r\n\t\tgl_FragColor = vec4(v, v, v, texel.a);\r\n\r\n\t#endif\r\n\r\n}\r\n",K="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",Z=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;u(this,n);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"LuminosityMaterial",uniforms:{tDiffuse:new e.Uniform(null),distinction:new e.Uniform(1),range:new e.Uniform(null!==r?r:new e.Vector2),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722))},fragmentShader:q,vertexShader:K}));return t&&(i.defines.COLOR="1"),null!==r&&(i.defines.RANGE="1"),i}return f(n,t),n}(e.ShaderMaterial),J="uniform sampler2D tDiffuse;\r\nuniform float granularity;\r\nuniform float dx;\r\nuniform float dy;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel;\r\n\r\n\tif(granularity > 0.0) {\r\n\r\n\t\tvec2 coord = vec2(\r\n\t\t\tdx * (floor(vUv.x / dx) + 0.5),\r\n\t\t\tdy * (floor(vUv.y / dy) + 0.5)\r\n\t\t);\r\n\r\n\t\ttexel = texture2D(tDiffuse, coord);\r\n\r\n\t} else {\r\n\r\n\t\ttexel = texture2D(tDiffuse, vUv);\r\n\r\n\t}\r\n\r\n\tgl_FragColor = texel;\r\n\r\n}\r\n",Q="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",_=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"PixelationMaterial",uniforms:{tDiffuse:new e.Uniform(null),granularity:new e.Uniform(1),resolution:new e.Uniform(new e.Vector2(1,1)),dx:new e.Uniform(1),dy:new e.Uniform(1)},fragmentShader:J,vertexShader:Q,depthWrite:!1,depthTest:!1}))}return f(n,t),c(n,[{key:"setResolution",value:function(e,t){this.uniforms.resolution.value.set(e,t),this.granularity=this.granularity}},{key:"granularity",get:function(){return this.uniforms.granularity.value},set:function(e){var t=this.uniforms,n=t.resolution.value;t.granularity.value=e,t.dx.value=e/n.x,t.dy.value=e/n.y}}]),n}(e.ShaderMaterial),$="#include \r\n\r\nuniform sampler2D tDiffuse;\r\nuniform vec2 center;\r\nuniform float aspect;\r\nuniform float waveSize;\r\nuniform float radius;\r\nuniform float maxRadius;\r\nuniform float amplitude;\r\n\r\nvarying vec2 vUv;\r\nvarying float vSize;\r\n\r\nvoid main() {\r\n\r\n\tvec2 aspectCorrection = vec2(aspect, 1.0);\r\n\r\n\tvec2 difference = vUv * aspectCorrection - center * aspectCorrection;\r\n\tfloat distance = sqrt(dot(difference, difference)) * vSize;\r\n\r\n\tvec2 displacement = vec2(0.0);\r\n\r\n\tif(distance > radius) {\r\n\r\n\t\tif(distance < radius + waveSize) {\r\n\r\n\t\t\tfloat angle = (distance - radius) * PI2 / waveSize;\r\n\t\t\tfloat cosSin = (1.0 - cos(angle)) * 0.5;\r\n\r\n\t\t\tfloat extent = maxRadius + waveSize;\r\n\t\t\tfloat decay = max(extent - distance * distance, 0.0) / extent;\r\n\r\n\t\t\tdisplacement = ((cosSin * amplitude * difference) / distance) * decay;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgl_FragColor = texture2D(tDiffuse, vUv - displacement);\r\n\r\n}\r\n",ee="uniform float size;\r\nuniform float scale;\r\nuniform float cameraDistance;\r\n\r\nvarying vec2 vUv;\r\nvarying float vSize;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tvSize = (0.1 * cameraDistance) / size;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",te=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return u(this,n),void 0===t.maxRadius&&(t.maxRadius=1),void 0===t.waveSize&&(t.waveSize=.2),void 0===t.amplitude&&(t.amplitude=.05),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"ShockWaveMaterial",uniforms:{tDiffuse:new e.Uniform(null),center:new e.Uniform(new e.Vector2(.5,.5)),aspect:new e.Uniform(1),cameraDistance:new e.Uniform(1),size:new e.Uniform(1),radius:new e.Uniform(-t.waveSize),maxRadius:new e.Uniform(t.maxRadius),waveSize:new e.Uniform(t.waveSize),amplitude:new e.Uniform(t.amplitude)},fragmentShader:$,vertexShader:ee,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),ne="uniform sampler2D tDiffuse;\r\nuniform sampler2D tWeights;\r\n\r\nuniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset;\r\n\r\nvoid main() {\r\n\r\n\t// Fetch the blending weights for current pixel.\r\n\tvec4 a;\r\n\ta.xz = texture2D(tWeights, vUv).xz;\r\n\ta.y = texture2D(tWeights, vOffset.zw).g;\r\n\ta.w = texture2D(tWeights, vOffset.xy).a;\r\n\r\n\tvec4 color;\r\n\r\n\t// Check if there is any blending weight with a value greater than 0.0.\r\n\tif(dot(a, vec4(1.0)) < 1e-5) {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv, 0.0);\r\n\r\n\t} else {\r\n\r\n\t\t/* Up to four lines can be crossing a pixel (one through each edge). We favor\r\n\t\t * blending by choosing the line with the maximum weight for each direction.\r\n\t\t */\r\n\r\n\t\tvec2 offset;\r\n\t\toffset.x = a.a > a.b ? a.a : -a.b; // Left vs. right.\r\n\t\toffset.y = a.g > a.r ? -a.g : a.r; // Top vs. bottom (changed signs).\r\n\r\n\t\t// Then we go in the direction that has the maximum weight (horizontal vs. vertical).\r\n\t\tif(abs(offset.x) > abs(offset.y)) {\r\n\r\n\t\t\toffset.y = 0.0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\toffset.x = 0.0;\r\n\r\n\t\t}\r\n\r\n\t\t// Fetch the opposite color and lerp by hand.\r\n\t\tcolor = texture2D(tDiffuse, vUv, 0.0);\r\n\t\tvec2 coord = vUv + sign(offset) * texelSize;\r\n\t\tvec4 oppositeColor = texture2D(tDiffuse, coord, 0.0);\r\n\t\tfloat s = abs(offset.x) > abs(offset.y) ? abs(offset.x) : abs(offset.y);\r\n\r\n\t\t// Gamma correction.\r\n\t\tcolor.rgb = pow(abs(color.rgb), vec3(2.2));\r\n\t\toppositeColor.rgb = pow(abs(oppositeColor.rgb), vec3(2.2));\r\n\t\tcolor = mix(color, oppositeColor, s);\r\n\t\tcolor.rgb = pow(abs(color.rgb), vec3(1.0 / 2.2));\r\n\r\n\t}\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",re="uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\r\n\tvOffset = uv.xyxy + texelSize.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // Changed sign in W component.\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",ie=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"SMAABlendMaterial",uniforms:{tDiffuse:new e.Uniform(null),tWeights:new e.Uniform(null),texelSize:new e.Uniform(t)},fragmentShader:ne,vertexShader:re,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),ae="uniform sampler2D tDiffuse;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\n\r\nvoid main() {\r\n\r\n\tconst vec2 THRESHOLD = vec2(EDGE_THRESHOLD);\r\n\r\n\t// Calculate color deltas.\r\n\tvec4 delta;\r\n\tvec3 c = texture2D(tDiffuse, vUv).rgb;\r\n\r\n\tvec3 cLeft = texture2D(tDiffuse, vOffset[0].xy).rgb;\r\n\tvec3 t = abs(c - cLeft);\r\n\tdelta.x = max(max(t.r, t.g), t.b);\r\n\r\n\tvec3 cTop = texture2D(tDiffuse, vOffset[0].zw).rgb;\r\n\tt = abs(c - cTop);\r\n\tdelta.y = max(max(t.r, t.g), t.b);\r\n\r\n\t// We do the usual threshold.\r\n\tvec2 edges = step(THRESHOLD, delta.xy);\r\n\r\n\t// Then discard if there is no edge.\r\n\tif(dot(edges, vec2(1.0)) == 0.0) {\r\n\r\n\t\tdiscard;\r\n\r\n\t}\r\n\r\n\t// Calculate right and bottom deltas.\r\n\tvec3 cRight = texture2D(tDiffuse, vOffset[1].xy).rgb;\r\n\tt = abs(c - cRight);\r\n\tdelta.z = max(max(t.r, t.g), t.b);\r\n\r\n\tvec3 cBottom = texture2D(tDiffuse, vOffset[1].zw).rgb;\r\n\tt = abs(c - cBottom);\r\n\tdelta.w = max(max(t.r, t.g), t.b);\r\n\r\n\t// Calculate the maximum delta in the direct neighborhood.\r\n\tfloat maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w);\r\n\r\n\t// Calculate left-left and top-top deltas.\r\n\tvec3 cLeftLeft = texture2D(tDiffuse, vOffset[2].xy).rgb;\r\n\tt = abs(c - cLeftLeft);\r\n\tdelta.z = max(max(t.r, t.g), t.b);\r\n\r\n\tvec3 cTopTop = texture2D(tDiffuse, vOffset[2].zw).rgb;\r\n\tt = abs(c - cTopTop);\r\n\tdelta.w = max(max(t.r, t.g), t.b);\r\n\r\n\t// Calculate the final maximum delta.\r\n\tmaxDelta = max(max(maxDelta, delta.z), delta.w);\r\n\r\n\t// Local contrast adaptation in action.\r\n\tedges.xy *= step(0.5 * maxDelta, delta.xy);\r\n\r\n\tgl_FragColor = vec4(edges, 0.0, 0.0);\r\n\r\n}\r\n",oe="uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\r\n\tvOffset[0] = uv.xyxy + texelSize.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // Changed sign in W component.\r\n\tvOffset[1] = uv.xyxy + texelSize.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // Changed sign in W component.\r\n\tvOffset[2] = uv.xyxy + texelSize.xyxy * vec4(-2.0, 0.0, 0.0, 2.0); // Changed sign in W component.\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",se=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"SMAAColorEdgesMaterial",defines:{EDGE_THRESHOLD:"0.1"},uniforms:{tDiffuse:new e.Uniform(null),texelSize:new e.Uniform(t)},fragmentShader:ae,vertexShader:oe,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),le="data:image/png;base64,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",ue="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=",ce="#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + float(offset) * texelSize, 0.0)\r\n\r\nuniform sampler2D tDiffuse;\r\nuniform sampler2D tArea;\r\nuniform sampler2D tSearch;\r\n\r\nuniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\nvarying vec2 vPixCoord;\r\n\r\nvec2 round(vec2 x) {\r\n\r\n\treturn sign(x) * floor(abs(x) + 0.5);\r\n\r\n}\r\n\r\nfloat searchLength(vec2 e, float bias, float scale) {\r\n\r\n\t// Not required if tSearch accesses are set to point.\r\n\t// const vec2 SEARCH_TEX_PIXEL_SIZE = 1.0 / vec2(66.0, 33.0);\r\n\t// e = vec2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE + e * vec2(scale, 1.0) * vec2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;\r\n\r\n\te.r = bias + e.r * scale;\r\n\r\n\treturn 255.0 * texture2D(tSearch, e, 0.0).r;\r\n\r\n}\r\n\r\nfloat searchXLeft(vec2 texCoord, float end) {\r\n\r\n\t/* @PSEUDO_GATHER4\r\n\t * This texCoord has been offset by (-0.25, -0.125) in the vertex shader to\r\n\t * sample between edge, thus fetching four edges in a row.\r\n\t * Sampling with different offsets in each direction allows to disambiguate\r\n\t * which edges are active from the four fetched ones.\r\n\t */\r\n\r\n\tvec2 e = vec2(0.0, 1.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord -= vec2(2.0, 0.0) * texelSize;\r\n\r\n\t\tif(!(texCoord.x > end && e.g > 0.8281 && e.r == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\t// Correct the previously applied offset (-0.25, -0.125).\r\n\ttexCoord.x += 0.25 * texelSize.x;\r\n\r\n\t// The searches are biased by 1, so adjust the coords accordingly.\r\n\ttexCoord.x += texelSize.x;\r\n\r\n\t// Disambiguate the length added by the last step.\r\n\ttexCoord.x += 2.0 * texelSize.x; // Undo last step.\r\n\ttexCoord.x -= texelSize.x * searchLength(e, 0.0, 0.5);\r\n\r\n\treturn texCoord.x;\r\n\r\n}\r\n\r\nfloat searchXRight(vec2 texCoord, float end) {\r\n\r\n\tvec2 e = vec2(0.0, 1.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord += vec2(2.0, 0.0) * texelSize;\r\n\r\n\t\tif(!(texCoord.x < end && e.g > 0.8281 && e.r == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\ttexCoord.x -= 0.25 * texelSize.x;\r\n\ttexCoord.x -= texelSize.x;\r\n\ttexCoord.x -= 2.0 * texelSize.x;\r\n\ttexCoord.x += texelSize.x * searchLength(e, 0.5, 0.5);\r\n\r\n\treturn texCoord.x;\r\n\r\n}\r\n\r\nfloat searchYUp(vec2 texCoord, float end) {\r\n\r\n\tvec2 e = vec2(1.0, 0.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord += vec2(0.0, 2.0) * texelSize; // Changed sign.\r\n\r\n\t\tif(!(texCoord.y > end && e.r > 0.8281 && e.g == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\ttexCoord.y -= 0.25 * texelSize.y; // Changed sign.\r\n\ttexCoord.y -= texelSize.y; // Changed sign.\r\n\ttexCoord.y -= 2.0 * texelSize.y; // Changed sign.\r\n\ttexCoord.y += texelSize.y * searchLength(e.gr, 0.0, 0.5); // Changed sign.\r\n\r\n\treturn texCoord.y;\r\n\r\n}\r\n\r\nfloat searchYDown(vec2 texCoord, float end) {\r\n\r\n\tvec2 e = vec2(1.0, 0.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i ) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord -= vec2(0.0, 2.0) * texelSize; // Changed sign.\r\n\r\n\t\tif(!(texCoord.y < end && e.r > 0.8281 && e.g == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\ttexCoord.y += 0.25 * texelSize.y; // Changed sign.\r\n\ttexCoord.y += texelSize.y; // Changed sign.\r\n\ttexCoord.y += 2.0 * texelSize.y; // Changed sign.\r\n\ttexCoord.y -= texelSize.y * searchLength(e.gr, 0.5, 0.5); // Changed sign.\r\n\r\n\treturn texCoord.y;\r\n\r\n}\r\n\r\nvec2 area(vec2 dist, float e1, float e2, float offset) {\r\n\r\n\t// Rounding prevents precision errors of bilinear filtering.\r\n\tvec2 texCoord = SMAA_AREATEX_MAX_DISTANCE * round(4.0 * vec2(e1, e2)) + dist;\r\n\r\n\t// Scale and bias for texel space translation.\r\n\ttexCoord = SMAA_AREATEX_PIXEL_SIZE * texCoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE);\r\n\r\n\t// Move to proper place, according to the subpixel offset.\r\n\ttexCoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;\r\n\r\n\treturn texture2D(tArea, texCoord, 0.0).rg;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec4 weights = vec4(0.0);\r\n\tvec4 subsampleIndices = vec4(0.0);\r\n\tvec2 e = texture2D(tDiffuse, vUv).rg;\r\n\r\n\tif(e.g > 0.0) {\r\n\r\n\t\t// Edge at north.\r\n\t\tvec2 d;\r\n\r\n\t\t// Find the distance to the left.\r\n\t\tvec2 coords;\r\n\t\tcoords.x = searchXLeft(vOffset[0].xy, vOffset[2].x);\r\n\t\tcoords.y = vOffset[1].y; // vOffset[1].y = vUv.y - 0.25 * texelSize.y (@CROSSING_OFFSET)\r\n\t\td.x = coords.x;\r\n\r\n\t\t/* Now fetch the left crossing edges, two at a time using bilinear filtering.\r\n\t\tSampling at -0.25 (see @CROSSING_OFFSET) enables to discern what value each edge has. */\r\n\r\n\t\tfloat e1 = texture2D(tDiffuse, coords, 0.0).r;\r\n\r\n\t\t// Find the distance to the right.\r\n\t\tcoords.x = searchXRight(vOffset[0].zw, vOffset[2].y);\r\n\t\td.y = coords.x;\r\n\r\n\t\t// Translate distances to pixel units for better interleave arithmetic and memory accesses.\r\n\t\td = d / texelSize.x - vPixCoord.x;\r\n\r\n\t\t// The area below needs a sqrt, as the areas texture is compressed quadratically.\r\n\t\tvec2 sqrtD = sqrt(abs(d));\r\n\r\n\t\t// Fetch the right crossing edges.\r\n\t\tcoords.y -= texelSize.y; // WebGL port note: Added.\r\n\t\tfloat e2 = sampleLevelZeroOffset(tDiffuse, coords, ivec2(1, 0)).r;\r\n\r\n\t\t// Pattern recognised, now get the actual area.\r\n\t\tweights.rg = area(sqrtD, e1, e2, subsampleIndices.y);\r\n\r\n\t}\r\n\r\n\tif(e.r > 0.0) {\r\n\r\n\t\t// Edge at west.\r\n\t\tvec2 d;\r\n\r\n\t\t// Find the distance to the top.\r\n\t\tvec2 coords;\r\n\r\n\t\tcoords.y = searchYUp(vOffset[1].xy, vOffset[2].z);\r\n\t\tcoords.x = vOffset[0].x; // vOffset[1].x = vUv.x - 0.25 * texelSize.x;\r\n\t\td.x = coords.y;\r\n\r\n\t\t// Fetch the top crossing edges.\r\n\t\tfloat e1 = texture2D(tDiffuse, coords, 0.0).g;\r\n\r\n\t\t// Find the distance to the bottom.\r\n\t\tcoords.y = searchYDown(vOffset[1].zw, vOffset[2].w);\r\n\t\td.y = coords.y;\r\n\r\n\t\t// Distances in pixel units.\r\n\t\td = d / texelSize.y - vPixCoord.y;\r\n\r\n\t\t// The area below needs a sqrt, as the areas texture is compressed quadratically.\r\n\t\tvec2 sqrtD = sqrt(abs(d));\r\n\r\n\t\t// Fetch the bottom crossing edges.\r\n\t\tcoords.y -= texelSize.y; // WebGL port note: Added.\r\n\t\tfloat e2 = sampleLevelZeroOffset(tDiffuse, coords, ivec2(0, 1)).g;\r\n\r\n\t\t// Get the area for this direction.\r\n\t\tweights.ba = area(sqrtD, e1, e2, subsampleIndices.x);\r\n\r\n\t}\r\n\r\n\tgl_FragColor = weights;\r\n\r\n}\r\n",de="uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\nvarying vec2 vPixCoord;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\r\n\tvPixCoord = uv / texelSize;\r\n\r\n\t// Offsets for the searches (see @PSEUDO_GATHER4).\r\n\tvOffset[0] = uv.xyxy + texelSize.xyxy * vec4(-0.25, 0.125, 1.25, 0.125); // Changed sign in Y and W components.\r\n\tvOffset[1] = uv.xyxy + texelSize.xyxy * vec4(-0.125, 0.25, -0.125, -1.25); //Changed sign in Y and W components.\r\n\r\n\t// This indicates the ends of the loops.\r\n\tvOffset[2] = vec4(vOffset[0].xz, vOffset[1].yw) + vec4(-2.0, 2.0, -2.0, 2.0) * texelSize.xxyy * SMAA_MAX_SEARCH_STEPS_FLOAT;\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",fe=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"SMAAWeightsMaterial",defines:{SMAA_MAX_SEARCH_STEPS_INT:"8",SMAA_MAX_SEARCH_STEPS_FLOAT:"8.0",SMAA_AREATEX_MAX_DISTANCE:"16.0",SMAA_AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",SMAA_AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)"},uniforms:{tDiffuse:new e.Uniform(null),tArea:new e.Uniform(null),tSearch:new e.Uniform(null),texelSize:new e.Uniform(t)},fragmentShader:ce,vertexShader:de,depthWrite:!1,depthTest:!1}));return r.areaImage=le,r.searchImage=ue,r}return f(n,t),n}(e.ShaderMaterial),ve="uniform sampler2D tDiffuse;\r\nuniform float middleGrey;\r\nuniform float maxLuminance;\r\nuniform vec3 luminanceCoefficients;\r\n\r\n#ifdef ADAPTED_LUMINANCE\r\n\r\n\tuniform sampler2D luminanceMap;\r\n\r\n#else\r\n\r\n\tuniform float averageLuminance;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\nvec3 toneMap(vec3 c) {\r\n\r\n\t#ifdef ADAPTED_LUMINANCE\r\n\r\n\t\t// Get the calculated average luminance by sampling the center.\r\n\t\tfloat lumAvg = texture2D(luminanceMap, vec2(0.5)).r;\r\n\r\n\t#else\r\n\r\n\t\tfloat lumAvg = averageLuminance;\r\n\r\n\t#endif\r\n\r\n\t// Calculate the luminance of the current pixel.\r\n\tfloat lumPixel = dot(c, luminanceCoefficients);\r\n\r\n\t// Apply the modified operator (Reinhard Eq. 4).\r\n\tfloat lumScaled = (lumPixel * middleGrey) / lumAvg;\r\n\r\n\tfloat lumCompressed = (lumScaled * (1.0 + (lumScaled / (maxLuminance * maxLuminance)))) / (1.0 + lumScaled);\r\n\r\n\treturn lumCompressed * c;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tgl_FragColor = vec4(toneMap(texel.rgb), texel.a);\r\n\r\n}\r\n",he="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",me=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"ToneMappingMaterial",uniforms:{tDiffuse:new e.Uniform(null),luminanceMap:new e.Uniform(null),averageLuminance:new e.Uniform(1),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722)),maxLuminance:new e.Uniform(16),middleGrey:new e.Uniform(.6)},fragmentShader:ve,vertexShader:he,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),pe=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Scene,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new e.OrthographicCamera(-1,1,1,-1,0,1),i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new e.Mesh(new e.PlaneBufferGeometry(2,2),null);u(this,t),this.name="Pass",this.scene=n,this.camera=r,this.quad=i,null!==this.quad&&(this.quad.frustumCulled=!1,null!==this.scene&&this.scene.add(this.quad)),this.needsSwap=!1,this.enabled=!0,this.renderToScreen=!1}return c(t,[{key:"render",value:function(e,t,n,r,i){throw new Error("Render method not implemented!")}},{key:"setSize",value:function(e,t){}},{key:"initialise",value:function(e,t){}},{key:"dispose",value:function(){var e=Object.keys(this),t=void 0,n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0)null!==this[t=a.value]&&"function"==typeof this[t].dispose&&(this[t].dispose(),this[t]=null)}catch(e){r=!0,i=e}finally{try{!n&&o.return&&o.return()}finally{if(r)throw i}}}}]),t}(),ge=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.name="BlurPass",r.needsSwap=!0,r.renderTargetX=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),r.renderTargetX.texture.name="Blur.TargetX",r.renderTargetX.texture.generateMipmaps=!1,r.renderTargetY=r.renderTargetX.clone(),r.renderTargetY.texture.name="Blur.TargetY",r.resolutionScale=void 0!==t.resolutionScale?t.resolutionScale:.5,r.convolutionMaterial=new T,r.kernelSize=t.kernelSize,r.quad.material=r.convolutionMaterial,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){var r=this.scene,i=this.camera,a=this.renderTargetX,o=this.renderTargetY,s=this.convolutionMaterial,l=s.uniforms,u=s.getKernel(),c=t,d=void 0,f=void 0,v=void 0;for(f=0,v=u.length-1;f0&&void 0!==arguments[0]?arguments[0]:C.LARGE;this.convolutionMaterial.kernelSize=e}}]),n}(),xe=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.name="BloomPass",r.needsSwap=!0,r.blurPass=new ge(t),r.renderTarget=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),r.renderTarget.texture.name="Bloom.Target",r.renderTarget.texture.generateMipmaps=!1,r.combineMaterial=new S(void 0===t.screenMode||t.screenMode),r.intensity=t.intensity,r.luminosityMaterial=new Z(!0),r.distinction=t.distinction,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){var r=this.quad,i=this.scene,a=this.camera,o=this.blurPass,s=this.luminosityMaterial,l=this.combineMaterial,u=this.renderTarget;r.material=s,s.uniforms.tDiffuse.value=t.texture,e.render(i,a,u),o.render(e,u,u),r.material=l,l.uniforms.texture1.value=t.texture,l.uniforms.texture2.value=u.texture,e.render(i,a,this.renderToScreen?null:n)}},{key:"initialise",value:function(t,n){this.blurPass.initialise(t,n),n||(this.renderTarget.texture.format=e.RGBFormat)}},{key:"setSize",value:function(e,t){this.blurPass.setSize(e,t),e=this.blurPass.width,t=this.blurPass.height,this.renderTarget.setSize(e,t)}},{key:"resolutionScale",get:function(){return this.blurPass.resolutionScale},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.5;this.blurPass.resolutionScale=e}},{key:"kernelSize",get:function(){return this.blurPass.kernelSize},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:C.LARGE;this.blurPass.kernelSize=e}},{key:"intensity",get:function(){return this.combineMaterial.uniforms.opacity2.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.combineMaterial.uniforms.opacity2.value=e}},{key:"distinction",get:function(){return this.luminosityMaterial.uniforms.distinction.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.luminosityMaterial.uniforms.distinction.value=e}}]),n}(),ye=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name="BokehPass",r.needsSwap=!0,r.bokehMaterial=new g(e,n),r.quad.material=r.bokehMaterial,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.bokehMaterial.uniforms.tDiffuse.value=t.texture,this.bokehMaterial.uniforms.tDepth.value=t.depthTexture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.bokehMaterial.uniforms.aspect.value=e/t}}]),t}(),Me=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name="Bokeh2Pass",r.needsSwap=!0,r.bokehMaterial=new M(e,n),r.quad.material=r.bokehMaterial,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.bokehMaterial.uniforms.tDiffuse.value=t.texture,this.bokehMaterial.uniforms.tDepth.value=t.depthTexture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.bokehMaterial.setTexelSize(1/e,1/t)}}]),t}(),we=function(e){function t(){u(this,t);var e=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,null,null,null));return e.name="ClearMaskPass",e}return f(t,pe),c(t,[{key:"render",value:function(e){e.state.buffers.stencil.setTest(!1)}}]),t}(),be=new e.Color,Se=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,null,null,null));return n.name="ClearPass",n.clearColor=void 0!==e.clearColor?e.clearColor:null,n.clearAlpha=void 0!==e.clearAlpha?e.clearAlpha:0,n}return f(t,pe),c(t,[{key:"render",value:function(e,t){var n=this.clearColor,r=void 0;null!==n&&(be.copy(e.getClearColor()),r=e.getClearAlpha(),e.setClearColor(n,this.clearAlpha)),e.setRenderTarget(this.renderToScreen?null:t),e.clear(),null!==n&&e.setClearColor(be,r)}}]),t}(),De=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="DotScreenPass",n.needsSwap=!0,n.material=new j(e.average),void 0!==e.angle&&(n.material.uniforms.angle.value=e.angle),void 0!==e.scale&&(n.material.uniforms.scale.value=e.scale),void 0!==e.intensity&&(n.material.uniforms.intensity.value=e.intensity),n.quad.material=n.material,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.material.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){e=Math.max(1,e),t=Math.max(1,t),this.material.uniforms.offsetRepeat.value.z=e,this.material.uniforms.offsetRepeat.value.w=t}}]),t}(),Pe=function(e){function t(e){u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="DepthPass",n.needsSwap=!0,n.depthMaterial=new z(e),n.quad.material=n.depthMaterial,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.depthMaterial.uniforms.tDepth.value=t.depthTexture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}}]),t}(),Te=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="FilmPass",n.needsSwap=!0,n.material=new I(e),n.quad.material=n.material,n.scanlineDensity=void 0===e.scanlineDensity?1.25:e.scanlineDensity,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n,r){this.material.uniforms.tDiffuse.value=t.texture,this.material.uniforms.time.value+=r,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.material.uniforms.scanlineCount.value=Math.round(t*this.scanlineDensity)}}]),t}(),Ae=function(t){function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.name="GlitchPass",t.needsSwap=!0,t.material=new H,t.quad.material=t.material,t.texture=null,t.perturbMap=void 0!==e.perturbMap?e.perturbMap:t.generatePerturbMap(e.dtSize),t.perturbMap.name="Glitch.Perturbation",t.perturbMap.generateMipmaps=!1,t.mode=Ce.SPORADIC,t.counter=0,t.breakPoint=r(120,240),t}return f(n,pe),c(n,[{key:"generatePerturbMap",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:64,n=t*t,r=new Float32Array(3*n),i=this.perturbMap,a=void 0,o=void 0;for(a=0;a2&&void 0!==arguments[2]?arguments[2]:{};u(this,t);var i=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,null));return i.name="RenderPass",i.clearPass=new Se(r),i.overrideMaterial=void 0!==r.overrideMaterial?r.overrideMaterial:null,i.clearDepth=void 0!==r.clearDepth&&r.clearDepth,i.clear=void 0===r.clear||r.clear,i}return f(t,pe),c(t,[{key:"render",value:function(e,t){var n=this.scene,r=this.renderToScreen?null:t;this.clear?this.clearPass.render(e,r):this.clearDepth&&(e.setRenderTarget(r),e.clearDepth()),n.overrideMaterial=this.overrideMaterial,e.render(n,this.camera,r),n.overrideMaterial=null}}]),t}(),Le=function(t){function n(t,r,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};u(this,n);var o=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return o.name="GodRaysPass",o.needsSwap=!0,o.lightScene=new e.Scene,o.mainScene=t,o.mainCamera=r,o.renderPassLight=new Oe(o.lightScene,o.mainCamera),o.renderPassMask=new Oe(o.mainScene,o.mainCamera,{overrideMaterial:new e.MeshBasicMaterial({color:0}),clearColor:new e.Color(0)}),o.renderPassMask.clear=!1,o.blurPass=new ge(a),o.renderTargetX=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),o.renderTargetX.texture.name="GodRays.TargetX",o.renderTargetX.texture.generateMipmaps=!1,o.renderTargetY=o.renderTargetX.clone(),o.renderTargetY.texture.name="GodRays.TargetY",o.renderTargetMask=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter}),o.renderTargetMask.texture.name="GodRays.Mask",o.renderTargetMask.texture.generateMipmaps=!1,o.lightSource=i,o.screenPosition=new e.Vector3,o.godRaysMaterial=new Y,o.godRaysMaterial.uniforms.lightPosition.value=o.screenPosition,void 0!==a.exposure&&(o.godRaysMaterial.uniforms.exposure.value=a.exposure),void 0!==a.density&&(o.godRaysMaterial.uniforms.density.value=a.density),void 0!==a.decay&&(o.godRaysMaterial.uniforms.decay.value=a.decay),void 0!==a.weight&&(o.godRaysMaterial.uniforms.weight.value=a.weight),void 0!==a.clampMax&&(o.godRaysMaterial.uniforms.clampMax.value=a.clampMax),o.samples=a.samples,o.combineMaterial=new S(void 0===a.screenMode||a.screenMode),o.intensity=a.intensity,o}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){var r=this.quad,i=this.scene,o=this.camera,s=this.mainScene,l=this.lightSource,u=this.screenPosition,c=this.godRaysMaterial,d=this.combineMaterial,f=this.renderTargetMask,v=this.renderTargetX,h=this.renderTargetY,m=void 0,p=void 0;u.copy(l.position).project(this.mainCamera),u.x=a(.5*(u.x+1),0,1),u.y=a(.5*(u.y+1),0,1),p=l.parent,m=s.background,s.background=null,this.lightScene.add(l),this.renderPassLight.render(e,f),this.renderPassMask.render(e,f),null!==p&&p.add(l),s.background=m,this.blurPass.render(e,f,v),r.material=c,c.uniforms.tDiffuse.value=v.texture,e.render(i,o,h),r.material=d,d.uniforms.texture1.value=t.texture,d.uniforms.texture2.value=h.texture,e.render(i,o,this.renderToScreen?null:n)}},{key:"initialise",value:function(t,n){this.renderPassLight.initialise(t,n),this.renderPassMask.initialise(t,n),this.blurPass.initialise(t,n),n||(this.renderTargetMask.texture.format=e.RGBFormat,this.renderTargetX.texture.format=e.RGBFormat,this.renderTargetY.texture.format=e.RGBFormat)}},{key:"setSize",value:function(e,t){this.renderPassLight.setSize(e,t),this.renderPassMask.setSize(e,t),this.blurPass.setSize(e,t),e=this.blurPass.width,t=this.blurPass.height,this.renderTargetMask.setSize(e,t),this.renderTargetX.setSize(e,t),this.renderTargetY.setSize(e,t)}},{key:"resolutionScale",get:function(){return this.blurPass.resolutionScale},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.5;this.blurPass.resolutionScale=e}},{key:"kernelSize",get:function(){return this.blurPass.kernelSize},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:C.LARGE;this.blurPass.kernelSize=e}},{key:"intensity",get:function(){return this.combineMaterial.uniforms.opacity2.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.combineMaterial.uniforms.opacity2.value=e}},{key:"samples",get:function(){return Number.parseInt(this.godRaysMaterial.defines.NUM_SAMPLES_INT)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:60;e=Math.floor(e),this.godRaysMaterial.defines.NUM_SAMPLES_FLOAT=e.toFixed(1),this.godRaysMaterial.defines.NUM_SAMPLES_INT=e.toFixed(0),this.godRaysMaterial.needsUpdate=!0}}]),n}(),Ee=function(e){function t(e,n){u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,null));return r.name="MaskPass",r.inverse=!1,r.clearStencil=!0,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){var r=e.context,i=e.state,a=this.scene,o=this.camera,s=this.inverse?0:1,l=1-s;i.buffers.color.setMask(!1),i.buffers.depth.setMask(!1),i.buffers.color.setLocked(!0),i.buffers.depth.setLocked(!0),i.buffers.stencil.setTest(!0),i.buffers.stencil.setOp(r.REPLACE,r.REPLACE,r.REPLACE),i.buffers.stencil.setFunc(r.ALWAYS,s,4294967295),i.buffers.stencil.setClear(l),this.clearStencil&&(e.setRenderTarget(t),e.clearStencil(),e.setRenderTarget(n),e.clearStencil()),e.render(a,o,t),e.render(a,o,n),i.buffers.color.setLocked(!1),i.buffers.depth.setLocked(!1),i.buffers.stencil.setFunc(r.EQUAL,1,4294967295),i.buffers.stencil.setOp(r.KEEP,r.KEEP,r.KEEP)}}]),t}(),ke=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:30;u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="PixelationPass",n.needsSwap=!0,n.pixelationMaterial=new _,n.granularity=e,n.quad.material=n.pixelationMaterial,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.pixelationMaterial.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.pixelationMaterial.setResolution(e,t)}},{key:"granularity",get:function(){return this.pixelationMaterial.granularity},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:30;(e=Math.floor(e))%2>0&&(e+=1),this.pixelationMaterial.granularity=e}}]),t}(),Ue=function(t){function n(t){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];u(this,n);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return i.name="SavePass",i.material=new E,i.quad.material=i.material,i.renderTarget=void 0!==t?t:new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),i.renderTarget.texture.name="Save.Target",i.renderTarget.texture.generateMipmaps=!1,i.resize=r,i}return f(n,pe),c(n,[{key:"render",value:function(e,t){this.material.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderTarget)}},{key:"initialise",value:function(t,n){n||(this.renderTarget.texture.format=e.RGBFormat)}},{key:"setSize",value:function(e,t){this.resize&&(e=Math.max(1,e),t=Math.max(1,t),this.renderTarget.setSize(e,t))}}]),n}(),ze=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"tDiffuse";u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name="ShaderPass",r.needsSwap=!0,r.material=e,r.quad.material=r.material,r.textureID=n,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){void 0!==this.material.uniforms[this.textureID]&&(this.material.uniforms[this.textureID].value=t.texture),e.render(this.scene,this.camera,this.renderToScreen?null:n)}}]),t}(),Fe=.5*Math.PI,Ne=new e.Vector3,je=new e.Vector3,Be=function(t){function n(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new e.Vector3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};u(this,n);var a=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return a.name="ShockWavePass",a.needsSwap=!0,a.mainCamera=t,a.epicenter=r,a.screenPosition=new e.Vector3,a.speed=void 0!==i.speed?i.speed:2,a.time=0,a.active=!1,a.shockWaveMaterial=new te(i),a.shockWaveMaterial.uniforms.center.value=a.screenPosition,a.copyMaterial=new E,a}return f(n,pe),c(n,[{key:"explode",value:function(){this.time=0,this.active=!0}},{key:"render",value:function(e,t,n,r){var i=this.epicenter,a=this.mainCamera,o=this.screenPosition,s=this.shockWaveMaterial,l=s.uniforms,u=l.center,c=l.radius,d=l.maxRadius,f=l.waveSize;this.copyMaterial.uniforms.tDiffuse.value=t.texture,this.quad.material=this.copyMaterial,this.active&&(a.getWorldDirection(Ne),je.copy(a.position).sub(i),Ne.angleTo(je)>Fe&&(l.cameraDistance.value=a.position.distanceTo(i),o.copy(i).project(a),u.value.x=.5*(o.x+1),u.value.y=.5*(o.y+1),l.tDiffuse.value=t.texture,this.quad.material=s),this.time+=r*this.speed,c.value=this.time-f.value,c.value>=2*(d.value+f.value)&&(this.active=!1)),e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.shockWaveMaterial.uniforms.aspect.value=e/t}}]),n}(),Re=function(t){function n(t){u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));r.name="SMAAPass",r.needsSwap=!0,r.renderTargetColorEdges=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,format:e.RGBFormat,stencilBuffer:!1,depthBuffer:!1}),r.renderTargetColorEdges.texture.name="SMAA.ColorEdges",r.renderTargetColorEdges.texture.generateMipmaps=!1,r.renderTargetWeights=r.renderTargetColorEdges.clone(),r.renderTargetWeights.texture.name="SMAA.Weights",r.renderTargetWeights.texture.format=e.RGBAFormat,r.colorEdgesMaterial=new se,r.weightsMaterial=new fe;var i=new t;i.src=r.weightsMaterial.areaImage;var a=new e.Texture;a.image=i,a.name="SMAA.Area",a.minFilter=e.LinearFilter,a.format=e.RGBFormat,a.generateMipmaps=!1,a.needsUpdate=!0,a.flipY=!1;var o=new t;o.src=r.weightsMaterial.searchImage;var s=new e.Texture;return s.image=o,s.name="SMAA.Search",s.magFilter=e.NearestFilter,s.minFilter=e.NearestFilter,s.generateMipmaps=!1,s.needsUpdate=!0,s.flipY=!1,r.weightsMaterial.uniforms.tDiffuse.value=r.renderTargetColorEdges.texture,r.weightsMaterial.uniforms.tArea.value=a,r.weightsMaterial.uniforms.tSearch.value=s,r.blendMaterial=new ie,r.blendMaterial.uniforms.tWeights.value=r.renderTargetWeights.texture,r.quad.material=r.blendMaterial,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){this.quad.material=this.colorEdgesMaterial,this.colorEdgesMaterial.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderTargetColorEdges,!0),this.quad.material=this.weightsMaterial,e.render(this.scene,this.camera,this.renderTargetWeights,!1),this.quad.material=this.blendMaterial,this.blendMaterial.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.renderTargetColorEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t),this.colorEdgesMaterial.uniforms.texelSize.value.copy(this.weightsMaterial.uniforms.texelSize.value.copy(this.blendMaterial.uniforms.texelSize.value.set(1/e,1/t)))}}]),n}(),Ie=function(t){function n(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;u(this,n);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return i.name="TexturePass",i.copyMaterial=new E,i.copyMaterial.blending=e.AdditiveBlending,i.copyMaterial.transparent=!0,i.texture=t,i.opacity=r,i.quad.material=i.copyMaterial,i}return f(n,pe),c(n,[{key:"render",value:function(e,t){e.render(this.scene,this.camera,this.renderToScreen?null:t)}},{key:"texture",get:function(){return this.copyMaterial.uniforms.tDiffuse.value},set:function(e){this.copyMaterial.uniforms.tDiffuse.value=e}},{key:"opacity",get:function(){return this.copyMaterial.uniforms.opacity.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.copyMaterial.uniforms.opacity.value=e}}]),n}(),Ge=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.name="ToneMappingPass",r.needsSwap=!0,r.renderTargetLuminosity=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearMipMapLinearFilter,magFilter:e.LinearFilter,format:e.RGBFormat,stencilBuffer:!1,depthBuffer:!1}),r.renderTargetLuminosity.texture.name="ToneMapping.Luminosity",r.renderTargetAdapted=r.renderTargetLuminosity.clone(),r.renderTargetAdapted.texture.name="ToneMapping.AdaptedLuminosity",r.renderTargetAdapted.texture.generateMipmaps=!1,r.renderTargetAdapted.texture.minFilter=e.LinearFilter,r.renderTargetPrevious=r.renderTargetAdapted.clone(),r.renderTargetPrevious.texture.name="ToneMapping.PreviousLuminosity",r.copyMaterial=new E,r.luminosityMaterial=new Z,r.luminosityMaterial.uniforms.distinction.value=void 0!==t.distinction?t.distinction:1,r.adaptiveLuminosityMaterial=new h,r.resolution=t.resolution,r.toneMappingMaterial=new me,r.adaptive=t.adaptive,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n,r){var i=this.quad,a=this.scene,o=this.camera,s=this.adaptiveLuminosityMaterial,l=this.luminosityMaterial,u=this.toneMappingMaterial,c=this.copyMaterial,d=this.renderTargetPrevious,f=this.renderTargetLuminosity,v=this.renderTargetAdapted;this.adaptive&&(i.material=l,l.uniforms.tDiffuse.value=t.texture,e.render(a,o,f),i.material=s,s.uniforms.delta.value=r,s.uniforms.tPreviousLum.value=d.texture,s.uniforms.tCurrentLum.value=f.texture,e.render(a,o,v),i.material=c,c.uniforms.tDiffuse.value=v.texture,e.render(a,o,d)),i.material=u,u.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"initialise",value:function(t){this.quad.material=new e.MeshBasicMaterial({color:8388607}),t.render(this.scene,this.camera,this.renderTargetPrevious),this.quad.material.dispose()}},{key:"resolution",get:function(){return this.renderTargetLuminosity.width},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:256;e=o(e),this.renderTargetLuminosity.setSize(e,e),this.renderTargetPrevious.setSize(e,e),this.renderTargetAdapted.setSize(e,e),this.adaptiveLuminosityMaterial.defines.MIP_LEVEL_1X1=(Math.round(Math.log(e))/Math.log(2)).toFixed(1),this.adaptiveLuminosityMaterial.needsUpdate=!0}},{key:"adaptive",get:function(){return void 0!==this.toneMappingMaterial.defines.ADAPTED_LUMINANCE},set:function(){!(arguments.length>0&&void 0!==arguments[0])||arguments[0]?(this.toneMappingMaterial.defines.ADAPTED_LUMINANCE="1",this.toneMappingMaterial.uniforms.luminanceMap.value=this.renderTargetAdapted.texture):(delete this.toneMappingMaterial.defines.ADAPTED_LUMINANCE,this.toneMappingMaterial.uniforms.luminanceMap.value=null),this.toneMappingMaterial.needsUpdate=!0}}]),n}(),We=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,t),this.renderer=e,this.readBuffer=null,this.writeBuffer=null,null!==this.renderer&&(this.renderer.autoClear=!1,this.readBuffer=this.createBuffer(void 0===n.depthBuffer||n.depthBuffer,void 0!==n.stencilBuffer&&n.stencilBuffer,void 0!==n.depthTexture&&n.depthTexture),this.writeBuffer=this.readBuffer.clone()),this.copyPass=new ze(new E),this.passes=[]}return c(t,[{key:"replaceRenderer",value:function(e){var t=this.renderer,n=void 0,r=void 0,i=void 0;return null!==t&&t!==e&&(this.renderer=e,this.renderer.autoClear=!1,n=t.domElement.parentNode,r=t.getSize(),i=e.getSize(),null!==n&&(n.removeChild(t.domElement),n.appendChild(e.domElement)),r.width===i.width&&r.height===i.height||this.setSize()),t}},{key:"createBuffer",value:function(t,n,r){var i=this.renderer.getSize(),a=this.renderer.getPixelRatio(),o=this.renderer.context.getContextAttributes().alpha,s=new e.WebGLRenderTarget(i.width*a,i.height*a,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,format:o?e.RGBAFormat:e.RGBFormat,depthBuffer:t,stencilBuffer:n,depthTexture:r?new e.DepthTexture:null});return r&&n&&(s.depthTexture.format=e.DepthStencilFormat,s.depthTexture.type=e.UnsignedInt248Type),s.texture.name="EffectComposer.Buffer",s.texture.generateMipmaps=!1,s}},{key:"addPass",value:function(e,t){var n=this.renderer,r=n.getSize(),i=n.getPixelRatio();e.setSize(r.width*i,r.height*i),e.initialise(n,n.context.getContextAttributes().alpha),void 0!==t?this.passes.splice(t,0,e):this.passes.push(e)}},{key:"removePass",value:function(e){this.passes.splice(this.passes.indexOf(e),1)}},{key:"render",value:function(e){var t=this.passes,n=this.renderer,r=this.copyPass,i=this.readBuffer,a=this.writeBuffer,o=!1,s=void 0,l=void 0,u=void 0,c=void 0,d=void 0;for(c=0,d=t.length;c0;)t.pop().dispose();void 0!==e?(this.readBuffer=e,this.writeBuffer=this.readBuffer.clone()):this.copyPass.dispose()}},{key:"depthTexture",get:function(){return this.readBuffer.depthTexture},set:function(e){this.readBuffer.depthTexture=e,this.writeBuffer.depthTexture=e}}]),t}(),He=function(){function t(n){u(this,t),this.composer=n,this.loadingManager=new e.LoadingManager,this.assets=null,this.scene=new e.Scene,this.scene.fog=new e.FogExp2(855309,.0025),this.camera=new e.PerspectiveCamera(50,window.innerWidth/window.innerHeight,.1,2e3),this.controls=null}return c(t,[{key:"load",value:function(e){e()}},{key:"initialise",value:function(){}},{key:"update",value:function(e){}},{key:"configure",value:function(e){}},{key:"reset",value:function(){var t=this.scene.fog;return this.scene=new e.Scene,this.scene.fog=t,null!==this.controls&&(this.controls.dispose(),this.controls=null),this}}]),t}(),Xe=2*Math.PI,Ve=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.bloomPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space2/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-10,6,15),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(c=0;c<100;++c)u=new e.MeshPhongMaterial({color:16777215*Math.random(),shading:e.FlatShading}),(d=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),d.position.multiplyScalar(4*Math.random()),d.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),d.scale.multiplyScalar(.5*Math.random()),s.add(d);this.object=s,t.add(s),d=new e.Mesh(new e.BoxBufferGeometry(.25,8.25,.25),new e.MeshLambertMaterial({color:723723}));var f=void 0,v=void 0,h=void 0;f=(s=new e.Object3D).clone();var m=d.clone();m.position.set(-4,0,4),f.add(m),(m=d.clone()).position.set(4,0,4),f.add(m),(m=d.clone()).position.set(-4,0,-4),f.add(m),(m=d.clone()).position.set(4,0,-4),f.add(m),(v=f.clone()).rotation.set(Math.PI/2,0,0),(h=f.clone()).rotation.set(0,0,Math.PI/2),s.add(f),s.add(v),s.add(h),t.add(s),i.addPass(new Oe(t,n));var p=new xe({resolutionScale:.5,intensity:2,distinction:4});p.renderToScreen=!0,this.bloomPass=p,i.addPass(p)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=Xe&&(t.rotation.x-=Xe),t.rotation.y>=Xe&&(t.rotation.y-=Xe))}},{key:"configure",value:function(e){var t=this.composer,n=this.bloomPass,r={resolution:n.resolutionScale,"kernel size":n.kernelSize,intensity:n.intensity,distinction:n.distinction,blend:!0,"blend mode":"screen"};e.add(r,"resolution").min(0).max(1).step(.01).onChange(function(){n.resolutionScale=r.resolution,t.setSize()}),e.add(r,"kernel size").min(C.VERY_SMALL).max(C.HUGE).step(1).onChange(function(){n.kernelSize=r["kernel size"]}),e.add(r,"intensity").min(0).max(3).step(.01).onChange(function(){n.intensity=r.intensity});var i=e.addFolder("Luminance");i.add(r,"distinction").min(1).max(10).step(.1).onChange(function(){n.distinction=r.distinction}),i.open(),e.add(r,"blend").onChange(function(){n.combineMaterial.uniforms.opacity1.value=r.blend?1:0}),e.add(r,"blend mode",["add","screen"]).onChange(function(){"add"===r["blend mode"]?delete n.combineMaterial.defines.SCREEN_MODE:n.combineMaterial.defines.SCREEN_MODE="1",n.combineMaterial.needsUpdate=!0})}}]),n}(),Ye=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.bokehPass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),this.controls.enablePan=!1,this.controls.minDistance=2.5,this.controls.maxDistance=40,n.near=.01,n.far=50,n.position.set(3,1,3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.SphereBufferGeometry(1,64,64),l=new e.MeshBasicMaterial({color:16776960,envMap:r.get("sky")}),u=new e.Mesh(s,l);t.add(u),i.addPass(new Oe(t,n));var c=new ye(n,{focus:.36,aperture:.007,maxBlur:.025});c.renderToScreen=!0,this.bokehPass=c,i.addPass(c)}},{key:"configure",value:function(e){var t=this.bokehPass,n={focus:t.bokehMaterial.uniforms.focus.value,aperture:t.bokehMaterial.uniforms.aperture.value,blur:t.bokehMaterial.uniforms.maxBlur.value};e.add(n,"focus").min(0).max(1).step(.001).onChange(function(){t.bokehMaterial.uniforms.focus.value=n.focus}),e.add(n,"aperture").min(0).max(.05).step(1e-4).onChange(function(){t.bokehMaterial.uniforms.aperture.value=n.aperture}),e.add(n,"blur").min(0).max(.1).step(.001).onChange(function(){t.bokehMaterial.uniforms.maxBlur.value=n.blur})}}]),n}(),qe=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.bokehPass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),this.controls.enablePan=!1,this.controls.minDistance=2.5,this.controls.maxDistance=40,n.near=.01,n.far=50,n.position.set(3,1,3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.SphereBufferGeometry(1,64,64),l=new e.MeshBasicMaterial({color:16776960,envMap:r.get("sky")}),u=new e.Mesh(s,l);t.add(u),i.addPass(new Oe(t,n));var c=new Me(n,{rings:3,samples:2,showFocus:!1,manualDoF:!1,vignette:!1,pentagon:!1,shaderFocus:!0,noise:!0});c.bokehMaterial.uniforms.focalStop.value=64,c.renderToScreen=!0,this.bokehPass=c,i.addPass(c)}},{key:"configure",value:function(e){var t=this.bokehPass,n={rings:Number.parseInt(t.bokehMaterial.defines.RINGS_INT),samples:Number.parseInt(t.bokehMaterial.defines.SAMPLES_INT),"focal stop":t.bokehMaterial.uniforms.focalStop.value,"focal length":t.bokehMaterial.uniforms.focalLength.value,"shader focus":void 0!==t.bokehMaterial.defines.SHADER_FOCUS,"focal depth":t.bokehMaterial.uniforms.focalDepth.value,"focus coord X":t.bokehMaterial.uniforms.focusCoords.value.x,"focus coord Y":t.bokehMaterial.uniforms.focusCoords.value.y,"max blur":t.bokehMaterial.uniforms.maxBlur.value,"lum threshold":t.bokehMaterial.uniforms.luminanceThreshold.value,"lum gain":t.bokehMaterial.uniforms.luminanceGain.value,bias:t.bokehMaterial.uniforms.bias.value,fringe:t.bokehMaterial.uniforms.fringe.value,dithering:t.bokehMaterial.uniforms.ditherStrength.value,vignette:void 0!==t.bokehMaterial.defines.VIGNETTE,pentagon:void 0!==t.bokehMaterial.defines.PENTAGON,"manual DoF":void 0!==t.bokehMaterial.defines.MANUAL_DOF,"show focus":void 0!==t.bokehMaterial.defines.SHOW_FOCUS,noise:void 0!==t.bokehMaterial.defines.NOISE},r=e.addFolder("Focus");r.add(n,"show focus").onChange(function(){n["show focus"]?t.bokehMaterial.defines.SHOW_FOCUS="1":delete t.bokehMaterial.defines.SHOW_FOCUS,t.bokehMaterial.needsUpdate=!0}),r.add(n,"shader focus").onChange(function(){n["shader focus"]?t.bokehMaterial.defines.SHADER_FOCUS="1":delete t.bokehMaterial.defines.SHADER_FOCUS,t.bokehMaterial.needsUpdate=!0}),r.add(n,"manual DoF").onChange(function(){n["manual DoF"]?t.bokehMaterial.defines.MANUAL_DOF="1":delete t.bokehMaterial.defines.MANUAL_DOF,t.bokehMaterial.needsUpdate=!0}),r.add(n,"focal stop").min(0).max(100).step(.1).onChange(function(){t.bokehMaterial.uniforms.focalStop.value=n["focal stop"]}),r.add(n,"focal depth").min(.1).max(35).step(.1).onChange(function(){t.bokehMaterial.uniforms.focalDepth.value=n["focal depth"]}),r.add(n,"focus coord X").min(0).max(1).step(.01).onChange(function(){t.bokehMaterial.uniforms.focusCoords.value.x=n["focus coord X"]}),r.add(n,"focus coord Y").min(0).max(1).step(.01).onChange(function(){t.bokehMaterial.uniforms.focusCoords.value.y=n["focus coord Y"]}),r.open(),(r=e.addFolder("Sampling")).add(n,"rings").min(1).max(6).step(1).onChange(function(){t.bokehMaterial.defines.RINGS_INT=n.rings.toFixed(0),t.bokehMaterial.defines.RINGS_FLOAT=n.rings.toFixed(1),t.bokehMaterial.needsUpdate=!0}),r.add(n,"samples").min(1).max(6).step(1).onChange(function(){t.bokehMaterial.defines.SAMPLES_INT=n.samples.toFixed(0),t.bokehMaterial.defines.SAMPLES_FLOAT=n.samples.toFixed(1),t.bokehMaterial.needsUpdate=!0}),(r=e.addFolder("Blur")).add(n,"max blur").min(0).max(1).step(.001).onChange(function(){t.bokehMaterial.uniforms.maxBlur.value=n["max blur"]}),r.add(n,"bias").min(0).max(3).step(.01).onChange(function(){t.bokehMaterial.uniforms.bias.value=n.bias}),r.add(n,"fringe").min(0).max(2).step(.05).onChange(function(){t.bokehMaterial.uniforms.fringe.value=n.fringe}),r.add(n,"noise").onChange(function(){n.noise?t.bokehMaterial.defines.NOISE="1":delete t.bokehMaterial.defines.NOISE,t.bokehMaterial.needsUpdate=!0}),r.add(n,"dithering").min(0).max(.01).step(1e-4).onChange(function(){t.bokehMaterial.uniforms.ditherStrength.value=n.dithering}),r.add(n,"pentagon").onChange(function(){n.pentagon?t.bokehMaterial.defines.PENTAGON="1":delete t.bokehMaterial.defines.PENTAGON,t.bokehMaterial.needsUpdate=!0}),r.open(),(r=e.addFolder("Luminosity")).add(n,"lum threshold").min(0).max(1).step(.01).onChange(function(){t.bokehMaterial.uniforms.luminanceThreshold.value=n["lum threshold"]}),r.add(n,"lum gain").min(0).max(4).step(.01).onChange(function(){t.bokehMaterial.uniforms.luminanceGain.value=n["lum gain"]}),e.add(n,"vignette").onChange(function(){n.vignette?t.bokehMaterial.defines.VIGNETTE="1":delete t.bokehMaterial.defines.VIGNETTE,t.bokehMaterial.needsUpdate=!0})}}]),n}(),Ke=2*Math.PI,Ze=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.renderPass=null,t.savePass=null,t.blurPass=null,t.combinePass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/sunset/",s=[o+"px.png",o+"nx.png",o+"py.png",o+"ny.png",o+"pz.png",o+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-15,0,-15),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(c=0;c<100;++c)u=new e.MeshPhongMaterial({color:16777215*Math.random(),shading:e.FlatShading}),(d=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),d.position.multiplyScalar(10*Math.random()),d.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),d.scale.multiplyScalar(Math.random()),s.add(d);this.object=s,t.add(s);var f=new Oe(t,n);this.renderPass=f,i.addPass(f),f=new Ue,this.savePass=f,i.addPass(f),f=new ge,this.blurPass=f,i.addPass(f),(f=new ze(new S,"texture1")).material.uniforms.texture2.value=this.savePass.renderTarget.texture,f.material.uniforms.opacity1.value=1,f.material.uniforms.opacity2.value=0,f.renderToScreen=!0,this.combinePass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=Ke&&(t.rotation.x-=Ke),t.rotation.y>=Ke&&(t.rotation.y-=Ke))}},{key:"configure",value:function(e){var t=this.composer,n=this.renderPass,r=this.blurPass,i=this.combinePass,a={enabled:r.enabled,resolution:r.resolutionScale,"kernel size":r.kernelSize,strength:i.material.uniforms.opacity1.value};e.add(a,"resolution").min(0).max(1).step(.01).onChange(function(){r.resolutionScale=a.resolution,t.setSize()}),e.add(a,"kernel size").min(C.VERY_SMALL).max(C.HUGE).step(1).onChange(function(){r.kernelSize=a["kernel size"]}),e.add(a,"strength").min(0).max(1).step(.01).onChange(function(){i.material.uniforms.opacity1.value=a.strength,i.material.uniforms.opacity2.value=1-a.strength}),e.add(a,"enabled").onChange(function(){n.renderToScreen=!a.enabled,r.enabled=a.enabled,i.enabled=a.enabled})}}]),n}(),Je=2*Math.PI,Qe=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.object=null,t.texturePass=null,t.depthPass=null,t}return f(n,He),c(n,[{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.composer;this.controls=new e.OrbitControls(n,r.renderer.domElement),this.controls.enablePan=!1,this.controls.maxDistance=40,n.near=.01,n.far=50,n.position.set(2,1,2),n.lookAt(this.controls.target);var i=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshBasicMaterial);this.object=i,t.add(i),r.addPass(new Oe(t,n));var a=new Ie(r.depthTexture);a.enabled=!1,this.texturePass=a,r.addPass(a),(a=new Pe(n)).renderToScreen=!0,this.depthPass=a,r.addPass(a)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=Je&&(t.rotation.x-=Je),t.rotation.y>=Je&&(t.rotation.y-=Je))}},{key:"configure",value:function(e){var t=this.texturePass,n=this.depthPass,r={raw:!1};e.add(r,"raw").onChange(function(){t.enabled=r.raw,n.enabled=!r.raw,t.renderToScreen=r.raw,n.renderToScreen=!r.raw})}}]),n}(),_e=2*Math.PI,$e=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.dotScreenPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(10,1,10),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),shading:e.FlatShading}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s),i.addPass(new Oe(t,n));var f=new De({scale:.8,angle:.5*Math.PI,intensity:.25});f.renderToScreen=!0,this.dotScreenPass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,t.rotation.x>=_e&&(t.rotation.x-=_e),t.rotation.y>=_e&&(t.rotation.y-=_e))}},{key:"configure",value:function(e){var t=this.dotScreenPass,n={average:void 0!==t.material.defines.AVERAGE,scale:t.material.uniforms.scale.value,angle:t.material.uniforms.angle.value,intensity:t.material.uniforms.intensity.value,"center X":t.material.uniforms.offsetRepeat.value.x,"center Y":t.material.uniforms.offsetRepeat.value.y};e.add(n,"average").onChange(function(){n.average?t.material.defines.AVERAGE="1":delete t.material.defines.AVERAGE,t.material.needsUpdate=!0}),e.add(n,"scale").min(0).max(1).step(.01).onChange(function(){t.material.uniforms.scale.value=n.scale}),e.add(n,"angle").min(0).max(Math.PI).step(.001).onChange(function(){t.material.uniforms.angle.value=n.angle}),e.add(n,"intensity").min(0).max(1).step(.01).onChange(function(){t.material.uniforms.intensity.value=n.intensity});var r=e.addFolder("Center");r.add(n,"center X").min(-1).max(1).step(.01).onChange(function(){t.material.uniforms.offsetRepeat.value.x=n["center X"]}),r.add(n,"center Y").min(-1).max(1).step(.01).onChange(function(){t.material.uniforms.offsetRepeat.value.y=n["center Y"]})}}]),n}(),et=2*Math.PI,tt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.filmPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(10,1,10),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),shading:e.FlatShading}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s),i.addPass(new Oe(t,n));var f=new Te({grayscale:!1,sepia:!1,vignette:!1,eskil:!1,scanlines:!0,noise:!0,noiseIntensity:.5,scanlineIntensity:.5,scanlineDensity:1.5,greyscaleIntensity:1,sepiaIntensity:1,vignetteOffset:0,vignetteDarkness:.5});f.renderToScreen=!0,this.filmPass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=et&&(t.rotation.x-=et),t.rotation.y>=et&&(t.rotation.y-=et))}},{key:"configure",value:function(e){var t=this.composer,n=this.filmPass,r={grayscale:void 0!==n.material.defines.GREYSCALE,sepia:void 0!==n.material.defines.SEPIA,vignette:void 0!==n.material.defines.VIGNETTE,eskil:void 0!==n.material.defines.ESKIL,noise:void 0!==n.material.defines.NOISE,scanlines:void 0!==n.material.defines.SCANLINES,"noise intensity":n.material.uniforms.noiseIntensity.value,"scanlines intensity":n.material.uniforms.scanlineIntensity.value,"scanlines count":n.scanlineDensity,"blend mode":"screen","greyscale intensity":n.material.uniforms.greyscaleIntensity.value,"sepia intensity":n.material.uniforms.sepiaIntensity.value,"vignette offset":n.material.uniforms.vignetteOffset.value,"vignette darkness":n.material.uniforms.vignetteDarkness.value},i=e.addFolder("Greyscale");i.add(r,"grayscale").onChange(function(){r.grayscale?n.material.defines.GREYSCALE="1":delete n.material.defines.GREYSCALE,n.material.needsUpdate=!0}),i.add(r,"greyscale intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.greyscaleIntensity.value=r["greyscale intensity"]}),i.open(),(i=e.addFolder("Noise and scanlines")).add(r,"blend mode",["add","screen"]).onChange(function(){"add"===r["blend mode"]?delete n.material.defines.SCREEN_MODE:n.material.defines.SCREEN_MODE="1",n.material.needsUpdate=!0}),i.add(r,"noise").onChange(function(){r.noise?n.material.defines.NOISE="1":delete n.material.defines.NOISE,n.material.needsUpdate=!0}),i.add(r,"noise intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.noiseIntensity.value=r["noise intensity"]}),i.add(r,"scanlines").onChange(function(){r.scanlines?n.material.defines.SCANLINES="1":delete n.material.defines.SCANLINES,n.material.needsUpdate=!0}),i.add(r,"scanlines intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.scanlineIntensity.value=r["scanlines intensity"]}),i.add(r,"scanlines count").min(0).max(2).step(.01).onChange(function(){n.scanlineDensity=r["scanlines count"],t.setSize()}),i.open(),(i=e.addFolder("Sepia")).add(r,"sepia").onChange(function(){r.sepia?n.material.defines.SEPIA="1":delete n.material.defines.SEPIA,n.material.needsUpdate=!0}),i.add(r,"sepia intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.sepiaIntensity.value=r["sepia intensity"]}),i.open(),(i=e.addFolder("Vignette")).add(r,"vignette").onChange(function(){r.vignette?n.material.defines.VIGNETTE="1":delete n.material.defines.VIGNETTE,n.material.needsUpdate=!0}),i.add(r,"eskil").onChange(function(){r.eskil?n.material.defines.ESKIL="1":delete n.material.defines.ESKIL,n.material.needsUpdate=!0}),i.add(r,"vignette offset").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.vignetteOffset.value=r["vignette offset"]}),i.add(r,"vignette darkness").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.vignetteDarkness.value=r["vignette darkness"]}),i.open()}}]),n}(),nt=2*Math.PI,rt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.glitchPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/space4/",l=[s+"px.jpg",s+"nx.jpg",s+"py.jpg",s+"ny.jpg",s+"pz.jpg",s+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/perturb.jpg",function(t){t.magFilter=t.minFilter=e.NearestFilter,r.set("perturb-map",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(6,1,6),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),shading:e.FlatShading}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s),i.addPass(new Oe(t,n));var f=new Ae({perturbMap:r.get("perturb-map")});f.renderToScreen=!0,this.glitchPass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.005,t.rotation.y+=.01,t.rotation.x>=nt&&(t.rotation.x-=nt),t.rotation.y>=nt&&(t.rotation.y-=nt))}},{key:"configure",value:function(e){var t=this.glitchPass,n=t.perturbMap,r={mode:t.mode,"custom noise":!0};e.add(r,"mode").min(Ce.SPORADIC).max(Ce.CONSTANT_WILD).step(1).onChange(function(){t.mode=r.mode}),e.add(r,"custom noise").onChange(function(){r["custom noise"]?t.perturbMap=n:(t.perturbMap=null,t.generatePerturbMap(64))})}}]),n}(),it=2*Math.PI,at=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.object=null,t.maskObject=null,t.maskPass=null,t.pixelationPass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(10,1,10),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),shading:e.FlatShading}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s);var f=new e.Scene;c=new e.Mesh(new e.BoxBufferGeometry(4,4,4)),this.maskObject=c,f.add(c);var v=new Oe(t,n);i.addPass(v),v=new Ee(f,n),this.maskPass=v,i.addPass(v),v=new ke(5),this.pixelationPass=v,i.addPass(v),i.addPass(new we),(v=new ze(new E)).renderToScreen=!0,i.addPass(v)}},{key:"update",value:function(e){var t=this.object,n=this.maskObject,r=void 0;null!==t&&null!==n&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=it&&(t.rotation.x-=it),t.rotation.y>=it&&(t.rotation.y-=it),r=.001*performance.now(),n.position.x=4*Math.cos(r/1.5),n.position.y=4*Math.sin(r),n.rotation.x=r,n.rotation.y=.5*r)}},{key:"configure",value:function(e){var t=this.maskPass,n={"use mask":t.enabled};e.add(this.pixelationPass,"granularity").min(0).max(50).step(.1),e.add(n,"use mask").onChange(function(){t.enabled=n["use mask"]})}}]),n}(),ot=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.godRaysPass=null,t.sun=null,t.directionalLight=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o=new e.TextureLoader(i),s=new e.ObjectLoader(i),l="textures/skies/starry/",u=[l+"px.png",l+"nx.png",l+"py.png",l+"ny.png",l+"pz.png",l+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(u,function(e){r.set("sky",e)}),s.load("models/waggon.json",function(e){e.rotation.x=.25*Math.PI,e.rotation.y=.75*Math.PI,r.set("waggon",e)}),o.load("textures/wood.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("wood-diffuse",t)}),o.load("textures/woodnormals.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("wood-normals",t)}),o.load("textures/sun.png",function(e){r.set("sun-diffuse",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),this.controls.target.set(0,.5,0),n.position.set(-5,-1,-4),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(986895),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),this.directionalLight=o,t.add(o),t.add(a);var s=r.get("waggon"),l=new e.MeshPhongMaterial({color:16777215,map:r.get("wood-diffuse"),normalMap:r.get("wood-normals"),fog:!0});s.traverse(function(e){e.material=l}),t.add(s);var u=new e.PointsMaterial({map:r.get("sun-diffuse"),size:100,sizeAttenuation:!0,color:16768426,alphaTest:0,transparent:!0,fog:!1}),c=new e.BufferGeometry;c.addAttribute("position",new e.BufferAttribute(new Float32Array(3),3));var d=new e.Points(c,u);d.frustumCulled=!1,d.position.set(75,25,100),this.sun=d,t.add(d),i.addPass(new Oe(t,n));var f=new Le(t,n,d,{resolutionScale:.6,kernelSize:C.SMALL,intensity:1,density:.96,decay:.93,weight:.4,exposure:.6,samples:60,clampMax:1});f.renderToScreen=!0,this.godRaysPass=f,i.addPass(f)}},{key:"configure",value:function(e){var t=this.directionalLight,n=this.composer,r=this.godRaysPass,i=this.sun,a={resolution:r.resolutionScale,blurriness:r.kernelSize,intensity:r.intensity,density:r.godRaysMaterial.uniforms.density.value,decay:r.godRaysMaterial.uniforms.decay.value,weight:r.godRaysMaterial.uniforms.weight.value,exposure:r.godRaysMaterial.uniforms.exposure.value,clampMax:r.godRaysMaterial.uniforms.clampMax.value,samples:r.samples,color:i.material.color.getHex(),"blend mode":"screen"};e.add(a,"resolution").min(0).max(1).step(.01).onChange(function(){r.resolutionScale=a.resolution,n.setSize()}),e.add(a,"blurriness").min(C.VERY_SMALL).max(C.HUGE).step(1).onChange(function(){r.kernelSize=a.blurriness}),e.add(a,"intensity").min(0).max(1).step(.01).onChange(function(){r.intensity=a.intensity}),e.add(a,"density").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.density.value=a.density}),e.add(a,"decay").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.decay.value=a.decay}),e.add(a,"weight").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.weight.value=a.weight}),e.add(a,"exposure").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.exposure.value=a.exposure}),e.add(a,"clampMax").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.clampMax.value=a.clampMax}),e.add(a,"samples").min(15).max(200).step(1).onChange(function(){r.samples=a.samples}),e.addColor(a,"color").onChange(function(){i.material.color.setHex(a.color),t.color.setHex(a.color)}),e.add(a,"blend mode",["add","screen"]).onChange(function(){"add"===a["blend mode"]?delete r.combineMaterial.defines.SCREEN_MODE:r.combineMaterial.defines.SCREEN_MODE="1",r.combineMaterial.needsUpdate=!0})}}]),n}(),st=2*Math.PI,lt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/sunset/",l=[s+"px.png",s+"nx.png",s+"py.png",s+"ny.png",s+"pz.png",s+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/crate.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("crate-color",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-3,0,-3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshPhongMaterial({color:16777215,map:r.get("crate-color")}));this.object=s,t.add(s);var l=new Oe(t,n);l.renderToScreen=!0,i.addPass(l)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,t.rotation.x>=st&&(t.rotation.x-=st),t.rotation.y>=st&&(t.rotation.y-=st))}}]),n}(),ut=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.shockWavePass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(5,1,5),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.SphereBufferGeometry(1,64,64),l=new e.MeshBasicMaterial({color:16776960,envMap:r.get("sky")}),u=new e.Mesh(s,l);t.add(u),i.addPass(new Oe(t,n));var c=new Be(n,u.position,{speed:2,maxRadius:.5,waveSize:.2,amplitude:.05});c.renderToScreen=!0,this.shockWavePass=c,i.addPass(c)}},{key:"configure",value:function(e){var t=this.shockWavePass,n={speed:t.speed,size:t.shockWaveMaterial.uniforms.size.value,extent:t.shockWaveMaterial.uniforms.maxRadius.value,waveSize:t.shockWaveMaterial.uniforms.waveSize.value,amplitude:t.shockWaveMaterial.uniforms.amplitude.value,explode:function(){t.explode()}};e.add(n,"speed").min(0).max(10).step(.001).onChange(function(){t.speed=n.speed}),e.add(n,"size").min(.01).max(2).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.size.value=n.size}),e.add(n,"extent").min(0).max(10).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.maxRadius.value=n.extent}),e.add(n,"waveSize").min(0).max(2).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.waveSize.value=n.waveSize}),e.add(n,"amplitude").min(0).max(.25).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.amplitude.value=n.amplitude}),e.add(n,"explode")}}]),n}(),ct=2*Math.PI,dt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.renderer=null,t.renderer2=null,t.controls2=null,t.renderPass=null,t.smaaPass=null,t.objectA=null,t.objectB=null,t.objectC=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/sunset/",l=[s+"px.png",s+"nx.png",s+"py.png",s+"ny.png",s+"pz.png",s+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/crate.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("crate-color",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.renderer2=function(){var t=new e.WebGLRenderer({logarithmicDepthBuffer:!0,antialias:!1});return t.setSize(window.innerWidth,window.innerHeight),t.setClearColor(0),t.setPixelRatio(window.devicePixelRatio),t}(),this.renderer=i.replaceRenderer(this.renderer2),this.controls=new e.OrbitControls(n,this.renderer.domElement),this.controls2=new e.OrbitControls(n,this.renderer2.domElement),n.position.set(-3,0,-3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshBasicMaterial({color:0,wireframe:!0}));s.position.set(1.25,0,-1.25),this.objectA=s,t.add(s),(s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshPhongMaterial({map:r.get("crate-color")}))).position.set(-1.25,0,1.25),this.objectB=s,t.add(s),s=new e.Mesh(new e.BoxBufferGeometry(.25,8.25,.25),new e.MeshPhongMaterial({color:855309}));var l=new e.Object3D,u=void 0,c=void 0,d=void 0;u=l.clone();var f=s.clone();f.position.set(-4,0,4),u.add(f),(f=s.clone()).position.set(4,0,4),u.add(f),(f=s.clone()).position.set(-4,0,-4),u.add(f),(f=s.clone()).position.set(4,0,-4),u.add(f),(c=u.clone()).rotation.set(Math.PI/2,0,0),(d=u.clone()).rotation.set(0,0,Math.PI/2),l.add(u),l.add(c),l.add(d),l.scale.set(.1,.1,.1),this.objectC=l,t.add(l);var v=new Oe(t,n);this.renderPass=v,i.addPass(v),(v=new Re(Image)).renderToScreen=!0,this.smaaPass=v,i.addPass(v)}},{key:"update",value:function(e){var t=this.objectA,n=this.objectB,r=this.objectC;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,n.rotation.copy(t.rotation),r.rotation.copy(t.rotation),t.rotation.x>=ct&&(t.rotation.x-=ct),t.rotation.y>=ct&&(t.rotation.y-=ct))}},{key:"configure",value:function(e){var t=this.composer,n=this.renderPass,r=this.smaaPass,i=this.renderer,a=this.renderer2,o=this.controls,s=this.controls2,l={"browser AA":!1,SMAA:r.enabled,"SMAA threshold":Number.parseFloat(r.colorEdgesMaterial.defines.EDGE_THRESHOLD)};e.add(l,"browser AA").onChange(function(){var e=t.renderer.getSize();l["browser AA"]?(i.setSize(e.width,e.height),t.replaceRenderer(i),o.enabled=!0,s.enabled=!1):(a.setSize(e.width,e.height),t.replaceRenderer(a),o.enabled=!1,s.enabled=!0)}),e.add(l,"SMAA").onChange(function(){n.renderToScreen=!l.SMAA,r.enabled=l.SMAA}),e.add(l,"SMAA threshold").min(0).max(1).step(.01).onChange(function(){r.colorEdgesMaterial.defines.EDGE_THRESHOLD=l["SMAA threshold"].toFixed(2),r.colorEdgesMaterial.needsUpdate=!0})}},{key:"reset",value:function(){d(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"reset",this).call(this),this.renderer.dispose(),this.renderer=null,this.controls2.dispose(),this.controls2=null}}]),n}(),ft=2*Math.PI,vt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.toneMappingPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/sunset/",l=[s+"px.png",s+"nx.png",s+"py.png",s+"ny.png",s+"pz.png",s+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/crate.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("crate-color",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-3,0,-3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshPhongMaterial({map:r.get("crate-color")}));this.object=s,t.add(s),i.addPass(new Oe(t,n));var l=new Ge({adaptive:!0,resolution:256,distinction:1});l.renderToScreen=!0,this.toneMappingPass=l,i.addPass(l)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,t.rotation.x>=ft&&(t.rotation.x-=ft),t.rotation.y>=ft&&(t.rotation.y-=ft))}},{key:"configure",value:function(e){var t=this.toneMappingPass,n={resolution:Math.round(Math.log(t.resolution)/Math.log(2)),adaptive:t.adaptive,distinction:t.luminosityMaterial.uniforms.distinction.value,"adaption rate":t.adaptiveLuminosityMaterial.uniforms.tau.value,"average lum":t.toneMappingMaterial.uniforms.averageLuminance.value,"min lum":t.adaptiveLuminosityMaterial.uniforms.minLuminance.value,"max lum":t.toneMappingMaterial.uniforms.maxLuminance.value,"middle grey":t.toneMappingMaterial.uniforms.middleGrey.value};e.add(n,"resolution").min(6).max(11).step(1).onChange(function(){t.resolution=Math.pow(2,n.resolution)}),e.add(n,"adaptive").onChange(function(){t.adaptive=n.adaptive});var r=e.addFolder("Luminance");r.add(n,"distinction").min(1).max(10).step(.1).onChange(function(){t.luminosityMaterial.uniforms.distinction.value=n.distinction}),r.add(n,"adaption rate").min(0).max(2).step(.01).onChange(function(){t.adaptiveLuminosityMaterial.uniforms.tau.value=n["adaption rate"]}),r.add(n,"average lum").min(.01).max(1).step(.01).onChange(function(){t.toneMappingMaterial.uniforms.averageLuminance.value=n["average lum"]}),r.add(n,"min lum").min(0).max(1).step(.01).onChange(function(){t.adaptiveLuminosityMaterial.uniforms.minLuminance.value=n["min lum"]}),r.add(n,"max lum").min(0).max(32).step(1).onChange(function(){t.toneMappingMaterial.uniforms.maxLuminance.value=n["max lum"]}),r.add(n,"middle grey").min(0).max(1).step(.01).onChange(function(){t.toneMappingMaterial.uniforms.middleGrey.value=n["middle grey"]}),r.open()}}]),n}(),ht=function(){function r(){u(this,r),this.clock=new e.Clock,this.composer=function(){var t=new e.WebGLRenderer({logarithmicDepthBuffer:!0,antialias:!0});return t.setSize(window.innerWidth,window.innerHeight),t.setClearColor(0),t.setPixelRatio(window.devicePixelRatio),new We(t,{stencilBuffer:!0,depthTexture:!0})}(),this.stats=function(){var e=new n;return e.showPanel(0),e.dom.id="stats",e}(),this.demos=function(e){var t=new Map;return t.set("render",new lt(e)),t.set("bloom",new Ve(e)),t.set("blur",new Ze(e)),t.set("bokeh",new Ye(e)),t.set("bokeh2",new qe(e)),t.set("depth",new Qe(e)),t.set("dot-screen",new $e(e)),t.set("film",new tt(e)),t.set("glitch",new rt(e)),t.set("god-rays",new ot(e)),t.set("pixelation",new at(e)),t.set("shock-wave",new ut(e)),t.set("smaa",new dt(e)),t.set("tone-mapping",new vt(e)),t}(this.composer),this.effect=function(e){var t=window.location.hash.slice(1);return 0!==t.length&&e.has(t)||(t=e.keys().next().value),t}(this.demos)}return c(r,[{key:"initialise",value:function(e,n,r){function i(){f.initialise(),f.camera.aspect=window.innerWidth/window.innerHeight,f.camera.updateProjectionMatrix(),(v=new t.GUI({autoPlace:!1})).add(o,"effect",Array.from(d.keys())).onChange(a),f.configure(v),n.appendChild(v.domElement),r.style.display="none",l.domElement.style.visibility="visible"}function a(){var e=l.getSize();r.style.display="block",l.domElement.style.visibility="hidden",null!==v&&(v.destroy(),n.removeChild(v.domElement)),null!==f&&(f.reset(),l.setSize(e.width,e.height),s.replaceRenderer(l)),s.reset(),(f=d.get(o.effect)).load(i)}var o=this,s=this.composer,l=s.renderer,u=this.clock,c=this.stats,d=this.demos,f=null,v=null;e.appendChild(l.domElement),n.appendChild(c.dom),a(),document.addEventListener("keydown",function(e){e.altKey&&(e.preventDefault(),n.style.visibility="hidden"===n.style.visibility?"visible":"hidden")}),window.addEventListener("resize",function(){function e(e){var n=e.target.innerWidth,r=e.target.innerHeight;s.setSize(n,r),f.camera.aspect=n/r,f.camera.updateProjectionMatrix(),t=0}var t=0;return function(n){0===t&&(t=setTimeout(e,66,n))}}()),function e(t){var n=u.getDelta();requestAnimationFrame(e),c.begin(),f.update(n),s.render(n),c.end()}()}}]),r}();window.addEventListener("load",function e(t){var n=document.getElementById("viewport"),r=n.children[0],i=document.getElementById("aside"),a=new ht;window.removeEventListener("load",e),i.style.visibility="visible",a.initialise(n,i,r)})}(THREE,dat,Stats); \ No newline at end of file +!function(e,t,n){"use strict";function r(e,t){return e+Math.floor(Math.random()*(t-e+1))}function i(e,t){return e+Math.random()*(t-e)}function a(e,t,n){return Math.max(t,Math.min(n,e))}function o(e){return Math.pow(2,Math.max(0,Math.ceil(Math.log2(e))))}t=t&&t.hasOwnProperty("default")?t.default:t,n=n&&n.hasOwnProperty("default")?n.default:n;var s="uniform sampler2D tPreviousLum;\r\nuniform sampler2D tCurrentLum;\r\nuniform float minLuminance;\r\nuniform float delta;\r\nuniform float tau;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tfloat previousLum = texture2D(tPreviousLum, vUv, MIP_LEVEL_1X1).r;\r\n\tfloat currentLum = texture2D(tCurrentLum, vUv, MIP_LEVEL_1X1).r;\r\n\r\n\tpreviousLum = max(minLuminance, previousLum);\r\n\tcurrentLum = max(minLuminance, currentLum);\r\n\r\n\t// Adapt the luminance using Pattanaik's technique.\r\n\tfloat adaptedLum = previousLum + (currentLum - previousLum) * (1.0 - exp(-delta * tau));\r\n\r\n\tgl_FragColor.r = adaptedLum;\r\n\r\n}\r\n",l="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",u=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},c=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,n),void 0===r.focus&&(r.focus=1),void 0===r.aperture&&(r.aperture=.025),void 0===r.maxBlur&&(r.maxBlur=1);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"BokehMaterial",uniforms:{cameraNear:new e.Uniform(.1),cameraFar:new e.Uniform(2e3),aspect:new e.Uniform(1),tDiffuse:new e.Uniform(null),tDepth:new e.Uniform(null),focus:new e.Uniform(r.focus),aperture:new e.Uniform(r.aperture),maxBlur:new e.Uniform(r.maxBlur)},fragmentShader:m,vertexShader:p,depthWrite:!1,depthTest:!1}));return null!==t&&i.adoptCameraSettings(t),i}return f(n,t),c(n,[{key:"adoptCameraSettings",value:function(e){this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,this.uniforms.aspect.value=e.aspect}}]),n}(e.ShaderMaterial),x="uniform sampler2D tDiffuse;\r\nuniform sampler2D tDepth;\r\n\r\nuniform vec2 texelSize;\r\nuniform vec2 halfTexelSize;\r\n\r\nuniform float cameraNear;\r\nuniform float cameraFar;\r\n\r\nuniform float focalLength;\r\nuniform float focalStop;\r\n\r\nuniform float maxBlur;\r\nuniform vec3 luminanceCoefficients;\r\nuniform float luminanceThreshold;\r\nuniform float luminanceGain;\r\nuniform float bias;\r\nuniform float fringe;\r\nuniform float ditherStrength;\r\n\r\n#ifdef SHADER_FOCUS\r\n\r\n\tuniform vec2 focusCoords;\r\n\r\n#else\r\n\r\n\tuniform float focalDepth;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\n#ifndef USE_LOGDEPTHBUF\r\n\r\n\t#include \r\n\r\n\tfloat readDepth(sampler2D depthSampler, vec2 coord) {\r\n\r\n\t\tfloat fragCoordZ = texture2D(depthSampler, coord).x;\r\n\t\tfloat viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t\treturn viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\n#ifdef PENTAGON\r\n\r\n\tfloat penta(vec2 coords) {\r\n\r\n\t\tconst vec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0);\r\n\t\tconst vec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0);\r\n\t\tconst vec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0);\r\n\t\tconst vec4 HS3 = vec4(-0.809016994, -0.587785252, 0.0, 1.0);\r\n\t\tconst vec4 HS4 = vec4( 0.309016994, -0.951056516, 0.0, 1.0);\r\n\t\tconst vec4 HS5 = vec4( 0.0, 0.0, 1.0, 1.0);\r\n\r\n\t\tconst vec4 ONE = vec4(1.0);\r\n\r\n\t\tconst float P_FEATHER = 0.4;\r\n\t\tconst float N_FEATHER = -P_FEATHER;\r\n\r\n\t\tfloat inOrOut = -4.0;\r\n\r\n\t\tvec4 P = vec4(coords, vec2(RINGS_FLOAT - 1.3));\r\n\r\n\t\tvec4 dist = vec4(\r\n\t\t\tdot(P, HS0),\r\n\t\t\tdot(P, HS1),\r\n\t\t\tdot(P, HS2),\r\n\t\t\tdot(P, HS3)\r\n\t\t);\r\n\r\n\t\tdist = smoothstep(N_FEATHER, P_FEATHER, dist);\r\n\r\n\t\tinOrOut += dot(dist, ONE);\r\n\r\n\t\tdist.x = dot(P, HS4);\r\n\t\tdist.y = HS5.w - abs(P.z);\r\n\r\n\t\tdist = smoothstep(N_FEATHER, P_FEATHER, dist);\r\n\t\tinOrOut += dist.x;\r\n\r\n\t\treturn clamp(inOrOut, 0.0, 1.0);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\n#ifdef SHOW_FOCUS\r\n\r\n\tvec3 debugFocus(vec3 c, float blur, float depth) {\r\n\r\n\t\tfloat edge = 0.002 * depth;\r\n\t\tfloat m = clamp(smoothstep(0.0, edge, blur), 0.0, 1.0);\r\n\t\tfloat e = clamp(smoothstep(1.0 - edge, 1.0, blur), 0.0, 1.0);\r\n\r\n\t\tc = mix(c, vec3(1.0, 0.5, 0.0), (1.0 - m) * 0.6);\r\n\t\tc = mix(c, vec3(0.0, 0.5, 1.0), ((1.0 - e) - (1.0 - m)) * 0.2);\r\n\r\n\t\treturn c;\r\n\r\n\t}\r\n\r\n#endif\r\n\r\n#ifdef VIGNETTE\r\n\r\n\tfloat vignette() {\r\n\r\n\t\tconst vec2 CENTER = vec2(0.5);\r\n\r\n\t\tconst float VIGNETTE_OUT = 1.3;\r\n\t\tconst float VIGNETTE_IN = 0.0;\r\n\t\tconst float VIGNETTE_FADE = 22.0; \r\n\r\n\t\tfloat d = distance(vUv, CENTER);\r\n\t\td = smoothstep(VIGNETTE_OUT + (focalStop / VIGNETTE_FADE), VIGNETTE_IN + (focalStop / VIGNETTE_FADE), d);\r\n\r\n\t\treturn clamp(d, 0.0, 1.0);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\nvec2 rand(vec2 coord) {\r\n\r\n\tvec2 noise;\r\n\r\n\t#ifdef NOISE\r\n\r\n\t\tconst float a = 12.9898;\r\n\t\tconst float b = 78.233;\r\n\t\tconst float c = 43758.5453;\r\n\r\n\t\tnoise.x = clamp(fract(sin(mod(dot(coord, vec2(a, b)), 3.14)) * c), 0.0, 1.0) * 2.0 - 1.0;\r\n\t\tnoise.y = clamp(fract(sin(mod(dot(coord, vec2(a, b) * 2.0), 3.14)) * c), 0.0, 1.0) * 2.0 - 1.0;\r\n\r\n\t#else\r\n\r\n\t\tnoise.x = ((fract(1.0 - coord.s * halfTexelSize.x) * 0.25) + (fract(coord.t * halfTexelSize.y) * 0.75)) * 2.0 - 1.0;\r\n\t\tnoise.y = ((fract(1.0 - coord.s * halfTexelSize.x) * 0.75) + (fract(coord.t * halfTexelSize.y) * 0.25)) * 2.0 - 1.0;\r\n\r\n\t#endif\r\n\r\n\treturn noise;\r\n\r\n}\r\n\r\nvec3 processTexel(vec2 coords, float blur) {\r\n\r\n\tvec3 c;\r\n\tc.r = texture2D(tDiffuse, coords + vec2(0.0, 1.0) * texelSize * fringe * blur).r;\r\n\tc.g = texture2D(tDiffuse, coords + vec2(-0.866, -0.5) * texelSize * fringe * blur).g;\r\n\tc.b = texture2D(tDiffuse, coords + vec2(0.866, -0.5) * texelSize * fringe * blur).b;\r\n\r\n\t// Calculate the luminance of the constructed colour.\r\n\tfloat luminance = dot(c, luminanceCoefficients);\r\n\tfloat threshold = max((luminance - luminanceThreshold) * luminanceGain, 0.0);\r\n\r\n\treturn c + mix(vec3(0.0), c, threshold * blur);\r\n\r\n}\r\n\r\nfloat linearize(float depth) {\r\n\r\n\treturn -cameraFar * cameraNear / (depth * (cameraFar - cameraNear) - cameraFar);\r\n\r\n}\r\n\r\nfloat gather(float i, float j, float ringSamples, inout vec3 color, float w, float h, float blur) {\r\n\r\n\tconst float TWO_PI = 6.28318531;\r\n\r\n\tfloat step = TWO_PI / ringSamples;\r\n\tfloat pw = cos(j * step) * i;\r\n\tfloat ph = sin(j * step) * i;\r\n\r\n\t#ifdef PENTAGON\r\n\r\n\t\tfloat p = penta(vec2(pw, ph));\r\n\r\n\t#else\r\n\r\n\t\tfloat p = 1.0;\r\n\r\n\t#endif\r\n\r\n\tcolor += processTexel(vUv + vec2(pw * w, ph * h), blur) * mix(1.0, i / RINGS_FLOAT, bias) * p;\r\n\r\n\treturn mix(1.0, i / RINGS_FLOAT, bias) * p;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\t#ifdef USE_LOGDEPTHBUF\r\n\r\n\t\tfloat depth = linearize(texture2D(tDepth, vUv).x);\r\n\r\n\t#else\r\n\r\n\t\tfloat depth = linearize(readDepth(tDepth, vUv));\r\n\r\n\t#endif\r\n\r\n\t#ifdef SHADER_FOCUS\r\n\r\n\t\t#ifdef USE_LOGDEPTHBUF\r\n\r\n\t\t\tfloat fDepth = linearize(texture2D(tDepth, focusCoords).x);\r\n\r\n\t\t#else\r\n\r\n\t\t\tfloat fDepth = linearize(readDepth(tDepth, focusCoords));\r\n\r\n\t\t#endif\r\n\r\n\t#else\r\n\r\n\t\tfloat fDepth = focalDepth;\r\n\r\n\t#endif\r\n\r\n\t#ifdef MANUAL_DOF\r\n\r\n\t\tconst float nDoFStart = 1.0; \r\n\t\tconst float nDoFDist = 2.0;\r\n\t\tconst float fDoFStart = 1.0;\r\n\t\tconst float fDoFDist = 3.0;\r\n\r\n\t\tfloat focalPlane = depth - fDepth;\r\n\t\tfloat farDoF = (focalPlane - fDoFStart) / fDoFDist;\r\n\t\tfloat nearDoF = (-focalPlane - nDoFStart) / nDoFDist;\r\n\r\n\t\tfloat blur = (focalPlane > 0.0) ? farDoF : nearDoF;\r\n\r\n\t#else\r\n\r\n\t\tconst float CIRCLE_OF_CONFUSION = 0.03; // 35mm film = 0.03mm CoC.\r\n\r\n\t\tfloat focalPlaneMM = fDepth * 1000.0;\r\n\t\tfloat depthMM = depth * 1000.0;\r\n\r\n\t\tfloat focalPlane = (depthMM * focalLength) / (depthMM - focalLength);\r\n\t\tfloat farDoF = (focalPlaneMM * focalLength) / (focalPlaneMM - focalLength);\r\n\t\tfloat nearDoF = (focalPlaneMM - focalLength) / (focalPlaneMM * focalStop * CIRCLE_OF_CONFUSION);\r\n\r\n\t\tfloat blur = abs(focalPlane - farDoF) * nearDoF;\r\n\r\n\t#endif\r\n\r\n\tblur = clamp(blur, 0.0, 1.0);\r\n\r\n\t// Dithering.\r\n\tvec2 noise = rand(vUv) * ditherStrength * blur;\r\n\r\n\tfloat blurFactorX = texelSize.x * blur * maxBlur + noise.x;\r\n\tfloat blurFactorY = texelSize.y * blur * maxBlur + noise.y;\r\n\r\n\tconst int MAX_RING_SAMPLES = RINGS_INT * SAMPLES_INT;\r\n\r\n\t// Calculation of final color.\r\n\tvec4 color;\r\n\r\n\tif(blur < 0.05) {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv);\r\n\r\n\t} else {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv);\r\n\r\n\t\tfloat s = 1.0;\r\n\t\tint ringSamples;\r\n\r\n\t\tfor(int i = 1; i <= RINGS_INT; ++i) {\r\n\r\n\t\t\tringSamples = i * SAMPLES_INT;\r\n\r\n\t\t\t// Constant loop.\r\n\t\t\tfor(int j = 0; j < MAX_RING_SAMPLES; ++j) {\r\n\r\n\t\t\t\t// Break earlier.\r\n\t\t\t\tif(j >= ringSamples) { break; }\r\n\r\n\t\t\t\ts += gather(float(i), float(j), float(ringSamples), color.rgb, blurFactorX, blurFactorY, blur);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tcolor.rgb /= s; // Divide by sample count.\r\n\r\n\t}\r\n\r\n\t#ifdef SHOW_FOCUS\r\n\r\n\t\tcolor.rgb = debugFocus(color.rgb, blur, depth);\r\n\r\n\t#endif\r\n\r\n\t#ifdef VIGNETTE\r\n\r\n\t\tcolor.rgb *= vignette();\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",y="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",M=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,n),void 0===r.rings&&(r.rings=3),void 0===r.samples&&(r.samples=2),void 0===r.showFocus&&(r.showFocus=!1),void 0===r.showFocus&&(r.showFocus=!1),void 0===r.manualDoF&&(r.manualDoF=!1),void 0===r.vignette&&(r.vignette=!1),void 0===r.pentagon&&(r.pentagon=!1),void 0===r.shaderFocus&&(r.shaderFocus=!0),void 0===r.noise&&(r.noise=!0);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"Bokeh2Material",defines:{RINGS_INT:r.rings.toFixed(0),RINGS_FLOAT:r.rings.toFixed(1),SAMPLES_INT:r.samples.toFixed(0),SAMPLES_FLOAT:r.samples.toFixed(1)},uniforms:{tDiffuse:new e.Uniform(null),tDepth:new e.Uniform(null),texelSize:new e.Uniform(new e.Vector2),halfTexelSize:new e.Uniform(new e.Vector2),cameraNear:new e.Uniform(.1),cameraFar:new e.Uniform(2e3),focalLength:new e.Uniform(24),focalStop:new e.Uniform(.9),maxBlur:new e.Uniform(1),luminanceThreshold:new e.Uniform(.5),luminanceGain:new e.Uniform(2),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722)),bias:new e.Uniform(.5),fringe:new e.Uniform(.7),ditherStrength:new e.Uniform(1e-4),focusCoords:new e.Uniform(new e.Vector2(.5,.5)),focalDepth:new e.Uniform(1)},fragmentShader:x,vertexShader:y,depthWrite:!1,depthTest:!1}));return r.showFocus&&(i.defines.SHOW_FOCUS="1"),r.manualDoF&&(i.defines.MANUAL_DOF="1"),r.vignette&&(i.defines.VIGNETTE="1"),r.pentagon&&(i.defines.PENTAGON="1"),r.shaderFocus&&(i.defines.SHADER_FOCUS="1"),r.noise&&(i.defines.NOISE="1"),void 0!==r.texelSize&&i.setTexelSize(r.texelSize.x,r.texelSize.y),null!==t&&i.adoptCameraSettings(t),i}return f(n,t),c(n,[{key:"setTexelSize",value:function(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}},{key:"adoptCameraSettings",value:function(e){this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,this.uniforms.focalLength.value=e.getFocalLength()}}]),n}(e.ShaderMaterial),w="uniform sampler2D texture1;\r\nuniform sampler2D texture2;\r\n\r\nuniform float opacity1;\r\nuniform float opacity2;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel1 = opacity1 * texture2D(texture1, vUv);\r\n\tvec4 texel2 = opacity2 * texture2D(texture2, vUv);\r\n\r\n\t#ifdef SCREEN_MODE\r\n\r\n\t\tvec3 invTexel1 = vec3(1.0) - texel1.rgb;\r\n\t\tvec3 invTexel2 = vec3(1.0) - texel2.rgb;\r\n\r\n\t\tvec4 color = vec4(\r\n\t\t\tvec3(1.0) - invTexel1 * invTexel2,\r\n\t\t\ttexel1.a + texel2.a\r\n\t\t);\r\n\r\n\t#else\r\n\r\n\t\tvec4 color = texel1 + texel2;\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",b="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",S=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"CombineMaterial",uniforms:{texture1:new e.Uniform(null),texture2:new e.Uniform(null),opacity1:new e.Uniform(1),opacity2:new e.Uniform(1)},fragmentShader:w,vertexShader:b,depthWrite:!1,depthTest:!1}));return t&&(r.defines.SCREEN_MODE="1"),r}return f(n,t),n}(e.ShaderMaterial),D="uniform sampler2D tDiffuse;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\t// Sample top left texel.\r\n\tvec4 sum = texture2D(tDiffuse, vUv0);\r\n\r\n\t// Sample top right texel.\r\n\tsum += texture2D(tDiffuse, vUv1);\r\n\r\n\t// Sample bottom right texel.\r\n\tsum += texture2D(tDiffuse, vUv2);\r\n\r\n\t// Sample bottom left texel.\r\n\tsum += texture2D(tDiffuse, vUv3);\r\n\r\n\t// Compute the average.\r\n\tgl_FragColor = sum * 0.25;\r\n\r\n}\r\n",P="uniform vec2 texelSize;\r\nuniform vec2 halfTexelSize;\r\nuniform float kernel;\r\n\r\nvarying vec2 vUv0;\r\nvarying vec2 vUv1;\r\nvarying vec2 vUv2;\r\nvarying vec2 vUv3;\r\n\r\nvoid main() {\r\n\r\n\tvec2 dUv = (texelSize * vec2(kernel)) + halfTexelSize;\r\n\r\n\tvUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\r\n\tvUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\r\n\tvUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\r\n\tvUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",T=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"ConvolutionMaterial",uniforms:{tDiffuse:new e.Uniform(null),texelSize:new e.Uniform(new e.Vector2),halfTexelSize:new e.Uniform(new e.Vector2),kernel:new e.Uniform(0)},fragmentShader:D,vertexShader:P,depthWrite:!1,depthTest:!1}));return r.setTexelSize(t.x,t.y),r.kernelSize=C.LARGE,r}return f(n,t),c(n,[{key:"getKernel",value:function(){return A[this.kernelSize]}},{key:"setTexelSize",value:function(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}}]),n}(e.ShaderMaterial),A=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],C={VERY_SMALL:0,SMALL:1,MEDIUM:2,LARGE:3,VERY_LARGE:4,HUGE:5},O="uniform sampler2D tDiffuse;\r\nuniform float opacity;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tgl_FragColor = opacity * texel;\r\n\r\n}\r\n",L="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",E=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"CopyMaterial",uniforms:{tDiffuse:new e.Uniform(null),opacity:new e.Uniform(1)},fragmentShader:O,vertexShader:L,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),k="uniform sampler2D tDepth;\r\n\r\nvarying vec2 vUv;\r\n\r\n#ifndef USE_LOGDEPTHBUF\r\n\r\n\t#include \r\n\r\n\tuniform float cameraNear;\r\n\tuniform float cameraFar;\r\n\r\n\tfloat readDepth(sampler2D depthSampler, vec2 coord) {\r\n\r\n\t\tfloat fragCoordZ = texture2D(depthSampler, coord).x;\r\n\t\tfloat viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\r\n\r\n\t\treturn viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\r\n\r\n\t}\r\n\r\n#endif\r\n\r\nvoid main() {\r\n\r\n\t#ifdef USE_LOGDEPTHBUF\r\n\r\n\t\tfloat depth = texture2D(tDepth, vUv).x;\r\n\r\n\t#else\r\n\r\n\t\tfloat depth = readDepth(tDepth, vUv);\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = vec4(depth, depth, depth, 1.0);\r\n\r\n}\r\n",U="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",z=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"DepthMaterial",uniforms:{cameraNear:new e.Uniform(.1),cameraFar:new e.Uniform(2e3),tDepth:new e.Uniform(null)},fragmentShader:k,vertexShader:U,depthWrite:!1,depthTest:!1}));return null!==t&&r.adoptCameraSettings(t),r}return f(n,t),c(n,[{key:"adoptCameraSettings",value:function(e){this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far}}]),n}(e.ShaderMaterial),F="uniform sampler2D tDiffuse;\r\n\r\nuniform float angle;\r\nuniform float scale;\r\nuniform float intensity;\r\n\r\nvarying vec2 vUv;\r\nvarying vec2 vUvPattern;\r\n\r\nfloat pattern() {\r\n\r\n\tfloat s = sin(angle);\r\n\tfloat c = cos(angle);\r\n\r\n\tvec2 point = vec2(c * vUvPattern.x - s * vUvPattern.y, s * vUvPattern.x + c * vUvPattern.y) * scale;\r\n\r\n\treturn (sin(point.x) * sin(point.y)) * 4.0;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tvec3 color = texel.rgb;\r\n\r\n\t#ifdef AVERAGE\r\n\r\n\t\tcolor = vec3((color.r + color.g + color.b) / 3.0);\r\n\r\n\t#endif\r\n\r\n\tcolor = vec3(color * 10.0 - 5.0 + pattern());\r\n\tcolor = texel.rgb + (color - texel.rgb) * intensity;\r\n\r\n\tgl_FragColor = vec4(color, texel.a);\r\n\r\n}\r\n",N="uniform vec4 offsetRepeat;\r\n\r\nvarying vec2 vUv;\r\nvarying vec2 vUvPattern;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tvUvPattern = uv * offsetRepeat.zw + offsetRepeat.xy;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",j=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"DotScreenMaterial",uniforms:{tDiffuse:new e.Uniform(null),angle:new e.Uniform(1.57),scale:new e.Uniform(1),intensity:new e.Uniform(1),offsetRepeat:new e.Uniform(new e.Vector4(.5,.5,1,1))},fragmentShader:F,vertexShader:N,depthWrite:!1,depthTest:!1}));return t&&(r.defines.AVERAGE="1"),r}return f(n,t),n}(e.ShaderMaterial),B="uniform sampler2D tDiffuse;\r\nuniform float time;\r\n\r\nvarying vec2 vUv;\r\n\r\n#ifdef NOISE\r\n\r\n\tuniform float noiseIntensity;\r\n\r\n#endif\r\n\r\n#ifdef SCANLINES\r\n\r\n\tuniform float scanlineIntensity;\r\n\tuniform float scanlineCount;\r\n\r\n#endif\r\n\r\n#ifdef GREYSCALE\r\n\r\n\tuniform vec3 luminanceCoefficients;\r\n\tuniform float greyscaleIntensity;\r\n\r\n#elif defined(SEPIA)\r\n\r\n\tuniform float sepiaIntensity;\r\n\r\n#endif\r\n\r\n#ifdef VIGNETTE\r\n\r\n\tuniform float vignetteOffset;\r\n\tuniform float vignetteDarkness;\r\n\r\n#endif\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tvec3 color = texel.rgb;\r\n\r\n\t#ifdef SCREEN_MODE\r\n\r\n\t\tvec3 invColor;\r\n\r\n\t#endif\r\n\r\n\t#ifdef NOISE\r\n\r\n\t\tfloat x = vUv.x * vUv.y * time * 1000.0;\r\n\t\tx = mod(x, 13.0) * mod(x, 123.0);\r\n\t\tx = mod(x, 0.01);\r\n\r\n\t\tvec3 noise = texel.rgb * clamp(0.1 + x * 100.0, 0.0, 1.0) * noiseIntensity;\r\n\r\n\t\t#ifdef SCREEN_MODE\r\n\r\n\t\t\tinvColor = vec3(1.0) - color;\r\n\t\t\tvec3 invNoise = vec3(1.0) - noise;\r\n\r\n\t\t\tcolor = vec3(1.0) - invColor * invNoise;\r\n\r\n\t\t#else\r\n\r\n\t\t\tcolor += noise;\r\n\r\n\t\t#endif\r\n\r\n\t#endif\r\n\r\n\t#ifdef SCANLINES\r\n\r\n\t\tvec2 sl = vec2(sin(vUv.y * scanlineCount), cos(vUv.y * scanlineCount));\r\n\t\tvec3 scanlines = texel.rgb * vec3(sl.x, sl.y, sl.x) * scanlineIntensity;\r\n\r\n\t\t#ifdef SCREEN_MODE\r\n\r\n\t\t\tinvColor = vec3(1.0) - color;\r\n\t\t\tvec3 invScanlines = vec3(1.0) - scanlines;\r\n\r\n\t\t\tcolor = vec3(1.0) - invColor * invScanlines;\r\n\r\n\t\t#else\r\n\r\n\t\t\tcolor += scanlines;\r\n\r\n\t\t#endif\r\n\r\n\t#endif\r\n\r\n\t#ifdef GREYSCALE\r\n\r\n\t\tcolor = mix(color, vec3(dot(color, luminanceCoefficients)), greyscaleIntensity);\r\n\r\n\t#elif defined(SEPIA)\r\n\r\n\t\tvec3 c = color.rgb;\r\n\r\n\t\tcolor.r = dot(c, vec3(1.0 - 0.607 * sepiaIntensity, 0.769 * sepiaIntensity, 0.189 * sepiaIntensity));\r\n\t\tcolor.g = dot(c, vec3(0.349 * sepiaIntensity, 1.0 - 0.314 * sepiaIntensity, 0.168 * sepiaIntensity));\r\n\t\tcolor.b = dot(c, vec3(0.272 * sepiaIntensity, 0.534 * sepiaIntensity, 1.0 - 0.869 * sepiaIntensity));\r\n\r\n\t#endif\r\n\r\n\t#ifdef VIGNETTE\r\n\r\n\t\tconst vec2 center = vec2(0.5);\r\n\r\n\t\t#ifdef ESKIL\r\n\r\n\t\t\tvec2 uv = (vUv - center) * vec2(vignetteOffset);\r\n\t\t\tcolor = mix(color.rgb, vec3(1.0 - vignetteDarkness), dot(uv, uv));\r\n\r\n\t\t#else\r\n\r\n\t\t\tfloat dist = distance(vUv, center);\r\n\t\t\tcolor *= smoothstep(0.8, vignetteOffset * 0.799, dist * (vignetteDarkness + vignetteOffset));\r\n\r\n\t\t#endif\t\t\r\n\r\n\t#endif\r\n\r\n\tgl_FragColor = vec4(clamp(color, 0.0, 1.0), texel.a);\r\n\r\n}\r\n",R="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",I=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n),void 0===t.screenMode&&(t.screenMode=!0),void 0===t.noise&&(t.noise=!0),void 0===t.scanlines&&(t.scanlines=!0),void 0===t.greyscale&&(t.greyscale=!1),void 0===t.sepia&&(t.sepia=!1),void 0===t.vignette&&(t.vignette=!1),void 0===t.eskil&&(t.eskil=!1),void 0===t.noiseIntensity&&(t.noiseIntensity=.5),void 0===t.scanlineIntensity&&(t.scanlineIntensity=.05),void 0===t.greyscaleIntensity&&(t.greyscaleIntensity=1),void 0===t.sepiaIntensity&&(t.sepiaIntensity=1),void 0===t.vignetteOffset&&(t.vignetteOffset=1),void 0===t.vignetteDarkness&&(t.vignetteDarkness=1);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"FilmMaterial",uniforms:{tDiffuse:new e.Uniform(null),time:new e.Uniform(0),noiseIntensity:new e.Uniform(t.noiseIntensity),scanlineIntensity:new e.Uniform(t.scanlineIntensity),scanlineCount:new e.Uniform(0),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722)),greyscaleIntensity:new e.Uniform(t.greyscaleIntensity),sepiaIntensity:new e.Uniform(t.sepiaIntensity),vignetteOffset:new e.Uniform(t.vignetteOffset),vignetteDarkness:new e.Uniform(t.vignetteDarkness)},fragmentShader:B,vertexShader:R,depthWrite:!1,depthTest:!1}));return t.greyscale&&(r.defines.GREYSCALE="1"),t.sepia&&(r.defines.SEPIA="1"),t.vignette&&(r.defines.VIGNETTE="1"),t.eskil&&(r.defines.ESKIL="1"),t.screenMode&&(r.defines.SCREEN_MODE="1"),t.noise&&(r.defines.NOISE="1"),t.scanlines&&(r.defines.SCANLINES="1"),r}return f(n,t),n}(e.ShaderMaterial),G="uniform sampler2D tDiffuse;\r\nuniform sampler2D tPerturb;\r\n\r\nuniform bool active;\r\n\r\nuniform float amount;\r\nuniform float angle;\r\nuniform float seed;\r\nuniform float seedX;\r\nuniform float seedY;\r\nuniform float distortionX;\r\nuniform float distortionY;\r\nuniform float colS;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat rand(vec2 tc) {\r\n\r\n\tconst float a = 12.9898;\r\n\tconst float b = 78.233;\r\n\tconst float c = 43758.5453;\r\n\r\n\tfloat dt = dot(tc, vec2(a, b));\r\n\tfloat sn = mod(dt, 3.14);\r\n\r\n\treturn fract(sin(sn) * c);\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec2 coord = vUv;\r\n\r\n\tfloat xs, ys;\r\n\tvec4 normal;\r\n\r\n\tvec2 offset;\r\n\tvec4 cr, cga, cb;\r\n\tvec4 snow, color;\r\n\r\n\tfloat sx, sy;\r\n\r\n\tif(active) {\r\n\r\n\t\txs = floor(gl_FragCoord.x / 0.5);\r\n\t\tys = floor(gl_FragCoord.y / 0.5);\r\n\r\n\t\tnormal = texture2D(tPerturb, coord * seed * seed);\r\n\r\n\t\tif(coord.y < distortionX + colS && coord.y > distortionX - colS * seed) {\r\n\r\n\t\t\tsx = clamp(ceil(seedX), 0.0, 1.0);\r\n\t\t\tcoord.y = sx * (1.0 - (coord.y + distortionY)) + (1.0 - sx) * distortionY;\r\n\r\n\t\t}\r\n\r\n\t\tif(coord.x < distortionY + colS && coord.x > distortionY - colS * seed) {\r\n\r\n\t\t\tsy = clamp(ceil(seedY), 0.0, 1.0);\r\n\t\t\tcoord.x = sy * distortionX + (1.0 - sy) * (1.0 - (coord.x + distortionX));\r\n\r\n\t\t}\r\n\r\n\t\tcoord.x += normal.x * seedX * (seed / 5.0);\r\n\t\tcoord.y += normal.y * seedY * (seed / 5.0);\r\n\r\n\t\toffset = amount * vec2(cos(angle), sin(angle));\r\n\r\n\t\tcr = texture2D(tDiffuse, coord + offset);\r\n\t\tcga = texture2D(tDiffuse, coord);\r\n\t\tcb = texture2D(tDiffuse, coord - offset);\r\n\r\n\t\tcolor = vec4(cr.r, cga.g, cb.b, cga.a);\r\n\t\tsnow = 200.0 * amount * vec4(rand(vec2(xs * seed, ys * seed * 50.0)) * 0.2);\r\n\t\tcolor += snow;\r\n\r\n\t} else {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv);\r\n\r\n\t}\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",W="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",H=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"GlitchMaterial",uniforms:{tDiffuse:new e.Uniform(null),tPerturb:new e.Uniform(null),active:new e.Uniform(1),amount:new e.Uniform(.8),angle:new e.Uniform(.02),seed:new e.Uniform(.02),seedX:new e.Uniform(.02),seedY:new e.Uniform(.02),distortionX:new e.Uniform(.5),distortionY:new e.Uniform(.6),colS:new e.Uniform(.05)},fragmentShader:G,vertexShader:W,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),X="uniform sampler2D tDiffuse;\r\nuniform vec3 lightPosition;\r\n\r\nuniform float exposure;\r\nuniform float decay;\r\nuniform float density;\r\nuniform float weight;\r\nuniform float clampMax;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec2 texCoord = vUv;\r\n\r\n\t// Calculate vector from pixel to light source in screen space.\r\n\tvec2 deltaTexCoord = texCoord - lightPosition.st;\r\n\tdeltaTexCoord *= 1.0 / NUM_SAMPLES_FLOAT * density;\r\n\r\n\t// A decreasing illumination factor.\r\n\tfloat illuminationDecay = 1.0;\r\n\r\n\tvec4 sample;\r\n\tvec4 color = vec4(0.0);\r\n\r\n\t// Estimate the probability of occlusion at each pixel by summing samples along a ray to the light source.\r\n\tfor(int i = 0; i < NUM_SAMPLES_INT; ++i) {\r\n\r\n\t\ttexCoord -= deltaTexCoord;\r\n\t\tsample = texture2D(tDiffuse, texCoord);\r\n\r\n\t\t// Apply sample attenuation scale/decay factors.\r\n\t\tsample *= illuminationDecay * weight;\r\n\r\n\t\tcolor += sample;\r\n\r\n\t\t// Update exponential decay factor.\r\n\t\tilluminationDecay *= decay;\r\n\r\n\t}\r\n\r\n\tgl_FragColor = clamp(color * exposure, 0.0, clampMax);\r\n\r\n}\r\n",V="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",Y=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"GodRaysMaterial",defines:{NUM_SAMPLES_FLOAT:"60.0",NUM_SAMPLES_INT:"60"},uniforms:{tDiffuse:new e.Uniform(null),lightPosition:new e.Uniform(null),exposure:new e.Uniform(.6),decay:new e.Uniform(.93),density:new e.Uniform(.96),weight:new e.Uniform(.4),clampMax:new e.Uniform(1)},fragmentShader:X,vertexShader:V,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),q="uniform sampler2D tDiffuse;\r\nuniform float distinction;\r\nuniform vec2 range;\r\nuniform vec3 luminanceCoefficients;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tfloat v = dot(texel.rgb, luminanceCoefficients);\r\n\r\n\t#ifdef RANGE\r\n\r\n\t\tfloat low = step(range.x, v);\r\n\t\tfloat high = step(v, range.y);\r\n\r\n\t\t// Apply the mask.\r\n\t\tv *= low * high;\r\n\r\n\t#endif\r\n\r\n\tv = pow(abs(v), distinction);\r\n\r\n\t#ifdef COLOR\r\n\r\n\t\tgl_FragColor = vec4(texel.rgb * v, texel.a);\r\n\r\n\t#else\r\n\r\n\t\tgl_FragColor = vec4(v, v, v, texel.a);\r\n\r\n\t#endif\r\n\r\n}\r\n",K="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",Z=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;u(this,n);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"LuminosityMaterial",uniforms:{tDiffuse:new e.Uniform(null),distinction:new e.Uniform(1),range:new e.Uniform(null!==r?r:new e.Vector2),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722))},fragmentShader:q,vertexShader:K}));return t&&(i.defines.COLOR="1"),null!==r&&(i.defines.RANGE="1"),i}return f(n,t),n}(e.ShaderMaterial),J="uniform sampler2D tDiffuse;\r\nuniform float granularity;\r\nuniform float dx;\r\nuniform float dy;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel;\r\n\r\n\tif(granularity > 0.0) {\r\n\r\n\t\tvec2 coord = vec2(\r\n\t\t\tdx * (floor(vUv.x / dx) + 0.5),\r\n\t\t\tdy * (floor(vUv.y / dy) + 0.5)\r\n\t\t);\r\n\r\n\t\ttexel = texture2D(tDiffuse, coord);\r\n\r\n\t} else {\r\n\r\n\t\ttexel = texture2D(tDiffuse, vUv);\r\n\r\n\t}\r\n\r\n\tgl_FragColor = texel;\r\n\r\n}\r\n",Q="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",_=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"PixelationMaterial",uniforms:{tDiffuse:new e.Uniform(null),granularity:new e.Uniform(1),resolution:new e.Uniform(new e.Vector2(1,1)),dx:new e.Uniform(1),dy:new e.Uniform(1)},fragmentShader:J,vertexShader:Q,depthWrite:!1,depthTest:!1}))}return f(n,t),c(n,[{key:"setResolution",value:function(e,t){this.uniforms.resolution.value.set(e,t),this.granularity=this.granularity}},{key:"granularity",get:function(){return this.uniforms.granularity.value},set:function(e){var t=this.uniforms,n=t.resolution.value;t.granularity.value=e,t.dx.value=e/n.x,t.dy.value=e/n.y}}]),n}(e.ShaderMaterial),$="#include \r\n\r\nuniform sampler2D tDiffuse;\r\nuniform vec2 center;\r\nuniform float aspect;\r\nuniform float waveSize;\r\nuniform float radius;\r\nuniform float maxRadius;\r\nuniform float amplitude;\r\n\r\nvarying vec2 vUv;\r\nvarying float vSize;\r\n\r\nvoid main() {\r\n\r\n\tvec2 aspectCorrection = vec2(aspect, 1.0);\r\n\r\n\tvec2 difference = vUv * aspectCorrection - center * aspectCorrection;\r\n\tfloat distance = sqrt(dot(difference, difference)) * vSize;\r\n\r\n\tvec2 displacement = vec2(0.0);\r\n\r\n\tif(distance > radius) {\r\n\r\n\t\tif(distance < radius + waveSize) {\r\n\r\n\t\t\tfloat angle = (distance - radius) * PI2 / waveSize;\r\n\t\t\tfloat cosSin = (1.0 - cos(angle)) * 0.5;\r\n\r\n\t\t\tfloat extent = maxRadius + waveSize;\r\n\t\t\tfloat decay = max(extent - distance * distance, 0.0) / extent;\r\n\r\n\t\t\tdisplacement = ((cosSin * amplitude * difference) / distance) * decay;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tgl_FragColor = texture2D(tDiffuse, vUv - displacement);\r\n\r\n}\r\n",ee="uniform float size;\r\nuniform float scale;\r\nuniform float cameraDistance;\r\n\r\nvarying vec2 vUv;\r\nvarying float vSize;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tvSize = (0.1 * cameraDistance) / size;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",te=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return u(this,n),void 0===t.maxRadius&&(t.maxRadius=1),void 0===t.waveSize&&(t.waveSize=.2),void 0===t.amplitude&&(t.amplitude=.05),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"ShockWaveMaterial",uniforms:{tDiffuse:new e.Uniform(null),center:new e.Uniform(new e.Vector2(.5,.5)),aspect:new e.Uniform(1),cameraDistance:new e.Uniform(1),size:new e.Uniform(1),radius:new e.Uniform(-t.waveSize),maxRadius:new e.Uniform(t.maxRadius),waveSize:new e.Uniform(t.waveSize),amplitude:new e.Uniform(t.amplitude)},fragmentShader:$,vertexShader:ee,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),ne="uniform sampler2D tDiffuse;\r\nuniform sampler2D tWeights;\r\n\r\nuniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset;\r\n\r\nvoid main() {\r\n\r\n\t// Fetch the blending weights for current pixel.\r\n\tvec4 a;\r\n\ta.xz = texture2D(tWeights, vUv).xz;\r\n\ta.y = texture2D(tWeights, vOffset.zw).g;\r\n\ta.w = texture2D(tWeights, vOffset.xy).a;\r\n\r\n\tvec4 color;\r\n\r\n\t// Check if there is any blending weight with a value greater than 0.0.\r\n\tif(dot(a, vec4(1.0)) < 1e-5) {\r\n\r\n\t\tcolor = texture2D(tDiffuse, vUv, 0.0);\r\n\r\n\t} else {\r\n\r\n\t\t/* Up to four lines can be crossing a pixel (one through each edge). We favor\r\n\t\t * blending by choosing the line with the maximum weight for each direction.\r\n\t\t */\r\n\r\n\t\tvec2 offset;\r\n\t\toffset.x = a.a > a.b ? a.a : -a.b; // Left vs. right.\r\n\t\toffset.y = a.g > a.r ? -a.g : a.r; // Top vs. bottom (changed signs).\r\n\r\n\t\t// Then we go in the direction that has the maximum weight (horizontal vs. vertical).\r\n\t\tif(abs(offset.x) > abs(offset.y)) {\r\n\r\n\t\t\toffset.y = 0.0;\r\n\r\n\t\t} else {\r\n\r\n\t\t\toffset.x = 0.0;\r\n\r\n\t\t}\r\n\r\n\t\t// Fetch the opposite color and lerp by hand.\r\n\t\tcolor = texture2D(tDiffuse, vUv, 0.0);\r\n\t\tvec2 coord = vUv + sign(offset) * texelSize;\r\n\t\tvec4 oppositeColor = texture2D(tDiffuse, coord, 0.0);\r\n\t\tfloat s = abs(offset.x) > abs(offset.y) ? abs(offset.x) : abs(offset.y);\r\n\r\n\t\t// Gamma correction.\r\n\t\tcolor.rgb = pow(abs(color.rgb), vec3(2.2));\r\n\t\toppositeColor.rgb = pow(abs(oppositeColor.rgb), vec3(2.2));\r\n\t\tcolor = mix(color, oppositeColor, s);\r\n\t\tcolor.rgb = pow(abs(color.rgb), vec3(1.0 / 2.2));\r\n\r\n\t}\r\n\r\n\tgl_FragColor = color;\r\n\r\n}\r\n",re="uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\r\n\tvOffset = uv.xyxy + texelSize.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // Changed sign in W component.\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",ie=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"SMAABlendMaterial",uniforms:{tDiffuse:new e.Uniform(null),tWeights:new e.Uniform(null),texelSize:new e.Uniform(t)},fragmentShader:ne,vertexShader:re,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),ae="uniform sampler2D tDiffuse;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\n\r\nvoid main() {\r\n\r\n\tconst vec2 THRESHOLD = vec2(EDGE_THRESHOLD);\r\n\r\n\t// Calculate color deltas.\r\n\tvec4 delta;\r\n\tvec3 c = texture2D(tDiffuse, vUv).rgb;\r\n\r\n\tvec3 cLeft = texture2D(tDiffuse, vOffset[0].xy).rgb;\r\n\tvec3 t = abs(c - cLeft);\r\n\tdelta.x = max(max(t.r, t.g), t.b);\r\n\r\n\tvec3 cTop = texture2D(tDiffuse, vOffset[0].zw).rgb;\r\n\tt = abs(c - cTop);\r\n\tdelta.y = max(max(t.r, t.g), t.b);\r\n\r\n\t// We do the usual threshold.\r\n\tvec2 edges = step(THRESHOLD, delta.xy);\r\n\r\n\t// Then discard if there is no edge.\r\n\tif(dot(edges, vec2(1.0)) == 0.0) {\r\n\r\n\t\tdiscard;\r\n\r\n\t}\r\n\r\n\t// Calculate right and bottom deltas.\r\n\tvec3 cRight = texture2D(tDiffuse, vOffset[1].xy).rgb;\r\n\tt = abs(c - cRight);\r\n\tdelta.z = max(max(t.r, t.g), t.b);\r\n\r\n\tvec3 cBottom = texture2D(tDiffuse, vOffset[1].zw).rgb;\r\n\tt = abs(c - cBottom);\r\n\tdelta.w = max(max(t.r, t.g), t.b);\r\n\r\n\t// Calculate the maximum delta in the direct neighborhood.\r\n\tfloat maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w);\r\n\r\n\t// Calculate left-left and top-top deltas.\r\n\tvec3 cLeftLeft = texture2D(tDiffuse, vOffset[2].xy).rgb;\r\n\tt = abs(c - cLeftLeft);\r\n\tdelta.z = max(max(t.r, t.g), t.b);\r\n\r\n\tvec3 cTopTop = texture2D(tDiffuse, vOffset[2].zw).rgb;\r\n\tt = abs(c - cTopTop);\r\n\tdelta.w = max(max(t.r, t.g), t.b);\r\n\r\n\t// Calculate the final maximum delta.\r\n\tmaxDelta = max(max(maxDelta, delta.z), delta.w);\r\n\r\n\t// Local contrast adaptation in action.\r\n\tedges.xy *= step(0.5 * maxDelta, delta.xy);\r\n\r\n\tgl_FragColor = vec4(edges, 0.0, 0.0);\r\n\r\n}\r\n",oe="uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\r\n\tvOffset[0] = uv.xyxy + texelSize.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // Changed sign in W component.\r\n\tvOffset[1] = uv.xyxy + texelSize.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // Changed sign in W component.\r\n\tvOffset[2] = uv.xyxy + texelSize.xyxy * vec4(-2.0, 0.0, 0.0, 2.0); // Changed sign in W component.\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",se=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"SMAAColorEdgesMaterial",defines:{EDGE_THRESHOLD:"0.1"},uniforms:{tDiffuse:new e.Uniform(null),texelSize:new e.Uniform(t)},fragmentShader:ae,vertexShader:oe,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),le="data:image/png;base64,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",ue="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=",ce="#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + float(offset) * texelSize, 0.0)\r\n\r\nuniform sampler2D tDiffuse;\r\nuniform sampler2D tArea;\r\nuniform sampler2D tSearch;\r\n\r\nuniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\nvarying vec2 vPixCoord;\r\n\r\nvec2 round(vec2 x) {\r\n\r\n\treturn sign(x) * floor(abs(x) + 0.5);\r\n\r\n}\r\n\r\nfloat searchLength(vec2 e, float bias, float scale) {\r\n\r\n\t// Not required if tSearch accesses are set to point.\r\n\t// const vec2 SEARCH_TEX_PIXEL_SIZE = 1.0 / vec2(66.0, 33.0);\r\n\t// e = vec2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE + e * vec2(scale, 1.0) * vec2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;\r\n\r\n\te.r = bias + e.r * scale;\r\n\r\n\treturn 255.0 * texture2D(tSearch, e, 0.0).r;\r\n\r\n}\r\n\r\nfloat searchXLeft(vec2 texCoord, float end) {\r\n\r\n\t/* @PSEUDO_GATHER4\r\n\t * This texCoord has been offset by (-0.25, -0.125) in the vertex shader to\r\n\t * sample between edge, thus fetching four edges in a row.\r\n\t * Sampling with different offsets in each direction allows to disambiguate\r\n\t * which edges are active from the four fetched ones.\r\n\t */\r\n\r\n\tvec2 e = vec2(0.0, 1.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord -= vec2(2.0, 0.0) * texelSize;\r\n\r\n\t\tif(!(texCoord.x > end && e.g > 0.8281 && e.r == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\t// Correct the previously applied offset (-0.25, -0.125).\r\n\ttexCoord.x += 0.25 * texelSize.x;\r\n\r\n\t// The searches are biased by 1, so adjust the coords accordingly.\r\n\ttexCoord.x += texelSize.x;\r\n\r\n\t// Disambiguate the length added by the last step.\r\n\ttexCoord.x += 2.0 * texelSize.x; // Undo last step.\r\n\ttexCoord.x -= texelSize.x * searchLength(e, 0.0, 0.5);\r\n\r\n\treturn texCoord.x;\r\n\r\n}\r\n\r\nfloat searchXRight(vec2 texCoord, float end) {\r\n\r\n\tvec2 e = vec2(0.0, 1.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord += vec2(2.0, 0.0) * texelSize;\r\n\r\n\t\tif(!(texCoord.x < end && e.g > 0.8281 && e.r == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\ttexCoord.x -= 0.25 * texelSize.x;\r\n\ttexCoord.x -= texelSize.x;\r\n\ttexCoord.x -= 2.0 * texelSize.x;\r\n\ttexCoord.x += texelSize.x * searchLength(e, 0.5, 0.5);\r\n\r\n\treturn texCoord.x;\r\n\r\n}\r\n\r\nfloat searchYUp(vec2 texCoord, float end) {\r\n\r\n\tvec2 e = vec2(1.0, 0.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord += vec2(0.0, 2.0) * texelSize; // Changed sign.\r\n\r\n\t\tif(!(texCoord.y > end && e.r > 0.8281 && e.g == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\ttexCoord.y -= 0.25 * texelSize.y; // Changed sign.\r\n\ttexCoord.y -= texelSize.y; // Changed sign.\r\n\ttexCoord.y -= 2.0 * texelSize.y; // Changed sign.\r\n\ttexCoord.y += texelSize.y * searchLength(e.gr, 0.0, 0.5); // Changed sign.\r\n\r\n\treturn texCoord.y;\r\n\r\n}\r\n\r\nfloat searchYDown(vec2 texCoord, float end) {\r\n\r\n\tvec2 e = vec2(1.0, 0.0);\r\n\r\n\tfor(int i = 0; i < SMAA_MAX_SEARCH_STEPS_INT; ++i ) {\r\n\r\n\t\te = texture2D(tDiffuse, texCoord, 0.0).rg;\r\n\t\ttexCoord -= vec2(0.0, 2.0) * texelSize; // Changed sign.\r\n\r\n\t\tif(!(texCoord.y < end && e.r > 0.8281 && e.g == 0.0)) { break; }\r\n\r\n\t}\r\n\r\n\ttexCoord.y += 0.25 * texelSize.y; // Changed sign.\r\n\ttexCoord.y += texelSize.y; // Changed sign.\r\n\ttexCoord.y += 2.0 * texelSize.y; // Changed sign.\r\n\ttexCoord.y -= texelSize.y * searchLength(e.gr, 0.5, 0.5); // Changed sign.\r\n\r\n\treturn texCoord.y;\r\n\r\n}\r\n\r\nvec2 area(vec2 dist, float e1, float e2, float offset) {\r\n\r\n\t// Rounding prevents precision errors of bilinear filtering.\r\n\tvec2 texCoord = SMAA_AREATEX_MAX_DISTANCE * round(4.0 * vec2(e1, e2)) + dist;\r\n\r\n\t// Scale and bias for texel space translation.\r\n\ttexCoord = SMAA_AREATEX_PIXEL_SIZE * texCoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE);\r\n\r\n\t// Move to proper place, according to the subpixel offset.\r\n\ttexCoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;\r\n\r\n\treturn texture2D(tArea, texCoord, 0.0).rg;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec4 weights = vec4(0.0);\r\n\tvec4 subsampleIndices = vec4(0.0);\r\n\tvec2 e = texture2D(tDiffuse, vUv).rg;\r\n\r\n\tif(e.g > 0.0) {\r\n\r\n\t\t// Edge at north.\r\n\t\tvec2 d;\r\n\r\n\t\t// Find the distance to the left.\r\n\t\tvec2 coords;\r\n\t\tcoords.x = searchXLeft(vOffset[0].xy, vOffset[2].x);\r\n\t\tcoords.y = vOffset[1].y; // vOffset[1].y = vUv.y - 0.25 * texelSize.y (@CROSSING_OFFSET)\r\n\t\td.x = coords.x;\r\n\r\n\t\t/* Now fetch the left crossing edges, two at a time using bilinear filtering.\r\n\t\tSampling at -0.25 (see @CROSSING_OFFSET) enables to discern what value each edge has. */\r\n\r\n\t\tfloat e1 = texture2D(tDiffuse, coords, 0.0).r;\r\n\r\n\t\t// Find the distance to the right.\r\n\t\tcoords.x = searchXRight(vOffset[0].zw, vOffset[2].y);\r\n\t\td.y = coords.x;\r\n\r\n\t\t// Translate distances to pixel units for better interleave arithmetic and memory accesses.\r\n\t\td = d / texelSize.x - vPixCoord.x;\r\n\r\n\t\t// The area below needs a sqrt, as the areas texture is compressed quadratically.\r\n\t\tvec2 sqrtD = sqrt(abs(d));\r\n\r\n\t\t// Fetch the right crossing edges.\r\n\t\tcoords.y -= texelSize.y; // WebGL port note: Added.\r\n\t\tfloat e2 = sampleLevelZeroOffset(tDiffuse, coords, ivec2(1, 0)).r;\r\n\r\n\t\t// Pattern recognised, now get the actual area.\r\n\t\tweights.rg = area(sqrtD, e1, e2, subsampleIndices.y);\r\n\r\n\t}\r\n\r\n\tif(e.r > 0.0) {\r\n\r\n\t\t// Edge at west.\r\n\t\tvec2 d;\r\n\r\n\t\t// Find the distance to the top.\r\n\t\tvec2 coords;\r\n\r\n\t\tcoords.y = searchYUp(vOffset[1].xy, vOffset[2].z);\r\n\t\tcoords.x = vOffset[0].x; // vOffset[1].x = vUv.x - 0.25 * texelSize.x;\r\n\t\td.x = coords.y;\r\n\r\n\t\t// Fetch the top crossing edges.\r\n\t\tfloat e1 = texture2D(tDiffuse, coords, 0.0).g;\r\n\r\n\t\t// Find the distance to the bottom.\r\n\t\tcoords.y = searchYDown(vOffset[1].zw, vOffset[2].w);\r\n\t\td.y = coords.y;\r\n\r\n\t\t// Distances in pixel units.\r\n\t\td = d / texelSize.y - vPixCoord.y;\r\n\r\n\t\t// The area below needs a sqrt, as the areas texture is compressed quadratically.\r\n\t\tvec2 sqrtD = sqrt(abs(d));\r\n\r\n\t\t// Fetch the bottom crossing edges.\r\n\t\tcoords.y -= texelSize.y; // WebGL port note: Added.\r\n\t\tfloat e2 = sampleLevelZeroOffset(tDiffuse, coords, ivec2(0, 1)).g;\r\n\r\n\t\t// Get the area for this direction.\r\n\t\tweights.ba = area(sqrtD, e1, e2, subsampleIndices.x);\r\n\r\n\t}\r\n\r\n\tgl_FragColor = weights;\r\n\r\n}\r\n",de="uniform vec2 texelSize;\r\n\r\nvarying vec2 vUv;\r\nvarying vec4 vOffset[3];\r\nvarying vec2 vPixCoord;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\r\n\tvPixCoord = uv / texelSize;\r\n\r\n\t// Offsets for the searches (see @PSEUDO_GATHER4).\r\n\tvOffset[0] = uv.xyxy + texelSize.xyxy * vec4(-0.25, 0.125, 1.25, 0.125); // Changed sign in Y and W components.\r\n\tvOffset[1] = uv.xyxy + texelSize.xyxy * vec4(-0.125, 0.25, -0.125, -1.25); //Changed sign in Y and W components.\r\n\r\n\t// This indicates the ends of the loops.\r\n\tvOffset[2] = vec4(vOffset[0].xz, vOffset[1].yw) + vec4(-2.0, 2.0, -2.0, 2.0) * texelSize.xxyy * SMAA_MAX_SEARCH_STEPS_FLOAT;\r\n\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",fe=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Vector2;u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"SMAAWeightsMaterial",defines:{SMAA_MAX_SEARCH_STEPS_INT:"8",SMAA_MAX_SEARCH_STEPS_FLOAT:"8.0",SMAA_AREATEX_MAX_DISTANCE:"16.0",SMAA_AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",SMAA_AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)"},uniforms:{tDiffuse:new e.Uniform(null),tArea:new e.Uniform(null),tSearch:new e.Uniform(null),texelSize:new e.Uniform(t)},fragmentShader:ce,vertexShader:de,depthWrite:!1,depthTest:!1}));return r.areaImage=le,r.searchImage=ue,r}return f(n,t),n}(e.ShaderMaterial),ve="uniform sampler2D tDiffuse;\r\nuniform float middleGrey;\r\nuniform float maxLuminance;\r\nuniform vec3 luminanceCoefficients;\r\n\r\n#ifdef ADAPTED_LUMINANCE\r\n\r\n\tuniform sampler2D luminanceMap;\r\n\r\n#else\r\n\r\n\tuniform float averageLuminance;\r\n\r\n#endif\r\n\r\nvarying vec2 vUv;\r\n\r\nvec3 toneMap(vec3 c) {\r\n\r\n\t#ifdef ADAPTED_LUMINANCE\r\n\r\n\t\t// Get the calculated average luminance by sampling the center.\r\n\t\tfloat lumAvg = texture2D(luminanceMap, vec2(0.5)).r;\r\n\r\n\t#else\r\n\r\n\t\tfloat lumAvg = averageLuminance;\r\n\r\n\t#endif\r\n\r\n\t// Calculate the luminance of the current pixel.\r\n\tfloat lumPixel = dot(c, luminanceCoefficients);\r\n\r\n\t// Apply the modified operator (Reinhard Eq. 4).\r\n\tfloat lumScaled = (lumPixel * middleGrey) / lumAvg;\r\n\r\n\tfloat lumCompressed = (lumScaled * (1.0 + (lumScaled / (maxLuminance * maxLuminance)))) / (1.0 + lumScaled);\r\n\r\n\treturn lumCompressed * c;\r\n\r\n}\r\n\r\nvoid main() {\r\n\r\n\tvec4 texel = texture2D(tDiffuse, vUv);\r\n\tgl_FragColor = vec4(toneMap(texel.rgb), texel.a);\r\n\r\n}\r\n",he="varying vec2 vUv;\r\n\r\nvoid main() {\r\n\r\n\tvUv = uv;\r\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n\r\n}\r\n",me=function(t){function n(){return u(this,n),v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,{type:"ToneMappingMaterial",uniforms:{tDiffuse:new e.Uniform(null),luminanceMap:new e.Uniform(null),averageLuminance:new e.Uniform(1),luminanceCoefficients:new e.Uniform(new e.Vector3(.2126,.7152,.0722)),maxLuminance:new e.Uniform(16),middleGrey:new e.Uniform(.6)},fragmentShader:ve,vertexShader:he,depthWrite:!1,depthTest:!1}))}return f(n,t),n}(e.ShaderMaterial),pe=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new e.Scene,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new e.OrthographicCamera(-1,1,1,-1,0,1),i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new e.Mesh(new e.PlaneBufferGeometry(2,2),null);u(this,t),this.name="Pass",this.scene=n,this.camera=r,this.quad=i,null!==this.quad&&(this.quad.frustumCulled=!1,null!==this.scene&&this.scene.add(this.quad)),this.needsSwap=!1,this.enabled=!0,this.renderToScreen=!1}return c(t,[{key:"render",value:function(e,t,n,r,i){throw new Error("Render method not implemented!")}},{key:"setSize",value:function(e,t){}},{key:"initialise",value:function(e,t){}},{key:"dispose",value:function(){var e=Object.keys(this),t=void 0,n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0)null!==this[t=a.value]&&"function"==typeof this[t].dispose&&(this[t].dispose(),this[t]=null)}catch(e){r=!0,i=e}finally{try{!n&&o.return&&o.return()}finally{if(r)throw i}}}}]),t}(),ge=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.name="BlurPass",r.needsSwap=!0,r.renderTargetX=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),r.renderTargetX.texture.name="Blur.TargetX",r.renderTargetX.texture.generateMipmaps=!1,r.renderTargetY=r.renderTargetX.clone(),r.renderTargetY.texture.name="Blur.TargetY",r.resolutionScale=void 0!==t.resolutionScale?t.resolutionScale:.5,r.convolutionMaterial=new T,r.kernelSize=t.kernelSize,r.quad.material=r.convolutionMaterial,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){var r=this.scene,i=this.camera,a=this.renderTargetX,o=this.renderTargetY,s=this.convolutionMaterial,l=s.uniforms,u=s.getKernel(),c=t,d=void 0,f=void 0,v=void 0;for(f=0,v=u.length-1;f0&&void 0!==arguments[0]?arguments[0]:C.LARGE;this.convolutionMaterial.kernelSize=e}}]),n}(),xe=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.name="BloomPass",r.needsSwap=!0,r.blurPass=new ge(t),r.renderTarget=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),r.renderTarget.texture.name="Bloom.Target",r.renderTarget.texture.generateMipmaps=!1,r.combineMaterial=new S(void 0===t.screenMode||t.screenMode),r.intensity=t.intensity,r.luminosityMaterial=new Z(!0),r.distinction=t.distinction,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){var r=this.quad,i=this.scene,a=this.camera,o=this.blurPass,s=this.luminosityMaterial,l=this.combineMaterial,u=this.renderTarget;r.material=s,s.uniforms.tDiffuse.value=t.texture,e.render(i,a,u),o.render(e,u,u),r.material=l,l.uniforms.texture1.value=t.texture,l.uniforms.texture2.value=u.texture,e.render(i,a,this.renderToScreen?null:n)}},{key:"initialise",value:function(t,n){this.blurPass.initialise(t,n),n||(this.renderTarget.texture.format=e.RGBFormat)}},{key:"setSize",value:function(e,t){this.blurPass.setSize(e,t),e=this.blurPass.width,t=this.blurPass.height,this.renderTarget.setSize(e,t)}},{key:"resolutionScale",get:function(){return this.blurPass.resolutionScale},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.5;this.blurPass.resolutionScale=e}},{key:"kernelSize",get:function(){return this.blurPass.kernelSize},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:C.LARGE;this.blurPass.kernelSize=e}},{key:"intensity",get:function(){return this.combineMaterial.uniforms.opacity2.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.combineMaterial.uniforms.opacity2.value=e}},{key:"distinction",get:function(){return this.luminosityMaterial.uniforms.distinction.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.luminosityMaterial.uniforms.distinction.value=e}}]),n}(),ye=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name="BokehPass",r.needsSwap=!0,r.bokehMaterial=new g(e,n),r.quad.material=r.bokehMaterial,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.bokehMaterial.uniforms.tDiffuse.value=t.texture,this.bokehMaterial.uniforms.tDepth.value=t.depthTexture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.bokehMaterial.uniforms.aspect.value=e/t}}]),t}(),Me=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name="Bokeh2Pass",r.needsSwap=!0,r.bokehMaterial=new M(e,n),r.quad.material=r.bokehMaterial,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.bokehMaterial.uniforms.tDiffuse.value=t.texture,this.bokehMaterial.uniforms.tDepth.value=t.depthTexture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.bokehMaterial.setTexelSize(1/e,1/t)}}]),t}(),we=function(e){function t(){u(this,t);var e=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,null,null,null));return e.name="ClearMaskPass",e}return f(t,pe),c(t,[{key:"render",value:function(e){e.state.buffers.stencil.setTest(!1)}}]),t}(),be=new e.Color,Se=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,null,null,null));return n.name="ClearPass",n.clearColor=void 0!==e.clearColor?e.clearColor:null,n.clearAlpha=void 0!==e.clearAlpha?e.clearAlpha:0,n}return f(t,pe),c(t,[{key:"render",value:function(e,t){var n=this.clearColor,r=void 0;null!==n&&(be.copy(e.getClearColor()),r=e.getClearAlpha(),e.setClearColor(n,this.clearAlpha)),e.setRenderTarget(this.renderToScreen?null:t),e.clear(),null!==n&&e.setClearColor(be,r)}}]),t}(),De=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="DotScreenPass",n.needsSwap=!0,n.material=new j(e.average),void 0!==e.angle&&(n.material.uniforms.angle.value=e.angle),void 0!==e.scale&&(n.material.uniforms.scale.value=e.scale),void 0!==e.intensity&&(n.material.uniforms.intensity.value=e.intensity),n.quad.material=n.material,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.material.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){e=Math.max(1,e),t=Math.max(1,t),this.material.uniforms.offsetRepeat.value.z=e,this.material.uniforms.offsetRepeat.value.w=t}}]),t}(),Pe=function(e){function t(e){u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="DepthPass",n.needsSwap=!0,n.depthMaterial=new z(e),n.quad.material=n.depthMaterial,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.depthMaterial.uniforms.tDepth.value=t.depthTexture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}}]),t}(),Te=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="FilmPass",n.needsSwap=!0,n.material=new I(e),n.quad.material=n.material,n.scanlineDensity=void 0===e.scanlineDensity?1.25:e.scanlineDensity,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n,r){this.material.uniforms.tDiffuse.value=t.texture,this.material.uniforms.time.value+=r,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.material.uniforms.scanlineCount.value=Math.round(t*this.scanlineDensity)}}]),t}(),Ae=function(t){function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.name="GlitchPass",t.needsSwap=!0,t.material=new H,t.quad.material=t.material,t.texture=null,t.perturbMap=void 0!==e.perturbMap?e.perturbMap:t.generatePerturbMap(e.dtSize),t.perturbMap.name="Glitch.Perturbation",t.perturbMap.generateMipmaps=!1,t.mode=Ce.SPORADIC,t.counter=0,t.breakPoint=r(120,240),t}return f(n,pe),c(n,[{key:"generatePerturbMap",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:64,n=t*t,r=new Float32Array(3*n),i=this.perturbMap,a=void 0,o=void 0;for(a=0;a2&&void 0!==arguments[2]?arguments[2]:{};u(this,t);var i=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,null));return i.name="RenderPass",i.clearPass=new Se(r),i.overrideMaterial=void 0!==r.overrideMaterial?r.overrideMaterial:null,i.clearDepth=void 0!==r.clearDepth&&r.clearDepth,i.clear=void 0===r.clear||r.clear,i}return f(t,pe),c(t,[{key:"render",value:function(e,t){var n=this.scene,r=this.renderToScreen?null:t;this.clear?this.clearPass.render(e,r):this.clearDepth&&(e.setRenderTarget(r),e.clearDepth()),n.overrideMaterial=this.overrideMaterial,e.render(n,this.camera,r),n.overrideMaterial=null}}]),t}(),Le=function(t){function n(t,r,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};u(this,n);var o=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return o.name="GodRaysPass",o.needsSwap=!0,o.lightScene=new e.Scene,o.mainScene=t,o.mainCamera=r,o.renderPassLight=new Oe(o.lightScene,o.mainCamera),o.renderPassMask=new Oe(o.mainScene,o.mainCamera,{overrideMaterial:new e.MeshBasicMaterial({color:0}),clearColor:new e.Color(0)}),o.renderPassMask.clear=!1,o.blurPass=new ge(a),o.renderTargetX=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),o.renderTargetX.texture.name="GodRays.TargetX",o.renderTargetX.texture.generateMipmaps=!1,o.renderTargetY=o.renderTargetX.clone(),o.renderTargetY.texture.name="GodRays.TargetY",o.renderTargetMask=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter}),o.renderTargetMask.texture.name="GodRays.Mask",o.renderTargetMask.texture.generateMipmaps=!1,o.lightSource=i,o.screenPosition=new e.Vector3,o.godRaysMaterial=new Y,o.godRaysMaterial.uniforms.lightPosition.value=o.screenPosition,void 0!==a.exposure&&(o.godRaysMaterial.uniforms.exposure.value=a.exposure),void 0!==a.density&&(o.godRaysMaterial.uniforms.density.value=a.density),void 0!==a.decay&&(o.godRaysMaterial.uniforms.decay.value=a.decay),void 0!==a.weight&&(o.godRaysMaterial.uniforms.weight.value=a.weight),void 0!==a.clampMax&&(o.godRaysMaterial.uniforms.clampMax.value=a.clampMax),o.samples=a.samples,o.combineMaterial=new S(void 0===a.screenMode||a.screenMode),o.intensity=a.intensity,o}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){var r=this.quad,i=this.scene,o=this.camera,s=this.mainScene,l=this.lightSource,u=this.screenPosition,c=this.godRaysMaterial,d=this.combineMaterial,f=this.renderTargetMask,v=this.renderTargetX,h=this.renderTargetY,m=void 0,p=void 0;u.copy(l.position).project(this.mainCamera),u.x=a(.5*(u.x+1),0,1),u.y=a(.5*(u.y+1),0,1),p=l.parent,m=s.background,s.background=null,this.lightScene.add(l),this.renderPassLight.render(e,f),this.renderPassMask.render(e,f),null!==p&&p.add(l),s.background=m,this.blurPass.render(e,f,v),r.material=c,c.uniforms.tDiffuse.value=v.texture,e.render(i,o,h),r.material=d,d.uniforms.texture1.value=t.texture,d.uniforms.texture2.value=h.texture,e.render(i,o,this.renderToScreen?null:n)}},{key:"initialise",value:function(t,n){this.renderPassLight.initialise(t,n),this.renderPassMask.initialise(t,n),this.blurPass.initialise(t,n),n||(this.renderTargetMask.texture.format=e.RGBFormat,this.renderTargetX.texture.format=e.RGBFormat,this.renderTargetY.texture.format=e.RGBFormat)}},{key:"setSize",value:function(e,t){this.renderPassLight.setSize(e,t),this.renderPassMask.setSize(e,t),this.blurPass.setSize(e,t),e=this.blurPass.width,t=this.blurPass.height,this.renderTargetMask.setSize(e,t),this.renderTargetX.setSize(e,t),this.renderTargetY.setSize(e,t)}},{key:"resolutionScale",get:function(){return this.blurPass.resolutionScale},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.5;this.blurPass.resolutionScale=e}},{key:"kernelSize",get:function(){return this.blurPass.kernelSize},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:C.LARGE;this.blurPass.kernelSize=e}},{key:"intensity",get:function(){return this.combineMaterial.uniforms.opacity2.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.combineMaterial.uniforms.opacity2.value=e}},{key:"samples",get:function(){return Number.parseInt(this.godRaysMaterial.defines.NUM_SAMPLES_INT)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:60;e=Math.floor(e),this.godRaysMaterial.defines.NUM_SAMPLES_FLOAT=e.toFixed(1),this.godRaysMaterial.defines.NUM_SAMPLES_INT=e.toFixed(0),this.godRaysMaterial.needsUpdate=!0}}]),n}(),Ee=function(e){function t(e,n){u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,null));return r.name="MaskPass",r.inverse=!1,r.clearStencil=!0,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){var r=e.context,i=e.state,a=this.scene,o=this.camera,s=this.inverse?0:1,l=1-s;i.buffers.color.setMask(!1),i.buffers.depth.setMask(!1),i.buffers.color.setLocked(!0),i.buffers.depth.setLocked(!0),i.buffers.stencil.setTest(!0),i.buffers.stencil.setOp(r.REPLACE,r.REPLACE,r.REPLACE),i.buffers.stencil.setFunc(r.ALWAYS,s,4294967295),i.buffers.stencil.setClear(l),this.clearStencil&&(e.setRenderTarget(t),e.clearStencil(),e.setRenderTarget(n),e.clearStencil()),e.render(a,o,t),e.render(a,o,n),i.buffers.color.setLocked(!1),i.buffers.depth.setLocked(!1),i.buffers.stencil.setFunc(r.EQUAL,1,4294967295),i.buffers.stencil.setOp(r.KEEP,r.KEEP,r.KEEP)}}]),t}(),ke=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:30;u(this,t);var n=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.name="PixelationPass",n.needsSwap=!0,n.pixelationMaterial=new _,n.granularity=e,n.quad.material=n.pixelationMaterial,n}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){this.pixelationMaterial.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.pixelationMaterial.setResolution(e,t)}},{key:"granularity",get:function(){return this.pixelationMaterial.granularity},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:30;(e=Math.floor(e))%2>0&&(e+=1),this.pixelationMaterial.granularity=e}}]),t}(),Ue=function(t){function n(t){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];u(this,n);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return i.name="SavePass",i.material=new E,i.quad.material=i.material,i.renderTarget=void 0!==t?t:new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,stencilBuffer:!1,depthBuffer:!1}),i.renderTarget.texture.name="Save.Target",i.renderTarget.texture.generateMipmaps=!1,i.resize=r,i}return f(n,pe),c(n,[{key:"render",value:function(e,t){this.material.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderTarget)}},{key:"initialise",value:function(t,n){n||(this.renderTarget.texture.format=e.RGBFormat)}},{key:"setSize",value:function(e,t){this.resize&&(e=Math.max(1,e),t=Math.max(1,t),this.renderTarget.setSize(e,t))}}]),n}(),ze=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"tDiffuse";u(this,t);var r=v(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.name="ShaderPass",r.needsSwap=!0,r.material=e,r.quad.material=r.material,r.textureID=n,r}return f(t,pe),c(t,[{key:"render",value:function(e,t,n){void 0!==this.material.uniforms[this.textureID]&&(this.material.uniforms[this.textureID].value=t.texture),e.render(this.scene,this.camera,this.renderToScreen?null:n)}}]),t}(),Fe=.5*Math.PI,Ne=new e.Vector3,je=new e.Vector3,Be=function(t){function n(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new e.Vector3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};u(this,n);var a=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return a.name="ShockWavePass",a.needsSwap=!0,a.mainCamera=t,a.epicenter=r,a.screenPosition=new e.Vector3,a.speed=void 0!==i.speed?i.speed:2,a.time=0,a.active=!1,a.shockWaveMaterial=new te(i),a.shockWaveMaterial.uniforms.center.value=a.screenPosition,a.copyMaterial=new E,a}return f(n,pe),c(n,[{key:"explode",value:function(){this.time=0,this.active=!0}},{key:"render",value:function(e,t,n,r){var i=this.epicenter,a=this.mainCamera,o=this.screenPosition,s=this.shockWaveMaterial,l=s.uniforms,u=l.center,c=l.radius,d=l.maxRadius,f=l.waveSize;this.copyMaterial.uniforms.tDiffuse.value=t.texture,this.quad.material=this.copyMaterial,this.active&&(a.getWorldDirection(Ne),je.copy(a.position).sub(i),Ne.angleTo(je)>Fe&&(l.cameraDistance.value=a.position.distanceTo(i),o.copy(i).project(a),u.value.x=.5*(o.x+1),u.value.y=.5*(o.y+1),l.tDiffuse.value=t.texture,this.quad.material=s),this.time+=r*this.speed,c.value=this.time-f.value,c.value>=2*(d.value+f.value)&&(this.active=!1)),e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.shockWaveMaterial.uniforms.aspect.value=e/t}}]),n}(),Re=function(t){function n(t){u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));r.name="SMAAPass",r.needsSwap=!0,r.renderTargetColorEdges=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearFilter,format:e.RGBFormat,stencilBuffer:!1,depthBuffer:!1}),r.renderTargetColorEdges.texture.name="SMAA.ColorEdges",r.renderTargetColorEdges.texture.generateMipmaps=!1,r.renderTargetWeights=r.renderTargetColorEdges.clone(),r.renderTargetWeights.texture.name="SMAA.Weights",r.renderTargetWeights.texture.format=e.RGBAFormat,r.colorEdgesMaterial=new se,r.weightsMaterial=new fe;var i=new t;i.src=r.weightsMaterial.areaImage;var a=new e.Texture;a.image=i,a.name="SMAA.Area",a.minFilter=e.LinearFilter,a.format=e.RGBFormat,a.generateMipmaps=!1,a.needsUpdate=!0,a.flipY=!1;var o=new t;o.src=r.weightsMaterial.searchImage;var s=new e.Texture;return s.image=o,s.name="SMAA.Search",s.magFilter=e.NearestFilter,s.minFilter=e.NearestFilter,s.generateMipmaps=!1,s.needsUpdate=!0,s.flipY=!1,r.weightsMaterial.uniforms.tDiffuse.value=r.renderTargetColorEdges.texture,r.weightsMaterial.uniforms.tArea.value=a,r.weightsMaterial.uniforms.tSearch.value=s,r.blendMaterial=new ie,r.blendMaterial.uniforms.tWeights.value=r.renderTargetWeights.texture,r.quad.material=r.blendMaterial,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n){this.quad.material=this.colorEdgesMaterial,this.colorEdgesMaterial.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderTargetColorEdges,!0),this.quad.material=this.weightsMaterial,e.render(this.scene,this.camera,this.renderTargetWeights,!1),this.quad.material=this.blendMaterial,this.blendMaterial.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"setSize",value:function(e,t){this.renderTargetColorEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t),this.colorEdgesMaterial.uniforms.texelSize.value.copy(this.weightsMaterial.uniforms.texelSize.value.copy(this.blendMaterial.uniforms.texelSize.value.set(1/e,1/t)))}}]),n}(),Ie=function(t){function n(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;u(this,n);var i=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return i.name="TexturePass",i.copyMaterial=new E,i.copyMaterial.blending=e.AdditiveBlending,i.copyMaterial.transparent=!0,i.texture=t,i.opacity=r,i.quad.material=i.copyMaterial,i}return f(n,pe),c(n,[{key:"render",value:function(e,t){e.render(this.scene,this.camera,this.renderToScreen?null:t)}},{key:"texture",get:function(){return this.copyMaterial.uniforms.tDiffuse.value},set:function(e){this.copyMaterial.uniforms.tDiffuse.value=e}},{key:"opacity",get:function(){return this.copyMaterial.uniforms.opacity.value},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.copyMaterial.uniforms.opacity.value=e}}]),n}(),Ge=function(t){function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};u(this,n);var r=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.name="ToneMappingPass",r.needsSwap=!0,r.renderTargetLuminosity=new e.WebGLRenderTarget(1,1,{minFilter:e.LinearMipMapLinearFilter,magFilter:e.LinearFilter,format:e.RGBFormat,stencilBuffer:!1,depthBuffer:!1}),r.renderTargetLuminosity.texture.name="ToneMapping.Luminosity",r.renderTargetAdapted=r.renderTargetLuminosity.clone(),r.renderTargetAdapted.texture.name="ToneMapping.AdaptedLuminosity",r.renderTargetAdapted.texture.generateMipmaps=!1,r.renderTargetAdapted.texture.minFilter=e.LinearFilter,r.renderTargetPrevious=r.renderTargetAdapted.clone(),r.renderTargetPrevious.texture.name="ToneMapping.PreviousLuminosity",r.copyMaterial=new E,r.luminosityMaterial=new Z,r.luminosityMaterial.uniforms.distinction.value=void 0!==t.distinction?t.distinction:1,r.adaptiveLuminosityMaterial=new h,r.resolution=t.resolution,r.toneMappingMaterial=new me,r.adaptive=t.adaptive,r}return f(n,pe),c(n,[{key:"render",value:function(e,t,n,r){var i=this.quad,a=this.scene,o=this.camera,s=this.adaptiveLuminosityMaterial,l=this.luminosityMaterial,u=this.toneMappingMaterial,c=this.copyMaterial,d=this.renderTargetPrevious,f=this.renderTargetLuminosity,v=this.renderTargetAdapted;this.adaptive&&(i.material=l,l.uniforms.tDiffuse.value=t.texture,e.render(a,o,f),i.material=s,s.uniforms.delta.value=r,s.uniforms.tPreviousLum.value=d.texture,s.uniforms.tCurrentLum.value=f.texture,e.render(a,o,v),i.material=c,c.uniforms.tDiffuse.value=v.texture,e.render(a,o,d)),i.material=u,u.uniforms.tDiffuse.value=t.texture,e.render(this.scene,this.camera,this.renderToScreen?null:n)}},{key:"initialise",value:function(t){this.quad.material=new e.MeshBasicMaterial({color:8388607}),t.render(this.scene,this.camera,this.renderTargetPrevious),this.quad.material.dispose()}},{key:"resolution",get:function(){return this.renderTargetLuminosity.width},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:256;e=o(e),this.renderTargetLuminosity.setSize(e,e),this.renderTargetPrevious.setSize(e,e),this.renderTargetAdapted.setSize(e,e),this.adaptiveLuminosityMaterial.defines.MIP_LEVEL_1X1=(Math.round(Math.log(e))/Math.log(2)).toFixed(1),this.adaptiveLuminosityMaterial.needsUpdate=!0}},{key:"adaptive",get:function(){return void 0!==this.toneMappingMaterial.defines.ADAPTED_LUMINANCE},set:function(){!(arguments.length>0&&void 0!==arguments[0])||arguments[0]?(this.toneMappingMaterial.defines.ADAPTED_LUMINANCE="1",this.toneMappingMaterial.uniforms.luminanceMap.value=this.renderTargetAdapted.texture):(delete this.toneMappingMaterial.defines.ADAPTED_LUMINANCE,this.toneMappingMaterial.uniforms.luminanceMap.value=null),this.toneMappingMaterial.needsUpdate=!0}}]),n}(),We=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(this,t),this.renderer=e,this.readBuffer=null,this.writeBuffer=null,null!==this.renderer&&(this.renderer.autoClear=!1,this.readBuffer=this.createBuffer(void 0===n.depthBuffer||n.depthBuffer,void 0!==n.stencilBuffer&&n.stencilBuffer,void 0!==n.depthTexture&&n.depthTexture),this.writeBuffer=this.readBuffer.clone()),this.copyPass=new ze(new E),this.passes=[]}return c(t,[{key:"replaceRenderer",value:function(e){var t=this.renderer,n=void 0,r=void 0,i=void 0;return null!==t&&t!==e&&(this.renderer=e,this.renderer.autoClear=!1,n=t.domElement.parentNode,r=t.getSize(),i=e.getSize(),null!==n&&(n.removeChild(t.domElement),n.appendChild(e.domElement)),r.width===i.width&&r.height===i.height||this.setSize()),t}},{key:"createBuffer",value:function(t,n,r){var i=this.renderer.getSize(),a=this.renderer.getPixelRatio(),o=this.renderer.context.getContextAttributes().alpha,s=new e.WebGLRenderTarget(i.width*a,i.height*a,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,format:o?e.RGBAFormat:e.RGBFormat,depthBuffer:t,stencilBuffer:n,depthTexture:r?new e.DepthTexture:null});return r&&n&&(s.depthTexture.format=e.DepthStencilFormat,s.depthTexture.type=e.UnsignedInt248Type),s.texture.name="EffectComposer.Buffer",s.texture.generateMipmaps=!1,s}},{key:"addPass",value:function(e,t){var n=this.renderer,r=n.getSize(),i=n.getPixelRatio();e.setSize(r.width*i,r.height*i),e.initialise(n,n.context.getContextAttributes().alpha),void 0!==t?this.passes.splice(t,0,e):this.passes.push(e)}},{key:"removePass",value:function(e){this.passes.splice(this.passes.indexOf(e),1)}},{key:"render",value:function(e){var t=this.passes,n=this.renderer,r=this.copyPass,i=this.readBuffer,a=this.writeBuffer,o=!1,s=void 0,l=void 0,u=void 0,c=void 0,d=void 0;for(c=0,d=t.length;c0;)t.pop().dispose();void 0!==e?(this.readBuffer=e,this.writeBuffer=this.readBuffer.clone()):this.copyPass.dispose()}},{key:"depthTexture",get:function(){return this.readBuffer.depthTexture},set:function(e){this.readBuffer.depthTexture=e,this.writeBuffer.depthTexture=e}}]),t}(),He=function(){function t(n){u(this,t),this.composer=n,this.loadingManager=new e.LoadingManager,this.assets=null,this.scene=new e.Scene,this.scene.fog=new e.FogExp2(855309,.0025),this.camera=new e.PerspectiveCamera(50,window.innerWidth/window.innerHeight,.1,2e3),this.controls=null}return c(t,[{key:"load",value:function(e){e()}},{key:"initialise",value:function(){}},{key:"update",value:function(e){}},{key:"configure",value:function(e){}},{key:"reset",value:function(){var t=this.scene.fog;return this.scene=new e.Scene,this.scene.fog=t,null!==this.controls&&(this.controls.dispose(),this.controls=null),this}}]),t}(),Xe=2*Math.PI,Ve=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.bloomPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space2/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-10,6,15),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(c=0;c<100;++c)u=new e.MeshPhongMaterial({color:16777215*Math.random(),flatShading:!0}),(d=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),d.position.multiplyScalar(4*Math.random()),d.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),d.scale.multiplyScalar(.5*Math.random()),s.add(d);this.object=s,t.add(s),d=new e.Mesh(new e.BoxBufferGeometry(.25,8.25,.25),new e.MeshLambertMaterial({color:723723}));var f=void 0,v=void 0,h=void 0;f=(s=new e.Object3D).clone();var m=d.clone();m.position.set(-4,0,4),f.add(m),(m=d.clone()).position.set(4,0,4),f.add(m),(m=d.clone()).position.set(-4,0,-4),f.add(m),(m=d.clone()).position.set(4,0,-4),f.add(m),(v=f.clone()).rotation.set(Math.PI/2,0,0),(h=f.clone()).rotation.set(0,0,Math.PI/2),s.add(f),s.add(v),s.add(h),t.add(s),i.addPass(new Oe(t,n));var p=new xe({resolutionScale:.5,intensity:2,distinction:4});p.renderToScreen=!0,this.bloomPass=p,i.addPass(p)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=Xe&&(t.rotation.x-=Xe),t.rotation.y>=Xe&&(t.rotation.y-=Xe))}},{key:"configure",value:function(e){var t=this.composer,n=this.bloomPass,r={resolution:n.resolutionScale,"kernel size":n.kernelSize,intensity:n.intensity,distinction:n.distinction,blend:!0,"blend mode":"screen"};e.add(r,"resolution").min(0).max(1).step(.01).onChange(function(){n.resolutionScale=r.resolution,t.setSize()}),e.add(r,"kernel size").min(C.VERY_SMALL).max(C.HUGE).step(1).onChange(function(){n.kernelSize=r["kernel size"]}),e.add(r,"intensity").min(0).max(3).step(.01).onChange(function(){n.intensity=r.intensity});var i=e.addFolder("Luminance");i.add(r,"distinction").min(1).max(10).step(.1).onChange(function(){n.distinction=r.distinction}),i.open(),e.add(r,"blend").onChange(function(){n.combineMaterial.uniforms.opacity1.value=r.blend?1:0}),e.add(r,"blend mode",["add","screen"]).onChange(function(){"add"===r["blend mode"]?delete n.combineMaterial.defines.SCREEN_MODE:n.combineMaterial.defines.SCREEN_MODE="1",n.combineMaterial.needsUpdate=!0})}}]),n}(),Ye=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.bokehPass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),this.controls.enablePan=!1,this.controls.minDistance=2.5,this.controls.maxDistance=40,n.near=.01,n.far=50,n.position.set(3,1,3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.SphereBufferGeometry(1,64,64),l=new e.MeshBasicMaterial({color:16776960,envMap:r.get("sky")}),u=new e.Mesh(s,l);t.add(u),i.addPass(new Oe(t,n));var c=new ye(n,{focus:.36,aperture:.007,maxBlur:.025});c.renderToScreen=!0,this.bokehPass=c,i.addPass(c)}},{key:"configure",value:function(e){var t=this.bokehPass,n={focus:t.bokehMaterial.uniforms.focus.value,aperture:t.bokehMaterial.uniforms.aperture.value,blur:t.bokehMaterial.uniforms.maxBlur.value};e.add(n,"focus").min(0).max(1).step(.001).onChange(function(){t.bokehMaterial.uniforms.focus.value=n.focus}),e.add(n,"aperture").min(0).max(.05).step(1e-4).onChange(function(){t.bokehMaterial.uniforms.aperture.value=n.aperture}),e.add(n,"blur").min(0).max(.1).step(.001).onChange(function(){t.bokehMaterial.uniforms.maxBlur.value=n.blur})}}]),n}(),qe=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.bokehPass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),this.controls.enablePan=!1,this.controls.minDistance=2.5,this.controls.maxDistance=40,n.near=.01,n.far=50,n.position.set(3,1,3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.SphereBufferGeometry(1,64,64),l=new e.MeshBasicMaterial({color:16776960,envMap:r.get("sky")}),u=new e.Mesh(s,l);t.add(u),i.addPass(new Oe(t,n));var c=new Me(n,{rings:3,samples:2,showFocus:!1,manualDoF:!1,vignette:!1,pentagon:!1,shaderFocus:!0,noise:!0});c.bokehMaterial.uniforms.focalStop.value=64,c.renderToScreen=!0,this.bokehPass=c,i.addPass(c)}},{key:"configure",value:function(e){var t=this.bokehPass,n={rings:Number.parseInt(t.bokehMaterial.defines.RINGS_INT),samples:Number.parseInt(t.bokehMaterial.defines.SAMPLES_INT),"focal stop":t.bokehMaterial.uniforms.focalStop.value,"focal length":t.bokehMaterial.uniforms.focalLength.value,"shader focus":void 0!==t.bokehMaterial.defines.SHADER_FOCUS,"focal depth":t.bokehMaterial.uniforms.focalDepth.value,"focus coord X":t.bokehMaterial.uniforms.focusCoords.value.x,"focus coord Y":t.bokehMaterial.uniforms.focusCoords.value.y,"max blur":t.bokehMaterial.uniforms.maxBlur.value,"lum threshold":t.bokehMaterial.uniforms.luminanceThreshold.value,"lum gain":t.bokehMaterial.uniforms.luminanceGain.value,bias:t.bokehMaterial.uniforms.bias.value,fringe:t.bokehMaterial.uniforms.fringe.value,dithering:t.bokehMaterial.uniforms.ditherStrength.value,vignette:void 0!==t.bokehMaterial.defines.VIGNETTE,pentagon:void 0!==t.bokehMaterial.defines.PENTAGON,"manual DoF":void 0!==t.bokehMaterial.defines.MANUAL_DOF,"show focus":void 0!==t.bokehMaterial.defines.SHOW_FOCUS,noise:void 0!==t.bokehMaterial.defines.NOISE},r=e.addFolder("Focus");r.add(n,"show focus").onChange(function(){n["show focus"]?t.bokehMaterial.defines.SHOW_FOCUS="1":delete t.bokehMaterial.defines.SHOW_FOCUS,t.bokehMaterial.needsUpdate=!0}),r.add(n,"shader focus").onChange(function(){n["shader focus"]?t.bokehMaterial.defines.SHADER_FOCUS="1":delete t.bokehMaterial.defines.SHADER_FOCUS,t.bokehMaterial.needsUpdate=!0}),r.add(n,"manual DoF").onChange(function(){n["manual DoF"]?t.bokehMaterial.defines.MANUAL_DOF="1":delete t.bokehMaterial.defines.MANUAL_DOF,t.bokehMaterial.needsUpdate=!0}),r.add(n,"focal stop").min(0).max(100).step(.1).onChange(function(){t.bokehMaterial.uniforms.focalStop.value=n["focal stop"]}),r.add(n,"focal depth").min(.1).max(35).step(.1).onChange(function(){t.bokehMaterial.uniforms.focalDepth.value=n["focal depth"]}),r.add(n,"focus coord X").min(0).max(1).step(.01).onChange(function(){t.bokehMaterial.uniforms.focusCoords.value.x=n["focus coord X"]}),r.add(n,"focus coord Y").min(0).max(1).step(.01).onChange(function(){t.bokehMaterial.uniforms.focusCoords.value.y=n["focus coord Y"]}),r.open(),(r=e.addFolder("Sampling")).add(n,"rings").min(1).max(6).step(1).onChange(function(){t.bokehMaterial.defines.RINGS_INT=n.rings.toFixed(0),t.bokehMaterial.defines.RINGS_FLOAT=n.rings.toFixed(1),t.bokehMaterial.needsUpdate=!0}),r.add(n,"samples").min(1).max(6).step(1).onChange(function(){t.bokehMaterial.defines.SAMPLES_INT=n.samples.toFixed(0),t.bokehMaterial.defines.SAMPLES_FLOAT=n.samples.toFixed(1),t.bokehMaterial.needsUpdate=!0}),(r=e.addFolder("Blur")).add(n,"max blur").min(0).max(1).step(.001).onChange(function(){t.bokehMaterial.uniforms.maxBlur.value=n["max blur"]}),r.add(n,"bias").min(0).max(3).step(.01).onChange(function(){t.bokehMaterial.uniforms.bias.value=n.bias}),r.add(n,"fringe").min(0).max(2).step(.05).onChange(function(){t.bokehMaterial.uniforms.fringe.value=n.fringe}),r.add(n,"noise").onChange(function(){n.noise?t.bokehMaterial.defines.NOISE="1":delete t.bokehMaterial.defines.NOISE,t.bokehMaterial.needsUpdate=!0}),r.add(n,"dithering").min(0).max(.01).step(1e-4).onChange(function(){t.bokehMaterial.uniforms.ditherStrength.value=n.dithering}),r.add(n,"pentagon").onChange(function(){n.pentagon?t.bokehMaterial.defines.PENTAGON="1":delete t.bokehMaterial.defines.PENTAGON,t.bokehMaterial.needsUpdate=!0}),r.open(),(r=e.addFolder("Luminosity")).add(n,"lum threshold").min(0).max(1).step(.01).onChange(function(){t.bokehMaterial.uniforms.luminanceThreshold.value=n["lum threshold"]}),r.add(n,"lum gain").min(0).max(4).step(.01).onChange(function(){t.bokehMaterial.uniforms.luminanceGain.value=n["lum gain"]}),e.add(n,"vignette").onChange(function(){n.vignette?t.bokehMaterial.defines.VIGNETTE="1":delete t.bokehMaterial.defines.VIGNETTE,t.bokehMaterial.needsUpdate=!0})}}]),n}(),Ke=2*Math.PI,Ze=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.renderPass=null,t.savePass=null,t.blurPass=null,t.combinePass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/sunset/",s=[o+"px.png",o+"nx.png",o+"py.png",o+"ny.png",o+"pz.png",o+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-15,0,-15),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(c=0;c<100;++c)u=new e.MeshPhongMaterial({color:16777215*Math.random(),flatShading:!0}),(d=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),d.position.multiplyScalar(10*Math.random()),d.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),d.scale.multiplyScalar(Math.random()),s.add(d);this.object=s,t.add(s);var f=new Oe(t,n);this.renderPass=f,i.addPass(f),f=new Ue,this.savePass=f,i.addPass(f),f=new ge,this.blurPass=f,i.addPass(f),(f=new ze(new S,"texture1")).material.uniforms.texture2.value=this.savePass.renderTarget.texture,f.material.uniforms.opacity1.value=1,f.material.uniforms.opacity2.value=0,f.renderToScreen=!0,this.combinePass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=Ke&&(t.rotation.x-=Ke),t.rotation.y>=Ke&&(t.rotation.y-=Ke))}},{key:"configure",value:function(e){var t=this.composer,n=this.renderPass,r=this.blurPass,i=this.combinePass,a={enabled:r.enabled,resolution:r.resolutionScale,"kernel size":r.kernelSize,strength:i.material.uniforms.opacity1.value};e.add(a,"resolution").min(0).max(1).step(.01).onChange(function(){r.resolutionScale=a.resolution,t.setSize()}),e.add(a,"kernel size").min(C.VERY_SMALL).max(C.HUGE).step(1).onChange(function(){r.kernelSize=a["kernel size"]}),e.add(a,"strength").min(0).max(1).step(.01).onChange(function(){i.material.uniforms.opacity1.value=a.strength,i.material.uniforms.opacity2.value=1-a.strength}),e.add(a,"enabled").onChange(function(){n.renderToScreen=!a.enabled,r.enabled=a.enabled,i.enabled=a.enabled})}}]),n}(),Je=2*Math.PI,Qe=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.object=null,t.texturePass=null,t.depthPass=null,t}return f(n,He),c(n,[{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.composer;this.controls=new e.OrbitControls(n,r.renderer.domElement),this.controls.enablePan=!1,this.controls.maxDistance=40,n.near=.01,n.far=50,n.position.set(2,1,2),n.lookAt(this.controls.target);var i=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshBasicMaterial);this.object=i,t.add(i),r.addPass(new Oe(t,n));var a=new Ie(r.depthTexture);a.enabled=!1,this.texturePass=a,r.addPass(a),(a=new Pe(n)).renderToScreen=!0,this.depthPass=a,r.addPass(a)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=Je&&(t.rotation.x-=Je),t.rotation.y>=Je&&(t.rotation.y-=Je))}},{key:"configure",value:function(e){var t=this.texturePass,n=this.depthPass,r={raw:!1};e.add(r,"raw").onChange(function(){t.enabled=r.raw,n.enabled=!r.raw,t.renderToScreen=r.raw,n.renderToScreen=!r.raw})}}]),n}(),_e=2*Math.PI,$e=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.dotScreenPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(10,1,10),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),flatShading:!0}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s),i.addPass(new Oe(t,n));var f=new De({scale:.8,angle:.5*Math.PI,intensity:.25});f.renderToScreen=!0,this.dotScreenPass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,t.rotation.x>=_e&&(t.rotation.x-=_e),t.rotation.y>=_e&&(t.rotation.y-=_e))}},{key:"configure",value:function(e){var t=this.dotScreenPass,n={average:void 0!==t.material.defines.AVERAGE,scale:t.material.uniforms.scale.value,angle:t.material.uniforms.angle.value,intensity:t.material.uniforms.intensity.value,"center X":t.material.uniforms.offsetRepeat.value.x,"center Y":t.material.uniforms.offsetRepeat.value.y};e.add(n,"average").onChange(function(){n.average?t.material.defines.AVERAGE="1":delete t.material.defines.AVERAGE,t.material.needsUpdate=!0}),e.add(n,"scale").min(0).max(1).step(.01).onChange(function(){t.material.uniforms.scale.value=n.scale}),e.add(n,"angle").min(0).max(Math.PI).step(.001).onChange(function(){t.material.uniforms.angle.value=n.angle}),e.add(n,"intensity").min(0).max(1).step(.01).onChange(function(){t.material.uniforms.intensity.value=n.intensity});var r=e.addFolder("Center");r.add(n,"center X").min(-1).max(1).step(.01).onChange(function(){t.material.uniforms.offsetRepeat.value.x=n["center X"]}),r.add(n,"center Y").min(-1).max(1).step(.01).onChange(function(){t.material.uniforms.offsetRepeat.value.y=n["center Y"]})}}]),n}(),et=2*Math.PI,tt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.filmPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(10,1,10),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),flatShading:!0}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s),i.addPass(new Oe(t,n));var f=new Te({grayscale:!1,sepia:!1,vignette:!1,eskil:!1,scanlines:!0,noise:!0,noiseIntensity:.5,scanlineIntensity:.5,scanlineDensity:1.5,greyscaleIntensity:1,sepiaIntensity:1,vignetteOffset:0,vignetteDarkness:.5});f.renderToScreen=!0,this.filmPass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=et&&(t.rotation.x-=et),t.rotation.y>=et&&(t.rotation.y-=et))}},{key:"configure",value:function(e){var t=this.composer,n=this.filmPass,r={grayscale:void 0!==n.material.defines.GREYSCALE,sepia:void 0!==n.material.defines.SEPIA,vignette:void 0!==n.material.defines.VIGNETTE,eskil:void 0!==n.material.defines.ESKIL,noise:void 0!==n.material.defines.NOISE,scanlines:void 0!==n.material.defines.SCANLINES,"noise intensity":n.material.uniforms.noiseIntensity.value,"scanlines intensity":n.material.uniforms.scanlineIntensity.value,"scanlines count":n.scanlineDensity,"blend mode":"screen","greyscale intensity":n.material.uniforms.greyscaleIntensity.value,"sepia intensity":n.material.uniforms.sepiaIntensity.value,"vignette offset":n.material.uniforms.vignetteOffset.value,"vignette darkness":n.material.uniforms.vignetteDarkness.value},i=e.addFolder("Greyscale");i.add(r,"grayscale").onChange(function(){r.grayscale?n.material.defines.GREYSCALE="1":delete n.material.defines.GREYSCALE,n.material.needsUpdate=!0}),i.add(r,"greyscale intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.greyscaleIntensity.value=r["greyscale intensity"]}),i.open(),(i=e.addFolder("Noise and scanlines")).add(r,"blend mode",["add","screen"]).onChange(function(){"add"===r["blend mode"]?delete n.material.defines.SCREEN_MODE:n.material.defines.SCREEN_MODE="1",n.material.needsUpdate=!0}),i.add(r,"noise").onChange(function(){r.noise?n.material.defines.NOISE="1":delete n.material.defines.NOISE,n.material.needsUpdate=!0}),i.add(r,"noise intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.noiseIntensity.value=r["noise intensity"]}),i.add(r,"scanlines").onChange(function(){r.scanlines?n.material.defines.SCANLINES="1":delete n.material.defines.SCANLINES,n.material.needsUpdate=!0}),i.add(r,"scanlines intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.scanlineIntensity.value=r["scanlines intensity"]}),i.add(r,"scanlines count").min(0).max(2).step(.01).onChange(function(){n.scanlineDensity=r["scanlines count"],t.setSize()}),i.open(),(i=e.addFolder("Sepia")).add(r,"sepia").onChange(function(){r.sepia?n.material.defines.SEPIA="1":delete n.material.defines.SEPIA,n.material.needsUpdate=!0}),i.add(r,"sepia intensity").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.sepiaIntensity.value=r["sepia intensity"]}),i.open(),(i=e.addFolder("Vignette")).add(r,"vignette").onChange(function(){r.vignette?n.material.defines.VIGNETTE="1":delete n.material.defines.VIGNETTE,n.material.needsUpdate=!0}),i.add(r,"eskil").onChange(function(){r.eskil?n.material.defines.ESKIL="1":delete n.material.defines.ESKIL,n.material.needsUpdate=!0}),i.add(r,"vignette offset").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.vignetteOffset.value=r["vignette offset"]}),i.add(r,"vignette darkness").min(0).max(1).step(.01).onChange(function(){n.material.uniforms.vignetteDarkness.value=r["vignette darkness"]}),i.open()}}]),n}(),nt=2*Math.PI,rt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.glitchPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/space4/",l=[s+"px.jpg",s+"nx.jpg",s+"py.jpg",s+"ny.jpg",s+"pz.jpg",s+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/perturb.jpg",function(t){t.magFilter=t.minFilter=e.NearestFilter,r.set("perturb-map",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(6,1,6),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),flatShading:!0}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s),i.addPass(new Oe(t,n));var f=new Ae({perturbMap:r.get("perturb-map")});f.renderToScreen=!0,this.glitchPass=f,i.addPass(f)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=.005,t.rotation.y+=.01,t.rotation.x>=nt&&(t.rotation.x-=nt),t.rotation.y>=nt&&(t.rotation.y-=nt))}},{key:"configure",value:function(e){var t=this.glitchPass,n=t.perturbMap,r={mode:t.mode,"custom noise":!0};e.add(r,"mode").min(Ce.SPORADIC).max(Ce.CONSTANT_WILD).step(1).onChange(function(){t.mode=r.mode}),e.add(r,"custom noise").onChange(function(){r["custom noise"]?t.perturbMap=n:(t.perturbMap=null,t.generatePerturbMap(64))})}}]),n}(),it=2*Math.PI,at=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.object=null,t.maskObject=null,t.maskPass=null,t.pixelationPass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(10,1,10),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Object3D,l=new e.SphereBufferGeometry(1,4,4),u=void 0,c=void 0,d=void 0;for(d=0;d<100;++d)u=new e.MeshPhongMaterial({color:16777215*Math.random(),flatShading:!0}),(c=new e.Mesh(l,u)).position.set(Math.random()-.5,Math.random()-.5,Math.random()-.5).normalize(),c.position.multiplyScalar(10*Math.random()),c.rotation.set(2*Math.random(),2*Math.random(),2*Math.random()),c.scale.multiplyScalar(Math.random()),s.add(c);this.object=s,t.add(s);var f=new e.Scene;c=new e.Mesh(new e.BoxBufferGeometry(4,4,4)),this.maskObject=c,f.add(c);var v=new Oe(t,n);i.addPass(v),v=new Ee(f,n),this.maskPass=v,i.addPass(v),v=new ke(5),this.pixelationPass=v,i.addPass(v),i.addPass(new we),(v=new ze(new E)).renderToScreen=!0,i.addPass(v)}},{key:"update",value:function(e){var t=this.object,n=this.maskObject,r=void 0;null!==t&&null!==n&&(t.rotation.x+=.001,t.rotation.y+=.005,t.rotation.x>=it&&(t.rotation.x-=it),t.rotation.y>=it&&(t.rotation.y-=it),r=.001*performance.now(),n.position.x=4*Math.cos(r/1.5),n.position.y=4*Math.sin(r),n.rotation.x=r,n.rotation.y=.5*r)}},{key:"configure",value:function(e){var t=this.maskPass,n={"use mask":t.enabled};e.add(this.pixelationPass,"granularity").min(0).max(50).step(.1),e.add(n,"use mask").onChange(function(){t.enabled=n["use mask"]})}}]),n}(),ot=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.godRaysPass=null,t.sun=null,t.directionalLight=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o=new e.TextureLoader(i),s=new e.ObjectLoader(i),l="textures/skies/starry/",u=[l+"px.png",l+"nx.png",l+"py.png",l+"ny.png",l+"pz.png",l+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(u,function(e){r.set("sky",e)}),s.load("models/waggon.json",function(e){e.rotation.x=.25*Math.PI,e.rotation.y=.75*Math.PI,r.set("waggon",e)}),o.load("textures/wood.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("wood-diffuse",t)}),o.load("textures/woodnormals.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("wood-normals",t)}),o.load("textures/sun.png",function(e){r.set("sun-diffuse",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),this.controls.target.set(0,.5,0),n.position.set(-5,-1,-4),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(986895),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),this.directionalLight=o,t.add(o),t.add(a);var s=r.get("waggon"),l=new e.MeshPhongMaterial({color:16777215,map:r.get("wood-diffuse"),normalMap:r.get("wood-normals"),fog:!0});s.traverse(function(e){e.material=l}),t.add(s);var u=new e.PointsMaterial({map:r.get("sun-diffuse"),size:100,sizeAttenuation:!0,color:16768426,alphaTest:0,transparent:!0,fog:!1}),c=new e.BufferGeometry;c.addAttribute("position",new e.BufferAttribute(new Float32Array(3),3));var d=new e.Points(c,u);d.frustumCulled=!1,d.position.set(75,25,100),this.sun=d,t.add(d),i.addPass(new Oe(t,n));var f=new Le(t,n,d,{resolutionScale:.6,kernelSize:C.SMALL,intensity:1,density:.96,decay:.93,weight:.4,exposure:.6,samples:60,clampMax:1});f.renderToScreen=!0,this.godRaysPass=f,i.addPass(f)}},{key:"configure",value:function(e){var t=this.directionalLight,n=this.composer,r=this.godRaysPass,i=this.sun,a={resolution:r.resolutionScale,blurriness:r.kernelSize,intensity:r.intensity,density:r.godRaysMaterial.uniforms.density.value,decay:r.godRaysMaterial.uniforms.decay.value,weight:r.godRaysMaterial.uniforms.weight.value,exposure:r.godRaysMaterial.uniforms.exposure.value,clampMax:r.godRaysMaterial.uniforms.clampMax.value,samples:r.samples,color:i.material.color.getHex(),"blend mode":"screen"};e.add(a,"resolution").min(0).max(1).step(.01).onChange(function(){r.resolutionScale=a.resolution,n.setSize()}),e.add(a,"blurriness").min(C.VERY_SMALL).max(C.HUGE).step(1).onChange(function(){r.kernelSize=a.blurriness}),e.add(a,"intensity").min(0).max(1).step(.01).onChange(function(){r.intensity=a.intensity}),e.add(a,"density").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.density.value=a.density}),e.add(a,"decay").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.decay.value=a.decay}),e.add(a,"weight").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.weight.value=a.weight}),e.add(a,"exposure").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.exposure.value=a.exposure}),e.add(a,"clampMax").min(0).max(1).step(.01).onChange(function(){r.godRaysMaterial.uniforms.clampMax.value=a.clampMax}),e.add(a,"samples").min(15).max(200).step(1).onChange(function(){r.samples=a.samples}),e.addColor(a,"color").onChange(function(){i.material.color.setHex(a.color),t.color.setHex(a.color)}),e.add(a,"blend mode",["add","screen"]).onChange(function(){"add"===a["blend mode"]?delete r.combineMaterial.defines.SCREEN_MODE:r.combineMaterial.defines.SCREEN_MODE="1",r.combineMaterial.needsUpdate=!0})}}]),n}(),st=2*Math.PI,lt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/sunset/",l=[s+"px.png",s+"nx.png",s+"py.png",s+"ny.png",s+"pz.png",s+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/crate.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("crate-color",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-3,0,-3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshPhongMaterial({color:16777215,map:r.get("crate-color")}));this.object=s,t.add(s);var l=new Oe(t,n);l.renderToScreen=!0,i.addPass(l)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,t.rotation.x>=st&&(t.rotation.x-=st),t.rotation.y>=st&&(t.rotation.y-=st))}}]),n}(),ut=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.shockWavePass=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.CubeTextureLoader(i),o="textures/skies/space3/",s=[o+"px.jpg",o+"nx.jpg",o+"py.jpg",o+"ny.jpg",o+"pz.jpg",o+"nz.jpg"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},a.load(s,function(e){r.set("sky",e)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(5,1,5),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(-1,1,1),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.SphereBufferGeometry(1,64,64),l=new e.MeshBasicMaterial({color:16776960,envMap:r.get("sky")}),u=new e.Mesh(s,l);t.add(u),i.addPass(new Oe(t,n));var c=new Be(n,u.position,{speed:2,maxRadius:.5,waveSize:.2,amplitude:.05});c.renderToScreen=!0,this.shockWavePass=c,i.addPass(c)}},{key:"configure",value:function(e){var t=this.shockWavePass,n={speed:t.speed,size:t.shockWaveMaterial.uniforms.size.value,extent:t.shockWaveMaterial.uniforms.maxRadius.value,waveSize:t.shockWaveMaterial.uniforms.waveSize.value,amplitude:t.shockWaveMaterial.uniforms.amplitude.value,explode:function(){t.explode()}};e.add(n,"speed").min(0).max(10).step(.001).onChange(function(){t.speed=n.speed}),e.add(n,"size").min(.01).max(2).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.size.value=n.size}),e.add(n,"extent").min(0).max(10).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.maxRadius.value=n.extent}),e.add(n,"waveSize").min(0).max(2).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.waveSize.value=n.waveSize}),e.add(n,"amplitude").min(0).max(.25).step(.001).onChange(function(){t.shockWaveMaterial.uniforms.amplitude.value=n.amplitude}),e.add(n,"explode")}}]),n}(),ct=2*Math.PI,dt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.renderer=null,t.renderer2=null,t.controls2=null,t.renderPass=null,t.smaaPass=null,t.objectA=null,t.objectB=null,t.objectC=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/sunset/",l=[s+"px.png",s+"nx.png",s+"py.png",s+"ny.png",s+"pz.png",s+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/crate.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("crate-color",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.renderer2=function(){var t=new e.WebGLRenderer({logarithmicDepthBuffer:!0,antialias:!1});return t.setSize(window.innerWidth,window.innerHeight),t.setClearColor(0),t.setPixelRatio(window.devicePixelRatio),t}(),this.renderer=i.replaceRenderer(this.renderer2),this.controls=new e.OrbitControls(n,this.renderer.domElement),this.controls2=new e.OrbitControls(n,this.renderer2.domElement),n.position.set(-3,0,-3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshBasicMaterial({color:0,wireframe:!0}));s.position.set(1.25,0,-1.25),this.objectA=s,t.add(s),(s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshPhongMaterial({map:r.get("crate-color")}))).position.set(-1.25,0,1.25),this.objectB=s,t.add(s),s=new e.Mesh(new e.BoxBufferGeometry(.25,8.25,.25),new e.MeshPhongMaterial({color:855309}));var l=new e.Object3D,u=void 0,c=void 0,d=void 0;u=l.clone();var f=s.clone();f.position.set(-4,0,4),u.add(f),(f=s.clone()).position.set(4,0,4),u.add(f),(f=s.clone()).position.set(-4,0,-4),u.add(f),(f=s.clone()).position.set(4,0,-4),u.add(f),(c=u.clone()).rotation.set(Math.PI/2,0,0),(d=u.clone()).rotation.set(0,0,Math.PI/2),l.add(u),l.add(c),l.add(d),l.scale.set(.1,.1,.1),this.objectC=l,t.add(l);var v=new Oe(t,n);this.renderPass=v,i.addPass(v),(v=new Re(Image)).renderToScreen=!0,this.smaaPass=v,i.addPass(v)}},{key:"update",value:function(e){var t=this.objectA,n=this.objectB,r=this.objectC;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,n.rotation.copy(t.rotation),r.rotation.copy(t.rotation),t.rotation.x>=ct&&(t.rotation.x-=ct),t.rotation.y>=ct&&(t.rotation.y-=ct))}},{key:"configure",value:function(e){var t=this.composer,n=this.renderPass,r=this.smaaPass,i=this.renderer,a=this.renderer2,o=this.controls,s=this.controls2,l={"browser AA":!1,SMAA:r.enabled,"SMAA threshold":Number.parseFloat(r.colorEdgesMaterial.defines.EDGE_THRESHOLD)};e.add(l,"browser AA").onChange(function(){var e=t.renderer.getSize();l["browser AA"]?(i.setSize(e.width,e.height),t.replaceRenderer(i),o.enabled=!0,s.enabled=!1):(a.setSize(e.width,e.height),t.replaceRenderer(a),o.enabled=!1,s.enabled=!0)}),e.add(l,"SMAA").onChange(function(){n.renderToScreen=!l.SMAA,r.enabled=l.SMAA}),e.add(l,"SMAA threshold").min(0).max(1).step(.01).onChange(function(){r.colorEdgesMaterial.defines.EDGE_THRESHOLD=l["SMAA threshold"].toFixed(2),r.colorEdgesMaterial.needsUpdate=!0})}},{key:"reset",value:function(){d(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"reset",this).call(this),this.renderer.dispose(),this.renderer=null,this.controls2.dispose(),this.controls2=null}}]),n}(),ft=2*Math.PI,vt=function(t){function n(e){u(this,n);var t=v(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.toneMappingPass=null,t.object=null,t}return f(n,He),c(n,[{key:"load",value:function(t){var n=this,r=new Map,i=this.loadingManager,a=new e.TextureLoader(i),o=new e.CubeTextureLoader(i),s="textures/skies/sunset/",l=[s+"px.png",s+"nx.png",s+"py.png",s+"ny.png",s+"pz.png",s+"nz.png"];null===this.assets?(i.onProgress=function(e,i,a){i===a&&(n.assets=r,t())},o.load(l,function(e){r.set("sky",e)}),a.load("textures/crate.jpg",function(t){t.wrapS=t.wrapT=e.RepeatWrapping,r.set("crate-color",t)})):t()}},{key:"initialise",value:function(){var t=this.scene,n=this.camera,r=this.assets,i=this.composer;this.controls=new e.OrbitControls(n,i.renderer.domElement),n.position.set(-3,0,-3),n.lookAt(this.controls.target),t.background=r.get("sky");var a=new e.AmbientLight(6710886),o=new e.DirectionalLight(16759722);o.position.set(1440,200,2e3),o.target.position.copy(t.position),t.add(o),t.add(a);var s=new e.Mesh(new e.BoxBufferGeometry(1,1,1),new e.MeshPhongMaterial({map:r.get("crate-color")}));this.object=s,t.add(s),i.addPass(new Oe(t,n));var l=new Ge({adaptive:!0,resolution:256,distinction:1});l.renderToScreen=!0,this.toneMappingPass=l,i.addPass(l)}},{key:"update",value:function(e){var t=this.object;null!==t&&(t.rotation.x+=5e-4,t.rotation.y+=.001,t.rotation.x>=ft&&(t.rotation.x-=ft),t.rotation.y>=ft&&(t.rotation.y-=ft))}},{key:"configure",value:function(e){var t=this.toneMappingPass,n={resolution:Math.round(Math.log(t.resolution)/Math.log(2)),adaptive:t.adaptive,distinction:t.luminosityMaterial.uniforms.distinction.value,"adaption rate":t.adaptiveLuminosityMaterial.uniforms.tau.value,"average lum":t.toneMappingMaterial.uniforms.averageLuminance.value,"min lum":t.adaptiveLuminosityMaterial.uniforms.minLuminance.value,"max lum":t.toneMappingMaterial.uniforms.maxLuminance.value,"middle grey":t.toneMappingMaterial.uniforms.middleGrey.value};e.add(n,"resolution").min(6).max(11).step(1).onChange(function(){t.resolution=Math.pow(2,n.resolution)}),e.add(n,"adaptive").onChange(function(){t.adaptive=n.adaptive});var r=e.addFolder("Luminance");r.add(n,"distinction").min(1).max(10).step(.1).onChange(function(){t.luminosityMaterial.uniforms.distinction.value=n.distinction}),r.add(n,"adaption rate").min(0).max(2).step(.01).onChange(function(){t.adaptiveLuminosityMaterial.uniforms.tau.value=n["adaption rate"]}),r.add(n,"average lum").min(.01).max(1).step(.01).onChange(function(){t.toneMappingMaterial.uniforms.averageLuminance.value=n["average lum"]}),r.add(n,"min lum").min(0).max(1).step(.01).onChange(function(){t.adaptiveLuminosityMaterial.uniforms.minLuminance.value=n["min lum"]}),r.add(n,"max lum").min(0).max(32).step(1).onChange(function(){t.toneMappingMaterial.uniforms.maxLuminance.value=n["max lum"]}),r.add(n,"middle grey").min(0).max(1).step(.01).onChange(function(){t.toneMappingMaterial.uniforms.middleGrey.value=n["middle grey"]}),r.open()}}]),n}(),ht=function(){function r(){u(this,r),this.clock=new e.Clock,this.composer=function(){var t=new e.WebGLRenderer({logarithmicDepthBuffer:!0,antialias:!0});return t.setSize(window.innerWidth,window.innerHeight),t.setClearColor(0),t.setPixelRatio(window.devicePixelRatio),new We(t,{stencilBuffer:!0,depthTexture:!0})}(),this.stats=function(){var e=new n;return e.showPanel(0),e.dom.id="stats",e}(),this.demos=function(e){var t=new Map;return t.set("render",new lt(e)),t.set("bloom",new Ve(e)),t.set("blur",new Ze(e)),t.set("bokeh",new Ye(e)),t.set("bokeh2",new qe(e)),t.set("depth",new Qe(e)),t.set("dot-screen",new $e(e)),t.set("film",new tt(e)),t.set("glitch",new rt(e)),t.set("god-rays",new ot(e)),t.set("pixelation",new at(e)),t.set("shock-wave",new ut(e)),t.set("smaa",new dt(e)),t.set("tone-mapping",new vt(e)),t}(this.composer),this.effect=function(e){var t=window.location.hash.slice(1);return 0!==t.length&&e.has(t)||(t=e.keys().next().value),t}(this.demos)}return c(r,[{key:"initialise",value:function(e,n,r){function i(){f.initialise(),f.camera.aspect=window.innerWidth/window.innerHeight,f.camera.updateProjectionMatrix(),(v=new t.GUI({autoPlace:!1})).add(o,"effect",Array.from(d.keys())).onChange(a),f.configure(v),n.appendChild(v.domElement),r.style.display="none",l.domElement.style.visibility="visible"}function a(){var e=l.getSize();r.style.display="block",l.domElement.style.visibility="hidden",null!==v&&(v.destroy(),n.removeChild(v.domElement)),null!==f&&(f.reset(),l.setSize(e.width,e.height),s.replaceRenderer(l)),s.reset(),(f=d.get(o.effect)).load(i)}var o=this,s=this.composer,l=s.renderer,u=this.clock,c=this.stats,d=this.demos,f=null,v=null;e.appendChild(l.domElement),n.appendChild(c.dom),a(),document.addEventListener("keydown",function(e){e.altKey&&(e.preventDefault(),n.style.visibility="hidden"===n.style.visibility?"visible":"hidden")}),window.addEventListener("resize",function(){function e(e){var n=e.target.innerWidth,r=e.target.innerHeight;s.setSize(n,r),f.camera.aspect=n/r,f.camera.updateProjectionMatrix(),t=0}var t=0;return function(n){0===t&&(t=setTimeout(e,66,n))}}()),function e(t){var n=u.getDelta();requestAnimationFrame(e),c.begin(),f.update(n),s.render(n),c.end()}()}}]),r}();window.addEventListener("load",function e(t){var n=document.getElementById("viewport"),r=n.children[0],i=document.getElementById("aside"),a=new ht;window.removeEventListener("load",e),i.style.visibility="visible",a.initialise(n,i,r)})}(THREE,dat,Stats); \ No newline at end of file