From 834e8cb4cdebdf4206303f4a42d0ce33ec997576 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Thu, 15 Jun 2017 11:28:35 -0400 Subject: [PATCH 01/99] Initial post processing --- Apps/Sandcastle/gallery/Post Processing.html | 128 ++++++ Source/Renderer/DrawCommand.js | 21 + Source/Scene/FXAA.js | 219 --------- Source/Scene/GlobeDepth.js | 16 +- Source/Scene/Model.js | 9 +- Source/Scene/PostProcess.js | 444 +++++++++++++++++++ Source/Scene/PostProcessLibrary.js | 250 +++++++++++ Source/Scene/PostProcessScene.js | 96 ++++ Source/Scene/PostProcessStage.js | 149 +++++++ Source/Scene/Scene.js | 260 ++++++----- Source/Scene/SceneFramebuffer.js | 148 +++++++ Source/Shaders/PostProcessFilters/FXAA.glsl | 10 +- 12 files changed, 1408 insertions(+), 342 deletions(-) create mode 100644 Apps/Sandcastle/gallery/Post Processing.html delete mode 100644 Source/Scene/FXAA.js create mode 100644 Source/Scene/PostProcess.js create mode 100644 Source/Scene/PostProcessLibrary.js create mode 100644 Source/Scene/PostProcessScene.js create mode 100644 Source/Scene/PostProcessStage.js create mode 100644 Source/Scene/SceneFramebuffer.js diff --git a/Apps/Sandcastle/gallery/Post Processing.html b/Apps/Sandcastle/gallery/Post Processing.html new file mode 100644 index 000000000000..840a5dec917e --- /dev/null +++ b/Apps/Sandcastle/gallery/Post Processing.html @@ -0,0 +1,128 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
blackAndWhite + + +
brightness + + +
8-bit + +
Night Vision + +
Texture Overlay + + +
Depth View + +
FXAA + +
+
+ + + diff --git a/Source/Renderer/DrawCommand.js b/Source/Renderer/DrawCommand.js index e6d23b398b6f..7b3852373b3c 100644 --- a/Source/Renderer/DrawCommand.js +++ b/Source/Renderer/DrawCommand.js @@ -39,6 +39,7 @@ define([ this._debugOverlappingFrustums = 0; this._castShadows = defaultValue(options.castShadows, false); this._receiveShadows = defaultValue(options.receiveShadows, false); + this._postProcess = defaultValue(options.postProcess, false); this.dirty = true; this.lastDirtyTime = 0; @@ -293,6 +294,25 @@ define([ } }, + /** + * Whether this command should receive shadows when shadowing is enabled. + * + * @memberof DrawCommand.prototype + * @type {Boolean} + * @default false + */ + postProcess : { + get : function() { + return this._postProcess; + }, + set : function(value) { + if (this._postProcess !== value) { + this._postProcess = value; + this.dirty = true; + } + } + }, + /** * An object with functions whose names match the uniforms in the shader program * and return values to set those uniforms. @@ -486,6 +506,7 @@ define([ result._debugOverlappingFrustums = command._debugOverlappingFrustums; result._castShadows = command._castShadows; result._receiveShadows = command._receiveShadows; + result._postProcess = command._postProcess; result.dirty = true; result.lastDirtyTime = 0; diff --git a/Source/Scene/FXAA.js b/Source/Scene/FXAA.js deleted file mode 100644 index 6696c6651820..000000000000 --- a/Source/Scene/FXAA.js +++ /dev/null @@ -1,219 +0,0 @@ -/*global define*/ -define([ - '../Core/BoundingRectangle', - '../Core/Cartesian2', - '../Core/Color', - '../Core/defined', - '../Core/destroyObject', - '../Core/PixelFormat', - '../Renderer/ClearCommand', - '../Renderer/Framebuffer', - '../Renderer/PixelDatatype', - '../Renderer/Renderbuffer', - '../Renderer/RenderbufferFormat', - '../Renderer/RenderState', - '../Renderer/Sampler', - '../Renderer/Texture', - '../Renderer/TextureMagnificationFilter', - '../Renderer/TextureMinificationFilter', - '../Renderer/TextureWrap', - '../Shaders/PostProcessFilters/FXAA', - '../ThirdParty/Shaders/FXAA3_11' - ], function( - BoundingRectangle, - Cartesian2, - Color, - defined, - destroyObject, - PixelFormat, - ClearCommand, - Framebuffer, - PixelDatatype, - Renderbuffer, - RenderbufferFormat, - RenderState, - Sampler, - Texture, - TextureMagnificationFilter, - TextureMinificationFilter, - TextureWrap, - FXAAFS, - FXAA3_11) { - 'use strict'; - - /** - * @private - */ - function FXAA() { - this._texture = undefined; - this._depthStencilTexture = undefined; - this._depthStencilRenderbuffer = undefined; - this._fbo = undefined; - this._command = undefined; - - this._viewport = new BoundingRectangle(); - this._rs = undefined; - - this._useScissorTest = false; - this._scissorRectangle = undefined; - - var clearCommand = new ClearCommand({ - color : new Color(0.0, 0.0, 0.0, 0.0), - depth : 1.0, - owner : this - }); - this._clearCommand = clearCommand; - - this._qualityPreset = 39; - } - - function destroyResources(fxaa) { - fxaa._fbo = fxaa._fbo && fxaa._fbo.destroy(); - fxaa._texture = fxaa._texture && fxaa._texture.destroy(); - fxaa._depthStencilTexture = fxaa._depthStencilTexture && fxaa._depthStencilTexture.destroy(); - fxaa._depthStencilRenderbuffer = fxaa._depthStencilRenderbuffer && fxaa._depthStencilRenderbuffer.destroy(); - - fxaa._fbo = undefined; - fxaa._texture = undefined; - fxaa._depthStencilTexture = undefined; - fxaa._depthStencilRenderbuffer = undefined; - - if (defined(fxaa._command)) { - fxaa._command.shaderProgram = fxaa._command.shaderProgram && fxaa._command.shaderProgram.destroy(); - fxaa._command = undefined; - } - } - - FXAA.prototype.update = function(context, passState) { - var width = context.drawingBufferWidth; - var height = context.drawingBufferHeight; - - var fxaaTexture = this._texture; - var textureChanged = !defined(fxaaTexture) || fxaaTexture.width !== width || fxaaTexture.height !== height; - if (textureChanged) { - this._texture = this._texture && this._texture.destroy(); - this._depthStencilTexture = this._depthStencilTexture && this._depthStencilTexture.destroy(); - this._depthStencilRenderbuffer = this._depthStencilRenderbuffer && this._depthStencilRenderbuffer.destroy(); - - this._texture = new Texture({ - context : context, - width : width, - height : height, - pixelFormat : PixelFormat.RGBA, - pixelDatatype : PixelDatatype.UNSIGNED_BYTE, - sampler : new Sampler({ - wrapS : TextureWrap.CLAMP_TO_EDGE, - wrapT : TextureWrap.CLAMP_TO_EDGE, - minificationFilter : TextureMinificationFilter.LINEAR, - magnificationFilter : TextureMagnificationFilter.LINEAR - }) - }); - - if (context.depthTexture) { - this._depthStencilTexture = new Texture({ - context : context, - width : width, - height : height, - pixelFormat : PixelFormat.DEPTH_STENCIL, - pixelDatatype : PixelDatatype.UNSIGNED_INT_24_8 - }); - } else { - this._depthStencilRenderbuffer = new Renderbuffer({ - context : context, - width : width, - height : height, - format : RenderbufferFormat.DEPTH_STENCIL - }); - } - } - - if (!defined(this._fbo) || textureChanged) { - this._fbo = this._fbo && this._fbo.destroy(); - - this._fbo = new Framebuffer({ - context : context, - colorTextures : [this._texture], - depthStencilTexture : this._depthStencilTexture, - depthStencilRenderbuffer : this._depthStencilRenderbuffer, - destroyAttachments : false - }); - } - - if (!defined(this._command)) { - var fs = - '#define FXAA_QUALITY_PRESET ' + this._qualityPreset + '\n' + - FXAA3_11 + '\n' + - FXAAFS; - - this._command = context.createViewportQuadCommand(fs, { - owner : this - }); - } - - this._viewport.width = width; - this._viewport.height = height; - - var useScissorTest = !BoundingRectangle.equals(this._viewport, passState.viewport); - var updateScissor = useScissorTest !== this._useScissorTest; - this._useScissorTest = useScissorTest; - - if (!BoundingRectangle.equals(this._scissorRectangle, passState.viewport)) { - this._scissorRectangle = BoundingRectangle.clone(passState.viewport, this._scissorRectangle); - updateScissor = true; - } - - if (!defined(this._rs) || !BoundingRectangle.equals(this._rs.viewport, this._viewport) || updateScissor) { - this._rs = RenderState.fromCache({ - viewport : this._viewport, - scissorTest : { - enabled : this._useScissorTest, - rectangle : this._scissorRectangle - } - }); - } - - this._command.renderState = this._rs; - - if (textureChanged) { - var that = this; - var rcpFrame = new Cartesian2(1.0 / this._texture.width, 1.0 / this._texture.height); - this._command.uniformMap = { - u_texture : function() { - return that._texture; - }, - u_fxaaQualityRcpFrame : function() { - return rcpFrame; - } - }; - } - }; - - FXAA.prototype.execute = function(context, passState) { - this._command.execute(context, passState); - }; - - FXAA.prototype.clear = function(context, passState, clearColor) { - var framebuffer = passState.framebuffer; - - passState.framebuffer = this._fbo; - Color.clone(clearColor, this._clearCommand.color); - this._clearCommand.execute(context, passState); - - passState.framebuffer = framebuffer; - }; - - FXAA.prototype.getColorFramebuffer = function() { - return this._fbo; - }; - - FXAA.prototype.isDestroyed = function() { - return false; - }; - - FXAA.prototype.destroy = function() { - destroyResources(this); - return destroyObject(this); - }; - - return FXAA; -}); diff --git a/Source/Scene/GlobeDepth.js b/Source/Scene/GlobeDepth.js index 2254e270b81f..042d2d9feac7 100644 --- a/Source/Scene/GlobeDepth.js +++ b/Source/Scene/GlobeDepth.js @@ -9,7 +9,11 @@ define([ '../Renderer/Framebuffer', '../Renderer/PixelDatatype', '../Renderer/RenderState', + '../Renderer/Sampler', '../Renderer/Texture', + '../Renderer/TextureWrap', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', '../Shaders/PostProcessFilters/PassThrough' ], function( BoundingRectangle, @@ -21,7 +25,11 @@ define([ Framebuffer, PixelDatatype, RenderState, + Sampler, Texture, + TextureWrap, + TextureMagnificationFilter, + TextureMinificationFilter, PassThrough) { 'use strict'; @@ -94,7 +102,13 @@ define([ width : width, height : height, pixelFormat : PixelFormat.RGBA, - pixelDatatype : PixelDatatype.UNSIGNED_BYTE + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }) }); globeDepth._depthStencilTexture = new Texture({ diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 7e4f74c34b9b..8d322bd9ec5c 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -67,6 +67,8 @@ define([ './modelMaterialsCommon', './ModelMesh', './ModelNode', + './PostProcess', + './PostProcessStage', './SceneMode', './ShadowMode' ], function( @@ -137,6 +139,8 @@ define([ modelMaterialsCommon, ModelMesh, ModelNode, + PostProcess, + PostProcessStage, SceneMode, ShadowMode) { 'use strict'; @@ -701,6 +705,8 @@ define([ this._rtcCenterEye = undefined; // in eye coordinates this._rtcCenter3D = undefined; // in world coordinates this._rtcCenter2D = undefined; // in projected world coordinates + + this._postProcess = options.postProcess; } defineProperties(Model.prototype, { @@ -3484,7 +3490,8 @@ define([ uniformMap : uniformMap, renderState : rs, owner : owner, - pass : isTranslucent ? Pass.TRANSLUCENT : Pass.OPAQUE + pass : isTranslucent ? Pass.TRANSLUCENT : Pass.OPAQUE, + postProcess : model._postProcess }); var pickCommand; diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js new file mode 100644 index 000000000000..defe17720782 --- /dev/null +++ b/Source/Scene/PostProcess.js @@ -0,0 +1,444 @@ +/*global define*/ +define([ + '../Core/Check', + '../Core/Color', + '../Core/combine', + '../Core/defaultValue', + '../Core/defined', + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/loadImage', + '../Core/Math', + '../Core/PixelFormat', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/RenderState', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './BlendingState', + './PostProcessStage' + ], function( + Check, + Color, + combine, + defaultValue, + defined, + defineProperties, + destroyObject, + loadImage, + CesiumMath, + PixelFormat, + Framebuffer, + PixelDatatype, + RenderState, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + BlendingState, + PostProcessStage) { + 'use strict'; + + /** + * Runs a series of post processing stages given an input and output framebuffer. + * + * @param {Object} options An object with the following properties: + * @param {PostProcessStage[]} options.stages The post processing stages to run. + * @param {Boolean} [options.overwriteInput=false] Whether to overwrite the input frambuffer color texture during post processing. + * @param {Boolean} [options.blendOutput=false] Whether to alpha blend the post processing with the output framebuffer. + * + * @alias PostProcess + * @constructor + * @private + */ + function PostProcess(options) { + //>>includeStart('debug', pragmas.debug); + Check.defined('options.stages', options.stages); + //>>includeEnd('debug'); + + this._stages = options.stages; + this._overwriteInput = defaultValue(options.overwriteInput, false); + this._blendOutput = defaultValue(options.blendOutput, true); + + this._framebuffers = undefined; + this._colorTextures = undefined; + this._innerStages = undefined; + this._cache = undefined; + this._inputColorTexture = undefined; + this._inputDepthTexture = undefined; + this._outputFramebuffer = undefined; + this._stagesEnabled = undefined; + } + + defineProperties(PostProcess.prototype, { + enabled : { + get : function() { + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + if (stages[i].show) { + return true; + } + } + return false; + } + } + }); + + function CachedTexture() { + this.count = 0; + this.texture = undefined; + } + + function PostProcessCache() { + this.textures = [ + new CachedTexture(), + new CachedTexture() + ]; + } + + PostProcessCache.prototype.createTexture = function(index, context) { + var cachedTexture = this.textures[index]; + var colorTexture = cachedTexture.texture; + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + + if (defined(colorTexture) && ((colorTexture.width !== screenWidth) || (colorTexture.height !== screenHeight))) { + colorTexture.destroy(); + cachedTexture.count = 0; + } + + var count = ++cachedTexture.count; + if (count === 1) { + cachedTexture.texture = new Texture({ + context : context, + width : screenWidth, + height : screenHeight, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : createSampler() + }); + } + return cachedTexture.texture; + }; + + PostProcessCache.prototype.destroyTexture = function(index) { + var cachedTexture = this.textures[index]; + var count = --cachedTexture.count; + if (count === 0) { + cachedTexture.texture.destroy(); + cachedTexture.texture = undefined; + } + }; + + function destroyTextures(postProcess) { + var colorTextures = postProcess._colorTextures; + var inputColorTexture = postProcess._inputColorTexture; + if (defined(colorTextures)) { + var length = colorTextures.length; + for (var i = 0; i < length; ++i) { + var colorTexture = colorTextures[i]; + if (colorTexture !== inputColorTexture) { + postProcess._cache.destroyTexture(i); + } + } + postProcess._colorTextures = undefined; + } + } + + function destroyFramebuffers(postProcess) { + var framebuffers = postProcess._framebuffers; + if (defined(framebuffers)) { + var length = framebuffers.length; + for (var i = 0; i < length; ++i) { + framebuffers[i].destroy(); + } + postProcess._framebuffers = undefined; + } + } + + function destroyDrawCommands(postProcess) { + var innerStages = postProcess._innerStages; + if (defined(innerStages)) { + var length = innerStages.length; + for (var i = 0; i < length; ++i) { + var stage = innerStages[i]; + stage._drawCommand.shaderProgram.destroy(); + stage._drawCommand = undefined; + } + } + } + + function createRenderState(blend) { + if (blend) { + return RenderState.fromCache({ + blending : BlendingState.ALPHA_BLEND + }); + } + + return RenderState.fromCache(); + } + + function createDrawCommands(postProcess, context) { + var innerStages = postProcess._innerStages; + var length = innerStages.length; + for (var i = 0; i < length; ++i) { + var stage = innerStages[i]; + var renderState = (postProcess._blendOutput && (i === length - 1)) ? createRenderState(true) : createRenderState(false); + stage._drawCommand = context.createViewportQuadCommand(stage._fragmentShader, { + renderState : renderState, + owner : postProcess + }); + } + } + + function createPassthroughStage() { + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main() \n' + + '{ \n' + + ' vec4 color = texture2D(u_colorTexture, v_textureCoordinates); \n' + + ' gl_FragColor = color; \n' + + '} \n'; + + return new PostProcessStage({ + fragmentShader : fragmentShader + }); + } + + function stageEnabled(stage) { + return stage.show && stage.ready; + } + + function createStages(postProcess, inputColorTexture, outputFramebuffer) { + var innerStages = []; + var stagesEnabled = []; + postProcess._innerStages = innerStages; + postProcess._stagesEnabled = stagesEnabled; + + var i; + var stage; + var stages = postProcess._stages; + var length = stages.length; + for (i = 0; i < length; ++i) { + stage = stages[i]; + var enabled = stageEnabled(stage); + stagesEnabled.push(enabled); + if (!enabled) { + continue; + } + var subStages = stage._stages; + if (defined(subStages)) { + var subStagesLength = subStages.length; + for (var j = 0; j < subStagesLength; ++j) { + innerStages.push(subStages[j]); + } + } else { + innerStages.push(stage); + } + } + + // Cannot read and write to the same framebuffer simultaneously, add a passthrough stage. + var outputColorTexture = defined(outputFramebuffer) ? outputFramebuffer.getColorTexture(0) : undefined; + if (inputColorTexture === outputColorTexture && innerStages.length === 1) { + var passthroughStage = createPassthroughStage(); + innerStages.push(passthroughStage); + } + } + + function createSampler() { + return new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }); + } + + function createTextures(postProcess, inputColorTexture, context) { + var innerStages = postProcess._innerStages; + var length = CesiumMath.clamp(innerStages.length - 1, 0, 2); + var colorTextures = new Array(length); + postProcess._colorTextures = colorTextures; + + if (length >= 1) { + colorTextures[0] = postProcess._cache.createTexture(0, context); + } + if (length === 2) { + colorTextures[1] = postProcess._overwriteInput ? inputColorTexture : postProcess._cache.createTexture(1, context); + } + } + + function createFramebuffers(postProcess, context) { + var colorTextures = postProcess._colorTextures; + var length = colorTextures.length; + var framebuffers = new Array(length); + postProcess._framebuffers = framebuffers; + + for (var i = 0; i < length; ++i) { + framebuffers[i] = new Framebuffer({ + context : context, + colorTextures : [colorTextures[i]], + destroyAttachments : false + }); + } + } + + function getUniformFunction(stage, name) { + return function() { + return stage._uniformValues[name]; + }; + } + + function createUniformMap(stage, colorTexture, depthTexture) { + var uniformMap = {}; + var uniformValues = stage._uniformValues; + for (var name in uniformValues) { + if (uniformValues.hasOwnProperty(name)) { + var uniformName = 'u_' + name; + uniformMap[uniformName] = getUniformFunction(stage, name); + } + } + + return combine(uniformMap, { + u_colorTexture : function() { + return colorTexture; + }, + u_depthTexture : function() { + return depthTexture; + } + }); + } + + function linkStages(postProcess, inputColorTexture, inputDepthTexture, outputFramebuffer) { + var innerStages = postProcess._innerStages; + var colorTextures = postProcess._colorTextures; + var framebuffers = postProcess._framebuffers; + + var length = innerStages.length; + for (var i = 0; i < length; ++i) { + var colorTexture; + if (i === 0) { + colorTexture = inputColorTexture; + } else { + colorTexture = colorTextures[(i + 1) % colorTextures.length]; + } + + var framebuffer; + if (i === length - 1) { + framebuffer = outputFramebuffer; + } else { + framebuffer = framebuffers[i % framebuffers.length]; + } + + var stage = innerStages[i]; + var drawCommand = stage._drawCommand; + drawCommand.uniformMap = createUniformMap(stage, colorTexture, inputDepthTexture); + drawCommand.framebuffer = framebuffer; + } + } + + function isDirty(postProcess, inputColorTexture, inputDepthTexture, outputFramebuffer, context) { + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + + var stages = postProcess._stages; + var innerStages = postProcess._innerStages; + var stagesEnabled = postProcess._stagesEnabled; + + if (inputColorTexture !== postProcess._inputColorTexture || + inputDepthTexture !== postProcess._inputDepthTexture || + outputFramebuffer !== postProcess._outputFramebuffer) { + postProcess._inputColorTexture = inputColorTexture; + postProcess._inputDepthTexture = inputDepthTexture; + postProcess._outputFramebuffer = outputFramebuffer; + return true; + } + + if (!defined(innerStages)) { + return true; + } + + var i; + var length = stages.length; + var stagesDirty = false; + for (i = 0; i < length; ++i) { + var enabled = stageEnabled(stages[i]); + if (enabled !== stagesEnabled[i]) { + stagesEnabled[i] = enabled; + stagesDirty = true; + } + } + if (stagesDirty) { + return true; + } + + var colorTextures = postProcess._colorTextures; + length = colorTextures.length; + for (i = 0; i < length; ++i) { + var colorTexture = colorTextures[i]; + if (colorTexture.isDestroyed()) { + // Cached color texture was destroyed by another post process due to a screen resize + return true; + } + if ((colorTexture.width !== screenWidth) || (colorTexture.height !== screenHeight)) { + // Textures were resized + return true; + } + } + + return false; + } + + PostProcess.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, outputFramebuffer) { + var context = frameState.context; + + var cache = context.cache.postProcess; + if (!defined(cache)) { + cache = new PostProcessCache(); + context.cache.postProcess = cache; + } + this._cache = cache; + + var i; + var stages = this._stages; + var length = stages.length; + for (i = 0; i < length; ++i) { + stages[i].update(frameState); + } + + if (isDirty(this, inputColorTexture, inputDepthTexture, outputFramebuffer, context)) { + destroyDrawCommands(this); + destroyFramebuffers(this); + createStages(this, inputColorTexture, outputFramebuffer); + createDrawCommands(this, context); + createTextures(this, inputColorTexture, context); + createFramebuffers(this, context); + linkStages(this, inputColorTexture, inputDepthTexture, outputFramebuffer); + } + + var innerStages = this._innerStages; + length = innerStages.length; + for (i = 0; i < length; ++i) { + innerStages[i]._drawCommand.execute(context); + } + }; + + PostProcess.prototype.isDestroyed = function() { + return false; + }; + + PostProcess.prototype.destroy = function() { + destroyDrawCommands(); + destroyTextures(); + destroyFramebuffers(); + return destroyObject(this); + }; + + return PostProcess; +}); diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js new file mode 100644 index 000000000000..324a9b8bd55d --- /dev/null +++ b/Source/Scene/PostProcessLibrary.js @@ -0,0 +1,250 @@ +/*global define*/ +define([ + '../Core/buildModuleUrl', + '../Core/defineProperties', + '../Core/destroyObject', + './PostProcess', + './PostProcessStage', + '../Shaders/PostProcessFilters/FXAA', + '../ThirdParty/Shaders/FXAA3_11' +], function( + buildModuleUrl, + defineProperties, + destroyObject, + PostProcess, + PostProcessStage, + FXAAFS, + FXAA3_11) { + 'use strict'; + + function PostProcessLibrary() { + } + + defineProperties(PostProcessLibrary, { + /** + * Renders in black and white gradations. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + blackAndWhite : { + get : function() { + return createBlackAndWhiteStage(); + } + }, + /** + * Control the brightness of the render. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + brightness : { + get : function() { + return createBrightnessStage(); + } + }, + /** + * Render in a pixelated eight-bit style. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + eightBit : { + get : function() { + return createEightBitStage(); + } + }, + /** + * Render with a night vision effect. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + nightVision : { + get : function() { + return createNightVisionStage(); + } + }, + /** + * Overlay a texture above the render. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + textureOverlay : { + get : function() { + return createTextureOverlayStage(); + } + }, + /** + * @private + */ + fxaa : { + get : function() { + return createFxaaStage(); + } + }, + + /** + * @private + */ + depthView : { + get : function() { + return createDepthViewStage(); + } + } + }); + + function createBlackAndWhiteStage() { + var uniformValues = { + gradations : 5.0 + }; + + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_gradations; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' float luminance = czm_luminance(rgb); \n' + + ' float darkness = luminance * u_gradations; \n' + + ' darkness = (darkness - fract(darkness)) / u_gradations; \n' + + ' gl_FragColor = vec4(vec3(darkness), 1.0); \n' + + '} \n'; + + return new PostProcessStage({ + fragmentShader : fragmentShader, + uniformValues : uniformValues + }); + } + + function createBrightnessStage() { + var uniformValues = { + brightness : 0.5 + }; + + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_brightness; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' vec3 target = vec3(0.0); \n' + + ' gl_FragColor = vec4(mix(target, rgb, u_brightness), 1.0); \n' + + '} \n'; + + return new PostProcessStage({ + fragmentShader : fragmentShader, + uniformValues : uniformValues + }); + } + + function createEightBitStage() { + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'const int KERNEL_WIDTH = 16; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec2 u_step = vec2(1.0 / czm_viewport.z, 1.0 / czm_viewport.w); \n' + + ' vec2 integralPos = v_textureCoordinates - mod(v_textureCoordinates, 8.0 * u_step); \n' + + ' vec3 averageValue = vec3(0.0); \n' + + ' for (int i = 0; i < KERNEL_WIDTH; i++) \n' + + ' { \n' + + ' for (int j = 0; j < KERNEL_WIDTH; j++) \n' + + ' { \n' + + ' averageValue += texture2D(u_colorTexture, integralPos + u_step * vec2(i, j)).rgb; \n' + + ' } \n' + + ' } \n' + + ' averageValue /= float(KERNEL_WIDTH * KERNEL_WIDTH); \n' + + ' gl_FragColor = vec4(averageValue, 1.0); \n' + + '} \n'; + return new PostProcessStage({ + fragmentShader : fragmentShader + }); + } + + function createNightVisionStage() { + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'float rand(vec2 co) \n' + + '{ \n' + + ' return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453); \n' + + '} \n' + + 'void main(void) \n' + + '{ \n' + + ' float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1; \n' + + ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' vec3 green = vec3(0.0, 1.0, 0.0); \n' + + ' gl_FragColor = vec4((noiseValue + rgb) * green, 1.0); \n' + + '} \n'; + + return new PostProcessStage({ + fragmentShader : fragmentShader + }); + } + + function createTextureOverlayStage() { + var url = buildModuleUrl('Assets/Textures/moonSmall.jpg'); + var uniformValues = { + alpha : 0.5, + texture : url + }; + + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'uniform float u_alpha; \n' + + 'uniform sampler2D u_texture; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec4 screen = texture2D(u_colorTexture, v_textureCoordinates); \n' + + ' vec4 color = texture2D(u_texture, v_textureCoordinates); \n' + + ' gl_FragColor = vec4(mix(screen.rgb, color.rgb, u_alpha * color.a), 1.0); \n' + + '} \n'; + + return new PostProcessStage({ + fragmentShader : fragmentShader, + uniformValues : uniformValues + }); + } + + function createFxaaStage() { + var fragmentShader = + '#define FXAA_QUALITY_PRESET 39 \n' + + FXAA3_11 + '\n' + + FXAAFS; + return new PostProcessStage({ + fragmentShader : fragmentShader + }); + } + + function createDepthViewStage() { + var fragmentShader = + 'uniform sampler2D u_depthTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' gl_FragColor = vec4(vec3(depth), 1.0); \n' + + '} \n'; + return new PostProcessStage({ + fragmentShader : fragmentShader + }); + } + + return PostProcessLibrary; +}); diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js new file mode 100644 index 000000000000..5b315655f0a9 --- /dev/null +++ b/Source/Scene/PostProcessScene.js @@ -0,0 +1,96 @@ +/*global define*/ +define([ + '../Core/defineProperties', + '../Core/destroyObject', + './PostProcess', + './PostProcessLibrary' +], function( + defineProperties, + destroyObject, + PostProcess, + PostProcessLibrary) { + 'use strict'; + + /** + * DOC_TBA + * @constructor + */ + function PostProcessScene() { + /** + * @inheritdoc PostProcessLibrary#blackAndWhite + */ + this.blackAndWhite = PostProcessLibrary.blackAndWhite; + /** + * @inheritdoc PostProcessLibrary#brightness + */ + this.brightness = PostProcessLibrary.brightness; + /** + * @inheritdoc PostProcessLibrary#eightBit + */ + this.eightBit = PostProcessLibrary.eightBit; + /** + * @inheritdoc PostProcessLibrary#nightVision + */ + this.nightVision = PostProcessLibrary.nightVision; + /** + * @inheritdoc PostProcessLibrary#textureOverlay + */ + this.textureOverlay = PostProcessLibrary.textureOverlay; + /** + * @inheritdoc PostProcessLibrary#depthView + */ + this.depthView = PostProcessLibrary.depthView; + /** + * @inheritdoc PostProcessLibrary#fxaa + */ + this.fxaa = PostProcessLibrary.fxaa; + + var stages = [ + this.blackAndWhite, + this.brightness, + this.eightBit, + this.nightVision, + this.textureOverlay, + this.depthView, + this.fxaa + ]; + + this._postProcess = new PostProcess({ + stages : stages, + overwriteInput : true, + blendOutput : false + }); + } + + defineProperties(PostProcessScene.prototype, { + enabled : { + get : function() { + return this._postProcess.enabled; + } + } + }); + + /** + * @private + */ + PostProcessScene.prototype.execute = function(frameState, inputFramebuffer, outputFramebuffer) { + this._postProcess.execute(frameState, inputFramebuffer, outputFramebuffer); + }; + + /** + * @private + */ + PostProcessScene.prototype.isDestroyed = function() { + return false; + }; + + /** + * @private + */ + PostProcessScene.prototype.destroy = function() { + this._postProcess = this._postProcess && this._postProcess.destroy(); + return destroyObject(this); + }; + + return PostProcessScene; +}); diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js new file mode 100644 index 000000000000..e77df9c3df4e --- /dev/null +++ b/Source/Scene/PostProcessStage.js @@ -0,0 +1,149 @@ +/*global define*/ +define([ + '../Core/Check', + '../Core/clone', + '../Core/defaultValue', + '../Core/defined', + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/loadImage', + '../Renderer/Texture' + ], function( + Check, + clone, + defaultValue, + defined, + defineProperties, + destroyObject, + loadImage, + Texture) { + 'use strict'; + + /** + * A post process stage for {@link PostProcess}. + * + * @param {Object} options Object with the following properties: + * @param {String} options.fragmentShader The fragment shader used by the post process stage. + * @param {Object} options.uniformValues Uniform values that modify the behavior of the post process stage. + * + * @constructor + */ + function PostProcessStage(options) { + //>>includeStart('debug', pragmas.debug); + Check.typeOf.object('options', options); + Check.typeOf.string('options.fragmentShader', options.fragmentShader); + //>>includeEnd('debug'); + + this._fragmentShader = options.fragmentShader; + this._drawCommand = undefined; + this._ready = false; + + var texturesLength = 0; + var uniformValues = options.uniformValues; + for (var name in uniformValues) { + if (uniformValues.hasOwnProperty(name)) { + if (typeof uniformValues[name] === 'string') { + ++texturesLength; + } + } + } + this._texturesLength = texturesLength; + this._textures = []; + + this._uniformValues = uniformValues; + + /** + * Whether to show the post process stage. + * @type {Boolean} + * @default false + */ + this.show = false; + } + + defineProperties(PostProcessStage.prototype, { + /** + * Whether the post process stage is ready. + * @memberof PostProcessStage.prototype + * @type {Boolean} + * @default false + */ + ready : { + get : function() { + return this._ready; + } + }, + + /** + * Uniform values that modify the behavior of the post process stage. + * @type {Object} + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + } + }); + + function loadTexture(stage, uniformName, imagePath, frameState) { + return loadImage(imagePath).then(function(image) { + frameState.afterRender.push(function() { + var texture = new Texture({ + context : frameState.context, + source : image + }); + stage._uniformValues[uniformName] = texture; + stage._textures.push(texture); + }); + }); + } + + /** + * @private + */ + PostProcessStage.prototype.update = function(frameState) { + if (!this.show) { + return; + } + + if (this._textures.length === this._texturesLength) { + this._ready = true; + return; + } + + var uniformValues = this._uniformValues; + for (var name in uniformValues) { + if (uniformValues.hasOwnProperty(name)) { + var value = uniformValues[name]; + if (typeof value === 'string') { + uniformValues[name] = loadTexture(this, name, value, frameState); + } + } + } + }; + + function destroyTextures(stage) { + var textures = stage._textures; + var length = textures.length; + for (var i = 0; i < length; ++i) { + textures[i].destroy(); + } + stage._textures.length = 0; + } + + /** + * @private + */ + PostProcessStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @private + */ + PostProcessStage.prototype.destroy = function() { + destroyTextures(); + return destroyObject(this); + }; + + return PostProcessStage; +}); diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index 43cbd75051ed..f82732a25b87 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -54,7 +54,6 @@ define([ './Fog', './FrameState', './FrustumCommands', - './FXAA', './GlobeDepth', './JobScheduler', './MapMode2D', @@ -66,8 +65,10 @@ define([ './PerspectiveFrustum', './PerspectiveOffCenterFrustum', './PickDepth', + './PostProcessScene', './Primitive', './PrimitiveCollection', + './SceneFramebuffer', './SceneMode', './SceneTransforms', './SceneTransitioner', @@ -130,7 +131,6 @@ define([ Fog, FrameState, FrustumCommands, - FXAA, GlobeDepth, JobScheduler, MapMode2D, @@ -142,8 +142,10 @@ define([ PerspectiveFrustum, PerspectiveOffCenterFrustum, PickDepth, + PostProcessScene, Primitive, PrimitiveCollection, + SceneFramebuffer, SceneMode, SceneTransforms, SceneTransitioner, @@ -293,7 +295,7 @@ define([ this._globeDepth = globeDepth; this._depthPlane = new DepthPlane(); this._oit = oit; - this._fxaa = new FXAA(); + this._sceneFramebuffer = new SceneFramebuffer(); this._clearColorCommand = new ClearCommand({ color : new Color(), @@ -624,6 +626,12 @@ define([ enabled : defaultValue(options.shadows, false) }); + /** + * Post processing effects applied to the final render. + * @type {PostProcessScene} + */ + this.postProcess = new PostProcessScene(); + this._terrainExaggeration = defaultValue(options.terrainExaggeration, 1.0); this._performanceDisplay = undefined; @@ -657,7 +665,7 @@ define([ originalFramebuffer : undefined, useGlobeDepthFramebuffer : false, useOIT : false, - useFXAA : false + usePostProcess : false }; this._useWebVR = false; @@ -1492,6 +1500,8 @@ define([ } } + frameState.clampedNear = near; + // Use the computed near and far for shadows if (shadowsEnabled) { frameState.shadowHints.nearPlane = shadowNear; @@ -1626,115 +1636,128 @@ define([ 0.0, 0.0, 0.0, 1.0); transformFrom2D = Matrix4.inverseTransformation(transformFrom2D, transformFrom2D); - function executeCommand(command, scene, context, passState, debugFramebuffer) { - if ((defined(scene.debugCommandFilter)) && !scene.debugCommandFilter(command)) { - return; + function debugShowBoundingVolume(command, scene, passState, debugFramebuffer) { + // Debug code to draw bounding volume for command. Not optimized! + // Assumes bounding volume is a bounding sphere or box + var frameState = scene._frameState; + var context = frameState.context; + var boundingVolume = command.boundingVolume; + + if (defined(scene._debugVolume)) { + scene._debugVolume.destroy(); } - if (command instanceof ClearCommand) { - command.execute(context, passState); - return; + var geometry; + + var center = Cartesian3.clone(boundingVolume.center); + if (frameState.mode !== SceneMode.SCENE3D) { + center = Matrix4.multiplyByPoint(transformFrom2D, center, center); + var projection = frameState.mapProjection; + var centerCartographic = projection.unproject(center); + center = projection.ellipsoid.cartographicToCartesian(centerCartographic); } - var shadowsEnabled = scene.frameState.shadowHints.shadowsEnabled; - var lightShadowsEnabled = shadowsEnabled && (scene.frameState.shadowHints.lightShadowMaps.length > 0); + if (defined(boundingVolume.radius)) { + var radius = boundingVolume.radius; - if (scene.debugShowCommands || scene.debugShowFrustums) { - executeDebugCommand(command, scene, passState); - } else if (lightShadowsEnabled && command.receiveShadows && defined(command.derivedCommands.shadows)) { - // If the command receives shadows, execute the derived shadows command. - // Some commands, such as OIT derived commands, do not have derived shadow commands themselves - // and instead shadowing is built-in. In this case execute the command regularly below. - command.derivedCommands.shadows.receiveCommand.execute(context, passState); - } else if (scene.frameState.passes.depth && defined(command.derivedCommands.depth)) { - command.derivedCommands.depth.depthOnlyCommand.execute(context, passState); + geometry = GeometryPipeline.toWireframe(EllipsoidGeometry.createGeometry(new EllipsoidGeometry({ + radii : new Cartesian3(radius, radius, radius), + vertexFormat : PerInstanceColorAppearance.FLAT_VERTEX_FORMAT + }))); + + scene._debugVolume = new Primitive({ + geometryInstances : new GeometryInstance({ + geometry : geometry, + modelMatrix : Matrix4.fromTranslation(center), + attributes : { + color : new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0) + } + }), + appearance : new PerInstanceColorAppearance({ + flat : true, + translucent : false + }), + asynchronous : false + }); } else { - command.execute(context, passState); + var halfAxes = boundingVolume.halfAxes; + + geometry = GeometryPipeline.toWireframe(BoxGeometry.createGeometry(BoxGeometry.fromDimensions({ + dimensions : new Cartesian3(2.0, 2.0, 2.0), + vertexFormat : PerInstanceColorAppearance.FLAT_VERTEX_FORMAT + }))); + + scene._debugVolume = new Primitive({ + geometryInstances : new GeometryInstance({ + geometry : geometry, + modelMatrix : Matrix4.fromRotationTranslation(halfAxes, center, new Matrix4()), + attributes : { + color : new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0) + } + }), + appearance : new PerInstanceColorAppearance({ + flat : true, + translucent : false + }), + asynchronous : false + }); } - if (command.debugShowBoundingVolume && (defined(command.boundingVolume))) { - // Debug code to draw bounding volume for command. Not optimized! - // Assumes bounding volume is a bounding sphere or box - var frameState = scene._frameState; - var boundingVolume = command.boundingVolume; + var savedCommandList = frameState.commandList; + var commandList = frameState.commandList = []; + scene._debugVolume.update(frameState); - if (defined(scene._debugVolume)) { - scene._debugVolume.destroy(); - } + var framebuffer; + if (defined(debugFramebuffer)) { + framebuffer = passState.framebuffer; + passState.framebuffer = debugFramebuffer; + } - var geometry; + commandList[0].execute(context, passState); - var center = Cartesian3.clone(boundingVolume.center); - if (frameState.mode !== SceneMode.SCENE3D) { - center = Matrix4.multiplyByPoint(transformFrom2D, center, center); - var projection = frameState.mapProjection; - var centerCartographic = projection.unproject(center); - center = projection.ellipsoid.cartographicToCartesian(centerCartographic); - } + if (defined(framebuffer)) { + passState.framebuffer = framebuffer; + } - if (defined(boundingVolume.radius)) { - var radius = boundingVolume.radius; + frameState.commandList = savedCommandList; + } - geometry = GeometryPipeline.toWireframe(EllipsoidGeometry.createGeometry(new EllipsoidGeometry({ - radii : new Cartesian3(radius, radius, radius), - vertexFormat : PerInstanceColorAppearance.FLAT_VERTEX_FORMAT - }))); + function executeCommand(command, scene, context, passState, debugFramebuffer) { + var frameState = scene._frameState; - scene._debugVolume = new Primitive({ - geometryInstances : new GeometryInstance({ - geometry : geometry, - modelMatrix : Matrix4.fromTranslation(center), - attributes : { - color : new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0) - } - }), - appearance : new PerInstanceColorAppearance({ - flat : true, - translucent : false - }), - asynchronous : false - }); - } else { - var halfAxes = boundingVolume.halfAxes; - - geometry = GeometryPipeline.toWireframe(BoxGeometry.createGeometry(BoxGeometry.fromDimensions({ - dimensions : new Cartesian3(2.0, 2.0, 2.0), - vertexFormat : PerInstanceColorAppearance.FLAT_VERTEX_FORMAT - }))); - - scene._debugVolume = new Primitive({ - geometryInstances : new GeometryInstance({ - geometry : geometry, - modelMatrix : Matrix4.fromRotationTranslation(halfAxes, center, new Matrix4()), - attributes : { - color : new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0) - } - }), - appearance : new PerInstanceColorAppearance({ - flat : true, - translucent : false - }), - asynchronous : false - }); - } + if ((defined(scene.debugCommandFilter)) && !scene.debugCommandFilter(command)) { + return; + } + + if (command instanceof ClearCommand) { + command.execute(context, passState); + return; + } - var savedCommandList = frameState.commandList; - var commandList = frameState.commandList = []; - scene._debugVolume.update(frameState); + if (command.debugShowBoundingVolume && (defined(command.boundingVolume))) { + debugShowBoundingVolume(command, scene, passState, debugFramebuffer); + } - var framebuffer; - if (defined(debugFramebuffer)) { - framebuffer = passState.framebuffer; - passState.framebuffer = debugFramebuffer; - } + if (scene.debugShowCommands || scene.debugShowFrustums) { + executeDebugCommand(command, scene, passState); + return; + } - commandList[0].execute(context, passState); + if (frameState.passes.depth && defined(command.derivedCommands.depth)) { + command.derivedCommands.depth.depthOnlyCommand.execute(context, passState); + return; + } - if (defined(framebuffer)) { - passState.framebuffer = framebuffer; - } + var shadowsEnabled = scene.frameState.shadowHints.shadowsEnabled; + var lightShadowsEnabled = shadowsEnabled && (scene.frameState.shadowHints.lightShadowMaps.length > 0); - frameState.commandList = savedCommandList; + if (lightShadowsEnabled && command.receiveShadows && defined(command.derivedCommands.shadows)) { + // If the command receives shadows, execute the derived shadows command. + // Some commands, such as OIT derived commands, do not have derived shadow commands themselves + // and instead shadowing is built-in. In this case execute the command regularly below. + command.derivedCommands.shadows.receiveCommand.execute(context, passState); + } else { + command.execute(context, passState); } } @@ -1825,8 +1848,8 @@ define([ var framebuffer; if (environmentState.useGlobeDepthFramebuffer) { framebuffer = scene._globeDepth.framebuffer; - } else if (environmentState.useFXAA) { - framebuffer = scene._fxaa.getColorFramebuffer(); + } else if (environmentState.usePostProcess) { + framebuffer = scene._sceneFramebuffer.getColorFramebuffer(); } else { framebuffer = environmentState.originalFramebuffer; } @@ -2475,19 +2498,20 @@ define([ environmentState.useOIT = scene._oit.isSupported(); } - // If supported, configure FXAA to use the globe depth color texture and clear the FXAA framebuffer. - var useFXAA = environmentState.useFXAA = !picking && scene.fxaa; - if (useFXAA) { - scene._fxaa.update(context, passState); - scene._fxaa.clear(context, passState, clearColor); + var postProcess = scene.postProcess; + postProcess.fxaa.show = scene.fxaa; + var usePostProcess = environmentState.usePostProcess = !picking && postProcess.enabled; + if (usePostProcess) { + scene._sceneFramebuffer.update(context, passState); + scene._sceneFramebuffer.clear(context, passState, clearColor); } if (environmentState.isSunVisible && scene.sunBloom && !useWebVR) { passState.framebuffer = scene._sunPostProcess.update(passState); } else if (useGlobeDepthFramebuffer) { passState.framebuffer = scene._globeDepth.framebuffer; - } else if (useFXAA) { - passState.framebuffer = scene._fxaa.getColorFramebuffer(); + } else if (usePostProcess) { + passState.framebuffer = scene._sceneFramebuffer.getFramebuffer(); } if (defined(passState.framebuffer)) { @@ -2511,25 +2535,27 @@ define([ } var useOIT = environmentState.useOIT; - var useFXAA = environmentState.useFXAA; + var usePostProcess = environmentState.usePostProcess; + + var defaultFramebuffer = environmentState.originalFramebuffer; + var globeFramebuffer = useGlobeDepthFramebuffer ? scene._globeDepth.framebuffer : undefined; + var sceneFramebuffer = scene._sceneFramebuffer.getFramebuffer(); if (useOIT) { - passState.framebuffer = useFXAA ? scene._fxaa.getColorFramebuffer() : undefined; + passState.framebuffer = usePostProcess ? sceneFramebuffer : defaultFramebuffer; scene._oit.execute(context, passState); } - if (useFXAA) { - if (!useOIT && useGlobeDepthFramebuffer) { - passState.framebuffer = scene._fxaa.getColorFramebuffer(); - scene._globeDepth.executeCopyColor(context, passState); - } - - passState.framebuffer = environmentState.originalFramebuffer; - scene._fxaa.execute(context, passState); + if (usePostProcess) { + var outputFramebuffer = defaultFramebuffer; + var inputFramebuffer = useOIT ? sceneFramebuffer : globeFramebuffer; + var inputColorTexture = inputFramebuffer.getColorTexture(0); + var inputDepthTexture = defaultValue(globeFramebuffer, sceneFramebuffer).depthStencilTexture; + scene.postProcess.execute(scene._frameState, inputColorTexture, inputDepthTexture, outputFramebuffer); } - if (!useOIT && !useFXAA && useGlobeDepthFramebuffer) { - passState.framebuffer = environmentState.originalFramebuffer; + if (!useOIT && !usePostProcess && useGlobeDepthFramebuffer) { + passState.framebuffer = defaultFramebuffer; scene._globeDepth.executeCopyColor(context, passState); } } @@ -3323,7 +3349,9 @@ define([ if (defined(this._oit)) { this._oit.destroy(); } - this._fxaa.destroy(); + + this._sceneFramebuffer = this._sceneFramebuffer && this._sceneFramebuffer.destroy(); + this._postProcess = this._postProcess && this._postProcess.destroy(); this._context = this._context && this._context.destroy(); this._frameState.creditDisplay.destroy(); diff --git a/Source/Scene/SceneFramebuffer.js b/Source/Scene/SceneFramebuffer.js new file mode 100644 index 000000000000..815a50908b14 --- /dev/null +++ b/Source/Scene/SceneFramebuffer.js @@ -0,0 +1,148 @@ +/*global define*/ +define([ + '../Core/Color', + '../Core/defined', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Renderer/ClearCommand', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Renderbuffer', + '../Renderer/RenderbufferFormat', + '../Renderer/RenderState', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap' +], function( + Color, + defined, + destroyObject, + PixelFormat, + ClearCommand, + Framebuffer, + PixelDatatype, + Renderbuffer, + RenderbufferFormat, + RenderState, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap) { + 'use strict'; + + /** + * @private + */ + function SceneFramebuffer() { + this._colorTexture = undefined; + this._depthStencilTexture = undefined; + this._depthStencilRenderbuffer = undefined; + this._fbo = undefined; + + this._clearCommand = new ClearCommand({ + color : new Color(0.0, 0.0, 0.0, 0.0), + depth : 1.0, + owner : this + }); + } + + function destroyResources(post) { + post._fbo = post._fbo && post._fbo.destroy(); + post._colorTexture = post._colorTexture && post._colorTexture.destroy(); + post._depthStencilTexture = post._depthStencilTexture && post._depthStencilTexture.destroy(); + post._depthStencilRenderbuffer = post._depthStencilRenderbuffer && post._depthStencilRenderbuffer.destroy(); + + post._fbo = undefined; + post._colorTexture = undefined; + post._depthStencilTexture = undefined; + post._depthStencilRenderbuffer = undefined; + } + + SceneFramebuffer.prototype.update = function(context) { + var width = context.drawingBufferWidth; + var height = context.drawingBufferHeight; + + var colorTexture = this._colorTexture; + var textureChanged = !defined(colorTexture) || colorTexture.width !== width || colorTexture.height !== height; + if (textureChanged) { + this._colorTexture = this._colorTexture && this._colorTexture.destroy(); + this._depthStencilTexture = this._depthStencilTexture && this._depthStencilTexture.destroy(); + this._depthStencilRenderbuffer = this._depthStencilRenderbuffer && this._depthStencilRenderbuffer.destroy(); + + this._colorTexture = new Texture({ + context : context, + width : width, + height : height, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }) + }); + + if (context.depthTexture) { + this._depthStencilTexture = new Texture({ + context : context, + width : width, + height : height, + pixelFormat : PixelFormat.DEPTH_STENCIL, + pixelDatatype : PixelDatatype.UNSIGNED_INT_24_8 + }); + } else { + this._depthStencilRenderbuffer = new Renderbuffer({ + context : context, + width : width, + height : height, + format : RenderbufferFormat.DEPTH_STENCIL + }); + } + } + + if (!defined(this._fbo) || textureChanged) { + this._fbo = this._fbo && this._fbo.destroy(); + + this._fbo = new Framebuffer({ + context : context, + colorTextures : [this._colorTexture], + depthStencilTexture : this._depthStencilTexture, + depthStencilRenderbuffer : this._depthStencilRenderbuffer, + destroyAttachments : false + }); + } + }; + + SceneFramebuffer.prototype.execute = function(context, passState) { + this._command.execute(context, passState); + }; + + SceneFramebuffer.prototype.clear = function(context, passState, clearColor) { + var framebuffer = passState.framebuffer; + + passState.framebuffer = this._fbo; + Color.clone(clearColor, this._clearCommand.color); + this._clearCommand.execute(context, passState); + + passState.framebuffer = framebuffer; + }; + + SceneFramebuffer.prototype.getFramebuffer = function() { + return this._fbo; + }; + + SceneFramebuffer.prototype.isDestroyed = function() { + return false; + }; + + SceneFramebuffer.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return SceneFramebuffer; +}); diff --git a/Source/Shaders/PostProcessFilters/FXAA.glsl b/Source/Shaders/PostProcessFilters/FXAA.glsl index 09067f48970e..25f6069456ac 100644 --- a/Source/Shaders/PostProcessFilters/FXAA.glsl +++ b/Source/Shaders/PostProcessFilters/FXAA.glsl @@ -1,7 +1,6 @@ varying vec2 v_textureCoordinates; -uniform sampler2D u_texture; -uniform vec2 u_fxaaQualityRcpFrame; +uniform sampler2D u_colorTexture; const float fxaaQualitySubpix = 0.5; const float fxaaQualityEdgeThreshold = 0.125; @@ -9,13 +8,14 @@ const float fxaaQualityEdgeThresholdMin = 0.0833; void main() { + vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw; vec4 color = FxaaPixelShader( v_textureCoordinates, - u_texture, - u_fxaaQualityRcpFrame, + u_colorTexture, + fxaaQualityRcpFrame, fxaaQualitySubpix, fxaaQualityEdgeThreshold, fxaaQualityEdgeThresholdMin); - float alpha = texture2D(u_texture, v_textureCoordinates).a; + float alpha = texture2D(u_colorTexture, v_textureCoordinates).a; gl_FragColor = vec4(color.rgb, alpha); } From 9c8a6d637f24fb465394f862c3722b66c04150aa Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Tue, 11 Jul 2017 16:27:11 -0400 Subject: [PATCH 02/99] Cleanup --- Source/Renderer/DrawCommand.js | 21 --------------------- Source/Scene/Model.js | 9 +-------- Source/Scene/PostProcess.js | 23 +++++------------------ Source/Scene/PostProcessStage.js | 1 + Source/Scene/Scene.js | 2 -- 5 files changed, 7 insertions(+), 49 deletions(-) diff --git a/Source/Renderer/DrawCommand.js b/Source/Renderer/DrawCommand.js index f5d7c17e0828..66262617f24a 100644 --- a/Source/Renderer/DrawCommand.js +++ b/Source/Renderer/DrawCommand.js @@ -38,7 +38,6 @@ define([ this._debugOverlappingFrustums = 0; this._castShadows = defaultValue(options.castShadows, false); this._receiveShadows = defaultValue(options.receiveShadows, false); - this._postProcess = defaultValue(options.postProcess, false); this.dirty = true; this.lastDirtyTime = 0; @@ -293,25 +292,6 @@ define([ } }, - /** - * Whether this command should receive shadows when shadowing is enabled. - * - * @memberof DrawCommand.prototype - * @type {Boolean} - * @default false - */ - postProcess : { - get : function() { - return this._postProcess; - }, - set : function(value) { - if (this._postProcess !== value) { - this._postProcess = value; - this.dirty = true; - } - } - }, - /** * An object with functions whose names match the uniforms in the shader program * and return values to set those uniforms. @@ -505,7 +485,6 @@ define([ result._debugOverlappingFrustums = command._debugOverlappingFrustums; result._castShadows = command._castShadows; result._receiveShadows = command._receiveShadows; - result._postProcess = command._postProcess; result.dirty = true; result.lastDirtyTime = 0; diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 4ebb219e6fc4..06425037b1f8 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -66,8 +66,6 @@ define([ './modelMaterialsCommon', './ModelMesh', './ModelNode', - './PostProcess', - './PostProcessStage', './SceneMode', './ShadowMode' ], function( @@ -138,8 +136,6 @@ define([ modelMaterialsCommon, ModelMesh, ModelNode, - PostProcess, - PostProcessStage, SceneMode, ShadowMode) { 'use strict'; @@ -704,8 +700,6 @@ define([ this._rtcCenterEye = undefined; // in eye coordinates this._rtcCenter3D = undefined; // in world coordinates this._rtcCenter2D = undefined; // in projected world coordinates - - this._postProcess = options.postProcess; } defineProperties(Model.prototype, { @@ -3489,8 +3483,7 @@ define([ uniformMap : uniformMap, renderState : rs, owner : owner, - pass : isTranslucent ? Pass.TRANSLUCENT : Pass.OPAQUE, - postProcess : model._postProcess + pass : isTranslucent ? Pass.TRANSLUCENT : Pass.OPAQUE }); var pickCommand; diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js index defe17720782..44a481aad3a2 100644 --- a/Source/Scene/PostProcess.js +++ b/Source/Scene/PostProcess.js @@ -1,4 +1,3 @@ -/*global define*/ define([ '../Core/Check', '../Core/Color', @@ -44,7 +43,7 @@ define([ 'use strict'; /** - * Runs a series of post processing stages given an input and output framebuffer. + * Executes a series of post processing stages. * * @param {Object} options An object with the following properties: * @param {PostProcessStage[]} options.stages The post processing stages to run. @@ -211,10 +210,6 @@ define([ }); } - function stageEnabled(stage) { - return stage.show && stage.ready; - } - function createStages(postProcess, inputColorTexture, outputFramebuffer) { var innerStages = []; var stagesEnabled = []; @@ -227,18 +222,9 @@ define([ var length = stages.length; for (i = 0; i < length; ++i) { stage = stages[i]; - var enabled = stageEnabled(stage); + var enabled = stage.show && stage.ready; stagesEnabled.push(enabled); - if (!enabled) { - continue; - } - var subStages = stage._stages; - if (defined(subStages)) { - var subStagesLength = subStages.length; - for (var j = 0; j < subStagesLength; ++j) { - innerStages.push(subStages[j]); - } - } else { + if (enabled) { innerStages.push(stage); } } @@ -368,7 +354,8 @@ define([ var length = stages.length; var stagesDirty = false; for (i = 0; i < length; ++i) { - var enabled = stageEnabled(stages[i]); + var stage = stages[i]; + var enabled = stage.show && stage.ready; if (enabled !== stagesEnabled[i]) { stagesEnabled[i] = enabled; stagesDirty = true; diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index e77df9c3df4e..84f2d5280375 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -26,6 +26,7 @@ define([ * @param {String} options.fragmentShader The fragment shader used by the post process stage. * @param {Object} options.uniformValues Uniform values that modify the behavior of the post process stage. * + * @alias PostProcessStage * @constructor */ function PostProcessStage(options) { diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index 96436a38b264..4226bcab4e85 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -1499,8 +1499,6 @@ define([ } } - frameState.clampedNear = near; - // Use the computed near and far for shadows if (shadowsEnabled) { frameState.shadowHints.nearPlane = shadowNear; From a70d8a296f907679654c37b380600c1c5bf2ea62 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Tue, 18 Jul 2017 18:20:08 -0400 Subject: [PATCH 03/99] Added composite stage --- Apps/Sandcastle/gallery/Post Processing.html | 8 ++ Source/Scene/PostProcess.js | 16 ++- Source/Scene/PostProcessCompositeStage.js | 105 +++++++++++++++++++ Source/Scene/PostProcessLibrary.js | 38 ++++++- Source/Scene/PostProcessScene.js | 6 +- Source/Scene/PostProcessStage.js | 1 - Source/Scene/TimeDynamicImagery.js | 1 - 7 files changed, 166 insertions(+), 9 deletions(-) create mode 100644 Source/Scene/PostProcessCompositeStage.js diff --git a/Apps/Sandcastle/gallery/Post Processing.html b/Apps/Sandcastle/gallery/Post Processing.html index 840a5dec917e..59c9e3aca353 100644 --- a/Apps/Sandcastle/gallery/Post Processing.html +++ b/Apps/Sandcastle/gallery/Post Processing.html @@ -63,6 +63,12 @@ + + Composite Test + + + + FXAA @@ -91,6 +97,7 @@ textureOverlayShow: false, textureOverlayAlpha: 0.5, depthViewShow: false, + compositeTestShow: false, fxaaShow: false }; @@ -112,6 +119,7 @@ postProcess.nightVision.show = Boolean(viewModel.nightVisionShow); postProcess.textureOverlay.show = Boolean(viewModel.textureOverlayShow); postProcess.textureOverlay.uniformValues.alpha = Number(viewModel.textureOverlayAlpha); + postProcess.compositeTest.show = Boolean(viewModel.compositeTestShow); postProcess.depthView.show = Boolean(viewModel.depthViewShow); scene.fxaa = Boolean(viewModel.fxaaShow); } diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js index 44a481aad3a2..d4edc20c355b 100644 --- a/Source/Scene/PostProcess.js +++ b/Source/Scene/PostProcess.js @@ -216,16 +216,22 @@ define([ postProcess._innerStages = innerStages; postProcess._stagesEnabled = stagesEnabled; - var i; - var stage; var stages = postProcess._stages; var length = stages.length; - for (i = 0; i < length; ++i) { - stage = stages[i]; + for (var i = 0; i < length; ++i) { + var stage = stages[i]; var enabled = stage.show && stage.ready; stagesEnabled.push(enabled); if (enabled) { - innerStages.push(stage); + var subStages = stage.stages; + if (defined(subStages)) { // Is a PostProcessCompositeStage + var subStagesLength = subStages.length; + for (var j = 0; j < subStagesLength; ++j) { + innerStages.push(subStages[j]); + } + } else { // Is a PostProcessStage + innerStages.push(stage); + } } } diff --git a/Source/Scene/PostProcessCompositeStage.js b/Source/Scene/PostProcessCompositeStage.js new file mode 100644 index 000000000000..7377619e49fb --- /dev/null +++ b/Source/Scene/PostProcessCompositeStage.js @@ -0,0 +1,105 @@ +define([ + '../Core/Check', + '../Core/defineProperties', + '../Core/destroyObject' +], function( + Check, + defineProperties, + destroyObject) { + 'use strict'; + + /** + * A post process stage that combines multiple {@link PostProcessStage}. + * + * @param {PostProcessStage[]} stages An array of post process stages. + * + * @alias PostProcessCompositeStage + * @constructor + */ + function PostProcessCompositeStage(stages) { + //>>includeStart('debug', pragmas.debug); + Check.defined('stages', stages); + Check.typeOf.number.greaterThan('stages.length', stages.length, 0); + //>>includeEnd('debug'); + + this._stages = stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + stages[i].show = true; + } + + /** + * Whether to show the post process stage. + * @type {Boolean} + * @default false + */ + this.show = false; + } + + defineProperties(PostProcessCompositeStage.prototype, { + /** + * Whether the post process stage is ready. + * @memberof PostProcessCompositeStage.prototype + * @type {Boolean} + * @default false + */ + ready : { + get : function() { + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + if (!stages[i].ready) { + return false; + } + } + return true; + } + }, + /** + * The inner stages used in this composite stage. + * @memberof PostProcessCompositeStage.prototype + * @type {PostProcessStage[]} + */ + stages : { + get : function() { + return this._stages; + } + } + }); + + /** + * @private + */ + PostProcessCompositeStage.prototype.update = function(frameState) { + if (!this.show) { + return; + } + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + stages[i].update(frameState); + } + }; + + /** + * @private + */ + PostProcessCompositeStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @private + */ + PostProcessCompositeStage.prototype.destroy = function() { + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + stages[i].destroy(); + } + + return destroyObject(this); + }; + + return PostProcessCompositeStage; +}); diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index 324a9b8bd55d..f676370a5fb4 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -1,9 +1,9 @@ -/*global define*/ define([ '../Core/buildModuleUrl', '../Core/defineProperties', '../Core/destroyObject', './PostProcess', + './PostProcessCompositeStage', './PostProcessStage', '../Shaders/PostProcessFilters/FXAA', '../ThirdParty/Shaders/FXAA3_11' @@ -12,6 +12,7 @@ define([ defineProperties, destroyObject, PostProcess, + PostProcessCompositeStage, PostProcessStage, FXAAFS, FXAA3_11) { @@ -102,6 +103,15 @@ define([ get : function() { return createDepthViewStage(); } + }, + + /** + * @private + */ + compositeTest : { + get : function() { + return createCompositeTestStage(); + } } }); @@ -246,5 +256,31 @@ define([ }); } + function createCompositeTestStage() { + var darkenShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' gl_FragColor = vec4(color * 0.5, 1.0); \n' + + '} \n'; + var redShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' float red = texture2D(u_colorTexture, v_textureCoordinates).r; \n' + + ' gl_FragColor = vec4(red, 0.0, 0.0, 1.0); \n' + + '} \n'; + var darkenStage = new PostProcessStage({ + fragmentShader : darkenShader + }); + var redStage = new PostProcessStage({ + fragmentShader : redShader + }); + return new PostProcessCompositeStage([darkenStage, redStage]); + } + return PostProcessLibrary; }); diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 5b315655f0a9..58e5d9fd5475 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -1,4 +1,3 @@ -/*global define*/ define([ '../Core/defineProperties', '../Core/destroyObject', @@ -40,6 +39,10 @@ define([ * @inheritdoc PostProcessLibrary#depthView */ this.depthView = PostProcessLibrary.depthView; + /** + * @inheritdoc PostProcessLibrary#compositeTest + */ + this.compositeTest = PostProcessLibrary.compositeTest; /** * @inheritdoc PostProcessLibrary#fxaa */ @@ -52,6 +55,7 @@ define([ this.nightVision, this.textureOverlay, this.depthView, + this.compositeTest, this.fxaa ]; diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index 84f2d5280375..c53e27a2696a 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -1,4 +1,3 @@ -/*global define*/ define([ '../Core/Check', '../Core/clone', diff --git a/Source/Scene/TimeDynamicImagery.js b/Source/Scene/TimeDynamicImagery.js index 724c3ad1aa3e..a31a0063b559 100644 --- a/Source/Scene/TimeDynamicImagery.js +++ b/Source/Scene/TimeDynamicImagery.js @@ -1,4 +1,3 @@ -/*global define*/ define([ '../Core/Check', '../Core/defaultValue', From 4ad7479f10fdf0481357a0eae9cd01c78466f4ef Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Fri, 21 Jul 2017 17:56:18 -0400 Subject: [PATCH 04/99] Added ability to have more complex post process stages --- Apps/Sandcastle/gallery/Post Processing.html | 10 +- .../SCene/PostProcessAmbientOcclusionStage.js | 210 ++++++++++++++++++ Source/Scene/PostProcess.js | 180 ++++++++------- Source/Scene/PostProcessCompositeStage.js | 31 +-- Source/Scene/PostProcessLibrary.js | 15 ++ Source/Scene/PostProcessScene.js | 5 + Source/Scene/PostProcessStage.js | 39 ++-- 7 files changed, 364 insertions(+), 126 deletions(-) create mode 100644 Source/SCene/PostProcessAmbientOcclusionStage.js diff --git a/Apps/Sandcastle/gallery/Post Processing.html b/Apps/Sandcastle/gallery/Post Processing.html index 59c9e3aca353..812f2ecc9e0a 100644 --- a/Apps/Sandcastle/gallery/Post Processing.html +++ b/Apps/Sandcastle/gallery/Post Processing.html @@ -69,6 +69,12 @@ + + Ambient Occlusion + + + + FXAA @@ -98,6 +104,7 @@ textureOverlayAlpha: 0.5, depthViewShow: false, compositeTestShow: false, + ambientOcclusionShow: false, fxaaShow: false }; @@ -119,8 +126,9 @@ postProcess.nightVision.show = Boolean(viewModel.nightVisionShow); postProcess.textureOverlay.show = Boolean(viewModel.textureOverlayShow); postProcess.textureOverlay.uniformValues.alpha = Number(viewModel.textureOverlayAlpha); - postProcess.compositeTest.show = Boolean(viewModel.compositeTestShow); postProcess.depthView.show = Boolean(viewModel.depthViewShow); + postProcess.compositeTest.show = Boolean(viewModel.compositeTestShow); + postProcess.ambientOcclusion.show = Boolean(viewModel.ambientOcclusionShow); scene.fxaa = Boolean(viewModel.fxaaShow); } //Sandcastle_End diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js new file mode 100644 index 000000000000..a21e8c5d3a55 --- /dev/null +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -0,0 +1,210 @@ +define([ + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + defineProperties, + destroyObject, + PixelFormat, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for ambient occlusion. Implements {@link PostProcessStage}. + * + * @alias PostProcessAmbientOcclusionStage + * @constructor + * + * @private + */ + function PostProcessAmbientOcclusionStage() { + this._fragmentShader = undefined; + this._uniformValues = undefined; + + this._aoTexture = undefined; + this._aoFramebuffer = undefined; + this._aoPostProcess = undefined; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_aoTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' vec3 ao = texture2D(u_aoTexture, v_textureCoordinates).rgb; \n' + + ' gl_FragColor = vec4(color * ao, 1.0); \n' + + '} \n'; + + this._uniformValues = { + aoTexture : undefined + }; + + /** + * @inheritdoc PostProcessStage#show + */ + this.show = false; + } + + defineProperties(PostProcessAmbientOcclusionStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + } + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessAmbientOcclusionStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this, frameState.context); + } + + this._aoPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._aoFramebuffer); + }; + + function createSampler() { + return new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }); + } + + function createResources(stage, context) { + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + var aoTexture = new Texture({ + context : context, + width : screenWidth, + height : screenHeight, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : createSampler() + }); + var aoFramebuffer = new Framebuffer({ + context : context, + colorTextures : [aoTexture], + destroyAttachments : false + }); + + var aoGenerateShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' gl_FragColor = vec4(vec3(czm_luminance(color)), 1.0); \n' + + '} \n'; + var aoBlurXShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' gl_FragColor = vec4(color * 0.5, 1.0); \n' + + '} \n'; + var aoBlurYShader = + 'uniform sampler2D u_colorTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' gl_FragColor = vec4(color * 0.9, 1.0); \n' + + '} \n'; + + var aoGenerateStage = new PostProcessStage({ + fragmentShader : aoGenerateShader + }); + + var aoBlurXStage = new PostProcessStage({ + fragmentShader : aoBlurXShader + }); + + var aoBlurYStage = new PostProcessStage({ + fragmentShader : aoBlurYShader + }); + + var aoPostProcess = new PostProcess({ + stages : [aoGenerateStage, aoBlurXStage, aoBlurYStage], + overwriteInput : false, + blendOutput : false + }); + + aoGenerateStage.show = true; + aoBlurXStage.show = true; + aoBlurYStage.show = true; + + stage._aoTexture = aoTexture; + stage._aoFramebuffer = aoFramebuffer; + stage._aoPostProcess = aoPostProcess; + stage._uniformValues.aoTexture = aoTexture; + } + + function destroyResources(stage) { + stage._aoTexture = stage._aoTexture && stage._aoTexture.destroy(); + stage._aoFramebuffer = stage._aoFramebuffer && stage._aoFramebuffer.destroy(); + stage._aoPostProcess = stage._aoPostProcess && stage._aoPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessAmbientOcclusionStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessAmbientOcclusionStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessAmbientOcclusionStage; +}); diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js index d4edc20c355b..12878a39739f 100644 --- a/Source/Scene/PostProcess.js +++ b/Source/Scene/PostProcess.js @@ -63,9 +63,11 @@ define([ this._overwriteInput = defaultValue(options.overwriteInput, false); this._blendOutput = defaultValue(options.blendOutput, true); + this._drawCommands = undefined; this._framebuffers = undefined; this._colorTextures = undefined; - this._innerStages = undefined; + this._activeStages = undefined; + this._inactiveStages = undefined; this._cache = undefined; this._inputColorTexture = undefined; this._inputDepthTexture = undefined; @@ -161,37 +163,21 @@ define([ } function destroyDrawCommands(postProcess) { - var innerStages = postProcess._innerStages; - if (defined(innerStages)) { - var length = innerStages.length; + var drawCommands = postProcess._drawCommands; + if (defined(drawCommands)) { + var length = drawCommands.length; for (var i = 0; i < length; ++i) { - var stage = innerStages[i]; - stage._drawCommand.shaderProgram.destroy(); - stage._drawCommand = undefined; + drawCommands[i].shaderProgram.destroy(); } + postProcess._drawCommands = undefined; } } - function createRenderState(blend) { - if (blend) { - return RenderState.fromCache({ - blending : BlendingState.ALPHA_BLEND - }); - } - - return RenderState.fromCache(); - } - - function createDrawCommands(postProcess, context) { - var innerStages = postProcess._innerStages; - var length = innerStages.length; + function destroyStages(postProcess) { + var stages = postProcess._stages; + var length = stages.length; for (var i = 0; i < length; ++i) { - var stage = innerStages[i]; - var renderState = (postProcess._blendOutput && (i === length - 1)) ? createRenderState(true) : createRenderState(false); - stage._drawCommand = context.createViewportQuadCommand(stage._fragmentShader, { - renderState : renderState, - owner : postProcess - }); + stages[i].destroy(); } } @@ -211,9 +197,11 @@ define([ } function createStages(postProcess, inputColorTexture, outputFramebuffer) { - var innerStages = []; + var activeStages = []; + var inactiveStages = []; var stagesEnabled = []; - postProcess._innerStages = innerStages; + postProcess._activeStages = activeStages; + postProcess._inactiveStages = inactiveStages; postProcess._stagesEnabled = stagesEnabled; var stages = postProcess._stages; @@ -222,24 +210,20 @@ define([ var stage = stages[i]; var enabled = stage.show && stage.ready; stagesEnabled.push(enabled); - if (enabled) { - var subStages = stage.stages; - if (defined(subStages)) { // Is a PostProcessCompositeStage - var subStagesLength = subStages.length; - for (var j = 0; j < subStagesLength; ++j) { - innerStages.push(subStages[j]); - } - } else { // Is a PostProcessStage - innerStages.push(stage); - } + var stagesGroup = enabled ? activeStages : inactiveStages; + var subStages = stage.stages; + if (defined(subStages)) { // Is a PostProcessCompositeStage + stagesGroup.push.apply(stagesGroup, subStages); // concat in place + } else { // Is a PostProcessStage + stagesGroup.push(stage); } } // Cannot read and write to the same framebuffer simultaneously, add a passthrough stage. var outputColorTexture = defined(outputFramebuffer) ? outputFramebuffer.getColorTexture(0) : undefined; - if (inputColorTexture === outputColorTexture && innerStages.length === 1) { + if (inputColorTexture === outputColorTexture && activeStages.length === 1) { var passthroughStage = createPassthroughStage(); - innerStages.push(passthroughStage); + activeStages.push(passthroughStage); } } @@ -253,8 +237,8 @@ define([ } function createTextures(postProcess, inputColorTexture, context) { - var innerStages = postProcess._innerStages; - var length = CesiumMath.clamp(innerStages.length - 1, 0, 2); + var activeStages = postProcess._activeStages; + var length = CesiumMath.clamp(activeStages.length - 1, 0, 2); var colorTextures = new Array(length); postProcess._colorTextures = colorTextures; @@ -283,13 +267,13 @@ define([ function getUniformFunction(stage, name) { return function() { - return stage._uniformValues[name]; + return stage.uniformValues[name]; }; } function createUniformMap(stage, colorTexture, depthTexture) { var uniformMap = {}; - var uniformValues = stage._uniformValues; + var uniformValues = stage.uniformValues; for (var name in uniformValues) { if (uniformValues.hasOwnProperty(name)) { var uniformName = 'u_' + name; @@ -307,31 +291,55 @@ define([ }); } - function linkStages(postProcess, inputColorTexture, inputDepthTexture, outputFramebuffer) { - var innerStages = postProcess._innerStages; + function createRenderState(blend) { + if (blend) { + return RenderState.fromCache({ + blending : BlendingState.ALPHA_BLEND + }); + } + + return RenderState.fromCache(); + } + + function getCurrentColorTexture(postProcess, index) { + var inputColorTexture = postProcess._inputColorTexture; var colorTextures = postProcess._colorTextures; + if (index === 0) { + return inputColorTexture; + } + return colorTextures[(index + 1) % colorTextures.length]; + } + + function getCurrentFramebuffer(postProcess, index, length) { + var outputFramebuffer = postProcess._outputFramebuffer; var framebuffers = postProcess._framebuffers; + if (index === length - 1) { + return outputFramebuffer; + } + return framebuffers[index % framebuffers.length]; + } - var length = innerStages.length; - for (var i = 0; i < length; ++i) { - var colorTexture; - if (i === 0) { - colorTexture = inputColorTexture; - } else { - colorTexture = colorTextures[(i + 1) % colorTextures.length]; - } + function createDrawCommands(postProcess, context) { + var activeStages = postProcess._activeStages; + var drawCommands = []; + postProcess._drawCommands = drawCommands; - var framebuffer; - if (i === length - 1) { - framebuffer = outputFramebuffer; - } else { - framebuffer = framebuffers[i % framebuffers.length]; - } + var length = activeStages.length; + for (var i = 0; i < length; ++i) { + var framebuffer = getCurrentFramebuffer(postProcess, i, length); + var colorTexture = getCurrentColorTexture(postProcess, i); + var depthTexture = postProcess._inputDepthTexture; - var stage = innerStages[i]; - var drawCommand = stage._drawCommand; - drawCommand.uniformMap = createUniformMap(stage, colorTexture, inputDepthTexture); - drawCommand.framebuffer = framebuffer; + var stage = activeStages[i]; + var renderState = (postProcess._blendOutput && (i === length - 1)) ? createRenderState(true) : createRenderState(false); + var uniformMap = createUniformMap(stage, colorTexture, depthTexture); + var drawCommand = context.createViewportQuadCommand(stage.fragmentShader, { + renderState : renderState, + uniformMap : uniformMap, + framebuffer : framebuffer, + owner : postProcess + }); + drawCommands.push(drawCommand); } } @@ -340,7 +348,7 @@ define([ var screenHeight = context.drawingBufferHeight; var stages = postProcess._stages; - var innerStages = postProcess._innerStages; + var activeStages = postProcess._activeStages; var stagesEnabled = postProcess._stagesEnabled; if (inputColorTexture !== postProcess._inputColorTexture || @@ -352,7 +360,7 @@ define([ return true; } - if (!defined(innerStages)) { + if (!defined(activeStages)) { return true; } @@ -398,27 +406,34 @@ define([ } this._cache = cache; - var i; - var stages = this._stages; - var length = stages.length; - for (i = 0; i < length; ++i) { - stages[i].update(frameState); - } - - if (isDirty(this, inputColorTexture, inputDepthTexture, outputFramebuffer, context)) { + var dirty = isDirty(this, inputColorTexture, inputDepthTexture, outputFramebuffer, context); + if (dirty) { destroyDrawCommands(this); destroyFramebuffers(this); createStages(this, inputColorTexture, outputFramebuffer); - createDrawCommands(this, context); createTextures(this, inputColorTexture, context); createFramebuffers(this, context); - linkStages(this, inputColorTexture, inputDepthTexture, outputFramebuffer); + createDrawCommands(this, context); + } + + var i; + var length; + var activeStages = this._activeStages; + var inactiveStages = this._inactiveStages; + var drawCommands = this._drawCommands; + + // Execute inactive stages so that they may become ready + length = inactiveStages.length; + for (i = 0; i < length; ++i) { + inactiveStages[i].execute(frameState); } - var innerStages = this._innerStages; - length = innerStages.length; + // Execute active stages and their associated draw commands + length = activeStages.length; for (i = 0; i < length; ++i) { - innerStages[i]._drawCommand.execute(context); + var colorTexture = getCurrentColorTexture(this, i); + activeStages[i].execute(frameState, colorTexture, inputDepthTexture, dirty); + drawCommands[i].execute(frameState.context); } }; @@ -427,9 +442,10 @@ define([ }; PostProcess.prototype.destroy = function() { - destroyDrawCommands(); - destroyTextures(); - destroyFramebuffers(); + destroyDrawCommands(this); + destroyTextures(this); + destroyFramebuffers(this); + destroyStages(this); return destroyObject(this); }; diff --git a/Source/Scene/PostProcessCompositeStage.js b/Source/Scene/PostProcessCompositeStage.js index 7377619e49fb..103d0e930c9f 100644 --- a/Source/Scene/PostProcessCompositeStage.js +++ b/Source/Scene/PostProcessCompositeStage.js @@ -23,25 +23,16 @@ define([ //>>includeEnd('debug'); this._stages = stages; - var length = stages.length; - for (var i = 0; i < length; ++i) { - stages[i].show = true; - } /** - * Whether to show the post process stage. - * @type {Boolean} - * @default false + * @inheritDoc PostProcessStage#show */ this.show = false; } defineProperties(PostProcessCompositeStage.prototype, { /** - * Whether the post process stage is ready. - * @memberof PostProcessCompositeStage.prototype - * @type {Boolean} - * @default false + * @inheritDoc PostProcessStage#ready */ ready : { get : function() { @@ -68,28 +59,14 @@ define([ }); /** - * @private - */ - PostProcessCompositeStage.prototype.update = function(frameState) { - if (!this.show) { - return; - } - var stages = this._stages; - var length = stages.length; - for (var i = 0; i < length; ++i) { - stages[i].update(frameState); - } - }; - - /** - * @private + * @inheritdoc PostProcessStage#isDestroyed */ PostProcessCompositeStage.prototype.isDestroyed = function() { return false; }; /** - * @private + * @inheritdoc PostProcessStage#destroy */ PostProcessCompositeStage.prototype.destroy = function() { var stages = this._stages; diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index f676370a5fb4..6a03afe321d0 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -3,6 +3,7 @@ define([ '../Core/defineProperties', '../Core/destroyObject', './PostProcess', + './PostProcessAmbientOcclusionStage', './PostProcessCompositeStage', './PostProcessStage', '../Shaders/PostProcessFilters/FXAA', @@ -12,6 +13,7 @@ define([ defineProperties, destroyObject, PostProcess, + PostProcessAmbientOcclusionStage, PostProcessCompositeStage, PostProcessStage, FXAAFS, @@ -112,6 +114,15 @@ define([ get : function() { return createCompositeTestStage(); } + }, + + /** + * private + */ + ambientOcclusion : { + get : function() { + return createAmbientOcclusionStage(); + } } }); @@ -282,5 +293,9 @@ define([ return new PostProcessCompositeStage([darkenStage, redStage]); } + function createAmbientOcclusionStage() { + return new PostProcessAmbientOcclusionStage(); + } + return PostProcessLibrary; }); diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 58e5d9fd5475..870587d09b03 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -43,6 +43,10 @@ define([ * @inheritdoc PostProcessLibrary#compositeTest */ this.compositeTest = PostProcessLibrary.compositeTest; + /** + * @inheritdoc PostProcessLibrary#ambientOcclusion + */ + this.ambientOcclusion = PostProcessLibrary.ambientOcclusion; /** * @inheritdoc PostProcessLibrary#fxaa */ @@ -56,6 +60,7 @@ define([ this.textureOverlay, this.depthView, this.compositeTest, + this.ambientOcclusion, this.fxaa ]; diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index c53e27a2696a..781b4a369e48 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -35,8 +35,6 @@ define([ //>>includeEnd('debug'); this._fragmentShader = options.fragmentShader; - this._drawCommand = undefined; - this._ready = false; var texturesLength = 0; var uniformValues = options.uniformValues; @@ -69,18 +67,30 @@ define([ */ ready : { get : function() { - return this._ready; + return this._textures.length === this._texturesLength; } }, /** * Uniform values that modify the behavior of the post process stage. + * @memberof PostProcessStage.prototype * @type {Object} */ uniformValues : { get : function() { return this._uniformValues; } + }, + + /** + * The fragment shader text used by the post process stage. + * @memberof PostProcessState.prototype + * @type {String} + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } } }); @@ -100,22 +110,19 @@ define([ /** * @private */ - PostProcessStage.prototype.update = function(frameState) { + PostProcessStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { if (!this.show) { return; } - if (this._textures.length === this._texturesLength) { - this._ready = true; - return; - } - - var uniformValues = this._uniformValues; - for (var name in uniformValues) { - if (uniformValues.hasOwnProperty(name)) { - var value = uniformValues[name]; - if (typeof value === 'string') { - uniformValues[name] = loadTexture(this, name, value, frameState); + if (!this.ready) { + var uniformValues = this._uniformValues; + for (var name in uniformValues) { + if (uniformValues.hasOwnProperty(name)) { + var value = uniformValues[name]; + if (typeof value === 'string') { + uniformValues[name] = loadTexture(this, name, value, frameState); + } } } } @@ -141,7 +148,7 @@ define([ * @private */ PostProcessStage.prototype.destroy = function() { - destroyTextures(); + destroyTextures(this); return destroyObject(this); }; From 82600fe8836fb2404ea9612dd66eb10535feaa2e Mon Sep 17 00:00:00 2001 From: byumjin Date: Mon, 24 Jul 2017 20:53:45 -0400 Subject: [PATCH 05/99] added HBAO and DOF added HBAO and DOF --- Apps/Sandcastle/gallery/DOF.html | 128 +++++++++ Apps/Sandcastle/gallery/DOF.jpg | Bin 0 -> 59271 bytes Apps/Sandcastle/gallery/HBAO.html | 136 +++++++++ Apps/Sandcastle/gallery/HBAO.jpg | Bin 0 -> 28874 bytes .../Assets/Textures/HBAO/RandomNoiseTex.jpg | Bin 0 -> 130792 bytes Source/Assets/Textures/LensFlare/DirtMask.jpg | Bin 0 -> 113718 bytes .../Assets/Textures/LensFlare/StarBurst.jpg | Bin 0 -> 195728 bytes .../SCene/PostProcessAmbientOcclusionStage.js | 185 ++++++++++-- Source/Scene/PostProcessDepthOfFieldStage.js | 267 ++++++++++++++++++ Source/Scene/PostProcessLibrary.js | 15 + Source/Scene/PostProcessScene.js | 5 + Source/Scene/PostProcessStage.js | 24 +- 12 files changed, 741 insertions(+), 19 deletions(-) create mode 100644 Apps/Sandcastle/gallery/DOF.html create mode 100644 Apps/Sandcastle/gallery/DOF.jpg create mode 100644 Apps/Sandcastle/gallery/HBAO.html create mode 100644 Apps/Sandcastle/gallery/HBAO.jpg create mode 100644 Source/Assets/Textures/HBAO/RandomNoiseTex.jpg create mode 100644 Source/Assets/Textures/LensFlare/DirtMask.jpg create mode 100644 Source/Assets/Textures/LensFlare/StarBurst.jpg create mode 100644 Source/Scene/PostProcessDepthOfFieldStage.js diff --git a/Apps/Sandcastle/gallery/DOF.html b/Apps/Sandcastle/gallery/DOF.html new file mode 100644 index 000000000000..2a70bee5d0e6 --- /dev/null +++ b/Apps/Sandcastle/gallery/DOF.html @@ -0,0 +1,128 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + +
Depth Of Field + +
Focal Distance + +
Kernel Size + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/DOF.jpg b/Apps/Sandcastle/gallery/DOF.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfa071c40a19593da1389494c419e820aebe7939 GIT binary patch literal 59271 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∓pH0r3*Dty&x& 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 literal 0 HcmV?d00001 diff --git a/Apps/Sandcastle/gallery/HBAO.html b/Apps/Sandcastle/gallery/HBAO.html new file mode 100644 index 000000000000..eb60a61f08d0 --- /dev/null +++ b/Apps/Sandcastle/gallery/HBAO.html @@ -0,0 +1,136 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HBAO + +
HBAO Only + +
Intensity + +
LenCap + +
StepSize + +
Bias + +
Kernel Size + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/HBAO.jpg b/Apps/Sandcastle/gallery/HBAO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bea5f5039ee26e2d3aa35cbd91d57473f90acf4 GIT binary patch literal 28874 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 b4?wgw6Fb@#R}%lPjCKWNzg0#*ywQIFy1g}5 literal 0 HcmV?d00001 diff --git a/Source/Assets/Textures/HBAO/RandomNoiseTex.jpg b/Source/Assets/Textures/HBAO/RandomNoiseTex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a290615d21b66cb8a5690b89d01268f45f171595 GIT binary patch literal 130792 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

-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%0AGV@2|d;eeu^iq@gYmFr!di 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%0DUz<)3u)Mq?O05Y3|nMn{x%p?;Ula0o30%ZgN z$^o$a|IM6+rBq;XN{my`9e0gUJgh6o$KK19cppRDzf+57Ak%m4nE&^e0~qkj0m5J9 zz`9{FYv#b`E1u>jC(FMRnQqta-8h~b>6B&A6FiaYKXhKO^taWAx0C(*;!AZ}YV_`0 zPLy?5w^A9{==iak`lb;!u_$q*&vPfn_72HiA0|@6Z{GMaV^A4+DFlg+ zjA|IRd3vzyTk8qsg@E)ptx&_Zx;^@pOIMA$S}!c0{yp4UxU!jI;ozL=9h2;;c|uFl zf9$tcQ4L#lf9KgOrE9mWEzWvrY7FUaY9Buw=4Jc2ZqVz~Rd(&mCbq1TE?Hl6%oeVyTp`!4=;}Q|I)i~+Nh&sXqV`rq$N47lH%G(FPj%LfxB*n z2O75pfxB`_ePVo5@aCJZQI`f!Wv(+x-~D6Zve@GAqL7ArlVma zHqdi$##^^9o}-+;Ij}okqsKtBiH|2;kLU4zjppot04tm2@}sKnA|*BxSS3amq#cfD zu+le%?RJGMef3x7zP67|Z0}yx3(=cFuK$6uUjF-XkLJ?I>ngcYrGVh(Cn57w{ZpBn z=cU>oZ=IAfw@U6eOK+5)ah~oDiCwyK<+;JjYNM%*@7>9w+p7j9RT2$;=e54S*|rQC zcyt>)j<-;P`$^;HT{{s@(ibBZzU;MS9{>htyin_I^39 zrM=}qiCaogzFA0hH7&}uTmRDhC@SWI|IgntweNV?{&La9oMly8Q&NW=;&P`%~uP>g5#Wc=n*xl@?_<#A)B!b5`BwpLRL zjvc9^+tq--Dij<)VA>PzwXHj!m%#U1u=w~$rCiP3i{&%_sxIFh$$AptJZYDAd8EYL z<#o5=rS9XQV)zhaccN3~=CKl&YcHPO*Nq~&ja&EGw+jV&e{y%^iyq(xmp9G$FIoKd z_(!77q3)2c!L|7;I}NK(aemHs6PE6-cIKv7n&KvP1L9MB^`p35U%TinC6~V4Oqy<+ z+v`-plWVZDmz-4UcChQ~!Jrets>`)LdcyBH(<$znH!g3DS1waK9Ba%kc=}MDxm>#N z)xX~ClNcvA&Y`-1P=%I8f3sFg&5)ga(Djll@ZdzEvddDOvasW-AMf4h=l5QB4qh>` zEKyxAbV&)$8uJ~Nc<-~ck-n$@XjA!pjcZ3nT0Z^Z>Pm08b9b<-s6tFhqP-?&>-oOt zEMK>K4T}QH9S@Q#YBHHR!Nc1Lbv5E^8xxF;2ghZu4mdh09S8Rf))%Z6NwK`ZI;pZEB1ko_tFDNxyp|%#oXzxb zHt~MybIjz=UgOQaYB^Lusa^9cR=lU=xSQD<%)WTE#Of}@;n0yR= zchI^HwNWYRXLEnLy3X3$(Dzsl}EOVq=KthQp8S_XQL5FvH0& zhQTKowg>5)Pgv`U?YG>9stZ@~nb#COLWBK-_$Hks;XJeK{OivbB2%ot2#$VG@XreD zGgmdin|t^V@>rgBd0y~_w|;n$AQI=ZN;WC2mo+&f=NXzapY;`UYCts;dzC|%(DwSq zS#hd!jc^F!eDShz{E*KrZq?z+tCn6O6O!jE_NsU+XJ=@dl{Do~vA=p;=@O=zdVIgU z%)w!@-~6V_A!g@5{`J53r|Y*FCeL5`gf8E>K71+5@ygSqr(!&W%7*f48-^?=zHceu zKlLMKC*N%P80Vv7$BrbZXO{B_rhKYhd#%vX*bhygyLrQYtDh>BH#GnD$g-W~H&1Q} zWxfv=Md}1XC9$Wi|J|0Z|Dh#VlabC|!y_yuC9FMxxOp2&=G3GoSZ`D&2@mpA91?UE zzQ^xT89(?*sEDqwiQ>{ z?af-+6jgqPNSees7}*66f4L(*cI{f_llrUi%3XRRQ`sHL6G^g-H|N-I9XIMJ`*!*^ zzOXj9e@#uh?)>2$}X_vljaZx6R=JtOezBAzJKD!B;!>{MT92>(g zUTOR-nD=z&(O`Py=Ch+fFJp^WwiGE!YB9R%$K~G=l^Nt^U7mLq|W4Q+-|R#pylOL zdOc_=DqvbfXXDM;CKms*zvG*zZNJl=+9cNxWr-mbhQD{?GQ!?=bH~&LF1&V?=pikO zDEn>-_}V_6-Cv| zsZnC7$5r9iN~IbfQ=6S8nWQ z_$u+N-oTOlnw|y>&pbRSMp*k-EJAp3_{`4}tLgZT#=pa@HE%Y?N!7yp)tx;9g>((R zJ~;D!ceq=)s)5?9Y^LX>^V)g+a(>M(iW07V<@sQ;Ii1II=`FOAmbznmA?;!`II7q8mdzM+RG)|I+F&=S=$ zHa!$>(AGTv;&@|ta9QEUNT0`Q=~;<)(QWyC-d~lvEBV7^!)^Qam;F2t)X9tyn$YX1 zn^O2m?2#Mr?2XepGLC)!XpPx@JS4b0NKe3I^y8$|s%mPrgtL6<$eWI@ACEX(yc_%c z;f*UEdnw?CuJVcXzuNZngns_4qwJ5prbi5SwQg0fC;#afnF+jAue&~|^(tQ6vD3av zqrR)mviwe&O|fsQ;8(k1oT*%JS#d$!U&`mvrB5x_)fc|nXnOFQphmt|u9$6Q_I@iL zVaLtI#B!UfoW#!9$Nsx(q44^*d5?x$;v3QjnxEZq9;#T3P`YF!xPD_QDk{j{?p0({ z`J+2uS4wXLcD1w*3rXg_9~{{j_yewHdj6YQaHSnfBsr1qpee!Fa>6;I#PLMTYg`?hxrLUN?RRdZa!{_Km|vWWmy{j8B_l5O*RY;1`l4fq%jCY9-D%Y)MOq%to=oU_ zT2VS9VUl-`bs*g=a9`0S?lVVM+hyuRvf8T_OVoUwg+i*oq;MCEemy-Tb@=m@ z9$m_NFfN`jR}jN{Zfdn#DtJiK=eq9|k1SeD=g*fP_LXxE7?NWxxpxjM)n6L& zw~w7PeUr9FYpchTeB7ryb;4oiLa(HP)a!pq!&T4UkUN&|8Fws4XkFr|>wj*=QN$hC zsB@+8eYA%7U*g|E((+Ohm&?uErLufY#g}(w{z;#mUZ1esG@1(Rnr+JBz4@V=V zM3{IytQQ%v&MQ5gm>nT2Iw|abS|=~e$o!he)qTr93+vBaV&$Iyr5ZjHYjv_CE?Rx) z^*rzM1)B|?=XwTPrC*{rIeuPXQV)K1t(vsZTCNFQ4K@q-6Cd9+QRGwfwd<+jjbQA8 zes+LWi@f;0&fYIygML+Pyt*#I;V%du}?g=}}b2$K?Y@gA%@sOx?|&~k+C67p-kRP*rQ2L-HCQb&`f~#ng90)b7Lofjq3dj$F8O z${>hPy%fU7s)#0hnSJA7_X3yo!vD&VtQ31y5?<-g6=3RCY>p!pH{5JjrX{pbr+=u?=5YQU``D@H4g|?6B zyozu3#WMZAXKq?O^7(PaV_D>u2M9@Ef1p`pXLs*_GAKy35Khu2u8q=+E9iwb}lAqHcn$B`K${*ZMAEz#w{m>;{`6OAL*B6TU8hgCt93; zRflt}pExp@?Q&j?&rf6OcVcpZ?P{TI`oRhMkW`#>!JVoIPoX)NkUf0y)AP%nGO42E zqj5eSxZ@#y5hvNMUKW-Z6CW0kv@hpAEHCmRBO#1AJ>V?#O*HPyQ+4*}hdf@Nbpi}3 zf3_o(;I$-wSbbceCu2P>3D6b3rz;cYLi;dq!XQ+^od@zV#)& z=+Lse)WhmAHcFQ`i%w7-r;~|qrA14IWEwV>omzvw&UhZmy?8rKz1BD|USdFfP;O3p z??v@l@Q|bH7T0Ao)xTFv5kJfJWd9(}i+IFZSReOU(`Vz;^VSdS_&L{4*oxA|TCR$o za!$w{)-hk2U(zPjX{B884u0yfCL^H~LL}yBJvASZtQ>P$tavJtKdiO?^=q-}{I|Z? zYdEF2(F)sMI=#v@)7zo+4l7ru!93xh#lauaiQ+I*GvmkrIx|eS$$arGPS?b7_?}uy zaZ~;c@3%4{M;yjPRKUWD@8!s>-3M#pV$)jS)fdIA&+{A&-L@l8-Bu_lg>`J{gCyz@o>r? zmYdHL6;np3 z#EEus@dq+`5z}dWHeL$a{RpaE_BY&oRwU9UC+EIf;D$o8Jb(f0G zEi&&a7&sr;7VWW7-m(s?aTQE|d&uAV@b%c**ERkfzvH@Ao$GT<&y)+M`lN*^YWS1w z4u*c#%(+#Oc(nh**9=DPMXl|Lm;7YTWX~I`Emi`sm$~ zz8`td0grCkXL|64$`1tnJt8Vt%Z1!}M_O7Y@Fb^LK{J*P|AaiFw^$C5)1P1z2k6>vz3st7+b% zyt>-%nxGzkf@9L)sET^^!!u;LHIGx;bql{(cucYF zY)HteqP?;x`Pn=0;5;Wyb2g%yug<-g&t-4$<#hW+v5Va4%7#@-jg|jOT|8x0Y3S{d z(Nd>A71ZQgHLM}}D^Ko3RU__v#x&)z2e-Gpb>T#T;oS8pO0#2{oig7O#%Dt{w}cie z!Kp{AI?vXV+XK~60*IgGJI)Z;=<>*A{=3C|M-od-m!BB@S=;#X&4BOUG#{$5DDw93 z?}Q^Z5vzLKGU+@%Vdod)BxM>-P@nxRzFtr-Q$6l(+GFQ;ie}gOOJLGS(H$8$7L#6a zD=bf|>a90tKF-yMFRMcH$3p6}hx^Cu^0!6~^&IT|v!P2VV%zUx1B+E!Jx|NDz2JF8 z`tm>WOD`@~;*Vi>uk2gwSH1o9`L3_h zP5a{Y(BfgW{jd42=6fj=YW>V2dWT=3WU*Gx_-|B*viP0E4kXH-xYsI|e1=>4eb-~l zgqOnt0xeu2tvyZdev5(SM#KrVodSR3zBe$qL@KWR+XLvd-rGBJJS%D4Q_QypslgGW`Lhc8M!*~WOEz5X-S(tCc}`WEdZffW9O4eb>M ze(6_O235nsFe^E> z>q*o3T8qGvntKu(Y0^_|7Gss4Q#5;O*4y65JbHbb!}rkT6swB#Y!8X%qPwjHHw(>s zHoB6Qt7_cc+bV7>n>;X?UhES4n($Qhm$ZJj|E^F${AL>S?f$qsmRGOw6XX~3YJYq! z`&sDm(^|nePh*y1$WrOh6Ry=LAHoO7Q?8ZYR~~OT9p$6h?LW-7@BY0>?^}w2&lldw z%bna8cjjLU{la;tABQu0r?%~hK}lxu%0t>>%GU+Ok}dNNy)WC$k=uA*_S)#y@W{fe z6aRtk4Q{q=|5jA)+7?nco)#Z<`e`Yn;kgfGbaEY&Vu-7cMPp8MExK~yTk%R?qwXu0o+jH>a2%NZhqg>nfF_lS~Z>)Wqz z$<0NU9%{L9&IRA-E^iOr=V;7Nv!M7_h_8jc?)ofemB^L-+0-w*a%d%2FhQy&Lq}>h z+ACwux5h_}<-vbX;>NXTJzmqmV!WJvesow*EqWy3|i( ztNh$E>wNcJQl-z;1XFqL4xLPTwTnpFy)Msmw#hczbT(l=O&!^3G|+bG(%Zy)L09id z#wzpe<2+ve;o-P%9X~6v{Mk7@`{YG6$s5TH+;~X-V$?Tb7xTwjh6krLr1{Ie1N_T2 zzZ*vC_;W8rwl6V^C{p!H!B(~@8A@$sFLvKnv1flHUzDpUb6rTbP(8n1i*S+jaqtVD zVODPP4;5*j>%X!#l*hyG1`Mgsr?WgW6OXkHY;}qrfGwK>{3LiZnri&Z-_H&+Z#5me zR@w7gVyj{RdUPV~qMBXO_pSmy{WN^NvHS^xm5csr_L@uQuNN&1q$LNh{y36*@mOMu zyY{fCPlreuD<`q8Y|>4GdQUOS;pdg(lL{hk5p}YTb3yAy%Iw|^VH9M|0Z>84=l64`|pC`vr|<~k%ZX`l?xsnmCw5c{d{U#%-bL8Jw6}OZCS6s zRHv&kD{dxbuWJ3(nzH_9q~ZE_h@arO2icRMj;n=EIddgG`iI=o$Q+g8bN(Cgd6~>x zD_6CS?rziIIH4`2e(8qwNco0H(D2sr{1@9--=)|!wFFLbg*`cyyr>a4vHm-w{!)l| zPZR4o)+tg=n0QcbxbpxO2aP!=^vE0I%kk49+15+2d zWVW1#)|}kM1@`*ZaS97()WAlc^FF_9^s?Tv;ePt!R8ro@&x6Ne6)U>+e{-AEIT;(0 ze+#J9zSa7-aiDxw{@Zl-F?~_n82R|?Y^gj20!gJaSKm>^my7SMC?3i_&fm9|iv1nI zOD!2vV}B=~Pej$LnZqxp`1kgX?tWAI*RyGDPcC@0(PHkRg`x>Kqig;67guC0C-Y&% zTI<%|g;0~@?~;X1UrStku&~-R@@g=pW0k`>#gf{kKVq9GuX;mJDt2j9TKMQztf-CW zPoXN!7QZJ-*&0>R^d}`%kI9~rf#0Q;d`(u}$3x{+T39&igWB@DUzFeWwBpgRd@u6O zD)lf^HcXxJO6BG*DVq|$`Q{&dD*Nso(dYf{&Lh+t9hF&A*KkrXRhDZ~C#_*iK`QWH zZgG0XXI}kENgCzG+qRf5Mn3QM>3O9+$FGF(7xdSrp73-YqSmV_74(tg>9W#yC;S=6EC;BIS#v57teAO{LOdSv8_-^kcL zXqjGgV!5M^qt@Sa8oqL&TR}tmp4bryNyogYgh5`_-N^FH zl(yH$5U;qh?`Z*=W45<+mV%{g4jmKtN5Y0WbxqF~H!+#quQT!&uXsVzI_R5Ts!?`8 zZ@e|{>QDKbp&WL1`!fQynnoMhxGeM1)v!ahVRm{j$Kb@@B=^YFP1s=8NTvMkC|&q$2gW*r}LKj#7;a? zKWe)%WK?u8J1OGw4^E>oVS}x_ih*v^6XXk+yKqFrzL+<>*4q*C{~kXTW>+Su~*6LnHcJFP5gqNT)(-Lq+hd7{4JBF6yB19dj&@(O>>q>-?FP* z_t*%0RApMJzXX8_6Dx>$Et0i+7?z!vCKJJAcveC$`)B zf8y+<@`Egs_NciBeSfQ2I`B6=_zlhUOP^;QaVkC3lPKfdJ}x4wbm*Im3Qwi`&Tn7k z`uB=lP;Yy~cu*e~Dl9*t_cYtGXW}eXTlMZ5C#oCG>1(bX|L?8?CJH^vCH&@FdVQ~g zYdhMNQ;lZ%L;RlBUo~1TX=8|OlD8#}oWIV7sb|$Q# zIPPiS4F$cpXL|y;=yw-ezX`PDP+Z4%8A%Wg8ao> zy~$k`pRP;_GLy5?p9q(H7MvO=+=~zYW8nDfr>A%H_rIzZVVUb0dGl6>v?EWLTA8{b z`gyfK`E~NNR0ABJq`6r(S*V!jTWaP=G&Eqt+kfXJH^(;y=}a)Hnq|Xdl$NW19cpQ` za{S5F>PxIYso4|ru=MxDsj|W&Y5}9)Z@S=cVyTl-Q%8Yc2N~!e@=Q~ zQ~QUzyKR`_i0o);ebKN707H%I(cvtj|Qn7j~M7>KsD&F0G;o{wO?HSo_ zcz=Vb?V7A#qjD<-eytL3)s`oXPn7FAa~jULjBt2WC&iE}nB&VKgvaMDXqhDpxVpDK z+pqcjiM@-hn;qVod^9JZ_LUnWYxMb2a7Kg5b4kL}Vu47@W@%!ePA5Ts?(s1nnR7QU z8*5yBhLbP3b^i0=wds`pj^FVkmbpK)ZHypTR(1oFnj`y46KTNGGWd1KW)(S zx+l%ztb50nOoZZx4?op?%NmNJ_i)&yb{-Tg`$QM-}t?C9C{9=={Cl3b~3ViMFh6<)i&WeSwqFoK*c+6QN1{ zrt@XbHC_cx#X2jN2AnT@9Wo;$*dOt7PoZ8#)qUj~sb>#qH;t?nJh0e*RP4H$(LKpX z-^SPzdgmkuHtQV7>8wD$PqS%Gg5KA8TgBw*7D_{P4?dX2#UsW_1xt)Kz6k?HanjZ0 zznQXQH=A=k(p7`{#2dk*Bfko6DW^IxUP&qbqa;2UB6%H__cXg=&=OTJ^G-H(E>7>> zW|HsgM+tj`!+s0ApPN;izA{a`3>zJYQGUD^FWpmYKX}OR&g`A!Z$gcm-P^~|X^v0M zmZjY$t5^Ci@Z-bV7+vGSl0}-)4Xw2{ zDmg90aoJBT9fLwEqxD4Uh^ z%A4P;{@n}jB$*VeqOkDg=tPyb_Z)9={Nre^oYiiilGm|MY4*}L$>gj?7yTmxnr`o4 zcK5^WcQhvow6|yTe554fa?DKTd=TEs=GX6k6JECcd8%;aamb?T0(01jTl&Ig&Yi#vLjD8!-$Pc_<-6UsbP8qxm{y8Ln?z5V1xb1I| zMu~0y>Q|b22R5l%lTKosk$evVqNus{xP@Tl5D}c>N0e~ zSheyb_nK1#$6HgYmK$@LR(GrYn}2g{jNEkpyGN(O*KSK$_>c%rT2Yw(-C zvXPMM(JmQLmi%A!x^&KH9P!O+I<4z_?r$AB`{6anEU z6Ppk2QvA`QelFFiEk=zCv)M+94Fk6fwOy2xwjWT9;g*)s&lW~Hb*F4*j0$=`ovSZJ z{qsUAWV!@b`7_;>n3knQIN_qE$2P75n+ik|jrT8tZ5*;JyieD92lAf8oS)RF__18w zX#OhOz~ZWLPPxYI&v6IKvo9-d>Ttcfam3aT&a_PLTvh1u;!tT+_;@N zR9$|_F}d;5`QCM7H|Efahnz-~?)CEX4-!6qll00pdzBU%xnHw1|7`F|vK}$1v|>IX zv@BuP&NbcFzUPyk(ixS2&7o}HSMgtX74YuCSqeCouQfg6P?GgR<)txGE1eT-8L?#z zZ)PrQ=N+lPoHXjcG5(Y=(4aPUIkmNuNHxBs_G!k?|4Nwja3`0oy=*GpS;e_0Ex(^B zT$50(mSSl3)^Pet$Z+%*3MsKuETOvL$Frj*T@9b|b$Dh^9$gT4H@&#FLM`DE(iG27 zMYrqsIookN-9IqaSd}n&BW(HHBuC}2M+C;U`kkADZ*AG*L@Pm&j(lm8K|s&kgGaF7wOtm;V& zONi1FPMDEAv@Y@V%nSVjyIm*!mX@%jr%`0}%T+@wzPx8kL!y{EJkcXarHNiHZyYU`*|{YLQvbg%Llqt?zJk2DPPml0r%e= zjgHVZpr%n5q z+q)I1mdx|K#@t#95epW@AyZ-{9df$edCkskQ_~(2bIvh|+VXX-G;iVZl2<{gg8Y+K z4rsEiA+OGs_PWT;Zf?K!@Qx+d3xPp{-a`6DNqYYH3ZE6e1Gkr?uvXo9CN8?>`)>2$ z%9XfmP4))+yRoeFb=r8PEq(}jg?ofpQ{MWu{mQ)ReZo9(nhU!n7Z+#EBiLi_FG{+K z^$Q(HjgzTSkj3tja`>sp8}dYGcD44$!NP_+i4vQ`Q~{YuE02=PsluioqXH#eF8<_~ zI(zKNwnY8o=s30Jc-j6W`BzcK-H`_!GUA4{bkfgIRzI3;Wl%(q9xFGO={h;_Qu9NN zTY`G0z<0f@cE?{cZWX@Y#q2_xKjup>40mWPPz7;Qu<#}?r@J2I&#siP*u|8InMT6&l!OOuS_Gpi@wv*9%xavihtZrwQIsRebGu)+_xxqJoXvh=H(W# zC<=BN=#&!6&~hOz+@x1lch#MW(3G(H^Dz5n$FjR3pMA!F?D;z%FOi?W$e4Q<@>c71 z^&kIHW=Fo?pBa5V7wL-6=W*}2{649;FgrCBMVhi~Z%EIj7%Y`&{+PM6aa{W)TzXV7 zYs0|!{^tt9Xvp(!MJ@eKcYeHnRFI;box&9Zvw^QJ1t~{j3#<9A-~s}*m43{S28*LO zO`2B@j+!4jBJx?;$>d&+`lndi9F2OJK3~33{{>&8BD*L4yX^DN7q^C}Kf8Tv&n4+u zqGf_Qu`*TWSid=kPO`V1c+imU?77V&MG8vMJMt4_YdDwlZo5-w2!iPM6kR3cc!v-kirArdp9Ng!cXc+yQyZS_`72l;$4bVCGASCb1SHv z7k+!8_k~7DH1CGoq~9d}Tp`ctPT5HFM|=-9HPS2PpI%Pcd~nfiPeT37vn%vui7W0OW`0;ZO%E`Fi*Sd)=U3ievJ}gyH6LP-& zT&|RT*cC(Ym^d-{vh{+@b8cU$cAtOAdl=5V zVA$6NMCk?{Y{V#m(V>hH8w}WBbi6bprCUFd8a>#E(G8=!4LYSe6b1+q0-_S?`|%&1 z=Q!^BzRv49J4)KQ_;f-S8|tUmx1To#2Y#R~bm}0@YWGCjvWm2=)-^``)lrdK!7DgZ za0OTNFmhf@|kaw2&LnoN=-;l4*IX6>@wu(atoWW|ulO4INxsbXf=)WMK+ zDj-AteaR3}29lq}7tkOp50vc7XU%4h#J|pXdP^+Nm)pW&YOTA=@iSh!_I;pggU`>k z9-37b`}`wZ5`8MY37Pt6MW7Q3SX&#c^8Pev`>z;TSWN9*1**ibgO*{&rJ&My%-O=? zyB+ki3JJx(cP?EHFDYYsVvOZ8oBfh8h;)E`Z+-zOE>_fj7uf!+ynnpc)yC{YdZ`M# zS)oL;n8tF%bhv2;qa9UY#P^T$ba^2P$!hJ{@9LXdR$JTtxAnzVXKPhmF28Ph{HZ=1 zOoMJuw>as$PYgT)$v#RdfVj^(6D*}>{csCAuH8`wO%$Hqnyf*+9{#o+X=!t>>=fwB z%kOou29FLC69O4Z=Q{y&X6_G?dyD>FCHm&^u!S3!aV)+rO$+z7@nNJ1G~FHZHamh9 zez8f$kGxVPV?}9#ICbVisRGLHIJPb#Kp9$laBCy*%Ej;+Rs{dTO!w`v!f*cBFbW+` z!o)Gn{>rv?az@wP?dM}t1oB%C<7{zCL#Txj%XVb(4<-TFM;uvTF*q5h9d6K&YHsg= z1(hgauy?m6sHxcnJvrm;Nm0$c=WIPV?ec+pbEU31X@zx(mf){)by-d6TIM!13MJMc z{LQ$EOpTV2{(_DbJ^>g}y^uR5fve`l!fxe{k5n{#8dn4!>)iY6!_PbCUiNKhRCx{+ zqA&yTU+nA8P3SQb>wT3v&bkmKy1v49-bJQMc_4+S1FN{*&?EgKi!i#igCn^}HGV9ul54Wr46CV= zKllyN?iZ>bjJ@W(IR&t#CC23h7e;OCaAnA9f7Yb>Cy7{+d)i7M z@Ely&VE(+1^ZMdzk_Oe3nAyW^LES!JH6wSdQ(>fS9-q`L!#Q4cE%&ups~S(i z5X_jOAJ;yyPOOD2>{-9$+@jHFB_C7m2XrYdZXot9EhI$or`o%OczwoTvrqERh#Lb% zP8gZ@>lNd?SILkjitdvL>AGg8qe6Rk8@>DWgnibJJ!pohyJJ~$k6lo$uc_oQ6ZfHs zjd-ztc1vKaJIP4)aBfy%uzeWNJGUUtP_`#xC7E~LTXuQCD74SdJLR#kn3%Xjtx`}9*3zY~7eWF_d;b`PD zefXs#e-dGU6ai>$*X8`Z`?;DDpOMDngMQa1)!4k0Z(njaR^soT(D^8WJiEGhGIl55 zaju2TA6OtseY;ZJqh7u*!bFKj!0d3@L&Bqtax<$BXFF zE<81Rm(~`^u(I8OlJ|i(zDn~0Snz{`&F|!IJO@piZ;zt*9yv6C485QVY_FDH$65}b zRNN%H#SdEwVz`Xk-R(hVgJDBWNK0`pUd=hozbdQMA{r{ATt*qi_{gguoW=163_q@4NlMuV+S8OfguM1p|YJuVC!%kXycDxOJh6RsRpJLaW^ zZQl3i^^E>_N1jFE90P_7{3eUtjL3eA)W7m>9%n}5{r*u0&JYh&BHArGTLhD5{B{bD zhU62_qb@DX2iO__RDxwu$YjA;zQ|5VlgF^XV@J3UF*jz5u)>N zEF{mE&b^_z}VR^ybze^QwptU(ouZ~is#eR6yq>QF31rdJ-r z2KZk}4GmoLwuiT7;{>7$4*q0@r=RiX{;Zg={Ut<~22`^!t$nv-5a(+b7Hnwsy^>$IrLg7>T|GtimlVF|WiEqvMW zyU)dju}_`@H=5bM15Vf3YF6``SLK)&$F~?*;+XU5Xe^DwyFYjd*ByL-tDv z>e9ykNIz>Y59-)0*EgmM2?INSGb;DrFJZ){ROp|9Wy}BPscI{krP4C1T9}p&KrH91 zRWHVJYxGH!>1MK#I(*sYRQ8Ww7Y#ebQQwzGTrDF+r<<~_>cPL9X!NEI=8O~RsWl4D zUM;yTTlkif9xM?Fv<|^l?+aecXm4D*sVApi()QID^tg1yPxzN6A|h}C%8W*S%&Td| zRdd^)b$UEmMLlr2uiQZ_mqG&N~FKHRXHw%rbV1B3O;6h&$0pVhk{!`-#&VM7mD@In#3P(keg zL{r(?mewSxG0yEPuvH^Z#3(V1JS$nPtNU>P`}1p0>SG zl;Td{+{L&h%Dy82NY5Sty`mR!FvqUY6tctsV>_$%Zg8q74fg@G+PGOE4w?2hEUIAZ ztT*g-SHImAQ?Ypkt)HBvL~3EXND-}=3_A$ndnph)f<;Y`EL?^M&}V&z`1U@?BISNa z_UZ^~%-MeV%0qXR3mxx19Pj*y><7*@qMg7>7EEm1Evw09*-)2D`Pnm^e@!HVkEHrRYFoAF1sqsKYfC z^;3)3{L(L_;4-J5FfDH~S?}j|xWG;CFc?j$fz;)93~VEhJa122FPPqykZQDpRNmoa zQ#ANT*g0Mfni?Kih9~JGb@S?6rHg-?#t1q&J`Vs?)0(o$JJ{Ch)k|@o;}sWLhvpv( zoJYtZ;|b4+n{nNJtKVg<8=iaQ1u=Y1xIMcure2}?qhur}Q1iw8!#jV9%QV}$vdemZ za!gkSoGaHO&glSSI?X@L25F@q<7#kWutbY5;sqkQx6eW)#uP$@nSZHnGz6(}mWh~j zLZ|RDHAc&{hKWWs9pwNDZC6VmgQ0E^xv|ApQd0z+@w$d4b3@dRk;9^Wjplp@!SLrE zHA<@RMZPN%GF=%@Ost;_G1oet3&Zm;GQ8}Ooy}GDC<`1KG z7*vt~T$ZW$Hw{K`a{fisO)8~U&R=M;{ZxTBA_S5fC^2O!fDvnm^cr(CBplZ58B)LW z1sX>bs!QGzjrBsSYV!XXQe;(o{csKw%;3TY6%-I%k}QfhY1UOtMRywUWQfPfSPThm zTd8PaKX*MKN(@wmC-QXescfC))Ln4p2?XFpCeI+&CGmENC5MA17Z@RYEwe9IYbD~- zDiVTH5qD-$8GnmEmN4lIGyJ|9@<@dIiIh+1=3vT`dD^lgsr9Ysh<8bDMzvZ!-BU$f zrisY1m7=$IYZ+HL@E6X_q?WPq83mv!xigP#k?rrBEihV@j8ktY5K+uw%<1RXFD1*{ z-8bPHi4&v1+I2)Hf>^RN;hk?`oj>E&xvyj0*=CO%+)bJp zsg5Uu;UG3p;DjxKNmu=5B~y}Qs-gR*+j%_0m8V0$#cHjP3D2Hvh^g7q5wM2^dVQ&5 zwz>CBks_Q|kJ?t3#tYO_6|@8X4yZBAv=k4=PA{K~g@T|aVJ6Py`e`wS$reFS)_V|e z;IxkwT{E-WmuFf*G%K~rQSLIUvo?}l39g5?`g;N$3O?zA`7GLwrHSr+g?CHvL`ETl zU%gyk34089uGy(IpSsNa!f&b^(Gvb|wNWzjI7%CyXt>GJfqIBkKzMI%YLHlWdyr+q z-%!!QO6qiN#SN8L0&s+xlj-|DH4nG65c_rN(eK{91zk$_jj)3Bl{!A}J7%U=CC1HS zy~-oab?rh1(fm^*2ExYvcVEtK9>*|ohOlLnkJ_fovFJT2eZ$cJm69!p)B(OqgVo;@NxPGK~iaoIP$!ADFe0#rdfBmf&)v{?C`2j)}&B#i1O_tu{$} z7_E4mCBN@_cK)aRK{|Qoh=ziBhSFawM2uHED1v;V8e_B{)2{r0_ns!Vsg0dG1Ol?Q zo;Pq2q@Wc7O;%iZv&y*Y)ow*Accy|8e18G($WDB#<3o!nkA` z)Cg-Sr*620a!c(*?UsCcwf87fe(Xi0hRNh}1Mjm#USl1P?Bbd+&&V<7!xdeJ^63<- z?|SmLP$Sg*mCUyHw@dCZt;L*n1$7Ihi2QZD?>$BAqXKU=-+!5j)Brf}ZHh3gUpOm-);ZnIW!#jx#;Uhj z9!EHDOI3S$J3q$qanT5@K+ymNCQOLb`ufo*nUdy9aaW(y;;e#*{}`8#R|K@S(+H;Q)EWMEBQGr<0%xQEHj1ww>9CW9S_B zvs2&>@ z0X$odcvpB6khcA{?*_`SnqgGIEyPdVWQE|f8zr<%pME629OJz2Rh-K@XtOLV=%GH0 zo1*8b^i`7<0-_{x?F^4nY61E9vC>REsEBK;=P1Wbd6COWTPbSew*97UCY^a9Jd?2y z0o1u8-OfA35_;_XBK1H>k|@(PYfvIH;H_X|s^@-2S7_}2;g;4`!*&4_;<|L--m=L3 z*yuRjqsoO~W9wo9gCijquo8)PXZ$)@nXTS4Bb%l7Xp{`o#%$lUJzWe%_YEa@9Y?es zUuA?RdFUfHRgAOfq$SFJfK;T$>=&obf!LzH0&B&k#3Exja?b`HC@SY}n2m7XT*jmx z@i)5v=`&r>?ISa8dpD$Z|6=LWryRQwHd;R=7mom})4^jjuph<+yh3SLtO_--J3epR zV*8adG8m=LkD&gsg`>Me=N2_<>y)7)JI~-zo=$DDFbMccm8weY%_$=mi9BWenSc5V z?{5ecxfxkFGgPKkphR>rw9bi&dy<0QvG?Xx-_GNu^|Ue;i#R)dYQiWq6u70I!fICu zjopU)sW%+Cy^{Ut?F`D1^+Z%ZHZiMv-?}ypqe{+KCbF`vwhL$-txe; ztlfyHdyNVxdV&TvNV$31dbt_Dowt_w3GuruNWaN_V z4!cD!vOmaPxB}2TN^M{$1!=Vf9^c1476gAn(cCLz=IYDgt)D?DY0J7hWh^iY>3CiT zEja!f$hf?A(;2JRv~x4hWu$p4MPik|K|hQx{cx)QZk$zcVlUNrJ{y(|6(qs-IzYg@ zmjYh3uYF3BGPydzCtkYP$HZmbW0VhYKA5UOz-7b&_0UP0Y?1QFe(%$zY?^VXm}&ov;{n#4`^H2!oz| z(V(;9(Q3yY$Z_3)G}uiX(r!f=ea_H>_b|30(mMN-|GTjpwX$}~r-YhgCL}?n(RkHT zTvKr;hPoNxxch0CD+6KP=rGo=<`#mRjb$8~-)BO7XTjWUEHALrSaEtuWI{q6KZ))d z1x7mZ!fyUA2r(<@KoeUu_^?9Py<28+Qa zOfBpr)0xZW+kb5br*{V3+KL0YRGSB` z)85db3XIp|n@pQcoM4a>ss_fQg{bBABT*kZ=JC-u+lb0Du&0&B+GyL&<`syH_k%LV zn;8quN<)3<8FkdRU&b-5=tbU(Ldjnnp4l2WT2(WMhND8g>=M~42{7P#`qh(au3Fz8 zJn#WUmv*=3MpZ?*EtO0pW&W!9DSPoYQu|hCQ2Fvrx+6j}7nhx(*&`sKg*>RLPUpND zKTh4&^rJi?WUYUwNkBNhG8XgI=d-XHG}fa|22!F8&^MPbo7jJA>)R}pFE!Li$%;$) z|7KN%NUFiAA^YL$BrkB-Dd4a?LY~-Bbcx~MG!WMV35kV|&&_zbW2jvk^SpU)b{WYh ztpI_!-T$IMx>ZMg2m1C`&9B$a%rxFSfvh07xi+(sZ`vbw(iy~x-M*SosX4?Qh@eYT z;X2TyTWQEP)c3kvekP$&+m;9N>n$u^P^@cVFcqkd_ymULu^s-!R1T^4Y&Y<#=KNro zyqzvd@w$RH{qP&ALonpLi@_97AJ?TrS(vkrZinKo!zE1TwQ|dc3PT1@p!U>O?RbmBV+-7z`@!J;}k}t)6tKRzoy^d2rPk>7XJdtu$hXLCpIatUTN% z5xDnsGNwwVOmR{TcDCGT4v-p#L>J5-6|qub$|4#R*+m%w@g1|W>bB{Hzztw5NBm!E zRF_Z|C2W{cT{*$^%8j3S#Sn1S)Pr*pp!d)*N5L-+$6NNdM;*?2$x=_~uOI1=LOi zd`z)mfUZd(c$31okX>$)+n2e85Cv2<$*-axhMPdm6cZEVvQ%tgjpp`B47gS;^8(u2 zB)u}_+m+}{3NOoK@tn8qny0E6)kqCxM9oRPWe689Q+ixAZFW4JaLUuJW-KFqy)-G0 z9cP9)zU~kW_zGR)KS8Z#K$@zhnN6*>Zn^X4IXgHuE&7FN&;$u#)PH{E=aN^i5te2m zd*|Mh*O9Hc-Ca=56+2?Ej&&g#_4bF-IY+d61HNOBLq!%I-Y~(nKL9D%38Rl=kTx3z?xtn_X?7|@|}Vu@t;OA`|cZ67b4V!apu;?juLiTXOVSHG`7X(O+tg= z;=KnNy$ss62mp3Sqn!3W)@N~!jJ=Y+_|Vy^^Hq==*tGV8i8yZg%kc4(s-*~ZiJ%cG zzhza|?(_4rW_jyyW{i1vUqgWCxK-O?(4KZc&MWx$;AY%8hoR3uP3uB`1VzIX+C+Fm zFCfrct&mArxGp>C_CcL; zO}7-&h1KZ>Hn~2sb6S;+E@I8aBWRz>Y;1YV_%Vhb+HE|-@UHr@wcm@#13YPd_sPp8 zTjyj|_pr?ft^ePRO0&Z2#=AejC!>?Wc?(OB+BCpcDm*8^Ji%}0=?!7O`h7XKO`jD! zT`jIO52erKp!)7AqFpAr8$QS2Q9%?qe#OAAEx2%p`Y&5Exy4PCJPX}E2N%erFd%(xVq0P@doywF$2C$rmk)8H`H*{X8v%SyoeJalj4%9|caf2>R9)A1eh2S!_|8piN zWIGFVoLz_~C*4X)r5c#MJ~MN$T>quAJbx!+rbYB72bSFpU7f{Jj|Imn5upiSc!@OX z$WZTo!3p}o-D*dZdCZKDf2*2{t)@e1C!Hv+Tqi4qa}8&4N#0J*U%5#TH1)c*4KGae zI^~;mm70owyWJe*SHV~}<$R>9KScH5JrbK~ZT+6aHpI=j2V1=K>YB-YjOvOAar+RfFuT{BrD7__!)m zaQjR1E^9JGw<3(igqy;62804^n|5XHe4>t--6ID4Dqr6&Y0k2YWiFGbDS~&Bk7k3@ z-uSG_(hG@w=s`nT{^HIxt)93-GHSZ2StsAy8pU5jDGJRojeIgl zc*0uUz_(iu!6W>83DYlP24Vs$N;uf`|Gt86k`NT$IfHJ+Sfu$wMvbm3XDH&0$c$O# zmV6rZq0^NBVmg_)eD!#Ix> z7G2rdvqNJ0w&lDUF4)Wh(HZ$a%CXE0&N8u#WrN*X=JlT3ezWRDZ~=SK#yj2bG?+An zkGad4sjTxDiUYUEI- zADD31KKr+H*gre$52L75YkQ(r_v;Fb%)~SSIu-{+d@m`N2gvMZ`HbmjJ}CWe zAT8-LT=&r}+E)BMFF=PTssJcHxdI3BlYa1QyCca7Y1_?yHj|h)>c03jUT8c>``2sR z;*UO!EK55R+W48uXN3jLo_xy{OW#zqC%?EKSPdV)pF4B?b8kACFwybm!_a=u5aI*F z_^(xURmrX<+h$3Z9-cQTX=e2iYhv7NV{RF9$e^LEz=QRe@m3C;fl%TbZU&aPn~=gR zl`v|LriJzg%I2fzpft=zFpl6i{ojp;Fo_!FtVx}O8Md&P(k1QI*J53#-qLLDXvVMM z^wZxw9b`BwzW0zGnukALfmS(i8d#-q356O7MVN9}71dGPaO%2p&=uLTx*X#VmrD6D z)yB+>p9x6c6&oL}V($xT+*ks5@#h|LO1PA*SS!%8;KpZHW4adJBzpfp7msce8s*rt z`C#9+5W(NeCMVQ16Ygc`PutG%&?sp|6z?`BefWo$yeTVuaW4TGyi(+ue+)Mh6a4bo zajOK-8f&DkX2YSZkYY@Pn2SoG{x+pW*K93oivd5T5cP-E-%5Cm85K9A3`^JHG7&%P zN|H$vi+fb$bC{Qh=r=AyhvEq;ws2PLxoUn~`zEY{_3`3aX~jizY?Ga;&6nH54cY~$ zc)y=+H3NZNOeskV9N!1`NjW9J~brURfZvP#M z9q>O_bimvmoR1KWKa*$!`v1J>5HfnF7X$L*Q2`_|a(Ravl(CXVE-PO7a%*-Dcqr3T(v zokNjIvs?U=ksEal`G!pfOianK2DywZxmO9AS~+7oo+^Fb%jWyfZuvH5O?zHq-eio5 zCvUIga>p#7(o{05D)(AqW*qGKP^Aw{t*W-I60;SlG>nR@3r`&X_Ne7rZgk%(*Kv@x zh+(p<{qVrKpJ22*%5GQkPMzGvUp{h1Cd=_hN-?+nP6;|eje5AY?w&xVc;o5WgD)PB z>CauTrd*KpKC9bIUNM5XBEDW|3m=tS_G-MntHxNU(%deu>poZf+2yd9gfG5onGG08 zXg`FC${hAbmlqkmV+CnPi`gz13$OGgHxB$cdIG^7p2wQ04Nn0o$I*jyO@{6&u>4^e zJ+6#_BwSSbw21QpyrR5xC|1IGwL(u-GX7Mp?KQC7S8W&|gwVT5#tOb;V>HkRqH&$R z463UD$ZLn-SHmx_Q!5s;NZnn{U>1%TyL~0_;Z0(Fk+4K9AVkkpyVgk0zTijr*~Uyl z#*mJ@He%xSI76qqw@ifmh(#qUH?2F1Lylxi7JYxBKg;KW)BF;dxJ7hf<%ktCFoOWx zAD1v{kXt~re;d%97)+5@WtNV-E3q<0CoR=FmJFr5Y6vgmMm)^Z7<=ou&ZLX%zI50wt%Ws! zsCX%fD(t2lv;nfW&#Y7;&u#K#eyM#O+OZNw_bc{l-dG{N+e7B$@6SA#?kc(DeNH@6=$; z$=d%ZmC(y@V`1q}>$DV&CBKA9)UP%jP;Q3trv!Rvq5;^&=S{FFh1&Kf7gii1^KCU1 z=lJQ;%2Od9>`u1=&X0esx4E&!C>Tea7FUmTfRksM`@^x8AT&w$PCqJIviGrroK&^5 z#$KawkQ>ay`%v~=+Dun$#l7f>v+UOV-IN5Q;n3&9RF8RmTP3`k1Yl=s`4qNy`Z5RW ze<@6)pj6Sv9&6DYy)w!}{7O_otg5Fmnu;+oo1B%i7ziu`ERFwOajkD$vEp3RYSFPy zk;DtP*a@%Uns6?)uaj3lvZ~l0nScAq(@Yo96K76h!u31sMkhF{&+2wL$r=kh?dE6pz7Ia+3anw&t>laP1V}VJ?v=BRGyte zWhB1Sn_nUqk$d@IyhMR&xHN%X&5$RuhiseIakdCem4|ku6niu=H7utuWTXp{mY?0;FV3-`ez9X1KsVc45^Cs% zgDJBJ%Huoa*n}i&x&C!sj&xl8w=_!?UdA)C9*&4M6FZ%f%mDn7gMZqp@*1pX@I68q zzEkwNO*58^c(X7VQuEM}*Y6a%L<3qiuN^!4m!?Zqc-)bd72MK$b>ppjjZo6nFt` zg)J%E_bxD@pxWV0`d1Qb%`ufI#iW)w?w1SP2}l+emU4fs1kx_Q%gaQJw>|B+GaIUYq#-}?Yr zfi;)gECzP-ajGhba=5*{T`Yfi$4GbXCj&<*dSCld(=>;1Y0*8Dkiy!lE`411$jYUkMz<9$N3X* z6}@FIpJd`kroyP*9cCW(F_FwOWY#bax^_sOJZNgj@a7%hOwq9h=gc=yN;dh6c9MTg zqxw5rf6A&3=Sv#*(gID`d9B2KEe9d8i!lB~mPjLxpX%l+=v9KO}*H4wk?#YdqXx!`lg#*qxWRGXxFL+EH_y#!2?HzUCYkpINPKAg?ms}&(3GBjC zqbF3U!bY7IP&ql*_f_DgC6O&8_1^NIA!^`szns3J)`I96yNUJ)HzyoAGIJ>sljX(R zE-H1Ppr%vX1EbMTeMR$-X`6<17TL5>!o}M+5e7|;$H7qSExuO5RPK{ z*YT(hmEg-ft(iI@vE5Gl{d~~ugTIS7nmJ$LPx56H|F(FEhBO^ds&4oT4y2`p_W;+j zdQeGoz?hr2PRB=e{pBF;9$$goOh%Q*;nRBW`AD>BD<(R-^(=A5tI&yWD8D7SeDk4QlZWxU&HIQ$U$BT_`d4JwmF=}#i^-f z4F5$uHzkbim!{^re&0$&xn@sYWZE|my$BU|D<*a@%F9@Cue|wjk_@2a#PFs70&4>`f3e=sSXawrN$L)xq+vz7L;dOrNyy z&ccSKl1RsWM*V*x3p&m9Y%vU7jK!qNR*mN~?qLB(E(+N4CG^aVY z>iZuY29cvo+m&mnJ#ziQ4_N{RbqFb&LdS?mPPrvZ7Wcukz7AII0PxaDlv){=Ds8aw zr_ZTs=a9^C)BC?0 zP7@Eb^n#93@gL6z_xKMw#b0A}P_JM@EMcERX*pvbV&}%+o&ur#LiaoE23)`cAcqn zO5fE`V8HS_dsQH|aIg(;5R?7i4b7a1u{grVns8PA?O%T*!{mdt=43EcEhi}S9cq`X zXZWc}VTq(Zz&tj^XbU9c%m0%jmJ~5zIV`U=Rx7vrgl@sz3K(shImpK7L}e+oc`OU% zkHs$r)AJLgkChywvbwrQN=Ji2F4&9pWW5GOKS^U}!(;XMbkF8{SGE0rzppV$NaGE9 zge*z4o=l{QIIV9>KxLm8go;gGfCU8Db)8gesLb6*;26`$Q8+tIb(2^nUmzL=Oe%<(fC1dP;^{Mn&}C?|nb!Cu~?Df3k=o5%LMkz#kkYiXZe# z5r-<~Nwm_X)tZ+ce8a|ArMm<6(;;1jZz!zJ%RgjxjE|esCSz zfL7Mt_bV>+2v&$ z;4LTYIU{3j=61cBXmi<5*#2Att253UMjP-|&@*Mx!IIM@)BrWf%IxL}a*pfpced}E zmYE5nODK{5iejo|TZN`Jejj!gHAe&vP`uZF%x=$LF>Tk%2(6q9;RVRK+G>_w_L+@q zArgR-KwBvA+f)7xD=hvhbz8LenLaP)CAa z*`gEof-21&@a_dKoQjMXQscYlm|_iKAjL+ck6t={u!SMRYkjf5F>PB3_m;=*;Cf~i;$MppU}`fIjss; z+da%W>!UR3lTBzBkyBXX7ss)meE4 zcoV%=r%T;0OaI+~<|^uK@I_lb6O+yo7w)ENM3$ZtO<7mWu@2{AG!*ewyOGdO3ad^Y zj28a(REaD?A&-Rkw|7+%uS&$NWIP`sKlY<-V(b&6c0bFsf+NvaRPCDmsANTh$jSG>@JiWdM@nED*1qvf# zpUBrM0LnV@qjj}6Ec>IC(?!0G;fp>UgGkhMTq(3Xf?;(+Bt|%YoqEL1_>oTHb^0qU zQOm@~8B*mj^L`oQ>35sltUps1^+s;SYuV07Kf=(#Qtx9p3u3lw#H~rniye(%{}WnJfgVehl5W|t#73`x~rc7Y;#(c9++DuTtfV&({Pe@ zGrMLTltUnhY><9CGa5nH|6n11EsEK4GRb}gk?`LQ2PD5cIx`F`@4nXhPL*w@~$;OLq3kGo#@(qf-j5~hHp3D&;6n|u=$50dWy01X({%# zGN5%-&#N2@spxl^!YaQNt=kgU&3!6k-*#aK(_{AhTmc;xYW?ZQaHqBBO1zDd2+1f3 zMGhBr?%AW8TAN}YPIdoQD|IgWv;c9-OArzaZV(^0*{?qeXM;Qfy8Da0mA1fsXX5*!2xd+<8!rsk$;g(cf zt<%b5)LgzCHltp~S%J*U*!B%7M$3j$CAuHf_!Z)vLWqHtw8D1oQ|0!t@_8DZpO!y& z=|HJV1QtY|e^rlbYpQVZwf$YLJ7@25F($}*5asXDaJH)J$|>|Ee`h)?xB8xUHE6`n z_*T>1jM!(vRJRLl1pfT%bJxf5{PmYI(f$6|M)bNoe){}?sW9NhYwkNVs*KL{LE86A zx^#(~uwiW(*j`g=$F2G}vvyuWeugC z6@oJzp5nfw+D!hEKvR(mdE9A$oH>#5Nzh){n3ygCiRfoMVL)q{&=GM04Y>>R{cL zj&mO8?CK`}uNbv-31>;7nWgDzJy@qn=Q|y#OZbtx&jKf}Vd?}oteAYVW#LqYeyyyM zH>^OYZvDWze#UpJ&JsrCvczR~a;@J^gomWg`I!+3riKXFi{DTBs;DxSUeZHPE2n|P zMir;97`Ei@i{vJQAx&E8_!Nvae{6a!i$E(k)qz$K@3b$&zVQ*xJh!5PgU|Qy<`cPt zccs$c-dA$(n`w<7^F=X4e`{48UPv6XZ8{0j`XaPqwc9Ui`4r4Sg$%u>M@PBN?C-nw zhtRTWf06Q4Xwkz|@JF%=w7!-rM4ud+mDRTHu^0sG6m4@~64g5P4pkL&Ni{$_=ekC= z3pzS#vHAsm^9{ZH3P)490JN5YOwuzq?D)AzV&4W5LWqOQUt!9|z>cn@8Z_QnH^d6q@%a8o&?X=1ry83bv?XZX}u-Ik}@Th-5e zbYk+n2<1YiWbHyIE+}(8o#~s^a;kFYt_FXcq2A4YDhWs27Z z`ZzTFE9nIn5BxZE`B*XRSj!_gf`7{n_Kg`bGnx z);<|w*t(EXgPg{yV0pF!u#mAh$-$TT_8iE|Mpa>i;?MV5k7ii5&^Oqh3wY(fhyefk zE$X{hc(SOLj;_gzd0qrpfds(zIIHDs>7|uIA70An_(mSJEq+WN=9RyqLJ3}v!TND6 zb>Ar|^%oxV`UzCjJnL_q66eh^wGn$KqSpMljnJl@&=0wy^Jr^p_-Vl>GqG~4=E-UI zIbkJf9z?B}+{9wIcL4E#{luz%KKf zfu1-mHsTd6E`d?%CiP6Z>#RXqcS)itO9?~KpN9{1HgO)wNcV>gb9uo)-W$UY_WY&c zWtBexnWXYy58z&$&|I8*u2Cft(|=fUs+|;0m0+^KcegvkoL=Yr%Lm%7XDW9YQV&lf z(0ih7ZD;tpSlI22VjhNI*34Ns=lf8LIe$_08 z-edY@OEKd$n;i>43q~Tk{tyPOX%4AdRX6~_V*lL$J%n5`2qji-dq45HmXNf40=Z3m z0(iZP@VyB)$ugi!ae?qv5D*%ga`5|uStaC49?qYpK^KeJ2-Y8CQD`i|cY*O|RAOSM-}~LMNJ$)5Ju5&XIq&t| z!tyI`_VO$*``-TICaPT0<={fL=F_aUFgYWSVhv< zk7p$CYJ#mEm)H*rlG>kCN@o<@z~U%)4s3j(C`RMA{_6@IP=0Ft$DT5Do=4GYx3O-5 zh@`u7c4N+Pc(D?qBzn0RZN;rXRE}dEI>Ac*p`zcgp5KHIA&mZf?r}|re;rhqfnsw8 z2i~X5)~M_BeH5plDnX1+*VBDmbGIR@O)LPw$sJ7@{9`54e_i%Wt;`gL-fPSan7OfV z_}FG4ub1M?oxQV)X$&S3{zeO(C%+8z<#;=~Wd~c}NSyX={*wlPclL`Oi5vWqW}GF= zV_(&C0)L)c+Y(4$mWNz@-zpht#QxS3Y3TbwDL*jKvtiXf`XMqd^T~9W7ZG^kEymIF z`@nSSDuJKsJv>3J0&0gaB}8wt{0ScMQaKaO62!e+#2TePk`b^HF+ zkQpLUK`E5Zc*suL^J})71Z~wd!bRv~nDvrpf=qqe>1|2zXnuF5JOd|(-9DW@@zRbW z{*9K|*zfCzw_H2l(M=Z$2=7X(WqIsYE@oJuDCav*ne(qSe5EfhLo%PA!54;&U-ddGwy|#cAQwg^rHww8`9G5OdnCt zkINtFi~;^H%jKK+XQM`?@h!&{M!BpwA^F)ZDwfn$R4i?c;RQgM@v9v656)M%&ielV zl|X90TQy$-*DAU$qQ_)To&+^zl(?{xD!aN~NQ$987!##Fm-rbt$*xgbq-6f zkvqFpmhkOQ=xQdi)N!#NnY%jpxTF&{jai9=WU|$}XhZ@bR=}Wbytz4&^JvP=>L|l` zmQoeDDY9)17zA4rRI;Rl}aU~?~ z@7RnQRpXfUv)cFP2x8^^6o{->#-bd)9O=XvmHhim7P$H1gQpz72e#?1-_X_8I6Mf<@0>E$FhRLD}+t z!b;r{hGFT)LAy&%dvBCQfg=3-b0R^j{`{47mGFiq;48Ci)+Q+ntlZi*C51qjJsjRtJ1Fiet`^|!E?-CNV_M=4y=oD*xbL3R0IcfM!k&alOp+QA4Rl6gNn-k+Ge2|-Y zd7mXuWxT#BJwc_rm1jOQhv<{XfS%9W`xE!(k9Zi5FQgDEs_DWIRXYgVXpM;xq$j2u z5Ysif#ERoWa=cViVwey`x`plX;<8yhH~&H;a>-#S!0HT z<5aY6L-|RK*Bq)bvm4N{&ci7d9`>;EP8Ha<4s5c#`gl&idI$|l9s zR=(ogQgF!1sVvFtn5pubaNk5PNhz~0f^4Lnnvv~c2;9YH)`c-hyLyUumu2cq^`j_S zX_AuH#V|BnB;-|N!wiS9FCNK`v+J$o_>z9&8nR22ja6Su zu_X%>UktrotB!(ePB`i@w2tIm`0zCHHSZ(cbsD|77NYctu+_QntX znuZ~6#ivK$jEha*2u|-ormyIk;AyM+HFeDnm%%~DKJ-L~M-;asFUbx&)3PnL6B^zto`k;lSO})mskHNcy-}mx4S?Br|xzjO02)EfU zBzjDDG*QUGH#*IpwH3-JxY%COC3|rrT%>zq`au2Bl)vbyBXab~UsbCs9>Zg5jZ{7; zK?sSvT0pHev-=)KO6ty3{>PDg?)eSb%5Q!sFl~?7p}V_wVKcB6snt(F8>@Z_h1q*? z@@NBYe&Y8jNp0Vlf=Pt#)Nw&QJWd}BR|Ul3zT&0I#`xw_=vLhOj3&FsU2-&4QhVo2 z4VHB0F1|{!&C9zhHFx5q%bgg{Qe49r%C6`{rIQ&{#)4Hxn0Vil6j8IX`eJ!zVbMRL z&^y@&Rqb(syRgxa-K8AJVyH$T@qvB^8UnmS&z+zmZC-DPeRn zjI9@4Ma{K4I_@b;hVO)Abt%PYpZ8%V3lB$+0==a|mD@%(T32%oh^FeDak!kG@^#dk znBhj&eaX6XD@7HW*kV5^)*FaAQkaex8(J}1HaQEFLu}MlSd=!#It{K9tz4ycuWhv# zVV&O1v06oiy2Rs}BT2%g1XX(vVeMt1H5z>?`wF%<71B|WcVtnbxW;0`_ss| z(%y|HaU#c}(scB9eBZeD^?NayG>@hy`x#losXDhRrFV=G@ijFC!-%H&a9doik~OvPKf9kZOb z6?q)Fsk3Fxr<3_mCq3IAz@Kjy*Pt4_9T8VVazZN7S}Dk}%UGQj_7qJKF;({$5QCM$Ak!_`U}!~T%wR=x4e zeKrZtK}~J0_|Q)!S*H5)6Uno(e+AgeSY>n-w^6c-;7wiWbm5W1XvESUK1D{7C~L7a zt{Tr*G95t~ed;A$8REsO@Ku1bGUyl^5~j-{e2O72uX2bMnk%NlEI@iZMo1aMRG0md zV}(}l)|5hpYTHU~Dkax{VH~Z>s;|zX9JIRO8fq55MB2@DuV`Z$+G}OZTTYGnEVo&* zGP~h%k_*-QevotaAXUjST$d1MN_+nRV^dUxGjXG%_rTZa#LU|AzQwMa5#O0TP?eJ8 zB^3TPr@z1T=#ZE3Nl(%Vx3s=F5_R3kuSZwKPwsyLLyd*2(ftvX z0cyNvW5N=YR89$I(-VXtW|-Y;u}w&v6@^e#O=CuB$;kFDiKBc!mZv{>^75UeS8n3t4zIm!CV+}{-{l)rA?|eU#l`2 zQ5vm02x~)UJrAPRyoQRa>&8b45gU!vA|ow%;g2Yzcf8bbI$P$QMv{Z|)V3JEyvP(g zdx=)5E2d)=x+Bfbdt<5EZU^wJ%^4` zrbx7NtFGddE0Q{hZ<^r=c8)b{gA24TB33>AkmY<)Nt-U*Zb4hWVhX$A5>@m|ifzb;RI2ic(%?WMlaaz)cRp|0Dprk>Xmxr}QX z)}m=5CoAm>>7j63LWvPVj)J7Nv3t>u5xIz`rAG?P;Li9^#H6vRGsv_|syT|vVzlna z^)_UgE4}>m9J5mwZ1fzZp?|?n3e&-EERrHFyIO)2+F~*Kb%85yqV(BnC3IrcabX+6 zn=RE!Q&)fJNe7cw?ciRH;vva&Yv6Sf(}^KqKeH035_|DMq!kgCKc|R%gSvQ(`eb)3 z3Drv#Q>v-2ZN?~Q{B@Z^(V~PVY39i#>@t>9MMck` zqY;O`J+3fED2;f)wM=SjsEtv_feLCX=j3jxjkoTKG2(ti$;>yt8g-vh>RP zdNO5JMw+@Bl+f8=g`(_HF^Pl4{Sc=r@-FYfLmS#(9ZziirAMiIPn2wYKc+iN?H%yN z=Z;RLMi&8DtNhc1qU2Zi-b?N#}a_Xjj$(Grt@6#fymTgX!8t>uqEmimlY6@w_ zf;yy(xD+{sy3-{vqHw2|psY)Y!5Hkt7K}cw3mt@W?p>=kdv_BK%-O!k^^(fZBh=1m z^d6?vy-%^5IWDsQ04Se1+G_eIiN^{H84FCMsj!k%>t@1*ZM8>&3#S#g@R&(aF3q(N zI7@q38;aoRoh=TX1Tf8&#tJ{A);nNI-gC=x(wX-dmO~DN>n7;8IpFL`b(vQ_raMX- zz3g7AxNoF5rzRR2D4lHhp!q~AqZ-geW!DCqA}aVp^^K^?qgmn4Ti;^3p%Yy^l|zg2 zy=^2h7*^}dPc1O2qA96L>Cm2Dqi2oT9uoXFffTbkN9k7TG(%duS>{EwqA~J_2%)nY zqe*T$2*E4b!XYF%*;`$Zu}x)Yo1vpAYZQfDgx_}DP)$oIu=Qx>R8%7`1u@gV&dfrR ztREaa;LE8G~?iMr6sQ#4r^hR_fdLVF2yR|{9H+5UD;3T^yzjI zNkSy#Sds0Yp`*a`*J4u;{yX|x*Z8b1d@tdDPq8JX{3=hEx1+-6Pejj_q$*cmR;57M zefm4TY-pD6+x?<<7T9m{H_I*G`@usX((2OZJ3?Sn!u&X;$o|J0xDRLs>LeL zvKMRQ++dBVDr#t7`pLw$%8$voxPBXqNp73xTu_XEV;mzRGSB@c6}W1%`lmDA`< zp*0v{_z|YmlubDH6sl417>YJ;VoniOnxb;4dA9vUly}PfIq%JmXQGZOP^iBp<1`kv zcfz97u2&fzwV!UbR|Z+FoL2(}*-98i%Mc*y3Yh}36CZ0s0O zr3$Trlrb4{)Z0pGi0@)*m|v`Dq2P~}{*)2Z!68m3xqoHNYk6JG4t8AZ$fYZm5ZyGIji2bs7IRAj z6rABXmQ4w>A6$eMHtCDN>XPA`2~|aGg*c}4+hP)C{8U;KZ~My;4zA*KC1Ji)60Ki9 zMDFxnOHq1DS41~k@u#J|e!q&cT^n18DuUPB)#>as)z_o5n?T$t9v1J3 zFzPyGR!1v#V~#qeLbX~kQnfP4%zb{BBZwU|xS;CKgf`o(*X&I0yhquPmbKHYvEJ$y zxrHlhrXaXmrOu+5swV}E33tg?n5kI3pVOHjbrY3z8AX*^SLZ>pQz>KgvPh}seGQX+ zy19R$>Uq@6?>iDDbx)ykhgFRqY7z3NibZL#nNx+KO4ig8IuWzYBH~wMa(xP*xRn&{ zt9l3^xSTN}dU%+jdvYzhCmZ*%L*&EkwmHM>oQgN&Qku0-&gC<%7xpG{&bjhaEuQY9 ziq5Qz9c$(B6&||Nl0wg1nHF&TSpgswqTc(>qtkR;fFNMDr6$yu92&>ods3k?Q zCRDF>Fjwc>Xz`Prvau3V*=_+z*XzVo0|`GO5OcTvOO- zRXhxmegvhryZRiM;(m!LJ-S z*}X>4b#rs%YSc8e)%rJOsoB4Qif>F+_hLn}NMU=W+ulWWOl@BgVg^wgKB7j2h+1JQ zaa++qstCST;+RpKrK{HnMHR%^FVIyS*!0M*Dv77%lqzP)+P5ELE93T3jhw#Aq;=uU zycM5!DIs&;Eb38jnabQEgs$CX^BPo7Hb_zroD&e~+4(-*Y-V$1CCRGy4nuw9J&Bjh zbbXU#l#G7IYPg+N-O9rb3gvW*U_i4hKH$C?j5frLD(7{cwl&4Njddxk8Cm-jsFcKN zo99+WLwYR0u|sWz#YM{BC2A0nUvJQ=6>KGsVSE`qplNGy#E+^kZ;A`L_WnM~GVSw$ zTU@-yw57Wi#)KSG+^g7Vp&jEJT-ye~7U1aBBT-xt z3q~kXs;Vfbkt|m{yy_y2DrdWKy4;F(O4UAj6m410?U&fAkw7wLD$_a*;Lf4k?w)yL z2UlqR#H+uy&ZO74Ca0>|=w?sP-on5cuD&Z$GMu}67bT1EXiLf$M%f&BiC$A%SZ3Re zW*WbuLZ3z-A?G&<52Yr$hw2j>tDytrZ?ZJ-ZH+Efn5MqD8rH++?mDaDdpFQhwc*b} z_oQLVS{2^>r`acXFwHfgT)*;*vI8u{)5}qIOnq4{=33kq)XZe0JdkktjIFFrDz`qftdE7LH>$0^R2Ab*(fUV53^mW# zV4-P6lN+ipf1St)c&yS2x&)Qm{=}g&J6isTb+xCA3RMnwGitGt*&hn{8H;gNZ>Q88c}A03hb@b9ns{^W$S<*ABlPjY^M8R+1#B8%0$HtGDCmLhU%?p(PR1 ztZYhG&o}HfN>9#|C!xPFe_^wX9=u5Rt6Yt$x6Q^?9acUyf%>BQ5pzRrBV+6CjdV0u zrrTUZ;x~BZl1dYJs$5*9pjexKa#9MRyyD^@R7-p(LdTNa%TelEIZaARX5L{pvG5Qsa z7|B<@Q1*0p#@QN5DrfdLo+*~wag^LvL64B8?WCZ`F~Xv`vSMi3)f3+0klJqGscS|) zDlVO9$L|Q&Oktv}%c-56bR!zWoR@+=D(~c4r#@XV24vESaUy$HM7h?4#~p=k#K}x} zq#>$wsc65kKM9v4RV2Dc78@vCjul3WM=}{dcX9$`UM0RM_ES>$tN0f4JY-AA(K^+M zifP!Iu=}O-Y+d2}iNB~{VvahtZjRs4&Exd2?Gf}-h^Cxm+QrN_!yX-3KYA)zaz(Su3vfUO-Vw0AH_r}`IF(5CY~(RX zD3=moXz!)asl)KcT|`ceRcZKAQHjsgjZ<5l{{U(+DQ2X!QV={Q6cXWCZ)TwFmiC{G^;t(Ay%fp*uIOGY4k|WwS=p5s^0_( zAGLPkslrH|DefY1t3?YKDTm@xP$`8g^^|68p?2vzn3m2-5Pbd}YC7#-lkj&&wVFPI z_j8}I$*QxOmqOQ@jyLZWC5ji!L#l5HQtfP za=Z#ZqOzfUdlHb+Aeekp?5l?Ry~)ULmj3{BCtDw=2 z*dCMHYY~y%@}9#gbRX!3g>~}M2!^Nwl?sQe8Pw1o!V;KwMeK_6*xz}fQ#yI|e9D51 zD$d-jS=4Iq=?2t!e{dla6*KN$jAj1-V^VXrcF$o|F_~|T2$^25i;(UZ;tcAo_}WEk zt=dMd7wGy}**CuyFnI4R2)y?Db|Z(`At6^d(3~$EhC+EVE~rg3B8k)6)H!JR@X0GB z(mw{8x?-78e@rjG7cW)*W`*tQ+$kGAS`&&}K8^XDkGdKxM>LroyCK|bxOFBLgu5G{I>ofiN7@1Z0*pljJJn+OfRmU?WGyU!(GIKGshy?XpY5HO{=4Uo1JDW&g1kq#`i7`=k{hhhZD-QB(LYjr75dE z+LBV6-nSW4WJ*VkMBC@npOH;29;1nA<54=2kuE=C&YV+)Ol53782q1AXUjCxAJmG17Z}r> zSqV5Uu0>?|iTa>T4@M25M{m7cVbLv1<=Z7L9mB$T;r7qkuLvWtw z(p?xJVy?->3r%dtHY{ezjs*lVSmDA)A||z!AkwruC?#zU7iAnI{JII*G00%}7JU&< z%#CRD*tVmmVgW(5dvhV|j(vF%^wpd}0rt-^a+ij@gaVgujml|nPmznf&(P-;<3HD- zHvDm@s9JCKD&8`M^I6o$n34Su(c9QhDfSY((fIxeH)Q=MT|R%!e@|AWLCxdz=I}KX zV@cf!4m%4gm43u+G=!BFW8Tbtch=p_evkCb&sz8dZ9m>C^`;}im=&hr^wK|2JYE^G%Vnn;k zw?SENHbitYmEQCvrXFg!a4T0;3ga$Osx8F3ilI+p*TfKy0rH8n(Ef%j-2~#)$KkO% zJL0|u6c@t3VlEJB7L3+GIy2x~GGM)$EM1`I0PamBkzL%mj-3?Y%u{YPXR65YFEYMJ zc)v=uA+6IcWGA}fsC1}xeUL9ollvm!9eC&MxI)I~wanf(1`_j1U`G zZSMkhea^zwX~L^qV29-0adIZUJ-HAS(~Y^{{-whovg}&^5ehsz@)s&KlCb1xEG`h; zl~ICWqJ*o<`Vg{Pad{GoTK@n(;#M?{GKVfF#l*POYKzm~orfszI9!E&38bHH zLp2W1K{rQcG^EFER~Zv7S_-uwy}i9&k(K^~N!;4<{>KA$>-Xx>XQC=gpx1UG)_EmS zs{Q&yS04(c)US_|S<4z*Q!)K@T8U>d{a`~X?Q~ar3(a%H>MK0mwB#p;f9zUl(*3-M zO+EFGh9^Av<3V|&zwB5}XznXCW#2}YyB1=b@u4N5R-$ItmY*z2ILlo&6>*&LLcsms zK})sWzoE%hy6E|!t<;wD=0xO~UY2yM5M9dTZiOSMaOM46Qc8K%8QhT$6G7RitC!gN z-{eFWefBJIefzf%N%za*L@2869KmJwOmFZ=<1c}3PkWBt$z9C6B4ae??Wrm6J3!3* zyg@b5tEj`g?{+g3b9s&|L{)jP%vFqWk@mK*`;EkQnCyEGiw#6s(U0Md)>NkHHx(iufXm#m1${<2Sd-OD|q|K!jHfa4Y&0A7X}m#T?Ex z#eJC(QSm|Ol*f3Zz|?VH)o~le?aw0~FK%B&igH@+&OCHN>HW9MLua*Ld>bDx@a}hi zMp)|pg*{({C)o{(F2ADJ*$HU737*KeqB)p|*ZlUY9+lkQ@Pw-(@nt79v<>KQL9f!xj?8V21b0LTQviPf%-|0qn z8S$(nao=a7X2534;O9dx;UT8okF)E+?L&rlWG_y|&ciIZ;)G6bI{VN@OY-=T#aX1j z$=kJTISMncJt{LZr@)HdUH(=j z(lN#a;*Q8lDDB&@yiuHM0x?fziVH8^CE^T~$kUoAl8>5VkoNvX^BWjl7HWOxx^ljIh`_yOQu9U#Xevms>J82`h zua{x@rg&aU$A^g}J&ujZX|2nVHJ)9y7f#;^CbV={C#}X(+rcfri$6&Y0==Y`_L=BO zPH&Ku{(?5aEVaGO2}|B#>ENeq!2IlVx(?3g6b#PyD^BARrT1A_es~Dm@OpPRAdjHp zq2L{E#aw)+Z^EOSZ`YHnIQ>{od6s<@5t|C?tRXtpr?sjt&CNFKBHVU-RBWm6<59`j z*{&p3gQbwQT5!IF>|+)1c4rq5jQM_xau{DiyoM0HN$3+7gODRw$7Y zsqQT7T5a@9Xv0Yx6se?i7T}+;UWS}PH10A{aNQJKnqrgK?M*dhHL>mXQ`?TE6}ao6 zLvADNqPLD)NPvuQ=rVw z{{Z(DTm7zjv6?^F2n~#)E0J{sHLiYjpr(U$)K1Pa zwz!j2_u{1;HQzsCO;g|5YG9r3Zsq|^`1lt}dyaHpMO+Rwqkm#0Ttc5ak403B;SAlX zi}@P3=@%J_zrDw9b%^ooI~8~Sha#^Wav6*MT%o=`y@z72h$M^gUWE*lpS*uUI&|${ zhAV})(q8A=+)~bdAX19qcSfr|ene}(E*7HozZ}a|<@nA1ziPv|JuuBas|H1F2r8`b zCuX^gDKdt+`dqoMRGV;xM3$fFq^;GzgGbL_MvrHyfvz=1RaK*`35s^OmaHYKeR&`^ z9CNuEc@`N079=RC@JLaAe9Epol1QtLTsDPM`Thmy>@s>Ft&_(~6lQ#3-U&#_ufnM>OuIW2WBfT6#S@edLZrDL48Yp<%DtdMOu?=FL0|$>1*dlvP;$?}CCJSDFZMUM3Ld75#7E zax=vB9M_HX9F97z4lVK41@89|_>OE^rKC?mXx_g9LU-;fE=W|NLUD3OI9`xd-`mw; zPQU3km08YQZRoK1*VT!_@98OBq2a5EsnmPc7)JW~8_WNh1g(ADLwpiKL%NJOP0T{rk9vh27-mV41;T;iUlGD5zMJB|xPdqC#li6*9%_WLayB%6$u;=EzO1*g znR&u%*RKo7op* zGlkDaOQ|;S=c6b`bW*xf0 zY#~I~u`+cPp-@pq7fB15*V53rRA?%lyZ8~MSDM7oiT76C1j}y=P>PG|D)iijid!*% zBC!jF+03AiKRk$tZv9|`hK_rYkoDd0#cCTdsYo}tg|o#+(!Ma`TAZwF@-&xGG3t{~ zGP|-E>J{QeF+wU*#x{~Niv(4;T(=-7xSa(oadGZ(@9@Vzem5O4x?Jbw5^>I)hd#c; zTb>u_l%_d-h?4gdMJy#KXq=)&y7W{-cGp4-uYX}9r2ha6kEh@G+e+hHRFuq;bM#1i zKSwA_xSyXJ338h9Nk!|2(3+yp#F9{)Xh@tYsq9w4)3s4(Y=p^1l16GH z=!(s7OR1-yz}@53z9>F(Pj{(yL~oJh-CF(7#ofQ?;k()LBHWyb31tQAu=^yFWYX*G zm#I6VUnY%k>P%NVehGJ!`>Lfq3yA2eMzmt+Ny%Eh1nq_4%@njekvC1e&^4;rfz5-! zz%v0`IqK~NfX+Wc)GSut&_g#Dk(!l8$X2Cz>Wjjd(6bob7AF>};{-k(*7qXfo+WMc zC8Z4$?6VNKE<%y`JdVVE8m$NjYWPy>NLcSI@yLqzU)c7lVbSOtLA9$d^qo{X*NGoV zUG9RmsTg`>sk={%4piNlcWrIOM9>qxR-b|fPBF^7#fa0g@5>oc3 zJr3D31;RXeBJUB;=x)CbW$026hk8(o)0DQ~m3r{6P+R?@d$%(F= zNq?tpOe=O4x`Id~J(odyX?Kb#$9W}IwX)P&r)qrWg%_6$TLeVwzepNEWrwi#4v9+i ziRfKP8@ziHRx_GE37PJRnM>&0y!W4CohKe}Ijdg(0J6w<{EcaPQ6Ig__iQO{RmsrQ zPRV!NPM7s+($Jao>a*0i9ll*j=5s{?9&M`CM6q1d;g@032hJC_O~i2SzRM?=f>7MW z3^UTcZkcXwjJ8+Z@q*i5b-Rq!d5p3zBxUp?cciXVN!zY_6;*wn*FGY>ik}m^QoVe5 zdzq~??t-OEUxkJ9Tw#3}af~mKHpdFyNa|C`YZw-#jd8@0@!(RwqAD8hQ$lq2=>%k9 zuaXX{CB^DORsR52ASJn`x(r2lp!TnxWv)1}Tyd%+A!z)usFlPHr5|oM@Pv@FlNO)r z-UN=8s$V3uQ`M*D7}r-1gd;DVhTnv~#CFE|u_Ik~A-9$$c78twOg#ExeLlT2KAw<) zg?IY?DGEFP00u@@%nb=1AM9PHw&&dj_ym%A4Hq5)|Q9ApMS8^P46&2T4=a`g=UyX*Cjys8;CzT&V zxw~cWmmc1XZXaHjfo1Zq*P}$?zgvb~3sc{ZVcf7Y2rQ4q*lHCi9^j`y)He&96Yvg5CJ~>G@5J@q@&vZ#OIrsS(POdzS z>Uut0A5CXZ@x(w(8AA}nW?Pk`Ldk>piw{tFBGy*1`DPG0PH zCezP{Vf#HCY*rf4NuK3R14nBv-!l>3xtovrg;v{(VM-hy9um! z=k`!K_t@36*Pfh&DU?QSO@9eOI`T7i5*N8^ucOo7@Rz9axq4t-SohdiT=+y5zqg{Y zb|d9W$5gBXE%v@I&w>Uj^WfqR{3m(H#OPds=o)pIg zu(B5)yJJn0W*9e(@o}6JcW1c8(T$k-=;!2S>*PsNy}XeJ*nwJ=EU2XfG%L-p;b=xx zV@T<~2-RmYo|}oNmbX}3#gvIHR~Qm$M-_dG;_k3JUQ_!XD66~8hZ_vGNFJHL5=peL zBh-^>t-e`kl@4tV<_Z+V@CQfxA7Oc7K~_kRhZS4o+XjVa?q zVe0;cNZZjc+?|z$HxcNYRvSH*o{2=YuN?-`Ty`6mK8nkd^lq)WydYHU_Ph(u}%OZXLq-a9(e#UXC zp5J4WeR?D=v(JB|Rzug6T@R~S`!!YV*lj~}-{f=O!e)g-qlZk5u*^r0t~@%T_6zJ2N_Nvh>HBb8KVh0BO-R;@If&|ca!snuL; zg%c^x6joyhM*GQb=t?Lw?1&`t)WkA=#gD^uhx9n2hTcdML{54tGOs+|2J2gjyZwsk zr-0R+_&XL7IXnv#x^ATq#>wO_cQ?wWqCXo6AzE;^*iz}Y!s4QL%fl>sl+OwbqsiPe ziz%KR$E=j;KFMzA;D42r*y%?g-bV_xZp!NSzs{vR zY1KXU*nUjKNqQ+5pTfLUN7lkU7}M`!A{sc0sp5nLP@=CGDLfCaf(lNt9Ca8ab*R6A zrA)@V4W`+QGD`}XWQKGo>?w32B8zT9^cEwGY9zWxEf~HMy_(|!@|C66^^$_l?!y>S zPOZ%Qj#Rdo)T@)PK2SSTV;?msCQ)?wLUk)lSVJx;ev}$EN-fFXi;ZYpITY13=gfnd zhtAvbEXwaZWJu?Zg@MOXb~(-e01)RfxeR;q5hofde2-Yy9sJh)a~ua3iTn;y%r(9rhJqSKQrH^oIaS`tz8d}K|lF>CII<+tkc`4;v2 z7L%aFy!8ASo2(=>cYYtxxkpNIVqvWu40FCcl!;n~{y$jirdJdlR=M^Yxteg@sAnS_ zV9c%%iA5dJEYo!3v2-~0{W&9DM1(b0uW>V!)3Vm2u%~67@F9ImA)BoeWY@6_3b6f$ z>J?UXX~Jh)#)K;x&1^T|}coVw(oHAOB+i$7KM^sNvm?R>u&G0v*4|X?ETXtC8e8x9t znA!@X+MQ@WcGfS*TNYL=RA9m{#E~+n);P$P%yPtRDo~i+O}7_Pg`uyp3VDCB1)AEr z@*P3E#R5gSs$m?j@gkuj zBPdeU9ur(5ttraKvb&F(Yx@l1Y%2D!-KD2@uOW*x+(`MIT)4ppM;Gg=CQre6z>!gQ zSbGT+w2XUekxeXd)Iy1SqMnF zzhr$U&v9tDpwimK%bF90nAKb967RC2`z3J)wdk2->an4{h&p@vLClvkBC_OK>+H-I z98|rx)QP8Ir6T7RsquUbrFK!RRvD|@PHpJiDH}hpNXJ?h_4sBhCD_x);~lR4QYM@? z@AD&GGsh-GZ4Fyk;-Y2BH1b8u#Xq(waSw`DVF~8`wy@pGbmNeUsBa=Wr`J(L3cQIT zHJV#dyM~b@_+>R?FuUz<^e2ZWR-YFhsO|7nn6TYuQ?goUBFL7bvcm^jD1gLDHh-w1 z4O-*Hg+db4IZ0@XzN>wNvS_C_!;NYyO8A*xw3wijnW0&ps8xqe>R+8lXq5Yrz<&XpwPECtU}PKQm^Hv>M-?8*jab%3I7; zw~^B$OW$I0+ZdiGGqsLEM<*LDk}hVL$1YGNQw@Y_Qj2bX0(eRbLsLJvA62f5ey-*2 zJWU=VX2fzxwgl-)kyz|gjV7kl>*Pyqc|L{(E*syrFh;jLd{32Qs!gzUvr?mif$lVclr_+xZEiln!i?thpJk9neQJA zO{XZuhg3U0Oj>n#FLd@aT&$x`*+xY8+)tYOjT=`Ujqy)MQ5R+FkkxJD;8H%lzXqvz zxWc`A?Q)piKC<)_IEtakx6#;Uy$R`QaZyAzw_>K@Ss(*js}2)1<|d)-s~S++uKsH} zjRkg*=OY?r)zjKJjtUBO+;o(t)sE6+W?qC!yoV|5#XK^#PaQQYK~|sG?0!?jF4hyi z(mFIAGtyGkSR9H(**s~;YA8#?kz6mEsAQ6oSA0_Jbg5Za%Jm`Xs#nUpisU9Hil^4M z7o^VDrse!qkd2a&Vm1)FQ#e^#iW%zRIdvG4-PF$tl_~<0)!2C$CE12_m&@pXDox!# z(aWC0!6SNe!8=!ee?xcHt1}Md!t16EA|jg-E2jtgoT0C(E*L z+M`$|m%WBCa(g`V8cFnJo`bfjjD}^S+dC8WsEgxGgl?=Qhsq*@Mb(R;N$rhADUC-Y zly9rRtt~NrHQ08IeSY(SqfN`SwCr4*&O?;jXAX5AK+@K|$-8S9_CxQ{j{1t|vHhJg z#~KPGmnFsp3Aj@m7m+o4fCzXeGxB`%B7O5t(jY~3Xx+nKZE1(KE1^n^UiGLnQbevQCrFiWOsYeqRye#m2` zQ!@VmL~5@SEmIdNP45H)Y)5UiID__Jxs?A%%VHL7^vNc-{vpEnBJd zF;H$#mL{npyQ_5`Dsf7;*ySA#$IntO<*)kGUm+^A{oF@a!-88IFBThMQpv5IVQ<~B z6wOvj*4&;|O}VzB9;L9=$bS~je$XMC8qNFC8qX|GC6YD9w+HM;19b8ofF04wcWwZ=bA{~~T_9-&( zYC{rsbR2F!C1R9a{>Vc5FT;U~I?ld19-;HU?8y_mdC4X=Q+D(4Ido?Bbot3pJksg? zBO+G7wY6+?&_&AdMNYWHYxXCSRE?HB#L7tvY<-I?M(Y{yAZsJ~X9Je0)h-;0=qB~P zoy5!LH6K0|V_VF|2xp^?R_H(lIb!_LZOv7hHHG&lTg~V=CoM5r*yiKgXGQKQoa)V5 zt$xi)t#UV-<040x<|kHjk5saT3*is<6U_uf_Y1S7qCe24$OcCij)}>y_Tc5ooZG} zZgWqX3)D?p>}4Rt%56U4fy||Y9b2xlmg$Uk4sgDv!NFd0L@SG|N^xkCh0Ex62@|x=vYJsT92&Q)^K|y4+KvaavU0a&>nq z=gO^e(xWstm9>9c6}wYvEaXo%+|_*rKUQ$oG&!KR(GaV|wf$gztT(ysO7=r};>c|* z9rnR1ebnbXiV#~5twn5|u)9@Wgo3&>Ld6<85Rs&+bV#RK3Q>5Uj;M@Rs;BP+a$}t7 zann=G<@R15E|oj=8A-FdCv>5N(&AL6n`qEvH+rwt2)bmvHuN3ta$4$!&sA4WG9ezdF0e3CqAsm&qOz2x zBLk!hWE{<2y+uG|xUlun<5{oRwGA$Xip%q{8Wt&^i4(Qw97-9u=AXR#2?;m1HI_w3 z(TPj0X7?O)81)jf#Xm=)jC+Z4pF<+!W+g2PBtLRypBMZR7mkQ&T&{N4l1tHGxYnGn zuS~iRFO>$r7FF^zP7kZ58Hw~PPnlfsq_LvA`;l8srjPVau=wc)^gj$**JFF!Qd;}< z7SE^AK}nI1WHDA@aw60>Y~Uw9Gx1=ae?V0B^vag<>;ZtGBaSCh-Ik=M3-j15aCtkc>ao! zF|Gy7XCy>t(<8Oe!+y1q7`KNpVkyyGdS_7@Gc9BGE>h`LO*&+E?su2CiNvS7#fI&t z&dK};CfN2-(5)e0p2Z#$px{m;3AL&!l30x~tuj-Kf{LYSz{zB}9k&po+CuNR_k!!x zdX*EMXDDojONOP>I+E)B&Ha;REi&0!CYH4tP2I7@PK@J-J7S|4TZIcHjC93C^w&&y zz>;Z)G0T}gLLsMtPaz9c;Bth<>-rU{sWuN8?N`}mY`tDa!<@#WR$^sT#I43qZZ%Mr z7M?09wnExa!jhtLrYh3B9A*4+xRDL($HCk}MOlG6a-8>pK>Lc8lT+J> z6|#I@p2P`pWj{mXsx4N2E9H&1aiOi~TI=q~ij65dF}PASI(xdGYx9x4E8+bZA5Wo; zR|$=Ni{#6UqK8-0iXuf?@1CL-dOj#_bbkir$B}G~Px>iEAGonSe5oLD6X+h-aW6PR z9Uq_T>_m%<_Zv2-wwUo-6QQlb_afOSuM`pu)4=Ldq0c0=)`EIshgRmE!o@CPvi?Z) z$hA}MDodGkg?Z9l#xCJamKA#p)m6FBqLr)X^2XszCoOR!6iZhboM(=uOG+r;u1aSQuA(T9pYGHq#!+29 z$IVF?SE!*`5us*6TdSztP|^{n_Yfl0*S}aDt2%ziPAh2k*m&#C?qYshCwIjKDP?tb z<~o$OelS7g<*Xex#=oSSWt8(It4;*7TssTtD`9(x`7X;H@+Fc=h*)i;D%vU4S_esa zD?xm%1S%~~2v#R57oF@XGoq}rl+z{hBy}@dvCF;7SYnm*CRTq5c@#v`iLkR|ExSnT z3WciEz>x~QpEkXRb53V?6ROLaH5;oJTaHx9i>!-jB$7)(V@*mfEn;zo9xA>*nPZR3 z`;3u$^3?vXp`zc~f>k}-{!ub*@hYTgH;y>uBG`5zy&CdX)nA3|#+5H`k`t^6uHJ>7 zIsKNX$GnNzu4Cf85Z3A6=xw{UHDTf(NvMRO;8oR7dNsU{E;RQZQ|lcQ`DIi%uXfMh zhw;cvXqx&4RQC@whLz{Coo8+MW+qyi zzRbw6DQ8#uK8j`0CtV(+SM--f&LCu|2Zu-!lcub`q^Kk<8H5JI3SzCXLb@ zkBP+a_>rl&imA<@_0>|cee6l(HuqehUaBeVcN8k63CpW>u$fe>t6#W?oPxT%TK6s= znLG1na=i~L4;E%@lINC^N>DFg$|&N75L7px)>y(Uqj!P;R8BV>VH2%OScj|Q9LUOP zHIbq^-Oo`nnU`RJ!YJV+_Dn<=96EkUWmP$2sVfh>Ri3vRxqQ60QLSn^Rq`DvZv4o4 zKBZ8bwgz#&F~vp^Y+$K0;6+bP>5;&u%foc9=;{e-X#PbdN)vSJLX8b2G{PeiYKp!(6I$*3nT+ID z8RJI;330+=QE{d8X73s?D_7+-j6P25$#b~#t){mkCr2L4juoGW{ff<tjR~@R zQT-uz@qv-1F_U@fui#!Kza)Cb7^0#%7r5xQ9RC1D=fAk#C3_8|q*HMaH50ECAX~m9 zdOeq$`yv-tuB4A%J>Z7*Uc}1(0I13I?vUNmm$$ID;_gV{;R3j{Ak&xj>gj&bfS z?bf4ZcN}$OE*qZf;IUkDHn^Hz}=Uk80r8_03=(NsM z{)T!9om8QHBAZsM-s9db$>gsw@UT}*$8nvh6LrUXRTEO;qX$YPqh$w#f$NTxf*_)7 zwv{_w4xwTue_IJ=V5Waa!vj?Ku->gOo}#ro7qP{LN{KfR+(`S9IHT3s%#6!z&&MpdZa zVRKYBhs6hu8k>9WI<1d!KX$tLu$t#p@!YSz^M50h+xO^2%XR!FiR1bwifBrqxzTXO zRdL63Jgr#3`kHW7I&dtdjA_uI*SCVqTST1r7c?l6?aY)wZmF*1IMUg+_$QQ7lrA#i ziPkk+e#QwhtULJ<`{T18ZD?ISGC6n+r@CNTH(f0;1fZ%CtsdnPW0D>=Zx-5w7>G{} zJ<9c}r2+XjCuZ_7nrSP`zT?L;RaN`Q&q8S@ZeB)3C_==4QBea>X;IHLq++@cbpHTp z%4UKUPxaR7s6vFe&pJswano_hH*Oj(sW?lqdbX#0_Y~vV*T%w9Nj}i_lQZWWt|=iu zJR!d)iri%<59*@SvtgQ?(sJqSDGk!oj*vykk4{d74L#01c3TnAo7bPgsJPX95GvP1 zP0d$g1zM~@ne;^m)xNZntIqls1n{BLiXYMNG^Y5tf!CtwSII5$%w|jY)Jnr-ZhKck zMSk}D9CY*cBx_z=N*kwsi7Iy_r1uc#tiPQEZhZcGRE@)Yb|#wQpG3hsI`^0%;B1ZJ zXN(R|-m09-m8gC<7;C*9l~gb12uC*BZrc1YABi_*WUfM74c%eD>q!b9Ad+HISD%r^ zr0{xYNf_yJnv04Io~y(w4doMWhqmHrWm#o!=yPXP{Zv*s(P8&`4+NO)9a{Gsfhnk& z`W~fh`VQ%%!dOu#8tuOWDq*RX?&Z*GD``xo+Op!ws>-nYjJTqASr#j;7cXm!9jYj5 zjFCZ!iap0TXq$DBUQx`)kxH~eyJCtvAKtJf8KWEbDwc9H+^Yveo`a>SnrYujyL%k3J)ONKF9UDehsGaOdS!j z;-!sN#~%W!G>jDD*gr zOT$;qMfWOYmg+xQH*$LTxUFguZdItIRamD4C1kjo62T_9MXrXji=h|41o5h= z#d1WGe_i?uje{Ubwx&Fn&3NIAl`KNz$tA4(3`sq!p+(ks!8^Qn;S);q)Rm}n&U4Iq zHH7@J^LpjzR8w{A={*ERUA={03dILGUx@3y$=c(G0!U4|`6?>)``ryQ;>>o%rg-Ej z8kwGClbFvEP$u}C+^?-Y+LD9#FcRCaW>H>y%Fk-`%k|xiwoGh_Z&^q}911o(9#b zPeCS$IC9F|*tIQTIiB9^Q$Q9D>HG{xBZn1C(0K%=O&RwcDwsC=2}U!+R(QnFajBnI zh9_birM||BHkJ4?Ao-(T$o5zpSBV^t%@CKx2q(sJ83;pp5Nc}GSZ0Qn@2|LobehPw zNu^)jqUCnaerP2bn7Vz8HJV;lXfI@*c|Ld%MXb9w! zF^+>-HFkUI39!8;?{WdmBr+KyVr!3qj>PxB_d@$grLPQoQd0H5Yzb{zi(NZ)#RXzb zuVW`C?;}*T@QCKTeF{$VsD!EA@lrOkQQ^x%rybcQcIfQ8p(Itq7kr*f>B2Q!c>aox&)A|{`xmu76cRhy-30MsWQJ3`Q<&+vn6F_;5}a{z4lKV( z)Hm*A>m1?<^?Y?AZOuNQl{8xO?+)W$6zlIA2}wTveuO>l&+HCuO()(-D@CB9TV~eI zudT(pvuc^Z=7BShs@A#)tfeICvN#h6^wVb~OQj8JPArHJ&DvF)77{YcD>Z_C zhO46a9-!J+O!Xx(Hk$I>X2Kj%XQqM^FK4ow6S@{AzQ<5Ol$5ilkqL>Ca{FGk8ND$x z%f6!GnUtFI8Zr~24Dyvyo*tDQB}Ea<7$!6x8nKY>tfjcs+wXBYdcv)GJc~)Orc)z= zfb`9Vgz|WwjRn`Q?z4>tjGB@oRm9dGp2fJwG%QnxTE6k5A?=HGmG18ZJ=^eN)LXUh zwZ!RZtylGt`mZYyu}!_Gtz2ZhnKrfRio{D;b&=57H#Q^ZM*QtY zJyK~cl<6)SAmu?}Q?Q2+l3%M~rNs%mFuV)3Njx#iFkK6*B|TLVCnX_6d2XYnq&Dtn z@NnXjk;cP`N)^kILdKHY+>NP1yremrUR*;YR?fSZ5cqYsZ=q<;oN^PCr9q6BV3Q{1 zo<|1SP`NeU1-Ex^Jto5SMBeO5#5kLTL^6m6WTT>rRGI>k4$mVJyO-g(S zL{Oz%N2{w@xjuJ~qA43B{{W;+{;cTQAY8BRK%IWSNt`dga%#_ChC`WrSy-&$aU$hm zcQxE^p~a^zs7snMtvYOqE<5qLUAcvWSDq3{?)o6>$FWGCJV|@6yD6GD+x3i@OmPI9 z^kSSh%S8}EHKKZy_VX7ZB&$z7JdN&gH_;(2&(ZTOy}t-rXU7b1G`C(_6qzk}RwE7P z@8Cd9e0wfq-AP`HFSXI{xBHCGH982ahG~i*ZuhO6*Zpr);)MwqW z@snqVag(M^P6#0+PP+Syv@u+M3X-^`+_fDexfg6cjX&11D^jj^Ut&&#t(VbhQ%OxZ zA40Edicw^7hEx!@r_y4i+9*|1_RG>Ebp#xtXrIAKrfU%rZ1WZJw9u;z&RUgoW$Nt4 zqm!E4t(=w~&r1x(&RyJv$63p@J_hO$7f-FL0(~wc3mXd23L?D*meoe-MQ~DbCrz<& zaw&^B_Zg&_#52#th*w>5dT542$)+Bvg7-Da66`tQ3hQs7Vgxw$5VW3&@aBWJyIvW5 zCRT7%$5+Q8qa%uZd<+JorqU`^C|gfKq%#==ccAYmnoj&GP?e^aDv#VvZcVsCda}If z$d8&(qWoC68%@t$g-_hKwZ$$2wHo^oGhUmDNWvS^G=I7cD&iIO#>1c&HT9&)?A;uf_WkLVWR2sGH(QDSq_qJ#XH7lp1*3*jmy1 z{34sj*$l&_cw3fpo;D<$fAH7OGsjE0=~kA=8O8bw5u zoXVK?%#P+%uB=28T{yu;99Hqvg~NVC%%eH2n8{~H##pAA_~DGzn`>vZU~?g9-^oOD zNxI1$L-zA=h3J0UZZnA~OwMVN!FH=S;Rq->TwRQ2l<_=VNc1+Cc<>>p3nj0aAvY6R za@>tJk z+(*H$VG;>8P}_`14E0u@p)!SKfvajlbNd^hX-uofJO~#3a@b`?9uvBI36$5}Ff3O+O(DMssFV$yh0CozpjRD6LQX6xQ9Z6Zq{x?P?4XA}WLlb;S*+hm z^fp%zWG1VS$uIdY;7VOKC5+}a?Sh+$R`?c(Z2tggRKH)5$!2js*<9^@+*PO1yb=5ZKe+3K`dqWKiFXihD~Bw09WyYQ6Uqwv{bywk4BE;f$2xqOM&z(AHplNm2(D{xxM6>T!Ep)X0U55+QHuKnG zOC6I-*lLZz78XjxC~e;5ZPF_KbGVdhW4d|{bY;z^PfB67YmR;9W{Gk--&D6T@Fij;>L5dzqnm+Rvb<#xr*`@BGH#c7puo6!Vln7yJ=b%4$mtQ$l8=Zx%#DR@Fp0$vL=` zHdg&a?KIQ@jyLjtG_9u{8?VEim?%hJ}km zM=!SG#N5g9#k@f$OT22vhMN~>GKP9=A?t#2j!H+v6k%odBDF-}(kD%a#ValNk)TYL zSbj*0@jU`nb&JTkd0ODQ8BalDrFX$1I46GC3-8!jVqEEu zVTq+j45FRQFSf8NWFb?L@{&aj_af(YIh$`;AM(!!XB`KuYbQ2Y_ahP-%tpd?A~CX! z$Mlh-Uk(N`C*?OPX1%5G#`{&}7q!P}CqJxuwA{u8=oR`3DvB56RKwV1#;e~^T+d$v z?IxQmuR)icwM;vV$;u-w%>IkfmgQG*1q9O9JsB)jZXxRIF{HZ9NK_OpV*_0Njvi!f zrOQ?0VQVD`I-yQhO=lKXy~%K=3$1o9>}uaEn=<5GF{Zg^#S zaMd03kuBcutQRIYy-KGpFi|P2@x+Kk>BfT2#Z5tR%?m`$yj8ElB3O3CBxOd_Wh*?# z0$Yg1iE*q<-61WUFAC$3n~AuM>@$TaOp9*e(yktsCYsZyF9SnPA?1+?$E;^)B9fgg zKhW?=Ogmt4B;ebf7>N$4U$~seRx*_C_4ccrmT85N2aSR|zu5dkMBeG8P zCQ)v#S7&585>qv$ewgLbC3sZ8jqYOUw&Z=1YMZL9H62?9qB^yERlvpCzMU%&I;8kD zMA;O3;mU^tG$?CMnu*b5t$5s&8wG=zUubnC=`io3*$!k%j_rkYjTc`;F^Y!Ng+_Wz zdaj}w$ZA%Ra?~pMV?lCPDJt#vsGw-7=qt>zKg6rsx=UZ=s^_FjWL@DN(v&}QNWdIIsU;QO6p3;gzzH= z5Zg)>6PxLMaK?0}Chgy;Izld+=SvQ>=gSXGgyK;q+U(_zwAv~|MYg1Uf?=g?WeSk4 zOn6D_n<>;!)_qvkS9QIZfK!depsZuuM}-Mb3Zhy~CX_D(t}@3O3XZKdAuAJFb*WS$ z)Ujf3lG=pCdVp(|RC^6AaRXNY*yOg{c4f

tS)XRORWB8Mt2rUnXP5R@#$;Zf?EB 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%0A+}OQql|61ruuq<&g(RD(Wf3__M0>0$sb? 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 yW3F_Nfxrt*_VE 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) \n' + + ' break; \n' + + + ' float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; \n' + + ' vec4 stepPosInCamera = czm_inverseProjection * vec4(ScreenToView(newCoords), stepDepthInfo, 1.0); \n' + + ' stepPosInCamera = stepPosInCamera / stepPosInCamera.w; \n' + + ' vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; \n' + + ' float len = length(diffVec); \n' + + + ' if(len <= u_lenCap) \n' + + ' { \n' + + ' float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 ); \n' + + ' float weight = len / u_lenCap; \n' + + ' weight = 1.0 - weight*weight; \n' + + + ' if(dotVal < u_bias) \n' + + ' dotVal = 0.0; \n' + + + ' localAO = max(localAO, dotVal * weight); \n' + + ' localStepSize += u_stepSize; \n' + + ' } \n' + + ' else \n' + + ' break; \n' + + ' } \n' + + ' AO += localAO; \n' + + '} \n' + + + ' AO /= float(4); \n' + + ' AO = 1.0 - clamp(AO, 0.0, 1.0); \n' + + ' AO = pow(AO, u_intensity); \n' + + ' gl_FragColor = vec4(vec3(AO), 1.0); \n' + '} \n'; + var aoBlurXShader = 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + 'varying vec2 v_textureCoordinates; \n' + 'void main(void) \n' + '{ \n' + - ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' gl_FragColor = vec4(color * 0.5, 1.0); \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' gl_FragColor = result; \n' + '} \n'; + var aoBlurYShader = 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + 'varying vec2 v_textureCoordinates; \n' + 'void main(void) \n' + '{ \n' + - ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' gl_FragColor = vec4(color * 0.9, 1.0); \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*4.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*3.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*2.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*2.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*3.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + + ' gl_FragColor = result; \n' + '} \n'; var aoGenerateStage = new PostProcessStage({ - fragmentShader : aoGenerateShader + fragmentShader : aoGenerateShader, + uniformValues: aoGenerateUniformValues }); var aoBlurXStage = new PostProcessStage({ - fragmentShader : aoBlurXShader + fragmentShader : aoBlurXShader, + uniformValues: aoBlurUniformValues }); var aoBlurYStage = new PostProcessStage({ - fragmentShader : aoBlurYShader + fragmentShader : aoBlurYShader, + uniformValues: aoBlurUniformValues }); var aoPostProcess = new PostProcess({ @@ -207,4 +360,4 @@ define([ }; return PostProcessAmbientOcclusionStage; -}); +}); \ No newline at end of file diff --git a/Source/Scene/PostProcessDepthOfFieldStage.js b/Source/Scene/PostProcessDepthOfFieldStage.js new file mode 100644 index 000000000000..03e6e02a8e32 --- /dev/null +++ b/Source/Scene/PostProcessDepthOfFieldStage.js @@ -0,0 +1,267 @@ +define([ + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Core/buildModuleUrl', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + defineProperties, + destroyObject, + PixelFormat, + buildModuleUrl, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for depth of field. Implements {@link PostProcessStage}. + * + * @alias PostProcessDepthOfFieldStage + * @constructor + * + * @private + */ + function PostProcessDepthOfFieldStage() { + + this._dofTexture = undefined; + this._dofFramebuffer = undefined; + this._dofPostProcess = undefined; + + this._dofBlurUniformValues = { + kernelSize : 1.0 + }; + + this._uniformValues = { + dofTexture : undefined, + focalDistance : 5.0 + }; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_dofTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_focalDistance; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'vec2 ScreenToView(vec2 uv) \n' + + '{ \n' + + ' return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; \n' + + '} \n' + + + 'float ComputeDepthBlur(float depth) \n' + + '{ \n' + + ' float f; \n' + + ' if (depth < u_focalDistance) \n' + + ' { \n' + + ' f = (u_focalDistance - depth) / (u_focalDistance - czm_currentFrustum.x); \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' f = (depth - u_focalDistance) / (czm_currentFrustum.y - u_focalDistance); \n' + + ' } \n' + + + //' f *= f; \n' + + ' return clamp(f, 0.0, 1.0); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + + ' posInCamera = posInCamera / posInCamera.w; \n' + + ' float d = ComputeDepthBlur(-posInCamera.z); \n' + + ' d = pow(d, 0.5); \n' + + ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_dofTexture, v_textureCoordinates),d);\n' + + '} \n'; + + + + /** + * @inheritdoc PostProcessStage#show + */ + this.show = false; + } + + defineProperties(PostProcessDepthOfFieldStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + dofBlurUniformValues : { + get : function() { + return this._dofBlurUniformValues; + } + } + + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessDepthOfFieldStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this, frameState.context); + } + + this._dofPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._dofFramebuffer); + }; + + function createSampler() { + return new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }); + } + + function createResources(stage, context) { + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + var dofTexture = new Texture({ + context : context, + width : screenWidth, + height : screenHeight, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : createSampler() + }); + var dofFramebuffer = new Framebuffer({ + context : context, + colorTextures : [dofTexture], + destroyAttachments : false + }); + + var dofBlurUniformValues = stage._dofBlurUniformValues; + + var dofBlurXShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var dofBlurYShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + + '{ \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*4.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*3.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*2.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*2.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*3.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var dofBlurXStage = new PostProcessStage({ + fragmentShader : dofBlurXShader, + uniformValues: dofBlurUniformValues + }); + + var dofBlurYStage = new PostProcessStage({ + fragmentShader : dofBlurYShader, + uniformValues: dofBlurUniformValues + }); + + var dofPostProcess = new PostProcess({ + stages : [dofBlurXStage, dofBlurYStage], + overwriteInput : false, + blendOutput : false + }); + + dofBlurXStage.show = true; + dofBlurYStage.show = true; + + stage._dofTexture = dofTexture; + stage._dofFramebuffer = dofFramebuffer; + stage._dofPostProcess = dofPostProcess; + stage._uniformValues.dofTexture = dofTexture; + } + + function destroyResources(stage) { + stage._dofTexture = stage._dofTexture && stage._dofTexture.destroy(); + stage._dofFramebuffer = stage._dofFramebuffer && stage._dofFramebuffer.destroy(); + stage._dofPostProcess = stage._dofPostProcess && stage._dofPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessDepthOfFieldStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessDepthOfFieldStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessDepthOfFieldStage; +}); \ No newline at end of file diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index 6a03afe321d0..b7d8b5b07670 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -4,6 +4,7 @@ define([ '../Core/destroyObject', './PostProcess', './PostProcessAmbientOcclusionStage', + './PostProcessDepthOfFieldStage', './PostProcessCompositeStage', './PostProcessStage', '../Shaders/PostProcessFilters/FXAA', @@ -14,6 +15,7 @@ define([ destroyObject, PostProcess, PostProcessAmbientOcclusionStage, + PostProcessDepthOfFieldStage, PostProcessCompositeStage, PostProcessStage, FXAAFS, @@ -123,6 +125,15 @@ define([ get : function() { return createAmbientOcclusionStage(); } + }, + + /** + * private + */ + depthOfField : { + get : function() { + return createDepthOfFieldStage(); + } } }); @@ -297,5 +308,9 @@ define([ return new PostProcessAmbientOcclusionStage(); } + function createDepthOfFieldStage() { + return new PostProcessDepthOfFieldStage(); + } + return PostProcessLibrary; }); diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 870587d09b03..985c9e6668c4 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -47,6 +47,10 @@ define([ * @inheritdoc PostProcessLibrary#ambientOcclusion */ this.ambientOcclusion = PostProcessLibrary.ambientOcclusion; + /** + * @inheritdoc PostProcessLibrary#depthOfField + */ + this.depthOfField = PostProcessLibrary.depthOfField; /** * @inheritdoc PostProcessLibrary#fxaa */ @@ -61,6 +65,7 @@ define([ this.depthView, this.compositeTest, this.ambientOcclusion, + this.depthOfField, this.fxaa ]; diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index 781b4a369e48..58bf50cb01d0 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -6,7 +6,11 @@ define([ '../Core/defineProperties', '../Core/destroyObject', '../Core/loadImage', - '../Renderer/Texture' + '../Renderer/Texture', + '../Renderer/Sampler', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', ], function( Check, clone, @@ -15,7 +19,11 @@ define([ defineProperties, destroyObject, loadImage, - Texture) { + Texture, + Sampler, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap) { 'use strict'; /** @@ -94,12 +102,22 @@ define([ } }); + function createSampler() { + return new Sampler({ + wrapS: TextureWrap.REPEAT, + wrapT: TextureWrap.REPEAT, + minificationFilter: TextureMinificationFilter.NEAREST, + magnificationFilter: TextureMagnificationFilter.NEAREST + }); + } + function loadTexture(stage, uniformName, imagePath, frameState) { return loadImage(imagePath).then(function(image) { frameState.afterRender.push(function() { var texture = new Texture({ context : frameState.context, - source : image + source : image, + sampler: createSampler() }); stage._uniformValues[uniformName] = texture; stage._textures.push(texture); From d4cc37537a2bd2af94abf1c2b3896146df314cca Mon Sep 17 00:00:00 2001 From: byumjin Date: Tue, 25 Jul 2017 14:27:26 -0400 Subject: [PATCH 06/99] Added stepsize parameter at DOF Added stepsize parameter at DOF --- Apps/Sandcastle/gallery/DOF.html | 15 +- Source/Scene/PostProcessDepthOfFieldStage.js | 182 ++++++++++++++++--- 2 files changed, 171 insertions(+), 26 deletions(-) diff --git a/Apps/Sandcastle/gallery/DOF.html b/Apps/Sandcastle/gallery/DOF.html index 2a70bee5d0e6..e2dd860e622e 100644 --- a/Apps/Sandcastle/gallery/DOF.html +++ b/Apps/Sandcastle/gallery/DOF.html @@ -33,13 +33,19 @@ Focal Distance - + Kernel Size - + + + + + Step Size + + @@ -80,7 +86,8 @@ var viewModel = { DOFShow: false, FocalDistance: 5, - KernelSize : 1.2 + KernelSize : 3, + StepSize : 3 }; Cesium.knockout.track(viewModel); @@ -112,9 +119,9 @@ postProcess.depthOfField.show = Boolean(viewModel.DOFShow); postProcess.depthOfField.uniformValues.focalDistance = Number(viewModel.FocalDistance); postProcess.depthOfField.dofBlurUniformValues.kernelSize = Number(viewModel.KernelSize); + postProcess.depthOfField.dofBlurUniformValues.stepSize = Number(viewModel.StepSize); scene.fxaa = Boolean(viewModel.fxaaShow); } - //Sandcastle_End Sandcastle.finishedLoading(); } diff --git a/Source/Scene/PostProcessDepthOfFieldStage.js b/Source/Scene/PostProcessDepthOfFieldStage.js index 03e6e02a8e32..8cd6f36e0764 100644 --- a/Source/Scene/PostProcessDepthOfFieldStage.js +++ b/Source/Scene/PostProcessDepthOfFieldStage.js @@ -43,7 +43,8 @@ define([ this._dofPostProcess = undefined; this._dofBlurUniformValues = { - kernelSize : 1.0 + kernelSize : 1.0, + stepSize : 1.0 }; this._uniformValues = { @@ -180,42 +181,179 @@ define([ var dofBlurXShader = 'uniform sampler2D u_colorTexture; \n' + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + 'precision highp float; \n' + + 'varying vec2 v_textureCoordinates; \n' + + 'void main(void) \n' + '{ \n' + + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + ' vec4 result = vec4(0.0); \n' + - ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + + ' } \n' + ' gl_FragColor = result; \n' + '} \n'; var dofBlurYShader = 'uniform sampler2D u_colorTexture; \n' + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + 'varying vec2 v_textureCoordinates; \n' + + + 'precision highp float; \n' + + 'void main(void) \n' + '{ \n' + + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + ' vec4 result = vec4(0.0); \n' + - ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*4.0))*0.00390625; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*3.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*2.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*2.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*3.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + + ' } \n' + ' gl_FragColor = result; \n' + - '} \n'; + '} \n'; + var dofBlurXStage = new PostProcessStage({ fragmentShader : dofBlurXShader, From c5dccd41deaaf9f1d862ab7b6ad97615f0696047 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Wed, 23 Aug 2017 13:14:59 -0400 Subject: [PATCH 07/99] Fixed texture caching for singly-nested post process effects --- Source/Scene/PostProcess.js | 52 +++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js index 12878a39739f..634881165389 100644 --- a/Source/Scene/PostProcess.js +++ b/Source/Scene/PostProcess.js @@ -47,7 +47,7 @@ define([ * * @param {Object} options An object with the following properties: * @param {PostProcessStage[]} options.stages The post processing stages to run. - * @param {Boolean} [options.overwriteInput=false] Whether to overwrite the input frambuffer color texture during post processing. + * @param {Boolean} [options.overwriteInput=false] Whether to overwrite the input color texture during post processing. * @param {Boolean} [options.blendOutput=false] Whether to alpha blend the post processing with the output framebuffer. * * @alias PostProcess @@ -96,14 +96,15 @@ define([ } function PostProcessCache() { - this.textures = [ - new CachedTexture(), - new CachedTexture() - ]; + this.textures = []; } - PostProcessCache.prototype.createTexture = function(index, context) { - var cachedTexture = this.textures[index]; + PostProcessCache.prototype.getCachedTexture = function(index, context) { + var cachedTextures = this.textures; + if (index === cachedTextures.length) { + cachedTextures.push(new CachedTexture()); + } + var cachedTexture = cachedTextures[index]; var colorTexture = cachedTexture.texture; var screenWidth = context.drawingBufferWidth; var screenHeight = context.drawingBufferHeight; @@ -124,11 +125,20 @@ define([ sampler : createSampler() }); } + return cachedTexture.texture; }; - PostProcessCache.prototype.destroyTexture = function(index) { - var cachedTexture = this.textures[index]; + PostProcessCache.prototype.destroyTexture = function(texture) { + var cachedTexture; + var cachedTextures = this.textures; + var length = cachedTextures.length; + for (var i = 0; i < length; ++i) { + cachedTexture = cachedTextures[i]; + if (cachedTexture === texture) { + break; + } + } var count = --cachedTexture.count; if (count === 0) { cachedTexture.texture.destroy(); @@ -144,7 +154,7 @@ define([ for (var i = 0; i < length; ++i) { var colorTexture = colorTextures[i]; if (colorTexture !== inputColorTexture) { - postProcess._cache.destroyTexture(i); + postProcess._cache.destroyTexture(colorTexture); } } postProcess._colorTextures = undefined; @@ -236,17 +246,33 @@ define([ }); } + function getCachedTexture(postProcess, inputColorTexture, previousColorTexture, context) { + var texture; + var textureIndex = 0; + while (!defined(texture) || (texture === inputColorTexture) || (texture === previousColorTexture)) { + texture = postProcess._cache.getCachedTexture(textureIndex, context); + ++textureIndex; + } + return texture; + } + function createTextures(postProcess, inputColorTexture, context) { var activeStages = postProcess._activeStages; var length = CesiumMath.clamp(activeStages.length - 1, 0, 2); var colorTextures = new Array(length); postProcess._colorTextures = colorTextures; - if (length >= 1) { - colorTextures[0] = postProcess._cache.createTexture(0, context); + if (length === 0) { + return; } + + // Get the first ping-pong texture + colorTextures[0] = getCachedTexture(postProcess, inputColorTexture, inputColorTexture, context); + if (length === 2) { - colorTextures[1] = postProcess._overwriteInput ? inputColorTexture : postProcess._cache.createTexture(1, context); + // If there are three or more stages a second ping-pong texture is required. + // If overwriteInput is true, use the input texture as the second ping-pong texture. + colorTextures[1] = postProcess._overwriteInput ? inputColorTexture : getCachedTexture(postProcess, inputColorTexture, colorTextures[0], context); } } From b6ed72c50fda7ebdcd5c1ffa7a1a8723da7761dd Mon Sep 17 00:00:00 2001 From: byumjin Date: Wed, 23 Aug 2017 13:55:43 -0400 Subject: [PATCH 08/99] add Bloom(Glow) abd EdgeDetection(Toon) add Bloom(Glow) abd EdgeDetection(Toon) Fixed a HBAO's artifact which draws unexpected lines Glow - http://localhost:8080/Apps/Sandcastle/?src=Hello%20World.html&label=Showcases&gist=d5fd85d0eaec2a91fb9548ec8d8fbea4 Toon - http://localhost:8080/Apps/Sandcastle/?src=Hello%20World.html&label=Showcases&gist=87ac93ad6ac8df9c78894ba242416450 --- Apps/Sandcastle/gallery/LensFlare.html | 105 +++++ Apps/Sandcastle/gallery/LensFlare.jpg | Bin 0 -> 52158 bytes .../SCene/PostProcessAmbientOcclusionStage.js | 58 ++- Source/Scene/PostProcessBloomStage.js | 435 ++++++++++++++++++ Source/Scene/PostProcessDepthOfFieldStage.js | 153 +++--- Source/Scene/PostProcessLibrary.js | 220 +++++++++ Source/Scene/PostProcessScene.js | 13 + Source/Scene/PostProcessToonStage.js | 300 ++++++++++++ 8 files changed, 1213 insertions(+), 71 deletions(-) create mode 100644 Apps/Sandcastle/gallery/LensFlare.html create mode 100644 Apps/Sandcastle/gallery/LensFlare.jpg create mode 100644 Source/Scene/PostProcessBloomStage.js create mode 100644 Source/Scene/PostProcessToonStage.js diff --git a/Apps/Sandcastle/gallery/LensFlare.html b/Apps/Sandcastle/gallery/LensFlare.html new file mode 100644 index 000000000000..be53b2220196 --- /dev/null +++ b/Apps/Sandcastle/gallery/LensFlare.html @@ -0,0 +1,105 @@ + + + + + + + + + Cesium Demo + + + + + + +

+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Lens Flare + +
Intensity + +
Distortion + +
Dispersion + +
HaloWidth + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/LensFlare.jpg b/Apps/Sandcastle/gallery/LensFlare.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68ef3d49d03a5c5c7ceb890ed20fc40224fed054 GIT binary patch literal 52158 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
Vhi66oqh1O1n<{OR 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 N&$~Xu{CDp^|Jfq*8{_~0 literal 0 HcmV?d00001 diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index fe4971dc2a55..742990e486b6 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -196,14 +196,63 @@ define([ ' return normalize(cross(d2, d1)); ' + '} \n' + + //Reconstruct Normal Without Edge Removation + 'vec3 GetNormalXedge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) \n' + + '{ \n' + + + ' vec4 posInCameraUp = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(0.0, pixelSize.y)), depthU, 1.0); \n' + + ' posInCameraUp = posInCameraUp / posInCameraUp.w; \n' + + ' vec4 posInCameraDown = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(0.0, pixelSize.y)), depthD, 1.0); \n' + + ' posInCameraDown = posInCameraDown / posInCameraDown.w; \n' + + ' vec4 posInCameraLeft = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(pixelSize.x, 0.0)), depthL, 1.0); \n' + + ' posInCameraLeft = posInCameraLeft / posInCameraLeft.w; \n' + + ' vec4 posInCameraRight = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(pixelSize.x, 0.0)), depthR, 1.0); \n' + + ' posInCameraRight = posInCameraRight / posInCameraRight.w; \n' + + ' vec3 UC = posInCamera.xyz - posInCameraUp.xyz; \n' + + ' vec3 DC = posInCameraDown.xyz - posInCamera.xyz; \n' + + ' vec3 LC = posInCamera.xyz - posInCameraLeft.xyz; \n' + + ' vec3 RC = posInCameraRight.xyz - posInCamera.xyz; \n' + + ' vec3 DX; \n' + + ' vec3 DY; \n' + + + ' if (length(UC) < length(DC)) \n' + + ' { \n' + + ' DY = UC; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' DY = DC; \n' + + ' } \n' + + + ' if (length(LC) < length(RC)) \n' + + ' { \n' + + ' DX = LC; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' DX = RC; \n' + + ' } \n' + + + ' return normalize(cross(DY, DX)); ' + + '} \n' + + 'void main(void) \n' + '{ \n' + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + + ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + ' posInCamera = posInCamera / posInCamera.w; \n' + - ' vec3 normalInCamera = GetNormal(posInCamera.xyz); \n' + - + 'if(posInCamera.z < 1000.0) \n' + + '{ \n' + + ' vec2 pixelSize = 1.0 / czm_viewport.zw; \n' + + ' float depthU = texture2D(u_depthTexture, v_textureCoordinates- vec2(0.0, pixelSize.y)).r; \n' + + ' float depthD = texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pixelSize.y)).r; \n' + + ' float depthL = texture2D(u_depthTexture, v_textureCoordinates- vec2(pixelSize.x, 0.0)).r; \n' + + ' float depthR = texture2D(u_depthTexture, v_textureCoordinates+ vec2(pixelSize.x, 0.0)).r; \n' + + ' vec3 normalInCamera = GetNormalXedge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); \n' + + //' vec3 normalInCamera = GetNormal(posInCamera.xyz); \n' + ' float AO = 0.0; \n' + ' vec2 sampleDirection = vec2(1.0, 0.0); \n' + ' float gapAngle = 90.0; \n' + @@ -264,7 +313,10 @@ define([ ' AO /= float(4); \n' + ' AO = 1.0 - clamp(AO, 0.0, 1.0); \n' + ' AO = pow(AO, u_intensity); \n' + - ' gl_FragColor = vec4(vec3(AO), 1.0); \n' + + ' gl_FragColor = vec4(vec3(AO), 1.0); \n' + + '} \n' + + 'else \n' + + ' gl_FragColor = vec4(1.0); \n' + '} \n'; var aoBlurXShader = diff --git a/Source/Scene/PostProcessBloomStage.js b/Source/Scene/PostProcessBloomStage.js new file mode 100644 index 000000000000..ca48c0a803d2 --- /dev/null +++ b/Source/Scene/PostProcessBloomStage.js @@ -0,0 +1,435 @@ +define([ + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Core/buildModuleUrl', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + defineProperties, + destroyObject, + PixelFormat, + buildModuleUrl, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for bloom. Implements {@link PostProcessStage}. + * + * @alias PostProcessBloomStage + * @constructor + * + * @private + */ + function PostProcessBloomStage() { + + this._bloomTexture = undefined; + this._bloomFramebuffer = undefined; + this._bloomPostProcess = undefined; + + this._bloomBlurUniformValues = { + kernelSize : 1.0, + stepSize : 1.0 + }; + + this._bloomContrastBiasUniformValues = { + contrast : 0.0, + brightness : 0.0 + }; + + this._uniformValues = { + bloomTexture : undefined, + glowOnly : false + }; + + /** + * @inheritdoc PostProcessStage#show + */ + this.show = false; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_bloomTexture; \n' + + 'uniform bool u_glowOnly; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + ' if(u_glowOnly) \n' + + ' gl_FragColor = texture2D(u_bloomTexture, v_textureCoordinates);\n' + + ' else \n' + + ' gl_FragColor = texture2D(u_bloomTexture, v_textureCoordinates) + texture2D(u_colorTexture, v_textureCoordinates);\n' + + '} \n'; + } + + defineProperties(PostProcessBloomStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + bloomBlurUniformValues : { + get : function() { + return this._bloomBlurUniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + bloomContrastBiasUniformValues : { + get : function() { + return this._bloomContrastBiasUniformValues; + } + } + + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessBloomStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this, frameState.context); + } + + this._bloomPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._bloomFramebuffer); + }; + + function createSampler() { + return new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }); + } + + function createResources(stage, context) { + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + var bloomTexture = new Texture({ + context : context, + width : screenWidth, + height : screenHeight, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : createSampler() + }); + var bloomFramebuffer = new Framebuffer({ + context : context, + colorTextures : [bloomTexture], + destroyAttachments : false + }); + + var bloomBlurUniformValues = stage._bloomBlurUniformValues; + + var bloomContrastBiasUniformValues = stage._bloomContrastBiasUniformValues; + + var contrastBiasShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_contrast; \n' + + 'uniform float u_brightness; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + //https://www.laurivan.com/rgb-to-hsv-to-rgb-for-shaders/ + 'vec3 rgb2hsv(vec3 c) \n' + + '{ \n' + + ' vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); \n' + + ' vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); \n' + + ' vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); \n' + + + ' float d = q.x - min(q.w, q.y); \n' + + ' float e = 1.0e-10; \n' + + ' return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); \n' + + '} \n' + + + 'vec3 hsv2rgb(vec3 c) \n' + + '{ \n' + + ' vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); \n' + + ' vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); \n' + + ' return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' vec3 sceneColor = texture2D(u_colorTexture, v_textureCoordinates).xyz; \n' + + ' sceneColor = rgb2hsv(sceneColor); \n' + + ' sceneColor.z += u_brightness; \n' + + ' sceneColor = hsv2rgb(sceneColor); \n' + + ' float factor = (259.0 * (u_contrast + 255.0)) / (255.0*(259.0 - u_contrast)); \n' + + ' sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5); \n' + + ' gl_FragColor = vec4(sceneColor, 1.0);\n' + + '} \n'; + + var bloomBlurXShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + 'precision highp float; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + + ' } \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var bloomBlurYShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'precision highp float; \n' + + + 'void main(void) \n' + + '{ \n' + + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + + ' } \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var contrastBiasStage = new PostProcessStage({ + fragmentShader : contrastBiasShader, + uniformValues: bloomContrastBiasUniformValues + }); + + var bloomBlurXStage = new PostProcessStage({ + fragmentShader : bloomBlurXShader, + uniformValues: bloomBlurUniformValues + }); + + var bloomBlurYStage = new PostProcessStage({ + fragmentShader : bloomBlurYShader, + uniformValues: bloomBlurUniformValues + }); + + var bloomPostProcess = new PostProcess({ + stages : [contrastBiasStage, bloomBlurXStage, bloomBlurYStage], + overwriteInput : false, + blendOutput : false + }); + + contrastBiasStage.show = true; + bloomBlurXStage.show = true; + bloomBlurYStage.show = true; + + stage._bloomTexture = bloomTexture; + stage._bloomFramebuffer = bloomFramebuffer; + stage._bloomPostProcess = bloomPostProcess; + stage._uniformValues.bloomTexture = bloomTexture; + } + + function destroyResources(stage) { + stage._bloomTexture = stage._bloomTexture && stage._bloomTexture.destroy(); + stage._bloomFramebuffer = stage._bloomFramebuffer && stage._bloomFramebuffer.destroy(); + stage._bloomPostProcess = stage._bloomPostProcess && stage._bloomPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessBloomStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessBloomStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessBloomStage; +}); \ No newline at end of file diff --git a/Source/Scene/PostProcessDepthOfFieldStage.js b/Source/Scene/PostProcessDepthOfFieldStage.js index 8cd6f36e0764..71fa2c26569a 100644 --- a/Source/Scene/PostProcessDepthOfFieldStage.js +++ b/Source/Scene/PostProcessDepthOfFieldStage.js @@ -44,7 +44,8 @@ define([ this._dofBlurUniformValues = { kernelSize : 1.0, - stepSize : 1.0 + stepSize : 1.0, + depthGap : 0.05 }; this._uniformValues = { @@ -55,8 +56,8 @@ define([ this._fragmentShader = 'uniform sampler2D u_colorTexture; \n' + 'uniform sampler2D u_dofTexture; \n' + - 'uniform sampler2D u_depthTexture; \n' + - 'uniform float u_focalDistance; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_focalDistance; \n' + 'varying vec2 v_textureCoordinates; \n' + 'vec2 ScreenToView(vec2 uv) \n' + @@ -74,9 +75,9 @@ define([ ' else \n' + ' { \n' + ' f = (depth - u_focalDistance) / (czm_currentFrustum.y - u_focalDistance); \n' + + ' f = pow(f, 0.1); \n' + ' } \n' + - - //' f *= f; \n' + + ' f *= f; \n' + ' return clamp(f, 0.0, 1.0); \n' + '} \n' + @@ -180,103 +181,118 @@ define([ var dofBlurXShader = 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + 'uniform float u_kernelSize; \n' + 'uniform float u_stepSize; \n' + - 'precision highp float; \n' + - + 'uniform float u_depthGap; \n' + + 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + + 'float LinearDepth(float depth) \n' + '{ \n' + + ' float far= czm_currentFrustum.y; \n' + + ' float near = czm_currentFrustum.x; \n' + + ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + + '} \n' + - 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + - 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + - 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + - 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + - 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + - 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + - 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + - 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + - + 'void main(void) \n' + + '{ \n' + + ' float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + ' float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + ' float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + ' float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + ' float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + ' float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + ' float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + ' Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' depth = LinearDepth(depth); \n' + ' vec4 result = vec4(0.0); \n' + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + ' { \n' + ' for(int i=1; i <= 3; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 2.0) \n' + ' { \n' + ' for(int i=1; i <= 4; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 3.0) \n' + ' { \n' + ' for(int i=1; i <= 5; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 4.0) \n' + ' { \n' + ' for(int i=1; i<=6; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 5.0) \n' + ' { \n' + ' for(int i=1; i<=7; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 6.0) \n' + ' { \n' + ' for(int i=1; i<=8; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + - ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0];\n' + + ' } \n' + ' else \n' + ' { \n' + ' for(int i=1; i<=12; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + - ' } \n' + - ' gl_FragColor = result; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0];\n' + + ' } \n' + + ' gl_FragColor = result;\n' + '} \n'; var dofBlurYShader = 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + 'uniform float u_kernelSize; \n' + 'uniform float u_stepSize; \n' + + 'uniform float u_depthGap; \n' + 'varying vec2 v_textureCoordinates; \n' + - 'precision highp float; \n' + + 'float LinearDepth(float depth) \n' + + '{ \n' + + ' float far= czm_currentFrustum.y; \n' + + ' float near = czm_currentFrustum.x; \n' + + ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + + '} \n' + 'void main(void) \n' + '{ \n' + - 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + @@ -285,72 +301,73 @@ define([ 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + - + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' depth = LinearDepth(depth); \n' + ' vec4 result = vec4(0.0); \n' + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + ' if(u_kernelSize < 1.0) \n' + ' { \n' + ' for(int i=1; i <= 3; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur7Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur7Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 2.0) \n' + ' { \n' + ' for(int i=1; i <= 4; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur9Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur9Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 3.0) \n' + ' { \n' + ' for(int i=1; i <= 5; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur11Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur11Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 4.0) \n' + ' { \n' + ' for(int i=1; i<=6; i++) \n' + - ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur13Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur13Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 5.0) \n' + ' { \n' + ' for(int i=1; i<=7; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur15Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur15Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0];\n' + ' } \n' + ' else if(u_kernelSize < 6.0) \n' + ' { \n' + ' for(int i=1; i<=8; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur17Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur17Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + - ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0];\n' + + ' } \n' + ' else \n' + ' { \n' + ' for(int i=1; i<=12; i++) \n' + ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur25Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur25Coeff[i];\n' + ' } \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + - ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0];\n' + + ' } \n' + ' gl_FragColor = result; \n' + '} \n'; diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index b7d8b5b07670..6daaf1930105 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -5,6 +5,8 @@ define([ './PostProcess', './PostProcessAmbientOcclusionStage', './PostProcessDepthOfFieldStage', + './PostProcessBloomStage', + './PostProcessToonStage', './PostProcessCompositeStage', './PostProcessStage', '../Shaders/PostProcessFilters/FXAA', @@ -16,6 +18,8 @@ define([ PostProcess, PostProcessAmbientOcclusionStage, PostProcessDepthOfFieldStage, + PostProcessBloomStage, + PostProcessToonStage, PostProcessCompositeStage, PostProcessStage, FXAAFS, @@ -134,6 +138,36 @@ define([ get : function() { return createDepthOfFieldStage(); } + }, + + /** + * private + */ + bloom : { + get : function() { + return createBloomStage(); + } + }, + /** + * lensFlare. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + lensFlare : { + get : function() { + return createLensFlareStage(); + } + }, + /** + * private + */ + toon : { + get : function() { + return createToonStage(); + } } }); @@ -304,6 +338,184 @@ define([ return new PostProcessCompositeStage([darkenStage, redStage]); } + function createLensFlareStage() { + var urlDirt = buildModuleUrl('Assets/Textures/LensFlare/DirtMask.jpg'); + var urlStar = buildModuleUrl('Assets/Textures/LensFlare/StarBurst.jpg'); + var uniformValues = { + dirtTexture: urlDirt, + starTexture: urlStar, + intensity: 2.0, + distortion: 5.0, + ghostDispersal: 0.4, + haloWidth: 0.4, + earthRadius: 0.0 + }; + + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_dirtTexture; \n' + + 'uniform sampler2D u_starTexture; \n' + + 'uniform float u_distortion; \n' + + 'uniform float u_ghostDispersal; \n' + + 'uniform float u_haloWidth; \n' + + 'uniform float u_earthRadius; \n' + + 'uniform float u_intensity; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + //return ndc from world coordinate biased earthRadius + 'vec4 getNDCFromWC(vec3 WC, float earthRadius) \n' + + '{ \n' + + ' vec4 positionWC = vec4(WC, 1.0); \n' + + ' vec4 positionEC = czm_view * positionWC; \n' + + ' positionEC = vec4(positionEC.x + earthRadius , positionEC.y, positionEC.z, 1.0); \n' + + ' positionWC = czm_eyeToWindowCoordinates(positionEC); \n' + + ' return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0); \n' + + '} \n' + + + //Check if current pixel is included Earth + //if then mask it gradually + 'float isInEarth(vec2 texcoord, vec2 sceneSize) \n' + + '{ \n' + + ' vec2 NDC = texcoord * 2.0 - 1.0; \n' + + ' vec4 earthPosSC = getNDCFromWC(vec3(0.0,0.0,0.0), 0.0); \n' + + ' vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0,0.0,0.0), u_earthRadius * 1.5); \n' + + ' NDC.xy -= earthPosSC.xy; \n' + + ' float X = abs(NDC.x)*sceneSize.x; \n' + + ' X *= X; \n' + + ' float Y = abs(NDC.y)*sceneSize.y; \n' + + ' Y *= Y; \n' + + ' return clamp(0.0, 1.0, max( sqrt(X + Y) / max(abs(earthPosSCEdge.x*sceneSize.x), 1.0) - 0.8 , 0.0)); \n' + + '} \n' + + + //For Chromatic effect + 'vec4 textureDistorted( \n' + + ' sampler2D tex, \n' + + ' vec2 texcoord, \n' + + ' vec2 direction, \n' + + ' vec3 distortion, \n' + + ' bool isSpace \n' + + ') \n' + + '{ \n' + + ' vec2 sceneSize = czm_viewport.zw; \n' + + ' float red = 0.0; \n' + + ' float green = 0.0; \n' + + ' float blue = 0.0; \n' + + ' if(isSpace) \n' + + ' { \n' + + 'red = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r; \n' + + 'green = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g; \n' + + 'blue = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + 'red = texture2D(tex, texcoord + direction * distortion.r).r; \n' + + 'green = texture2D(tex, texcoord + direction * distortion.g).g; \n' + + 'blue = texture2D(tex, texcoord + direction * distortion.b).b; \n' + + ' } \n' + + ' return vec4(clamp(red, 0.0, 1.0), clamp(green, 0.0, 1.0), clamp(blue, 0.0, 1.0), 0.0); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' bool isSpace = true; \n' + + + //whether it is in space or not + //6500000.0 is Emprical value + ' if(length(czm_viewerPositionWC.xyz) < 6500000.0) \n' + + ' isSpace = false; \n' + + + //Sun position + ' vec4 sunPos; \n' + + ' if (czm_morphTime == 1.0) \n' + + ' { \n' + + ' sunPos = vec4(czm_sunPositionWC, 1.0); \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' sunPos = vec4(czm_sunPositionColumbusView.zxy, 1.0); \n' + + ' } \n' + + + ' vec4 sunPositionEC = czm_view * sunPos; \n' + + ' vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC); \n' + + ' sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0); \n' + + ' vec2 texcoord = -v_textureCoordinates + vec2(1.0); \n' + + ' vec2 texelSize = 1.0 / czm_viewport.zw; \n' + + ' vec3 distortion = vec3(-texelSize.x * u_distortion, 0.0, texelSize.x * u_distortion); \n' + + + // ghost vector to image centre: + ' vec2 ghostVec = (vec2(0.5) - texcoord) * u_ghostDispersal; \n' + + ' vec3 direction = normalize(vec3(ghostVec, 0.0)); \n' + + + // sample ghosts: + ' vec4 result = vec4(0.0); \n' + + ' vec4 ghost = vec4(0.0); \n' + + ' for (int i = 0; i < 4; ++i) \n' + + ' { \n' + + ' vec2 offset = fract(texcoord + ghostVec * float(i)); \n' + + // Only bright spots from the centre of the source image + ' ghost += textureDistorted(u_colorTexture, offset, direction.xy, distortion, isSpace); \n' + + ' } \n' + + ' result += ghost; \n' + + + // sample halo: + ' vec4 halo; \n' + + ' vec2 haloVec = normalize(ghostVec) * u_haloWidth; \n' + + ' float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5)); \n' + + ' weightForHalo = pow(1.0 - weightForHalo, 5.0); \n' + + ' halo = textureDistorted(u_colorTexture, texcoord + haloVec, direction.xy, distortion, isSpace) * weightForHalo * 1.5; \n' + + ' result += halo; \n' + + ' result += texture2D(u_dirtTexture, v_textureCoordinates); \n' + + + //Rotating starburst texture's coordinate + ' vec3 camx = vec3(czm_view[0][0], czm_view[0][1], czm_view[0][2] ); \n' + + ' vec3 camz = vec3(czm_view[1][0], czm_view[1][1], czm_view[1][2] ); \n' + + ' float camrot = dot(camx, vec3(0.0, 0.0, 1.0)) + dot(camz, vec3(0.0, 1.0, 0.0)); \n' + + ' float cosValue = cos(camrot); \n' + + ' float sinValue = sin(camrot); \n' + + ' mat3 rotation = mat3( \n' + + ' cosValue, -sinValue, 0.0, \n' + + ' sinValue, cosValue, 0.0, \n' + + ' 0.0, 0.0, 1.0 \n' + + ' ); \n' + + ' vec3 st1 = vec3(v_textureCoordinates, 1.0) * 2.0 - vec3(1.0); \n' + + ' st1.z = 1.0; \n' + + ' vec3 st2 = rotation * st1; \n' + + ' st2.z = 1.0; \n' + + ' vec3 st3 = st2 * 0.5 + vec3(0.5); \n' + + ' vec2 lensStarTexcoord = st3.xy; \n' + + ' float weightForLensFlare = length(vec3(sunPos.xy, 0.0)); \n' + + ' float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0); \n' + + ' if (!isSpace) \n' + + ' { \n' + + ' result *= oneMinusWeightForLensFlare * u_intensity * 0.2; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' result *= oneMinusWeightForLensFlare * u_intensity; \n' + + ' result *= texture2D(u_starTexture, lensStarTexcoord) * pow(weightForLensFlare,1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0; \n' + + ' } \n' + + + //If sun is in the screen space, add lens flare effect + ' if( (sunPos.x >= -1.1 && sunPos.x <= 1.1) && \n' + + ' (sunPos.y >= -1.1 && sunPos.y <= 1.1) \n' + + ' ) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates); \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' result = texture2D(u_colorTexture, v_textureCoordinates); \n' + + ' } \n' + + ' gl_FragColor = result; \n' + + ' } \n'; + + return new PostProcessStage({ + fragmentShader: fragmentShader, + uniformValues: uniformValues + }); + } + function createAmbientOcclusionStage() { return new PostProcessAmbientOcclusionStage(); } @@ -312,5 +524,13 @@ define([ return new PostProcessDepthOfFieldStage(); } + function createBloomStage() { + return new PostProcessBloomStage(); + } + + function createToonStage() { + return new PostProcessToonStage(); + } + return PostProcessLibrary; }); diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 985c9e6668c4..d95c435d9795 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -51,6 +51,16 @@ define([ * @inheritdoc PostProcessLibrary#depthOfField */ this.depthOfField = PostProcessLibrary.depthOfField; + /** + * @inheritdoc PostProcessLibrary#bloom + */ + this.lensFlare = PostProcessLibrary.lensFlare; + + this.bloom = PostProcessLibrary.bloom; + /** + * @inheritdoc PostProcessLibrary#fxaa + */ + this.toon = PostProcessLibrary.toon; /** * @inheritdoc PostProcessLibrary#fxaa */ @@ -66,6 +76,9 @@ define([ this.compositeTest, this.ambientOcclusion, this.depthOfField, + this.bloom, + this.lensFlare, + this.toon, this.fxaa ]; diff --git a/Source/Scene/PostProcessToonStage.js b/Source/Scene/PostProcessToonStage.js new file mode 100644 index 000000000000..766970c532e5 --- /dev/null +++ b/Source/Scene/PostProcessToonStage.js @@ -0,0 +1,300 @@ +define([ + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Core/buildModuleUrl', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + defineProperties, + destroyObject, + PixelFormat, + buildModuleUrl, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for Toon. Implements {@link PostProcessStage}. + * + * @alias PostProcessToonStage + * @constructor + * + * @private + */ + function PostProcessToonStage() { + + this._ToonTexture = undefined; + this._ToonFramebuffer = undefined; + this._ToonPostProcess = undefined; + + this._EdgeDetectionUniformValues = { + len : 0.1 + }; + + this._ToonUniformValues = { + + }; + + this._uniformValues = { + ToonTexture : undefined, + toonOnly : true + }; + + /** + * @inheritdoc PostProcessStage#show + */ + this.show = false; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_ToonTexture; \n' + + 'uniform bool u_toonOnly; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + ' gl_FragColor = texture2D(u_ToonTexture, v_textureCoordinates);\n' + + ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_ToonTexture, v_textureCoordinates), gl_FragColor.a);\n' + + '} \n'; + } + + defineProperties(PostProcessToonStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + EdgeDetectionUniformValues : { + get : function() { + return this._EdgeDetectionUniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + ToonUniformValues : { + get : function() { + return this._ToonUniformValues; + } + } + + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessToonStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this, frameState.context); + } + + this._ToonPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._ToonFramebuffer); + }; + + function createSampler() { + return new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }); + } + + function createResources(stage, context) { + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + var ToonTexture = new Texture({ + context : context, + width : screenWidth, + height : screenHeight, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : createSampler() + }); + var ToonFramebuffer = new Framebuffer({ + context : context, + colorTextures : [ToonTexture], + destroyAttachments : false + }); + + var EdgeDetectionUniformValues = stage._EdgeDetectionUniformValues; + + var ToonUniformValues = stage._ToonUniformValues; + + var ToonShader = + '#extension GL_OES_standard_derivatives : enable \n' + + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'vec2 ScreenToView(vec2 uv) \n' + + '{ \n' + + ' return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; \n' + + '} \n' + + + //Reconstruct Normal from View position + 'vec3 GetNormal(vec3 posInCamera) \n' + + '{ \n' + + ' vec3 d1 = dFdx(posInCamera); \n' + + ' vec3 d2 = dFdy(posInCamera); \n' + + ' return normalize(cross(d2, d1)); \n' + + '} \n' + + + 'float LinearDepth(float depth) \n' + + '{ \n' + + ' float far= czm_currentFrustum.y; \n' + + ' float near = czm_currentFrustum.x; \n' + + ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + + ' posInCamera = posInCamera / posInCamera.w; \n' + + ' vec3 normalInCamera = GetNormal(posInCamera.xyz); \n' + + ' vec4 normalInWorld = czm_inverseView * vec4(normalInCamera, 0.0); \n' + + ' depth = LinearDepth(depth); \n' + + ' gl_FragColor = vec4(depth);\n' + + '} \n'; + + var EdgeDetectionShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_len; \n' + + 'uniform float u_stepSize; \n' + + 'precision highp float; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + + 'float padx = 1.0 / czm_viewport.z; \n' + + 'float pady = 1.0 / czm_viewport.w; \n' + + + 'float horizEdge = 0.0; \n' + + + 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + + 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, 0.0)).x * 10.0; \n' + + 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, pady)).x * 3.0; \n' + + + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, 0.0)).x * 10.0; \n' + + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + + + 'float vertEdge = 0.0; \n' + + + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, -pady)).x * 10.0; \n' + + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + + + 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, pady)).x * 3.0; \n' + + 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pady)).x * 10.0; \n' + + 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + + + 'float len = sqrt(horizEdge*horizEdge + vertEdge*vertEdge); \n' + + + 'if (len > u_len) \n' + + '{ \n' + + ' gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); \n' + + '} \n' + + 'else \n' + + '{ \n' + + ' gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); \n' + + '} \n' + + + '} \n'; + + var ToonStage = new PostProcessStage({ + fragmentShader : ToonShader, + uniformValues: ToonUniformValues + }); + + var EdgeDetectionStage = new PostProcessStage({ + fragmentShader : EdgeDetectionShader, + uniformValues: EdgeDetectionUniformValues + }); + + var ToonPostProcess = new PostProcess({ + stages : [ToonStage, EdgeDetectionStage], + overwriteInput : false, + blendOutput : false + }); + + ToonStage.show = true; + EdgeDetectionStage.show = true; + + + stage._ToonTexture = ToonTexture; + stage._ToonFramebuffer = ToonFramebuffer; + stage._ToonPostProcess = ToonPostProcess; + stage._uniformValues.ToonTexture = ToonTexture; + } + + function destroyResources(stage) { + stage._ToonTexture = stage._ToonTexture && stage._ToonTexture.destroy(); + stage._ToonFramebuffer = stage._ToonFramebuffer && stage._ToonFramebuffer.destroy(); + stage._ToonPostProcess = stage._ToonPostProcess && stage._ToonPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessToonStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessToonStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessToonStage; +}); \ No newline at end of file From 93ef7555225cd38efbcf141b36486772e2a28e98 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Thu, 24 Aug 2017 11:55:14 -0400 Subject: [PATCH 09/99] Ability to create output framebuffer in the postProcess instead of externally, and set stages show to true by default --- .../SCene/PostProcessAmbientOcclusionStage.js | 48 +++--------------- Source/Scene/PostProcess.js | 50 ++++++++++++++++--- Source/Scene/PostProcessCompositeStage.js | 2 +- Source/Scene/PostProcessScene.js | 9 +++- Source/Scene/PostProcessStage.js | 4 +- 5 files changed, 61 insertions(+), 52 deletions(-) diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index a21e8c5d3a55..f2213cd2cbbb 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -38,8 +38,6 @@ define([ this._fragmentShader = undefined; this._uniformValues = undefined; - this._aoTexture = undefined; - this._aoFramebuffer = undefined; this._aoPostProcess = undefined; this._fragmentShader = @@ -60,7 +58,7 @@ define([ /** * @inheritdoc PostProcessStage#show */ - this.show = false; + this.show = true; } defineProperties(PostProcessAmbientOcclusionStage.prototype, { @@ -100,38 +98,14 @@ define([ if (dirty) { destroyResources(this); - createResources(this, frameState.context); + createResources(this); } - this._aoPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._aoFramebuffer); + this._aoPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, undefined); + this._uniformValues.aoTexture = this._aoPostProcess.outputColorTexture; }; - function createSampler() { - return new Sampler({ - wrapS : TextureWrap.CLAMP_TO_EDGE, - wrapT : TextureWrap.CLAMP_TO_EDGE, - minificationFilter : TextureMinificationFilter.NEAREST, - magnificationFilter : TextureMagnificationFilter.NEAREST - }); - } - - function createResources(stage, context) { - var screenWidth = context.drawingBufferWidth; - var screenHeight = context.drawingBufferHeight; - var aoTexture = new Texture({ - context : context, - width : screenWidth, - height : screenHeight, - pixelFormat : PixelFormat.RGBA, - pixelDatatype : PixelDatatype.UNSIGNED_BYTE, - sampler : createSampler() - }); - var aoFramebuffer = new Framebuffer({ - context : context, - colorTextures : [aoTexture], - destroyAttachments : false - }); - + function createResources(stage) { var aoGenerateShader = 'uniform sampler2D u_colorTexture; \n' + 'varying vec2 v_textureCoordinates; \n' + @@ -172,22 +146,14 @@ define([ var aoPostProcess = new PostProcess({ stages : [aoGenerateStage, aoBlurXStage, aoBlurYStage], overwriteInput : false, - blendOutput : false + blendOutput : false, + createOutputFramebuffer : true }); - aoGenerateStage.show = true; - aoBlurXStage.show = true; - aoBlurYStage.show = true; - - stage._aoTexture = aoTexture; - stage._aoFramebuffer = aoFramebuffer; stage._aoPostProcess = aoPostProcess; - stage._uniformValues.aoTexture = aoTexture; } function destroyResources(stage) { - stage._aoTexture = stage._aoTexture && stage._aoTexture.destroy(); - stage._aoFramebuffer = stage._aoFramebuffer && stage._aoFramebuffer.destroy(); stage._aoPostProcess = stage._aoPostProcess && stage._aoPostProcess.destroy(); } diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js index 634881165389..99fc19d6e9fc 100644 --- a/Source/Scene/PostProcess.js +++ b/Source/Scene/PostProcess.js @@ -49,6 +49,7 @@ define([ * @param {PostProcessStage[]} options.stages The post processing stages to run. * @param {Boolean} [options.overwriteInput=false] Whether to overwrite the input color texture during post processing. * @param {Boolean} [options.blendOutput=false] Whether to alpha blend the post processing with the output framebuffer. + * @param {Boolean} [options.createOutputFramebuffer=false] Create an output framebuffer if none is supplied. * * @alias PostProcess * @constructor @@ -61,7 +62,8 @@ define([ this._stages = options.stages; this._overwriteInput = defaultValue(options.overwriteInput, false); - this._blendOutput = defaultValue(options.blendOutput, true); + this._blendOutput = defaultValue(options.blendOutput, false); + this._createOutputFramebuffer = defaultValue(options.createOutputFramebuffer, false); this._drawCommands = undefined; this._framebuffers = undefined; @@ -87,6 +89,14 @@ define([ } return false; } + }, + outputColorTexture : { + get : function() { + if (!defined(this._outputFramebuffer)) { + return undefined; + } + return this._outputFramebuffer.getColorTexture(0); + } } }); @@ -135,7 +145,7 @@ define([ var length = cachedTextures.length; for (var i = 0; i < length; ++i) { cachedTexture = cachedTextures[i]; - if (cachedTexture === texture) { + if (cachedTexture.texture === texture) { break; } } @@ -170,6 +180,11 @@ define([ } postProcess._framebuffers = undefined; } + + if (postProcess._createOutputFramebuffer && defined(postProcess._outputFramebuffer)) { + postProcess._outputFramebuffer.destroy(); + postProcess._outputFramebuffer = undefined; + } } function destroyDrawCommands(postProcess) { @@ -206,7 +221,9 @@ define([ }); } - function createStages(postProcess, inputColorTexture, outputFramebuffer) { + function createStages(postProcess) { + var inputColorTexture = postProcess._inputColorTexture; + var outputFramebuffer = postProcess._outputFramebuffer; var activeStages = []; var inactiveStages = []; var stagesEnabled = []; @@ -256,7 +273,8 @@ define([ return texture; } - function createTextures(postProcess, inputColorTexture, context) { + function createTextures(postProcess, context) { + var inputColorTexture = postProcess._inputColorTexture; var activeStages = postProcess._activeStages; var length = CesiumMath.clamp(activeStages.length - 1, 0, 2); var colorTextures = new Array(length); @@ -289,6 +307,24 @@ define([ destroyAttachments : false }); } + + if (postProcess._createOutputFramebuffer) { + var screenWidth = context.drawingBufferWidth; + var screenHeight = context.drawingBufferHeight; + var colorTexture = new Texture({ + context : context, + width : screenWidth, + height : screenHeight, + pixelFormat : PixelFormat.RGBA, + pixelDatatype : PixelDatatype.UNSIGNED_BYTE, + sampler : createSampler() + }); + postProcess._outputFramebuffer = new Framebuffer({ + context : context, + colorTextures : [colorTexture], + destroyAttachments : false + }); + } } function getUniformFunction(stage, name) { @@ -379,7 +415,7 @@ define([ if (inputColorTexture !== postProcess._inputColorTexture || inputDepthTexture !== postProcess._inputDepthTexture || - outputFramebuffer !== postProcess._outputFramebuffer) { + outputFramebuffer !== postProcess._outputFramebuffer && !postProcess._createOutputFramebuffer) { postProcess._inputColorTexture = inputColorTexture; postProcess._inputDepthTexture = inputDepthTexture; postProcess._outputFramebuffer = outputFramebuffer; @@ -436,8 +472,8 @@ define([ if (dirty) { destroyDrawCommands(this); destroyFramebuffers(this); - createStages(this, inputColorTexture, outputFramebuffer); - createTextures(this, inputColorTexture, context); + createStages(this); + createTextures(this, context); createFramebuffers(this, context); createDrawCommands(this, context); } diff --git a/Source/Scene/PostProcessCompositeStage.js b/Source/Scene/PostProcessCompositeStage.js index 103d0e930c9f..b8e467f4bc66 100644 --- a/Source/Scene/PostProcessCompositeStage.js +++ b/Source/Scene/PostProcessCompositeStage.js @@ -27,7 +27,7 @@ define([ /** * @inheritDoc PostProcessStage#show */ - this.show = false; + this.show = true; } defineProperties(PostProcessCompositeStage.prototype, { diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 870587d09b03..124031d16d0e 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -64,10 +64,17 @@ define([ this.fxaa ]; + // Hide all stages initially + var length = stages.length; + for (var i = 0; i < length; ++i) { + stages[i].show = false; + } + this._postProcess = new PostProcess({ stages : stages, overwriteInput : true, - blendOutput : false + blendOutput : false, + createOutputFramebuffer : false }); } diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index 781b4a369e48..97e2e26e285c 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -53,9 +53,9 @@ define([ /** * Whether to show the post process stage. * @type {Boolean} - * @default false + * @default true */ - this.show = false; + this.show = true; } defineProperties(PostProcessStage.prototype, { From 266cc7b7f1010c2a900a30dd8b09c7c45209a2f7 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Thu, 24 Aug 2017 11:57:31 -0400 Subject: [PATCH 10/99] Fix casing on file --- .../PostProcessAmbientocclusionStage.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Source/{SCene/PostProcessAmbientOcclusionStage.js => Scene/PostProcessAmbientocclusionStage.js} (100%) diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/Scene/PostProcessAmbientocclusionStage.js similarity index 100% rename from Source/SCene/PostProcessAmbientOcclusionStage.js rename to Source/Scene/PostProcessAmbientocclusionStage.js From 1faf2242b8d9a73c18c2e85c8c9d025abf7faafe Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Fri, 25 Aug 2017 09:19:57 -0400 Subject: [PATCH 11/99] Some cleanup --- Source/Scene/PostProcess.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/Scene/PostProcess.js b/Source/Scene/PostProcess.js index 99fc19d6e9fc..5576b643172f 100644 --- a/Source/Scene/PostProcess.js +++ b/Source/Scene/PostProcess.js @@ -223,7 +223,7 @@ define([ function createStages(postProcess) { var inputColorTexture = postProcess._inputColorTexture; - var outputFramebuffer = postProcess._outputFramebuffer; + var outputColorTexture = postProcess.outputColorTexture; var activeStages = []; var inactiveStages = []; var stagesEnabled = []; @@ -247,7 +247,6 @@ define([ } // Cannot read and write to the same framebuffer simultaneously, add a passthrough stage. - var outputColorTexture = defined(outputFramebuffer) ? outputFramebuffer.getColorTexture(0) : undefined; if (inputColorTexture === outputColorTexture && activeStages.length === 1) { var passthroughStage = createPassthroughStage(); activeStages.push(passthroughStage); @@ -378,7 +377,7 @@ define([ if (index === length - 1) { return outputFramebuffer; } - return framebuffers[index % framebuffers.length]; + return framebuffers[index % framebuffers.length]; } function createDrawCommands(postProcess, context) { From bebc134cce1179406057b20ed4c7102819bcace7 Mon Sep 17 00:00:00 2001 From: byumjin Date: Mon, 28 Aug 2017 00:00:36 -0400 Subject: [PATCH 12/99] clean up and adjust review cleaned up improvements for PostProcess Added sandcastles for Bloom and Edge detection Reflected Sean Lilley's review --- .../Sandcastle/gallery/Ambient Occlusion.html | 129 ++++++ Apps/Sandcastle/gallery/Ambient Occlusion.jpg | Bin 0 -> 36975 bytes Apps/Sandcastle/gallery/Bloom.html | 133 ++++++ Apps/Sandcastle/gallery/Bloom.jpg | Bin 0 -> 66643 bytes Apps/Sandcastle/gallery/Depth of Field.html | 124 ++++++ Apps/Sandcastle/gallery/Depth of Field.jpg | Bin 0 -> 48275 bytes Apps/Sandcastle/gallery/Edge Detection.html | 112 +++++ Apps/Sandcastle/gallery/Edge Detection.jpg | Bin 0 -> 67434 bytes Apps/Sandcastle/gallery/LensFlare.html | 105 +++++ Apps/Sandcastle/gallery/LensFlare.jpg | Bin 0 -> 52158 bytes .../Assets/Textures/HBAO/RandomNoiseTex.jpg | Bin 0 -> 130792 bytes Source/Assets/Textures/LensFlare/DirtMask.jpg | Bin 0 -> 113718 bytes .../Assets/Textures/LensFlare/StarBurst.jpg | Bin 0 -> 195728 bytes .../Scene/PostProcessAmbientocclusionStage.js | 236 ++++++++++- Source/Scene/PostProcessBloomStage.js | 395 ++++++++++++++++++ Source/Scene/PostProcessDepthOfFieldStage.js | 384 +++++++++++++++++ Source/Scene/PostProcessLibrary.js | 260 +++++++++++- Source/Scene/PostProcessScene.js | 20 + Source/Scene/PostProcessToonStage.js | 262 ++++++++++++ 19 files changed, 2141 insertions(+), 19 deletions(-) create mode 100644 Apps/Sandcastle/gallery/Ambient Occlusion.html create mode 100644 Apps/Sandcastle/gallery/Ambient Occlusion.jpg create mode 100644 Apps/Sandcastle/gallery/Bloom.html create mode 100644 Apps/Sandcastle/gallery/Bloom.jpg create mode 100644 Apps/Sandcastle/gallery/Depth of Field.html create mode 100644 Apps/Sandcastle/gallery/Depth of Field.jpg create mode 100644 Apps/Sandcastle/gallery/Edge Detection.html create mode 100644 Apps/Sandcastle/gallery/Edge Detection.jpg create mode 100644 Apps/Sandcastle/gallery/LensFlare.html create mode 100644 Apps/Sandcastle/gallery/LensFlare.jpg create mode 100644 Source/Assets/Textures/HBAO/RandomNoiseTex.jpg create mode 100644 Source/Assets/Textures/LensFlare/DirtMask.jpg create mode 100644 Source/Assets/Textures/LensFlare/StarBurst.jpg create mode 100644 Source/Scene/PostProcessBloomStage.js create mode 100644 Source/Scene/PostProcessDepthOfFieldStage.js create mode 100644 Source/Scene/PostProcessToonStage.js diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html new file mode 100644 index 000000000000..d23a41205981 --- /dev/null +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -0,0 +1,129 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HBAO + +
HBAO Only + +
Intensity + +
LenCap + +
StepSize + +
Bias + +
Kernel Size + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.jpg b/Apps/Sandcastle/gallery/Ambient Occlusion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a0b62feb9b8d3ce18eda5e220d792cea0d5b518 GIT binary patch literal 36975 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
e0S*JET9f`F;NY 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 literal 0 HcmV?d00001 diff --git a/Apps/Sandcastle/gallery/Bloom.html b/Apps/Sandcastle/gallery/Bloom.html new file mode 100644 index 000000000000..fef297b9065d --- /dev/null +++ b/Apps/Sandcastle/gallery/Bloom.html @@ -0,0 +1,133 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + +
Bloom + +
Contrast + +
Brightness + +
Kernel Size + +
Step Size + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/Bloom.jpg b/Apps/Sandcastle/gallery/Bloom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e701d91900a0b372226e22fab35c92bb88e5a5f6 GIT binary patch literal 66643 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 z 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 + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + +
Depth Of Field + +
Focal Distance + +
Kernel Size + +
Step Size + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/Depth of Field.jpg b/Apps/Sandcastle/gallery/Depth of Field.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77339527cc80ba2eddbd74787658c55dac6e2ba4 GIT binary patch literal 48275 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 xv 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

td_*Yg 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 + + + + + + + + Cesium Demo + + + + + + +

+

Loading...

+
+ + + + + + + + + + +
Edge Detection + +
Dection Length + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/Edge Detection.jpg b/Apps/Sandcastle/gallery/Edge Detection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4101c3c3683098338547fdbb01902789945e5813 GIT binary patch literal 67434 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%0D`#81F+=XXx7QpZ@@B9mP!fW%)I(Kiax7#$H(m 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 =~COo>VM`0k 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 Jl&4(@|JggGu&Mw6 literal 0 HcmV?d00001 diff --git a/Apps/Sandcastle/gallery/LensFlare.html b/Apps/Sandcastle/gallery/LensFlare.html new file mode 100644 index 000000000000..05edb3084393 --- /dev/null +++ b/Apps/Sandcastle/gallery/LensFlare.html @@ -0,0 +1,105 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Lens Flare + +
Intensity + +
Distortion + +
Dispersion + +
HaloWidth + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/LensFlare.jpg b/Apps/Sandcastle/gallery/LensFlare.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68ef3d49d03a5c5c7ceb890ed20fc40224fed054 GIT binary patch literal 52158 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
Vhi66oqh1O1n<{OR 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 N&$~Xu{CDp^|Jfq*8{_~0 literal 0 HcmV?d00001 diff --git a/Source/Assets/Textures/HBAO/RandomNoiseTex.jpg b/Source/Assets/Textures/HBAO/RandomNoiseTex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a290615d21b66cb8a5690b89d01268f45f171595 GIT binary patch literal 130792 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

-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
bNZv670eE(ocea|WYJ+=S9<~I+lYlbnY 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%0AGV@2|d;eeu^iq@gYmFr!di z;k?yL01%Od1OhM_6$e>xm6Ny7xmKsLR)@K9>%;DrtG}QSaobOwM)bR_)mg07JqGs} zaO15P0)RkVLSzibJ&6;S!~u)EMODBfk>ed28_Qn9pvG`mteB)|UIj1DJKC@lcx92b zw%(D+JPb-Chu4Nzy-t&r;6{&T`Pk8XK+t+;>kT{-Vq?R+S)8Oe_s}Q?SSbj200}@W z_zMH@fH%MbI6x8*$0G%xOp*_t%JVe;cuT949h1CK0UPz{9kOjbM#Qk8qE~Z(702^N_(Kk8Qw(6}C?1U%K@H*V6x8x84l)I@}|HK?>keSW6g2 zLTsFW1Ph#8P(veQ!oP`6m{;Ki@HxX?GaS7dm^-zx;Z zRe-#G$LHA!?BzNSUsu*4-;Qf`q`Foo{Iyf?V4e2W`h?bCJo}Vi!<71G8TNXuj9S}+ zJII=rf{_PaLVq<95WL30n>DB-pcfVf*08}n7%Ko1{xc`P@yawTE z{#VEv&39lK;91t{zfG_OUiH7NTKzw%TayJpkM=h^gpxqJ1h=npljr5uA{^^>E6ppy z9KhW=_q^g-^_uHLfj)u*&_SO;0sTY*kO-E(`i3>czjj{@iU;7eTz8y*RsZ`&f4K@E zCW+1SXgu%A7aE%s!%X}aOJ#8MztQEX_jervf&Zd|0Oh-`uCw9wT@}~Le2MHx1}o8z z?ZPuA$Upi)tkr>F9JnFZ3RK&_^@R*ih)s(72Z%2=Au>GjyPvf4=23TFgMl=J=t-Pd z2UZL#fzDwuK>*;hGwz$4N3SFEAiNrCbT}S7{NElwEGdEgkCVlk@c#*MO$`6%35Ac& z=J?RV|A8gUV6oXgtYi)~(b31%<(tdm{|5dCGAbfAA%)D24F4u6k@dkleglIeM>1Jq z^rSTxirUUf;QSkOzi;4wq6>tE+r+YC6aFS#>^gml!}kiX3E&nR!;>|N6B`GfiW6CX z_fcpz=*<2LR4{bS`TZBT064`F|BAk5f9kxBz;i9A&en@-`E^^vuH_-?z6dV1R^n;o zniqoe@Bz^$yfV1eu5XZO0HO_M!T6&j7*G5WZ~PH&{1I>b5pVnvZ~PH&{1I>b5pVnv zZ~PH&{1I>b5pVnvZ~PH&{1I>b5pVnvZ~PH&{1I>b|3JKPZJkgNT-XDE&EN*E34%dB zfDACf&|D}OmcxUAx(G1O0k_1p92iOfLudap1|F~he|W$EAOiXT_@)H7l(^Q@`r1Ac z;0HSbA6Q?V!Fon;IB^zwdNGN*blzJSx{TOpy<~cvp1v+o53saOj-xZSu{iip7Pz); zMR@h|Wdc5uX+`iib|t#T*{~ua9a9om-YITAjFfE*b0)!h6W%h}A~`xPn#G~xlcU)& zi5AILgf-$8V4eroBjDFiINPiUYwtN;dH_{>MTM*4Hi2C@ii2(MNzznnSvbF!(7g(|)d>zz|9XoV)80y9*gzM>> zo15zq4fG5QbU+N9#GNr5da_PTqS7}CwyZ=(LgZR>63?RuM&6P*Rs@jK^&v#ZeJA^G zW%V~iSJ(d;H9DFnfHks-9J}pcFaOgdB=Xj>^}JY#u}KLGmfdz%3`gm&=3cD7hWl^% z`e$s_Rao^s}`QGFooqexfQyU(4aTYcS zEIJs(^Z^5y-)8x*$ohYI!{={pSYX_fWkuk<@}omE(a|^Z(KoR$G`8SPzmWxzxQ^-y z>JbwRkp2s@xzD%vgZ_aW%Zv=$`JbS=x>`_U5;^o328(KIMF0n)8yU&8FfcHr8|mwt z=$J9Xz@3Q^5!{)94ADc)4E2o+m}bVIYkYz2ZDScpJPGpJud6*XmI2cEE+h*h6J{vU zfKJyjHa2AH=_K#L(EB!JyL_M&GEdN08|3zfYOw7V` zjP;pjI{KzYMmlDpbTb{gse!RE(S&YbW*kPqGZ_|Pu?f+1P|qTx>ESHBs5n+Q0sj{} zYk?8hSSBcRL!LQ+(As zi0?mRbe-%DFaZ5O&i*=DVr&>^2R(sB4hKd3pD38#f5(3!ef$5+y-_GARH8mn$Jor+ zOvl{Z$XLgmXlAHmsLu>FGd2!04l@Up^8YUPU&%8f=rQ3e(EsWY{`bdY8pbd)3N2_90=#nBVM z=Uh0fghVSsSVC+xeqF8OV#4v9*sp~(9sh4d#AGEz{%z9#PVjqg`2Ri9|4VK9&s@pB z)u#W;(%0ji_tp(v?_Yhudf9eeZuUH(Cvw1(iN(LO_WxABcXnk~+VJI`ygauwLFnHF-qqZJ`|37e+JdIfs!{06kzJb7N3|{v8#m%N~ z7a>26KP2!&0zV}1Ljpe}@IwOsKa#*-%Ok89@S1!FxcC8n`ayMVNdsV#c1Q7*F$(;fB^dkHz=~4U)9YVkfPo*P03Wu4d|Cx+=-D#) z(x{r0nB)k0+x$w5D!m=QQ3jP)RD`VSNhq`1)lRP2WuP@0VWjJs7Yt4BZL1BH6p!30 zYT&NB@}ez$8lhE|dHVNO;ZpOJM#uP3et)}c4!+e>emEfz?-^>B>5AW9n}JWC_7a8S zM^`#VbhSPl&%-<*q%FO1EhIxF7d;k7`;qXLZj1r3f2^l#lGHCqT>G=yV2Z;Mr#wbo zdV8K3No$6Qpc3izswcC|2J{aEZ z3GL+?Aj%rwJw{ZxglWbQqC(oW9kBzXecAnWlW9Yv-&iAhY>&a4SZ)x*VNDc-uQb5O zp%GOWX`$SiZuJ0_Lb7-~jy70mBTnZFVs-IV)@W`}Ot~Rprs<{MAzAWr!b}^WYIZ1Y zJ!HnY;E7Og&wlLapEbeR$?wgLq*wI%W@S~_W!Mr09Yklkp%9rW4K~!y%`ziYB7;ha z%OQ56Ihy)v_tnbG7#F1cB4 z5z$ayO(8x~wB+BO<|SQm4!rB~8O1&|ICJphD+ zOeUuo;!IU2N*Mk9ha!AbN!T7m<{)Sa9-9Nh^7E2x(V26Q_#dKzMwZXI_Xn-8Pd|7-g>GIqVK$3@kJp z^=s0EoFVy}V#2ppQ(e*r8~s^oimdY}afld>8#TR26@5a^CaViaY@xqt9+e|=$tM0y zUiRg)t>}|TF3pVsvGwSpNQ-a*5|h3#A8gBxTAOAbt88j!UTnu-lmzTKJ{XJTz!(^C*@vA535Qe!0mS1%s@g*vpjUGT9SRAOUfM(FKr1U zSBy$HmN)7Po1tOkQb0r|le=WZ2V@4!w7rPK8yOM%5pd9Ecm^Y(n!cQz56>;9)!3uc zf;T8@W)xEDM^HFHDdb%sP>-?-)OjBmdfnh0+;YvRvv@x;pM=vM@7LzG-(YHNqZ+$N zjHDkshMx4bK%^v}L^qQ7&688N_r!SgkDjRSnSCk*VE9j8ndu4jtHlQgwcL-w+1ogi z$iPs!CZ*Yk-#*vqLT24U-4;k6U4xkg1O#Ei(ldHTr$SZfISu1%3E~RqB^N`mB~2~Zmguh4 zh4}kO#Yiz4I>8S?qo*FS^k)U*{lj(Y4BjpoctY?iwO0n8TWeLEs?gr6&GkAWDG`$D zHytXUt3%r)M4G6tU=rk@1M!<^%-${H)7J?)#A%FXT*QR0yw;hB_C8g~7%IGR#-}Ev zrFA;5E?Y9iT5yEF0`4IgCZ@el)TQR~dM0$9_@4lU& zj{~WCj3!pw9V_9;^lUPqaoGxUtRuyluXtAz{8gnxF^O zK5=b=OL^Q*nmkVZaJEpBLKV!vV+X6F6l-=k;*pS9T6_8^=2)&l^10CKb>;hEMM&7v z=%A8#Yis(zke?G45l7FdpUd#Ltla zE5dAAodutk7wGmkljaUk=8g@`X7Lq-oDmQ_QJf+mU>k~+2*G*J8LU`DLi4Ai&O#HG ze?1xn%d(e)c)C^j29YBD#m8D1@Fo|5Dqt7D%}R3+H`kV|Y`4MIc?^ljN@#>Yvkdt6 zBD#VG%pC!~jIPq7N>Ir#<>Zb08IWgCI|v_W@C(~RMjaPj7CnyWKyMWun?CKJ*fQ_3 zQHTpYzd?ucYgP+CntaFQ7q=ROun+Nf{OFTK_2&t_>a*=4BkWE{=l&eKu4Jl2F43Dw z-*MDMedm@2LdBNwg4v%1p<1Q)HQ$`Be=6)Wd#qIXkoHockJv(|UH*x^0@u!L5W$v@ zYHZH58PyM{TM3jH6ypY$6eRzg>7;&qU>ItfPAyZ`Cofo1`WzYuH;5G zMK#?%y*D^$u)!65;`DIb^b{vR`F$`jqn{{2hWZ0#{E~-!C8#&W?c|^wuD|TN;HUPL z?T&j91A$>rO-P@E;km65We6gr+KJPVpN5k66u6l~m81FA){9om_E(>9yhHPaV|F0l zY^_`jk%!>ZQp*IqMag7OF>VL8XRx6+KZx?XeI?{sboIi!dUSG(Q)9=eGA+PX(3KiD zWsK#sw+R&!=edB%pOg=&pO`^AvXw1_3ND^;^s0kELnc=aYv0Blqu~a1r)wZuwGpGg zC>?EanIC(0&$j(~_EZ1n;}p!}OAz^h?96)Be!MrZ6n{ur7+?n68sty1;N(xh z0|?$I_4Ao_zK(vXg9ly2HDqZveQhexzGHm-rO8jHUDPCNqi$8r;&gO98Y8zI!r;U_ z9kBCbMg=E`CS+{0Xj7*2K$2jQJut?Hk4WZuRV!5_gWfj5G*ysL+#`{!>opw`CRMroe1tzPDrmPrgvqJ|y3>)ARku&1KTsHnLG3hD)1>SST_K`DN6Z@b}i``#86=3*{I9>(Ed~1(z25@HEJ3{J9Bv| zDGYeJDT`G>ki#{RkX7AdOrjWB_L1*Zdeu&M9DX>sYBZ+uj1St{k3Y^|U5D@7Wvy~Y zRm~1DeW;UU5kDkdxx?87WnOqvfd5&-m`49Wa!)ozzz+|>d!&mA34~~qr{ifEA@O|p z6m4B~f~hF6pAo-Eagz}o*QfI@`*ge2Xj9Irci=nl=b8)f6`E~6ozC-k&Dl;xk4q_~ zoyCzF-pwNipDu`gSqV*{qB9vIAb+_}g|jeZvjXA^a|S_|J8< zA*KR%vV$Q+BVo*RoCGDWKscMy&^}Z;5u=(XaW2kZd^$y zzWau<;v^M+_L}2KcI*Z@yNdT);Z2n=AGGMeA)sV5X3j(4}$$ZU?n*?=P>lC}Jlb$z#-$W*Y@O?NxeO0^M{ZPE_KD2mHu z1X`v**kQi(f+1}ww{*HxIh}as5K$H&x3xXHeSEk)QzI?&EDU&$k~j}_HoHvqYS3bM zJ+bf*GxspJ*mWxZ#exB?Da(0R+qF+EHlr=20zK&$gqU}oz;lXGq0MOCLs+e*#!HmV9+B9|}&2>%PTu zla?rDDik}ll<3YrMP6fzqLmt>u9BzeHEQKHS_DkXPF5q3%(AWW`IVRr zxFq42z%bcUi7Nq513mR`Ao!?Nf{q^Tfp!jLdiUt#3kHz<(dKIxbClCP(pK^bj^&aC za^*H-ig~s3<$1^O%2)8uZG^>g4^toO3+DN3(6obTCw3Iq;csq-3mA1|q_qhG&XT`4 zU_H{#ZsJHWWM4q#3^e^z`dlli_#g<@2VeFdKXDdBU=oUZ8~3Eu@vrg|Cvq%%XI z7d0s*THG#*gs2h)lZAIA5N%VO8is@%8YQCsx6j6H8^-aMT+m4QT;R5le+@d zBII;YvhQrF_A!v~?qCe-dQi^^pGsW7<1d1;vw?XTkH7OugjDFLh zDc3n&#lx$%J?fBZ05C%nRT5c10dCtPt41TTf>2eV=9hg!TMRIF>aCm#woaXss zR=(bY$+*nfc`3mdmn_8#m=PIrrlO@ZqONp1CPM}9uky?G)?JljRNJh;4uwD(sq!6r z^OGzO5eZashNsP)78(iI?pFECAizE=${9Y;)5dS61G&%V`omVAhP@6}$lb z)9&su^P#6=Xs_|BDE>BE0j=d<5cZ)Bvk@w)p2vzRBWf>L26(aeN^C$22x=+;%i0IE zp(7|r-(_jO$N923WOJzJp;cr*lCi9WS+G7NJ#? z%%3(}t(jbTDnmEE-aFi|0wO`vqKiOk)gf9Q{9I!NQMv{0bZsp^`hdKAeM3{Z8mjJH ztF}Uw<|cSAD^5-#H_kzP29T(t?UEzAk}L8yR|njq_xknRP>|ra70&RakG&)C!R?w! zm31tUE4|5;?Ql)3r~!{9I_Y=3=p1rcO}EH5K#RW{2OyvXzKtFfFeRn7vJTgoXgJws$l5(O+(O zS%$vSSORIkT3&q5g02p5N6AOM5MAKdfk*=^k7)M|2&dPJH938{P<$HgG*F<8c~J(> z9;|f+GU*{%DqGAm9^|1ihiWe-qe`e9q?~NAU~5J6bez19<7*0A0Xf_mUs^jFXJ5qM zLyC#mtCc0}uQEX!^zo>T%jps!$Hd9X!UM` zK$X%cNNL?ZR!*JAKxU zfR}XJYvb8Y&{w3w=t})I+5-UPq#ORd2CQ7N<=#Or)6m*=0E2?s#r2XOwh4rCT1mr+& zO;5FaY1%$ZCm|tZqvL2P&QjD0Tq6!uUQ9O9^in?K+CxqV7S$Zr?i8?OdZ}5b&-6(h zCrW7LpGbpZIAVOvT6xdMIDaLNQVT(3$TS=V>(?g)6SWg=>kxX>vO{WRg$i@vbwsLw zjA+y0s_~oY(~GtNGh8%(IU-#FK|#czs`e$IFkHNkDn;~}SsQ^&mbb|aZOolYwk8bb zDS76pTH<^AcBL4biYwm8Avolu+j!>j6U>OGxP(6CwA-OB;#!`qVG@9q7|W}V{LDu^&Pa=DvJA4$Qk&{XlzEP-r z#UV3q;rcEMMMncpf~ka&5>oX_PEH2BRZQPh91et>IfA%>obKK#Sw*Ra49fato{{mJ zj^A84Dr_s#*V7p0lVc@Tqw6LinX(Cio;XeJZO_S`pj5SSVl zL(}v}T349ioFp*2tl?g5T6Yw%R#xJ2#qKaK^(;c}WI@aAke0K~Jr@fi3{CM63O^~q zQo?eBfPm#j9NwXK)Uj+E&W*2^+9g3k_D)Yt5oEFb%eIBGBDwL4E1W0`6Pe;c`+jaO zhNyC*$n}anS~5A=RJyDWngJ+#s488VOXCPDAZXx63qIKtAT0rj1-)GXy%IWaof zce{m1#?m`^-^VGXgs8f%uIbTS1X;9+qCYvn#S@^lj^r-eK-TlEtShp`j--f8%!UnC zmdgDdS5=4V+B`N$m(ERJR2N6^dratKW%o8WczN{J5lpbkIjVi>bMf)HSP2$R$rqIwP&cIXv=Qw^QDGIpZL~gm;4%msf z7-MAwi-gF_$_Gqk4wR-Xsfr4s7bR3sq3Xh5gs4u_O~`4eA-|EiAqO@}I?>~$KE*LN zk%B%>^(UD_O-#i2hB3A6BkXe{Vh3elA^8aIwM`b4pt5#qc7B^e3Zdqe7-#CZ~#w6(m!XBVtmLBk)F8 zOG2)fZ32NVY=g@j6NX_k+qyRKLo*%cYpfvo>|>6lH3qWjc5#TZe(u7wZ5oh2aI%-b z@PvekF^&&Dkfpr;%)&W=mh=4+WrPYxJ_uQ{jk#Hkvf)J4=1wKsY}%y#StEUwiXJsF ztO}|DPNnSP*kF56Mlp^8{Kf7f2);S)P+j-4mhRSP?eZxW#1-3>$$n2oNc;3awye!H zm&JS~D#4ZuzkyQhGC`NBX6DXIY1W^>Q%6tG#I+V3BQ`3?l%>&W;`FVsK0;sFV}hx) zP(5F@iKq;}FeP+Ew^a{)UhKMuJk;qOpCW4Iyuka|%+9;JNcp)RNG_wnhtO0T&}}9t zZ&b};(uNMGAg(sc3*_aaYAnP|O^hWhiM{*UrdK9LCqWt8l1ACKHI~HDVksPS9tG7l zSK_uMhnmTiA(H({&8TCT69S`VM#@(5xfv{uFCvr=d$d0LN^arFXI+y~Ci%@rQT2`q zQN~jIBK?F1dX!}yVg(y5{(cKI_a(dIjr09ze7;f3OzD)%L^4LS{!0H6C>ZsPN>>`& z@n&+;2V^8eYNlzElZ#U;{e0Q8SDTxgugIfv^HA7&rOrfh+GGly-$7VVaR{otm|zIQ zUGl7Z;Ci}t5>Kw#v_Xl~cUrUj5;A)he1E_(B{U^2vvPy2pJgFN zrSyw#P;A2Q+Myn~Q1lBFMyTN6MFB?@6Db>u7-cq9l<_*gXJyhO)k3Oh7`r$fJTcXO z+lHQ)$PjTYw3Ly_m)~ELLT{*jTU)cGi*oz;C1Ghj9wJ5(RPn=<+5tUOUXo9gEx6d|E5aQBgMOX$v(g6IpoA@>80I2=wB~G>=_jQOSq(>eF*F zLe*tq0PYe1qy=YLEHWLiL&Liq8lPA3fj4k21%*TD#1$21{TQ#O+C7z2C0fR*FfdRfJ0`mOQGDTOe zW;b9nl>*DA-$P9|7!iib;J&*Qd&VzAAPGd$;>wf{t+!PWm1Y;^hYA$`kPDlG7$$b1 zR`&Vl&2}nNb}lBw#anLr=B+{7<4 zd1y4*Ez2=PycJk+3^9;Zw3uWarqQKpEd&dxJ%0!<)TAUUN2r@gh>3}dnTlG9%gTUi zGt&jedO&69ewHnn91($!QcqEhN>)`(HkHZE#m>|2SZ?NPV2};WWZ_&dOhi7IlIiNN?&McFaJYrQv+K(z7b{pYu$Mtx7)K*L2q=jzeL3gR5 zp(usZ6{GBp{Qb3`h|2bGl(Z$fA5)~DS09E(=O4(IIUp?$9&6~?XmHJ0US0;=ORDm` zW)#R!as+{ZHLHGzah3I-J7p?rmhH`~ z?XDfjCO?+nw5ujX*Gd&%T#%98r=4(3+vA0f8qy)15W1w|T?cg&xi^N@A0=(b8hF+% zYkxqrj%;CVVrgY6W@2h$Vr&U2Gw2;}i@25uxtJ0c7Z-cMr*awI-u>R*WJN5b7W5k~ zjv{4o|6s!n&rWn3#qBeow6Mr9d#iw?aMM0l^BV1f{`5b+KUs{ zrojJT(m$K5!av;pzHK58IT~Qo(}PDr(-s}2@B+`pn-D^U#-cc5qR%d8(HX}u`N14N z4LXt>VCh(pFCgsDzckjJEj(-xQZ9xCZ%{I8SA14hRzN2tB2)wh+!H~oC$97hidtHl z5GN-3d-e4dm2AAp`jFazC<48GdMclEG6;=#oJejDCV)L7KW$k-T%l_?sy;UX$shF?@i z!Ql8i5&;ImRSIaKS=F3g48dbiy{w9>YYz?TWnPXNN?xZrCdm%~0GP5*nJ;%DbmL_`FME2E(D!f&_=3Aw`g8h1*A{tH>(U&a`N znq?tNH{13CwipDtG&!4a#fEMuNSq+CiG-na@Fv6&iZ(ZUa7j#7IA>s=2^Il~3zNyA zPbbS}_oho|Xl!!DDa{ObXR986*44F`O2sLsz1yyFLAKfsaZ!_Xu> zOCynf@C<^o#d!t;)IkxYC{J;J#<)wh8U|&By7gtFu9dW}YpycJqARcXq(I+)Q0dO=)TFzSf-VdYgFgS(~yz$dEu zy=}l>f4`@`V%JoZiHy*dSttPtqqhu&I$)VpVH*rnk&iqeL@u?J;v<(b710z-o?tti zjIqPoMw+<6A^a3|oQou##$>hfcMU zFF`7C>2xyLCJ{W1Ge91`*%6qv=?B%u*wV;SR8$nl`{6Jc86kUyVxGJMwlPuy?C<|! z>doWX%)h?zAS7ao*n%L5AP7ZK6ip%f@MU&@KI9vtYt4>&`H(9%mu1fl{Th@MJdA)X4)zy@6Pyge=g9>t<_5h?Ul`IhmMYv{RRy~Q+9|i~#1Q=%> zPzfA;V8hO{mX|=U*vO+-?CXIfPvSHLX}HR|M0odhZl)AJqws)UAgs#3Z8r-l$iYHc z@El#J6Da)#0HWyY`ff>nrMPhfG0j1%XjFok$nf?iC;pFW<}WB5pZdRsTG(9xkPSp# zswb65jI+{^lZsGeqFfa-f|My-upwZS26YJBA4CEW4|U>X7y^b{cSATUHYD_i1IKB# zHSUNl%i~Jtjw;=AJOLI15#eAlF}spUJ1?ckSqo3ZdJCYQ3?>?giLUIf8Nh=H1S2Cn zK0YokJ~cHiH8u5rU6_%jQFQ}Alzuc&YU<;#zzdBJ?Oi?^|>s?0f zh)6D)%99Xn?x)ym$-C+@6TKPUfY$&{Gk*a{lmCxufS~6Ic(E^;Ov0E0xl*iiA=*;C zAWIh)-tMA{;fzIEsu#Mjzl&w1Q7{sLDX?hL6=R}YxI+vz#WH1Q#jdeuZiE&icivF1 zDc~~WW}ZssW*!UUmVj3ND^M@+zl>{GYVm0O>>{9<|Dzgwd@4Sy_P=Gs|HU_e?ksH$ zZ4C_#>D*jtX(&`Ks~*EdIdgI5P$xM0Gf08G@&!OM;43Zg&UH6c7e%%hXY9;jAU4$l zQ-?TbdC~5-25F0sN?!OTIyv^A;#d7wEt|9yyBPEL-T3majRhsiNZ)0845 z&=BAm3c}lrrYgCTl)WmODd3qRWn1{mM5+}oH%8y&x&aH6gOwJiarC5FW(8=s4L}YG zFGz8BKh;r3VH`o_;c_ttUsLQ*`S~(1pd1C-1)#>-%Fb?j^S=TCVHofoZRs1|{YL{( zPGQy{i8B;trY0Mnw~{j_5^H=mFy1L^%6L8}SZ^xQDJyGgdFA|M#|uh8kV<;CTF zApFhC{x8UPcNdoTX8>63?*hp3^z>W+5~nAT5)XtxDO?PK49_rxQn(Rf{6#9zWKiP{ z^BfnuQ7p(xQdXqeUAijiB2r2?0LJL8o@(SBk7VqAs2NK#ea{wa>?lIf2t5V~Cs1 zDkKsqaq(-ZzBp8`v(aM^J!LM#>g3euL=H|GLA-iY?Fi62p=2~G z0ZG2U0AaF_@c`7Do0$)he;HJ)$0+#%v6Dh^srTh&>#llM8aNRJrm_;~p+m3%pM+AKqHNuspM4^G z%{+PQwKz9kL$9fOakl;lOx`u3OV}&Q8pwJxvI=Mih&KS+IF(Vm#d2*L0sd^t0;&+e zo27H5p*eC{;26{q2UQhIBpgTtM1ZN>b4^fC@IDtUmS6)FBht{al45n>T-}iY7tK8J z^)aH7q*xd|lVQOr0dxLPRcR)#hSV4gU{k8}a-C=uK#nKrGdelk z&e|>j=uLIu*fT6~sU~RQ5Lk+BuH=oi)R83B;TAZ0;}|D>fxg4kk0n^Mec_)(gy}1t@2Lg;)n2o)8+WkqwWcL^4+`1DZLXn#4ir zRk%#B%bWTEYARzzu$chlhiJxkx9J4NrkdKh+L~24RX|awQOT&~SElC*I5WgSVdoT) z66st}=nT%GQ6UmgF>&e*gK=FSWdvwq_jY;$H61(Bl%?4;(wZ}tiyqUxJ`9PxW~U^{ zpixgCBDxZ1v0jZ* zsMI@-KOkeO6c4?#WDX!cBEE%hu1+X_;AyFq{nN=rgC(h zr4I;on3btW8~t3;g+xXKLs#e>F+Y1aajf%N?Pkjs3meX=(`6h6N{@MrEFMZt8IVDX7SLR=Uf?OL{b-~&crhT`Iq$w(xKzVd z7ebcBKbT5Y%p!@xvTJ+75Ijy9iJd|FYOXLC9vSbXxZdMelGn>x6ACv0K1V`)Tq@es zLB$GT=C{1KONqx5QVYv!`Fvow*~MoHuC3&Zd3t7`hjU2+Bk7!yhFp1ZX1xXV5(Si* zAUSAP1smU=rMUMr!=hUzzCkFhet20ny8SvzHs`{%L0-SSQ=KOzLrRPXk1Z-sFqRwq zAOsGyd$2kMOg_Dc7f=*1p)i240I{_sMTyvyID73PxeV}V1lM=gTLQ9H!Z1HP3lv3Q z7gpVyu~)%`&c}!43ak}1Z$K;cU7*)FE1fgfbU0`<-bQ-dEcq4)Yg4W-g*Fc?>$kR* zLHA!1>`MhVG`r`t6IozN8e9?+9RPF>{hQGw3E~z4ZKv;K)+diY=#=135ugw-6)g?S zpNDw!_s3v`!rc%eLBWYcGEX9M)Q)IMD`bZ^*Nw7$h^gP_O`R)3vQUx3U!f6W&8?M> z9C0vPjzz~Faj?Qlk!#a6gna-RtxZorXp3hi`!|LM zuH;IYTN3tKR@OOsZk=3N<@ICoWOTc(o>Y1zm}OM0^0Y1_vm3>ucrpX>$gN%ZL?Z`{ z>qCv6#iQbEMe(py)AQQCd;H}pZ5d6uX;~Dkl8}OSxh_9kfGixF6#_{)o7J2VmMhZ6 z+dzb(&0Q5^S_)d$nXl1`y>F=?A#!?XXi*2rU3sbx6~7Z)(AIz8(#$sNFGn&rE(P?1 z&_rIna8KV83~*1hq-w)FPbgrGSngky9AxI6pA_`SfUY6M($P~kCLcy{S>X~r*9{C; zR)8b%T+wb%4;P(EK@9Z>dil${LQ&UduOL@7Y@bFCJE997WrdGsH?g@0)WS@@iZ**C zr`M9K5_76Zg3r%3s;dBvVr zAsXB`)#maNv>pR!E;|O&f0QW3r48Me>FLc!-h_ke9@g>;dOR{rl#m)chN2x%_2$&_ zsnk3LskJ!@OIaEM?`cG1Q&XuLn)y{ZTx?`+=T7)x4X&Yni{^D?>}B~aE;JtJB*Wt$ zKygaaWx3w)1V(@~T0*(SL!9JxF1sGlg!ic=IYm3lG`ja+Y|HDpEgW-dWF_N+xL6gu zq@K(m`mR1Sca=(1{aZ*8y1eZSZ=RVI95LZ3Q0SxB@HXggk-o$nWEVP z@9an_y{am_bTO)mh*0iRr8w+E+pwlUHU=~~jrKG>Q&wc(jV#v6wcxT+5dR+F(VYd= zE-;sjTJa}J61C|#F`^H7{+_7`cE_}CN_rG*c&hA?^X%s|wdjx|Sc(v|yN$Jt*v1PteDax$8^(uLJM_LJrhLJZmIt4YRVYje!gj z=^^@9*j+UktCL<23o9ZZp6C+?xOhaHg9&zBhFRLA$};SvmdFn>4jcpbLTE@cSL9JU ze5JlLZZXFjjZ@ZzFiBBr=E8^oN>Rw%CN<| zvLw=bij9b}7zL?DqYH~ti1M*CE29B6J`7xKD!u|upDV>D)k@}q7A*Cs92`hoxN5&G z9OJ@Z{Jf%qQIa}CbuXcu>P3aJoFmIt{|Mfid3QN;b2w~dusg*{X7tSZXDoypm8ZmQ z7{?KLB7r>=B1Tm;dG})R`dDWPp}C;NhyrK#hlH!au>*sc9p`5mi;FV4 zZaf?mCABI^^l#usA~O9hBzkJA#>8cyb3IVsN?QxFVlJ56a!ZfW_udGQR~T4%RE}iv z>82;acxySX1S2WI)+GD|fmm>rAs!eN&B=>DolP$1Z=eHk`yA=Pm3Eq+0gf1szB4GU zTn;6zB@NmeCxvv&6-pk zYHT{D%brxWyK+p~@I$2)VP*(w+w+!2u{0GQu{5@+Yt1wgwS-mJo`I>1yO#<>IlQBH zIe5JcXmp1Wt_Y#3$C{fkvFJA#&03E}1f(+wA!jLS9J-6dpiQEWkjuzus!xA(HL$@v zE*l3rID{VS9+u8qV4H-eg&ot&$k}VbyYL!Bz)g|sxlmaUr#;0r;|yOg!!s5ptSG49 zpcb@9QVFHsCa?)iTskQ)gX9=tGcg{7uCc+J@?l2a+re$|nV|6#$|R5Uwbe;e_}AC~ zXA8eEcvl238m;F}ouToh*{j3y;mH?I7K$Z363fU3|MG-M*b7U=7}Haa&+bJih3n2N zrv^|A6IIdHaXO0qok>9;CcRuNs$gh*c5ER}O`D6s7&+AsbB`c2(LL6TrPgUxVRrFFP;Iaqy$CH zoFpkC6m<3c0It@~y+QJ9rxU=pBoHf>F0#?rq9lh?oGP%vt>WIDR|17CVE2rXdM9v- zqBvzY+?B)d?(EFzPxc#}djgh|;C3S9q$1Vb%2TfT8Pq1orz$ejcWKI;4WeWgLoujy zr7J!=oiVimjtkznb<|L)^vTa)x4JPCGeM4VQkyZ~vlu7gG%laX6o0Hzs1W0Ap{#-S zZv9nel5&6WPC_bXs_}SkPIv5cm>gJ~H?8ihLj$ftb=r%mVj|MRY@;g#Gj9`_vqHWZ zRt2$Uo@1{nBhC=eNQ#W~%5`E9&OO7kN6ZJ=nc2T7*|L(upY7X+WBrAjl^_+FvYBNI zDAT7*ioBZE3Zn-DAeSnNzjYpykAE;Q@SrHn5|JSgLuY zVJokY1TnCgvOYWfi3jE^btdf`?3p%LuRWNujg4;HsN$X@4=K)koS|TXAbLHpvgqh! zvk+P%@l@s?WcGSbSlCRat_LU`GYPMjq)3qXyKyc`l8)pGrZ{An?aRM*DyQ5nP`Ueb zY?8OQa~25BT(Jv`Opo^jIio46Zl=C_Zm{3t=%EVzhvy;ymR`va`EYIC;GR92b zr<&1lnAx-La(U5ZhiZi$ih2jhP@!!!{8XJOhpMG7!40<$lZLF%24yy8rGiRCiEt0u zF=B(jeR(r+);A-woRY4WqN=L?Bs1h9ntmaD<~|62dwb-Fk&`~z!}B*-T*GLlz|=>Y zdc6Yi61zc2>h&Uj>7I-*6qL(6Fvv(W7|N)Rz(T9|%VCs*{n-5g*h7X?6?fb$a` zq3$_s)RiR?g^NpyQ?yi*$20LMr$y$TpvH+BLgT1y_16mbkKrl&RR$;6C5Ij9b{^h% zH3%~^cAIThnyEhmhKBnM+a=SfzC648%T}O?DbK#V{SBvOyIA+47q~kti&9I%46%iK z@u*DBYOdiz&B>76x(T-G$OBb{USZV>`&ZiB;hQ|6Aq(H@mVoRauC5srIYQ(| z^q;SUW4XBsqYcUuSMo@tc2xi?M5l`q4~mZq{Dm!OTARY6U|cC@Hi zN>x73{E*Mt28OIFR0a{bWo>G$c|A`K+GW;o2ff|sT2~MBj6`gU{7_U6 zY`MX0zR8QNTjXlA*8HR%P4q^O+398t(P6=)UU!6Z51iQ_bFP>QuP%_1SbbpIzKIYS za_~KaM4MZ%F&oqR8ZU;O=T=VLyP8SrQG7qOM-E1kDjlP4MZjI z%w7C0|Ey)BsC?~Ih4~e6J(!gpdMo|Wo03Wo;(N2Z9aJo>E4M$*PYxrq8|PEI7gHjc ztWbfz234gv!&LF$q}t0h;(n6B!HrFFDoegMw3OvgP99o4rb!s7(>Sr;hPL8CdPe$M z5b$_l^$Jwg{46|E)ps|pmWp>rX_@Pj~dq)9ukC>uLcUq7ov@)owb zwwdpq(k#hf;*IPT#QC5`Dam(Q7ApSM{*6t^<|rDG`=gfA$zfXJxW*;(Sw0?)Lzbgw z3ha$(8JptW#!jyY43S@snwth$ih@T6QMHrAUyhzAyX+2W1ZcT+ZRxGQc)-^zvb_c? z>Wh+Z#hBpkx;w5uDcS3`jU7Vj9xEq%FMY-tIXxQUf_X+dO zlLy5%9}G3^)US9Zm8A~wVj?o#Escm};}=wgMELLvl(w?SG-Tzgv-cwsEht)|S#3Bs z^pd!;n9b?6xn5%n0l~KchFZlwJz839Go@}POMElSyj-ux=a4+u{IP*7ud7-2UtkU_ zeDnfxTlUUE>Uk};%dOBk+F^oCb*)9GIP{LMtXatJVu&9#o?!@XcxA6QegVR`>y_^8 z;kmkUt56=+(=dwoe?IUF6;7YdiPYSSt8vvNli56YEpjrg0hH| zJ)TfjH%m@fw3dYq)-=?2(C?Dd{S8^&ioQ-``QlCP`+Qgi3k9y-q;oUV_zh;)fGd-P zczv9aTggzt(H2&KWiu(4ATiAFTzz^gLt$dMNt#?Y32kwwTuPRni|X-jMlzcNwX#TM zOjQR$!iu^T!pMxj?erM$^u!cYiZoEuFCCnbt6vd&6y;<7VwKeh)6v6JL;|OtGerKAL%H~YB$2P%8!jLVWZo+$n zuOsw%6(3@BjX@mCMazu^zAIzPcoXv(f``~}*r{wHYCjd4Zu{@nWd@Kw46) z9qDa&8ucO|#^!#wGRwnHWp@E5KM6HM=lL}YNs0$lRbB>OTS4|WSu-JH_aMPh-!;N} z#Z`+h1_wMx8XGbpfaI0fj*ogFPn>KKznt{ z$p`69ZXVU2sJ!i!A(OXE?-pVon()#@$XjiXWsq;`DohU7PET}pxYI)3t?*Y4--x(% z?rwiXc0ak6RZ{I!b299KdwacV+BWk>rT z$|vE`{aXnc9g*!FO&q<{kS*VmC(4AwzvNTb*(Ge&HwpPjO#ZGe-shH{1iI5qtF+~} z{vJn{hTQ*ku`MqLp?+P#Z6Jl7C+2C5g25EV86^HA&u2qWN3@b^ZJ45D zu$(ICiu^=!o14@2A=Zw)t^M1C&iA^t?tF;4bh-3dcmtlS((C{9>qSE+W!rOVXd0dd zY4)fLm^BXICQq}_;4bIRIfEXp+u0>_62n`KcsEVRclzt!#+=d;ToOB3Z5TM|eH;AHMnJ)%~fixZxc1kt{R zG>qxqo{Zcu13mJvG0=T-S^7ySHgCDwBmvcy?{}vNXG?nzeizkHbOuvYYO`e8^;m{jNv;bnMBCTK`Y?(`HgaMbp>(VR< zh)AeWCnb{6xyeNrC?C;QDA3eYD8|}VY9K`Y2|0KaY*zY$R61~lk2w*NpIp8m5on;| z7NJ#lGWR%saV!j_+S#uTBVmhVye0kvQ;ZjiVe0Csni+-p9^vT10o@hp^HbQjR$?jmU*;bn!A~qNs z^YTnr{}$^!vWV;H!GX*0(K&vh{9w-t&&O!^4iEJ=(F{DIVf?u6(%%_B>0E-t^ z-?Cf=SmEMl6r9Ye_thbzdO79lh=6UJEdl$?l(^pH6(i{pwqy3FNs4TNaQg7{H0TSS z=lBAbeN_3ECnpVg3#RBCyy1shJ6uoRrnHPl&aH`pZkdG*HfwU>3y6Yh@RLkWKA=mK z?uC?g?(funEYiDmNY-n~jwtZbH5T76vA7ScyXj?rXfYxa3vf^;@2LR2BV?!bO{xt> zYyeO3OFf=d8-xV0A|wXoGCeIFj#w($n!47ZfC%hJxbZ<`Akkg7$+=b_T*C{J?iU) zn7=-mXna99+EN;FH?}Q-JB*daAF4a;{JgK+Z*rbyer5X8IX<|3 zoC3EWS(h_?#_v6$`*-bONEE)qBV(HzUZ1Tzg@WcgY14x2?G2qC99p~U{@Tm`UihDK z11Ud+?2~HTktzum8Wpxdr3Y!r>Q1A-xtls>WVsrZx~xCxOIcm*GQrMCOaw^94x6Y;nh0`yP8qmu-_#$Q>i|h%*IO*&$egtcvPX0> zNilr1tm1!9h8bCdALz^Zx`oo5sS+ttV*0L;LVlRF(LlE3z@5g)=++!@x(ZyLy?Yh2 z*(;T27WOzPId^(kTuqJYf+VNDHJ@D=>J8vvgvn)>X%GmxbnCC7OEur_cTH}9$Zj*` zugR=C?&UONBhr_Td$Y~h>fq?)y{BvSB@vY|;|WUK0RM2K;9A?@ve_213Je zvlQE)5?yo{us|S4;u+-HKgd0%#$1T#^Si6rgiOxyVG`< zbL6+R%0FJdf_iURrlO%z2ZR1${F?2uMQ!Y(uEf`J9Qa#OxjSBnSJdF2vSKk1r+>OFcxpQgZ&RGv78 zb33Uh+PhdrqDeNBnc2T_?B8E#n2>$5V%9CsfsTcjiskJ<3A%UT3#-m=1|qkVx1x48 z?$pS65OhHk2Si(0Vfe4Qz`Y)Tmn05sV{+Ekl+R{GC@KMR`p|ERd44BGEhgiS!0oMZ zZY55r@MwZZt@{!t=5(1kh^o4mEZ*;~XbkeZic(7N@AQ;ZKFFPa>#l73WcT2{pudK! z(v}y}=dr79ydHaB?2?Kh4gA)L(+t!Y&$E3SZ5~ZYNE*0Fg)4fO)j(CYuon&InvYbc z$d}K~4_EuS63SLQbqeziG;!oPDpV3YN?r{s(MHNkNa!lKimyiecehsJ;?Q?p&N4_C zC0P_NYbarAVL!zSg83}#PvimnV`jJOZr09#i%jcpGY9j- z1$DlBpKk$O(`C+bWMYoGgbNcMd02cbVwSOI>VVRK%zuTbz77FVOGTuQ= zz3_yrGLDu0HMwjqLr&UamcSuu0~h#1=y)iV++WEy>P)%&q*J%(w4{X3xSsf2NCR=L zcG64&Tr7j^b59qH5B!6Z*EYPsm+zH)5@vkI>7$8|7TL&5C!%DZ+##?_E$&3U*a1WhB-7Ap7nbY%%<#^Rf-HbWxVb8eFUO;uw~cF^QEACo79> zzY0boKU+JqBYZsZ%2GKO$dayWgR>FTye0#Hkpj>i0LlLUcbrkIehP!do~blJg4QuD zXu4Rmk-0QS6#wLuDI!_qm}>~Y8X zbVUtyEz~jFWhjoln#_} zgU8c@ym8)AUA1m=jg{4}@6!79O%b!`3Hw_k>p5RzU8LouXZOI)+DL$*yeI^2QiT2& ztAnz~fQ^FRpPC^iDgMo5t9aKUa;N5TkoZ92{-qOJnypRj@-B@oZB$BXM*aHP;(YUV z#-^H8uV&(2xD{G(%>2Wv%S|~+n$TwsvzVx-F3a;?jxYHQ+M#6ufB$>A$U6~ zk3Oz``1$W=3YP4pn8){DzM?uj9Tn@oO87u4wu*3BRM)IdjM7oq^qrdcI} zylL8|W0h}$3$0p)j}tYMbbv{rg8z=+E^Ds43L`I{Rg3)PF$#ER0UuJg$J`lmDny!`c)_ zZ^ygey_`Cmcr<}LeqUqYlDBKcZN&Agn$Kta8IyBtImQ>cC5u(98;|h+c7%1W+NP{I z57Mo4zZ_0ICg?7*Dln8*`XYk1V^4fL6!& z>VtpT`Qr9)Wy0Ps+NF8cJJ$TwWt)_L8{4_izhyYa=7g|TeU+fzjHIK;lujgGonk12 z{&k#_eSas-OZ%+~{ipwcPHCt92jsG1TWK5pnd9(K-|6+gma*-pCfA16{(Md;NFBYK zyvA!r2XisA__ z(!&Z0ULg*Lcjkr{&j+|TxK~%EMlChwcfM{fuq*HLR5AENb!GA-(;b<5v+}wL^e_MJ z=c2LK`4E{4pj*|+Z?5A9UtV$~xK6TeY5xawyO?ln_JRBv`C!Mh3TLK!bAG<#hG5yd zcE!tDq#l&rkcj#WANS5o*|pZ>sYGceDgG6p9I@~N?_EWQ{He?|%h&yn^+U*A0Zfng znvxYo_Ky-79`Dcj7|NJVRr)sXpYa|oRTNPVd^CP`iBzmDh90<_9@SZoG|etu$x-T# z{B9tZ&C9MDW&;Bd8bY4FMu9Ss1iXyG?Q70|YCi3Lj^5t=)#tf;z4lt_{orM-Q*9p| z{I11dchuV2%o!^yZAr7mmP^6;m^;~E30C_!J6k?h!A#-)dRlOCg(T?8FTdF50ESxz z42OKm`SgQk)!H>nZ~WTO6>Cp*UIAV6tK>I#V7F1&DzSgceq!;QaVv}PI3?j(&pA|& zYeoIZL*P*HuazMGVk11680u`)I zKs$>w4V!;nncn;lXkE>lr|m6nGk+i6r|p}EArIs}54qb}FRM@ErB`@%4dq$kqM1h& zTtXbAk6OD|1V} z9xX5L7+Y+W{W9Lv6fkDG!wa!>$d^mPso4+aZOok)NBa0@j?3Do>}gMzdcSe+TCon1 zyFWgkt>=T1W3GA!98*eKMLlK8{^atmF79zk(!Q~w1M{k9&*)+sDXZp7A!}!M82Dl5 zB%j`LFZ{4-n5l7yx;Bxe{QhY(SN-gaGg;m*fuSwg#8v!R>b&cJKxT*n&W9o^oZCyN zv;v-KBciygP2judi8*HMO!|U-mvb48y5_2Zp{e;ieNsEb>})B2e6lvcw6X0vp4<}` zn;5H|-BHr=?nKW?wr*-)xxI=Ww3Q8nm-DA{BZTu&@I+i}&p)jSs`Z~<74rbw-j$e& z`1dI74gE9n=?Y-lS5Eem{OlKuoKHVYM|USm>AtWlO-e>j3RT7D4TFMRY*XqcpE5mP zxvXuB*grN}N}c(rIr_BySa_RMD4V}*^}H*PsdQ0up5b-*QXC%~qWd#Zwsluuz9Zbz z@Ps4FmL@EdOVjPQ$}P>l37Gefn_s8u^%R@pS};DtnFaQd*Gm)I87o#gy^U-Wdz;XN zT7pp%^PwfD1?%I|P#B?b>w3$%GduI7W$U|KiILRa&i(wJ<&MQm7ZY}`;N~XF@&Al= zws(-TJB0pm_Y&WTjlDNsk9TGZmY-|m3Z1mK$wPbpoTn7n0;X1cgZWm&zd%U4doJ8@ z`udfR+%uuFjxWV>KAHT{tkyfK_&zjw{N1^xVzH>wo%UPR&)A1#9bDdtn*LUXZ*2Ng zUWtFbM$$>@I4u|TrQpv+e)b_$Xz+SX@XpeYf7^SvGa7N55=M_N0$*N6247C9`H+#+ z_I%>Dzml0%%R=|rr`OEB9Bux2b?}?{Mddt+iFZp)Ob>ZA(W+I^RATL?#}Q7is)nO1 zZ4yQAG+KjBIZj)`sHI%pLSm?lHzV*{|B}znQP^YoYx@qKOJ|FFeu!xa-_oxNQ8~R+ z%s6Rs=~uLaSH-HBziVNJx?CyJZtxF*Jt_?pCdey47Ijd{{R?{KE_q7#-=j94d5&r4 z&NxnU{@LFGZ;;)o+h3_jO+tIibyLNt?LaRrr_ZL>QZIIY z4BI}UAXxmnEckP%o!k;UJG?`@V)3Z@!tl~sF@1ToV$I- zX1DI@ZTg2Bj?=NNJjdHgqOCFh-|?lO&{fU3Iux#{0Q zhHvLi>_?N!`z786VfP?mivg}WzIAQgO%qeL#Xp>ugokY%k<@uG`bQnUek=~_GdhL& zV-{joyuVZLxu*S8PPXvL4T%F{T(!E9Sy-IB#-uSd`w-YR z_1^BY$MxrVS*XVvledY#VxbSqV*d?Zx~TqpZvYz~v3*p!@7~fCo8q&1xU0`9yDPuj zzatRl30m%Kw0~&rpZdoMcV6@h^M?^_K{xL_++dj1N)}*~|NN@nU7v4+hvzHop7$jD zjQ`7?ElT8r*YqJVRTS^h813WJFRWBu$Eo_lP2C=ARtah zt-aHeI<8Hrf0J|Tnp}o^%I6%17iMoj-#Q9nsl6!&FN^Q*z6k}}I)vEdN4{Q?u<*;5 z=vs*@j(8q89+)jS85L7@bJDe<<#grh_ECt7LtaPPV_<(^_qMgehR=Q9V&Y>1j81rm zl*V|nR!ycpm7jTWd!Bb`QV2QQ;(alCi}O zS{pWB>RIfkb5?ylS58&;q@G>6VLE-LyGjygxHkAMYBMKuISAWq~+)n;kMI97*M5X73X*Vqj8R_L1qkz_)&Tt<}8`6G{ zz7TS(EeyK0UcZ*)_>yt$>O;uG)2i4PN3`w7WmDvCuCVV`^=;K}tEr##wLXPU+J9&0 zDmb0iL*_LGC2y)tgF~M@zFME$SMd5nTWIp;(WA(7XWn>|m)7#zyy&izgAyh4O)S-d z^Iikb3738xcL03m_VW#rKcF5B>tD~`xn_G57Dm<>QS37~u`O067bj>FsY*7K7`{9< zUSpByWh|rJe&GLRaITxLZ(VgqDWst>SGZErHWXS}M|^dvp@mrx@9WdQvU@DB*5cN` zFJeERvnuUu!2k~AaaO_m1^v^)m7*utM^eYrl4AA$P;L9H`*Ln@{#$Qy_a{v_kZt|; zKH9?tx?WHHHL|mR8&0!|H`)f#We&yQVG2|-IzkxzjTJ_aeGkZ2?&UXl> z>3j0CrQVT?W|~&0(1vHvfzn|)DiI#_j#SYhCH1ESVlvJsjuvQrmp_zzrEocnpsfkmtB@Q__H}~eAuR)KuDEl_;)?sJUNm1 z!lldiPH1CBVvkBpLjBb#Z~W=Dg%TqwedImCpt#nrM8PRiVma<s6l+tGACu&ZYaY}K*; z>{lTU59(HzPi+EPVt>~X6O}fh{c2^``_1_dVtp}u=VjI2l?Ig5Ag=`yQ7N5y?CV)IC@t3uN4(}LHI9mYS}-Q(VI(e!`~{*6aZY|XawqL**f zm`-#!c0|6wEG_#|-|Y6k`SR*q$sB*Su*F4j>GkBa?lsxVBm}agNI9c`Yxkq)lDE@( zo3D3&|J-#L=N|$#%~0=KTn6VC-y&bucD3&VzP8HI(9@?c7&&&!^@Ub_REu2MD+}U; zT_4T#`|>y`{G1hiZ4{86sPAn&;6 zYg;Re&k~HlaqTBJ$xn6MtQucCWX2V4FB(lR2)-G1SDDVfe|G^Mw)p^}2G8yj{1fl| zzE=&S^Uw?ROy^x6bnQ*pr#~fSFW-EZkRZyrFZV}>n)OMsgrw9jpN)1`OdhED4OXyF zkL|wF<7+Q0(}Wd3zK(bSge0$4P8uVvdylkO%NFeDZ61|A3I|}vZlkA}%alBATHhCl z8iz>t9%ja$wa8PmcyXNuv8`T9o^_bbSL^N|rr0T=S9^+I(>}@OOF}_&g+>ai%nWX6L!U=HcNHe|@JZ zPhob8zH;2i5yPnVfCQsIpMIP-IxxQzc;{qGCc$uZ@LfZKiB-{{r5xePt5{IVnVF?f z4f+F1Kl18zH&d7BhojwXldcP!Msa;Wm?{~4<}Q1~KF1YE_`$_5FPXX=yTrF`2hzHt z>vTGxE0XHjFYDS%*@_{knv}9S6edhZ!{RaadnQNp_>Z{=M7oNAh+C2BXAY86vMD^F0Db^9ry}r>S&tkt= zK1R#k7oMzcz!Y~Ef#J<@hHmb$WXdLKJV3DCN*jnCv99t9!oANV^!QAdI={;-ULTWo zIj4R?BW2blM@>XF&VP6Q;!jb}ti#k@zCAR#l+VtJFe-_XF~`4bo9CufksdoMdr7)` z-M)3*5Qty%6L$jT69gw)V&WKEB>?oY6PA2Z8s>kS`Ph9~_l55tYQ`xWa~`bBN8GsW zmRca9TQ2BwUpyaM%x*7Lhh7Ojc99gI`{`7EdGV_j`Ev>%UxK~=igdW%<+nQZAJA#G zSahOR`uLzWBy8F8d$1Y=3ZjXZNs5sz-^-!DP2uZpfxbt)J748BM(L&u>|IJZ_bDNt zzZ13nT&CCg^r5xQXUZ3sC$b(pht|o}+%LFP5i;2}5&Y`h_3e8OK|^S{Uj|zrMy+EC z$5(H$WU+CExt_5>imEi1^;YjBf2)5_@<-;!@=NJa_6Ohf^;Ml=)2svB)rJ|uKishN z*3CqD$WKUD>-cwVf0^viwI`eHT)Y-&XdfkQALVmuO1BJhZ~I1Y?0fX9#;3w+nNUaV zf|{z}orqLk)h{}u+0Vyk_MZW*lV#WWi#^_l2d%T71kV!}9@@tJT z^nm_$lb(IvWp776TJK|%3%urAVP_Q!o4E+iqJKUtsJr?x(${r!ye7g>Xk(zWGA094 zhcliRDjNlF(-UfH%Ff9v2$n=2D_p#JJyV(v!4HnF8GW#E2%=Z22N3L$<`0e+cKB_6 ztm(g3A}~k4Y+1VHJHSKXueZdsUrddhbM2{Jwzhn2n0#m7PH!Xs2ah}Uj)uwId$`cG zrGPhP+sXbe0pUBEb_YiFtXq!Hi>vB#94b~%9lO+S+j{JIq@sAA_H_S0_Y&TOQs{Yq zC9aKg!c2h``|3t}VJ6=WVP(tQzYZ&S_dWV4@9{{5b|J+`@J}o{Uwx~Z8`0Tgxy}RtIygPwy2fO(^f#%A#Sq-)k@YJKIP3YbbKuvoMqt6V&)k-OEE)8}d0FzkUp}ZgaoQHV0|qdRnDL+r z*wp5$>30i;I-xBSZMTtCo)Vsyeacm?6O5idYSBwNU5Y7%Hx)}Cc)bIZB~yEG9$)9I zkwACKguv95T}yRKX;Jj%vhe!u#DrAq*A}zypY<(HskX=t-dhlPgw)#kG6Ec@6<{rO znGKo?H1~$!1UG z*&CbB-LIb)8#sX@n2*}!Pd!pkonf@^&OyRi;E08@@xKN4mG#NpOeBX=2@+jp$RF`Q z`zx|EjdDGerI>N#NR|1E<;(7meJc0+LRy3O(yarf;4gPVmMa^L78d*ya_GTH0Zjw< z7^=s&y$y9vHu(!=$;O>`-!zw93+b6^f0^VG@0R%rZ0r5}ls%SGb20QMbqfU1^i=1WdrBMM-R<(N!G)>AF>n7+Yx_}pWp7+y z>HT-nzj5~D1%W`*0b*TP+EidT(v}+2akZWX98iqmS(z zZafYsxKuuZes%f+CZoB;qcQ2HOPvgvPcES4o$A+K^IEY%w1sUzV?xo%o3M@2(1z6D zIqt_Qe@RTn8GRM|yr)?zmpyksAxe(sR6Gk-bCr6-TK*6VHahtNN4{w-5>NA?`l{2ryPNtC#H3`Jr>Fk9wIg zbP2L79B%Tj9Ve+u{l5BkJ$&4cNwrabc}NzY-RAk~25dV3XcdQ*VLylcZvW63z-O@c z#BJYRzlMS5O-S;Ut_g15Wy>#TIroCOIX_IPti6hRX#c9oXd!e#`Ae6C4Bg(i-0W7+ zM53X4mZ0IMGbOEgf`P*~RId3?78rdJo;Z5_W0LptAHDs^5Wf)JkR`HO%a8vd?GVsA>_7cbVMU(`BgxQtmysjUx0U`2+UbHH{3A5)?rz9yU;k+0_c^9ECSv*B z?tYD^BIr=cpU-wobc&8AM*cuvj3cvJ1{Zv!oW9yWM=6v0v&|L$Kc?P1p6%@WAGeoS zN)kIQK}4t}wbjzG#nxC7JB>B5(=vjpw)RSD3$ZUHvBfS*TUu=uCA32mG+J$`b_g|e z%5cb4;Rel(gaC15*i zeqjE7`|+HJ$i@ICU48D6l+u%TPs&U5jNcU87!<-fvf6J9efd`W6-@nLD*~qGjMaM4 z^3D7OFAq+P;KSW~TiZ^ZZKNsA=sp?c=n8qM#_GEQ;`MAMmT?pJqW~Y9W~pb+1$F40 z3}_7v?K6@jDpqz&Fn=D&UJl)Ct9&}GttE-->CTSi6(+3&S~(pW)z% zIp60dALFJyBM}|?-heT>T7)uXpk*H4GeC-q()KFeFCEWv zFH~~=xWdiYc>H-!UhRX-BQMk$<^5&}6~V^>h3O0xx09nafBRoykji{#(#`+Yr|N57 zh&hfpe(SN8J2)cyP7%VV8Ea^&41@gHuH-xSSfFyW=;;eue!x{)!gq69ifuvqn6<^Z z>4k!w(1(_~!e@34+l;nTdU(@uv{$>8cL5Q-F0(t&xswu-v5xqw%d#)^-A$f_FKw&5 z32IZ|v?vtJ-|#)?J&S9q+aJ!%Wvxhw}}!I>}jK+ zkw#C+7~?VH7`m>&N5)7yo9O0p4m~Aqeh*50Z`WO({pp@w!iB);my+)Cd2g*vXQ-z{ z){Cjz;nr1jV(-ptNRRt*cU0G2%ljUmh&WjlKk>eAdTZ-d=fC`XUh<4rct##2YXZV0PF1Dv6J8d`O4A<`X&;*Z4!F+%l=;ryiT+!^ zPfz0MliSgLZju%~}H1 zQ<+hKS004)O}4c+$%Cz6v$pUY$CSmvTWm%Lb@yK4asG9i0MD+?=FEPO^7-Y#ktgW< zb@SurhF~|4w_}9-^_&<>c>h+ks(n&MN2Or%iKmG-Bh61BR@|1j^$M%qoL=_h0m7Bc z#$bAyWZT(ydIsRpTFPRY;Ek3=eeD|qb8-M`?m?tg(PC&fA`A_nm^Ym1Qdvoq@TN^q zQIbBmrKF4161)(k-%@O|hraMkHhgaCgi@s2i4dOJF-fu-VXY^g8HEMv8UOpI0-8j6 zkk;>$-~Y_8fcw2ZKVlGC;oRIKOIv*t8ponc37eVqBJ&#*lwPd`ga)qrUrP4j z)j3J{J@C0H55qk_7uG?dH{tAzj^gaz`H2y^CAzC!Z~vJaUd`Tz*`jmH zruP%_N5*_*8626r|4^EnHxCIlXts33Lwd0Xd@uqqRjJpv{T1uwSRhYO^-GcUvOBdk z@LvkxHKOWl+^k;ndhz(eAS5nNF>VZi}p%MITU{#gdlYvAl*8x4Hy;X8kl5 z2Z!&+IlojrD_^+NR1uAqtBytx9Y6(7e47Lc=`-DO-f(}*;yRwDS>YXnpX%vFBvKC! z;o3_(@<|-;T`kZQbOd$lAXWNAM+kWcDE-I>n`}x&A6J73OCOm3&iA+AMO1sD0jc-o zk*|bMPXoHtV_rwLnvKwQsL|^!|u2VnT7(>7r~(k zBX0mdH!4>_l&&4sr7LlOeNp4q`3|!GO~6uH_%ynHbceFolD+1HUPHPV3&8E9F`P*M z&p7?81z@6|!x`D&IZ`j4Xed-{dY|ZqoJzTvu9@l+4`&$}h|Vk%?s_e#rGIxkjP&^f zeiy!(r?C3^4lbeOrWn=Y&(>8izLO(C(-brhSzb5xkntk>X-ZZN1`W9gW}~aSSD;2i zK|>xP$Bz$hIk%P0$a4?jS_`?afm1nMZKaT;x7}*-#hnYKqfndKC&Wi~Ru5l+bn0)= zo;v^BFTKS9>ED}BIrrG(Yspy$!{-QT2dk91fv`3=rTT)K)zK9>qz6$7JiqsR^ph|n zRK~{$X2x3Rr0E9*`-qs$q`ps;vF0Aig6A9aN95RRZSX)^&2R=(R#Gi5o@q4l2kzm^ zgmIs-V@62l_ZfASlKdj-(lMJ}^SuF)zPMdzQi@jZ1~=i_^q z)1wD{H^gcY0_eJ9%rIu?L;*$^vyo#ih64SJY_u{>2%d`hgq>f1Ddif8#TtSP=Nm5W8}CQNF0lxtYM?O)b>$;xu?z zgfan*T;j@|7&}rv95Zt&aYd5r^g6G!J|)+k4UM-7AwIr-JO!0sWnSZLKY!{mqw&tj zD|YEC!H-bK8T*F! zUwv-Y-4$l<9T9`g_pc1N30NDBWQ~?JR2Q#FrV&)N2~u~F$b9p>*r^uT*iUt=a*edl zaQB&ROKsvxF#$CL#?ex&`jsR|-7!<%Ba?Y{zBkWLwy)f27bxCw-=MF0md!kWuBf!! zYn@Eo;T>P)R(XCY*-p%!z#rdr4c`n6VB3>yz}KhL3<1 z1?bQ~|I55JU%bS6EnVZ2Fmuh79QN(#L=Egx49&(o{WqXgpv?!U-JA*vcC04oI^Hq~ zcd1il=&}o$QFLZnX=1y&NQS{}@H^jk2cu6)1Q%Ct-Mi%Zut(WJIp|80#gtXu{UGs^ z{(@m~y3?4-jC0cuSG2?8ju?ef;VnGJ4cj3dS*Wf&GHv?uBd2OE9P^;Sh1uS==C@pU zdfMpLr?7z9z~TJFjixBgx0?lHqa_uix##yB zZqma|2(J#_Euk^eRjZ2)TW|m~n;JxoVKXIrJJ{!gm_nCOZ-g(2?zpcg$QtQJP5*Ho z9~XF!u0y%NZ*J|f6ayB@^RIi#PaaV!Qs+_MP2AgW-*XLrMQPwyCypg$Ow-=Cf2->AY}@HSIOqvkc|WGT=BISNCfl zH8h!h5%{rMYh8y_(D-zVTVR?bdOa-DcH}!Db#Wg3{0ynR#mPA$#t<;cTq@G7TI$y4 zx=-Gd;#wqfRevAN^)KjjWIa`JON*TEi*KMTi&ks?8XBAkvYN7rWi{pd{B**+>lI9W z;BIT{Zqpd!U|qBs-MK(IXx;_1-4=G;0g9AF-VEfaoU}Q=Wzzbco%}-bU^PSs=*ULR>r>* z+8yod?&20#`ykYrTLpT3J(7b%OC2ALb`Ck|EeduY^TI!YW#t`3Zd;0l*m; zH@sJ%(XA3Askv~qm)P#|fn;}|!+edUrGb7vUUG82=UMNn??;`@WDig|;Qz4l%_+=v zO`2Ru4F?>pz@JW-X+!M!fdw~4uLtMQ07=qLhKvGke?lWt?SHUQU9Y&-`|h?6M+lv|R^ZD^9yDS^pk#+LiIr+$PJu54#^TVCV z*`wg|H%g6YLXtCAwZM;O5Rs0v^)(zzotL>M2}%AAb6s+nzI$06_$5pI&I-m^C3ioE z#gz)KoeS6c#wZgDWZ-V+4%tb3Ju=G}o89QmAn-v65=59B&4HJy|?I|4NtK zN!a5`hL;qQlK8y*WxQTtR?|G+_>92&9{G+wYpHQdw_%SiYMpIy>q>R%PYqGz7`x91 z^EHDP`vFo9yMolb`;A~fem7oS*V4b2{Vt+-dv&7MuwFKd+_U4CMay_@-Zcc16cOv_ zoL(Um+Pt;K?!s9TH0#9Kjf)u{sF{OKoYw2d`NJN+V%d!nGWLorB?bxby$0`?mnHY6 zi~NFZ%NVBqA58tdI!>kt3^Y~%o&eQl^L7UY28b1mO7p(L2w%yp#Q6`0T&w)RZbws1 z?(lNqUn$MmjBG*IAxkrXQ?KZCDxwo- zU(0KP&r_6c6Ql<7tnP8so*C!v zT)Y;>I)flR0`w20`k0cM7QJ7b?$j1^lXh-hCejZ93FjErmq}lq&4k;C@*BrJtkcE| zmTsgrxVicO%{5#vdOYSDOg{=_N~UTkPx= zdNES%U=M_5kYQnA1ov5v5)|t>-I^*gcGlD8Q)OV0q>iESU9*x=?!)DdiGjomvIz2a zoMM@sk>p&2a{NeuujUz&>LusH!+G6lqhVq|B@d|la6iq^%>r8a^}xO6rFE0&jX2+T z`6EH?vV*T=y5(?{t9NG(4{@#|wa7j`2cyYleNo*YVQZ>pqQj`gK_7A51NaC~k}Mn) zZb$#PPfy@@aft9En}sar))g`O@c$362|jzJ{eA&{b)Qqx*1C7mpDWv&CtIm+4^oS{ z0ci7?=d6gB81s7p$9P*ikSF1R^9dJ%d0?%)M1!0W5A)6k3!peL5WBTt?KzhdUIiz# z9jt2}9|ul=H?pt&P`8^wBPK-L+flEkXE|Y~HT+S!;^N|B91D{rL+!-gMEv4=_^{y( zzUP|_YVLZHvAo%mr*GRo9GdLvc21fl4wz1Suc&F53c*&&8i`c!El2tG=$_VToK07u zWc;Hg(krZ1+)-y96mds7$oggZ?PQmb$C~{jtxtWP!wA_*>Lt*j6x*N|?>%tE^5MZ+ z>%p2!Yb-AhAJ(!*fHmQrx~)!5@1UXgZGC3J$I4R!<-Hdr#f6Ge_}HtJrgYAU`%{@w zI3x99W8HV{`5ZeOpm7Bs_;BWr^O`Zk+f>-=TYGRZ|C(-I#5Is7dg5M}7&w!zJ2>1W zYD0yaQWBpVmo*>Va~OTE5_?wq({soCf!wMpV--tve10CR_Ov>$k~N6#Wu`W}EGN^B z&(F`#+g{|66JcTqs)U;H>FO~wF0EGZ^OYOY2lsv0$NZkb_V*v1H0wL`I|VLTV*2&> zyYc0s;^Fh$dG7CN4pPoBcVUFP=(tJmCiB357c>%@4zMp=bScU6`?2mwKZlm3yyya0 z-O{4)h48(OhNseGgOYKJFWX%fv2pKiXorFWmz{c?`cjd|MK32e>twKIXm`An8Eq^n z@aLzNyFi}{{LKe5Q_hlZU3mR|(N6RJlHEGZg?@oATl`bL4cXpzD^I#8xyCzp-GMo0 z`_=0<^VBC;{#X`|_hD~fZzJN2%ZLu%yXuby9cb&0UmXLP zO7;q?hfCp@$_ZNiW0!pMLgP>C0ge9E@bl$g_I?rajq~$O<{NSKq8kZK+aVkmjTyxJ zKDWfFo9fBUF}4T0#cq*q52Sg`N0J~~2i4OdvL+@6iWOOas!&<$W&Ei_*_m0V4RWTT zamEM%+QzPXf{DYr^gB7{8_p{Ar#inb*v*c+Ix+nHk(O7u2o1LB;VF5pCknG;NV>uJ zvNzijEPJq$3(!{cNw9?fJ=iZ=@8Th9lfA>t6?qcSXeDI;y3?tN9!F11vRHNo%1ez> zl1)~yFZN6|)QgJ_I`yLHoRf1<9x7GR-@*U{h#U_ncOEYf3^ZD3<$7TyBO> zPq|%Mb1?#5eb&5M0k5z0ir4IZNpesJ7Y;v+b+f2;Z)aQ7W4LZHfPELGocTd()y16U zpTxM^8?H_BnrIgl;toIEWS;AmDuYQ4QBC*D&P*}7)2XHI)6<+}3ZLJ3xIxvHl^NhW;)#*zal{(Hy^`$7XooFpgZ}>?eC@4*RP@h;E$C>>ZpNwme_s6S_@;n`lV$# zIXP=p3qsy`9is7-28{`=MawW$%+%BMt{kXHQ>5Hb*laq}i9|gZ(7{bK`54zaK6B|l z1KVopQfsd=ulsi~KV(%#=UG65$#d7kTO`%i&lGtpgM__O?dTV3yssFiMa+s>Qi zn00GAU*#=3#Cy2XlG>Bh`cp^iivvFBBoZvt7zvhGW(OJ{rYxH1Bk1!heH zmS>PbtKIVRlyb$6B4Q@~pgKE!1-Tw9ypihm%G-BS*zaO!=g)kO=XcRj`fU;tJir`R z!RVxHxLyGcHhXO~QtIyVi@J%kIp;t-;}7kIAB0DFr}0B_=9A3|B~_s*DPBvd!NPBY zg?Jmth*P$RW8ofBe#KLc&KI{gP*O~UjmsnAIRPFJZe}`nc!mPf#?6U~dg(#`)oTRG z{l^FT7UsNl_hNAv!DFJV+DW@a_~EU;bySL{CEAJk%Ij_r%A$CA?A{i905E4!_@vb4qRFWpWR8nb%)rRbpEa&HK!$ z{t~2VnM=U8e|>KDThzOTj_WPlkNe&3+t2M^7K2{n?>zMc5-Ny9H>w&R@=%q}79E4N zrlMUcmx$?Q@5{#hP<=HvUu<^zyvy37vWk3qitsWH{V1n`M|bL<$( zx0-a$dTOGbVhr+%bl?MAHp;nuOUBRi8TaWs6OEa;cVvTtarl>=i6-!VN4AyNTMq%T zTF3Y;!>x#@5Y@&^_a?*H;<8`TfG5H+8 zw4Z~O8es*tfm-tf;$GLF2DeKc|Kk(FK<#oG5D|*(&2lOFQ3-Eg6 zhgCVGa5fXUzcLk~nn^gQo(hq*#vLv?%opdA%NUBPPL`cLo$&|~Iz<&L0ohp}>R5R% zH!OFjHuDlc(s&VmnHUlHA0MNpH;uztI<<*`#Xp9BS#)h<^LPIi66JgK-fkP)MTxIY zzJpPv)&F`7ZrP$0yybkor6ar1I%QuwKfOYbacn}spUKTfaO?B*2YI_A;?+`S?;HIv ztp9O*>&@G1P7VV#z91?#x#nWw0P)kP{vC&{SvhR_r+fYmyYR~jUe6o~B^I7Dm8h`M zoGQG!jCK~$L~}`z%qLLyP+*uL<9n3IeL7^K{kuoNTBgZ?JZ}*ECGz7C8S7MBs9u{P z-Xt4uy@6{n>I* zB4+KJ(#lUtt><@z^6n85Qt>eyZsgqYoL~315U&^s`Kdbj-bDYVlFfX~t3mibSqo)K z2d8S3+@1s^=VWuOquF_CfN83 zUT>Zm)3_+66nobVTPu&oIF}9@lx)`3ec6D`@cZ9^^v3(tPrAlPEIK&wRQAS(LE$*? zi|*V0f_V}@UW1R`!S8DzsB3A9kBVnbbKDqd7;G9cZ0+m-R<2F1MXs~<>>W;KfG}T8 zXPc2{P^#y7&sBM}0#G5V`jG&#OWvu&qua<{Xt3)j@_#b79BF&sei(cIOB>3N*}D7$ zGDws6+FB!fR%sWwP%|#u3wvCs4Bl4~1Y#9g6HS^2`h}kD{-}Y0`o*aTv5IS^|6cgl z%)PeCS~V;}Y>gLK5LtaUBxau0o`avAyr&o}g8PC?EX1xnNekh5Dx|6~;qbo^LzmV( z&Xki2D^}7%WHL?ms~@@9W(x05ksTmyuqls3Bj404`0K5Jpx3%V9fXKjhqikTCCQq5 z?xUc7e%RhL_Y6%_L&o5`qV}>Nm35l>oXV;&SaF8MIm3Tb>x>7%^kJt?ceV-G$&`Pw zaUKre8WuY&fT>rR1hW^rE))4Nue-)Bn#k6)dIal$SDUrYR-U-^&gS{#VZQ>r9vQq} zE+$m%OL!M-^3ESs8}Y@AR!W2Z$EW)rACc9gm+@|KSq{|U@9*#h<9tK^UO+Guw>wWX zx9k@7xmRD`&6}D=vmsMcQ?0d~@yR>aPQ!EH4*tNEI2qDSL@wZr8MiIr7s(C`g z%@-2VQ$&u*UySkMidFAyf(>WjkTP#mF^Vb0OT0N$>%gXB2e}wqy;J0g)Qc5IOm`)q zeB4HJLq+naWL5L0Ze3BBI8iTq%~)}uK<|JjHry6g{@7w`RG(gJ_V<%tvXZuc8vPjD z+Fl0HGy@1M-RZ`Pz8jMb0puA-JENVk*M`uvaTvE8{c>X+N*xD$$(dc}$AH7z?@H?i zr9V3VoewZ}ajW+0K{{$I<<8FzTx-G3&oJYn8G^vv;lsK0 zTqv0%nS)oIz)Q{WM27m@E@6%w`o0$L`kuaKp8-M7inZi`Li&p;xJcIa3U{^wQ|9TU z)>+80x9n_>vSn945%93Vo*m8vf@Nj^;s}A>L8#9WifgGB*BV(;2&};79~6NjLz_o- zTW(W;Lw%|QtlV#pelc-r>HAWr&nfOi-V+dGYZRe}DEGzdaa~jw2Z8CTJT{dyG1*^v zBIlq651P^t>p^a#8Jij6cmxw5Gxzf43PR-Rl@ zEQ=N{+s>}uvGHPyI7uVOQxwJx9X-VU=z+zS%NPO#MZYjb2SYs*#44}MBD(Jr{B{9- zUn>(9EOPNOu#UWiJjZbr+=D><2fh!2QFU|@Kd&MpqQpTJYixIJ{YD3MTphq~==m(X zd6cVLw1twiQghyBWc0x<=a3#DNKCN+mZil6cksu-e|*PI{+Y79Ebo(_zhsGkL^{FC zosiWYpwTZo8~vp5(}?tZvNWLTRcKE_gzSY(NZ%FW`8Tz?K>@{XR-Yif;SQ^pik%K; z#gK<-=qmwEhb=fIKJaS#)YVZVk3b_wHMqS9=7pSB5Z+|jD;RI`UhDn7{Lb3d`zyRZ z_o^Rh9Y~f<#Ag>%lAW2l7({M(e0RdrO6)qK`vJi(vpaE$t?WFDjMcE+&|G?_wU6Y{ z!CKivR5r29Ld7C_YGqoU#}sKey>MDhEfOy@za!xCHp&BQSk_!t>tvw_veeVN#`>+D z=Tw8JnvTRZR_^G2KQC(BAJPuP{mw`4=j&DulZ{L5-J4x%Y;A9Ex+JsGg#1P zl3!Y5hxp-7EU!tA2o zg!G5>h4h4UhtNYhLfU>c!nfp*E>pKYQ+szuTQHTXgS3yd^*KTSdT*Qh+{SfZki9Zz zksB#Qy{)KbK5HDh^N#d|-aQ5_=7>Xa59c1vz3Ufe$U$v27-C)^i>+r(T8kX!^Fltc4DdRjV#-D{Y}PQPA8%g%Nh^180ZhA9&7vo`2vt_xapsU0zFk;EJmEjxWe7 z%DG3SeIgZHLfT$+^f@YEj&s<`K2nodr+8JN=BcB6iuQ+-XAk`R_5N1#hGj6Z_PGVb?9TMC=E|hoO-96Va*AYhG zn;kwNeK`OaDA1aWFt0_t;-@Izv+)tB%x8xIue+63e9auVSMFNej7)4FPi!03plgyB zZwYeJ;P}9SccXS6c*oZV$LHM2p~WDPdO0m4@h$gURdYyx!#;{P zQ?RE=k+=z7qMLfquf*ME)U(99aFaC^zx{;D`xLnE&a_54h1I&mxP&$;)>8$w4kRk# z8W*?=JHjS>_yZdFoie1#2oofN*+o)b`r^;7R~A1X93@0tbe(3ec?^=-E1Cqo=c5%& z=XDC%tCF>YBYY#OUM*X@npeH$w^hBZc(pm;?0}**@4wlWy)m^NGDYu6QZ7Hn%fAq# z{DvbO=de#kx2F)Csa%Sf_A#nY(bSTb0yfKpKfgA9ICG?`Hnj^+?lDWI0h3J`PxpTCrXl@B?umvOqCaPv#L z|Gx(R%4=dEmEgWYB8zCT59%jU*cD!~2al?4aGMe(4;kfKjOy_Db`E_cmKUgvi2UmA zK@GaAAI3>XgRVeSX@yb{VCqRV6cGrsbIizoIOlpWXK@kiwN@#+*MP|Ib|I^ zf$|0VDTZayxRF5#Z}-*{NMxmv>r7;2Sx_zIvSKZAq?TeiTWf!$7+`x8qv-eDrRzVw zctXfW(u37n+oNpHD`l$o4~p4AHH}U~M0Q$u3TSf6RU0KUy6?ENA=sa%`xfyZceOP)8`mr?`;~c-wSl;P&g?hFB}MX! zNT(Q=gmX#kDx%Ao(XyvJT`U2m_(-yLp0c=WEG}r9bG5;bYkQVq>S1S!^o1h9sM2Ys ziw0gR3xDbn<~1*=qyOmK0A?3_d(DNwu2ywPSPUe5ll_nHCgDH6Cf?nk^?!H03Ge;a zO}_RgKIH3HujmiB)tFkTu2kFpff@J=)=sm<0brl8-w!-!k8-0tt7TdIu|F{}@#Lq7 zJaUnMpP17&{?*MTg|qTFJ9iSq1G{GJ7z-MJIA#Sm9`_q`9ip_%ZwL zd{)eQ%BnfmY-K&=&3Pj0N+eI}>f&qfBSO9!hI~~I`Dz;Sl_z{<${Rn;H-V=1huex$ zCBF8ZwPkVbIPjl%mD7yUdFB}?UX>W&l!#Piq2HLO{$qPdc+#|1vcOFjYKq#u);$2}0amC6MRNue=kMVBRFP)pm{`>4yxF?j8jca9 zYY;T`TeI1fYc2sUKC0dX88(g(po(_#N3Vb{3YgofgckCPe06$&Klwt@=|~3svk-hO zO!(vr4fKT#^o20=-a2|ujc{W5nC)Qp0=92UZzTn|l45{eC{DANOmhnyYi|=s$P_;u zXkVIq-~&uR#SE*}V|0d5_5Ste>u$7nI>&+33(KDD1&IotIdSx0}e z^#QOV0$70uRzv|S;(*l&N)^0UJiu*0$8@4J9(L4I8hHa(x88CuI#uL49wOOVX!>03 z)eLQoNqap*ed9{~E<`dIn4x}`AQ=oQ-Pm=cewXPSpKvu87%jcZwf|X>{u<-IVJ#QIW#Mvgm1fZLfjV8L`-HdKyE=tX#(| zS;q`RHv`g5KhaH}(@iThIIg8(aNXzByKr3$q{-oLrAv}$>Y^Ks^$W&Y`kdo{O0799 z&7ILYbtMfXi)0wrnMQ|@T1jvQY{!|_4=0IvdopPSNEJ-ygpYzNO;OsoPziaGe2jc7 zMJifl;jVhJ-DdvU>CyOhR4pRX|NpN4_-ZTv@1pEAvc@{nJSbm1I3OTY(=Iw|(J`7z zRsm}CLo66HI=r0HxrJ(7LA5TUT9;6*Z1+|cs`a^h>!N$>f_v%C-?VR^xgLGIPrqw? zdo}a#Fygmf*U}vf?c1x)@!N2NKGz#N&mrG_6y8E;FV5U_jrshcpbJo_(@f3DDGjDA zGfMrL))BD7c-j)9)SGGT1v^C1mJp@BOzWUuPnQv;fiosOx#wq0c5`yos53eUKs@ir zsLq*KhSGe&sDh%g4%H19&2p>(354---@Lhj{8H34iEDpcbMnah;*s~$>(G6o!PZ~#1-=4Uea+WGvG%j-^uchEl*HLnE{PcCopzAXMsG`@De_~eSM{7SZ@kLs_6=e1Py z3SLEmmQT6JC{agG!_B801+tKW0I5!kW^VSBAV~l$1am2?P>0%~@@mBp;W$kmt3~m8 z2>0gmm;dzHSO2hZxGi8 z0M`ac*9HZy4dz@MoW8kB?)a|h^6wMiwZX|7yBDe7!Laei0E2;v8`l7*K8xNSfUHg2 zAPAhAgpKUeUfPw$0IVBeBc3fXHWRsB0$?CO3@J2`^RRhfMvozm%3-OE$G-ZE2+dEd*19wp171OL?}~@qYF%R_58pA3uY6@k%d*s;hb1ab-LR~{tJqH zP%HnU4SD2(zEb7=A72#tH_oQV5fSvWnf0^bf3KQ~pOlK9WfeaQD}Lrx1lwPd+%)rC zOOaO`>>kw;H(%{?7*H2Jau#CeCaLQ(N` zj&2%IvN5sP2%0im!HYY4Q?^;7$=DV0B}J>8hWy_gcBPsOQ+ysRdLMJLQ9W@>)rEcx zvz>pAhS$%htO}d0u-}9b%vNUInoUd#*{d$#)fn&5+JJLCl`eL^7_Un5N+o#;Zd6IW zga#8g$yN;Qnw5r?hJ{*nh%HADSS0482wNwp2vK{u@IGo67hXc`U z057>%ZO(qQ_)7oFpkeL<>2g-nd}5RTnvBC%fwq%`dr7N%Yl||SKpw3|E7NZ^w=d?@ z+rcmNlj?VN+rNF+86R(7pr^QEHR#5Bt?W_j2-?aRgu2bO0QAv1x$s!HE3d^`6w!L% z=KPdUiQMTK&Em2b#bqx=>@yXmCcWZorJhR7NU65Simf^I;H$rB}`7JDTE7{~b1F^w{gYz6M0 z;)-2j^+#;=p8Q_G)wg~hv#-vpo}Dm5CYvFx5{otn8jd`MBxt3tokM|d@t^CHHNE9M z`Utb5c&-<(f0t7CIYrt5CM2DL0}84SNEEz!_ zozPAio!!cvG35nBSTwA&lRgC75mze=5EoZZ;;D_pbExrTEendOtw2P&ZCBp>cHNyZ z*0(d1VUg&Wgqpb&sKp zx(UTbu~GRH7|&|+%SbYA+niL?b_Mh^^N$}t{^QejZ>(UXr3NEE1p8w1SwoOwmBbD(@2;Yalw};%ue@CZ$mr3~t$>M;Ymq%z?m+`A*H9C1WBApxU`w3FR zwmrO`t+ed9AcyuAK~E{GrE??>7;&Mq{fM~PKFgK?_Z+(v)w0vgI8m&4i_NnvRiS9x z(}+35Cj&@0uOH0X{qQ%x6#tv~AD@{!EL++_8yXyi|5Oo({~+(NwCJGU+SAs~Ca31d2Ib>CXZVc0s-3iYddIcufT2 zHw{RYqX&+Y$-;jZ2w`Y_Hwzg`F~K^yA(2R1`+m%EMhDm;qo>Y3ti8Ip@-g7*3^sFX4SWFnO-3hf(lu6Q^rp8|PfWi5^KKaht9@i|&G(3-gHQgsHt%eBBn}XBp#X*H2pei~5$^>T2b7Xo(VP z7R86{IRu*w;1^e~EPIyYXS2zLJ!P8^*~V)~FHv^aAP|;==mP%{TiuzdY!`Q?{4AIy@>jCq5yr_LazJokE&m@M_LFf0lvb zojnuE5^Pz)MHRC$v;u^er+}|X>@?*cK(FpC<7XD*XWh^G{-(q_c3#$|mVz@E zKFL)gDfLjZ0vsRC;6&_k0Vb`cSaz}^ENj-*d)BYny?LcGhDQLx#$?jv@Y%mQM)&F- zS;+GWrH_`#s=zc*^K)Z}OBM5DmMu6)eLe@zqlF)*|Kl_IiDzn(;%U{m!7otxy zeoqZ1e2_;jP=@m;pJhp!%xIhthADo85s-YzD9xBLlPQl|sMF444@a1s9pEL<7(?xZ z2;cY)ni@T<41JH6SYv!`pZg_q$%EJj(Q`+T?L9$im6_vWdHKD>k}`|0xVlH9ATt{g zE_{;S)LL$;|`%W z!X-+hZ-(!Uqk+dDXh(NyHWKRu;EQxC2#&=0dOfRYTo4=;Wt~RsjkUiQhyHu!--I8$ zj{K@>@ka|lkFht_@t6kwVE{>va?s;CFP;H>m747{FbAp^u|H>3HU|6jh9L$qo*3SG zEzUV5$pg~$-B^PGUKt&SxDWOaqdYd7Y7&8w>e=?`J>9KD#aj!?p86fHp$tLbj>IZn zLPN}JuRi=mg0oj2mH84>k+Qz%hk7(VoRCD_L&n#hxj*~s_6i=Am(I8Xp7Z1@tHhqM z=x+BJwu38?1>_4suZv_pW|Q~O38K|=2pdON7?EwVW*cCSb&`@6N9@g$9wT&PcE{Qw zS}KV=f8hr2QIij6O|<3YyULsIZt^m=g1m8xmyW068}w&6jS7%CXyqlvMRALAWA}}F zb2HD194G@ieEC+>V*QrtdIl8z9!ACuN#9{6}rY+!n$rsU;lQ@y`l!Y`fRuP zyFF}tN>Tl#UEHQUq#Wkv(O*>AXfrz8=9{v|oF1rkbFMwdk1&Ed>@}=e_1)X7?^Z7h z;7v1q;#5BkFu&_lTw zvzaVoAzVu#(bk783zqdZVJDqdkHo*1aZ0LH-8^b2y9*@A6C_h)hV*w~9l?Gn5_?%7 z1e19I)%WI!u1>|Z?Em<3JO1NS{#MqpZhT|N!jM^RhWoHlF!4!DqnLP3oVKgGX=z|S z3I%!jMtS)`F_-u=S;8k4MP|e zo4*IH7aHrci9(_;@8;Y?*6=E~nK4Fa~x6ZFQ ziIwLN%X{evpOliW=q0QF{Fut(X9*Bx@^-QO{~0+%IfIVi*BzowhW-5 zuN2sLUTNl~hANM9_{tJ#CVx|nFUZhir(Lf^TMW|i5j-jbDiGNOQHs(AA;@#DYug8V z8qwd)@3~wk-C)%5ViMr?0#LsTz#dpw50-x|R}w&YPP%t5rTNgi*h?8C08_y`e7;Op7`@2RcV zrCYB{8ZG{4zw-MJ1f#KHe+&{y(2H4{lFWNWfj;Jd8#(-j}dgH`WUDy9LE_BN_%m{f!fB$} znT6SM&kZquAt_^r(A~8Y^Rt;WO-%=C@tQ4m&9AfDiwDD@w=CP}v|1$ogN)MvzgGgs zWjHwm_H-R&;#+IcjkFEOKkn&-L!P^2U2dX4?$qsk7ZxzFSG&+2fUT%|=Gh)_n2fr< z^dDdSH?wYP!2hn#*VZ{8yuA46I(rfCtPhJyLUW=5KruT;y0VRA^7O%*By^eMoOVtSn*RXlbWp69+E=J@w(M)#ZpmL{pe%($msMULYT^l%a~&QGy> z)QE7|p)Uqo*%$z*Yau}mLm;-cgJs@9xp=8Bwe}APa)*r~n^++kl6;Z;JdfkDyvL^T z`UmX#T+JXstxpnVcP)xk*@m6E@Xt%JuEQq6cp(6ca||5<<3Bgd@3lv%4>$Sb?v!)d z1Vgl-_xo@So5O^Bg}^UG@LGRr3SoFvc({PwnTxtJ|0DhYELkav34UFRDy&M*{c3iQ zvV9+Gk@Cm(ujIm4_o1zAA_%Xro;I=ftc^(Q$mg6Xv+|Sn2Voqc%k=mDeKz<01Ubc9enEpP_TWINN5~4{5k~*e&L5?H*Wz%udb-7cld$cV!JEyX(*mT1Gwdw(>|44*z z;`JHO9}-;|gU-F&tjaZA-8!E*%x=d@8C_Sp11P%*wU6eAJmiQh)XKdGaJh>~R9)PC z%6f$e#-!-)WqBuchI#s?`D}NwD>G_5{qPd5YLRx~uzo(Be<1MbLzm&xZdT>+{o1aK ze+cISyS-%4Svi*`c`(SD&gpKdlm-i!_|}o2!fUlw-Q%9kxY@>3BqWL{cgVyyKr|)l zm)hrIpQItCoZ;>_;;gN&M+1n^MPZKd63UJj@ev&Y?e(%{>QE~V{ z{rTn|yQDj>%$vs7><7gZrq2X^xaAhS1k#m02l~MYPfs&PCukTW!M%}XN@H|ClRS9F zCs5$KPb#eUxf8M&F7*YV)O*E+H!blvSPdEd|6+=UQ*p4uY<_j&(nOm23ojcAA-H7C=%Hf7E#!N67N4af_m-P zisbsd$m`W2hs?CYlN(!Q4`>!CTNUFfA&ZT8Jl+W6FsAMP#U7Fgaswt`OyAY!CdBsn z)NP7CL*G-Dl^rw=2bwS?T=(uzp`JS&#FuDykD=o=DqBl*>h?O_LfDqNCV1k%=Lha7 z-Uh4Mzc`h}+dymbOx81G z;9woCC)wM?wT)j^!cLqCX&YDT`N*NXv@;Vt6WoX}YqJL^JNQC#yW6a{R{V^!v zrRWE{Jr9MRc5GF0Hn|B@6%0kyFRn!`-B(^(Y`Nx`vUOk6Cb;$&gP@!_@?ypEusgQ! zw{_|0%@da9Zff=ZebXy3V>*_T`)@90e21p6gm~&QvvPRXFIrmTjC#iR++yy90Jh&o zWqXcJ-M`Il@y5^KOD^HpD)kIRcJuw#h|s&>USp$~-W{RJHP_)jbuXLHrT~5srj6$w zkz#qTd6mDT=?r*~zZ;BPYRst1!AWq<8`&m}Z1AtKVxFl`OR=Hhpb*lQz|Ca7o}bws zV-RHKrp<@gUM~|TUx(pul^(&6<~&=YLfR+~kx8G%$K_u!u7`0ArS^ecEa|W$5nZuA znGwv=O6ivMRJ*Z5jK6(FdagL*gzv=$c6{TvTjh8Mj_m~Vf)k;VGFvfv!4G3`ECBUy z0i!kG@s0P5M%o0*HZhe+CSR;s96{r}fA5=52$!JeWxu<%L1Rp}7vkdBvYk?9%2A-D z)y@mV!OxX_o}h#R`uWbJ2eVbj==aq!E+1&hhu8M_k|JNkx1U%f zo3LXcnTNTR3+|20D!<$9JN%59(F*&X69)xY*OIPZP#BE(d|ApOGw+S6^ zX3Kg4L!Dqa%9}Bs<>Xb2-T{rq-?oG!O`wN&*PY6 zMk(ar#YBw4>b!(oB;=U5{&C^u6s%SpTcPd{C=_||egZ9b>7|hx187nx;P@g=q3VhE zZqFl4cV)4#jF7M-?|WT|1V_RKI24~|A0adqLq!<#}D@WHT{b?bgDXlR;fRIz{o5 zMuRVrQMz-K4x+I(rSp8gjUw!z#9F28#q1%7@QQ8Bb4WM%5v z(?PiDL{Lf#u;2Q(LhWk67pA=9jZe=yaL2C8?>>2)O+~q^#H*3zPZ{d}0*#W~I%DN~ zF~`?*2wU8{axt}mma)Qe1r9UqHR6X$nDb8JPck<$E?0&`LMLr?&$mKfo^tnn>~Hh8 z1doVf)H6=vQoa9a(a0?9h)ap69I^1#8hn1II|Wz#+9f!?olMc^*}6ItXQlU%OaP@v|RA>8auHD-$;p-P^`-_gbBWXZ^Yy=y58Ql6Gyq zGCptlY*2HXr*%>xJZ;JkT)V4%SMv|dt@809%--;~N5T?e%Cc49G|&rX41zY-sev|? zuMjJRLp?MEJ(8SOF}+ftdhxW~1IC$)V@DZp3r8i1pZ3k7@-9AeX+)$sxHRIUYX0LB z+R@=@8nagHa`u-rn{76o=rZU0(^U-7_QPoXJHBy$*O_%f+PQelcs=hqA*o`>T@iyj zq3n--HoY7gqjcy5{-lBoipZB8B=@X{IYo6bA2@8JH97x3vfcz9%J=IZS4pzV-k7Y} zmn@MjW#1XhU_vn@d-g5)*cpsv>_m)x?2)i}SE2sa5P(M^I-2Z&u|9kSIh0Mb0}xJ_=H+qq`1G% z%f7xH7t(o+%h3*alxs;@sDY%45dp(r+z$8c;ZY0~zE{S#05y@HbFxZnjfOO4*#rhn zBy0vJ3cXsEGyiRJbLnyRtmD+K3A)ZGRF2)9>H9^pxygGn*Z1#ChLM$4ye%y&szk3z zVjmRG%BOsk7hIZg@a6{H;d;f+Vwxzjw1(Jr{gZ{&%Uhtxf5ch!g(;y9@}gevpe#2L zKT-9x_HF@5EP8<=<;Y~tPhaT#@ITNg|Ju-5lhJ>2Q#mmn303!p<6iXXykyAH7?5?S zX0yt?>dfX3X`2DLaec}1o^BW@w(C#Dyl-V(kHKbe$ERwAkZD1sDhqwml-HVC&#$Vp zd5ZUzeV}C%=1KS5^eHAxG*Jax>NaS1U#8#hJ++p@ay-nHoQR7XP&Q)&jh%&wZ^F)! zhrejui*NC``WZZZ?sc-)xWFKd>l>G|&)V%>Uu9XBJ#ItZ(#hNE+j3`{H0wrWo=0@l zT)8Kz(^=_Z((R$>R}{PD9>c^@TPNV_F*+XMb#v)Kc4wK{&1xa1UP@kaF}gBegTmR3 zo5{Sv+U!)DRjmp%TkC!n-rak+&?U3Nz49Hn&UqnLHM$&0$Be;;#spG$)re$cGq<|S zM&Nt)nySeb(T4?Dre*Z9sVGPHkI(_1&%kZ|`_bBd9OnFqP zZuMDX@(u`PQtRWs-ZIL}kyyq-TI>(%m)oYFKc9B{ZW|33ZM6A3#)?XbomvadJmhO& zMuPjoD?iR_Bv*B%Nh#V}e-EE-?H~UKB+c=K4}ZR_?p-K!&z`9^t!nCWw0rUJ+zthQ z+Ij?j7d-m%3hsB__48%ql#R@+v&D1|q8i5O^@X9UE``7N6_;sKw~oTt=tK{DRS=@L z#;LZ-$iujMwO%EvOA@nFwpZ}tZJRQV#z$%+eh6; zwvZgLceIZ0tPCk@d!^<_W>{onGs*fY#d!uz3x=sQWcO^)W~ql?pC82zM(*Q&%klF* zEYvV}oAWp6B(v<@5q!o_;-h>#Xnh>n+lg7;)V}h}w@bsqxvSUnK)%5b@*vwFlKokf zZ#TwL+3kQaD~sTx7wjY$mUFIvN+B`dsP(8q>oUpaKIla80fytC|Gps;61z(th1 ze#N_JXk_x_`p$dEENsPCFL_0Ff9yT@VJDP+_zcVdt|Bg9-Q~MpJB^QiTaa%KwCXu~_0`Cx|oWEnl0E8Doz=BP9D1i1Z-z(jwu;$SWn7E>T& z|H;}8k!iZXXOD6!nWY!!8a%8>e$@sCK9mwl3zPXC?<#tDeFo6a(P${m(lW2uhrCuc z2MpIjbC=s)M3uT?+z5+#G~e^;F$}l5WyI|7yyG&XNw6Kcplvf+uC{)N+LYOqMtLq| z!4gI*G~e4{FTWGN;sCfPXTSPe&q;Qq@2BKST;?-{5^uN2$uGOP9R~@J6RleK8-;K3 z$zQ)}RVF@YASeZ=KK)w1MDb$tw1?-=|Do|o_I>BR+l(d~+TqT%JpA$aMXUL{9rr{P z810cK;S;lU61PSbl)NA=hZ~Ug(sRZO%@siizJ1c3`f1WPEn`(t?WN_=K(Zp2%G!?#|u9EeN!qN%Y_-HzQ5D zjCu(kJ7iK5dF@=@6LG25Y8rQI8RiCm8_0sDZ1sTLb{Xdm`Mvf+&(sRlsgl~Ugt*}4 z=ZcXkRMPb??$*C5^h?)weIgSWpYr@k88*esco6p_=@nUkT+Oe2{c#q1r~gN3q} zqJ}XpFIM|!o_7aaldSTQqryF{hDQmYUv{kp-s8KzXb(+qw{v}2)wS{Eoay{6C1}5? z*?B~pf!u%>Zg_rMN4Ac>_oE9gFei*j*DsBx*Upih*Ex+fZJuIDL~y5#+kuf;i^;X% ze0htJOT^r=9CC{OraQ6{=3#t?fU6$;$0Ebme#2UQqgz35*m>Kzdb7k+<*g3ITSMLZ zX{wf^_&X9!xp#|SVb)r|E0m;3SMYlVK9&Yr}eqiT0c zgRX6#Z5i_O8wY$QOsqFB4`bY{M|!d-?^%%XP(M3j&K?=ztLSv7re@U_`jQbzOQn%J zS?_f}Lvma4nod2-DoVwAGd~R6G{bvww1&`Xz567$;Y6hK=K3ee5uM5sMWz7B1=f8@ z7K|0Vy*y_K+O-K6**9EtX)>!pT^@>erD4#WTB(mh@HIjp)}ejU@7UlSsRojm?!wyZ z^oUtScg;t=**2-Zj2f_o?Z=h9~q+z9E}&`Lmvzq46dDe>Aw-8d#%kUJ6pwLc=GVnf$v++Ujgj^(NO|HKfE< zas}B;71i&jw_cK+nc1Gu8zWnL7^Rt~e^Z^A=kjN3y>^P*tZ)2Gh6|te(Oz(aUs%VV zu{YN`we5@Va<5<3)1piXdHCj60spHOJFx;qsJ3MPZ*xS*&5|yS;2sa!3&MS3g`aI+ z+}8RM9lwR_`Qdne)5l-LTi_E4l3aedYo#&rVs0s)Oy~Uu%h)x4*LHj3?+ki90)#C* zH;lNP!THhsCR5PD;&lzpvvTr|Bh^mAm_Npo5C zt%?O%`}+>5G7<9#28441o+-8VBb|6R$`^+8fFFqsLsNDmOl+VLUJ9j($K>{^WN;+9 z@u5A3k!}5G(aSsspQV7udER{Mhr%r#Ld`}E7XoVYym^Tq1^Z%_?LBvMGS0T((8{F%ig-gVr|pm7^kg6GUeAarjypNGM^}g9E|+YN zzsWd1GGkTS$Ia8DFE0JdPpsgfWtxFCZC3^}?{&my?`#tL)2VYG7O)U2>>q_5nq^`K`AQO=8CvO5+%Q-U=c%U@ z8!S~9@;Z2Uhs~%f&AL8HhH2eK(~&9K=Yw#o;MY8#Yx-MLo~AoD%9bMA%Rk-OGcatH}QT>5U) z+z%m_@7hJBQG~I`ILe`n@HAQ~PqFQQ$M5)UpD!Xa%7*w+MTJlKZu4Q6^d~ZCEc-1D zbfkVroygKujKunk+lhr#_J!dj&kxQbQj5c8WFZjno7!1`nGZk9zB@OGP*8)r-%`3a>S{*@n};F5!{IZ- zvIQ^UUnE|1OJWvG`xjhc8v8#Y@E<%(kKPWKOvNfDzf}-@ptWFio2gZe#&)$$f%Dm% zs>hsq0ChUA|8;2#IV05wR>toinIbp*tTI5z^Jguokh<#>;wdj& zmJ%1*f9@w+dS8Iu1{yVob3QRnt?2j4%RrQyv7Z0*+7{Brl2oo{a;>#NLu#Hi9Mv!q znmSNko>pBmRr;(TG2o@9!aFf^zC$sCIy8sXSRc@F+O983j>YGp&xIrTy!V~ASq=I1 zHGZ38&wJW!$xE(vN@Or!)_A%i{%~tj($-Zki_(4fGpIQ+A)eX;-(TzYyiL0!fT4w_&5>7k}253^Fp;9`2TXCQRcTFFBe} zmKm~2y0Z0TGQVZ$!4Ok$;$LPc+r> znwr=ixYZ32EmXKDvArYrs-l_|T1Y)T_K&Z^rEGmuT9IsIFqt+|q7Eg#KGHQZ^AV#b zixuZ>hA`M4?#@OYYu4sxze_3qd1ZAy*KcV2>Gj(R-|0QoK#;^>I_Jgy3 zNOZr1;l*fjTiEW$39ViZ%&UKU@4+>#rlbQUs}GE=&Q-iYtnJCWw*GGuUPY7cf?mn9 z-<>g4tXx9Cg{wP&ouZ@h;tMIzA6>mWZ|dPG8B^}^_;61;+>I;A*E{VWe{{!c!loE+MvPdB%}zg6lIDDgapT!b%2 zaOoMVJ-g$;SR|>_t@j@@u$Mns?PtwA;m%^5Q%!;6TZGbT3ttyV_qL-Ib0$KiL&*ug z1ZqD!S*!|T@HBKscyy`rI4OXY$T`d{B(S%;xszzfUVo^v%nVl@ehq{>~vCDTBoT6$h+@m z{zUyyvqbV<`tnalPSa6pX1==YmD{K}{Gcv(qZZ~XUYie7a-cMke63ltt%)#d*xH&W3 zcY5c~nkWL_(x@gPq$LZo{Dz;x&fDA}zjrzA@`fQdxYpvYDHH&GPnlA6PpDl)fP-B7 zvN(4l-yx?pEW#J^kh!H!Q0IlZgyUfg@;IDsw)sZXh;u5RNnRm3y7FAzTy5i0_#ph; zhLY0F>TtZFO+jKvv&nqG`q)GOts%S+^Cs$C9jf7%DQ!jtMo&UFW8bFQ9G>5v{c#&2 zcpRT{gtad4{=C~MRAC`sL#TaZxJ2*a@}A>WU67wUp^lIL`1i<5)Vw$!@3cYYKG;Ov zD;noezC-Y%UWcwN^ncUE&HArTS~;TTUyo}xMXseJ48(6E9aSA@ZC<>i-}!Rr|H)C+ zo(!HFs_IN@Js&pCO^o&i7vXk0W{}9N9)@%zTNmYVDKGC^6L3vZ63s5J8>T$(>Q+0f z;A(*A4%OJ0y(TOs^s;NtbnbcWmBxx5p8GSxH`y(FIJ#n`V~eb?6mMC)_r-?NO|k`< zJ#h&`X4M5`jJ%QWTlWRB-fVZb_t1TqKXmp3Nj2DXkO{u`t&D8hs;Ic?7sLe(0<*31 zicsX%voBD!b8_tl`+0?Vi0Z$=y*!75Ru64p??c}3&y?9j&a>{_TmLl7Ffs{KhGpCF zmE@Go*QHD)qQd8x=Z9lXv{k>+3({VA>h>tz;L>Z0WR0hrx^YqeoF39HwEZFZ?Eg)9 zru38K=smdL$|1IlchKUug-?K{thV$I$!gkkj{2$X!%9V|Q+J1SPsf6ji|Sm8lG`;n zzHFt&Cwy6}*n1(OGS|TlK^krst>FS+Up5yaWl?bn19n4sxNZm;_nuKJsV zhxa&kZ4uI}Fs8nl^S!D9yEk2QQB{uvNJ9G^m@W=5nb{Sz@{RwaGxMkcZ@LKU-~H{` zCN|PasL!&OE4}#()|W;qz?OBHQ{|_%I)j|jquM-=7%izS;j_33nJVj6y{6ZpE*0dn3nLQ{-zjt-JgTa~>m{>u+-J%;^J*+Ad zEpyp0XHNA!fHyBohAo7T&lc2W_;!?IYj8^3ONLe-~^-&Sc=Lwd2 zz;jDhb2b*u`-+^#%+*o%tze;Oj|iE2@SBC1hf~%n(^HT7gHYszBlJC5!JQQ^QGNBA zXuLiMZUQ9D^P@grVZ(69ecXEk1X>~eL{2Yr|1jj{Pqxqcd{*n*vXvEy%ldbGsGng% zJ)e#{w*&_+p@H$_riNW+|NI`x&IJay87!u z*}L!=L-6#w%v5LJGUa{e@@-c?>e1U;ulnu}@YS#N$W9*xN9pOa%$ApfG|8}9eIEU5 ztM#dQf;V&6xw1+U9jz=J&ZGOUfv%{S3G>F2FV%PQap@JX9P&6Yh;%|a+>=bE(~RN) zxP*GE!+93&OF>z=wP^1ec}`}|IS|jZ$dRrpRUfv7t_r4Fbyehcbt+81WVe>Mx}0SJ zcAyJ8*X^J>9B*=)VG!r`jzo(4S!lHjQ=EZ2onm5DamI}41BXn|%}h|d=}s-13D7mu z55)jvgVY}`44SS5P@2G;g+FTS(zzW~vAW5)3r;y?8&*5-AK)HwcY5gFw%RayWt}6= z56gSfu2%VO($$<07`o^Ehol-hRVksntZ(~I^My4V88U4zvEqsR`qA9iPd5!0p1jxo zGBeaa_lKl3&^$x+_Vvk;Oy7{5`VgOhI=+f0O-~Z~?5DfbLA0Bh&SulTm^6m;C{O!l z2D_GkA=1MnS@^P4u`7u3pyp+=RGIfa0wV32V81kHs`03|ujn&W!iK}f!^SVqF4$NU zL94`S#85&r?AFDG>QUY3 z9(0Y5rekbE#5~xnj8%>GOb&oa?1Y|C+G_~EB!W3i|4>um0r+^}2r=zZq zqm)5%HaXWZ;s-1C5B(iK_XGsdR;-JT9_fsTwGNOK8rM1 z(}A#>_y4xKT)cg_E8tQlDlV+0AQbOfU$(Mt$cAWMJ#@DZV4Yu7N*mrb^6*IOTWN|! z?pFnn_VC=Rl$7bQtb%)ZvWt8qtsVxKj*!EI{t1=0C84aSUs7D)#)=D^_8%^2O0WM)5CTiy2bUQ5SgL0!1E`ZQfL}AfzCyn`>kMD#GiE5RAaPC{!$k9CPUCvJ)>yQuxz%rP^7)V2O3%J*qLI*Xbz1( z<({|Lz0NW;wqncsIduLlKF@xt^JRci!_ZzOK=Vy3K(jL0<^J*Q(Vtio8PIzE!t8uf z>Rf+!#gX8JuuO;^v3%<0IdlJFb>p}`bh)Q7wm5p1Nj_IfQ7RbqsBF%$a2dV_XOca& zsyoHk%8NXV=DTZr5bcHa{nMOm5StoA#i18f;N_2+3iar5NAuLM-jYc6kghCQ9H*UV z#OH|5snls4>=(6g2*d8+Q4V7Q@4eB^CyZstI>l$&xsC2hNFJFPU zxR-$mcxa*?bbXpu%g^_#Oz9WCrtk2t5?9mp$i|;OO1GPSb$&8$uILB+_5<;UgA>|c zrUq-6ADrl(98TB{Ogju(Jn3uxJ*#-FqMssSj*XHhz{01_=-s$s&3&u+N4IAT;|SmM z4^I=dr6JcoI%Yq5HKc6;m|632XATUTx@LVPyoJ)2rKUgZ$wU@YKYJpF4OO*KwO6&j zYp?f4VAs*!Dzs}}^HP;NMaO8Vj7$SFJkvBhVjz+!UO@CCqP^fn|AdC*&26D6GnN|z zB}Uqj?3;YUPp;hRu#g3tNsmUSFFX_-{S@n3ArfU5W_pBA+%o3NT zVG*cTD29939e=`tEhALbhzH#6V78 zdi#O$!_mJGR;52UL7i0S#&IC>=j}87gg!oKoB%_kb<2I(wCH;rz0s2geyw@cGwI@W zh<){=t7mco$Zxub&kFH2U_%nKX15(h2kVhOzKS!X14!GCFnP!`eSaHXC0$S#-DVy8 zI?B4{Vk9;3UpyZ60{5b*N^ND0CvK)G@?v`_A733aJSH_fa)CmwwxBT*dBn&(n|+t< z>aHRl9@rA4WL_I)$(bbq9tdPs8T2=Bd?#S^6>TZVrxu_;941ncB=D75=~b1}LM!3Z zfwONQm~!2tX8rK0(%j2mv(BixOr=aU!b=+VMW)#`awcgfZZPD2!QA2d7xXS}hmH<= zhJ38WBhwpOk|}ODkyCUVUg{8%x#A=eq@tJb7CG_VFTJhH zxyl>6Gjl@o8u{q=75Vx2eiKZUXAfgl8l4|W}K#&{T==G zk>HzR(36`xoX5BbxCm4VxIE8qu!<~#K2sFz>gqSB=%^HMwP&c4{#IV7am%9n^5ep~ zNb65bLGhcdgEK->c=+RZiJerwDEE~?3)#yc)m~1n zLrX!4V##6yY%93&@SOuYc05`rUidymG=0>9-D`#5xGcGr^b-7FAcfuqrKl){CIyf< z!jwOwX!z2$OeNRtKDGzG%(c^%zDfdqSUo8B;`}xQqEv(%GFn01r2p2Cf8n9!Nb&F2 z<`_cR`VSK#aPNu0Wn|Ib2yRi#tUFYoXwM4weknd`ys9r6N!kLTO>gU&d-8JNJJk~J z@m>!tRh2Y{Q)%)--&zLTV-33#ber?pU;ga@{!x8l+x}80lPWW{UlkW>+`M8c4z99| zll8x1&&T)3qkR~+A(x9#&WE7mHp35!iAmbrb)XPt0~g(H2;wwuhxx-#oE8RGXdiiS3}Wkl?E zUYVvGQa@{4|H41RHH0{8mYrez?uWJdRq>NGF-h5N{wam!NRf&^K&^tV$<)|eU%bu3sE+6vwXmuU3v37PMFS`tMZR3ygQog8;FYc?q3N4Bw zqy@5jDtey!*-st($n4&HQFn?-dHIepd#6Ju?bVt$>wqH}bZAY9N zje&i4y~<;IIsOnMCaOnDWuLpV`(f8i@6K(_z*flKR0_*@#_xZ{Sm)~G>O=?>KMMD# z@3DTlPj?arGihkm5iPu*zv zGeEnxtesf5!+1R^;@AEIneS!qB)39n`OXu{*FVMnFHjjtiakeP4qMIZ4joUA%e`op zPIELrnRGdcJSa0v_8PhW+v2Ia=XA4Za9&EVyG?rI>HFY{?B?5Y-ai64W{xZ#l{li7 zr}q>pmS_a6rKYX*g|#5JJZDhbMg}X$ox#{*>I5GtAO8)Q9xh8$679oB<;&z*r8@N? z;!-5zwp@LFnt>Kp{thna_~u9jcLfzZQ%ODK2emc6`gztdrn95cS7PkIm1;w$!6bE-H)oK{>r z16wwiFHX5}atKW;e)x2tB(XhPpjET6VO*&yZ{Wgu;~*{iQ!(~jQ+{^wyp{6t5P$u8 z`;SkdCk4to3s=2DNZJS_jlm*Ud%;z`up=``h1W&WkgeC}}%*L_)z zi}w37;CU3?$+NbQa+Ca#OLG-R)RRzNye!7BhVZ!2FDP=wk>`Z^ri-^#bd1G|kxz2F^Y#m+B?($%GPezoIk_UvQJX?E0{nX;{3;vAu-A zCtvvP^Q?rDgxJbE@e*em_N-hV88eM_Vv=6M{p+7IGpD#!*>=lGb_&tKai*)or5uPx zM;vu^k5E8vo($m_{VeVtr8;!ynTF%CN@7%={ReT27JQH4ZPpC}dhf% zucpp&9D2d-b~#rb@sHlSG#Zq6^ulud-$ve=Uj)+=otfU1%uK28Rj^t8BhiaNmv&C* zQ0i%l`tDFvI;Co_Kk9J^wygj3Yh)}M1eXm4%uuIK7@xFoAhIpn-80I- zAa?GVhK0b$g{N?&Rq7nfQm4)--CI9=_fMlZ zv;9WVXX~e%iN`PdV@{8^lqT2DYCzZgees)2ily%15SX9MJrtez?$Q#bcP)E>Ze&+# z#KpAl%`$S}qQ-#9@y3DO#N8t_`gbsIu|nu(%}3|mACxQOWM_phXf7EKn3XzLoC=V4u?v z(J>F{6^WGNmj1HET6WhLTs4c|fA+pU0{+;v5cYuVbh+y32M4KF@lC?Ht+df_%iQl+_pmTwQ%hMx7ICmoG}JpssFQw6D7Vddl+x5ow3fOZ~$x z)N@{Z`KRT~=NH?}vFW#c2KK;q?|8RIiAy!uB^AS+6P`~>pZ}0p>1Af@n4COR>}&hI zAZGqG(3#>z3kP@S;QSLNFx3Cu$8Y@JdK)-HbU)yf7 zSuoqy1G_ekquqL3Jg3(_D_IxED>58Gc;>3qqo1x2 z*ZL~M@%joH%!HOy#lqWF(k*v>1&-pxs%*Wl&lY^FG7RlRiHXl1+*og{T8r~>zwmSb z75VG=KR+XW#eY@M?r0dw^6t#;`=?1L&%pfG3`eWfSyfA+vJacm{FZVJK|Hgm^VH{a z?9)bNnt*8EYGpC&T|IEE!tM!rV%`0*aZ2mZhl>@B?+;{y$OaW_PtnyBzT4iV+eqi( zwCXi~g{ZxX7f_1JfgQR6akUE7CRcjyWxHqR&Mu|6r_<-?^>#n>7Aa;D$VVLcqa zqNjyz+P8&`M6&-OS+N@t{4kY7agBa3exmbveL~t}IFBI@xH?^_Kex1BK=rD=HJbk7 zf_CgE4%{b8zp)BW){aWIY!_~Vb)e#mH@2Hl$G-&(2Wa-^^Q;H%eK(9k!AH`u=NfaO z6-SC;*Um3iSjeG}6F)RUrkbQR_lo)3EchD&f5nCTAsH{Qyc!13b6#i7KlQzleOZt~ZS*8=2w=~6PHOMCd zB_rl8jsF<-^oU(+|79GMJ^Eb@bbe)4 z?eLswZoWIRXyvg%d9D(D@Ia|Z(QM`6$lXBdby`(g`$AK-URoq@{wk1y(-=)_9t|0FP z>smMrG4Eab*c@KodC|bFro6dgmLMD6yu0)Lfqbe%bdCI%xk`#;?Copqv#_DL680Cb zpV>=r63y+8OB3LBUwI2!n@h@FNtK1-D}!ui7cB!{H266CdKM`jtFQ&qmGGTwLJ26n zWtZMBRBRStc_Lje@ayrDo8`@oVpc7pY8Ijo4ia4*&ei7E#eFyVe);jh8(Wj1f96Ks z_>E@gu@=2XrqLJNtQ1oN5$*CM`J^Jh4bI=>^eZ~#Y~?5RuGqEsmN=JR(72OgpK~jR zQU%zBC98GUuNpetZ#k?`<(qqUZXquBwtog)m@HJh{c@Va%3b91qD-xQO;6a>nDbd!b3^YKPTB>jr(Xt83uXv%os==HTYFGmaPb;x(vxyKjZ z*dmILT&@q9eA0KgAd05Kv0Up24xW&GwNlMrHT=e7i#>hfDWU{6=WmC~J(D^39oLHQM-bei?_;kU zAN#%*Ci{)(%xNqq=P?=!$~mel>&WlK;>JAp>elG6X-2bB#DJfb5+3wk z=R7k zsi(OqDt!H?HcZVhjfY?FCrm4|ejF`xMzt0D_t}#V-?P*}{Fs9j(7z7sEdwHJCx)Ut z3191Fd-R@$6&P63dtG^Zbrfy8k#=s#`O<}_mSo+Q*v=bg&Swe&_cQb3K$?sCz%NH7 zXCwT*18l< z@iTsq)WS!+Snviih~4~0UrSup0?lw`W*|dZ(clt$=Gg!Ld#@D zr|yBPCGcETxTa^+M$^+sS2myy*R(XefM)|Ezt_F~P$t&xvdt<@Eu0k%NR7OS!2RCb zG4-w3(U2YmcLI3863dbC z-o&~?Qk3bftCw^zQ>LK{I7l8r zKNO~uSWW`JKCCD9nK5l$Xfnn%(pBu50`CW2(?gVo^B1i5UAqJ%905N<0Uu^~hKL^P z6^3EZzz7_EbI3=SV$!eTkg04M_jB#rR9_(A!bAzN&@6gYtRDewlDL12n)QW7E&{9O zV@!PuH&G?r1bHc*q0klY;3y!gA|8|Ajl*;3)K=-G;|dQM#RycdOamzXvqup^ca~E@ zq?dt4$WV0%4SmVuAtWy(FBYx-eqgcp+j!Y#*%`}t<=qq@Mekm(enA%RW~I9MW~J>i zccayS$F#C2AVo`9K!^%7dPiNI$njY;P_6)yiF>^qhAYHx0mT$E^W;AaA9EVs&EkE> zC;mIOUBeDrM6V$+78u*Eg>T-|M}1vMjGXl?k-cFkzNzX+{f8tQg!-fkr*9!Wkz;hr z(aCU%#NsiE%6+k>{a2|60P`ObA?tnZhGg0jN$RY7^5QVrSVmOy7jvF(xR1UZRT4li zj@kKMcO5QxhXC+|$<@CMBfo+x#O(mB;)-FvE77IJl1R)dAVeNj3hL&2w8WzKz$6lE z?uS|H;0#mdCjSXc({r=UGj+99fFa0<@bduMSWs5-a1P|AL$Xh2@`3QxEXyH2VK>`l z=^;KzavXG^fJ}5%94WCl{8tQ({7PczaYChI!l=pMSD89al}Z>FXa|`f@At36e^Tv> zcL(2);?06&HpN2Nc>C`HO9my}ISK;DfP@LIBw_lW?=@A5=)WpZS2|)U`xMLOdqe*< z>`sI~xY0@Kz@&+vC5@~(DuL8oRgR3P4wmvb z|0F5ltm{dGEagln=rL!Q&_GC<(~cczX+h*hn%OkQuJ_5<=HLQh2!S-BCaL#(C5re< zR^6{kKjV(~E1aQsj=dmxBssz3xoKSlU-X0SkkY9`2RxlgpFBdgTF|Qrk5e00Fj+-S zOZUkLXJ>Dzn->r=m zm{YpDr1amatT^kr(W|&IdNrZ8zjm2%qQxSAd;MG71X1?i^4fNi7pr;Un6*keb?bOP zzS_G?;jz7mv6g>z5xUE$g0G$L&n)TtD!v9~a7qwTXB}j2Mo;=lYUgCA9D;hyZzWkl zXf>21iDi?mYdvlyX}*rc(_c(J&%{|@$n?Nf$To+*I)AX$X-c|yv;R&`FQUZkszLS( zb@M&>yQFk33W<8rfnB5sNABio;b|KFE95_!`tZfcj4I#<9{QpTYkQ`Svm%!+d4b~8 zU%fN>0@cA>hL*t8dT`GAsZMa6Ajr8JCV0`SM@&1H7-C7EP$EPf?bU=V=+(_3tPhia-{@V>9ft(g z7hNq@%PHv`a4xk3-O@D-(3*9?oU^6&U=S4d@``Ef4Y%1;;?OfD=L{3(K4Piuh?U`7 z_29(BR5X{{t5=~)sErE^f9`tkgbC~^jBi)^gi+#b76XCba@DJ^kJTQa#tzgu(Osl; zcbUvU@yOjH;T)nDCnKwXlx4Zb_0HfShDrHAl9Ay*^WL!LOCg&rt!>r;%82D2kXJZbxKPujh^>` z0P58x6mc8pq>kjeI)HfZs;VqYgT#y!hewc57paf<*mJZJv5@4?Bp0Pi=75=r z8iqq6*4;DWbaVZAc?=S zk?WD(E-JSYCpKU5N_jYAC1$vS7|eMNG>hG0it(f-z!wsW%e8=rcR57p?vj04J+hrq zZh(57u+(3Nup6CTD!E?waJ7xO1>kgg?G&b823&^O`&)w4dx$qlvxk&jOZIx)T%6@u zU$siB3>Uku?Y+NhMiPY25}f+X4^W+Iz^8QTzPx_W0fM%47!5C-x=|}<7$pzUoXo~S z~>`!^tOst!jz2Z#$m?FKKexLdimF&vt-xKI#Js0srWVrWDX z#BE`KsbTUfm{{>+M*1-UzyB%X$=3CsBGF^LVJvDX+Pq0buP`nyrfUxpqZ7oIM*n1( zvO)6V)1EO5VR13a<5n;`u^vVbH6E0cHa}1D;JT;W6>ZYLW&=w1uHL0uTwEkZ7Dkg> zKcQ1QMO$R(;iq+}*xru^9=8hV$>&qF2RDwC-Rn-+F`7Kdyug^hoc1`r^*1Vr<nVntDf+UqTuJwV*a#IF8D4BMv7pUKZZvQyI1BhIoTz|WAxvO)c0TDpa&F~naV{<{ zgYx%)Mf76;OgT^$w}l8O6XoGR)Dpz*UD7LmzgKR^pL<96eB^Z^S99#C$x9ShS64?4 zq_5s3eHuw59RLS_?8!z23g&{)MRU=`X!Q3_rD&CW0>^s2#ZYeksa##qUs={*`uMNZ zb&S?}tQrn50Z>a>bD4;+$G>Hlu4og*PQ(suemr>mA6#j1;kO#%Zq>5^5dM&CE~e|s zNnwe~1DvqOiXdjNMAafxxY%KR>@2@;iT`|j|LgxPANqRrtw@xr?BC-wkqFO;TyQQ1 z*!8bz04d@DM9{^kaTC?j18St|T)z@a#F3~m!0NAV*yN$ytiP|fdh2h24n$|O#{#wa z4=jkv|Mw+#Wyr4HLL^=HddiSpgI7ot`BoTP%l|z(H&1eMa*_t^B-yBd3z+}=B75v` z=?@7F)yf}|k6nLAdcyyZL=(TDJ!9wieM|YL$E}7~Vw3@XCH)IM2oIn%@pa090>IJ} z(V)W!tp4wd@{9-#PZ$v$O;P~RYUjs3b_37^aH8*WR1Ogh_}3Vo6uJNZiyI~Y;CNE6 z?{Fx;Yxf>5%(w5@D>$t@Nr$D5CK zrV0&=n?%UST)(2td!T807U`=m1C8ERpc!3E_q6|hBA!3@CS)SzI)pCT<~VV3RnznU z1f7?Mxpm6MUI`XHuLyj`Sn>T+VJBUV%rC*vez>PU#a12=4dCM zh97d2x3q|?zXi%<4W_!d8gL&nMFRH2h#@H%$P{T~j)~=6*Oo>wwTf(a=Cp}z*=#0k z`RPX&UW-{=T))r#iyKx;h~8Gd3(O1mH261~0dD`Y;NVWBFrB7aZk(MyJkkbPZ}{EI ztPmRuk7{Q$iG796li+s zXGkf!oAh$y?2nXf^?QXWClQt4gPL%NTwn(iFS50bR?Y1`mvgefY@n@@1bfcExPmne zyvQriNtIuyg94g+4}realMmeuX3_gaw^Or3WFxl)9&n!x&px?oIV8LQDVLBAD4 zcr&st>IsbKsok{zxGUYz)Jp*d3}%DstqW_*`MI`|`BtYWrt&{SA110PF)>$K_m0g5 zat(=q0V60%bE$-9f_@GtgIw3HB>+1Rfd2AD*rZd8+8B|ZOn82-6Xs!bH&IGdNE)hm z2^w9?v4je%6e&?Uf}5x(a|?qe;Je!2x2JJ)z#bxV-L#*?;%f=OByHa5 zi#CDir7OxdTglQ0i5YriieX=&_x&qpV%j)IV}e-;l1EfRmKVA1iK_*ikTmaztPXMD zbphe>w8&VSzfcfFhZ2z=V?<1b(f#tP!r=P?AL(ZdJ~O|x`4WmG)dLmSZpQ4YSF6l$ zKO!i@=2QB1i69a6f#P|wW4s4=;A1t=^DEn`iJNf1fEp@W9nuD|t&i}# z;?0&x8Ul0y!eTS3Z;fd4>py|$8(Fa_v+2cPzinGZ}Niinb0c(li4 z$_uNr$6(8`XU;w|tKQkN+Dw}Vs$;Mq2E7-(BYK*)>R>$e2zY7=46Fg2gfKmI(8qVG zK;$ahKB@$cH%-y5V9_7CY7pC~&#-0cCq1e1`=GHpZK8a9FJT-QNnH#yIl|Rp%`ub2 zAyy+R5I2cUY8-r}0h&R;Lrt}DZ9ZZYX!GVph&{95(Vk$Q0%lI=s|nq#V)@*JIFr@C ziStgj25UP)qUIg3(D>|u&5>#11R+`47p#p90uQKxbvJ0tPKtIVK)#&!pul_4@2Z6f z^Aymn)v<~R`i|T7H$tow@s1lgmhEgM&lm4)2BZeTW``;@dE>z7Ra8Rq5LyoASdCWE zwqULWaCK3jpW;0brs!_uO$jt=rN=}2(@pytHL!(l3C`*^G;7G1``kY>%Z{N>sAHY{ zAthW3n1pUOiLi(`$Ox`9eQ46EAEAQ|GBQ;-se&rpC2#Y(Vi@ySUk8qQXw%HbKDa zjxnds+(%49_^lM}pYWK!mBxt0pwBuoZ zABBbX_9`Se>$z|(I-gRu#EoOW3e_a!sl&&USBB6hnN=DRqK}sN;#0J7fyU|{K(ux5 z1OPSU6PP(OS0}33m+&;HVSfpAZz0Eulg7RK+SQ~p$88zjCs#QpMCzps?%N))^uOcA z{j^v&wZ#`IvPli0C%@VqD8@Q#T(5!@rD*ko)b!HBlgWUhm3Gt8U~)N+=||cscn>L~ zBi)LYu3FHng7ra~HSHMvikoM#O!2OI8OP8c^l{^uKP2ZBY2pfe8io=$RG~}*vqQ1Y zEeS`EKO|j5-xVUq0Ll;@^m_d8BpA=vXrlP)pk>t{1eU|=IFkM!QSTkd<{JKu7eT~I zV#StW&%~xiB1r5lv=pILR8iGdON)qv7>TW@*rNlbhqhWV(tdsHRKD zdDHLr{k^~Zkv|fi>$%4LxvyNG=f1A|<;yLe@KrZsHi_9*i9X?fgHK=xY%zPWWwvN( zUn%-^PnTepI;f=R26C3ZmM$oP4zJB_{cQ9K-9M=8Ad3iZ6q{9;wj){yzCdCI1(7lG zKOxduv?8d^zIT6XGVuHU`7?)IW8D5H%#|Dte_;H9!x%1bIpC_ z!EZg3{;wX3H#t=U$%0+Nt1%Dd8SuYi>f)L;uf>K6BI=KgzunUW4o$G=Z_Wgs(Hung z6;tfr$5y$Qi+Au%rt3<2*o^{)VJP3-_3_`;(O-TOHy}p3pq^~q@!4@x^5;c2>lMKx zA8)Et4~N30QV$Dy2oROaxv__Aryv=yNdq(^6#9&8GVK+*I(G2}Z}%ww zmjD+Ur5Yt4!I_irpTpxk`6P$Xu&R%BXYT>7hA7|18kmtY3l-P2AZ%><^wh%bp zH2REL=0)6l%Nsae`eX!k@ZkTGgxMjl&h$>7L$|;l=@O5u8Pp^T+;-0F$lv=4pD}%vbcIKP zGPxi^etWIm7b{p)>aqXpv~O|(`bbbPmU}FCgV4HI{~d6PTps^(v1lp!ntLWY-F^v@ zfe9}i$`27>)&I!)Q8ZkTH&&@I<%V8T=vouRVd-%3f{EkwN$eNsQ%1~C)xc?1Vx=J3 z<7XC8g1qJBo?qv0E$}6L9JnBhQN6EB7c9?%GCw8TR`+5aiFt;@{TaA_g5B|s)7ic{ zO210QToe{g3a+n8PwczAM7B>BD5$jmD?f{IHI`5{Fh@@ytZboJgoUeiM2EEB$Lj(}KF7MLVLYLD#h>h9$$mhHYeF;*H~>wh?i44XP7`v2VO zAPCkO4kdLC&?zP|p$cj)05bO^jgNaOF;|PM6Sj z?T}+vm|x89^T{h&j7~=UGW>BJ9rmgFFxF(XPY2WyJh8shk~ z=I<8-_hPmy;JAM;IlJi8BV?Vp1OXejWT@;PDad1bez^v}?uJi$g`3t2({a&@ktKq`PpZGvK_zdy2UVWEO?T7H zGhCDufOGu+{by6ePLx0_xO*Q`{75WA9X(vURmr%g`y;bu=-(jIN&#~&bptODr=ae? zmX5=`KYGq=*JRqISz&uWb?8Q4Ii?vsblu!g_FG4G{$8J8b*s;~KK|{tP61yi+gH0G z08Kl1a4GxnRD$Dl$gdgK)JVp~hc{}U$&FRcxN-$nY#HTI9H)Pi$*}EwH%AKj)L0oW zKNJ1(+mo-r$=$f%|NoDUl|!WFI)k%p1Rcb>6<~sSNEZt!=ufwQUu3&fENIe2@G)s$ zK)-X+aV?s=PXF^nf{=)i6a3e)?a1QHzR(YnRD;Nh6Fl8k?@W(u{1&&YW4Fj>LN5Iv zOQUS@8a=#5E14n{A3$-gvWLsH_)l~mg5Gd7tB^}q!Rhk9Hyftco6IzRnw@AR?KrGw z*FJ}6YW)is=*R6Lwi~v}+0Gf`XY`~~wdr-5*w3y{hw zLs)+HkO`k~ar}rk`$u}m5>4|*&sV8TG}I}O?%O8bqj1AVXy2_VhnZVJ3Dc^$C?ta3 zP?XBTIMpNEOaaNcw(QM{&J8V@QNNCWGqv%xnUGA(6|6_DF8{pX{z~)uHW^WcI_*G! zufHySEE=*$*Q_;f(N*JqiSb;x1q`Wy$GGXZSIveA;Q*b%<@Yfmq{)52A55_F6XPL7 zTG0|BME*MTk8S)#Ks(!c6_wo`SxDnrf2+Bgoj>ZLkZJ5ZQF+5h)~zc({|A&ti-kLk z+u@hR1Eg$ka48#}yOL(?&CoEeFMbJ3!dQ&i1;GOc%9qBTP2s(&TVz|jAIAWBnGW1t z#Cp=XmU~bV{zoA-vOm;~B2Q6|$!Pbu2ADx~guNz4i0O**L-k|YwPTC@#sp*vg>6#| zNC(a$8x|-jI!}S+xHH7MrhLU>B9c7MuWtIOiyDLFK%GL+|8fsrGywj00K_-c=0}6~ zZ1=sfaw^0{$N}ygFCG!(UP_`D^MsB|oHoPrmM@a%1g1xzSh@eJ07F~cIpJVhgG%`T zhf6Ea3Q%IkMOPgq$k)QRK*B?po5mpy=Dag`ll93njc963{xIY;5$t`G;%esd#C}#K zUNPI{(cyn}ibi{PgCRNxiS}}&_>yt2B`&6>!Y!{o4WTyui3UxvOEq4IYeuACj%T#y zAo-n|k8v!Dr$oTf>FO=pgJ3a&*Ysas;ex*JaxVNe%IkXa=wl*J->V;ii;Ia`bDl>a zp2KI_dab+)x)SYx<($g%Vl@6o6oZFsCWv(QpN`gS5cP&>U04subzkuJm-jyw)t~lo z*H?^2eMG3Vg~b?zWfx=~Bu>9S7to#W3Go}-HEsfprPMF&cv0KEgjVP^ zWd_j?$||(fr0rA!!Co1XE)1}Q`u&`Jh>0vpe2UxoqXS+XMIsZgg(IOj9lJ?2Pi^aJd$J`mnkDTio2?2;#!9)`}mk(_3lV z>u10fH?8R5{|+EhoDV_t4SFY^8|9SY(rsxfP}&s4Tg@Rz1Bb*k;fJ|)fCsCVRY8S2`N)24X0G)^vu}Fw1d7n}IYxr-l4EXMyEMx& zTHk{|##rtl4`&)&$uG4F z30z%@_a4IK+P?GP&=?5zD;AlPk#a~!_isf#qh?g;Mf7{O!t8p&XMFD(woS#We%sop z#`XztF0|=2k)_!kxHV}?yuZM80dVz+mDDvWKCFvau2+Z1jmZn+CQVKfh24`%;*+ZN zbpMv_nv=i#26T!6@y(Vtmts83?e8p71>8@yOqydi)gpLBS3Q;xgT_Ba!5K%0m%Ujv z4IZZek_%0Ys-Nl3-xOepE~5DCpu+7d_eo^z=ofE>Ym`PvvC{0g}f zskh?6ZaU0XEBaGdH+pt6n8+>sh>PhxtFhB=--u63mrLd~IKG!TjSx+lLsp>ddtD!> z?_M>OsOa0Bw>F~NvJ`9b+dYKcHbPqhnrroK8xJWK%$S=w=KExUM-CEw|K z2k~dhm-1^o|2n?7*-Q|a%AMfUHj~vE(d%sJv9)*(1WJzZe;JFuvB>5<_yJ|sK*>)a zNXU<-Snr_lR*Sye*oo)d4CvT_N;3ywF+5`z)2bR(Xz9`l6Sifi-!s2zd2UX=^^I&$ zEgl-a8|E);rIGt|MAW(k`)He+cB{#woZ@LSrrP2E852qQm2c@KS2J(FXhS?IDrvrD zW@8cS>(#*BjkA_iD2|ZMbv%SpsLqLwa^>g%j@#Ige6Cg9@-zk3zT@5GugrmE%tH21 z?Hdl52(b~w(SpvuZNXKF?|P?CY3p$Bkf8O&9;a2|D&Ea-cyX%0iQXlX;W`daV6W@+ zZhkO&ht~$oEXzboWWhQ*tasxRyCIWo>)mL0^$+40JgB(4P(dmFo{FB85U?6oYL0D-n3+d#Hty6Gb1f%x%Bj83WZb0V&RbXQ8P5S3d{(v9 zq!eqwJIK`bqRA{8(&s>>LuZv8axRTYw`J#KP_G22xLRV)Hdp7+bu+pHmmfZ@GN~~~>o%U-a5C$;w^IEo*=^icWx$ZmK zdIo&hDrCi-tHaY<>Y^^UZ=P+Y1aBM0hj5F^W+9dbn`cIgx=r5CL=B*8zZncozvb!< zHEiPjhH?)vh0$RqweS?@6 z9B|e_7`E|PtLnY9#Tgi7O0TZh{(87In~U!%OKo>=UFPW@qzuz=w(QJCi4FyXtaH;1 zxbg9`D(S&*Q)#zxlGwX&uT=P>?btr8U@!QIR12-R{Mip0qn9>_WT^pwf!6WdL7L#1 zbl3zSAW*l^hMFI4Y0w#xc5qSOM`|WEtmeGp>Kr5XpLc&Lv#h2I$PR0b|6*?)1V02F zoxG2M)@s#*(pJhtHvX}q@cbz7B{zKA0Q~p_td6`5(6>RHNOMuZJ}?#1AMzvV#ySLd zp4vpMI=tE%z51#MD})B7_4w^sUUpkqB%p5Fj0d2DRK>>S;zNPw(VUC3J`Unu)z8d+ z%0yp6D9WAE3v6(Swc<;~UY2h`$sR#_F#3B5v8rUGp#+Q5;321rONnHMAUR~ z-1efaKg$V^5&he_ycQyMS1QX0o|Fl6JGK_NqkEhgE$Kk%3=f0W%p+|Z4x9k%V&XQU z2DR9%+*AOxYacDk46>QAqwG10_W}FqIAxu zOfyF{yfjK?eL3Om{T9~Pu zxZNwNr=Dv|h{x{s%wUm)*61KyP*7o;{RR6W`gYeyzRAO)Ag`E|U;U;eoA!%1c7O>G z9Ii%mo`TocgpVkrXY@Ql{9UvXJtRQcNL9YT%a-{be@lK{^^zvz(8Ij8+u#*BVMShu z*3}O|@Vs%2Ees;zSsvD%(_qUp#6KFnl{mUg=7$!GJ`gsEpWOKBfS4J>z74!xF@2zL zwIcRk&QwCcl5WYT&8uv2y)OW5n|_d;8WP8yh1MY6nJZfw+?%*b2ZlUU)$VHtdPK#G z99pQnjt%K0$qX_jQ*%6J{_2M%Ve9ECjV&4pF4AmYok>fCgoBMm8!+5B%(~)1n9-?u zm|P1C^_~scu{AJHn;95Opx7w3rbTvTw~*G3?SfUu!}RVlF|LvN5yX;~m#VD1nuUvs z@EA3TpqI-pt!A!5;KD8E9P#sGutOF4Pu3mf4R#Z&!L*frx29fl??Us+iT9=5T*@`x zp)+_r@l&}vJj;`58n1J6KkmvMUR?8MOXoaN3ziJu%eBy&v7t$&?B%y0@Zaeku_R}K ze&s_GV{qPaK{l!{_~~dSR;^pef48qtf!I*kFEYxTAegAW*C;Y#LW1Ya4WFF_4ExuDs06oBuCE*9_V5L z3LsCnI#8fn3R>n(`NML+F%jxj+0)`Q%pZC=KHzuw4KKHw-tG(K1B!UgpDpTLQIrh) z-!4Y)nd9drmitl;jSCmIiwh;ycICnJ4wX+;94?y5z`9FSUk@jpuMz_o-Ll`xA2Y|9 z)Eaxq-5s%IiBVi~v=2!g!{AebwOYCJwsICx6cd+c7(|k8l}dLet2{N$A_!%#=x)Pb z^Gj6Bjk92zr${kA$5noQ$1_fsQWW+p4zM+?yIM2isg}Fw=K+}oED!td=md_wYpj^$$+NMgUoz`u!j_%ILXAC%e&A9arTb0M$Yj_ zTu{s|S{}LKkT(a-A0Hr({*B((iRKwRnKUl;;a!M>$3<06hsiEnE;}w6`#Gx1r~TpY z91!;*f}2~SY-(9`B>COtoXA@S`sD+1MQNv%kzF}aCVw5ZN3G?wOG2dI$I^9$Ne=UA zZkHv_z~|u~%^tr72DBTV>ta&WqzO-rk5Th8JRl}-S$x~L^TUY%dl}Ig37qj8FR%8r zmA2K}Rk+1KE|^nkX&Mx7NR{EQMI<`_4O*p-ma7_hZ6DIzAm3(8z-CHawY*&R{h(!Q zFI1Z~+3tNw0c_#mnDjLQHJDUb5|@cFd132`bRoP`64=L!s*Mf<%{JpO=Dn41>tSgB zC*N=i4N_inCRJCZgx*SRatma!+vQHeX3uhDA2Jx6 zUkb?T5E*XHZz=%EDbX7u-BIu6VQbodXe<-qn`j8)0Q;8!fzXQn}HSz9? z6;Tn&GnjC(P`Xs~RYZ2Hs~G%Tr5EpKmWP%H;o*2=n)i2c$Gj8UDv0DormDEU6spAU z)mYA6n^a;SO`D*|7}%to(9mvBK;CR>s;#iJ8ABJn!q$HPHHfyo1Nx_t>uAxBBK^J{ zht71y^a&&Tb&pd?&+X`$5fu%6U4?vP`((U#vb0rufsU-pfKnFho6+Aoma8NY+`2AS=R2E3`iFnR0xzji5O1yc}I1`GkyI>QUfiFRE)a1 z%#W>msCYmqlAOY@gY-|fD zVqsG;B4k_tv=-661YQoaV~DR|(@}@yrFn7v3Syd%%LuJCs!i{5Pw;|}F3J)q`d|{y zY^tme6K-LVjzm0_@!JfnY~ri*9+Gz9mPi-!#FLQaYU)9-UOStvqpvAqagwRgO|Q@8 z+$#7OPqDHLh;_cbi#6!{28!CH9K0@@IEq{4E06)>z}ImN08_;3gwEC#R|Ht!6zh|F zt5$2PLanH6Vz7UXGZ6>Dxg$di7$Kg(TE|oBEH^GW1vNUe5z$=1eR)p70^D9!N8)rv zg%gfGjC~lcu&5~|9sQO5&p4QZpv?L`srs1qK+Hzz9gYN3$l+kl#U6C0@Fx=kN{o?xK$UTuYZsjc^kTACBl#Xw7kTKWd%p*YR? z=9k2z6*NubcU}FXB)>w6Oyv;lh;5bGe=h~2-oYuAbKI0`Bt)>^yxXLKj;R0b!gEn} zLxps4gJ#G{9H&mHXf)B~v0DdLKQcGHXmp%ctXi7Jx2&g?!{?K+YV;*6ZPrCnj~FQ0 z$3o!?o$obzh#te3FkciJ-Oae=;TLUz#9#9&t9^-=WR#^t)re9dgaGyndRli%hW|gt zR{4Sy<&3#KUYV1ScZ@+7{Lpvdeu}rP12HP#H?D3Z-znoA?bRNq^y*jmW=E0jzL9+l+Nh~oMs+6UG zyl|Nt2(8_964DuwMEMyAJ9mGT3Q!}Ffhoo{o30fz9t89g(P*6f2^U_F_V$45u`a-%QF=O*!oxa3yaACUls z_-~+)6k{=wt1Ipq;Ab%HEv9HVPrEC31RzLf5x$-_A%Q4$!b$cs6TKEoryc&M> zm~m7AKs)F9oJi!qtY5ZdzzRtboG%fX@)Z9`&tkRj)}Jtot7`=)KX`)YJcnhsXA^t_ zIT+#olpLjWptARd^PnZPy>;>z%LS+B3LbC?5wp@6v1tkx#i=T}6hS4m{d`2b3-K|s z`N)v)URz!Q?0Pc$Y8?=R3@3OOT#)2P^W1f<D2inufG--!kGq@+I!qZFBrm!> zpZyIqc5~3%>1Q<#<1f(KG8I=jiH*%sD(QshfKbfhb8mFXET*!$wUQSU=-9C005aM; zDw2n6VQUf%%Va*s%ZzPB^@jv0B@yBq$J+WEhU)<4WzS9_1GpWs;h#{Rl7(W2w3BuX z$|~R<&zM%V^W>j*s(Rxq$4WZCLXy9kkgK$& zjABcKH(?(tfu6Ar$~;+RlnughWfgaiKwIwwoJqS#y6=@&3xVotk4|xY_R-jcW>JJa z;@qX#(Vn6JJG?(2MH_M{*bz~3CcM{P#BcJ>Y3W!l`pRO}&5Fd%(VZ}!en)414{l6U z$EhiWYr7`iu~} zYuFkNUrI&|c+pgrc6Hjo`2iFitGucimt%GSlcHRX2e=_F)R3IElKbii0Wm&etn8mtip*P?6nb>NU3HA%c-^n*a)uQLAwcQYQGjtwudhP=7EEPAm(@wihpo=#L!*suD8Y`11Jkq8lDRq=}N-hAhABz)YHcE zG4|(x(q9|w5KSH?Z(=WZb_7;8&2T6Bnkl``6>x2#EVYgEChZ=S)uMn2byvg{kpnt@ zhdaB1M*JUl?k>fomWmxXHKy6rj^OK*o;Jd@?MujA`p)yXsVTJEW$cAFvUa{uXBDW@ zr2wj;MY-foI;s?Bk%jAsoiR_kRX7bY0kf^cIL!f>(|Tm}T&`u2i0IAHLz9?SBhshz zDy@6T_~CKZA5CwF5UQ`p7a`U;NI$&AJqB?MV2bIjYX{ckG_#DM!x1>kP5*t%MwaU) z2^Lvoj;S4c?%>;p-M=soi1$9p-DVp^1^vSBDc~VZas7HpVcJ0QE6h<7mvki&q2`=e zTn2RO52K(H^>nvv(d+pNkf{W4;o<(C!y^)((Rh#|rO=P9_7ez6;0z|Gc}L7EUDjiM zrO9VN(oL6fb+k(2b(PyC<44hJ)8L$hzsGVSive+L9OASTGiqhTOt0Bxd2r2k=%{R5 zU~p5du7WXArmAOB@F#d$wY z)Ms$6H0pP~emWPl8t$TQhF|e{nk7%UM)?;vmSccUO0mA`e~rGBat1NFYZj7@_*);* zhrY@NRlIY;cj|h?_M&-@brcV)4_v!**w>UC4;*Q7%ZP#PlStApmRKvkFt5+`+_FG=6(CdS z7YbQn8l17HF-dTSFfqkF+BLJiMekgND|D!~5EPq#PGOE*TdWtdr$}nhbK}bWfHldz%~vPkL8fI*RM)BcQa23RBCz&S$p;bA6)AAkhO? zAej}I6l}Ssv&CsuBdAhqYfSDGotQ=@pR39bX6i=`fTYt31Ta(S?VMGaRET(IRQdq*P8z%JUf<2a5#KhI#Z|vIuIajv zsZ!#fqMCG(pzRrbT=+4&Y=#Yu3ZZ1g*kTVDb=mt}3XB}N(4t=$=WqW}U!SGD5vs?^ z44B!n40aI4Ld|MhzPbhNQOgUJqslA{mOSLtH=Y!?40FSoGLsUx{4H9bv9-}*)ep96 zoq6>k>{|V_847d%*o$8Tj+bi z`$Hv+RDTN?DJacs+%d1>tM=_>^qiMRP@*Ja(R(mlI*SabQlVl>Fo^JB!g+i>`-ZPj zpl<+P{;@(-#fx2K%LJy|6iL^NU$qcujxF}08q?ArnLb`kRKzm9_EY zoG^8iIT(kuW`gl>8G!_8s! zIIlhrRhdWNU~I{?t|V)tRM50ok5^PbloE)bz`ea_1D{SJdk6aFyCZvgl8+Yu-tlSm$Kb312F6{ z#h_oTPWbT&TU`mY>MN8x6)U)5c@0Jpb;)>nBd8JbtBo7!<7!t^;9^|KBwo)`CC$7k z>%35`XRBbW)@pC5uNDsUnCx`LDPupjF?kNINT$$`4iAmv-U4ry{Tf!gWk7WCTs%)N zZGWmTAE)X0Ku;btp4`0XyZcj4uxKi4#xJf75GrZ1Iwk&(01v};Kj2D+jy}YlBljKE z23BEv+US1bCus(k-l+ONSFJiu8{La%8^Kr;IXAHU+kb+pA#3N|FaB_?93 z&j^!~K)COE`91>Vy#^wibaS5@R9)#)@%&=e&)R#TG*$*hr@`(qt1saddA7_Y?YQkCOcj z=zfLHug+*!O)RaEbUO!pl8?-oVi_-B>JNg9#oxICJ(lE{(=E*0t(d$-p6;l znEE)_f%{4QcHht1uLz~JLsy_lg)&bF3W!t8oqO13c8PmctmbH+BjTN-aFVjTL1>fc zc2r(0JY}Tl!zhK1A?eWC?lK(6ib?iTp&dq z7nlC(8CROqm%JWt0Ixnu`B(TT2=)cbxpl(Ug(Z0s8K#Q`(!|p9vjUVI07NmH4EA!Y z&f3YK<_(;2Zp?xH`Vp9DZuRvpM2?^LvRfICuYlM4UI`4{Ez}3xW1@aS(UNBRa-(yV zaYbP&ptMQ~TKQpqRoHpuk`lJYbyPKNYXxEfIUnw4Is zf&ncwktd@yef{l$C!s6n=^vo_k>ht_jcM#4A7aaf!7*FY4u4jQX7_jS2>A3xK=S7`a6WzihKkL8%@io_?PVy0=0Va*oa$He{ z07nCrqPm>l>Dbx6Yb7Mnw&Y|mBrhhRY<5a0-m5^?&tIw44$z{rtwl)B3@#L&HIxtS zIa)z*j-|s|-AO7vInFWm9;CZ3NP%)VQeCTk76l&@ZC@=k&)pIOyifr3R=|OE!{Dv@ zTOQ$p{l-{L5p!8$6^9%u`Nw@#{km1}n+pWlOI_CMK~E(`J<<^BUS)|PX->hzMmiSW z_hVjWBeeBy!=kOFl>%hzt?W;eQ?C~XWi@NMXnS`cT!Rq(H{gN!@3j}s%0brb zE<)pDX4t*HxmTs*O@r4c@gTQg?JiwZ+Sv0KIpbE7datR5L4>}j?zeHMYRQykIaL-jxx=X9tS4Fz4=5Dhsjuv7D>PDS z|KT2m3l(b#JnR$d|57<(CE=cM)1P#`<9d4j!W+w+#jyHf1zY2z8_8|oA)ceg0qvup zdJ9jttHlv69-LPf@ei2Yoba5z9@vwe$n@CrY^JNsx~ubLnRCE;tq$}W!Tr+QuSxEE zY1U!TSu6Hj&ViTEPVnc>hF+GAIqMR$Q%GhPA95Z! zrsrM64Z$m(RWqaIp|?_<`({c@-^@yRxW+U!=Ksp|JJcBFnkl>3CT_juCAO+m)E!CLbfqr@8rJeuilgttmQQRd8AVuD>7o->ZC>AdWdx-0Bz=*>_T-iS5d5PNtv zbeNUQ+t4wasPTorrt#6JG(qd#+sUEX8i%-^8?1^1={}{Ykxsf*M%1oo;P#F^ zcE{7}2h3Q-I_AcB#hsOqlcPxjOhoJ{Ni@tFde1}IUp=4HN%O^c?V&3d6dw=JK3oa9y1=OCH3)ae+#7qj2j zAm7oIv&Ph?c!=x2H(ErnJd6MNa^ zCSnbPvc$=T3D+Ug%N7+4;BE#=b;=I&#QV;*ND%(5M4KE7RFUZ^gx6#{4`I8dv?}B~ z1605sQt;)|nP6Yfnq2zz$I3|DH3fgDHXW#qY!K^@8hWAmW|RZFa))`%NT*+}U!wCb zOO?LCnlZE6*6W@sK}dX4+i8qV$kR0RDkC7>z`%r-SpSeTaEr-?h+p>h%qK6O z2@#xYYFf^zL5Ujd#i+~D4Plp&m8PqO*OUz=cTkmtIYncffoZf4c{D3qIPe4bN=|(C zc?%Y zxZ))*FyytQc=_va&#ue>x67_H>N{k6x!QvS(g_JeP^jpBN!c5Q$g3Zsj~~OjD5M+859=yS@p&g7e!Jk| zuUg046`jr}!Pxa{rwyf*_3dn-ou@J%h-&X+8o0+Dlf)kS zWP#CQkr7E8PJS>(6pE_D7JcM(8L8#1c!x)WZh`SqqChPzzs zv$VKC4M8(G1<-D!R={>)*m>4ODDs)~>V@t30eVBYycssCaP&>iKN=G%!~y2q7xB~f zWeyNY-_*lBZhqH-|0;XZ+{vQ6H-0pFnmk%p3i-S65R7WeifKvR|3evRCuC_9i<{*T z0wlqOuQh5~(`1jwsUzlMETd1Obo2`JymF17OS$RkfR(}{YsM!Dr~+-hxWq+li>v9^ zJRGj~8Cy>~OO!WFp=rfuR}}&SAyou@KEg%32^&Jqmug+O)L<-WWE_@$iaGjuJUCqO zDewdMi?mk>_*HB$WwkVKx6n_X;)h$3@wYNR(^=D_rm#gF2>{=b)N0^3FAAmxL~VLa zY7wOU^2A=Z3@A5M(j$R)p=%jb6eE5@v?v2z{sq?31mBu=h2FTWp4d@V$7sY?81i)d zfc|TaC#++*EL+yNR`%7_*hAF(@!IPc{V;%hZUR8)Z>~c=OofSn5UNxSTD|4-!mC@y zY@T>4Z1uzds39Zrxu~WiqfLawML1hg(myK%01CnqEB)>M+1uL znOF3FsgM0V^sgLP`$#U(;U4|A6gQhX+iS~GX`km>FLFfDz+-`|(LzLpGO7L=rV?8?4^jZ}~w;J{+Y_!)$ZL2*EvldLqI+Bx@YRa>cvT`+&!%s1q6_x`G!aJ9PE_L~mg-4V#&emmX z=iiao7ccA)u|-(NxkX_Igl(TPik=W(fjjHYNv>itT-6#1-@La@L6XI0&=jUB^OaiB zlj|6hmWXLLNrcsd^4RlP=r>*-`Br)mCy)EC@_fNqtg)CZ39$1|fO|LJ!$D>p?A{9D z{S1-{`6<(!(;6rN>P-n8sxZz>kQ*hYT=f`=Z6!QIc4I9A6iB8h`&49jyTfY4V>!`> zo&F*y@|@MBP_OEN2d@E6>?r`{%395z>lQBZ@v+79{pNticcBZe+2n^AmPo}17YeFo z^g1Vl^1G2n(GW_(rssz>(v{xrD(OntCZ+*6D|b}5bLfu3+^zNVclYEM%lmbr6MJvp z2fn#wlAnWu#tGZKk3D?D&2=EbX!M`ro3ZCTQfxcq7SOr zueHH0Y|jKU?~F}p7D&lKf8}1>M#Mz><*cweD_hx0!?7RLczZfMJHAg=AHjU1P4}EM z!~$11-zCkkhZ(g7ZpSb>otOFwTqZM&dsap?kaaEl=cy|PrzLZkK;DL5=QMsU%$_Y4 z$T|FGsb4$lz5R(-g$U|+a2dv}FwY&~>fHGEQj)69Xam#*SktVP%a69)YC0tZ`GMq) z1pkD7LO77W4wdto=0?o;KDbL;nI6xFqDa%WR3t`s81zOmcF7VGhc9AB3cS+_;GcsI z#tzQ!+t|1RFur@b7t5&>ntg>Cr?Oi&e&# z(e)#zOKw=ga5ca4>^-WKz36+ATwlvt*q^=qS&Xxnh9Q{nD*OT@9T)j;j!=Zwd#vIhrO4>_%>7=}1V}>8lw5%^!(i!srr9t`qqPgg2mbnP} zU0miLnGzg+L}3{@rQGFAaP(sfcZtK;2nmuB_KtO?Mj6}-6RqPJT(|Zw#7YTdqen1@ z(D226?C&%4!Zlv`UCRa{h{AtmR?pNt+1@;uP})Y@{|7xuB>#XmZY1ebAIyVkXuO00dy{Bq}UYl^8QIzcsvicibGv0w-cor z9bX9%gJx4>yA7tbz{bJB$d{w_6jdGRIUV~@c)5ft++k9x4-NnQ0;9oErhD#R)w7h? zH{7GU`1YA9di=1yoA9QGoaerYobZ#FdIZ|KKg;XeCvLtsa7V z!aRLOYkTKN9Ox(3Uef_lB^S^3O{nIae zUL+OO2KC=-w##9dQ1e#yN0;u(-O?322%UR3^upw`O@sD}%WHxTltCAtX+7$b$;vM? zd$hP{31N#LNt3z$ZgxjMwC0b{+C#sU8W;6<>0!naSRDVTtL0`%l%Z{64FhB$!eyi< z0wPFro=VH%h`TI}t0U0w+Vq&$ZiOW{&E`lt7^_kA^~T!N56u>S&W$%3H;{bGt+*;> z1mtzE+*!pjoyH@BE0)Zct!|%l;4}OlD`VNKyCoA8HKXzXN zUi3m&WXAY(mNnsy@0ePgG0b*7!|~3>f80Y|5wy;kaatMTc6?I;LGO==e>MCen=fdB z*ZJ%#V!rQc2IkjmmK#t={Rm>?i^0(y{lGKEkC>W{cuNOPIL)Bwu*6dwmjNkM={-># zRV}WSBXZH>iRsbRMf?@t<5u{7Mk(PFq15%4VylN!Ir6Df5#Ms#0?p#9{S>;x$Dfdv zs%WZi8LAk|j?-=#@_2fWeB#H#?Uzc5@6mrwhNDaqSN64zgt#x~UG%HzM)7t$16L#C z1uEnN?k}^l$*Vu89UGn(=pNr|1;<5*jBQJ{MD!~BDx6_2^>*dro^?UA^`7rH)DLFt z*RntNnZLXP`>HdX4x@$3a6$O|v7Ly*Ro_}w_cW`L4Qcq zn%uxR-}hAanQ0=?K-1jRNpp{=x+dG6OtWSJZMNG-` z%@ve}boxQfLvO_s7-gyYD>3&9}fyk1G&T2uC{nHKjRGP-ywH zg`fDOI5W!PIIq^l%v`FXNAu1;dQ-C3=K_9bgmJ#Nm)Z2yA~!NOp>gAr#cDt{UT)72 z$w^4q@d#e6_(K2hKv~1JNP5Yh(*?(Rjl{n04Ah;^f^(Dp20y@mjxL>t`H~giAB?W} zf|1$uTxHx4Oyo?30h{y$B$1Oma1HyNQ~ZVYXDayK9z1LE=%g=q>T9M}??|zDpQ8iy z{dw6OxsVU&gHknPH$yE`ZF(?aC{O4fn)#*%50`cKcP^{$?Aq4zZOz0AA9M?9tV(z?Qk+_BA$T|{*BR@C{&ZtF;-f|#eeH556S@qA^FK6X zm`JajxSw-pv_NJeM7@A7!rRCqZs`CHjyoeQao=1c)PIVkpXf6c($&DZd}r2aHiNUj zBY#fgSoW)q@e;0BQlm_Jv=h{43Sr>q{#}5@?%yd+ce8C`56W(jPpZHj0YjNkELr7E zk8G!j`B(WItgzDqiG85&{)zqj>n}cumuAXEM*?n3oVA)bu98}&*xtU?MZOv09n1>V zP4@I7KezS&x>)i{myi5KTTFkS1<3Nt(qfz}=rPC~HxDwj#BG}vJlnwB$25gzD%Yw! z_1)i>e>3X#BU$Wga;`fU_0#=v(*CM(|6=C zujXv`)QNlGw;Qhht5fG|Ow&wCHqWU*`V}vEEiKWSb#QnQ2UoxxWczd`GzY5VyKnmS zmY{FY3^F6g{V`=+CEwI_;%(lo_Fl`b5;6%jdWr9rzv3wZW&cK-96#Vk_ zuHb-sSC1x4AHAB8Fr)LfJXIyx+S)LFI%RtIfw@KApWKrD8u&N*H#+~Z;~n>>di!)u zJQdi8e~;sSR$}9z!8xkdWYljP0JD4^br9+VjWs7rcksaO{Fr;V55{#=zj<{J)|7ic zn)zYG0aR9og#*2O7oG4O-z5G!(D2^@3C-4v(!i6;%H=TF^nQ1`g&5_C@DNT!t9k9k ze!}|Qgk++%wFvT5YHs&im?}Fhe;;%WG^fCKW2(X(q|2zef#fKxCR*=Xh2Q{FO_#nr z|BGhfd3NU)s^fnL7FWJNgm#)G|HOxmyIs&ZH2JIUVuaai9g)fDvn9WfnzV*b>?@r| zDzfz!&uen8aKTiqd!oGya&pV={_1#3>&W{~%YLqa$yqu6m5uug{~Z`bGsrGd11i#P z5z$^Hlq5EdE$bKurPoT70p1&}Fz8um#2wmn~xN`R5j^>rK8Cm~_sV|R8YW?1K zKm$iaoX7zX6wL{o(liA@!4VZRO-)73)Jn;;Y*L)S5pYONOK=FMQp>JZmX-q!l~ZY5 zD>E`RueWP9d8_;5^Zo00)>(^n7B7dr9yt5m?|%35>=o?(?|(0h99g7iE?Hkiv==AB zChQ~FKVj;`$JVy*s2JgRs5SAi>_*^RV6L*9vQt5ZLV|+n87K`ZDBB1;U*Ol}wmR-w zu9CdHxVW2nW##9ajGE<`U!YZq-j|>s2r-;-4&H%y?M6lAX~$MRipq8-Ui7_NJov!g z{rj8Js2a5f6(8Bpu8Y~TTgty=PkvT@dVA!4v;F=F*wv^azuP0%UeMnh+SA`mJDb$; zRpCFW$X}U1kMIrJGsa{hi9qS3e-(cb&V1d5cr=*&CQ00*&G#aYp?c^WnXAiz(+f=v zU0xp1l_kUGdIcH#pciHGmoK{e&o0dTYw&C*2q^dsNScAkx*EC>%?|RTU6`2q0?ZA9 z3KM8Jt@ump=fddv!XvunGVro;b+_q8(qqmO@QTx}PJ_`*$&2)-6Q5u^Q=`wZUnC() zlgfF_#Wj!j(?4u395X2NSf2ha@htuug1ZYIA9lT0_?!N`&;>=CU6?(a;UzQRgF!N@ zj(Wlr92H;|!y0NnMC$Zz_4t5=(4^4LxdlNNF-bYg@5F~U58($NQ1Y}-5WqP@L*%Qi z7h3+4>HsJ!Sv^vE;5mKeuE~eO1QX#E0gRP^u8h&{J!pG@^&sYASK?QRfZ(Iv>w1rk z`8B7tk z)e4pF0EcrJIo-M41qy;I&G(+e-qIB6UzyD%pEtGlpKI|sOu_%eOaFp&8GJgnYB)`T zg1sfKKymuw_5Y-DGF+$r?}#^kX1ptR6|rQq5OYRC&=~N z>Ob@gxD&T$Omxl{BlU&jV+(N?WXnET{B)mR z4*KcY`mch|`P`N34+A%Vez&~O60HAHU(^RBoKc_KQvdzBDAPzoG_Op~$ojaiIQH^j zjfI17C@cdr9*V0e;zN-oxl*y1gY{YAa)J?-Nqrvk1)57tC6G3Eg92RD9DzoqdQ(%? ze}YdCfbf3xZNF)pzssQI76o~sbh?|edz-F3@}E>*5?wor!~chGsb2|iUz}6;Si`M} zi#gKpYkJ-B3jKoK$j^PHf9v*S3R5{Atq_Utk%oGMr#1o~s~NLY%U(1T89)j?6Z#mbp#shT0Qs1+x}XSH<> zol`VWQ`nD8Mm7QO82Z`p!}uwoC17ao}_5J=L-y?oq1EM^UfToPo|RkbffR zL$x=$5F3!xE%Z>8Xh-E=@);HJnRMH8#lMMf_z$+7cAb>ljFvsE^uA=>Px!joq-w;S zW^W+9xgUL%RdbFQePt+>uSFykn@xV#88VDJ+C4W}hVxD<*ck@~H`&?P%94lWs@(MR za7h=N>zQAu{p#RL-?bWd?(S$0{U=qX_aJ8nB@q}*O3H@*vQ;Lg6LJ?GzqsKhX(gF& z74*;u>Em79ca5g4B75d;nK3MAGEhiE|e3ppjdw+cr~(@lY4@)9Z}43yEq({ruR$z z_lfC6`Za;1mr+;0@<>BQh&dM_lc3`sro*wsB!K?_ETRyTh%;H%Al^JGk5X;VQ2YVA z630;S&ZC+=3}A+#O*XJD(k@xwWdg1bJqu^QWRDja+Vb^$q#FGdSKSUyd$(fW(t&i* zm4^c(WDaHHtP6aI;EJ7C`JI?aL7)i5-)R7S$8ZMk}f~$hX?-n7evNe(1#A>Z+JdRGsYMbE6x>d<(=dlp7gqEjXhhcLv>C7X z$Xt#|mi*5JkV9R^iAwd?yH@w?BXpW&8$CXkXW$8rBy1NaSMa=9r59>tX$K51bY+l- z3VwGZRG(#FGq6)!7s_uXI{1VnSFSwYG%85TtJY!nBYGRs;s$Dv=^#Z0gj4n6Vg1<* z2lo2REACdhL22s!bbyP8potF>g)JqNs(IQ*Hec;RxR%w|>ex9wJsGs=@h|!+&g)0X zno^C+4c%4mspu?iQNN<@JG5HZh^~Jnjocm0|4J!nQz$)_9H!m!2DpjMM78=H3pPUh9#bQay*B+`n$E87xYDVVs|x=w>{Td#(=kL)orQ!Y>6a?6Q5U+}hz>3C0p zdlp1%bugHfR9Gi`v-GHryRiHeHl~hqhMIj^X40rM41Az_vU}5_)68KsRsoHEiQhUn?^=P6r1g^cD{D;2L=& zBI`3-JA8K5YdIb17Vo`AZ3ZnIYB->9Xy}Yo+Vb9`3(E)0iaxW+29jA-tGeE6fz!{jb!ks<^JyS7;xt|#h>pT#bY?l}HZ=pj` z(kQkfXg6m@k&s=X7Wmr!aw`1pS9FWNi()`d#E4zH`eB)f`$NCNixkxd%_)qSY9W^v z;~ZX{x=%G|2_4iRN2?m(lQE$V%Ey$aZnGC_N^zb}Bj3`E)K3Km?2ozajI~kl{{#`_ z;2GH}W_uPB|KL0+vhK!@$F>lfFxgDe$jcFW7`aj1Yif4Yt+c*rErR`V)fl;R+fz$m z(Cq$OFK;G?K6I0M+2mM3vPm+h zNqUxT5Dq_~{BMC^3pn@u74QU={|M0Oy%czDNbsg}S&u)PQ#YD^aK&b7v4rDJF`1)6 zvQC|4QGUr_U4Xt1zq$qL%RbYWQU2*2sAnq4x@w*5s%wxtT~{zoTrUS%dLU=r7!38^ zTIBWa&57i{tN6IWa%Lkp8FlSz4c5 z>b2*bdp>C~(oAzV5WF-)!hvl?lh?!|O>%er_ip1 z0&uxTo7y__PhztZyYb%SRKoQjpR9xqZ3#uv3Vlb5dM3?r?DQ0$>a{wt&i81%JavLt zre6`QINcBKSnWSH7lnQB7L3neU-hCh>}9}mQG|C#2g;ABE<9`(*g469?YR4Aa0)8C zNIptigVZ4~9vEJQJ?rw-;!qB>8m1(7a8B0al6msM4U+20R}*_gmUXo%BSTfp_Nv>z%NuMg0`5yizjWhl4p9uIZw$ADiZTKvbWoKC8} zq3tT)gJv9MD4Y4^R*5Gf=b@arwgyq8T5Ytif$HEjj;6G|IJ-xz`q5ewiK=ZQV96Y&IjAo|68Y1K^?km1nsQO-_r_%xY z_onG4aendXzN&nNNhxyi)#TrOwdtB?r*ud6!j^L)&#JBgvM}`(P&go+rtv4i2enDr zGwz)HZ1GIG|DEztMl|dm>6V=5oK`sEWGQxIzI+UO*+$g(u!)GbCq8_De>atEv+x1g zTUGU#o>@@_ZA6|2EmnNwD(^(xXGUKr>bIrTGxhYFl|lNI+~T!Xd6W1u|D(z~0c!~6 zG9%iEFhYyZ$qN!%6Y5)FImvh1-F*`KE*o=raz_9Y!2k?TE}(wD;u8dQp0R#ZYfzWP zcs8)5x^Vift?Z%c$<%ATcqai`HN_|KxMez7AWgEQPez`YLR~pds31p)Wy*424JQ_(H}_sxbGJ>0h4*Q<+M{EBvG&YnsScRZh>DHq z)Nd9|VrsE}#uqe9<_pqDt_^!v^cK6Tm87icz?uO^4V;0t(j#~PBg78Kcxs`lYT@1d z%vG<_s6uBM{|90=8rlWC0tk0|Cj?>kB$qGp z2uD@1H#?rZOT1MYpA>690!;j*IXwdKWP^6|Wv}&NE^(Hs7bj|q<*xwRta6Dq2#B~W zEb_J~(Azc;c7e%8)*!^mq!R=bdA6Hsb+vwoU0GaYWViR(_O+Q#e(_U*aFI{iX~&d7 zkjGY0^2ei+k^;TR^Fn8S;hO4WBu(AEzUnHc->GT4wun;(Dd|~Co7}z5K^UbQzK${t z-&bN)a|T$a(`~T7d6$49_o7iHAPr|o(VJMfLP&>jX za$d^iGAbLtfOmfk4zS}qQ^!x*ndVKsA&ReLRKeIbG;<$Otub@6Y*|Qf?~=t8u{JO%E_Ej2l(@fSyw?PnWz*=FVG}#kQg*c4r2m1MMVA4+caABVgKs%v+&XMZ>YAC zR;4z&+{AR2)1}Tkxp>#^C(FA$81ZLz4b_RtQj5ZSihv&)4+zx!%jEw`*|6p60`Z=c z!q^B(@&3k`g=cX3hGQU<^$KUr@#MY~gP=yobk`&sW-z?KI_$CH#8{LXbGO1 zfS_U|9>;hF^(k`G>8s1#KJ~+lxgR@>Dl`;Q0BQmVtsD2rZEE!y>JwAWDC>ofTvB>A z(qn4(K2m~%_oYs@KPZPE*wD+;yjMI{vDkO$3caEyGIxIo=q*%j7z%CwSqylbvXTFg zB!D!SK@uidcQ{Gkc?wDKoqORt314*YJEI}I;n6;$y#J(lf42MP9wy1W6_Ov(GuBeP zTU2FeG5e~n63KZ_o44{!Vkt7rP!uq1f=Lm6oYs|ZGjOLZ2rNG$7b1-u3 zH59r*17nrCr$p^F^Cy)VZY;5P;elO+C$pX)WE|u3TckgOM(z}>&x$g2Q1gMZnDs#g z9CL@fvXAly<6s1yQE{GRFQmRjK%I8w7Ji4M+Q*Tq5h~6oa(|aIbC=>`30=f3MHF7Y zTl{a=S9eo>h41jc(^*NEw82xk3GnJS%k-rw>ulqY+ATZY z0XorkPxG8g%sqi1UR=)}*DP*h8YcKEvJr*y=^DlyZ@y@hC=T@7Yx%rgS(AD{0MGzE z9=aBW);l)w>Ka$YkjH+Ob?a1Qo(?_(h26Qd=~yT-3h1AF2;NI>1{{{8Qw~P!A!7LG zoYKkj^vR0$O5xQsd(mUs{_o!X+RzDKKmjYFUZfE2Jk%NSPS>eHysvKfP@lowbCIF9 z^As>7kOIKOYpU^wDj3ZsAe4jDVZ+T6qkv}Rpb5j9L@XFJajf7T4j?|+JQM(QFLP|q z!pbl%6litaCxdc9tCOSGK6x}Cty^TbTessCy9|$UC|%CDz_I`@RP%9St5PECP(kwB zt|>c0qvvh*k@_JcwYgn)jPZZg$64^%UgL0BaU~;f<+{AmxbLnuM4`!@V$s_MuA0sD z_b+P&P99T@Un0vp4(hONAt5oKk?*3aRGC}d=?3P=G_R0>KYZ`08n(%P^XE|`%h!5y z{Hj{~sEOanhf=b&1eq)9#8h^=HKA6R=`KoS;)Q1y9t@jBY9t=!^ z_yVQP!BX>mnc+TV#?-)H2?8t33xdW&La(!WOgw{CG*vrA2N26*N7_BN0CBM#Dx#&B zjmyeEg8`L#K`KWpu=oy&IQlXnSTsZ)&0Te8%g#<6rF#g3RIPgaI_4wF|J{_Q*#)jS zNHZOOG?1AVpSo|yJOpd!s;hRlP_8$6U|}}`XMTw69?gVAr8tmZ5XC$2dj;CvwUMr+ zlR=ubrQ1EVN{8}*$I2;bwn`CaNG1*312vmgA>*1O=>z$;ZL-%wKjDZ%jTZNJsVDH# zTdeN2#TYi3&-);6(XM)5ZMLEQwP1R}MUaK<;2UE3Vaoe^^8*4XunaA;kB@O#Opgg4uE} zMx$TRnIL?|`2vwt5#tmOBlASpogny4Li@8jhW=O7Senp5}MMCsGuQd)a1nBSIe>^3)C4`0uJedUxMZo-7R_ zd_uEz5S?w>hVj_LGKU*G%Cyy6k-wpp$QX{w>Vid!m5+-SQb=vj*UEjy8++gajn4a5?L3aSCEtf}GN*XrkU z%JD9q%t&vB?yyF3?qXzD11i&|-z=3|aUQsZH>h}F3{k|t1XRpT@=qE>PG zC|AXI$H^FpFlqW}&`R5aACKV%M7;(@at{8IKONxh%yxd+lm^@$#cl?9iyn7AsxXQ+ z>Sv!C8zbigY4F}6{sd2uaSPxq)nMvS>N|hn&q?gK&c}#d)xm>lJxY-^I_jnFo+tA$ zDNT$k^5!4p=tAz54*Vendu_qbp={61J*^Bp8_T!>QEfb%9n9FFrZu(n=GZWdQNbsj zsa?02dazG+ZM8~OLn_n->McW=Vba>q-{(;=z8=*KCy63{(e>d1d&3{`gK67K$+r#+ zutQw$LsU=d(@Q)5xZF@7o0bK9ti}uwFL={5v$!Z~DMn3UGelupeuP?h1<&b=u0n7n zx?e4vfsUa*m~usddQYOLqdMl9z!`aj;qOUQoXREE{W)WXI_mC(P>8)aXqVq86uT~t zw>G{)t@$GZL+OuVeEhT}f;GNGwD(j6La8vtGmu#ppXyEc$fUir(5>KcO@*_fM4Wqh zUT75Sjv6>GuSF@y&zZ>D7SGo5ODbEIVsw|%H~H*|eJoN24$)jfmey@HJjX&v7_Bf{ znJ=EZaL1P;w+eaJ)3rPN^<*a_>E{f!@KtNH{Gff6ukmMWudg8d)lnOV%}?u{lhuS{ zjxP5&4Btz*q}c@+<)RG2i@Gg${b31cS{w9Li;K?-*xH_Zc{BNyTK!R!8Ba|urW#bp zY!fi~rp05YPia`Z=WHzJmLn7wm4;go@Q4-yisSf=F|P7F?-}q=#~Hoy$vj-BHZup; z7}LW4C4=%xA$v0Rb(InjkeF8_)s~rUh&@szg}{qo$|HkNnC%PsX_`G~r$>5?@MAdh zl5PDjt**slGqcf7tvkkpycE+t&`MYq>CY#!RA%=>I!JspnXJz?U??u z@_@4P(fxd8DGGbuo`0zUDU6ix$9}Pi zad$z2--<@P%0D?@4wj2(TRPpptDyC`Q_JF$EpXG>O9El5;;jDV6;q*=eeW}xOW8Ly zz|Y}=P{vV0+<8rQ3MK3;w|uv3wdyHC`hZDLy{oW@2^T06x1hMaG4!d1+(%Q!{vgew zH-=<}4GK@Rga|{6@#);T_Y;e&Du6wh2;OdPA3etgZpK&G0x@d)J*s0B&$lD)w@7Fh z2fQl!w3KDg1zP2$@D~2k_QAXa_s^Ku!)c9qD^39UyXc4*XZ->$e&@^~uEE~C+vLOe zH$YEbhI?L&V{JicG%xhhqTHRq7_V1rpPY+d$PXr@>Srb?4|_cYuzA{N%D|qM?gt*a zwIa1MFPj#7RE-|N+zl^v8<0UNo>q*iia9H6ASNlxZVtOyDms)s&Golo z^yr)Db^sg_maeb+?pnvXr0fX)&Ga<n$81zH|TtUbc&Z!&{ ztux;LtkW5o%HeDFK1Q9U)OMN04>zv?4;kXmU8g%5HNIUPnAOD)D21Xb-w)JJCat>v zfVpIE&W%QMR!&iEixcYLiwnI~_IN zFbrFX3q-*v-ac+sx9t0naovamF@XVd833%MQ;uy1C_ka{VCtYV4+jqY0VL}Dnrb{H zY$|qx&SrLAt@>~Tb3e4xKHLpjc1qPBBPq_V_Q0GLF!JJ>ddTj|Jc$L+8i%D z&<=be3Cw@6J|GK?F@2#$Apc|b{yN5m(_H;R)#r?ShTbQ5O{bw2b!7G3T#87e zPr}ZuBxC;!+~rUO!|shE<8gsvc$*F(mSDn{C>kE>y8R2KKWr;U$THng)f}0FpCa`@-*N64Tb1W)~E+7fbZ&vL>7lcMeFYc;n}ip8~F$#&75L2F&F8; z7#%aqZz3W@J>omND;-{}YW^gFU(on^w6T-+h#R*e8@WVtiC%GwZm8Od7$QElidp_%Ia=bsBS2nVGzy8FtXki}Br&$w3xjCt6#XU(z2@5%5{5PCmkC9iXx;a6 z!a(Z0r|D?tgnyK`sHn2JGSAPL^Vt$}vOAP(E_x^Sk+~b=+FUdT4mWqxZuqRGekq{9 zTi{@RP|t#2U>;g|!kyxOmK&_%uh({8-i{v=B*U~dSGwRouIf%IfA-{Ek9s-rUy?@p;WJDHF zzC>5ST)poE8h-rX*O_G8OAPrG1#0dSt7CZlJ=exfkD6=R6LZcpVD#TWb2SIq8YGxq zkhA3=?}uz!{K;PVOS=`^>9#jkj#Jig5@8;u{D4>J&O8pZYjzUAa|o?Chka`5w9n4w zc4vnAcO}G~Ei~%j?}e}2wB-GmozgwaJXyVa!I(xpz)vNf8#^-1`&j*5^Vq@Nd%*C0 z?!>6qZdzttAg5fz3S02QspONp&vl|R8zjm@<{laTDPf^`SniL)v2p5T&U;*EkJ7ZM zcC)ZWIf77H9&96SzGkxYQC@-95Z8@8j3^bMJyxPhsKb)A^Eb(&XDKnmXle)>vj}13 zWUN1QmenV2Wcs?VE}iz~X_^9Qoae456|$hRrsakq?j)IXb1|v<6znlSYkXQFaK|G7 z&wkXgOnc9BRx9WzN2qi&OmP|2$dJ_S$V2~VVxnAg6RY(SPHyR%1Su(CwAGg4OMJyr zoHF%uW0!CdfonP0QAd4sD!Em~NEK#3(V6JPENoeUzBfwj_PkdzH|F?H%pdVqHT`jS zQ3d_LD{hMk^6U90SOK$HmT1ljEAN~Bj8!%C85J9y0ArI5E)%o`jAlWQ8TQ#TH@)&x z7Tc??sXc1#v}n%N4RqFHme>^VTmam{ zewW|2kRDYD-BuviT?c6xQ}wLEoNjnfuB0HhcHgsjVm7(zHqYE2_@LrBIbrGO3CiVa zwS#JQI%;*68&-JJE(5He&7PWq3+T%ScHQ$3JvbU{t0Z7lHvIxa-uY6#opG!4@^1i( zUj8t6sg6RozX#G12K`ob2Vv)A|5Wz)gTD(%d2E-{d0jgD!58&k8G}IDe4xRoMf8&kHgdN2lt1k6?6bYR|*uQrKiLErN>^)ZFz1;#$O0D*6o0VP6^UHuN4 zcLViPaQx)L$Mim!G3IXaSN)6+A-Juv({J@MPe)x7+B_aPA&Mwc%rN42hFn;dXZfXs z(h+}7{#1n9FYhO+A011bWba-81XCNr({YFH6o$@MIo z=YsoLO?1t>+2N)FcNhLA)qOGA+-oto^Sv^y5B8*IiT~u?G2O+}_lcd+-A9YStaz31 zUG`gMP^Ag_i#;?A85uXKC$H4C!Y+J`fFR!+9d9-L4Es2p)xE)d>!~Jv;9jwbb){p? z@lfq!azo`vU`L2LgfYoC`=kvikM{~kfHYN+rY$Fo4s!RV6@vNBxsAo-#M;Y4h`)e` z2jPw5hYuP<#fgXbfxDecj^g&O9{K^!fP8v{BV=zO?@Bc6G#ICwOiNL`+c}G)UC#-h z2KueO!pq%5@)vUXM@Ry~jfVL9FKv&L4uExdSI zI2Z1Halxez%C-_L2C1S-imE-orunct4lWMlxrI+1`DCo0XW_THXKF73 z1m&DXC?wrcM2q(Urc3%|D^@j~37W0<3O=2hJ8O#@YO{$PC`Tl8oY}56*x_0=~WAV-skr1EzveIcL0CH8<3Obqy191>z}d6Lt=9|scqf$K*OiWZ%e(^xIe0YKsiKQ*1-K;=d=HX zOuQx>@^$Yf-0V1QW?28Nv#w}qK~CW96lDl3zN35uFZ_L0W7W3MjikLWO3)yG@$c~x zG1gB`E$dq1PY)r;me_Om3LD>Z9@o>%_=@3)qMP$AH{SE=R`(gogeT&=yJV0(F@0+% z&|1~;cfPXDc??uEh$W8%OSMlJyRz_GdPZA`c4yj;;b zo<^D=s)lJi8#76;@)tg5YY^|f>3XIlo?q~<1Ya`WHC1+3SQ1^J7 zm7K2m#WFMl+!;Do_$~R)QNJkFcI^-GZD92rtU|wot~F9>Zr`@+-J_!GWtc1ImdDbq zElCG8Iq5gc&E?yn9%kpg6K`;CQFb(&>WimrtCrvC$Xj;)-gfudXY(dJ?piC3FNi= z-fM>1MSPWwuXa|WK?-j~Ys~JJJ))*3_e)Y?rhAxoFK?S4P%sQd1+AXiwNO}P;cIrM z6Wx38^m>`@le5T=4~-m@RfTn@3YGhcNYQsV_D9G1ep56zPGZ~7<+XLh5T2xl;GjPh z<=bI0vTu%x>YHQFfliq;=CsHsC z3A2MOH3e8m$B%&>ciq+grlU}r$zX437`fHe@{fBRaE4-E$=7@5iJeKrCXvjmOA7tv$MKlQx~&KR41O%uFOKr-!PHSU}40G$|bf&xs;p6S)u)a`}UxWL>KNk<=SpU-Yukr95;KxgZp}nruHYlVJfDM4@`~ULTH{qkK!H=BCZdD-B>Da z2bw8}#<~qI>pIb-Wgq{*LTNmG@tUE7Rn=<4Lg{MkM5TRL-l~6)nnWo|sZx062m&Kc z1RWo{GWE&RcKx_m^j=psYr=T2GAbj*El^l`MPw=#Tm~w5@n$b zRP$`P32yF`q*+72V=oP}x#EOeT#qt;?qt5zGYx2gfO*tHjW>(X6*PpOV=uew!;c|@ zWM54sxG=%K@(F4l_4BLcWw%1=Tfj}dV>J3=2FAna);8ub{G0r1SObaQIF)4`s&yRb z7UA>RsqCZ58_pB~qCW%9f9^x3bpz&DC*=%{prtM-Iy@AZx^DfrzCfP2*zAHb4jii( z`^0S&(dOkGzu?~fboY=8E%xhy^oPUd0m8eD{qDMW$5Ij|~M|;VsfSC)V zjdqh`NQbB=tG4<=?>I@PS^3>xs=AT>CMlZGZYv9) z7#4W652*4QIRh}JnwkCi zELE!Bar^ z9ZSD=PvR=hsPpVrYoE0PQKWw+=>mWAa2161(0Etbw&Gp1brh0T-Ey@WqA;*^Qs;1a z+7lnT3uHsjjT@tZxy!JO4#7B$#|DRXMkjQwxZeiG#UK3w`%MoDfZOURJcgB?!Mw3o zv^Ae2dJA$2#m@ z-qSFsxlPcFa69p+&c9{F(@r&!@Es|g^4Mz`HMbKwo(cg~*DBu+QW{_SV-edU8mF{s zZbvBwM4ptc`}v@;*f=6496iqrWt!0ZO0&UIq>%`YQRc^uCB)=A4}e-!CvrIYZTJm z416?>pt>eDAgxPYwIU2elhb4L$$V2$isQi>_R_E~ek(*AV$%86Gcsmnp#7Kqe@5si zuspk(E*2bwZ|}ZJc@g7(LgN`q!&B7lTTj^SMyORzUBp)GQEnR7{5Mpsd^uaDS~Fme zK$1aGc+`0bS~qZ7aaI<*Xy0!8eSDzuukX;?`Mhrv#u2fK^=wn`YsU=R^89FL4Vw#2 zX=rS}Hl8tkPWy~p5rkGb4h2r0yR<2Pc53v7{|C`dVK!m;q2}kN>eo7^7qaiFyaLxr zb({P-aTXFkf$l5mIaqj&ONrO;!BvM#yp`{}*#KhEo~E^HyO51w(5ia#5=Y&5byQCB zFdr{OEugW&3kCW`Oux^ydE$eYegmK>+kajqR))eG72fGnoJ}*#k~}aL`;gNK22`?c zciV=Ju0)zgc7ArKrVM^yn&5u!vBoWnDK>;MZ^%Fk+D4cT7iI1oA47zdIt~6SQ#UrX zA)g*-W6gk{fi1hYgl%G$>`YHpIEhRla}OOmHqOxVa2{znr%oe;i%)h$xqp|3ohICF z%tu5$z_pR00vvB**w+^e9$0@e^6CAU=Ab)@zKPls=l;hE6ZR_WmQKw5-mjjd>%HJ* zqhGQW0XQGd-h<`%wNVY@vHK@f%4_1?-?XNzA_W(X_=PTyf&P*ezFW1iVB0AE%A;Ex zqONQe=ip0)Xe;!XlTs|>P_%m##adICiy69-Lh$Cbn7=Na$5gqi*)_WWb_edeR9{*i zLW&{J%U=snvPt#6u8g-1-d{GdLpt8wP^}SG-L9AV)v4K)rAPR^ly{};bx6o1BY%4o zmDu5rcEKfAVWM|e{rUkS+!*L7h##FA4%y$iv#g!uaN5wZsQ7aJNm*z>5KLi_`^Q>Q ztUvM(upJd44MGNe(QZkW#HjGm-?V;%PjJp&p7PVyO7_e8a_oug@;Lc@AJ$|%_Btk& z&lSCobwS$9?Z~Yd-2imVHEy3?Pl(u6bufgWx8RoQRMIkGye%rPQzUjIdj$s;;arGC zBMKFeZh@0aW85iI2hQBMb&VcF>)tQvQ>$UJjUl_7D?*;hDQp}05?-ebvT@Oik#XC_ z9E2vVYmZ7Rz0$fOhP5HOo|#V%7@j}{RCx2XG^)Lfk+0nQWkO<({U>EKF+);pJUj?8 z_@UKsaZtg3^^g6+fV5m8-R(}}$yR$5a{$^MME>}~{HBHHDQMx;C$;d^g|cUZ?M9~V zCr!EaIR&8JyWQk$)?8fzm8fAArbGWCyB%NfQzM+BLp=ST6nP6BjKc|h)rPd4<~ONY zzW&bVRI2Ht&J}O;flp$N_ba}W5w1o>ElvnqaCw$R9A#!h_0=p%XPXwuzFNa@jOU&# zr)=c$<@9Pyi7EVmM$X%^3JQ%}rlH;Wi@q(CCwEhh6bj(m0CRAsv)jPWg|NeUp;TV&Lp51x;? zQI%SNcmVioRj}`+nzds^*kq;WsnwJ`RfkgPGqI5Q(ZLzn9|{}wZ!)w-c4_)CoYzdr z8C2WdLFI1S2%iz16R~Ur(C!a{w4=fr_lm8#fWMauR%FtuNE+KMsQm99YcvcGF^x*9hTUi7JiMI)^S#6C3UutyQz`sYb`N7rjvR2M zAX;4`2~ztM4Q42`@~n!b-}&w`9Isd$KkR0x$_V)Rq}Agn@gD!@FrJ#w>KCXu6{rZG zo-`s&R>hw`PF-P7QDkNf16%X+?0Qp!`5K~|og`vbUMa~(1GKi=2yA)jA_UJ-@S5`b z=Rc|cYi}&`zxKxeNqv`6{l81u|Nl}+R$5j@O;$}x3M?fJ&y)g4PAMrl92p=30x(r_ zm~~PR3gA&Ds=K8JSoXY$$HT2$OO7VT%C9f0M8XJ|l8_KG08IAA zlI0+N$Q%$_{(ED+YrDD{{D087N=XigoK!hWsw^-DoGEQ14VF?+&Xo3MV$iNqr~qkn zvoyS13I&nCMTYaFP*ReQkfme>m3Xq=Y-s=x0oX0=Tmy;($0L}OoJ=4bX$9xtUEv_O z1U;}cKt^Ie9soH6kd6jObR@Fia8|X6t!D<)Hd4+sSTf@MHxE2&kU zt5o&?KmxK1SVV`sMex7IVb0#n|6qv)3 zMh9L&06obG5={4n3DmY1RG1F2vM_R`y)rTed?|S31P;2*VL+om6)`B*33xAclZ*gk znj-??X*4`;7cPwf03=&89>R1CJc1)6aK;fS8VDXr(c1}^0kpRt;t_=Df)F1GX39eq zWSEZgU{GKh1)jml0j3Ce6e3HfkWiEa97dUXe6f^WfaN3%!cRtN5V#EkN;LTbb*nR| zPzMCa>Yc)2nlT6i4>2h?EZ(31=$~{70vj%em;|UqVn`4h6@>~(k|Y#MJs3+y2sjwL zEL{N0JB-tCC>AdxNP&oWkRaqNyaY+YoRADn;UU5#0>nnc@2B6FB=ACzAu#p@3a3q= zfKx(@9F`0&B}5p85P=I3z{0d%Bqj+hqrx;EB?1*9kTnPtF31ez1w_BE4w=J5Fbamm z!GjVlK?3eKNkV`O==h!9dNEok6{IsrH&hR2LZl!NiH6-X08vkYd}L$^3Q}2pJIRX> zl~7AEWTG!1?GF=43BtHGIt1&Hx#*ZvAUo)kUJ%z_GR%oXN$z+C31u$wCE+A_OuT%I z2e1eXVbqyaXaYiL7#}*03#dgMgC^ilwNhwI9}JBQDuxEr1*UVpNA@UT0d#uoOfqB% z!`4(7WHd02p`dZ(Q&=iOcY)P`GAYnGH7}ycDW>C|0+Qg=G}27w%f`WU5{!@`4id!P ziwHoHOdvBnv>)%q#35zLfXZ_iV+c#amf{fxhDD>U5imfsNHzve=tbjHnG@%L!sR=t z=uSyVg0YyeY&MvLLvzT0K8Qeq_mdz3Mgt3>1S(9>C(t7h9th1Lp$tTf2pE_FQVEYTgkT1K znXeEfQXw7++Kj{hMOyDzw0&r+J1RQ7L)v**9D2Isi zC_YSMf_$+`Vvt~Usu`UE(Lvq;@sqKDO^~EC5D^}sf#y`MB1c3N0})A}9-<7qB*X!O z`63&KLby{jDgt2;A_fBU6cGaD4#ANS8W~b2(J1?X6d;173`0l?D+mt$H(zit0|V26 zOJtN_05Ksi<|!_k1Vp5uQ;%U96$LmKkk|=o2yh7i4p0JgfXNQ*L%?A`2UQ86!6f;x zPaz~T6iY#iMqz@_UAP++y$}ZV0TYkKLgfS;){+82Kzo$^ zphE^21-K1?0)+x7ATrhyeV7o0GBBr^R0O=R04N;579ayLDG+$i zq9SxWjsZHsK$3WN$1DIZ#K7$25s?C8ac~g@VuFw{JLnN0n214WI5`>x;lQA@bBF+~ zh0ZR4BcB4pL7+GQOWY2aOfrfi!&nST$D=^hj3js$MUrTRWb|s%ZMZPp5FHQg47y_s z0l*;=LL>p*LNw_(5@^URkV}@K5fCC7fjHT+aKIAjg@6)JEbxSafLx&M;D89|0We{r zff60hrYE;+mq{<(7wD5fBtrxe!oa}*Pb?K>0Enn4XbvdDl7U(vtR=!o6_X;x`cU8u z2myT2NC3SZNm~N^a0u9ks1VZ>hU6gyus;b~63hrVSU3sL4H0n&fUy?>O%M_V-N7FN zO^`sh5RDrKU7g0GaRj~;3I>NqX`mESQ3%Kw1F!|O?kJFk0Tjc%AT_8^uORRcTIrQ1 zlBLxt(h!7TFfa{3L;@%QZvpra7Kai?Ay7K9sfekm8IvqQBS;gKfCeUr05`G{$Vw13 z*ytn(a18+=CBv~`#QSiO3kgf|>Z7t!B_Nt1n zaTAt4u@n+xqI^FFslY*4ssK!8^mn6YF1Uwhn+Bp752LV*|*Hn7AJgru<~fFb%{ zO(FygOaPeRkzKT%7T}Eu;)P(y6eWO=cV6s$I9L+TVmN{QQ*H52r_AY2xa1VVrbz~Fxy4yEJZI0&XuaRi91$_guKbqX5; z=aKlZTre;uIwCaCCl18&-;E5@alk8>pa<(gWppZ9f$L>*!C3wM5a=1WY6g%*LDZlX z*k~jeR3XL=WgsPCEM5t(#uj4+I+S6M5C97e7z1%){?DEc!9+aD1c8uIW-U^5-wcdJ zzmGD_AR_w!9YP6Y7*G$K`CtE7JOrdZMTQvo7fC+sL`(qvA{Lv?2YPPBphPkP%&<6^ zPJ;fo5imQF!-6PCD1ihMA#9(cWSI<`0tqM<1>u0s;GVM&EV_UwDTp5@3}jEo!=N%i7-0F|4JZ%<3jviP5DA^Y zteM=Gizx)v0LD=;aU=*!La`w0|7*LmLjn9EG%5s^bHYMU2tJXJh8}flw#304IFu&| zWr8MDgn>hdBnZMF5U>PN#K8;>A%Bo`|Wo!aBYF9f-Af+l>RJ}{yGI)ek#3dk3j zKth-lSWN<@Q6K>_!jl9OX+W7!8W+M4+6fH{>~}hcuwX0QgL=Xk)rLY+IT?8^hf&j}f zgom+|oiGVIAAy+!0$9exF-IgFk`NgPvL+*XWDO!M&KYDn384e(Nial337jaCj1X`V zM9O{;FCE9ehCvxrgie7iLAMkb3v4Jra)46^Fb={Yf^aC(L@GO-qy#`?$iY}LoRl8t z1KcCQG!g)Z1#%XINdy|hf&O6{&VYeIh23ES1UEx8%K)H(I3fn2<4|54%79Qh1ok2D zf&gD+AR!0~?Tjc)L1{N7^eBiW=!XP`-Wi>Mhj#|T0bzjQpk2T#G8Bh_p#On}f#_Kn zKq4^)3csayA_x}uN^w}c1dR-TB%lNgnl-7hgE<9s z4(w3^$4*@$fENad11d@u$fI~+F&GXE#4-o+KzNd2P?6{ulu3cGAaD>1251`r=T;0k zD8+_Gr^tZ>|KEEvn0&oaz!6|7Zzn+zkPd_$xL_igoq#8CIs$pH0mMKdB2W?907Q%^ z1M7bxRgw;HrXV{^ks&4o(J62**?@@;q`L#Pz}P}*CPWi-L>T0qgAIKHSqrwF^IFG^x;beNr5Dk|YLV<`tX=IoP^2G@Ttr&nx z7|_AZpdv|BIAs()1?Yf))L{nItC1UlfHBYycn6Wjpd9xBZZMtXLm)|GsQ@(eSMLrc z3?NIY3})vD%<@9$BmgGDG>0K7%5+4rR4y8pmu`-$HUqPK+-@?8C7sF>g@L;082F<+ z$|S*H^-F_xu!8U?6F5ee1g9$Wf-(k%kf zNCbo@u#CYEK{zOngwkjba|DY$#Z6By1OD#_7!QH52oyddgu_x{OAM0gj$oZp0ts@) zpfn7^g4y%P<_r=s!D66YID|k^O`#w(5GjPo#)D4Ez*!F#1Mk3&hai$tp&5yQ zfpC^6lZr5*{R|Q^b&`|>EJ0pT;T(`ARER)EcL9A`N`j?VtUM4Na1W-F40FKf_&5fP zmXkm>?bJ_ooCbk}(5aw;Av7wwi?kn$gPA+Yj?hUG06iv&-I5YVpukK#!UP|wr~nNG zOACI4n+^fWU|v!HL^YscAgmQkH0gz?M}Y`wY+e<@Fvv23;eI9p`bQa{dZeW z9>6JZOb&eB;S1*hJV`wj$KXU0snDY*rx;`q0)oZE1PHb^kRbw9LvdKp1Y|wf2UJqx zK!q>c1@q&i_w~ZDJ_rL~OGP1y55WlmrvRXTGz+E!DUuBsK0q*W3a8qQ_E-p2ynO}1*Jv61TPo?-{bl2cmhBm0@*-D zpGgQe6{dly&=Q9oQNs30#8KcFPKfS z++jKf3yB~CRFvtA(Bz;b41xiW?%0DUz<)3u)Mq?O05Y3|nMn{x%p?;Ula0o30%ZgN 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

tS)XRORWB8Mt2rUnXP5R@#$;Zf?EB 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%0A+}OQql|61ruuq<&g(RD(Wf3__M0>0$sb? zR9&KG{HvzRabmHRV+86{bKHa3*>TF^mphU5vpeD>TXhhx8g&&x(WqCqGQTrBCOXu3 zc8Potm9kv?R9?X5IJqj8UX>(#;b#8;(U8WYm*izToNLFq6>L3Mu|r>GNt*oai6?fa z%drZhm?eLeWqZ)-Ke1LjHh20W+Fg)~)fw(c?YQbG)x{mj{*Bhw`y9d53i+LS40T9E z?d&E&mP%QNq8_Qa8mm6K7I~ERJw!Aj=6%ClnvF5fBl>N;i!x{OlCH0z3n@>!<}9iS znuVj~1)wORUL6GF)t;p8qpii=sZ(0%Bx5QYrAI(e)?o`yU&8E8LCRPD$C_cbj%Sr> zFtj$eGuZ^Qg4@QGbakkUZUpp7sP{<-h zh*+qIb8{{(9)Wm!51C2RpJMZ(mBSzaHAyW!it33xwF_zU3lHZlX7Py2hZRBHZ zE?W5#^v&&ixETyfSh|s2VwXfhiKx@Cg(TAaL#bpr{2`*Nk0csST0+E`^LiQhNCs%R0vgj|;X)zrh zr6nQc?=VW%MJSWHUk>F(|{ zqf&HtT*wXvrfoxKe)3LN7=>08oV<`EIazicDV7DENMeNzsJCO(^8&N|GwfH;FAS3I z9?2P-;Cp4-oFHwbA#P(3>JqZU=1{Q1=Qa@xN>fIh#+Gsnt7!vHL14;dg>&vzK@mzg zqgG;zM0&hEdKFTVk1Axc#oQSd;FV>5qop*=Cw2NGR_0XZp9BbN0F!K?yhQ7K4hgFk z20vA6uNN6A`|*}jPAffo3rP>Gh#j2q=0#2t$pdXFXY@(BLkUF zTc6;GR#3SKT1Y+0UPF58^cd>f>%|0>br&ero+ND2ZvOj>imOfcLICS+|hlJ8lqF5aq>}?b4iUxfkq}C z%u6oa9Is6W;Sp~dX@PojiVDgtI}-l@l)`+s)MvK{^}1pXYn9}B2q;+y!dfv4bV?r; z9PMrAi5i=$#fi-G0^M=uKL$2SvB51*`WBt3vPP<&y0~1*{{T{7PQ%Kg8jYezc0grP)NOi_a`%u&7+*mfGO;94cl$1Gb zsRC`$VzXHp7}HY|$ZslP2&;NPfo`I45u|n*rA6t>(#XfEt##tWWmwM^Lt#sI>L#m} z{{XIT7>ahUFM)?Carim4PMpOin_P%0ebYfb(v1bA;rZg{G%ZK9d@L~uEz{sx$ru|{ zytuIfP1mkPbq%M^FSyny%DUpiHL7YbzKHQo6^AOiej*}mjxH6PQ47?YO|C*0Ky^h? zvB-$fSrpPre#LGOx+*!*4KUoxCs|jhbpeYI@FNu(R$9%;d{tpP)`H`MyO;Vic*ee1 z(sHLoRF}}CN(iI2%tPJCmvHQ9z)W?m6pI z?aWfhNKJ0bW zYHD$-lW->d9Qi_!uFLY|O&gh5%uuHn6m5%Xyr(Vxk8?)IgObHMIIz;rRYP-i*8;}5 zZ5GeySXxQrA=6+h48~Z-%<^iM;>xmRwOodzMCpjLdSGxAN{NdxRV1pix?9jerrRi{ z>P0%ERnMT)iV;SM=Wz`-8s>4%g7CXaOG$l1Jz(2pa~VU{J;kP4Q-;D5<{DFJ$)l_i z?Uc$Tc^JwgEcX?ZO-HXmmR%EH*lZYS6<2}&Obu4tP_}|pT>7FtNKFr~u&`=|mDpol z&$0fK6Har$vO=I4Y4aSIj28h(gHQyW~q+ zpyw3u#=$ggLQeDSK=mam&8eYZY8!5kZ;_EWLyk5YX~XoeF@;+cYQA@pW!&GfaE>*R z#KpMsC|L1P2-0xY_a5g|MRbBCy>(nv-}67dZ$$+KrID5{0cjTr>F#c6SW3Fxmq>Rl zolAGel8SV9hje$tvirN=&+o5&JTB*+GiT;GbGhfvJjY?hGw+t-5{P^}rfxahMloG6w^eUgjf*WgyVLQ}tl7x(K@} zmn*i`RuAuGU}A86TX+tS)~d{*+Lx6Za=tZVX~l2E5u7zPrU)H{f37txl9%-UOrFd>oDaU+e$^6`V!P>d1-4E zS3+J8nU?d?a1@JMd!YJqlX8br?fT0(jvHzZ7;xN(Rb_Y;G@;ewz1&WMQR*4-x7BBE zax@U_MZ*MJpcesoxIC}@{*((gO#U&FEHy=*w3uy@rIpsko^$MXcT0irJ?y>(S5wm@ z5r4I)rkS{;5AiuoVs(aED|&v5RvS_TIgy1Oc&DotR0^Q_*?Qj3&uW^ru3U0r^G&6G zv7%eB=Ak-rrPpqoEkh{D>jdYCJCe|s;a(j&+u_eFd@H}n_yg7nStnLsxqpZEeLc#o z%e9kB#rm5C^W&>HsS;!qc3IQa{wpW*{x)tNn3hRVUlzT(CPaUa@O z(rLC%0_uGN8!gOprg8$yf;y{#WyP`gjOno${G-{QK1Z#F3m++t%$pjzR3!2RH1ZM7 zmK!8QhN_KkB#6>gx^TCQ!_q@wcR72i8u0pVhQ?7jfA(1)Ov}4W&%kMR#e*haW~_H>8Cb4A?*98q#Rwaj%IL&WdrS zm$>l&2_D=Z!e$75kEi`{ga6_WW$>S?UW6|sT~6Be_; z52HMAP&G}pxB1fhDQAz{=lsPOpP|jyQI%*84p!Rm-?I#?hn)c}U5?3Vp=u;JCRdU4 zt7St0-tKIi%J82IQRYPb2N4*v4>&2QI$O)1GQqU*ZA>%7|I^I$_|P(Vs=u88E>KL7 zYBf*kZ{YLaGB1H?4zeQId-@%i?;_u8t?3(f?8KPGdHA_mPQg~UFJzXDCTHUH3;cg+ z4htYelYiLx9>^yi*ir@-XoXi0HIZa0j2XS8pJP3Xp1Uyqn-Wdy8JQ5NVGB*2ma(v? zB3PF8W3O}n{$YyFP8K4C85Lz3EnfS5dAJa+I`nd^`LuY{;iI!IYtkTFPEc)u)_7sG z9xLV4ysk2y22jI2LmyrpUal&w%X-zMMoUo#A5x0M7%Xq?q!o0`(<et)us@OG9ZAkzczLcXr+n~reZ zi8Z)bVpu%CZ=U@%)|nZ?BS;RP^WdS!N9X)W zLf{Sl;rDfO`*7XHh{&YU!%Hy-PlYeG>K5({CX30WgE|!$jCxaw4CC@rs^N?oeR+lr zOddSe(El3t@7(F+A644oSVEgmm0p!s&UA7sfbIVfX?6-NOb0eFh7T(_2Sm3o=|pew zRqs2+c}QeCYw7w@N?gZrsqj|XkM^ZB9yD9oulA{ZSeoZ#*J%&W**TV)5Ua?Pbu;&mAbMuUqhy)(oVze#-bF#Wtw3hj!U;Dxp!S!m zW6+2rg*XeoLIuqgaWog{nv3Po*j0!}EhERalNzy2;L=@h9=QZiGgH?;G1<_i|mYs1p3jTOrQZkJ0KgY$1fh^CNxS@-?0~h6RbSsxE0*L7^Gr0Nz-PY z^Dj@dk0YBdKRv3yfVyc^rtSRXM1W=GT#`%gel2!^P~FzqRZ`Mf3=+SYmJ2r8T)~r& zZJZmq26LGwZIThxg)Yb*+5Uyt%FhO5lrx!l2v>gB)i({TP@NGK_XqO~*_ARAxMUf( zywlM6Bc_zd`pYb!M9&MqsaE`^gkD|GzDnqAORi5MV-mt%B!5dlu2`ITNI1yj8Jobk zJMY9hj$?n^kr}t5eN%RuB^OI(fr4Z(ZSR~_+AQ2~+?m}tS|%Z7)%eJ5zF>QuZO^r# zwmP^po|@~#lf8B7VyjYk*(jPeAg3oFVtsY&ZYhrfF=shCh9%%{s%qQgN9t!9on;K7fR`!yS>twB#MHR#ZK3 zf(FqXG>hwwjB{!V75`}5X7|g%O=97O0XJqkYhBbRU3%1I8f4wb)<1Z8IAfY;s zkf&42$YOzWx%TcMiJ3^8FEKJ43$b{U@L~KX{84%J=9$V zhbj?X{|F7^@XSK?mVRAY#MnFJk-HQJdnHE+MH?0aEb>L~W~GN^%kQ?hmRig39m=Q% z6K|13(sSe&xNICkxD!8a>L^$>qIJYE)@q+PdLa6ns|4;%(0uMp%Ul~aPSXYk)#}N; z5QdVo;)VpJwqX+&3#B1tCy&Z7)wx#}w66nab!#~aA^LcvHcH=rM{1D&A`@rWVY>

DpK3*8zu7%KTNNLy(|POZGtwLcfRseviI^Xxt6)S<(OMa zeP*rn7=L2Pc(WWbCC}g}VKmL;vmEbOL+QaM*XScB>~7X>(eGC=AO6a=e>(oIC7wZ0 zvecF1#z^id-v94p9wF+*DkIsEhBLNh>+fTXP@g2NWpyX3RvMDmJPLmJM-umR4%@pF zr)gI;r#B0Y5?nPI3D==J$O)wlI$N9l@WpmdQS~ zAUR)z4~InS9wNCxuQb#zi9B7sE%Q4a*@>kV*0b#daxPkBr2(FEHhaBO39DbGToCbw&$Ke4?NAWNvHNP{7bP1V|eVpd%e3j z(CQ&=Re%CbPrX$`DtW&{;j!SZb7lEbli++#g~WE{1|Ni~HR^!P5NxPjG?7rKrr^hz zjQ=4jTkH%!i)40l7Os&RTlc5q&&+3;_&~UFwmIzG%HgnERIaoQJAsPJmaYEb4|R5n z)|)fF9y_mt7BLRJKCWaaM*8=#7sVe6`ot=_HgkG}{4g~F8**JFJz-D`TfxE0hrWdA zA7bLl`Cm(kTj)|?N}8-QL(Y0Lh6=4ob$Svr4bxN39|&!TX~<0_Ii1yE)UEy@rnZfF z5~~odT+BAawDN($IZ2Ab6s6>rYW&Ej57^tq`4{wxf6|7h-Oja}IG^FGLd9?iVJly- zduv(PD?hqyKlc`hFx=q9aNY+J%o^;=tpQ;EH>i+0?vH>xcP?}gFfaI8gsg_dFOfxM(OVca=D z@riGQF}>y=%v8iSQDO%s37LgY87R75s9WX2ZE<_@qO^@y`+`T4M|Foh4O`_)<5{S` z=X5yq_Th^XNDKXjaogDT?W5!)Vr_7F9GaxS6sp}GZoBb0JbB) z`5i_m*Wy9|>FF1P6NLATN-wy~POmM9BZ3Vc$qpc;m3d0V`1O7LX{Gp*ef?R&|9;W8 z8l;-%oIpeZG+Lv@HCMg}UlSRYy4B+6itjg^HXmY6u~ZoK-0E`ajUhxNSJ>6}3|QVU z1YQwR%2qWw52zxGUY;+mF4 z>!DC-RmNURHCTXfMlux@E1uQ2?31cU~TxtV5W|ObIoh3%ah-Ule;V& z1)FLd_)Nq;lYh0DJ;iI2^8TxK6%-iIuuV!f?Z6X^@LYDJB#y|Em@2RtPm)WOp^wo_S_w~T{nL5*r zy)o=CdN~%QbLWl(erhg<6Y&q0IGfM@RQCo8C(e&ZXe>twoeFnv%?u7vla78~{;@LP zp?`55-!cI-`8n_7lF;n6H`c=1NW&ssJSaMnu}R1NV>EVvw{kTmHBOA-V+rm|G`j+w{LC(f!1t(A&@T~-bkUIXx~QE zR&}!TkFPrc=l562u_M_s!NzZPVT`M0DI+PFnmMDH&&j5pGNlns-1lv@o55S^-%CEp z9^6~=iA}5+q>TIbewr!j#t^i1!UoxS;92sDmVmoUDWrE-pBG;dUr99c30J zB+$DeZs>XRZozufektO;B9k(#x&BG7H+&@|P9;94^HgySsF619FrMXf3<+Yk|FFy5 zxj6kB&tF$XGypQHRGj+VyVYq<3W2xUomoQB;A|NZ!}|~QC09J^6f#b z$MCWRMm+1jvoC#E^cCbhjk(WggKONS5EFGQW5J^VVHm)2~OlfTw6e@KZ--ynY;a zs1vakN1u|koRR^@{77$?rB*^LDOMs_{?w#qI{8C?s(}(8N!(p3i?cjt@F4jaS8iDS z_Gj}T?fQey+E}(sW8J@_6qNn(lVS&wLRDnuwIy%ar&4~3sD$=61R^(sKYxD!qN)Ct zenlB)Y$Jo&obm!GhgaPlC0p-~M_AK}Ti^^VzeH{?m}SJSC6`o;R;$1b>|SVqse%4*Nb z5hXe0lJ!f~+gV~mE(>A?K<6Anu@av=(;3gNnIsBtM2csqmit_-(yjfaS|arQgT=~B z1}J~*Ei3d`Wc`xDoT;bTqb#xhVMbHgRAO1Zugz6c=9$cW^?R~GJX5+NzAHb>NN#3h zvEU0%g+SA^If47F0TGPlENe^J9>%_q80}mVeB0>pK7J&#SAa9sS=m{fR;&85M)b4$ z3Hw~v7&IWM{n6W4menrHL#D^)DKnIlrOY_mA}>hqowZ2j%TO(X{xrqQ$B?|G#{?`? zulc;J%qHyKa{=nVcK`UFj|{z<9h+g>~_AiQV)hpN@n~l$5)Iq z9uJ_!&oqC^P9HDAK+@}-q8#Or+n4YWu+gXB_RkoRnGVX3WI^d!zfgeN9K6Gn50g9y z{7Jv96v)B#Yryc6(bab_FE5uI@A5DgCmzF_h+1i7oZ?20UO7SU!>t3Z^ox0Om%8+x z9!rYih~q8&xO8SjP2+U~@u?{dZh|)5N23yn*(LVwHxt=|q1FL9S=S6M8M&@30-q#N z?5A6LI%*HfQEU-z%M3bh^2^gYZn&1CZ_a+DN_gSoB#NLx zO4v3(qHXqsRc||qNU4)mB-aZKef{oI*r$M65$B<>b-dzx977TCH$A4>?c#)oHE+7E zbxB#j);lV}F@kZ|(H>1cQlhqRpyqN@{M!@n`Vjhx(dp>-iMbPlThWGlq?kY9wPm;!uqdp(e|E{d zUaH@demiM@W>uls_QWNUuq^Ic{Pmib&>1(SN{L@{dBC!=!h{fL(YWzzMsFwHgj65( z8e&Gk1_?8$FlnluY22~g(sD;&Fh=k0tLph*@X;W)mLd7d^@0#Hl3v2;-aL{@SNT?k zw^hwsoq0cPR4q4i>)-r~(2%H&j03t>SVl5-vv9c6XG|}wVtI~N7zeR?Rbl9n zx5X=-&2`S_cl<+ej~r2IJ6&g4y{`+A|mMOxv^M_f?}GWBS<$E&Z?oyY1d`c)4xMZ$LqvsanmR>lN8Q zHrhasExN&x3EZrM{Gh~gsYBBS`no~Q*pco$ofc||g6YBq78keUK!6FOe8_;+c;^)Zt3lM&xZV9sJM+7e%YNYnPv6e*b=x#F4xBWlAM&HgEIg{9DxWeGeqp?Fi#|TQ;;3Ra)HP zf4B}AY>BIk_U~h~Nz@WhF|$45$oqIpMke5(t(?RzkS8EDzAZoIcl?!ZS}>{!@(EclwG zF}IJHav?2y^|TlB0sLfN?W1MF-z#l#U-K%;`!PQ3g(9Aj@sbPI3rO(?+ zGg4pqr9XnhYAEWZP^MAoo5DeI*mLqbpbP`>FYyWe8O7c@`rYoyKQBU%1uXFH;W2_8rJzxQ3XzSu1EtZK0@{5fupO;_ZGPM=^l+ZA@g2P_4f zVie2FvWm`FJ6+Da{1@Pl>Djr3Q|`tn`53pe6U7-19x>wDoe(CB*=6PfHAeg?bNz+4 zVfAQGwX{*w3a47mN|C!`6P}N}sVP$;D2J(7>w#qxal$T*)= z9e-+1y?;s#!Gc8eha|%NV}n#}>)<(CQ>7-U#gXYJG&`K^F8yt)fBLL`X=_Lyds1^~ zj}R$jZZ4a68PXoYWJ`h0zw7?9FlGV_{`zH*I@mp}a#tYlQg z@AgN+m~B~I-F_>o8KRz)S0)M1GKPvvHTAd9QUd?CG!}Sj)1}#UD6a+y9iPs}x&Dcg zL9CGeuvP9?8Y;?^cXcIe_4c#3X58O6#ngJiy(>ayZQ!~@u&(bt)Fzb#DOAjQq1`NukD5YEnF z7CbRpgZWSy&WF*6Q9cchyyX3-aM2QXKj>QNSaQPNt|b-cjw4}w&=RU)Hx%6$HhBJX zfvac!nxTm6EG%ABbdi>MJ>99B0Ha0yKA=NWfTAv^!q|H2tIM=_yR_y#7S^Rsr`pMk z3BkBVqTN({c>?nstDH*jm@?c!*O${Nx71GZY;Zw4zcX~a=JimpWa0t~tVmdL9ynb| z>#M%eO8AL!;YEdNZ0c;fu~4S_le-bo-dB#G{nI{?4kQQ?1&bJ(Ot5_Cf-!oVRP;=fn=TCoy;%WxnV@i=>- zY%Kq{^d2{@JpQKY=Mk2PspizPLB?|X-VMW17rq^lba#7XC=25EMUQT&KVEgU>bSYe z^Ex}tyx;#eQ@t;E!ScUUH7fEQ@5@IOZvW;H9>oOpOMDKCy9>@T>Tdrd^LIWbSF-bW zT#3NY^fw9LFU8gCwDv>#^eZ03{nAo-`0B1{$>wWG+umBR1A~9;{#fp{?^nQ@sCRe1>f7Kdh-RV<-Bj9jYNKg;Kh8sttixaigKG_*#P7ig@h4d6fTr5Te#M{2t~; zdm-$-KDclC8U1hv>UT|O>7;KM%w%zVZ{hJe2yo4G8{%ldzDIBQ_U($JbQ5eT1$Jbu zm+QO!=vm{k9ijdGvR=1u#{ZR|`-W5vEs)tuOnqfxkEjh$4@_Z`7OB2(23$L{Kdz4WCo}7`dOvzrQe^(#PMV#O%676H(QP`aFZaNs{7z)ayyZR z*uDDUCpYxg)QzGs$o(eYNQvCe@fR0e;uYCRN#zSyqi?>)$NMiRgPV(&Jjuu`3iNWW zZY>X~d@3WMhg9X|;4 z7)DDkj3o&tl$~*Bvqc3m+XF>L>AjL)flAN!auEQxN8=e^_)(5)lgrY{eYmcp+M(C) zDJA*G7u}W-%;F0*^ci*taH~@7swV+mC@y?pRC+b-yk<63!=9n1n;AYyb**`;9r)6| zC-c)nB#yq8x9dSq;P6y>J2T(W!D6x=)k!ag1g{Fs?S1p@-?-@EVigx_1z*hgqsEjA zE$^v_zn=C5}#vi)Oo-C-yXqI`hscU-h zM73Xa*3#(8y(6T_GAcW9uUT*8i(qMM!E3cCdBl{icnWTRKoCjz&Fgs6l_bYJKX$YB zrdzZ&iu-DqD1NVDOOHd^QNot09nZq7jktMt8?3KlDR_7b^JolGYg4&F4l7v%TS_8#(K- z{_9*Nk?*X!o=iJtXr5 zR-cjskYM(Ec7oS0%F{@u^vI(Av{3UMtz7Z@NvSsm;sLk~Ww(sd=9wP7>Q-KJ%jJ)s zw}dqd_zU9-@(pU}Vdgs@d~*4B&8@mQX9oKq#_rxy5GzBw7vc@M9Rq(}rYLDjzULvj zl1$NT@F6>L-Mz|RmL#!@7PGqStUegXiHn1oO4m@Nlz_>Ox*3;CW)4^sH|QVVDB*Oo zPj9!K^xzo6VXY+}Hl|24AIK7ENZnr(na}_S;nXQ)Kp3s4~j6+^CN$YJ&lI5EPi#C5LCjVDEj^ElVm~H`%>R| z`5qfe6b+<4=4TXbS!(Y~u57#-JaHYVe|9$YN<#P{Y12x$Ib~b42Z3`|p^~g4Wo?nK z=vS+@WV;K~@a+@Z5!i55$iBt2G@Y$ZHci0*#jfp#q^XD#8q1PW5x?M?ku{`PDXR`6_LlU$H=i>uR4+BynB?AR3iE^J(AHX#Qwx@X*e#Z_qO#X~E z^%iBR=R-!_jF8OvNYD6&^X&yQe1{rb3bB-;2z@ix1As8Z}czW~Bvq!N)X4HekVN%bu1@6;sQvFk0 z57B~0s^B1?k||wV5KOc>DM@a}@clkYtG7g^3%*d6Vxq~81y&l5FE$=Z*^txu9M*(7SBI5CH(4Bt%F8H)a$0=ov6%y@31wKNwT!&cu53)l{)ji>zyPG z!dbtPn`Sca_x$&=z7Y#wma&PdAD!mk5TCbbOxql8Xbd{?@i${8WzK+3Vs_H|0rgRJ zJwXNZ6;7k}rs}7i1SnFnjg|Mvy=*snUjw7ja<>xjFeW z%v*oN$o54g=u?#m4B~g?+1Z_0%@+0r2urkyHUgf_2=|hU7;o{x7<^1kO}nFI+F7}G z^KZ?w+EzxMVwjxF%+$w=jHUKrak8$L_2YrJ)p3)1FTj%*B$*~c7G^)F1NB08@-A((v@PqNqmffor`@-SeRc#O0d_m=jKar++KQ2N!}!InSgI5?<2 zyq)2A7%nLg%x=I8Ifa@FVp)sg8cnWNA`*KL1>Vpfn;VR!|EBWvG%4xC!*;J|S(Kwr zf>@`IxVGRG=K&XK(>~$%R5Q*`$?v4)G%P#G;*KW0J3oms&S*R^VR7%!`xDadtNc09 z?aNE`-4lBap`qzu8y8oq>U}*Ht$)FeWY+|1g_`%6sb!ziE-FVp0mbt&LehG#vp&nJ zt7mvIq@7=IpUNt;DsDAj2!2LBF;0dUfgSnW!E3*JJ9pWi7?nQ(3N})kT+SNVE|jJzjjPKlYB3} z@z+En*>-f1JkyTKVOa8HuslIiZKtu&!kkFngpduOmZ=Pw-=Wj)W-xLccJQ9b9DH{p zzP)v$P#jvoR5oxXo6YX(D5`IN!e91UF}YU=zqq@^9iMcti5pVCA8vgT@qKz_{+oAe3+9}ei>ad#%dS32o?sjk ztLX2eRkUHYw|pnyzzt$*Y&ib?y$jC^@LakReTF3^X8XmA*91YOYwuBzTAC+<oF4XpI>+csM2F;<&$f)Q`F9Pu4bf5i5&auH@PF3a^&R za3+3@;@gPt@RNW%S(PtBvt1C?rLhcb_hcbQVWB;Ke}b+}#&CQJyoO-a?7svAw)HwL zRz0n8K}>`{_qhGkBYh4%xGwK*h`730=l%sH;6UWGvK&stg5x_R*`+9R&G;BOkaO2K z{;tt(#j|D}g+~g!N&;l;d9)KBsS?PFLzJj~t;~rHJB)ew;_z9OwPWRZD1DCC4k-wO z?Dyg8g)XmRZM3dUaaO)th^MAGh+3?`T7-Dhk|ozDX}Kp^^W;6=Gutg+ompR68<3XQ zHq5XEs{?`pE93Qt*~ zq*=FZEfa{EEWTW_W<_ax#a)!ZkwFEonBkfW*v;zJ5mRo`q~=98YO=QFWiG8>DvjBl z&suEdE~Qr@!Yxe-E@aJ&>_k_hJJxAxStW3JTE?(-m4*VFm%ZrIZ6l4j&+q0FZ2zrg zyN_6S7&RyIZ8(+Fdxx3*vNTu&L;S^H>Lysc8|;7{IZm)0M**0K>W zqAlEs5mMK5kuP?>R4c~QZv{+o6#dTdBmPS8MyRZYjxGDKe%@q zxfPM{?!n^&Hr3Qn;VW=c#>rDiqTlzRFdHNu5-VrLw5#}nld~~^h&TVPN=!jbv21-B zGNZNoNLl9PavWDR^Vw5XmtHPXIbf!XXdJPpV~{b^T8@*h<9$mVC(~!P-9_=sdv34D zIGZBc)@lsHS6h4ImGEarM*TXvPq1qrf>W{!#W_X=HZ~)yLyNBsCq7OZuRCedhK&5u z7%n(5!X}bRIODh|E~-;yx7)Xq1XjY1zA{&_Prosd_(B(y0`{4HW6aGNBo&6y~ z#%udhQpL(9`=E)^mquFF0FiKwmw+rK8Vc(RCz-ULKr@NdG=$Ghe zQ)BEjjZwbsdoOFz?yz_XZSekBn7wrQ?&@iEY5e&^FVBxgKIZGWl!nSK`HRl}+Is?` znmi-m8KEFMFt-=3*1PCj^P|nKN2YNVRmPc&nOV@?@xhWmLxUEx;(fqzsG(tg1q3;u ztpUD^i~4Bh^+<735XiGAkAHK)qG-zJpV?3vKx8^NzRf@ZxWIWlNjUTBezxJderTv0MiR3SL~_F@jB zSrs~dU`emKB>?9`jo6L;{b3LU!kwwK%ChprntRTKjz*}w1Qi}$7+s*gJ({V<>WBu# zF$wus^DnfLNyhcD_cd<)3TL9%CiNx&_|S9zcj>aMf$vDVA?q}|u&ke;=Nakt z>56}712dfpVSa)C=wH(kX&n8EHy7)qnk&PhBbKw)T~I_SH)C&yKOl^FWse(1bFMBC z$(QmT{;!!A_j*vtU4nxk$#gvyHd1lHpTv6Bm+$s=*LIT@kMr3CtluD}3_HDrx}V1U zD#F&eIhc9-jppa00cEg{ez7_0QkVgudc38~PB!&3x1Flap^xcHQLix9pnE@Cbmmi= z&J+vUPmuIo>Gmf}(oNMkk-!TBdiahq;6 zHRZ96nihX+m9sW^8e=~R8Q$k7YMz^UJ+dj3GMHx72f!NL~(Mq_|1}2ZibND*$*&ho6rB1GD=FwvQhfo@cBTZ}Bk?!3HK9KyVI9XDGn3!_MBaL6+XPclPRw>5Wg>k zqwn&Bdciy5b*5O>a?dPxETS_Z4b=RaRvMi1lhm*h7jb;#qLCN=Tjp|Y#82*6tQj=C z6V!nBRyjpy3#^5aY5b`t-MaYJi-8hy3T7H+3^{6#O{Fi|N-Narl-2pXefGtJEwW_n z3-TRj=e#IB!Qv+IpDlM|W4Yxq%7xg$O%3+!CVT;%v)|?=8J+pUmlTFBWw5xC{K>@X z{Yty6F6GGcGbg+g^9Jg#^M#$ySa;FtkR11);a}*7_YJpaEPGn!xJrVMm+*Y7LWEs%CB{WFKyXb_jrJ~H_% z=D`@ccMW`rMT26p&(@F%s72^qRw5Jd?FhP!yGean_Oxai@x%m0jm4mRsn5Y^&~s`e zPYiM&4bq1`0PVBZIUg0ET{>vcfIABKa{iQTf_hsdx}A&$EoQA9j;>wmqd`Dc=UPy716`ado1V?P)^b3bTx2hv2tOppY?#sg_C&>&xvyGNBv=s%NxV`z|r%Kxo+ z1`NFzMuXab3Ve4kbX4?A=B^0kk$tOznxno~Ltz2R?=?X!0#p3oMs^iY>d?C;l^bdl zpq|p~dr1IDz`Z8-z@{P4V_OuUKK)n?H0VF`Cx7V9F&b1hHVGJ?2aqmX^g;nyheC<2 z&)oyMtXDyjqe1*=(2)wV91U9gJ%^%;gcdkma$e0neT0&tL1EB)JQSzXT@VV8FAI8h z2(UT=@Dx3}YZ5`zgr1wD97TTv!>GqZ zuf~vA&}iu0v;R}|M&1)3-45pypovm6XoJQU1$dWeCn^eo2AwuhZvn^+Brv&tfCA!Q z0@v1;kZQ;(lx_^*5`YY2Rp)&u>gEPOqPJaDkEpf3DoEq(hjV)Kd%!%0r-w&6sDsWe zlbhIBAV@ExL7j6?tia$gq#vMS(RI2spn2^}*Oh%=yw2 z6B?xFbWIId9k8W?Ne>kB6a`Gb58O78{b&FvxQhCU4e2PloBc?FQbU7kfk1JI%mxBo z_EzWLrUyJ!9)LkI=w%i1`U(gU1Jna((Ci#?3h4w`VGeJ)F z6|io~5E_)42><4e7eqIYJI?0RZlHWpc-b1}&IRX5W-&Us*q~z5~MHfXSmsz;$6q zB;XON$$2P!LX;L;5pqNdRp`$f^SD>_P`U|h;(zj@XMi+6Tkx}k_j~kp!XK=_C6$i%+o%K5_++#a?jC; z^mz>(0wxd_9nXH4LAj%(_W*gf`jDKQS7x1O0ERfSH?nV^I*;;@cBmO>0`(OhQs*HZ z4LZ37>{3$X0P&Pr$OB568eLnMW0r8TA7m z8Wh~Q(1he)JC=EDMuTQmih26JG-7p9w+vIpwih5j07NDH1_m1dvqENTF!n*0pu~cYea)u yW3F_Nfxrt*_VE 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) \n' + + ' break; \n' + + + ' float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; \n' + + ' vec4 stepPosInCamera = czm_inverseProjection * vec4(ScreenToView(newCoords), stepDepthInfo, 1.0); \n' + + ' stepPosInCamera = stepPosInCamera / stepPosInCamera.w; \n' + + ' vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; \n' + + ' float len = length(diffVec); \n' + + + ' if(len <= u_lenCap) \n' + + ' { \n' + + ' float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 ); \n' + + ' float weight = len / u_lenCap; \n' + + ' weight = 1.0 - weight*weight; \n' + + + ' if(dotVal < u_bias) \n' + + ' dotVal = 0.0; \n' + + + ' localAO = max(localAO, dotVal * weight); \n' + + ' localStepSize += u_stepSize; \n' + + ' } \n' + + ' else \n' + + ' break; \n' + + ' } \n' + + ' AO += localAO; \n' + + '} \n' + + + ' AO /= float(4); \n' + + ' AO = 1.0 - clamp(AO, 0.0, 1.0); \n' + + ' AO = pow(AO, u_intensity); \n' + + ' gl_FragColor = vec4(vec3(AO), 1.0); \n' + + '} \n' + + 'else \n' + + ' gl_FragColor = vec4(1.0); \n' + '} \n'; var aoBlurXShader = 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + 'varying vec2 v_textureCoordinates; \n' + 'void main(void) \n' + '{ \n' + - ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' gl_FragColor = vec4(color * 0.5, 1.0); \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' gl_FragColor = result; \n' + '} \n'; var aoBlurYShader = 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + 'varying vec2 v_textureCoordinates; \n' + 'void main(void) \n' + '{ \n' + - ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' gl_FragColor = vec4(color * 0.9, 1.0); \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*4.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*3.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*2.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y))*0.21875; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*2.0))*0.109375; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*3.0))*0.03125; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + + ' gl_FragColor = result; \n' + '} \n'; var aoGenerateStage = new PostProcessStage({ - fragmentShader : aoGenerateShader + fragmentShader : aoGenerateShader, + uniformValues: aoGenerateUniformValues }); var aoBlurXStage = new PostProcessStage({ - fragmentShader : aoBlurXShader + fragmentShader : aoBlurXShader, + uniformValues: aoBlurUniformValues }); var aoBlurYStage = new PostProcessStage({ - fragmentShader : aoBlurYShader + fragmentShader : aoBlurYShader, + uniformValues: aoBlurUniformValues }); var aoPostProcess = new PostProcess({ diff --git a/Source/Scene/PostProcessBloomStage.js b/Source/Scene/PostProcessBloomStage.js new file mode 100644 index 000000000000..e57209b2f0e7 --- /dev/null +++ b/Source/Scene/PostProcessBloomStage.js @@ -0,0 +1,395 @@ +define([ + '../Core/buildModuleUrl', + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + buildModuleUrl, + defineProperties, + destroyObject, + PixelFormat, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for bloom. Implements {@link PostProcessStage}. + * + * @alias PostProcessBloomStage + * @constructor + * + * @private + */ + function PostProcessBloomStage() { + this._bloomPostProcess = undefined; + + this._bloomBlurUniformValues = { + kernelSize : 1.0, + stepSize : 1.0 + }; + + this._bloomContrastBiasUniformValues = { + contrast : 0.0, + brightness : 0.0 + }; + + this._uniformValues = { + bloomTexture : undefined, + glowOnly : false + }; + + /** + * @inheritdoc PostProcessStage#show + */ + this.show = true; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_bloomTexture; \n' + + 'uniform bool u_glowOnly; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + ' if(u_glowOnly) \n' + + ' gl_FragColor = texture2D(u_bloomTexture, v_textureCoordinates);\n' + + ' else \n' + + ' gl_FragColor = texture2D(u_bloomTexture, v_textureCoordinates) + texture2D(u_colorTexture, v_textureCoordinates);\n' + + '} \n'; + } + + defineProperties(PostProcessBloomStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + bloomBlurUniformValues : { + get : function() { + return this._bloomBlurUniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + bloomContrastBiasUniformValues : { + get : function() { + return this._bloomContrastBiasUniformValues; + } + } + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessBloomStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this); + } + + this._bloomPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, undefined); + this._uniformValues.bloomTexture = this._bloomPostProcess.outputColorTexture; + }; + + function createResources(stage, context) { + var bloomBlurUniformValues = stage._bloomBlurUniformValues; + var bloomContrastBiasUniformValues = stage._bloomContrastBiasUniformValues; + + var contrastBiasShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_contrast; \n' + + 'uniform float u_brightness; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + //https://www.laurivan.com/rgb-to-hsv-to-rgb-for-shaders/ + 'vec3 rgb2hsv(vec3 c) \n' + + '{ \n' + + ' vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); \n' + + ' vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); \n' + + ' vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); \n' + + + ' float d = q.x - min(q.w, q.y); \n' + + ' float e = 1.0e-10; \n' + + ' return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); \n' + + '} \n' + + + 'vec3 hsv2rgb(vec3 c) \n' + + '{ \n' + + ' vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); \n' + + ' vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); \n' + + ' return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' vec3 sceneColor = texture2D(u_colorTexture, v_textureCoordinates).xyz; \n' + + ' sceneColor = rgb2hsv(sceneColor); \n' + + ' sceneColor.z += u_brightness; \n' + + ' sceneColor = hsv2rgb(sceneColor); \n' + + ' float factor = (259.0 * (u_contrast + 255.0)) / (255.0*(259.0 - u_contrast)); \n' + + ' sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5); \n' + + ' gl_FragColor = vec4(sceneColor, 1.0);\n' + + '} \n'; + + var bloomBlurXShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + + ' } \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var bloomBlurYShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur7Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur9Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur11Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur13Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur15Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0]; \n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur17Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0]; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur25Coeff[i]; \n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0]; \n' + + ' } \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var contrastBiasStage = new PostProcessStage({ + fragmentShader : contrastBiasShader, + uniformValues: bloomContrastBiasUniformValues + }); + + var bloomBlurXStage = new PostProcessStage({ + fragmentShader : bloomBlurXShader, + uniformValues: bloomBlurUniformValues + }); + + var bloomBlurYStage = new PostProcessStage({ + fragmentShader : bloomBlurYShader, + uniformValues: bloomBlurUniformValues + }); + + var bloomPostProcess = new PostProcess({ + stages : [contrastBiasStage, bloomBlurXStage, bloomBlurYStage], + overwriteInput : false, + blendOutput : false, + createOutputFramebuffer : true + }); + + stage._bloomPostProcess = bloomPostProcess; + } + + function destroyResources(stage) { + stage._bloomPostProcess = stage._bloomPostProcess && stage._bloomPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessBloomStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessBloomStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessBloomStage; +}); diff --git a/Source/Scene/PostProcessDepthOfFieldStage.js b/Source/Scene/PostProcessDepthOfFieldStage.js new file mode 100644 index 000000000000..85df1b144c55 --- /dev/null +++ b/Source/Scene/PostProcessDepthOfFieldStage.js @@ -0,0 +1,384 @@ +define([ + '../Core/buildModuleUrl', + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + buildModuleUrl, + defineProperties, + destroyObject, + PixelFormat, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for depth of field. Implements {@link PostProcessStage}. + * + * @alias PostProcessDepthOfFieldStage + * @constructor + * + * @private + */ + function PostProcessDepthOfFieldStage() { + this._dofPostProcess = undefined; + + this._dofBlurUniformValues = { + kernelSize : 1.0, + stepSize : 1.0, + depthGap : 0.05 + }; + + this._uniformValues = { + dofTexture : undefined, + focalDistance : 5.0 + }; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_dofTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_focalDistance; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'vec2 ScreenToView(vec2 uv) \n' + + '{ \n' + + ' return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; \n' + + '} \n' + + + 'float computeDepthBlur(float depth) \n' + + '{ \n' + + ' float f; \n' + + ' if (depth < u_focalDistance) \n' + + ' { \n' + + ' f = (u_focalDistance - depth) / (u_focalDistance - czm_currentFrustum.x); \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' f = (depth - u_focalDistance) / (czm_currentFrustum.y - u_focalDistance); \n' + + ' f = pow(f, 0.1); \n' + + ' } \n' + + ' f *= f; \n' + + ' return clamp(f, 0.0, 1.0); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + + ' posInCamera = posInCamera / posInCamera.w; \n' + + ' float d = computeDepthBlur(-posInCamera.z); \n' + + ' d = pow(d, 0.5); \n' + + ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_dofTexture, v_textureCoordinates),d);\n' + + '} \n'; + /** + * @inheritdoc PostProcessStage#show + */ + this.show = true; + } + + defineProperties(PostProcessDepthOfFieldStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + dofBlurUniformValues : { + get : function() { + return this._dofBlurUniformValues; + } + } + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessDepthOfFieldStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this); + } + + this._dofPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, undefined); + this._uniformValues.dofTexture = this._dofPostProcess.outputColorTexture; + }; + + function createResources(stage) { + + var dofBlurUniformValues = stage._dofBlurUniformValues; + + var dofBlurXShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + 'uniform float u_depthGap; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'float LinearDepth(float depth) \n' + + '{ \n' + + ' float far = czm_currentFrustum.y; \n' + + ' float near = czm_currentFrustum.x; \n' + + ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + ' float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + ' float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + ' float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + ' float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + ' float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + ' float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + ' Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' depth = LinearDepth(depth); \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur7Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur9Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur11Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur13Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur15Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur17Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0];\n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * float(i), 0.0)) * Blur25Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0];\n' + + ' } \n' + + ' gl_FragColor = result;\n' + + '} \n'; + + var dofBlurYShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_kernelSize; \n' + + 'uniform float u_stepSize; \n' + + 'uniform float u_depthGap; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'float LinearDepth(float depth) \n' + + '{ \n' + + ' float far= czm_currentFrustum.y; \n' + + ' float near = czm_currentFrustum.x; \n' + + ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + 'float Blur7Coeff[4]; Blur7Coeff[0] = 0.3125; Blur7Coeff[1] = 0.234375; Blur7Coeff[2] = 0.09375; Blur7Coeff[3] = 0.015625; \n' + + 'float Blur9Coeff[5]; Blur9Coeff[0] = 0.2734375; Blur9Coeff[1] = 0.21875; Blur9Coeff[2] = 0.109375; Blur9Coeff[3] = 0.03125; Blur9Coeff[4] = 0.00390625;\n' + + 'float Blur11Coeff[6]; Blur11Coeff[0] = 0.24609375; Blur11Coeff[1] = 0.205078125; Blur11Coeff[2] = 0.1171875; Blur11Coeff[3] = 0.0439453125; Blur11Coeff[4] = 0.009765625; Blur11Coeff[5] = 0.0009765625;\n' + + 'float Blur13Coeff[7]; Blur13Coeff[0] = 0.2255859375; Blur13Coeff[1] = 0.193359375; Blur13Coeff[2] = 0.120849609375; Blur13Coeff[3] = 0.0537109375; Blur13Coeff[4] = 0.01611328125; Blur13Coeff[5] = 0.0029296875; Blur13Coeff[6] = 0.000244140625;\n' + + 'float Blur15Coeff[8]; Blur15Coeff[0] = 0.20947265625; Blur15Coeff[1] = 0.18328857421875; Blur15Coeff[2] = 0.1221923828125; Blur15Coeff[3] = 0.06109619140625; Blur15Coeff[4] = 0.022216796875; Blur15Coeff[5] = 0.00555419921875; Blur15Coeff[6] = 0.0008544921875; Blur15Coeff[7] = 0.00006103515625;\n' + + 'float Blur17Coeff[9]; Blur17Coeff[0] = 0.196380615234375; Blur17Coeff[1] = 0.174560546875; Blur17Coeff[2] = 0.1221923828125; Blur17Coeff[3] = 0.066650390625; Blur17Coeff[4] = 0.02777099609375; Blur17Coeff[5] = 0.008544921875; Blur17Coeff[6] = 0.0018310546875; Blur17Coeff[7] = 0.000244140625; Blur17Coeff[8] = 0.0000152587890625;\n' + + 'float Blur25Coeff[13]; Blur25Coeff[0] = 0.1611802577972412109375; Blur25Coeff[1] = 0.14878177642822265625; Blur25Coeff[2] = 0.116899967193603515625; Blur25Coeff[3] = 0.07793331146240234375; Blur25Coeff[4] = 0.043837487697601318359375; Blur25Coeff[5] = 0.020629405975341796875; Blur25Coeff[6] = 0.0080225467681884765625;\n' + + 'Blur25Coeff[7] = 0.002533435821533203125; Blur25Coeff[8] = 0.00063335895538330078125; Blur25Coeff[9] = 0.000120639801025390625; Blur25Coeff[10] = 0.0000164508819580078125; Blur25Coeff[11] = 0.000001430511474609375; Blur25Coeff[12] = 0.000000059604644775390625;\n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' depth = LinearDepth(depth); \n' + + ' vec4 result = vec4(0.0); \n' + + ' vec2 recipalScreenSize = u_stepSize / czm_viewport.zw; \n' + + ' if(u_kernelSize < 1.0) \n' + + ' { \n' + + ' for(int i=1; i <= 3; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur7Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur7Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur7Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 2.0) \n' + + ' { \n' + + ' for(int i=1; i <= 4; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur9Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur9Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur9Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 3.0) \n' + + ' { \n' + + ' for(int i=1; i <= 5; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur11Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur11Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur11Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 4.0) \n' + + ' { \n' + + ' for(int i=1; i<=6; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur13Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur13Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur13Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 5.0) \n' + + ' { \n' + + ' for(int i=1; i<=7; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur15Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur15Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur15Coeff[0];\n' + + ' } \n' + + ' else if(u_kernelSize < 6.0) \n' + + ' { \n' + + ' for(int i=1; i<=8; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur17Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur17Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur17Coeff[0];\n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' for(int i=1; i<=12; i++) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * float(i))) * Blur25Coeff[i];\n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * float(i))) * Blur25Coeff[i];\n' + + ' } \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates) * Blur25Coeff[0];\n' + + ' } \n' + + ' gl_FragColor = result; \n' + + '} \n'; + + var dofBlurXStage = new PostProcessStage({ + fragmentShader : dofBlurXShader, + uniformValues: dofBlurUniformValues + }); + + var dofBlurYStage = new PostProcessStage({ + fragmentShader : dofBlurYShader, + uniformValues: dofBlurUniformValues + }); + + var dofPostProcess = new PostProcess({ + stages : [dofBlurXStage, dofBlurYStage], + overwriteInput : false, + blendOutput : false, + createOutputFramebuffer : true + }); + + stage._dofPostProcess = dofPostProcess; + } + + function destroyResources(stage) { + stage._dofPostProcess = stage._dofPostProcess && stage._dofPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessDepthOfFieldStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessDepthOfFieldStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessDepthOfFieldStage; +}); diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index 6a03afe321d0..168509ee05dc 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -4,8 +4,11 @@ define([ '../Core/destroyObject', './PostProcess', './PostProcessAmbientOcclusionStage', + './PostProcessBloomStage', './PostProcessCompositeStage', + './PostProcessDepthOfFieldStage', './PostProcessStage', + './PostProcessToonStage', '../Shaders/PostProcessFilters/FXAA', '../ThirdParty/Shaders/FXAA3_11' ], function( @@ -14,8 +17,11 @@ define([ destroyObject, PostProcess, PostProcessAmbientOcclusionStage, + PostProcessBloomStage, PostProcessCompositeStage, + PostProcessDepthOfFieldStage, PostProcessStage, + PostProcessToonStage, FXAAFS, FXAA3_11) { 'use strict'; @@ -117,12 +123,73 @@ define([ }, /** - * private + * lensFlare. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + lensFlare : { + get : function() { + return createLensFlareStage(); + } + }, + + /** + * ambientOcclusion. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly */ ambientOcclusion : { get : function() { return createAmbientOcclusionStage(); } + }, + + /** + * depthOfField. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + depthOfField : { + get : function() { + return createDepthOfFieldStage(); + } + }, + + /** + * bloom. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + bloom : { + get : function() { + return createBloomStage(); + } + }, + + /** + * toon. + * + * @memberof PostProcessLibrary + * + * @type {PostProcessStage} + * @readonly + */ + toon : { + get : function() { + return createToonStage(); + } } }); @@ -293,9 +360,200 @@ define([ return new PostProcessCompositeStage([darkenStage, redStage]); } + function createLensFlareStage() { + var urlDirt = buildModuleUrl('Assets/Textures/LensFlare/DirtMask.jpg'); + var urlStar = buildModuleUrl('Assets/Textures/LensFlare/StarBurst.jpg'); + var uniformValues = { + dirtTexture: urlDirt, + starTexture: urlStar, + intensity: 2.0, + distortion: 10.0, + ghostDispersal: 0.4, + haloWidth: 0.4, + earthRadius: 0.0 + }; + + var fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_dirtTexture; \n' + + 'uniform sampler2D u_starTexture; \n' + + 'uniform float u_distortion; \n' + + 'uniform float u_ghostDispersal; \n' + + 'uniform float u_haloWidth; \n' + + 'uniform float u_earthRadius; \n' + + 'uniform float u_intensity; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + //return ndc from world coordinate biased earthRadius + 'vec4 getNDCFromWC(vec3 WC, float earthRadius) \n' + + '{ \n' + + ' vec4 positionWC = vec4(WC, 1.0); \n' + + ' vec4 positionEC = czm_view * positionWC; \n' + + ' positionEC = vec4(positionEC.x + earthRadius , positionEC.y, positionEC.z, 1.0); \n' + + ' positionWC = czm_eyeToWindowCoordinates(positionEC); \n' + + ' return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0); \n' + + '} \n' + + + //Check if current pixel is included Earth + //if then mask it gradually + 'float isInEarth(vec2 texcoord, vec2 sceneSize) \n' + + '{ \n' + + ' vec2 NDC = texcoord * 2.0 - 1.0; \n' + + ' vec4 earthPosSC = getNDCFromWC(vec3(0.0,0.0,0.0), 0.0); \n' + + ' vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0,0.0,0.0), u_earthRadius * 1.5); \n' + + ' NDC.xy -= earthPosSC.xy; \n' + + ' float X = abs(NDC.x)*sceneSize.x; \n' + + ' X *= X; \n' + + ' float Y = abs(NDC.y)*sceneSize.y; \n' + + ' Y *= Y; \n' + + ' return clamp(0.0, 1.0, max( sqrt(X + Y) / max(abs(earthPosSCEdge.x*sceneSize.x), 1.0) - 0.8 , 0.0)); \n' + + '} \n' + + + //For Chromatic effect + 'vec4 textureDistorted( \n' + + ' sampler2D tex, \n' + + ' vec2 texcoord, \n' + + ' vec2 direction, \n' + + ' vec3 distortion, \n' + + ' bool isSpace \n' + + ') \n' + + '{ \n' + + ' vec2 sceneSize = czm_viewport.zw; \n' + + ' float red = 0.0; \n' + + ' float green = 0.0; \n' + + ' float blue = 0.0; \n' + + ' if(isSpace) \n' + + ' { \n' + + 'red = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r; \n' + + 'green = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g; \n' + + 'blue = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + 'red = texture2D(tex, texcoord + direction * distortion.r).r; \n' + + 'green = texture2D(tex, texcoord + direction * distortion.g).g; \n' + + 'blue = texture2D(tex, texcoord + direction * distortion.b).b; \n' + + ' } \n' + + ' return vec4(clamp(red, 0.0, 1.0), clamp(green, 0.0, 1.0), clamp(blue, 0.0, 1.0), 0.0); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + + ' bool isSpace = true; \n' + + + //whether it is in space or not + ' float distanceForSpace = 6500000.0; \n' + + + ' if(length(czm_viewerPositionWC.xyz) < distanceForSpace) \n' + + ' isSpace = false; \n' + + + //Sun position + ' vec4 sunPositionWC; \n' + + ' if (czm_morphTime == 1.0) \n' + + ' { \n' + + ' sunPositionWC = vec4(czm_sunPositionWC, 1.0); \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' sunPositionWC = vec4(czm_sunPositionColumbusView.zxy, 1.0); \n' + + ' } \n' + + + ' vec4 sunPositionEC = czm_view * sunPositionWC; \n' + + ' sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC); \n' + + ' sunPositionWC = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0); \n' + + ' vec2 texcoord = -v_textureCoordinates + vec2(1.0); \n' + + ' vec2 texelSize = 1.0 / czm_viewport.zw; \n' + + ' vec3 distortion = vec3(-texelSize.x * u_distortion, 0.0, texelSize.x * u_distortion); \n' + + + // ghost vector to image centre: + ' vec2 ghostVec = (vec2(0.5) - texcoord) * u_ghostDispersal; \n' + + ' vec3 direction = normalize(vec3(ghostVec, 0.0)); \n' + + + // sample ghosts: + ' vec4 result = vec4(0.0); \n' + + ' vec4 ghost = vec4(0.0); \n' + + ' for (int i = 0; i < 4; ++i) \n' + + ' { \n' + + ' vec2 offset = fract(texcoord + ghostVec * float(i)); \n' + + // Only bright spots from the centre of the source image + ' ghost += textureDistorted(u_colorTexture, offset, direction.xy, distortion, isSpace); \n' + + ' } \n' + + ' result += ghost; \n' + + + // sample halo: + ' vec4 halo; \n' + + ' vec2 haloVec = normalize(ghostVec) * u_haloWidth; \n' + + ' float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5)); \n' + + ' weightForHalo = pow(1.0 - weightForHalo, 5.0); \n' + + ' halo = textureDistorted(u_colorTexture, texcoord + haloVec, direction.xy, distortion, isSpace) * weightForHalo * 1.5; \n' + + ' result += halo; \n' + + ' result += texture2D(u_dirtTexture, v_textureCoordinates); \n' + + + //Rotating starburst texture's coordinate + ' vec3 camx = vec3(czm_view[0][0], czm_view[0][1], czm_view[0][2] ); \n' + + ' vec3 camz = vec3(czm_view[1][0], czm_view[1][1], czm_view[1][2] ); \n' + + ' float camrot = dot(camx, vec3(0.0, 0.0, 1.0)) + dot(camz, vec3(0.0, 1.0, 0.0)); \n' + + ' float cosValue = cos(camrot); \n' + + ' float sinValue = sin(camrot); \n' + + ' mat3 rotation = mat3( \n' + + ' cosValue, -sinValue, 0.0, \n' + + ' sinValue, cosValue, 0.0, \n' + + ' 0.0, 0.0, 1.0 \n' + + ' ); \n' + + ' vec3 st1 = vec3(v_textureCoordinates, 1.0) * 2.0 - vec3(1.0); \n' + + ' st1.z = 1.0; \n' + + ' vec3 st2 = rotation * st1; \n' + + ' st2.z = 1.0; \n' + + ' vec3 st3 = st2 * 0.5 + vec3(0.5); \n' + + ' vec2 lensStarTexcoord = st3.xy; \n' + + ' float weightForLensFlare = length(vec3(sunPositionWC.xy, 0.0)); \n' + + ' float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0); \n' + + ' if (!isSpace) \n' + + ' { \n' + + ' result *= oneMinusWeightForLensFlare * u_intensity * 0.2; \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' result *= oneMinusWeightForLensFlare * u_intensity; \n' + + ' result *= texture2D(u_starTexture, lensStarTexcoord) * pow(weightForLensFlare,1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0; \n' + + ' } \n' + + + //If sun is in the screen space, add lens flare effect + ' if( (sunPositionWC.x >= -1.1 && sunPositionWC.x <= 1.1) && \n' + + ' (sunPositionWC.y >= -1.1 && sunPositionWC.y <= 1.1) \n' + + ' ) \n' + + ' { \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates); \n' + + ' } \n' + + ' else \n' + + ' { \n' + + ' result = texture2D(u_colorTexture, v_textureCoordinates); \n' + + ' } \n' + + ' gl_FragColor = result; \n' + + ' } \n'; + + return new PostProcessStage({ + fragmentShader: fragmentShader, + uniformValues: uniformValues + }); + } + function createAmbientOcclusionStage() { return new PostProcessAmbientOcclusionStage(); } + function createDepthOfFieldStage() { + return new PostProcessDepthOfFieldStage(); + } + + function createBloomStage() { + return new PostProcessBloomStage(); + } + + function createToonStage() { + return new PostProcessToonStage(); + } + return PostProcessLibrary; }); diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 124031d16d0e..43e7c98ea9b5 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -43,10 +43,26 @@ define([ * @inheritdoc PostProcessLibrary#compositeTest */ this.compositeTest = PostProcessLibrary.compositeTest; + /** + * @inheritdoc PostProcessLibrary#lensFlare + */ + this.lensFlare = PostProcessLibrary.lensFlare; /** * @inheritdoc PostProcessLibrary#ambientOcclusion */ this.ambientOcclusion = PostProcessLibrary.ambientOcclusion; + /** + * @inheritdoc PostProcessLibrary#depthOfField + */ + this.depthOfField = PostProcessLibrary.depthOfField; + /** + * @inheritdoc PostProcessLibrary#bloom + */ + this.bloom = PostProcessLibrary.bloom; + /** + * @inheritdoc PostProcessLibrary#toon + */ + this.toon = PostProcessLibrary.toon; /** * @inheritdoc PostProcessLibrary#fxaa */ @@ -60,7 +76,11 @@ define([ this.textureOverlay, this.depthView, this.compositeTest, + this.lensFlare, this.ambientOcclusion, + this.depthOfField, + this.bloom, + this.toon, this.fxaa ]; diff --git a/Source/Scene/PostProcessToonStage.js b/Source/Scene/PostProcessToonStage.js new file mode 100644 index 000000000000..d75c51c1e517 --- /dev/null +++ b/Source/Scene/PostProcessToonStage.js @@ -0,0 +1,262 @@ +define([ + '../Core/buildModuleUrl', + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/PixelFormat', + '../Renderer/Framebuffer', + '../Renderer/PixelDatatype', + '../Renderer/Sampler', + '../Renderer/Texture', + '../Renderer/TextureMagnificationFilter', + '../Renderer/TextureMinificationFilter', + '../Renderer/TextureWrap', + './PostProcess', + './PostProcessStage' + ], function( + buildModuleUrl, + defineProperties, + destroyObject, + PixelFormat, + Framebuffer, + PixelDatatype, + Sampler, + Texture, + TextureMagnificationFilter, + TextureMinificationFilter, + TextureWrap, + PostProcess, + PostProcessStage) { + 'use strict'; + + /** + * Post process stage for Toon. Implements {@link PostProcessStage}. + * + * @alias PostProcessToonStage + * @constructor + * + * @private + */ + function PostProcessToonStage() { + this._ToonPostProcess = undefined; + this._EdgeDetectionUniformValues = { + len : 0.1 + }; + + this._ToonUniformValues = { + }; + + this._uniformValues = { + toonTexture : undefined, + toonOnly : true + }; + + /** + * @inheritdoc PostProcessStage#show + */ + this.show = false; + + this._fragmentShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_toonTexture; \n' + + 'uniform bool u_toonOnly; \n' + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + ' gl_FragColor = texture2D(u_toonTexture, v_textureCoordinates);\n' + + ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_toonTexture, v_textureCoordinates), gl_FragColor.a);\n' + + '} \n'; + } + + defineProperties(PostProcessToonStage.prototype, { + /** + * @inheritdoc PostProcessStage#ready + */ + ready : { + get : function() { + return true; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + uniformValues : { + get : function() { + return this._uniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#fragmentShader + */ + fragmentShader : { + get : function() { + return this._fragmentShader; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + EdgeDetectionUniformValues : { + get : function() { + return this._EdgeDetectionUniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + ToonUniformValues : { + get : function() { + return this._ToonUniformValues; + } + } + + }); + + /** + * @inheritdoc PostProcessStage#execute + */ + PostProcessToonStage.prototype.execute = function(frameState, inputColorTexture, inputDepthTexture, dirty) { + if (!this.show) { + return; + } + + if (dirty) { + destroyResources(this); + createResources(this, frameState.context); + } + + this._ToonPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, undefined); + this._uniformValues.toonTexture = this._ToonPostProcess.outputColorTexture; + }; + + function createResources(stage) { + var EdgeDetectionUniformValues = stage._EdgeDetectionUniformValues; + var ToonUniformValues = stage._ToonUniformValues; + var ToonShader = + '#extension GL_OES_standard_derivatives : enable \n' + + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'vec2 ScreenToView(vec2 uv) \n' + + '{ \n' + + ' return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; \n' + + '} \n' + + + //Reconstruct Normal from View position + 'vec3 GetNormal(vec3 posInCamera) \n' + + '{ \n' + + ' vec3 d1 = dFdx(posInCamera); \n' + + ' vec3 d2 = dFdy(posInCamera); \n' + + ' return normalize(cross(d2, d1)); \n' + + '} \n' + + + 'float LinearDepth(float depth) \n' + + '{ \n' + + ' float far= czm_currentFrustum.y; \n' + + ' float near = czm_currentFrustum.x; \n' + + ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + + '} \n' + + + 'void main(void) \n' + + '{ \n' + + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + + ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + + ' posInCamera = posInCamera / posInCamera.w; \n' + + ' vec3 normalInCamera = GetNormal(posInCamera.xyz); \n' + + ' vec4 normalInWorld = czm_inverseView * vec4(normalInCamera, 0.0); \n' + + ' depth = LinearDepth(depth); \n' + + ' gl_FragColor = vec4(depth);\n' + + '} \n'; + + var EdgeDetectionShader = + 'uniform sampler2D u_colorTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + + 'uniform float u_len; \n' + + 'uniform float u_stepSize; \n' + + 'precision highp float; \n' + + + 'varying vec2 v_textureCoordinates; \n' + + + 'void main(void) \n' + + '{ \n' + + + 'float padx = 1.0 / czm_viewport.z; \n' + + 'float pady = 1.0 / czm_viewport.w; \n' + + + 'float horizEdge = 0.0; \n' + + + 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + + 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, 0.0)).x * 10.0; \n' + + 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, pady)).x * 3.0; \n' + + + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, 0.0)).x * 10.0; \n' + + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + + + 'float vertEdge = 0.0; \n' + + + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, -pady)).x * 10.0; \n' + + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + + + 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, pady)).x * 3.0; \n' + + 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pady)).x * 10.0; \n' + + 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + + + 'float len = sqrt(horizEdge*horizEdge + vertEdge*vertEdge); \n' + + + 'if (len > u_len) \n' + + '{ \n' + + ' gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); \n' + + '} \n' + + 'else \n' + + '{ \n' + + ' gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); \n' + + '} \n' + + + '} \n'; + + var ToonStage = new PostProcessStage({ + fragmentShader : ToonShader, + uniformValues: ToonUniformValues + }); + + var EdgeDetectionStage = new PostProcessStage({ + fragmentShader : EdgeDetectionShader, + uniformValues: EdgeDetectionUniformValues + }); + + var ToonPostProcess = new PostProcess({ + stages : [ToonStage, EdgeDetectionStage], + overwriteInput : false, + blendOutput : false, + createOutputFramebuffer : true + }); + + stage._ToonPostProcess = ToonPostProcess; + + } + + function destroyResources(stage) { + stage._ToonPostProcess = stage._ToonPostProcess && stage._ToonPostProcess.destroy(); + } + + /** + * @inheritdoc PostProcessStage#isDestroyed + */ + PostProcessToonStage.prototype.isDestroyed = function() { + return false; + }; + + /** + * @inheritdoc PostProcessStage#destroy + */ + PostProcessToonStage.prototype.destroy = function() { + destroyResources(this); + return destroyObject(this); + }; + + return PostProcessToonStage; +}); From e8034199bb3b5c4f509656e6e99d6c8b8fd090a5 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Thu, 19 Oct 2017 15:31:07 -0400 Subject: [PATCH 13/99] Fix indentation --- Source/Scene/PostProcessCompositeStage.js | 2 +- Source/Scene/PostProcessLibrary.js | 2 +- Source/Scene/PostProcessScene.js | 2 +- Source/Scene/SceneFramebuffer.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Scene/PostProcessCompositeStage.js b/Source/Scene/PostProcessCompositeStage.js index b8e467f4bc66..d7a9081db1a9 100644 --- a/Source/Scene/PostProcessCompositeStage.js +++ b/Source/Scene/PostProcessCompositeStage.js @@ -2,7 +2,7 @@ define([ '../Core/Check', '../Core/defineProperties', '../Core/destroyObject' -], function( + ], function( Check, defineProperties, destroyObject) { diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index 6a03afe321d0..b5cf83957b07 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -8,7 +8,7 @@ define([ './PostProcessStage', '../Shaders/PostProcessFilters/FXAA', '../ThirdParty/Shaders/FXAA3_11' -], function( + ], function( buildModuleUrl, defineProperties, destroyObject, diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index 124031d16d0e..3dff5a6255c4 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -3,7 +3,7 @@ define([ '../Core/destroyObject', './PostProcess', './PostProcessLibrary' -], function( + ], function( defineProperties, destroyObject, PostProcess, diff --git a/Source/Scene/SceneFramebuffer.js b/Source/Scene/SceneFramebuffer.js index 88fde40dc3c0..7d83afbd0039 100644 --- a/Source/Scene/SceneFramebuffer.js +++ b/Source/Scene/SceneFramebuffer.js @@ -14,7 +14,7 @@ define([ '../Renderer/TextureMagnificationFilter', '../Renderer/TextureMinificationFilter', '../Renderer/TextureWrap' -], function( + ], function( Color, defined, destroyObject, From a553d4561886c61ae1dd4833c39d7f1a6db8e207 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Fri, 20 Oct 2017 15:40:02 -0400 Subject: [PATCH 14/99] Update Sandcastle examples. --- .../{HBAO.html => Ambient Occlusion.html} | 86 +++++------ Apps/Sandcastle/gallery/Ambient Occlusion.jpg | Bin 0 -> 15962 bytes Apps/Sandcastle/gallery/DOF.html | 135 ------------------ Apps/Sandcastle/gallery/DOF.jpg | Bin 59271 -> 0 bytes Apps/Sandcastle/gallery/Depth of Field.html | 121 ++++++++++++++++ Apps/Sandcastle/gallery/Depth of Field.jpg | Bin 0 -> 13547 bytes Apps/Sandcastle/gallery/HBAO.jpg | Bin 28874 -> 0 bytes Apps/Sandcastle/gallery/LensFlare.html | 45 +++--- 8 files changed, 186 insertions(+), 201 deletions(-) rename Apps/Sandcastle/gallery/{HBAO.html => Ambient Occlusion.html} (64%) create mode 100644 Apps/Sandcastle/gallery/Ambient Occlusion.jpg delete mode 100644 Apps/Sandcastle/gallery/DOF.html delete mode 100644 Apps/Sandcastle/gallery/DOF.jpg create mode 100644 Apps/Sandcastle/gallery/Depth of Field.html create mode 100644 Apps/Sandcastle/gallery/Depth of Field.jpg delete mode 100644 Apps/Sandcastle/gallery/HBAO.jpg diff --git a/Apps/Sandcastle/gallery/HBAO.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html similarity index 64% rename from Apps/Sandcastle/gallery/HBAO.html rename to Apps/Sandcastle/gallery/Ambient Occlusion.html index eb60a61f08d0..be797cbcd442 100644 --- a/Apps/Sandcastle/gallery/HBAO.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -4,7 +4,7 @@ - + Cesium Demo @@ -23,47 +23,47 @@

Loading...

- +
- + - + - + - +
HBAOAmbient Occlusion - +
HBAO OnlyAmbient Occlusion Only - +
Intensity - +
LenCapLength Cap - +
StepSizeStep Size - +
Bias - +
Kernel Size - +
@@ -73,55 +73,47 @@ 'use strict'; //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); -var scene = viewer.scene; -var postProcess = scene.postProcess; -scene.globe.depthTestAgainstTerrain = true; -scene.fxaa = false; -var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ +viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url : 'https://beta.cesium.com/api/assets/1459?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzNjUyM2I5Yy01YmRhLTQ0MjktOGI0Zi02MDdmYzBjMmY0MjYiLCJpZCI6NDQsImFzc2V0cyI6WzE0NTldLCJpYXQiOjE0OTkyNjQ3ODF9.SW_rwY-ic0TwQBeiweXNqFyywoxnnUBtcVjeCmDGef4' })); -tileset.readyPromise.then(function() { - var boundingSphere = tileset.boundingSphere; - viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.5, -0.4, boundingSphere.radius * 1.0)); - viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); -}).otherwise(function(error) { - throw(error); -}); - - -var viewModel = { - HBAOShow: false, - HBAOonly: false, - HBAOintensity: 4.0, - HBAObias: 0.1, - HBAOlenCap: 0.1, - HBAOstepSize: 2.0, - KernelSize : 1.2 +var viewModel = { + show : true, + ambientOcclusionOnly : false, + intensity : 3.0, + bias : 0.1, + lengthCap : 0.26, + stepSize : 1.95, + kernelSize : 0.86 }; - - Cesium.knockout.track(viewModel); var toolbar = document.getElementById('toolbar'); Cesium.knockout.applyBindings(viewModel, toolbar); for (var name in viewModel) { if (viewModel.hasOwnProperty(name)) { - Cesium.knockout.getObservable(viewModel, name).subscribe(updatePostProcess); + Cesium.knockout.getObservable(viewModel, name).subscribe(updatePostProcess); } } -function updatePostProcess() { - postProcess.ambientOcclusion.show = Boolean(viewModel.HBAOShow); - postProcess.ambientOcclusion.uniformValues.HBAOonly = Boolean(viewModel.HBAOonly); - postProcess.ambientOcclusion.aoGenerateUniformValues.intensity = Number(viewModel.HBAOintensity); - postProcess.ambientOcclusion.aoGenerateUniformValues.bias = Number(viewModel.HBAObias); - postProcess.ambientOcclusion.aoGenerateUniformValues.lenCap = Number(viewModel.HBAOlenCap); - postProcess.ambientOcclusion.aoGenerateUniformValues.stepSize = Number(viewModel.HBAOstepSize); - postProcess.ambientOcclusion.aoBlurUniformValues.kernelSize = Number(viewModel.KernelSize); - scene.fxaa = Boolean(viewModel.fxaaShow); +function updatePostProcess() { + var postProcess = viewer.scene.postProcess; + postProcess.ambientOcclusion.show = Boolean(viewModel.show); + postProcess.ambientOcclusion.uniformValues.HBAOonly = Boolean(viewModel.ambientOcclusionOnly); + postProcess.ambientOcclusion.aoGenerateUniformValues.intensity = Number(viewModel.intensity); + postProcess.ambientOcclusion.aoGenerateUniformValues.bias = Number(viewModel.bias); + postProcess.ambientOcclusion.aoGenerateUniformValues.lenCap = Number(viewModel.lengthCap); + postProcess.ambientOcclusion.aoGenerateUniformValues.stepSize = Number(viewModel.stepSize); + postProcess.ambientOcclusion.aoBlurUniformValues.kernelSize = Number(viewModel.kernelSize); } +updatePostProcess(); + +var camera = viewer.scene.camera; +camera.position = new Cesium.Cartesian3(1234121.9491740603, -5086009.253843431, 3633365.2993020345); +camera.direction = new Cesium.Cartesian3(-0.17858981588454467, -0.2750910876938125, -0.9446854350172652); +camera.up = new Cesium.Cartesian3(0.13955391921919083, -0.9574962548451945, 0.2524393503160511); +camera.right = Cesium.Cartesian3.cross(camera.direction, camera.up, new Cesium.Cartesian3()); //Sandcastle_End Sandcastle.finishedLoading(); diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.jpg b/Apps/Sandcastle/gallery/Ambient Occlusion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1def00452b9da05a17a2d6785fa2302059091700 GIT binary patch literal 15962 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 literal 0 HcmV?d00001 diff --git a/Apps/Sandcastle/gallery/DOF.html b/Apps/Sandcastle/gallery/DOF.html deleted file mode 100644 index e2dd860e622e..000000000000 --- a/Apps/Sandcastle/gallery/DOF.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - Cesium Demo - - - - - - -
-

Loading...

-
- - - - - - - - - - - - - - - - - -
Depth Of Field - -
Focal Distance - -
Kernel Size - -
Step Size - -
-
- - - diff --git a/Apps/Sandcastle/gallery/DOF.jpg b/Apps/Sandcastle/gallery/DOF.jpg deleted file mode 100644 index dfa071c40a19593da1389494c419e820aebe7939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59271 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∓pH0r3*Dty&x& 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 diff --git a/Apps/Sandcastle/gallery/Depth of Field.html b/Apps/Sandcastle/gallery/Depth of Field.html new file mode 100644 index 000000000000..bc937a4653e9 --- /dev/null +++ b/Apps/Sandcastle/gallery/Depth of Field.html @@ -0,0 +1,121 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + + + + + + + + + + + + + + + +
Depth Of Field + +
Focal Distance + +
Kernel Size + +
Step Size + +
+
+ + + diff --git a/Apps/Sandcastle/gallery/Depth of Field.jpg b/Apps/Sandcastle/gallery/Depth of Field.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63e6bb3efd7b38e52c2451179831160b171d1cdf GIT binary patch literal 13547 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 IjAIx62Op*;z5oCK literal 0 HcmV?d00001 diff --git a/Apps/Sandcastle/gallery/HBAO.jpg b/Apps/Sandcastle/gallery/HBAO.jpg deleted file mode 100644 index 5bea5f5039ee26e2d3aa35cbd91d57473f90acf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28874 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 b4?wgw6Fb@#R}%lPjCKWNzg0#*ywQIFy1g}5 diff --git a/Apps/Sandcastle/gallery/LensFlare.html b/Apps/Sandcastle/gallery/LensFlare.html index be53b2220196..f8bc091e9c2c 100644 --- a/Apps/Sandcastle/gallery/LensFlare.html +++ b/Apps/Sandcastle/gallery/LensFlare.html @@ -4,7 +4,7 @@ - + Cesium Demo @@ -28,31 +28,31 @@ Lens Flare - + Intensity - + Distortion - + Dispersion - + - HaloWidth + Halo Width - + @@ -64,15 +64,14 @@ 'use strict'; //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); -var scene = viewer.scene; -var postProcess = scene.postProcess; +viewer.clock.currentTime = new Cesium.JulianDate(2458047, 27399.860215000022); var viewModel = { - LensFlare_Show: false, - LensFlare_Intensity: 2.0, - LensFlare_Distortion: 10.0, - LensFlare_Dispersion: 0.4, - LensFlare_HaloWidth: 0.4, + show: true, + intensity: 2.0, + distortion: 10.0, + dispersion: 0.4, + haloWidth: 0.4 }; Cesium.knockout.track(viewModel); @@ -85,13 +84,21 @@ } function updatePostProcess() { - postProcess.lensFlare.show = Boolean(viewModel.LensFlare_Show); - postProcess.lensFlare._uniformValues.intensity = Number(viewModel.LensFlare_Intensity); - postProcess.lensFlare._uniformValues.distortion = Number(viewModel.LensFlare_Distortion); - postProcess.lensFlare._uniformValues.ghostDispersal = Number(viewModel.LensFlare_Dispersion); - postProcess.lensFlare._uniformValues.haloWidth = Number(viewModel.LensFlare_HaloWidth); + var postProcess = viewer.scene.postProcess; + postProcess.lensFlare.show = Boolean(viewModel.show); + postProcess.lensFlare._uniformValues.intensity = Number(viewModel.intensity); + postProcess.lensFlare._uniformValues.distortion = Number(viewModel.distortion); + postProcess.lensFlare._uniformValues.ghostDispersal = Number(viewModel.dispersion); + postProcess.lensFlare._uniformValues.haloWidth = Number(viewModel.haloWidth); postProcess.lensFlare._uniformValues.earthRadius = Cesium.Ellipsoid.WGS84.maximumRadius; } +updatePostProcess(); + +var camera = viewer.scene.camera; +camera.position = new Cesium.Cartesian3(40010447.97500168, 56238683.46406788, 20776576.752223067); +camera.direction = new Cesium.Cartesian3(-0.5549701431494752, -0.7801872010801355, -0.2886452346452218); +camera.up = new Cesium.Cartesian3(-0.3016252360948521, -0.13464820558887716, 0.9438707950150912); +camera.right = Cesium.Cartesian3.cross(camera.direction, camera.up, new Cesium.Cartesian3()); //Sandcastle_End Sandcastle.finishedLoading(); } From 213b2c33240c808d68075f33c3c5651e24f4c046 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Fri, 20 Oct 2017 19:00:43 -0400 Subject: [PATCH 15/99] Move AO generate shader to its own GLSL file. --- .../SCene/PostProcessAmbientOcclusionStage.js | 170 ++---------------- .../AmbientOcclusionGenerate.glsl | 149 +++++++++++++++ 2 files changed, 161 insertions(+), 158 deletions(-) create mode 100644 Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index 742990e486b6..1f388362b56d 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -1,8 +1,8 @@ define([ + '../Core/buildModuleUrl', '../Core/defineProperties', '../Core/destroyObject', '../Core/PixelFormat', - '../Core/buildModuleUrl', '../Renderer/Framebuffer', '../Renderer/PixelDatatype', '../Renderer/Sampler', @@ -10,13 +10,14 @@ define([ '../Renderer/TextureMagnificationFilter', '../Renderer/TextureMinificationFilter', '../Renderer/TextureWrap', + '../Shaders/PostProcessFilters/AmbientOcclusionGenerate', './PostProcess', './PostProcessStage' ], function( + buildModuleUrl, defineProperties, destroyObject, PixelFormat, - buildModuleUrl, Framebuffer, PixelDatatype, Sampler, @@ -24,6 +25,7 @@ define([ TextureMagnificationFilter, TextureMinificationFilter, TextureWrap, + AmbientOcclusionGenerate, PostProcess, PostProcessStage) { 'use strict'; @@ -37,7 +39,6 @@ define([ * @private */ function PostProcessAmbientOcclusionStage() { - this._aoTexture = undefined; this._aoFramebuffer = undefined; this._aoPostProcess = undefined; @@ -45,7 +46,7 @@ define([ var urlRandomNoiseTex = buildModuleUrl('Assets/Textures/HBAO/RandomNoiseTex.jpg'); this._aoGenerateUniformValues = { - randomTexture: urlRandomNoiseTex, + randomTexture: urlRandomNoiseTex, intensity: 4.0, bias: 0.0, lenCap: 0.25, @@ -56,7 +57,6 @@ define([ kernelSize : 1.0 }; - this._fragmentShader = 'uniform sampler2D u_colorTexture; \n' + 'uniform sampler2D u_aoTexture; \n' + @@ -65,7 +65,7 @@ define([ 'void main(void) \n' + '{ \n' + ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' vec3 ao = texture2D(u_aoTexture, v_textureCoordinates).rgb; \n' + + ' vec3 ao = texture2D(u_aoTexture, v_textureCoordinates).rgb; \n' + ' if(u_HBAOonly) \n' + ' gl_FragColor = vec4(ao, 1.0); \n' + ' else \n' + @@ -74,9 +74,10 @@ define([ this._uniformValues = { aoTexture : undefined, - HBAOonly: false, + HBAOonly: false }; + /** * @inheritdoc PostProcessStage#show */ @@ -172,153 +173,6 @@ define([ var aoGenerateUniformValues = stage._aoGenerateUniformValues; var aoBlurUniformValues = stage._aoBlurUniformValues; - var aoGenerateShader = - '#extension GL_OES_standard_derivatives : enable \n' + - 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_randomTexture; \n' + - 'uniform sampler2D u_depthTexture; \n' + - 'uniform float u_intensity; \n' + - 'uniform float u_bias; \n' + - 'uniform float u_lenCap; \n' + - 'uniform float u_stepSize; \n' + - 'varying vec2 v_textureCoordinates; \n' + - - 'vec2 ScreenToView(vec2 uv) \n' + - '{ \n' + - ' return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; \n' + - '} \n' + - - //Reconstruct Normal from View position - 'vec3 GetNormal(vec3 posInCamera) \n' + - '{ \n' + - ' vec3 d1 = dFdx(posInCamera); ' + - ' vec3 d2 = dFdy(posInCamera); ' + - ' return normalize(cross(d2, d1)); ' + - '} \n' + - - //Reconstruct Normal Without Edge Removation - 'vec3 GetNormalXedge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) \n' + - '{ \n' + - - ' vec4 posInCameraUp = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(0.0, pixelSize.y)), depthU, 1.0); \n' + - ' posInCameraUp = posInCameraUp / posInCameraUp.w; \n' + - ' vec4 posInCameraDown = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(0.0, pixelSize.y)), depthD, 1.0); \n' + - ' posInCameraDown = posInCameraDown / posInCameraDown.w; \n' + - ' vec4 posInCameraLeft = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(pixelSize.x, 0.0)), depthL, 1.0); \n' + - ' posInCameraLeft = posInCameraLeft / posInCameraLeft.w; \n' + - ' vec4 posInCameraRight = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(pixelSize.x, 0.0)), depthR, 1.0); \n' + - ' posInCameraRight = posInCameraRight / posInCameraRight.w; \n' + - ' vec3 UC = posInCamera.xyz - posInCameraUp.xyz; \n' + - ' vec3 DC = posInCameraDown.xyz - posInCamera.xyz; \n' + - ' vec3 LC = posInCamera.xyz - posInCameraLeft.xyz; \n' + - ' vec3 RC = posInCameraRight.xyz - posInCamera.xyz; \n' + - ' vec3 DX; \n' + - ' vec3 DY; \n' + - - ' if (length(UC) < length(DC)) \n' + - ' { \n' + - ' DY = UC; \n' + - ' } \n' + - ' else \n' + - ' { \n' + - ' DY = DC; \n' + - ' } \n' + - - ' if (length(LC) < length(RC)) \n' + - ' { \n' + - ' DX = LC; \n' + - ' } \n' + - ' else \n' + - ' { \n' + - ' DX = RC; \n' + - ' } \n' + - - ' return normalize(cross(DY, DX)); ' + - '} \n' + - - 'void main(void) \n' + - '{ \n' + - - ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + - - - ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + - ' posInCamera = posInCamera / posInCamera.w; \n' + - 'if(posInCamera.z < 1000.0) \n' + - '{ \n' + - ' vec2 pixelSize = 1.0 / czm_viewport.zw; \n' + - ' float depthU = texture2D(u_depthTexture, v_textureCoordinates- vec2(0.0, pixelSize.y)).r; \n' + - ' float depthD = texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pixelSize.y)).r; \n' + - ' float depthL = texture2D(u_depthTexture, v_textureCoordinates- vec2(pixelSize.x, 0.0)).r; \n' + - ' float depthR = texture2D(u_depthTexture, v_textureCoordinates+ vec2(pixelSize.x, 0.0)).r; \n' + - ' vec3 normalInCamera = GetNormalXedge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); \n' + - //' vec3 normalInCamera = GetNormal(posInCamera.xyz); \n' + - ' float AO = 0.0; \n' + - ' vec2 sampleDirection = vec2(1.0, 0.0); \n' + - ' float gapAngle = 90.0; \n' + - - // DegreeToRadian - ' gapAngle *= 0.01745329252; \n' + - - // RandomNoise - ' vec2 noiseMapSize = vec2(256.0, 256.0); \n' + - ' vec2 noiseScale = vec2(czm_viewport.z / noiseMapSize.x, czm_viewport.w / noiseMapSize.y); \n' + - ' float randomVal = clamp(texture2D(u_randomTexture, v_textureCoordinates*noiseScale).x, 0.0, 1.0); \n' + - - //Loop for each direction - ' for (int i = 0; i < 4; i++) \n' + - ' { \n' + - ' float newgapAngle = gapAngle * (float(i) + randomVal); \n' + - ' float cosVal = cos(newgapAngle); \n' + - ' float sinVal = sin(newgapAngle); \n' + - - //Rotate Sampling Direction - ' vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y); \n' + - ' float localAO = 0.0; \n' + - ' float localStepSize = u_stepSize; \n' + - - //Loop for each step - ' for (int j = 0; j < 6; j++) \n' + - ' { \n' + - ' vec2 directionWithStep = vec2(rotatedSampleDirection.x * localStepSize * (1.0 / czm_viewport.z), rotatedSampleDirection.y * localStepSize * (1.0 / czm_viewport.w)); \n' + - ' vec2 newCoords = directionWithStep + v_textureCoordinates; \n' + - //Exception Handling - ' if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) \n' + - ' break; \n' + - - ' float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; \n' + - ' vec4 stepPosInCamera = czm_inverseProjection * vec4(ScreenToView(newCoords), stepDepthInfo, 1.0); \n' + - ' stepPosInCamera = stepPosInCamera / stepPosInCamera.w; \n' + - ' vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; \n' + - ' float len = length(diffVec); \n' + - - ' if(len <= u_lenCap) \n' + - ' { \n' + - ' float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 ); \n' + - ' float weight = len / u_lenCap; \n' + - ' weight = 1.0 - weight*weight; \n' + - - ' if(dotVal < u_bias) \n' + - ' dotVal = 0.0; \n' + - - ' localAO = max(localAO, dotVal * weight); \n' + - ' localStepSize += u_stepSize; \n' + - ' } \n' + - ' else \n' + - ' break; \n' + - ' } \n' + - ' AO += localAO; \n' + - '} \n' + - - ' AO /= float(4); \n' + - ' AO = 1.0 - clamp(AO, 0.0, 1.0); \n' + - ' AO = pow(AO, u_intensity); \n' + - ' gl_FragColor = vec4(vec3(AO), 1.0); \n' + - '} \n' + - 'else \n' + - ' gl_FragColor = vec4(1.0); \n' + - '} \n'; - var aoBlurXShader = 'uniform sampler2D u_colorTexture; \n' + 'uniform float u_kernelSize; \n' + @@ -335,7 +189,7 @@ define([ ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0))*0.21875; \n' + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + ' gl_FragColor = result; \n' + '} \n'; @@ -355,12 +209,12 @@ define([ ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y))*0.21875; \n' + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*2.0))*0.109375; \n' + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*3.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + + ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + ' gl_FragColor = result; \n' + '} \n'; var aoGenerateStage = new PostProcessStage({ - fragmentShader : aoGenerateShader, + fragmentShader : AmbientOcclusionGenerate, uniformValues: aoGenerateUniformValues }); @@ -412,4 +266,4 @@ define([ }; return PostProcessAmbientOcclusionStage; -}); \ No newline at end of file +}); diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl new file mode 100644 index 000000000000..cc1742c86ac3 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl @@ -0,0 +1,149 @@ +#extension GL_OES_standard_derivatives : enable + +uniform sampler2D u_colorTexture; +uniform sampler2D u_randomTexture; +uniform sampler2D u_depthTexture; +uniform float u_intensity; +uniform float u_bias; +uniform float u_lenCap; +uniform float u_stepSize; +varying vec2 v_textureCoordinates; + +vec2 ScreenToView(vec2 uv) +{ + return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; +} + +//Reconstruct Normal from View position +vec3 GetNormal(vec3 posInCamera) +{ + vec3 d1 = dFdx(posInCamera);; + vec3 d2 = dFdy(posInCamera); + return normalize(cross(d2, d1)); +} + +//Reconstruct Normal Without Edge Removation +vec3 GetNormalXedge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) +{ + vec4 posInCameraUp = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(0.0, pixelSize.y)), depthU, 1.0); + posInCameraUp = posInCameraUp / posInCameraUp.w; + vec4 posInCameraDown = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(0.0, pixelSize.y)), depthD, 1.0); + posInCameraDown = posInCameraDown / posInCameraDown.w; + vec4 posInCameraLeft = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(pixelSize.x, 0.0)), depthL, 1.0); + posInCameraLeft = posInCameraLeft / posInCameraLeft.w; + vec4 posInCameraRight = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(pixelSize.x, 0.0)), depthR, 1.0); + posInCameraRight = posInCameraRight / posInCameraRight.w; + vec3 UC = posInCamera.xyz - posInCameraUp.xyz; + vec3 DC = posInCameraDown.xyz - posInCamera.xyz; + vec3 LC = posInCamera.xyz - posInCameraLeft.xyz; + vec3 RC = posInCameraRight.xyz - posInCamera.xyz; + vec3 DX; + vec3 DY; + + if (length(UC) < length(DC)) + { + DY = UC; + } + else + { + DY = DC; + } + + if (length(LC) < length(RC)) + { + DX = LC; + } + else + { + DX = RC; + } + + return normalize(cross(DY, DX)); +} + +void main(void) +{ + float depth = texture2D(u_depthTexture, v_textureCoordinates).r; + + vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); + posInCamera = posInCamera / posInCamera.w; + + if(posInCamera.z < 1000.0) + { + vec2 pixelSize = 1.0 / czm_viewport.zw; + float depthU = texture2D(u_depthTexture, v_textureCoordinates- vec2(0.0, pixelSize.y)).r; + float depthD = texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pixelSize.y)).r; + float depthL = texture2D(u_depthTexture, v_textureCoordinates- vec2(pixelSize.x, 0.0)).r; + float depthR = texture2D(u_depthTexture, v_textureCoordinates+ vec2(pixelSize.x, 0.0)).r; + vec3 normalInCamera = GetNormalXedge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); + + float AO = 0.0; + vec2 sampleDirection = vec2(1.0, 0.0); + float gapAngle = 90.0; + + // DegreeToRadian + gapAngle *= 0.01745329252; + + // RandomNoise + vec2 noiseMapSize = vec2(256.0, 256.0); + vec2 noiseScale = vec2(czm_viewport.z / noiseMapSize.x, czm_viewport.w / noiseMapSize.y); + float randomVal = clamp(texture2D(u_randomTexture, v_textureCoordinates*noiseScale).x, 0.0, 1.0); + + //Loop for each direction + for (int i = 0; i < 4; i++) + { + float newgapAngle = gapAngle * (float(i) + randomVal); + float cosVal = cos(newgapAngle); + float sinVal = sin(newgapAngle); + + //Rotate Sampling Direction + vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y); + float localAO = 0.0; + float localStepSize = u_stepSize; + + //Loop for each step + for (int j = 0; j < 6; j++) + { + vec2 directionWithStep = vec2(rotatedSampleDirection.x * localStepSize * (1.0 / czm_viewport.z), rotatedSampleDirection.y * localStepSize * (1.0 / czm_viewport.w)); + vec2 newCoords = directionWithStep + v_textureCoordinates; + + //Exception Handling + if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) + break; + + float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; + vec4 stepPosInCamera = czm_inverseProjection * vec4(ScreenToView(newCoords), stepDepthInfo, 1.0); + stepPosInCamera = stepPosInCamera / stepPosInCamera.w; + vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; + float len = length(diffVec); + + if(len <= u_lenCap) + { + float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 ); + float weight = len / u_lenCap; + weight = 1.0 - weight*weight; + + if(dotVal < u_bias) + dotVal = 0.0; + + localAO = max(localAO, dotVal * weight); + localStepSize += u_stepSize; + } + else + { + break; + } + } + AO += localAO; + } + + AO /= float(4); + AO = 1.0 - clamp(AO, 0.0, 1.0); + AO = pow(AO, u_intensity); + gl_FragColor = vec4(vec3(AO), 1.0); + } + else + { + gl_FragColor = vec4(1.0); + } +} From 0784d5e3d485e48ad0785e082e5e87680558c095 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 14:40:36 -0400 Subject: [PATCH 16/99] Move AO shaders to GLSL files. --- .../SCene/PostProcessAmbientOcclusionStage.js | 65 +++---------------- .../PostProcessFilters/AmbientOcclusion.glsl | 13 ++++ .../AmbientOcclusionBlurX.glsl | 19 ++++++ .../AmbientOcclusionBlurY.glsl | 19 ++++++ 4 files changed, 60 insertions(+), 56 deletions(-) create mode 100644 Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl create mode 100644 Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl create mode 100644 Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index 1f388362b56d..cd6b2143b19c 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -10,6 +10,9 @@ define([ '../Renderer/TextureMagnificationFilter', '../Renderer/TextureMinificationFilter', '../Renderer/TextureWrap', + '../Shaders/PostProcessFilters/AmbientOcclusion', + '../Shaders/PostProcessFilters/AmbientOcclusionBlurX', + '../Shaders/PostProcessFilters/AmbientOcclusionBlurY', '../Shaders/PostProcessFilters/AmbientOcclusionGenerate', './PostProcess', './PostProcessStage' @@ -25,6 +28,9 @@ define([ TextureMagnificationFilter, TextureMinificationFilter, TextureWrap, + AmbientOcclusion, + AmbientOcclusionBlurX, + AmbientOcclusionBlurY, AmbientOcclusionGenerate, PostProcess, PostProcessStage) { @@ -57,20 +63,7 @@ define([ kernelSize : 1.0 }; - this._fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_aoTexture; \n' + - 'uniform bool u_HBAOonly; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' vec3 ao = texture2D(u_aoTexture, v_textureCoordinates).rgb; \n' + - ' if(u_HBAOonly) \n' + - ' gl_FragColor = vec4(ao, 1.0); \n' + - ' else \n' + - ' gl_FragColor = vec4(ao * color, 1.0); \n' + - '} \n'; + this._fragmentShader = AmbientOcclusion; this._uniformValues = { aoTexture : undefined, @@ -173,58 +166,18 @@ define([ var aoGenerateUniformValues = stage._aoGenerateUniformValues; var aoBlurUniformValues = stage._aoBlurUniformValues; - var aoBlurXShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform float u_kernelSize; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec4 result = vec4(0.0); \n' + - ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0))*0.00390625; \n' + - ' gl_FragColor = result; \n' + - '} \n'; - - var aoBlurYShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform float u_kernelSize; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec4 result = vec4(0.0); \n' + - ' vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*4.0))*0.00390625; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*3.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y*2.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates)*0.2734375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y))*0.21875; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*2.0))*0.109375; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*3.0))*0.03125; \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y*4.0))*0.00390625; \n' + - ' gl_FragColor = result; \n' + - '} \n'; - var aoGenerateStage = new PostProcessStage({ fragmentShader : AmbientOcclusionGenerate, uniformValues: aoGenerateUniformValues }); var aoBlurXStage = new PostProcessStage({ - fragmentShader : aoBlurXShader, + fragmentShader : AmbientOcclusionBlurX, uniformValues: aoBlurUniformValues }); var aoBlurYStage = new PostProcessStage({ - fragmentShader : aoBlurYShader, + fragmentShader : AmbientOcclusionBlurY, uniformValues: aoBlurUniformValues }); diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl new file mode 100644 index 000000000000..2cbabe7a1b21 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl @@ -0,0 +1,13 @@ +uniform sampler2D u_colorTexture; +uniform sampler2D u_aoTexture; +uniform bool u_HBAOonly; +varying vec2 v_textureCoordinates; +void main(void) +{ + vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; + vec3 ao = texture2D(u_aoTexture, v_textureCoordinates).rgb; + if(u_HBAOonly) + gl_FragColor = vec4(ao, 1.0); + else + gl_FragColor = vec4(ao * color, 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl new file mode 100644 index 000000000000..7cc04d5e58f0 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl @@ -0,0 +1,19 @@ +uniform sampler2D u_colorTexture; +uniform float u_kernelSize; +varying vec2 v_textureCoordinates; + +void main(void) +{ + vec4 result = vec4(0.0); + vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * 4.0, 0.0)) * 0.00390625; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * 3.0, 0.0)) * 0.03125; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * 2.0, 0.0)) * 0.109375; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0)) * 0.21875; + result += texture2D(u_colorTexture, v_textureCoordinates) * 0.2734375; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0)) * 0.21875; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0)) * 0.109375; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0)) * 0.03125; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0)) * 0.00390625; + gl_FragColor = result; +} diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl new file mode 100644 index 000000000000..4ebe94b570c8 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl @@ -0,0 +1,19 @@ +uniform sampler2D u_colorTexture; +uniform float u_kernelSize; +varying vec2 v_textureCoordinates; + +void main(void) +{ + vec4 result = vec4(0.0); + vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * 4.0)) * 0.00390625; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * 3.0)) * 0.03125; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * 2.0)) * 0.109375; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y)) * 0.21875; + result += texture2D(u_colorTexture, v_textureCoordinates) * 0.2734375; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y)) * 0.21875; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * 2.0)) * 0.109375; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * 3.0)) * 0.03125; + result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * 4.0)) * 0.00390625; + gl_FragColor = result; +} From 66c2da74345080a98e6120ed8e2ad360baa0c248 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 14:55:14 -0400 Subject: [PATCH 17/99] Generate random texture at run time. --- .../Assets/Textures/HBAO/RandomNoiseTex.jpg | Bin 130792 -> 0 bytes .../SCene/PostProcessAmbientOcclusionStage.js | 48 +++++++++++++----- 2 files changed, 36 insertions(+), 12 deletions(-) delete mode 100644 Source/Assets/Textures/HBAO/RandomNoiseTex.jpg diff --git a/Source/Assets/Textures/HBAO/RandomNoiseTex.jpg b/Source/Assets/Textures/HBAO/RandomNoiseTex.jpg deleted file mode 100644 index a290615d21b66cb8a5690b89d01268f45f171595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130792 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 Date: Mon, 23 Oct 2017 15:21:42 -0400 Subject: [PATCH 18/99] More clean up from review. --- .../Sandcastle/gallery/Ambient Occlusion.html | 2 +- .../SCene/PostProcessAmbientOcclusionStage.js | 3 +- .../PostProcessFilters/AmbientOcclusion.glsl | 8 +-- .../AmbientOcclusionGenerate.glsl | 63 +++++++------------ 4 files changed, 27 insertions(+), 49 deletions(-) diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html index be797cbcd442..c6ad54a9bf41 100644 --- a/Apps/Sandcastle/gallery/Ambient Occlusion.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -100,7 +100,7 @@ function updatePostProcess() { var postProcess = viewer.scene.postProcess; postProcess.ambientOcclusion.show = Boolean(viewModel.show); - postProcess.ambientOcclusion.uniformValues.HBAOonly = Boolean(viewModel.ambientOcclusionOnly); + postProcess.ambientOcclusion.uniformValues.aoOnly = Boolean(viewModel.ambientOcclusionOnly); postProcess.ambientOcclusion.aoGenerateUniformValues.intensity = Number(viewModel.intensity); postProcess.ambientOcclusion.aoGenerateUniformValues.bias = Number(viewModel.bias); postProcess.ambientOcclusion.aoGenerateUniformValues.lenCap = Number(viewModel.lengthCap); diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index 5e2024bccc69..27b9c6fbd58a 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -68,10 +68,9 @@ define([ this._uniformValues = { aoTexture : undefined, - HBAOonly: false + aoOnly: false }; - /** * @inheritdoc PostProcessStage#show */ diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl index 2cbabe7a1b21..c7d563178f56 100644 --- a/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusion.glsl @@ -1,13 +1,11 @@ uniform sampler2D u_colorTexture; uniform sampler2D u_aoTexture; -uniform bool u_HBAOonly; +uniform bool u_aoOnly; varying vec2 v_textureCoordinates; + void main(void) { vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; vec3 ao = texture2D(u_aoTexture, v_textureCoordinates).rgb; - if(u_HBAOonly) - gl_FragColor = vec4(ao, 1.0); - else - gl_FragColor = vec4(ao * color, 1.0); + gl_FragColor.rgb = u_aoOnly ? ao : ao * color; } diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl index cc1742c86ac3..d9c543b24f74 100644 --- a/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl @@ -7,11 +7,15 @@ uniform float u_intensity; uniform float u_bias; uniform float u_lenCap; uniform float u_stepSize; + varying vec2 v_textureCoordinates; -vec2 ScreenToView(vec2 uv) +vec4 clipToEye(vec2 uv, float depth) { - return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; + vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0)); + vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0); + posEC = posEC / posEC.w; + return posEC; } //Reconstruct Normal from View position @@ -23,40 +27,20 @@ vec3 GetNormal(vec3 posInCamera) } //Reconstruct Normal Without Edge Removation -vec3 GetNormalXedge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) +vec3 GetNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) { - vec4 posInCameraUp = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(0.0, pixelSize.y)), depthU, 1.0); - posInCameraUp = posInCameraUp / posInCameraUp.w; - vec4 posInCameraDown = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(0.0, pixelSize.y)), depthD, 1.0); - posInCameraDown = posInCameraDown / posInCameraDown.w; - vec4 posInCameraLeft = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates - vec2(pixelSize.x, 0.0)), depthL, 1.0); - posInCameraLeft = posInCameraLeft / posInCameraLeft.w; - vec4 posInCameraRight = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates + vec2(pixelSize.x, 0.0)), depthR, 1.0); - posInCameraRight = posInCameraRight / posInCameraRight.w; - vec3 UC = posInCamera.xyz - posInCameraUp.xyz; - vec3 DC = posInCameraDown.xyz - posInCamera.xyz; - vec3 LC = posInCamera.xyz - posInCameraLeft.xyz; - vec3 RC = posInCameraRight.xyz - posInCamera.xyz; - vec3 DX; - vec3 DY; - - if (length(UC) < length(DC)) - { - DY = UC; - } - else - { - DY = DC; - } + vec4 posInCameraUp = clipToEye(v_textureCoordinates - vec2(0.0, pixelSize.y), depthU); + vec4 posInCameraDown = clipToEye(v_textureCoordinates + vec2(0.0, pixelSize.y), depthD); + vec4 posInCameraLeft = clipToEye(v_textureCoordinates - vec2(pixelSize.x, 0.0), depthL); + vec4 posInCameraRight = clipToEye(v_textureCoordinates + vec2(pixelSize.x, 0.0), depthR); - if (length(LC) < length(RC)) - { - DX = LC; - } - else - { - DX = RC; - } + vec3 up = posInCamera.xyz - posInCameraUp.xyz; + vec3 down = posInCameraDown.xyz - posInCamera.xyz; + vec3 left = posInCamera.xyz - posInCameraLeft.xyz; + vec3 right = posInCameraRight.xyz - posInCamera.xyz; + + vec3 DX = length(left) < length(right) ? left : right; + vec3 DY = length(up) < length(down) ? up : down; return normalize(cross(DY, DX)); } @@ -64,18 +48,16 @@ vec3 GetNormalXedge(vec3 posInCamera, float depthU, float depthD, float depthL, void main(void) { float depth = texture2D(u_depthTexture, v_textureCoordinates).r; + vec4 posInCamera = clipToEye(v_textureCoordinates, depth); - vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); - posInCamera = posInCamera / posInCamera.w; - - if(posInCamera.z < 1000.0) + if (posInCamera.z < 1000.0) { vec2 pixelSize = 1.0 / czm_viewport.zw; float depthU = texture2D(u_depthTexture, v_textureCoordinates- vec2(0.0, pixelSize.y)).r; float depthD = texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pixelSize.y)).r; float depthL = texture2D(u_depthTexture, v_textureCoordinates- vec2(pixelSize.x, 0.0)).r; float depthR = texture2D(u_depthTexture, v_textureCoordinates+ vec2(pixelSize.x, 0.0)).r; - vec3 normalInCamera = GetNormalXedge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); + vec3 normalInCamera = GetNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); float AO = 0.0; vec2 sampleDirection = vec2(1.0, 0.0); @@ -112,8 +94,7 @@ void main(void) break; float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; - vec4 stepPosInCamera = czm_inverseProjection * vec4(ScreenToView(newCoords), stepDepthInfo, 1.0); - stepPosInCamera = stepPosInCamera / stepPosInCamera.w; + vec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo); vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; float len = length(diffVec); From 2fbf49f9f1ee8570df7054b74cfff9ddae2a560b Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 15:36:54 -0400 Subject: [PATCH 19/99] Minor edits and change code flow in favor of early exits. --- .../SCene/PostProcessAmbientOcclusionStage.js | 3 +- .../AmbientOcclusionGenerate.glsl | 151 ++++++++---------- 2 files changed, 73 insertions(+), 81 deletions(-) diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index 27b9c6fbd58a..352bcf8e955a 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -57,7 +57,8 @@ define([ intensity: 4.0, bias: 0.0, lenCap: 0.25, - stepSize: 2.0 + stepSize: 2.0, + frustumLength : 1000.0 }; this._aoBlurUniformValues = { diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl index d9c543b24f74..875d1856df1b 100644 --- a/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl +++ b/Source/Shaders/PostProcessFilters/AmbientOcclusionGenerate.glsl @@ -1,5 +1,3 @@ -#extension GL_OES_standard_derivatives : enable - uniform sampler2D u_colorTexture; uniform sampler2D u_randomTexture; uniform sampler2D u_depthTexture; @@ -7,6 +5,7 @@ uniform float u_intensity; uniform float u_bias; uniform float u_lenCap; uniform float u_stepSize; +uniform float u_frustumLength; varying vec2 v_textureCoordinates; @@ -18,16 +17,8 @@ vec4 clipToEye(vec2 uv, float depth) return posEC; } -//Reconstruct Normal from View position -vec3 GetNormal(vec3 posInCamera) -{ - vec3 d1 = dFdx(posInCamera);; - vec3 d2 = dFdy(posInCamera); - return normalize(cross(d2, d1)); -} - //Reconstruct Normal Without Edge Removation -vec3 GetNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) +vec3 getNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize) { vec4 posInCameraUp = clipToEye(v_textureCoordinates - vec2(0.0, pixelSize.y), depthU); vec4 posInCameraDown = clipToEye(v_textureCoordinates + vec2(0.0, pixelSize.y), depthD); @@ -50,81 +41,81 @@ void main(void) float depth = texture2D(u_depthTexture, v_textureCoordinates).r; vec4 posInCamera = clipToEye(v_textureCoordinates, depth); - if (posInCamera.z < 1000.0) + if (posInCamera.z > u_frustumLength) { + gl_FragColor = vec4(1.0); + return; + } + + vec2 pixelSize = 1.0 / czm_viewport.zw; + float depthU = texture2D(u_depthTexture, v_textureCoordinates- vec2(0.0, pixelSize.y)).r; + float depthD = texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pixelSize.y)).r; + float depthL = texture2D(u_depthTexture, v_textureCoordinates- vec2(pixelSize.x, 0.0)).r; + float depthR = texture2D(u_depthTexture, v_textureCoordinates+ vec2(pixelSize.x, 0.0)).r; + vec3 normalInCamera = getNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); + + float AO = 0.0; + vec2 sampleDirection = vec2(1.0, 0.0); + float gapAngle = 90.0 * czm_radiansPerDegree; + + // RandomNoise + vec2 noiseMapSize = vec2(256.0, 256.0); + vec2 noiseScale = vec2(czm_viewport.z / noiseMapSize.x, czm_viewport.w / noiseMapSize.y); + float randomVal = texture2D(u_randomTexture, v_textureCoordinates * noiseScale).x; + + float inverseViewportWidth = 1.0 / czm_viewport.z; + float inverseViewportHeight = 1.0 / czm_viewport.w; + + //Loop for each direction + for (int i = 0; i < 4; i++) { - vec2 pixelSize = 1.0 / czm_viewport.zw; - float depthU = texture2D(u_depthTexture, v_textureCoordinates- vec2(0.0, pixelSize.y)).r; - float depthD = texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pixelSize.y)).r; - float depthL = texture2D(u_depthTexture, v_textureCoordinates- vec2(pixelSize.x, 0.0)).r; - float depthR = texture2D(u_depthTexture, v_textureCoordinates+ vec2(pixelSize.x, 0.0)).r; - vec3 normalInCamera = GetNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize); - - float AO = 0.0; - vec2 sampleDirection = vec2(1.0, 0.0); - float gapAngle = 90.0; - - // DegreeToRadian - gapAngle *= 0.01745329252; - - // RandomNoise - vec2 noiseMapSize = vec2(256.0, 256.0); - vec2 noiseScale = vec2(czm_viewport.z / noiseMapSize.x, czm_viewport.w / noiseMapSize.y); - float randomVal = clamp(texture2D(u_randomTexture, v_textureCoordinates*noiseScale).x, 0.0, 1.0); - - //Loop for each direction - for (int i = 0; i < 4; i++) + float newGapAngle = gapAngle * (float(i) + randomVal); + float cosVal = cos(newGapAngle); + float sinVal = sin(newGapAngle); + + //Rotate Sampling Direction + vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y); + float localAO = 0.0; + float localStepSize = u_stepSize; + + //Loop for each step + for (int j = 0; j < 6; j++) { - float newgapAngle = gapAngle * (float(i) + randomVal); - float cosVal = cos(newgapAngle); - float sinVal = sin(newgapAngle); + vec2 directionWithStep = vec2(rotatedSampleDirection.x * localStepSize * inverseViewportWidth, rotatedSampleDirection.y * localStepSize * inverseViewportHeight); + vec2 newCoords = directionWithStep + v_textureCoordinates; - //Rotate Sampling Direction - vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y); - float localAO = 0.0; - float localStepSize = u_stepSize; + //Exception Handling + if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) + { + break; + } - //Loop for each step - for (int j = 0; j < 6; j++) + float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; + vec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo); + vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; + float len = length(diffVec); + + if (len > u_lenCap) { - vec2 directionWithStep = vec2(rotatedSampleDirection.x * localStepSize * (1.0 / czm_viewport.z), rotatedSampleDirection.y * localStepSize * (1.0 / czm_viewport.w)); - vec2 newCoords = directionWithStep + v_textureCoordinates; - - //Exception Handling - if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) - break; - - float stepDepthInfo = texture2D(u_depthTexture, newCoords).r; - vec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo); - vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz; - float len = length(diffVec); - - if(len <= u_lenCap) - { - float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 ); - float weight = len / u_lenCap; - weight = 1.0 - weight*weight; - - if(dotVal < u_bias) - dotVal = 0.0; - - localAO = max(localAO, dotVal * weight); - localStepSize += u_stepSize; - } - else - { - break; - } + break; } - AO += localAO; - } - AO /= float(4); - AO = 1.0 - clamp(AO, 0.0, 1.0); - AO = pow(AO, u_intensity); - gl_FragColor = vec4(vec3(AO), 1.0); - } - else - { - gl_FragColor = vec4(1.0); + float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 ); + float weight = len / u_lenCap; + weight = 1.0 - weight * weight; + + if(dotVal < u_bias) + { + dotVal = 0.0; + } + + localAO = max(localAO, dotVal * weight); + localStepSize += u_stepSize; + } + AO += localAO; } + + AO /= float(4); + AO = 1.0 - clamp(AO, 0.0, 1.0); + AO = pow(AO, u_intensity); + gl_FragColor = vec4(vec3(AO), 1.0); } From 7d6bf80d095cdb297a7ae32cc39d17ce73b9323a Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 16:08:43 -0400 Subject: [PATCH 20/99] Remove custom blur shaders. --- .../Sandcastle/gallery/Ambient Occlusion.html | 3 +- .../SCene/PostProcessAmbientOcclusionStage.js | 67 ++++++++++++------- Source/Scene/SunPostProcess.js | 16 ++--- .../AmbientOcclusionBlurX.glsl | 19 ------ .../AmbientOcclusionBlurY.glsl | 19 ------ .../PostProcessFilters/GaussianBlur1D.glsl | 43 +++++++----- 6 files changed, 79 insertions(+), 88 deletions(-) delete mode 100644 Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl delete mode 100644 Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html index c6ad54a9bf41..223674dbaa66 100644 --- a/Apps/Sandcastle/gallery/Ambient Occlusion.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -105,7 +105,8 @@ postProcess.ambientOcclusion.aoGenerateUniformValues.bias = Number(viewModel.bias); postProcess.ambientOcclusion.aoGenerateUniformValues.lenCap = Number(viewModel.lengthCap); postProcess.ambientOcclusion.aoGenerateUniformValues.stepSize = Number(viewModel.stepSize); - postProcess.ambientOcclusion.aoBlurUniformValues.kernelSize = Number(viewModel.kernelSize); + postProcess.ambientOcclusion.aoBlurXUniformValues.kernelSize = Number(viewModel.kernelSize); + postProcess.ambientOcclusion.aoBlurYUniformValues.kernelSize = Number(viewModel.kernelSize); } updatePostProcess(); diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index 352bcf8e955a..6f8e5e12fa5c 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -12,9 +12,8 @@ define([ '../Renderer/TextureMinificationFilter', '../Renderer/TextureWrap', '../Shaders/PostProcessFilters/AmbientOcclusion', - '../Shaders/PostProcessFilters/AmbientOcclusionBlurX', - '../Shaders/PostProcessFilters/AmbientOcclusionBlurY', '../Shaders/PostProcessFilters/AmbientOcclusionGenerate', + '../Shaders/PostProcessFilters/GaussianBlur1D', './PostProcess', './PostProcessStage' ], function( @@ -31,9 +30,8 @@ define([ TextureMinificationFilter, TextureWrap, AmbientOcclusion, - AmbientOcclusionBlurX, - AmbientOcclusionBlurY, AmbientOcclusionGenerate, + GaussianBlur1D, PostProcess, PostProcessStage) { 'use strict'; @@ -60,8 +58,16 @@ define([ stepSize: 2.0, frustumLength : 1000.0 }; - - this._aoBlurUniformValues = { + this._aoBlurXUniformValues = { + delta : 1.0, + sigma : 2.0, + direction : 0.0, + kernelSize : 1.0 + }; + this._aoBlurYUniformValues = { + delta : 1.0, + sigma : 2.0, + direction : 1.0, kernelSize : 1.0 }; @@ -114,23 +120,21 @@ define([ /** * @inheritdoc PostProcessStage#uniformValues */ - aoBlurUniformValues : { + aoBlurXUniformValues : { + get : function() { + return this._aoBlurXUniformValues; + } + }, + /** + * @inheritdoc PostProcessStage#uniformValues + */ + aoBlurYUniformValues : { get : function() { - return this._aoBlurUniformValues; + return this._aoBlurYUniformValues; } } - }); - function createSampler() { - return new Sampler({ - wrapS : TextureWrap.CLAMP_TO_EDGE, - wrapT : TextureWrap.CLAMP_TO_EDGE, - minificationFilter : TextureMinificationFilter.NEAREST, - magnificationFilter : TextureMagnificationFilter.NEAREST - }); - } - /** * @inheritdoc PostProcessStage#execute */ @@ -155,7 +159,12 @@ define([ width : 256, height : 256 }, - sampler : createSampler() + sampler : new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.NEAREST, + magnificationFilter : TextureMagnificationFilter.NEAREST + }) }); this._aoGenerateUniformValues.randomTexture = this._randomTexture; @@ -178,7 +187,12 @@ define([ height : screenHeight, pixelFormat : PixelFormat.RGBA, pixelDatatype : PixelDatatype.UNSIGNED_BYTE, - sampler : createSampler() + sampler : new Sampler({ + wrapS : TextureWrap.CLAMP_TO_EDGE, + wrapT : TextureWrap.CLAMP_TO_EDGE, + minificationFilter : TextureMinificationFilter.LINEAR, + magnificationFilter : TextureMagnificationFilter.LINEAR + }) }); var aoFramebuffer = new Framebuffer({ context : context, @@ -187,7 +201,10 @@ define([ }); var aoGenerateUniformValues = stage._aoGenerateUniformValues; - var aoBlurUniformValues = stage._aoBlurUniformValues; + var aoBlurXUniformValues = stage._aoBlurXUniformValues; + var aoBlurYUniformValues = stage._aoBlurYUniformValues; + + var blurFragmentShader = '#define AMBIENT_OCCLUSION\n' + GaussianBlur1D; var aoGenerateStage = new PostProcessStage({ fragmentShader : AmbientOcclusionGenerate, @@ -195,13 +212,13 @@ define([ }); var aoBlurXStage = new PostProcessStage({ - fragmentShader : AmbientOcclusionBlurX, - uniformValues: aoBlurUniformValues + fragmentShader : blurFragmentShader, + uniformValues: aoBlurXUniformValues }); var aoBlurYStage = new PostProcessStage({ - fragmentShader : AmbientOcclusionBlurY, - uniformValues: aoBlurUniformValues + fragmentShader : blurFragmentShader, + uniformValues: aoBlurYUniformValues }); var aoPostProcess = new PostProcess({ diff --git a/Source/Scene/SunPostProcess.js b/Source/Scene/SunPostProcess.js index 739d9a1cc2b9..2fb2cb15dadf 100644 --- a/Source/Scene/SunPostProcess.js +++ b/Source/Scene/SunPostProcess.js @@ -157,13 +157,13 @@ define([ var sigma = 2.0; uniformMap = { - delta : function() { + u_delta : function() { return delta; }, - sigma : function() { + u_sigma : function() { return sigma; }, - direction : function() { + u_direction : function() { return 0.0; } }; @@ -174,13 +174,13 @@ define([ }); uniformMap = { - delta : function() { + u_delta : function() { return delta; }, - sigma : function() { + u_sigma : function() { return sigma; }, - direction : function() { + u_direction : function() { return 1.0; } }; @@ -300,7 +300,7 @@ define([ }; this._brightPassCommand.renderState = downSampleRenderState; - this._blurXCommand.uniformMap.u_texture = function() { + this._blurXCommand.uniformMap.u_colorTexture = function() { return that._downSampleFBO2.getColorTexture(0); }; this._blurXCommand.uniformMap.u_step = function() { @@ -308,7 +308,7 @@ define([ }; this._blurXCommand.renderState = downSampleRenderState; - this._blurYCommand.uniformMap.u_texture = function() { + this._blurYCommand.uniformMap.u_colorTexture = function() { return that._downSampleFBO1.getColorTexture(0); }; this._blurYCommand.uniformMap.u_step = function() { diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl deleted file mode 100644 index 7cc04d5e58f0..000000000000 --- a/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurX.glsl +++ /dev/null @@ -1,19 +0,0 @@ -uniform sampler2D u_colorTexture; -uniform float u_kernelSize; -varying vec2 v_textureCoordinates; - -void main(void) -{ - vec4 result = vec4(0.0); - vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * 4.0, 0.0)) * 0.00390625; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * 3.0, 0.0)) * 0.03125; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x * 2.0, 0.0)) * 0.109375; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(-recipalScreenSize.x, 0.0)) * 0.21875; - result += texture2D(u_colorTexture, v_textureCoordinates) * 0.2734375; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x, 0.0)) * 0.21875; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*2.0, 0.0)) * 0.109375; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*3.0, 0.0)) * 0.03125; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(recipalScreenSize.x*4.0, 0.0)) * 0.00390625; - gl_FragColor = result; -} diff --git a/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl b/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl deleted file mode 100644 index 4ebe94b570c8..000000000000 --- a/Source/Shaders/PostProcessFilters/AmbientOcclusionBlurY.glsl +++ /dev/null @@ -1,19 +0,0 @@ -uniform sampler2D u_colorTexture; -uniform float u_kernelSize; -varying vec2 v_textureCoordinates; - -void main(void) -{ - vec4 result = vec4(0.0); - vec2 recipalScreenSize = u_kernelSize / czm_viewport.zw; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * 4.0)) * 0.00390625; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * 3.0)) * 0.03125; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y * 2.0)) * 0.109375; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, -recipalScreenSize.y)) * 0.21875; - result += texture2D(u_colorTexture, v_textureCoordinates) * 0.2734375; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y)) * 0.21875; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * 2.0)) * 0.109375; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * 3.0)) * 0.03125; - result += texture2D(u_colorTexture, v_textureCoordinates + vec2(0.0, recipalScreenSize.y * 4.0)) * 0.00390625; - gl_FragColor = result; -} diff --git a/Source/Shaders/PostProcessFilters/GaussianBlur1D.glsl b/Source/Shaders/PostProcessFilters/GaussianBlur1D.glsl index 2c7831002ea4..1a64b1f88504 100644 --- a/Source/Shaders/PostProcessFilters/GaussianBlur1D.glsl +++ b/Source/Shaders/PostProcessFilters/GaussianBlur1D.glsl @@ -1,11 +1,16 @@ #define SAMPLES 8 -uniform float delta; -uniform float sigma; -uniform float direction; // 0.0 for x direction, 1.0 for y direction +uniform float u_delta; +uniform float u_sigma; +uniform float u_direction; // 0.0 for x direction, 1.0 for y direction -uniform sampler2D u_texture; +uniform sampler2D u_colorTexture; + +#ifdef AMBIENT_OCCLUSION +uniform float u_kernelSize; +#else uniform vec2 u_step; +#endif varying vec2 v_textureCoordinates; @@ -15,23 +20,29 @@ varying vec2 v_textureCoordinates; void main() { vec2 st = v_textureCoordinates; - - vec2 dir = vec2(1.0 - direction, direction); - + + vec2 dir = vec2(1.0 - u_direction, u_direction); + +#ifdef AMBIENT_OCCLUSION + vec2 step = vec2(u_kernelSize / czm_viewport.zw); +#else + vec2 step = u_step; +#endif + vec3 g; - g.x = 1.0 / (sqrt(czm_twoPi) * sigma); - g.y = exp((-0.5 * delta * delta) / (sigma * sigma)); + g.x = 1.0 / (sqrt(czm_twoPi) * u_sigma); + g.y = exp((-0.5 * u_delta * u_delta) / (u_sigma * u_sigma)); g.z = g.y * g.y; - - vec4 result = texture2D(u_texture, st) * g.x; + + vec4 result = texture2D(u_colorTexture, st) * g.x; for (int i = 1; i < SAMPLES; ++i) { g.xy *= g.yz; - - vec2 offset = float(i) * dir * u_step; - result += texture2D(u_texture, st - offset) * g.x; - result += texture2D(u_texture, st + offset) * g.x; + + vec2 offset = float(i) * dir * step; + result += texture2D(u_colorTexture, st - offset) * g.x; + result += texture2D(u_colorTexture, st + offset) * g.x; } - + gl_FragColor = result; } From 7b8e19c0a5c298e0d796fe615c4bb5864bc0c6d7 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 16:16:27 -0400 Subject: [PATCH 21/99] Renames. Remove 'ao' prefixes. --- .../Sandcastle/gallery/Ambient Occlusion.html | 12 +-- .../SCene/PostProcessAmbientOcclusionStage.js | 76 +++++++++---------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html index 223674dbaa66..c9119a59b531 100644 --- a/Apps/Sandcastle/gallery/Ambient Occlusion.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -101,12 +101,12 @@ var postProcess = viewer.scene.postProcess; postProcess.ambientOcclusion.show = Boolean(viewModel.show); postProcess.ambientOcclusion.uniformValues.aoOnly = Boolean(viewModel.ambientOcclusionOnly); - postProcess.ambientOcclusion.aoGenerateUniformValues.intensity = Number(viewModel.intensity); - postProcess.ambientOcclusion.aoGenerateUniformValues.bias = Number(viewModel.bias); - postProcess.ambientOcclusion.aoGenerateUniformValues.lenCap = Number(viewModel.lengthCap); - postProcess.ambientOcclusion.aoGenerateUniformValues.stepSize = Number(viewModel.stepSize); - postProcess.ambientOcclusion.aoBlurXUniformValues.kernelSize = Number(viewModel.kernelSize); - postProcess.ambientOcclusion.aoBlurYUniformValues.kernelSize = Number(viewModel.kernelSize); + postProcess.ambientOcclusion.generateUniformValues.intensity = Number(viewModel.intensity); + postProcess.ambientOcclusion.generateUniformValues.bias = Number(viewModel.bias); + postProcess.ambientOcclusion.generateUniformValues.lenCap = Number(viewModel.lengthCap); + postProcess.ambientOcclusion.generateUniformValues.stepSize = Number(viewModel.stepSize); + postProcess.ambientOcclusion.blurXUniformValues.kernelSize = Number(viewModel.kernelSize); + postProcess.ambientOcclusion.blurYUniformValues.kernelSize = Number(viewModel.kernelSize); } updatePostProcess(); diff --git a/Source/SCene/PostProcessAmbientOcclusionStage.js b/Source/SCene/PostProcessAmbientOcclusionStage.js index 6f8e5e12fa5c..f92dec2e27b6 100644 --- a/Source/SCene/PostProcessAmbientOcclusionStage.js +++ b/Source/SCene/PostProcessAmbientOcclusionStage.js @@ -45,12 +45,12 @@ define([ * @private */ function PostProcessAmbientOcclusionStage() { - this._aoTexture = undefined; - this._aoFramebuffer = undefined; - this._aoPostProcess = undefined; + this._texture = undefined; + this._framebuffer = undefined; + this._postProcess = undefined; this._randomTexture = undefined; - this._aoGenerateUniformValues = { + this._generateUniformValues = { randomTexture: undefined, intensity: 4.0, bias: 0.0, @@ -58,13 +58,13 @@ define([ stepSize: 2.0, frustumLength : 1000.0 }; - this._aoBlurXUniformValues = { + this._blurXUniformValues = { delta : 1.0, sigma : 2.0, direction : 0.0, kernelSize : 1.0 }; - this._aoBlurYUniformValues = { + this._blurYUniformValues = { delta : 1.0, sigma : 2.0, direction : 1.0, @@ -112,25 +112,25 @@ define([ /** * @inheritdoc PostProcessStage#uniformValues */ - aoGenerateUniformValues : { + generateUniformValues : { get : function() { - return this._aoGenerateUniformValues; + return this._generateUniformValues; } }, /** * @inheritdoc PostProcessStage#uniformValues */ - aoBlurXUniformValues : { + blurXUniformValues : { get : function() { - return this._aoBlurXUniformValues; + return this._blurXUniformValues; } }, /** * @inheritdoc PostProcessStage#uniformValues */ - aoBlurYUniformValues : { + blurYUniformValues : { get : function() { - return this._aoBlurYUniformValues; + return this._blurYUniformValues; } } }); @@ -167,7 +167,7 @@ define([ }) }); - this._aoGenerateUniformValues.randomTexture = this._randomTexture; + this._generateUniformValues.randomTexture = this._randomTexture; } if (dirty) { @@ -175,13 +175,13 @@ define([ createResources(this, frameState.context); } - this._aoPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._aoFramebuffer); + this._postProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._framebuffer); }; function createResources(stage, context) { var screenWidth = context.drawingBufferWidth; var screenHeight = context.drawingBufferHeight; - var aoTexture = new Texture({ + var texture = new Texture({ context : context, width : screenWidth, height : screenHeight, @@ -194,53 +194,53 @@ define([ magnificationFilter : TextureMagnificationFilter.LINEAR }) }); - var aoFramebuffer = new Framebuffer({ + var framebuffer = new Framebuffer({ context : context, - colorTextures : [aoTexture], + colorTextures : [texture], destroyAttachments : false }); - var aoGenerateUniformValues = stage._aoGenerateUniformValues; - var aoBlurXUniformValues = stage._aoBlurXUniformValues; - var aoBlurYUniformValues = stage._aoBlurYUniformValues; + var generateUniformValues = stage._generateUniformValues; + var blurXUniformValues = stage._blurXUniformValues; + var blurYUniformValues = stage._blurYUniformValues; var blurFragmentShader = '#define AMBIENT_OCCLUSION\n' + GaussianBlur1D; - var aoGenerateStage = new PostProcessStage({ + var generateStage = new PostProcessStage({ fragmentShader : AmbientOcclusionGenerate, - uniformValues: aoGenerateUniformValues + uniformValues: generateUniformValues }); - var aoBlurXStage = new PostProcessStage({ + var blurXStage = new PostProcessStage({ fragmentShader : blurFragmentShader, - uniformValues: aoBlurXUniformValues + uniformValues: blurXUniformValues }); - var aoBlurYStage = new PostProcessStage({ + var blurYStage = new PostProcessStage({ fragmentShader : blurFragmentShader, - uniformValues: aoBlurYUniformValues + uniformValues: blurYUniformValues }); - var aoPostProcess = new PostProcess({ - stages : [aoGenerateStage, aoBlurXStage, aoBlurYStage], + var postProcess = new PostProcess({ + stages : [generateStage, blurXStage, blurYStage], overwriteInput : false, blendOutput : false }); - aoGenerateStage.show = true; - aoBlurXStage.show = true; - aoBlurYStage.show = true; + generateStage.show = true; + blurXStage.show = true; + blurYStage.show = true; - stage._aoTexture = aoTexture; - stage._aoFramebuffer = aoFramebuffer; - stage._aoPostProcess = aoPostProcess; - stage._uniformValues.aoTexture = aoTexture; + stage._texture = texture; + stage._framebuffer = framebuffer; + stage._postProcess = postProcess; + stage._uniformValues.aoTexture = texture; } function destroyResources(stage) { - stage._aoTexture = stage._aoTexture && stage._aoTexture.destroy(); - stage._aoFramebuffer = stage._aoFramebuffer && stage._aoFramebuffer.destroy(); - stage._aoPostProcess = stage._aoPostProcess && stage._aoPostProcess.destroy(); + stage._texture = stage._texture && stage._texture.destroy(); + stage._framebuffer = stage._framebuffer && stage._framebuffer.destroy(); + stage._postProcess = stage._postProcess && stage._postProcess.destroy(); } /** From 64e6153fb12d002e8446133c61412d7f45872a0e Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 16:45:12 -0400 Subject: [PATCH 22/99] More updates from review. --- Source/Scene/PostProcessLibrary.js | 14 ++-- Source/Scene/PostProcessToonStage.js | 107 +++++++++++++-------------- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index 6daaf1930105..2c7ea658b96d 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -362,6 +362,10 @@ define([ 'uniform float u_intensity; \n' + 'varying vec2 v_textureCoordinates; \n' + + //whether it is in space or not + //6500000.0 is Emprical value + '#define DISTANCE_TO_SPACE 6500000.0 \n' + + //return ndc from world coordinate biased earthRadius 'vec4 getNDCFromWC(vec3 WC, float earthRadius) \n' + '{ \n' + @@ -420,9 +424,7 @@ define([ ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + ' bool isSpace = true; \n' + - //whether it is in space or not - //6500000.0 is Emprical value - ' if(length(czm_viewerPositionWC.xyz) < 6500000.0) \n' + + ' if(length(czm_viewerPositionWC.xyz) < DISTANCE_TO_SPACE) \n' + ' isSpace = false; \n' + //Sun position @@ -447,13 +449,13 @@ define([ ' vec2 ghostVec = (vec2(0.5) - texcoord) * u_ghostDispersal; \n' + ' vec3 direction = normalize(vec3(ghostVec, 0.0)); \n' + - // sample ghosts: + // sample ghosts: ' vec4 result = vec4(0.0); \n' + ' vec4 ghost = vec4(0.0); \n' + ' for (int i = 0; i < 4; ++i) \n' + ' { \n' + ' vec2 offset = fract(texcoord + ghostVec * float(i)); \n' + - // Only bright spots from the centre of the source image + // Only bright spots from the centre of the source image ' ghost += textureDistorted(u_colorTexture, offset, direction.xy, distortion, isSpace); \n' + ' } \n' + ' result += ghost; \n' + @@ -526,7 +528,7 @@ define([ function createBloomStage() { return new PostProcessBloomStage(); - } + } function createToonStage() { return new PostProcessToonStage(); diff --git a/Source/Scene/PostProcessToonStage.js b/Source/Scene/PostProcessToonStage.js index 766970c532e5..2da0fa9a8f76 100644 --- a/Source/Scene/PostProcessToonStage.js +++ b/Source/Scene/PostProcessToonStage.js @@ -37,21 +37,18 @@ define([ * @private */ function PostProcessToonStage() { - - this._ToonTexture = undefined; - this._ToonFramebuffer = undefined; - this._ToonPostProcess = undefined; + this._toonTexture = undefined; + this._toonFramebuffer = undefined; + this._toonPostProcess = undefined; - this._EdgeDetectionUniformValues = { + this._edgeDetectionUniformValues = { len : 0.1 }; - this._ToonUniformValues = { - - }; + this._toonUniformValues = {}; this._uniformValues = { - ToonTexture : undefined, + toonTexture : undefined, toonOnly : true }; @@ -62,14 +59,14 @@ define([ this._fragmentShader = 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_ToonTexture; \n' + + 'uniform sampler2D u_toonTexture; \n' + 'uniform bool u_toonOnly; \n' + 'varying vec2 v_textureCoordinates; \n' + - + 'void main(void) \n' + - '{ \n' + - ' gl_FragColor = texture2D(u_ToonTexture, v_textureCoordinates);\n' + - ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_ToonTexture, v_textureCoordinates), gl_FragColor.a);\n' + + '{ \n' + + ' gl_FragColor = texture2D(u_toonTexture, v_textureCoordinates);\n' + + ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_toonTexture, v_textureCoordinates), gl_FragColor.a);\n' + '} \n'; } @@ -97,21 +94,21 @@ define([ get : function() { return this._fragmentShader; } - }, + }, /** * @inheritdoc PostProcessStage#uniformValues */ - EdgeDetectionUniformValues : { + edgeDetectionUniformValues : { get : function() { - return this._EdgeDetectionUniformValues; + return this._edgeDetectionUniformValues; } }, /** * @inheritdoc PostProcessStage#uniformValues */ - ToonUniformValues : { + toonUniformValues : { get : function() { - return this._ToonUniformValues; + return this._toonUniformValues; } } @@ -130,7 +127,7 @@ define([ createResources(this, frameState.context); } - this._ToonPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._ToonFramebuffer); + this._toonPostProcess.execute(frameState, inputColorTexture, inputDepthTexture, this._toonFramebuffer); }; function createSampler() { @@ -145,7 +142,7 @@ define([ function createResources(stage, context) { var screenWidth = context.drawingBufferWidth; var screenHeight = context.drawingBufferHeight; - var ToonTexture = new Texture({ + var toonTexture = new Texture({ context : context, width : screenWidth, height : screenHeight, @@ -153,21 +150,21 @@ define([ pixelDatatype : PixelDatatype.UNSIGNED_BYTE, sampler : createSampler() }); - var ToonFramebuffer = new Framebuffer({ + var toonFramebuffer = new Framebuffer({ context : context, - colorTextures : [ToonTexture], + colorTextures : [toonTexture], destroyAttachments : false }); - var EdgeDetectionUniformValues = stage._EdgeDetectionUniformValues; + var edgeDetectionUniformValues = stage._edgeDetectionUniformValues; - var ToonUniformValues = stage._ToonUniformValues; + var toonUniformValues = stage._toonUniformValues; - var ToonShader = + var toonShader = '#extension GL_OES_standard_derivatives : enable \n' + 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_depthTexture; \n' + - + 'uniform sampler2D u_depthTexture; \n' + + 'varying vec2 v_textureCoordinates; \n' + 'vec2 ScreenToView(vec2 uv) \n' + @@ -191,7 +188,7 @@ define([ '} \n' + 'void main(void) \n' + - '{ \n' + + '{ \n' + ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + ' posInCamera = posInCamera / posInCamera.w; \n' + @@ -201,9 +198,9 @@ define([ ' gl_FragColor = vec4(depth);\n' + '} \n'; - var EdgeDetectionShader = + var edgeDetectionShader = 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_depthTexture; \n' + + 'uniform sampler2D u_depthTexture; \n' + 'uniform float u_len; \n' + 'uniform float u_stepSize; \n' + 'precision highp float; \n' + @@ -225,7 +222,7 @@ define([ 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, 0.0)).x * 10.0; \n' + 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + - + 'float vertEdge = 0.0; \n' + 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + @@ -246,39 +243,39 @@ define([ '{ \n' + ' gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); \n' + '} \n' + - + '} \n'; - - var ToonStage = new PostProcessStage({ - fragmentShader : ToonShader, - uniformValues: ToonUniformValues + + var toonStage = new PostProcessStage({ + fragmentShader : toonShader, + uniformValues: toonUniformValues }); - var EdgeDetectionStage = new PostProcessStage({ - fragmentShader : EdgeDetectionShader, - uniformValues: EdgeDetectionUniformValues + var edgeDetectionStage = new PostProcessStage({ + fragmentShader : edgeDetectionShader, + uniformValues: edgeDetectionUniformValues }); - var ToonPostProcess = new PostProcess({ - stages : [ToonStage, EdgeDetectionStage], + var toonPostProcess = new PostProcess({ + stages : [toonStage, edgeDetectionStage], overwriteInput : false, blendOutput : false }); - - ToonStage.show = true; - EdgeDetectionStage.show = true; - - - stage._ToonTexture = ToonTexture; - stage._ToonFramebuffer = ToonFramebuffer; - stage._ToonPostProcess = ToonPostProcess; - stage._uniformValues.ToonTexture = ToonTexture; + + toonStage.show = true; + edgeDetectionStage.show = true; + + + stage._toonTexture = toonTexture; + stage._toonFramebuffer = toonFramebuffer; + stage._toonPostProcess = toonPostProcess; + stage._uniformValues.toonTexture = toonTexture; } function destroyResources(stage) { - stage._ToonTexture = stage._ToonTexture && stage._ToonTexture.destroy(); - stage._ToonFramebuffer = stage._ToonFramebuffer && stage._ToonFramebuffer.destroy(); - stage._ToonPostProcess = stage._ToonPostProcess && stage._ToonPostProcess.destroy(); + stage._toonTexture = stage._toonTexture && stage._toonTexture.destroy(); + stage._toonFramebuffer = stage._toonFramebuffer && stage._toonFramebuffer.destroy(); + stage._toonPostProcess = stage._toonPostProcess && stage._toonPostProcess.destroy(); } /** @@ -297,4 +294,4 @@ define([ }; return PostProcessToonStage; -}); \ No newline at end of file +}); From 7ce73d006c19daab236f0a1e895d429408e501a4 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 17:02:28 -0400 Subject: [PATCH 23/99] Fix after merge. --- .../Scene/PostProcessAmbientocclusionStage.js | 30 +------------------ 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/Source/Scene/PostProcessAmbientocclusionStage.js b/Source/Scene/PostProcessAmbientocclusionStage.js index 60be8a9b01da..9f642bba1199 100644 --- a/Source/Scene/PostProcessAmbientocclusionStage.js +++ b/Source/Scene/PostProcessAmbientocclusionStage.js @@ -45,8 +45,6 @@ define([ * @private */ function PostProcessAmbientOcclusionStage() { - this._texture = undefined; - this._framebuffer = undefined; this._postProcess = undefined; this._randomTexture = undefined; @@ -179,28 +177,7 @@ define([ this._uniformValues.aoTexture = this._postProcess.outputColorTexture; }; - function createResources(stage, context) { - var screenWidth = context.drawingBufferWidth; - var screenHeight = context.drawingBufferHeight; - var texture = new Texture({ - context : context, - width : screenWidth, - height : screenHeight, - pixelFormat : PixelFormat.RGBA, - pixelDatatype : PixelDatatype.UNSIGNED_BYTE, - sampler : new Sampler({ - wrapS : TextureWrap.CLAMP_TO_EDGE, - wrapT : TextureWrap.CLAMP_TO_EDGE, - minificationFilter : TextureMinificationFilter.LINEAR, - magnificationFilter : TextureMagnificationFilter.LINEAR - }) - }); - var framebuffer = new Framebuffer({ - context : context, - colorTextures : [texture], - destroyAttachments : false - }); - + function createResources(stage) { var generateUniformValues = stage._generateUniformValues; var blurXUniformValues = stage._blurXUniformValues; var blurYUniformValues = stage._blurYUniformValues; @@ -233,15 +210,10 @@ define([ blurXStage.show = true; blurYStage.show = true; - stage._texture = texture; - stage._framebuffer = framebuffer; stage._postProcess = postProcess; - stage._uniformValues.aoTexture = texture; } function destroyResources(stage) { - stage._texture = stage._texture && stage._texture.destroy(); - stage._framebuffer = stage._framebuffer && stage._framebuffer.destroy(); stage._postProcess = stage._postProcess && stage._postProcess.destroy(); } From 0855fbe4439a676b10377908eb9eda3c25d4501b Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Mon, 23 Oct 2017 17:06:07 -0400 Subject: [PATCH 24/99] File rename. --- ...bientocclusionStage.js => PostProcessAmbientOcclusionStage.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Source/Scene/{PostProcessAmbientocclusionStage.js => PostProcessAmbientOcclusionStage.js} (100%) diff --git a/Source/Scene/PostProcessAmbientocclusionStage.js b/Source/Scene/PostProcessAmbientOcclusionStage.js similarity index 100% rename from Source/Scene/PostProcessAmbientocclusionStage.js rename to Source/Scene/PostProcessAmbientOcclusionStage.js From 16ca244d6b3c48fdb59080a8bf2bfb115ff27066 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Tue, 24 Oct 2017 15:32:00 -0400 Subject: [PATCH 25/99] Move most of the shaders to their own GLSL files. --- Apps/Sandcastle/gallery/Post Processing.html | 8 - Source/Scene/PostProcessLibrary.js | 353 ++---------------- Source/Scene/PostProcessScene.js | 5 - Source/Scene/PostProcessToonStage.js | 116 +----- .../PostProcessFilters/BlackAndWhite.glsl | 13 + .../PostProcessFilters/Brightness.glsl | 11 + .../Shaders/PostProcessFilters/DepthView.glsl | 9 + .../PostProcessFilters/EdgeDetection.glsl | 41 ++ .../Shaders/PostProcessFilters/EightBit.glsl | 21 ++ .../Shaders/PostProcessFilters/LensFlare.glsl | 137 +++++++ .../PostProcessFilters/NightVision.glsl | 16 + .../PostProcessFilters/TextureOverlay.glsl | 12 + Source/Shaders/PostProcessFilters/Toon.glsl | 39 ++ .../PostProcessFilters/ToonComposite.glsl | 10 + 14 files changed, 363 insertions(+), 428 deletions(-) create mode 100644 Source/Shaders/PostProcessFilters/BlackAndWhite.glsl create mode 100644 Source/Shaders/PostProcessFilters/Brightness.glsl create mode 100644 Source/Shaders/PostProcessFilters/DepthView.glsl create mode 100644 Source/Shaders/PostProcessFilters/EdgeDetection.glsl create mode 100644 Source/Shaders/PostProcessFilters/EightBit.glsl create mode 100644 Source/Shaders/PostProcessFilters/LensFlare.glsl create mode 100644 Source/Shaders/PostProcessFilters/NightVision.glsl create mode 100644 Source/Shaders/PostProcessFilters/TextureOverlay.glsl create mode 100644 Source/Shaders/PostProcessFilters/Toon.glsl create mode 100644 Source/Shaders/PostProcessFilters/ToonComposite.glsl diff --git a/Apps/Sandcastle/gallery/Post Processing.html b/Apps/Sandcastle/gallery/Post Processing.html index 812f2ecc9e0a..f1e760e82314 100644 --- a/Apps/Sandcastle/gallery/Post Processing.html +++ b/Apps/Sandcastle/gallery/Post Processing.html @@ -63,12 +63,6 @@ - - Composite Test - - - - Ambient Occlusion @@ -103,7 +97,6 @@ textureOverlayShow: false, textureOverlayAlpha: 0.5, depthViewShow: false, - compositeTestShow: false, ambientOcclusionShow: false, fxaaShow: false }; @@ -127,7 +120,6 @@ postProcess.textureOverlay.show = Boolean(viewModel.textureOverlayShow); postProcess.textureOverlay.uniformValues.alpha = Number(viewModel.textureOverlayAlpha); postProcess.depthView.show = Boolean(viewModel.depthViewShow); - postProcess.compositeTest.show = Boolean(viewModel.compositeTestShow); postProcess.ambientOcclusion.show = Boolean(viewModel.ambientOcclusionShow); scene.fxaa = Boolean(viewModel.fxaaShow); } diff --git a/Source/Scene/PostProcessLibrary.js b/Source/Scene/PostProcessLibrary.js index 92cca3ac94ef..018435770107 100644 --- a/Source/Scene/PostProcessLibrary.js +++ b/Source/Scene/PostProcessLibrary.js @@ -7,9 +7,15 @@ define([ './PostProcessDepthOfFieldStage', './PostProcessBloomStage', './PostProcessToonStage', - './PostProcessCompositeStage', './PostProcessStage', + '../Shaders/PostProcessFilters/BlackAndWhite', + '../Shaders/PostProcessFilters/Brightness', + '../Shaders/PostProcessFilters/DepthView', + '../Shaders/PostProcessFilters/EightBit', '../Shaders/PostProcessFilters/FXAA', + '../Shaders/PostProcessFilters/LensFlare', + '../Shaders/PostProcessFilters/NightVision', + '../Shaders/PostProcessFilters/TextureOverlay', '../ThirdParty/Shaders/FXAA3_11' ], function( buildModuleUrl, @@ -20,9 +26,15 @@ define([ PostProcessDepthOfFieldStage, PostProcessBloomStage, PostProcessToonStage, - PostProcessCompositeStage, PostProcessStage, + BlackAndWhite, + Brightness, + DepthView, + EightBit, FXAAFS, + LensFlare, + NightVision, + TextureOverlay, FXAA3_11) { 'use strict'; @@ -113,15 +125,6 @@ define([ } }, - /** - * @private - */ - compositeTest : { - get : function() { - return createCompositeTestStage(); - } - }, - /** * private */ @@ -172,119 +175,42 @@ define([ }); function createBlackAndWhiteStage() { - var uniformValues = { - gradations : 5.0 - }; - - var fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform float u_gradations; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' float luminance = czm_luminance(rgb); \n' + - ' float darkness = luminance * u_gradations; \n' + - ' darkness = (darkness - fract(darkness)) / u_gradations; \n' + - ' gl_FragColor = vec4(vec3(darkness), 1.0); \n' + - '} \n'; - return new PostProcessStage({ - fragmentShader : fragmentShader, - uniformValues : uniformValues + fragmentShader : BlackAndWhite, + uniformValues : { + gradations : 5.0 + } }); } function createBrightnessStage() { - var uniformValues = { - brightness : 0.5 - }; - - var fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform float u_brightness; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' vec3 target = vec3(0.0); \n' + - ' gl_FragColor = vec4(mix(target, rgb, u_brightness), 1.0); \n' + - '} \n'; - return new PostProcessStage({ - fragmentShader : fragmentShader, - uniformValues : uniformValues + fragmentShader : Brightness, + uniformValues : { + brightness : 0.5 + } }); } function createEightBitStage() { - var fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'const int KERNEL_WIDTH = 16; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec2 u_step = vec2(1.0 / czm_viewport.z, 1.0 / czm_viewport.w); \n' + - ' vec2 integralPos = v_textureCoordinates - mod(v_textureCoordinates, 8.0 * u_step); \n' + - ' vec3 averageValue = vec3(0.0); \n' + - ' for (int i = 0; i < KERNEL_WIDTH; i++) \n' + - ' { \n' + - ' for (int j = 0; j < KERNEL_WIDTH; j++) \n' + - ' { \n' + - ' averageValue += texture2D(u_colorTexture, integralPos + u_step * vec2(i, j)).rgb; \n' + - ' } \n' + - ' } \n' + - ' averageValue /= float(KERNEL_WIDTH * KERNEL_WIDTH); \n' + - ' gl_FragColor = vec4(averageValue, 1.0); \n' + - '} \n'; return new PostProcessStage({ - fragmentShader : fragmentShader + fragmentShader : EightBit }); } function createNightVisionStage() { - var fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'float rand(vec2 co) \n' + - '{ \n' + - ' return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453); \n' + - '} \n' + - 'void main(void) \n' + - '{ \n' + - ' float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1; \n' + - ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' vec3 green = vec3(0.0, 1.0, 0.0); \n' + - ' gl_FragColor = vec4((noiseValue + rgb) * green, 1.0); \n' + - '} \n'; - return new PostProcessStage({ - fragmentShader : fragmentShader + fragmentShader : NightVision }); } function createTextureOverlayStage() { - var url = buildModuleUrl('Assets/Textures/moonSmall.jpg'); - var uniformValues = { - alpha : 0.5, - texture : url - }; - - var fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'uniform float u_alpha; \n' + - 'uniform sampler2D u_texture; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec4 screen = texture2D(u_colorTexture, v_textureCoordinates); \n' + - ' vec4 color = texture2D(u_texture, v_textureCoordinates); \n' + - ' gl_FragColor = vec4(mix(screen.rgb, color.rgb, u_alpha * color.a), 1.0); \n' + - '} \n'; - return new PostProcessStage({ - fragmentShader : fragmentShader, - uniformValues : uniformValues + fragmentShader : TextureOverlay, + uniformValues : { + alpha : 0.5, + texture : buildModuleUrl('Assets/Textures/moonSmall.jpg') + } }); } @@ -299,222 +225,23 @@ define([ } function createDepthViewStage() { - var fragmentShader = - 'uniform sampler2D u_depthTexture; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + - ' gl_FragColor = vec4(vec3(depth), 1.0); \n' + - '} \n'; return new PostProcessStage({ - fragmentShader : fragmentShader - }); - } - - function createCompositeTestStage() { - var darkenShader = - 'uniform sampler2D u_colorTexture; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' vec3 color = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' gl_FragColor = vec4(color * 0.5, 1.0); \n' + - '} \n'; - var redShader = - 'uniform sampler2D u_colorTexture; \n' + - 'varying vec2 v_textureCoordinates; \n' + - 'void main(void) \n' + - '{ \n' + - ' float red = texture2D(u_colorTexture, v_textureCoordinates).r; \n' + - ' gl_FragColor = vec4(red, 0.0, 0.0, 1.0); \n' + - '} \n'; - var darkenStage = new PostProcessStage({ - fragmentShader : darkenShader - }); - var redStage = new PostProcessStage({ - fragmentShader : redShader + fragmentShader : DepthView }); - return new PostProcessCompositeStage([darkenStage, redStage]); } function createLensFlareStage() { - var urlDirt = buildModuleUrl('Assets/Textures/LensFlare/DirtMask.jpg'); - var urlStar = buildModuleUrl('Assets/Textures/LensFlare/StarBurst.jpg'); - var uniformValues = { - dirtTexture: urlDirt, - starTexture: urlStar, - intensity: 2.0, - distortion: 5.0, - ghostDispersal: 0.4, - haloWidth: 0.4, - earthRadius: 0.0 - }; - - var fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_dirtTexture; \n' + - 'uniform sampler2D u_starTexture; \n' + - 'uniform float u_distortion; \n' + - 'uniform float u_ghostDispersal; \n' + - 'uniform float u_haloWidth; \n' + - 'uniform float u_earthRadius; \n' + - 'uniform float u_intensity; \n' + - 'varying vec2 v_textureCoordinates; \n' + - - //whether it is in space or not - //6500000.0 is Emprical value - '#define DISTANCE_TO_SPACE 6500000.0 \n' + - - //return ndc from world coordinate biased earthRadius - 'vec4 getNDCFromWC(vec3 WC, float earthRadius) \n' + - '{ \n' + - ' vec4 positionWC = vec4(WC, 1.0); \n' + - ' vec4 positionEC = czm_view * positionWC; \n' + - ' positionEC = vec4(positionEC.x + earthRadius , positionEC.y, positionEC.z, 1.0); \n' + - ' positionWC = czm_eyeToWindowCoordinates(positionEC); \n' + - ' return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0); \n' + - '} \n' + - - //Check if current pixel is included Earth - //if then mask it gradually - 'float isInEarth(vec2 texcoord, vec2 sceneSize) \n' + - '{ \n' + - ' vec2 NDC = texcoord * 2.0 - 1.0; \n' + - ' vec4 earthPosSC = getNDCFromWC(vec3(0.0,0.0,0.0), 0.0); \n' + - ' vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0,0.0,0.0), u_earthRadius * 1.5); \n' + - ' NDC.xy -= earthPosSC.xy; \n' + - ' float X = abs(NDC.x)*sceneSize.x; \n' + - ' X *= X; \n' + - ' float Y = abs(NDC.y)*sceneSize.y; \n' + - ' Y *= Y; \n' + - ' return clamp(0.0, 1.0, max( sqrt(X + Y) / max(abs(earthPosSCEdge.x*sceneSize.x), 1.0) - 0.8 , 0.0)); \n' + - '} \n' + - - //For Chromatic effect - 'vec4 textureDistorted( \n' + - ' sampler2D tex, \n' + - ' vec2 texcoord, \n' + - ' vec2 direction, \n' + - ' vec3 distortion, \n' + - ' bool isSpace \n' + - ') \n' + - '{ \n' + - ' vec2 sceneSize = czm_viewport.zw; \n' + - ' float red = 0.0; \n' + - ' float green = 0.0; \n' + - ' float blue = 0.0; \n' + - ' if(isSpace) \n' + - ' { \n' + - 'red = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r; \n' + - 'green = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g; \n' + - 'blue = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b; \n' + - ' } \n' + - ' else \n' + - ' { \n' + - 'red = texture2D(tex, texcoord + direction * distortion.r).r; \n' + - 'green = texture2D(tex, texcoord + direction * distortion.g).g; \n' + - 'blue = texture2D(tex, texcoord + direction * distortion.b).b; \n' + - ' } \n' + - ' return vec4(clamp(red, 0.0, 1.0), clamp(green, 0.0, 1.0), clamp(blue, 0.0, 1.0), 0.0); \n' + - '} \n' + - - 'void main(void) \n' + - '{ \n' + - ' vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; \n' + - ' bool isSpace = true; \n' + - - ' if(length(czm_viewerPositionWC.xyz) < DISTANCE_TO_SPACE) \n' + - ' isSpace = false; \n' + - - //Sun position - ' vec4 sunPos; \n' + - ' if (czm_morphTime == 1.0) \n' + - ' { \n' + - ' sunPos = vec4(czm_sunPositionWC, 1.0); \n' + - ' } \n' + - ' else \n' + - ' { \n' + - ' sunPos = vec4(czm_sunPositionColumbusView.zxy, 1.0); \n' + - ' } \n' + - - ' vec4 sunPositionEC = czm_view * sunPos; \n' + - ' vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC); \n' + - ' sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0); \n' + - ' vec2 texcoord = -v_textureCoordinates + vec2(1.0); \n' + - ' vec2 texelSize = 1.0 / czm_viewport.zw; \n' + - ' vec3 distortion = vec3(-texelSize.x * u_distortion, 0.0, texelSize.x * u_distortion); \n' + - - // ghost vector to image centre: - ' vec2 ghostVec = (vec2(0.5) - texcoord) * u_ghostDispersal; \n' + - ' vec3 direction = normalize(vec3(ghostVec, 0.0)); \n' + - - // sample ghosts: - ' vec4 result = vec4(0.0); \n' + - ' vec4 ghost = vec4(0.0); \n' + - ' for (int i = 0; i < 4; ++i) \n' + - ' { \n' + - ' vec2 offset = fract(texcoord + ghostVec * float(i)); \n' + - // Only bright spots from the centre of the source image - ' ghost += textureDistorted(u_colorTexture, offset, direction.xy, distortion, isSpace); \n' + - ' } \n' + - ' result += ghost; \n' + - - // sample halo: - ' vec4 halo; \n' + - ' vec2 haloVec = normalize(ghostVec) * u_haloWidth; \n' + - ' float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5)); \n' + - ' weightForHalo = pow(1.0 - weightForHalo, 5.0); \n' + - ' halo = textureDistorted(u_colorTexture, texcoord + haloVec, direction.xy, distortion, isSpace) * weightForHalo * 1.5; \n' + - ' result += halo; \n' + - ' result += texture2D(u_dirtTexture, v_textureCoordinates); \n' + - - //Rotating starburst texture's coordinate - ' vec3 camx = vec3(czm_view[0][0], czm_view[0][1], czm_view[0][2] ); \n' + - ' vec3 camz = vec3(czm_view[1][0], czm_view[1][1], czm_view[1][2] ); \n' + - ' float camrot = dot(camx, vec3(0.0, 0.0, 1.0)) + dot(camz, vec3(0.0, 1.0, 0.0)); \n' + - ' float cosValue = cos(camrot); \n' + - ' float sinValue = sin(camrot); \n' + - ' mat3 rotation = mat3( \n' + - ' cosValue, -sinValue, 0.0, \n' + - ' sinValue, cosValue, 0.0, \n' + - ' 0.0, 0.0, 1.0 \n' + - ' ); \n' + - ' vec3 st1 = vec3(v_textureCoordinates, 1.0) * 2.0 - vec3(1.0); \n' + - ' st1.z = 1.0; \n' + - ' vec3 st2 = rotation * st1; \n' + - ' st2.z = 1.0; \n' + - ' vec3 st3 = st2 * 0.5 + vec3(0.5); \n' + - ' vec2 lensStarTexcoord = st3.xy; \n' + - ' float weightForLensFlare = length(vec3(sunPos.xy, 0.0)); \n' + - ' float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0); \n' + - ' if (!isSpace) \n' + - ' { \n' + - ' result *= oneMinusWeightForLensFlare * u_intensity * 0.2; \n' + - ' } \n' + - ' else \n' + - ' { \n' + - ' result *= oneMinusWeightForLensFlare * u_intensity; \n' + - ' result *= texture2D(u_starTexture, lensStarTexcoord) * pow(weightForLensFlare,1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0; \n' + - ' } \n' + - - //If sun is in the screen space, add lens flare effect - ' if( (sunPos.x >= -1.1 && sunPos.x <= 1.1) && \n' + - ' (sunPos.y >= -1.1 && sunPos.y <= 1.1) \n' + - ' ) \n' + - ' { \n' + - ' result += texture2D(u_colorTexture, v_textureCoordinates); \n' + - ' } \n' + - ' else \n' + - ' { \n' + - ' result = texture2D(u_colorTexture, v_textureCoordinates); \n' + - ' } \n' + - ' gl_FragColor = result; \n' + - ' } \n'; - return new PostProcessStage({ - fragmentShader: fragmentShader, - uniformValues: uniformValues + fragmentShader: LensFlare, + uniformValues: { + dirtTexture: buildModuleUrl('Assets/Textures/LensFlare/DirtMask.jpg'), + starTexture: buildModuleUrl('Assets/Textures/LensFlare/StarBurst.jpg'), + intensity: 2.0, + distortion: 5.0, + ghostDispersal: 0.4, + haloWidth: 0.4, + earthRadius: 0.0 + } }); } diff --git a/Source/Scene/PostProcessScene.js b/Source/Scene/PostProcessScene.js index fefb7fa55bd2..9f11027dee62 100644 --- a/Source/Scene/PostProcessScene.js +++ b/Source/Scene/PostProcessScene.js @@ -39,10 +39,6 @@ define([ * @inheritdoc PostProcessLibrary#depthView */ this.depthView = PostProcessLibrary.depthView; - /** - * @inheritdoc PostProcessLibrary#compositeTest - */ - this.compositeTest = PostProcessLibrary.compositeTest; /** * @inheritdoc PostProcessLibrary#ambientOcclusion */ @@ -73,7 +69,6 @@ define([ this.nightVision, this.textureOverlay, this.depthView, - this.compositeTest, this.ambientOcclusion, this.depthOfField, this.bloom, diff --git a/Source/Scene/PostProcessToonStage.js b/Source/Scene/PostProcessToonStage.js index 2da0fa9a8f76..08b91b04ccc0 100644 --- a/Source/Scene/PostProcessToonStage.js +++ b/Source/Scene/PostProcessToonStage.js @@ -1,4 +1,5 @@ define([ + '../Core/Color', '../Core/defineProperties', '../Core/destroyObject', '../Core/PixelFormat', @@ -10,9 +11,13 @@ define([ '../Renderer/TextureMagnificationFilter', '../Renderer/TextureMinificationFilter', '../Renderer/TextureWrap', + '../Shaders/PostProcessFilters/EdgeDetection', + '../Shaders/PostProcessFilters/Toon', + '../Shaders/PostProcessFilters/ToonComposite', './PostProcess', './PostProcessStage' ], function( + Color, defineProperties, destroyObject, PixelFormat, @@ -24,6 +29,9 @@ define([ TextureMagnificationFilter, TextureMinificationFilter, TextureWrap, + EdgeDetection, + Toon, + ToonComposite, PostProcess, PostProcessStage) { 'use strict'; @@ -42,14 +50,14 @@ define([ this._toonPostProcess = undefined; this._edgeDetectionUniformValues = { - len : 0.1 + len : 0.1, + color : Color.clone(Color.BLACK) }; this._toonUniformValues = {}; this._uniformValues = { - toonTexture : undefined, - toonOnly : true + toonTexture : undefined }; /** @@ -57,17 +65,7 @@ define([ */ this.show = false; - this._fragmentShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_toonTexture; \n' + - 'uniform bool u_toonOnly; \n' + - 'varying vec2 v_textureCoordinates; \n' + - - 'void main(void) \n' + - '{ \n' + - ' gl_FragColor = texture2D(u_toonTexture, v_textureCoordinates);\n' + - ' gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), texture2D(u_toonTexture, v_textureCoordinates), gl_FragColor.a);\n' + - '} \n'; + this._fragmentShader = ToonComposite; } defineProperties(PostProcessToonStage.prototype, { @@ -160,99 +158,13 @@ define([ var toonUniformValues = stage._toonUniformValues; - var toonShader = - '#extension GL_OES_standard_derivatives : enable \n' + - 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_depthTexture; \n' + - - 'varying vec2 v_textureCoordinates; \n' + - - 'vec2 ScreenToView(vec2 uv) \n' + - '{ \n' + - ' return vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y)*2.0 - 1.0)) ; \n' + - '} \n' + - - //Reconstruct Normal from View position - 'vec3 GetNormal(vec3 posInCamera) \n' + - '{ \n' + - ' vec3 d1 = dFdx(posInCamera); \n' + - ' vec3 d2 = dFdy(posInCamera); \n' + - ' return normalize(cross(d2, d1)); \n' + - '} \n' + - - 'float LinearDepth(float depth) \n' + - '{ \n' + - ' float far= czm_currentFrustum.y; \n' + - ' float near = czm_currentFrustum.x; \n' + - ' return (2.0 * near) / (far + near - depth * (far - near)); \n' + - '} \n' + - - 'void main(void) \n' + - '{ \n' + - ' float depth = texture2D(u_depthTexture, v_textureCoordinates).r; \n' + - ' vec4 posInCamera = czm_inverseProjection * vec4(ScreenToView(v_textureCoordinates), depth, 1.0); \n' + - ' posInCamera = posInCamera / posInCamera.w; \n' + - ' vec3 normalInCamera = GetNormal(posInCamera.xyz); \n' + - ' vec4 normalInWorld = czm_inverseView * vec4(normalInCamera, 0.0); \n' + - ' depth = LinearDepth(depth); \n' + - ' gl_FragColor = vec4(depth);\n' + - '} \n'; - - var edgeDetectionShader = - 'uniform sampler2D u_colorTexture; \n' + - 'uniform sampler2D u_depthTexture; \n' + - 'uniform float u_len; \n' + - 'uniform float u_stepSize; \n' + - 'precision highp float; \n' + - - 'varying vec2 v_textureCoordinates; \n' + - - 'void main(void) \n' + - '{ \n' + - - 'float padx = 1.0 / czm_viewport.z; \n' + - 'float pady = 1.0 / czm_viewport.w; \n' + - - 'float horizEdge = 0.0; \n' + - - 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + - 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, 0.0)).x * 10.0; \n' + - 'horizEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, pady)).x * 3.0; \n' + - - 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + - 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, 0.0)).x * 10.0; \n' + - 'horizEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + - - 'float vertEdge = 0.0; \n' + - - 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, -pady)).x * 3.0; \n' + - 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, -pady)).x * 10.0; \n' + - 'vertEdge -= texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, -pady)).x * 3.0; \n' + - - 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(-padx, pady)).x * 3.0; \n' + - 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(0.0, pady)).x * 10.0; \n' + - 'vertEdge += texture2D(u_depthTexture, v_textureCoordinates+ vec2(padx, pady)).x * 3.0; \n' + - - 'float len = sqrt(horizEdge*horizEdge + vertEdge*vertEdge); \n' + - - 'if (len > u_len) \n' + - '{ \n' + - ' gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); \n' + - '} \n' + - 'else \n' + - '{ \n' + - ' gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); \n' + - '} \n' + - - '} \n'; - var toonStage = new PostProcessStage({ - fragmentShader : toonShader, + fragmentShader : Toon, uniformValues: toonUniformValues }); var edgeDetectionStage = new PostProcessStage({ - fragmentShader : edgeDetectionShader, + fragmentShader : EdgeDetection, uniformValues: edgeDetectionUniformValues }); diff --git a/Source/Shaders/PostProcessFilters/BlackAndWhite.glsl b/Source/Shaders/PostProcessFilters/BlackAndWhite.glsl new file mode 100644 index 000000000000..8419c7ae90c4 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/BlackAndWhite.glsl @@ -0,0 +1,13 @@ +uniform sampler2D u_colorTexture; +uniform float u_gradations; + +varying vec2 v_textureCoordinates; + +void main(void) +{ + vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; + float luminance = czm_luminance(rgb); + float darkness = luminance * u_gradations; + darkness = (darkness - fract(darkness)) / u_gradations; + gl_FragColor = vec4(vec3(darkness), 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/Brightness.glsl b/Source/Shaders/PostProcessFilters/Brightness.glsl new file mode 100644 index 000000000000..fabaabc0d35c --- /dev/null +++ b/Source/Shaders/PostProcessFilters/Brightness.glsl @@ -0,0 +1,11 @@ +uniform sampler2D u_colorTexture; +uniform float u_brightness; + +varying vec2 v_textureCoordinates; + +void main(void) +{ + vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; + vec3 target = vec3(0.0); + gl_FragColor = vec4(mix(target, rgb, u_brightness), 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/DepthView.glsl b/Source/Shaders/PostProcessFilters/DepthView.glsl new file mode 100644 index 000000000000..9024d668c44d --- /dev/null +++ b/Source/Shaders/PostProcessFilters/DepthView.glsl @@ -0,0 +1,9 @@ +uniform sampler2D u_depthTexture; + +varying vec2 v_textureCoordinates; + +void main(void) +{ + float depth = texture2D(u_depthTexture, v_textureCoordinates).r; + gl_FragColor = vec4(vec3(depth), 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/EdgeDetection.glsl b/Source/Shaders/PostProcessFilters/EdgeDetection.glsl new file mode 100644 index 000000000000..6908159f87b0 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/EdgeDetection.glsl @@ -0,0 +1,41 @@ +uniform sampler2D u_colorTexture; +uniform sampler2D u_depthTexture; +uniform float u_len; +uniform float u_stepSize; +uniform vec4 u_color; + +varying vec2 v_textureCoordinates; + +void main(void) +{ + float directions[3]; + directions[0] = -1.0; + directions[1] = 0.0; + directions[2] = 1.0; + + float scalars[3]; + scalars[0] = 3.0; + scalars[1] = 10.0; + scalars[2] = 3.0; + + float padx = 1.0 / czm_viewport.z; + float pady = 1.0 / czm_viewport.w; + + float horizEdge = 0.0; + float vertEdge = 0.0; + + for (int i = 0; i < 3; ++i) { + float dir = directions[i]; + float scale = scalars[i]; + + horizEdge -= texture2D(u_depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale; + horizEdge += texture2D(u_depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale; + + vertEdge -= texture2D(u_depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale; + vertEdge += texture2D(u_depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale; + } + + float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); + float alpha = len > u_len ? 1.0 : 0.0; + gl_FragColor = vec4(u_color.rgb, alpha); +} diff --git a/Source/Shaders/PostProcessFilters/EightBit.glsl b/Source/Shaders/PostProcessFilters/EightBit.glsl new file mode 100644 index 000000000000..94610eef31cb --- /dev/null +++ b/Source/Shaders/PostProcessFilters/EightBit.glsl @@ -0,0 +1,21 @@ +uniform sampler2D u_colorTexture; + +varying vec2 v_textureCoordinates; + +const int KERNEL_WIDTH = 16; + +void main(void) +{ + vec2 step = 1.0 / czm_viewport.zw; + vec2 integralPos = v_textureCoordinates - mod(v_textureCoordinates, 8.0 * step); + vec3 averageValue = vec3(0.0); + for (int i = 0; i < KERNEL_WIDTH; i++) + { + for (int j = 0; j < KERNEL_WIDTH; j++) + { + averageValue += texture2D(u_colorTexture, integralPos + step * vec2(i, j)).rgb; + } + } + averageValue /= float(KERNEL_WIDTH * KERNEL_WIDTH); + gl_FragColor = vec4(averageValue, 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/LensFlare.glsl b/Source/Shaders/PostProcessFilters/LensFlare.glsl new file mode 100644 index 000000000000..c71e1a1d96dc --- /dev/null +++ b/Source/Shaders/PostProcessFilters/LensFlare.glsl @@ -0,0 +1,137 @@ +uniform sampler2D u_colorTexture; +uniform sampler2D u_dirtTexture; +uniform sampler2D u_starTexture; +uniform float u_distortion; +uniform float u_ghostDispersal; +uniform float u_haloWidth; +uniform float u_earthRadius; +uniform float u_intensity; + +varying vec2 v_textureCoordinates; + +// whether it is in space or not +// 6500000.0 is Emprical value +#define DISTANCE_TO_SPACE 6500000.0 + +// return ndc from world coordinate biased earthRadius +vec4 getNDCFromWC(vec3 WC, float earthRadius) +{ + vec4 positionEC = czm_view * vec4(WC, 1.0); + positionEC = vec4(positionEC.x + earthRadius , positionEC.y, positionEC.z, 1.0); + vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); + return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0); +} + +// Check if current pixel is included Earth +// if then mask it gradually +float isInEarth(vec2 texcoord, vec2 sceneSize) +{ + vec2 NDC = texcoord * 2.0 - 1.0; + vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0); + vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), u_earthRadius * 1.5); + NDC.xy -= earthPosSC.xy; + + float X = abs(NDC.x) * sceneSize.x; + float Y = abs(NDC.y) * sceneSize.y; + + return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0)); +} + +// For Chromatic effect +vec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace) +{ + vec2 sceneSize = czm_viewport.zw; + vec3 color; + if(isSpace) + { + color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r; + color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g; + color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b; + } + else + { + color.r = texture2D(tex, texcoord + direction * distortion.r).r; + color.g = texture2D(tex, texcoord + direction * distortion.g).g; + color.b = texture2D(tex, texcoord + direction * distortion.b).b; + } + return vec4(clamp(color, 0.0, 1.0), 0.0); +} + +void main(void) +{ + vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; + bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE; + + // Sun position + vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0); + vec4 sunPositionEC = czm_view * sunPos; + vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC); + sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0); + + vec2 texcoord = -v_textureCoordinates + vec2(1.0); + vec2 texelSize = 1.0 / czm_viewport.zw; + vec3 distortion = vec3(-texelSize.x * u_distortion, 0.0, texelSize.x * u_distortion); + + // ghost vector to image centre: + vec2 ghostVec = (vec2(0.5) - texcoord) * u_ghostDispersal; + vec3 direction = normalize(vec3(ghostVec, 0.0)); + + // sample ghosts: + vec4 result = vec4(0.0); + vec4 ghost = vec4(0.0); + for (int i = 0; i < 4; ++i) + { + vec2 offset = fract(texcoord + ghostVec * float(i)); + // Only bright spots from the centre of the source image + ghost += textureDistorted(u_colorTexture, offset, direction.xy, distortion, isSpace); + } + result += ghost; + + // sample halo + vec2 haloVec = normalize(ghostVec) * u_haloWidth; + float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5)); + weightForHalo = pow(1.0 - weightForHalo, 5.0); + + result += textureDistorted(u_colorTexture, texcoord + haloVec, direction.xy, distortion, isSpace) * weightForHalo * 1.5; + result += texture2D(u_dirtTexture, v_textureCoordinates); + + // Rotating starburst texture's coordinate + // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0)) + float camrot = czm_view[0].z + czm_view[1].y; + float cosValue = cos(camrot); + float sinValue = sin(camrot); + mat3 rotation = mat3( + cosValue, -sinValue, 0.0, + sinValue, cosValue, 0.0, + 0.0, 0.0, 1.0 + ); + + vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0); + vec3 st2 = vec3((rotation * st1).xy, 1.0); + vec3 st3 = st2 * 0.5 + vec3(0.5); + vec2 lensStarTexcoord = st3.xy; + float weightForLensFlare = length(vec3(sunPos.xy, 0.0)); + float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0); + + if (!isSpace) + { + result *= oneMinusWeightForLensFlare * u_intensity * 0.2; + } + else + { + result *= oneMinusWeightForLensFlare * u_intensity; + result *= texture2D(u_starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0; + } + + // If sun is in the screen space, add lens flare effect + if( (sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)) + { + result += texture2D(u_colorTexture, v_textureCoordinates); + } + else + { + result = texture2D(u_colorTexture, v_textureCoordinates); + } + + gl_FragColor = result; +} diff --git a/Source/Shaders/PostProcessFilters/NightVision.glsl b/Source/Shaders/PostProcessFilters/NightVision.glsl new file mode 100644 index 000000000000..519620160781 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/NightVision.glsl @@ -0,0 +1,16 @@ +uniform sampler2D u_colorTexture; + +varying vec2 v_textureCoordinates; + +float rand(vec2 co) +{ + return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453); +} + +void main(void) +{ + float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1; + vec3 rgb = texture2D(u_colorTexture, v_textureCoordinates).rgb; + vec3 green = vec3(0.0, 1.0, 0.0); + gl_FragColor = vec4((noiseValue + rgb) * green, 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/TextureOverlay.glsl b/Source/Shaders/PostProcessFilters/TextureOverlay.glsl new file mode 100644 index 000000000000..54d9566a7cbf --- /dev/null +++ b/Source/Shaders/PostProcessFilters/TextureOverlay.glsl @@ -0,0 +1,12 @@ +uniform sampler2D u_colorTexture; +uniform float u_alpha; +uniform sampler2D u_texture; + +varying vec2 v_textureCoordinates; + +void main(void) +{ + vec4 screen = texture2D(u_colorTexture, v_textureCoordinates); + vec4 color = texture2D(u_texture, v_textureCoordinates); + gl_FragColor = vec4(mix(screen.rgb, color.rgb, u_alpha * color.a), 1.0); +} diff --git a/Source/Shaders/PostProcessFilters/Toon.glsl b/Source/Shaders/PostProcessFilters/Toon.glsl new file mode 100644 index 000000000000..4c98942897c8 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/Toon.glsl @@ -0,0 +1,39 @@ +#extension GL_OES_standard_derivatives : enable + +uniform sampler2D u_colorTexture; +uniform sampler2D u_depthTexture; + +varying vec2 v_textureCoordinates; + +vec4 clipToEye(vec2 uv, float depth) +{ + vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0)); + vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0); + posEC = posEC / posEC.w; + return posEC; +} + +//Reconstruct normal from view position +vec3 getNormal(vec3 posInCamera) +{ + vec3 d1 = dFdx(posInCamera); + vec3 d2 = dFdy(posInCamera); + return normalize(cross(d2, d1)); +} + +float linearDepth(float depth) +{ + float far = czm_currentFrustum.y; + float near = czm_currentFrustum.x; + return (2.0 * near) / (far + near - depth * (far - near)); +} + +void main(void) +{ + float depth = texture2D(u_depthTexture, v_textureCoordinates).r; + vec4 posInCamera = clipToEye(v_textureCoordinates, depth); + vec3 normalInCamera = getNormal(posInCamera.xyz); + vec4 normalInWorld = czm_inverseView * vec4(normalInCamera, 0.0); + depth = linearDepth(depth); + gl_FragColor = vec4(depth); +} diff --git a/Source/Shaders/PostProcessFilters/ToonComposite.glsl b/Source/Shaders/PostProcessFilters/ToonComposite.glsl new file mode 100644 index 000000000000..0a78d0cc2532 --- /dev/null +++ b/Source/Shaders/PostProcessFilters/ToonComposite.glsl @@ -0,0 +1,10 @@ +uniform sampler2D u_colorTexture; +uniform sampler2D u_toonTexture; + +varying vec2 v_textureCoordinates; + +void main(void) +{ + vec4 toonColor = texture2D(u_toonTexture, v_textureCoordinates); + gl_FragColor = mix(texture2D(u_colorTexture, v_textureCoordinates), toonColor, toonColor.a); +} From ee72f6a51fcdd49bb3a0186864f203e3409ca76a Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Tue, 24 Oct 2017 19:03:14 -0400 Subject: [PATCH 26/99] Remove dup blur shaders and move the rest to their own GLSL files. --- Apps/Sandcastle/gallery/Depth of Field.html | 13 +- Apps/Sandcastle/gallery/LensFlare.html | 10 +- .../Scene/PostProcessAmbientOcclusionStage.js | 18 +- Source/Scene/PostProcessBloomStage.js | 335 ++++-------------- Source/Scene/PostProcessDepthOfFieldStage.js | 303 +++------------- Source/Scene/PostProcessScene.js | 2 +- Source/Scene/PostProcessToonStage.js | 14 +- .../PostProcessFilters/BloomComposite.glsl | 12 + .../PostProcessFilters/ContrastBias.glsl | 17 + .../PostProcessFilters/GaussianBlur1D.glsl | 5 +- Source/Shaders/PostProcessFilters/Toon.glsl | 2 +- 11 files changed, 164 insertions(+), 567 deletions(-) create mode 100644 Source/Shaders/PostProcessFilters/BloomComposite.glsl create mode 100644 Source/Shaders/PostProcessFilters/ContrastBias.glsl diff --git a/Apps/Sandcastle/gallery/Depth of Field.html b/Apps/Sandcastle/gallery/Depth of Field.html index bc937a4653e9..8ffb9cbc7e53 100644 --- a/Apps/Sandcastle/gallery/Depth of Field.html +++ b/Apps/Sandcastle/gallery/Depth of Field.html @@ -42,12 +42,6 @@ - - Step Size - - - - - -
-

Loading...

-
- - - - - - - - - - - - - - - - - - - - - - - - -
Lens Flare - -
Intensity - -
Distortion - -
Dispersion - -
Halo Width - -
-
+ +
+

Loading...

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Lens Flare
Intensity
Distortion
Dispersion
Halo Width
+
diff --git a/Apps/Sandcastle/gallery/Bloom.html b/Apps/Sandcastle/gallery/Bloom.html index 49b38c3f6643..b249b805deac 100644 --- a/Apps/Sandcastle/gallery/Bloom.html +++ b/Apps/Sandcastle/gallery/Bloom.html @@ -5,7 +5,7 @@ - + Cesium Demo diff --git a/Apps/Sandcastle/gallery/Depth of Field.html b/Apps/Sandcastle/gallery/Depth of Field.html index 78439a3cb689..5c3a08e04502 100644 --- a/Apps/Sandcastle/gallery/Depth of Field.html +++ b/Apps/Sandcastle/gallery/Depth of Field.html @@ -5,7 +5,7 @@ - + Cesium Demo diff --git a/Apps/Sandcastle/gallery/LensFlare.html b/Apps/Sandcastle/gallery/LensFlare.html index 2b8252051b83..f6c8f9c6acd9 100644 --- a/Apps/Sandcastle/gallery/LensFlare.html +++ b/Apps/Sandcastle/gallery/LensFlare.html @@ -5,7 +5,7 @@ - + Cesium Demo diff --git a/Apps/Sandcastle/gallery/Post Processing.html b/Apps/Sandcastle/gallery/Post Processing.html index 5879af0430b5..8e26f3ae4bca 100644 --- a/Apps/Sandcastle/gallery/Post Processing.html +++ b/Apps/Sandcastle/gallery/Post Processing.html @@ -5,7 +5,7 @@ - + Cesium Demo @@ -25,12 +25,16 @@
- + + + + + - + @@ -49,8 +53,16 @@ 'use strict'; //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); -var scene = viewer.scene; -scene.globe.depthTestAgainstTerrain = true; + +var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706); +var url = '../../SampleData/models/CesiumMan/Cesium_Man.glb'; +viewer.trackedEntity = viewer.entities.add({ + name : url, + position : position, + model : { + uri : url + } +}); var viewModel = { blackAndWhiteShow: false, @@ -58,7 +70,8 @@ brightnessShow: false, brightnessValue: 0.5, eightBitShow: false, - nightVisionShow: false + nightVisionShow: false, + silhouette : false }; Cesium.knockout.track(viewModel); @@ -71,12 +84,15 @@ } var collection = viewer.scene.postProcessStages; +var silhouette = viewer.scene.postProcessStages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage()); var blackAndWhite = collection.add(Cesium.PostProcessStageLibrary.createBlackAndWhiteStage()); var brightness = collection.add(Cesium.PostProcessStageLibrary.createBrightnessStage()); var eightBit = collection.add(Cesium.PostProcessStageLibrary.createEightBitStage()); var nightVision = collection.add(Cesium.PostProcessStageLibrary.createNightVisionStage()); function updatePostProcess() { + silhouette.enabled = Boolean(viewModel.silhouette); + silhouette.uniforms.color = Cesium.Color.YELLOW; blackAndWhite.enabled = Boolean(viewModel.blackAndWhiteShow); blackAndWhite.uniforms.gradations = Number(viewModel.blackAndWhiteGradations); brightness.enabled = Boolean(viewModel.brightnessShow); diff --git a/Apps/Sandcastle/gallery/Silhouette.jpg b/Apps/Sandcastle/gallery/Post Processing.jpg similarity index 100% rename from Apps/Sandcastle/gallery/Silhouette.jpg rename to Apps/Sandcastle/gallery/Post Processing.jpg diff --git a/Apps/Sandcastle/gallery/Silhouette.html b/Apps/Sandcastle/gallery/Silhouette.html deleted file mode 100644 index 7291b054aa4a..000000000000 --- a/Apps/Sandcastle/gallery/Silhouette.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - Cesium Demo - - - - - - -
-

Loading...

-
-
blackAndWhiteSilhouette
Black and White
brightnessBrightness
- - - - -
Silhouette
-
- - - From 400c5fc951633836934e37f49d25ee1449fc34ca Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 31 Jan 2018 15:18:24 -0500 Subject: [PATCH 79/99] Rename executeInSeries -> inputPreviousStageTexture. --- Source/Scene/PostProcessStageCollection.js | 2 +- Source/Scene/PostProcessStageComposite.js | 26 ++++++++++---------- Source/Scene/PostProcessStageLibrary.js | 8 +++--- Source/Scene/PostProcessStageTextureCache.js | 2 +- Specs/Scene/PostProcessStageCompositeSpec.js | 14 +++++------ 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Source/Scene/PostProcessStageCollection.js b/Source/Scene/PostProcessStageCollection.js index 9cfd00a57852..a98fc974f716 100644 --- a/Source/Scene/PostProcessStageCollection.js +++ b/Source/Scene/PostProcessStageCollection.js @@ -550,7 +550,7 @@ define([ var length = stage.length; var i; - if (stage.executeInSeries) { + if (stage.inputPreviousStageTexture) { execute(stage.get(0), context, colorTexture, depthTexture); for (i = 1; i < length; ++i) { execute(stage.get(i), context, getOutputTexture(stage.get(i - 1)), depthTexture); diff --git a/Source/Scene/PostProcessStageComposite.js b/Source/Scene/PostProcessStageComposite.js index cdd6ecf837f4..448298191a4e 100644 --- a/Source/Scene/PostProcessStageComposite.js +++ b/Source/Scene/PostProcessStageComposite.js @@ -17,9 +17,9 @@ define([ /** * A collection of {@link PostProcessStage}s or other post-process composite stages that execute together logically. *

- * All stages are executed in the order of the array. The input texture changes based on the value of executeInSeries. - * If executeInSeries is true, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it. - * If executeInseries is false, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene + * All stages are executed in the order of the array. The input texture changes based on the value of inputPreviousStageTexture. + * If inputPreviousStageTexture is true, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it. + * If inputPreviousStageTexture is false, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene * or the output texture of the previous stage. *

* @@ -28,7 +28,7 @@ define([ * * @param {Object} options An object with the following properties: * @param {Array} options.stages An array of {@link PostProcessStage}s or composites to be executed in order. - * @param {Boolean} [options.executeInSeries=true] Whether to execute each post-process stage where the input to one stage is the output of the previous. Otherwise, the input to each contained stage is the output of the stage that executed before the composite. + * @param {Boolean} [options.inputPreviousStageTexture=true] Whether to execute each post-process stage where the input to one stage is the output of the previous. Otherwise, the input to each contained stage is the output of the stage that executed before the composite. * @param {String} [options.name=createGuid()] The unique name of this post-process stage for reference by other composites. If a name is not supplied, a GUID will be generated. * @param {Object} [options.uniforms] An alias to the uniforms of post-process stages. * @@ -47,15 +47,15 @@ define([ * @example * // Example 2: referencing the output of another post-process stage * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({ - * executeInSeries : false, + * inputPreviousStageTexture : false, * stages : [ * // The same as Example 1. * new Cesium.PostProcessStageComposite({ - * executeInSeries : true + * inputPreviousStageTexture : true * stages : [blurXDirection, blurYDirection], * name : 'blur' * }), - * // The input texture for this stage is the same input texture to blurXDirection since executeInSeries is false + * // The input texture for this stage is the same input texture to blurXDirection since inputPreviousStageTexture is false * new Cesium.PostProcessStage({ * fragmentShader : compositeShader, * uniforms : { @@ -92,7 +92,7 @@ define([ //>>includeEnd('debug'); this._stages = options.stages; - this._executeInSeries = defaultValue(options.executeInSeries, true); + this._inputPreviousStageTexture = defaultValue(options.inputPreviousStageTexture, true); var name = options.name; if (!defined(name)) { @@ -168,18 +168,18 @@ define([ } }, /** - * All post-process stages are executed in the order of the array. The input texture changes based on the value of executeInSeries. - * If executeInSeries is true, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it. - * If executeInseries is false, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene + * All post-process stages are executed in the order of the array. The input texture changes based on the value of inputPreviousStageTexture. + * If inputPreviousStageTexture is true, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it. + * If inputPreviousStageTexture is false, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene * or the output texture of the previous stage. * * @memberof PostProcessStageComposite.prototype * @type {Boolean} * @readonly */ - executeInSeries : { + inputPreviousStageTexture : { get : function() { - return this._executeInSeries; + return this._inputPreviousStageTexture; } }, /** diff --git a/Source/Scene/PostProcessStageLibrary.js b/Source/Scene/PostProcessStageLibrary.js index 9bf58edd1d06..3395b625a834 100644 --- a/Source/Scene/PostProcessStageLibrary.js +++ b/Source/Scene/PostProcessStageLibrary.js @@ -213,7 +213,7 @@ define([ return new PostProcessStageComposite({ name : 'czm_depth_of_field', stages : [blur, dof], - executeInSeries : false, + inputPreviousStageTexture : false, uniforms : uniforms }); }; @@ -279,7 +279,7 @@ define([ return new PostProcessStageComposite({ name : 'czm_silhouette', stages : [silhouetteGenerateProcess, silhouetteProcess], - executeInSeries : false, + inputPreviousStageTexture : false, uniforms : uniforms }); }; @@ -386,7 +386,7 @@ define([ return new PostProcessStageComposite({ name : 'czm_bloom', stages : [generateComposite, bloomComposite], - executeInSeries : false, + inputPreviousStageTexture : false, uniforms : uniforms }); }; @@ -539,7 +539,7 @@ define([ return new PostProcessStageComposite({ name : 'czm_ambient_occlusion', stages : [generateAndBlur, ambientOcclusionModulate], - executeInSeries : false, + inputPreviousStageTexture : false, uniforms : uniforms }); }; diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index 532f94c93b8e..cc820f24d6b5 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -75,7 +75,7 @@ define([ return previousName; } - var inSeries = !defined(composite.executeInSeries) || composite.executeInSeries; + var inSeries = !defined(composite.inputPreviousStageTexture) || composite.inputPreviousStageTexture; var currentName = previousName; var length = composite.length; for (var i = 0; i < length; ++i) { diff --git a/Specs/Scene/PostProcessStageCompositeSpec.js b/Specs/Scene/PostProcessStageCompositeSpec.js index edec20827da7..0f2c625c3eae 100644 --- a/Specs/Scene/PostProcessStageCompositeSpec.js +++ b/Specs/Scene/PostProcessStageCompositeSpec.js @@ -40,20 +40,20 @@ defineSuite([ } } }; - var executeInSeries = false; + var inputPreviousStageTexture = false; var name = 'kaleidoscope'; var composite = new PostProcessStageComposite({ stages : [stage], uniforms : uniforms, - executeInSeries : executeInSeries, + inputPreviousStageTexture : inputPreviousStageTexture, name : name }); expect(composite.ready).toEqual(false); expect(composite.name).toEqual(name); expect(composite.enabled).toEqual(true); expect(composite.uniforms).toEqual(uniforms); - expect(composite.executeInSeries).toEqual(executeInSeries); + expect(composite.inputPreviousStageTexture).toEqual(inputPreviousStageTexture); expect(composite.length).toEqual(1); }); @@ -71,7 +71,7 @@ defineSuite([ expect(composite.name).toBeDefined(); expect(composite.enabled).toEqual(true); expect(composite.uniforms).not.toBeDefined(); - expect(composite.executeInSeries).toEqual(true); + expect(composite.inputPreviousStageTexture).toEqual(true); expect(composite.length).toEqual(2); }); @@ -116,7 +116,7 @@ defineSuite([ }).toThrowDeveloperError(); }); - it('renders with executeInSeries is true', function() { + it('renders with inputPreviousStageTexture is true', function() { var stage1 = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' }); @@ -138,7 +138,7 @@ defineSuite([ expect(scene).toRender([255, 0, 255, 255]); }); - it('renders with executeInSeries is false', function() { + it('renders with inputPreviousStageTexture is false', function() { var stage1 = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' }); @@ -152,7 +152,7 @@ defineSuite([ }); var composite = new PostProcessStageComposite({ stages : [stage1, stage2], - executeInSeries : false + inputPreviousStageTexture : false }); expect(scene).toRender([0, 0, 0, 255]); From 55ee44636173d0c0eb48ace878907b9df9e46962 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 31 Jan 2018 17:17:52 -0500 Subject: [PATCH 80/99] Update CHANGES.md. --- CHANGES.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index f6942fedeacc..2170c17c8924 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,18 @@ Change Log ========== +### 1.42 - 2018-03-01 + +* Added a post-processing framework. [#5615](https://github.com/AnalyticalGraphicsInc/cesium/pull/5615) + * Added `Scene.postProcessStages` which is a collection of post-process stages to be run in order. + * Has a built-in `ambientOcclusion` property which will apply screen space ambient occlusion to the scene and run before all stages. + * Has a built-in `bloom` property which applies a bloom filter to the scene before all other stages but after the ambient occlusion stage. + * Has a built-in `fxaa` property which applies Fast Approximate Anti-aliasing (FXAA) to the scene after all other stages. + * Added `PostProcessStageLibrary` which contains several built-in stages that can be added to the collection. + * Added `PostProcessStage` which takes a fragment shader that processes the color and depth texture from the stage run before it. + * Added `PostProcessStageComposite` for multi-stage post-processes like depth of field. + * Added a new Sandcastle label `Post Processing` to showcase the different built-in post-process stages. + ### 1.42 - 2018-02-01 * Breaking changes From ac71370ab9afe68f957a307099e33c088a7b0c8f Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Fri, 2 Feb 2018 16:17:05 -0500 Subject: [PATCH 81/99] Update Sandcastle example from review. --- .../Sandcastle/gallery/Ambient Occlusion.html | 14 +++++++------- Apps/Sandcastle/gallery/Ambient Occlusion.jpg | Bin 15962 -> 11175 bytes .../PostProcessStages/DepthViewPacked.glsl | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html index 8d90ed40e053..eaeb789e3f4d 100644 --- a/Apps/Sandcastle/gallery/Ambient Occlusion.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -69,8 +69,8 @@ ambientOcclusionOnly : false, intensity : 3.0, bias : 0.1, - lengthCap : 0.26, - stepSize : 1.95, + lengthCap : 0.03, + stepSize : 1.0, blurStepSize : 0.86 }; @@ -85,7 +85,7 @@ function updatePostProcess() { var ambientOcclusion = viewer.scene.postProcessStages.ambientOcclusion; - ambientOcclusion.enabled = Boolean(viewModel.show); + ambientOcclusion.enabled = Boolean(viewModel.show) || Boolean(viewModel.ambientOcclusionOnly); ambientOcclusion.uniforms.ambientOcclusionOnly = Boolean(viewModel.ambientOcclusionOnly); ambientOcclusion.uniforms.intensity = Number(viewModel.intensity); ambientOcclusion.uniforms.bias = Number(viewModel.bias); @@ -96,10 +96,10 @@ updatePostProcess(); var camera = viewer.scene.camera; -camera.position = new Cesium.Cartesian3(1234121.9491740603, -5086009.253843431, 3633365.2993020345); -camera.direction = new Cesium.Cartesian3(-0.17858981588454467, -0.2750910876938125, -0.9446854350172652); -camera.up = new Cesium.Cartesian3(0.13955391921919083, -0.9574962548451945, 0.2524393503160511); -camera.right = Cesium.Cartesian3.cross(camera.direction, camera.up, new Cesium.Cartesian3()); +camera.position = new Cesium.Cartesian3(1234127.2294710164, -5086011.666443127, 3633337.0413351045); +camera.direction = new Cesium.Cartesian3(-0.5310064396211631, -0.30299013818088416, -0.7913464078682514); +camera.right = new Cesium.Cartesian3(-0.8468592075426076, 0.1574051185945647, 0.507989282604011); +camera.up = Cesium.Cartesian3.cross(camera.right, camera.direction, new Cesium.Cartesian3()); //Sandcastle_End Sandcastle.finishedLoading(); diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.jpg b/Apps/Sandcastle/gallery/Ambient Occlusion.jpg index 1def00452b9da05a17a2d6785fa2302059091700..754e5ca7cda955e031258905da879997f9a2a63d 100644 GIT binary patch delta 10642 zcmY*+1*;2O15{j(J&LCt<2$h|LvW>AD3|~vgI^>5e8QEnS`@V0JWZ!o) zqlAVTTN7hE{?DuDd2xR}=jFNY`&{R`&UK$fc!^oH=Oy5%BTJY6hnGx$&g&aeFEgIE zX(Fmy4pm>5LK;4hHOpN6pAQR~Y?)o7F9O;p1PjhV+{rKS1+5>oR_0Wim57(H3@xj4wS6?pFJTFsY+T93#|{a;b4?180Nnvy0r?X@ z25s&aN;AnrfoHR7VY^2*ntBIE&iN58=C#_$?vA=W3pEz-y|Y?@7Aw5=z&hVwDXNzwZ%eGhS- z+;xDRBwT2Emy2@U6#M&rbGrFCsBUUl+gl^#N{D=+C7l}EYBRiH^mfc&PtjkJSNONi zK?KtdcW<7MhjJ>9WvGtuEXI$o1P0&@V7`0Q=Ha5K&!xRNcixF9po~#MXBD_xBs)z_ zvSml}IS3sE3QEtFoA0Aw&p{$TLlrF>{sLhVcdg00Ej@$UZWRq2jfk@eYk52a%be=9 zXyNeR`+eb{34EgkXZ9nr6v-vsE&Jq3*#8CmYM>s_3!ND>uxNt}o7Vkv{u zn4&?r2pv~qzl&36+-Qr{REicP_s<*%Na(qh{Tn?8HFOOo2CpL`fx{JjY*$=^TP4>Z z4_{MPOSNO;^wDpzOQ5=sM&i?E= z0@)Kv3J%Uh>_rinJqQPcGI_sYb;|HgftldmULVUz$c9wE_ zpW*K&LlpT$sj}j-dIpuGO27YY`8RYb6}qU#V|H<#V#OO!u~{GL0h;ZsY^WCu#+cgY=bT6QXiPkMcewK1GI2P(VoXGj2W7!z3CUIR&+ zw~uLbS!5#L5?KG0=z`%eit*z*Q^p)&?O*}Vrv2K6hZ!V%&q1$pg84$Rm(F=n?=_2XE-;;9Exmf*2^4|UFlo7?0-KC zQ*YYcAT2v18xtN5xhd2+zhe8u(C4+4<1Ml z>QiXz;@uXlf~fRcl>5SiDzI8c_nQuKhen49eO!^i)0^-)ruf(9zBkK(mFrHOgD`4! zlXK7GpGcQFzlqpT_kz9Hh7vPz_^!S1 z7a0bGK}98_voj-N!Kr*7PpjGgU8*C_K~X*>OWQRzOWNWaA2#X6DXg6etWi!Sq(CUY z9NO^ou{*j}OC0Ip=2`u6gScmK6ZpY(83y+X6kuA><9x4L(gE)fO%$SB4+Nu0_1?Ni z10fo%5hFOCtM*Z03h3ER2cq>gCNj&I0YgvQWF~O^jS2#@iMJ>u4P(>L@9*n0&GMUy zpc8(n_Mg1%c-xNZ25Lv+*Uv%mW}TACRkHdY$p57wM0vc~5AJuEgk9eUpobd8Rl#(qT4 zN2#dobKh?2Y?vY^yN*PyHKvyO+nk~`?{P#*RAO38fZovpqqhZUstfsN`pDE0mY!!a28N?vw32ek$) zT~Dkz8Wk}kR&c#^ir7|Jk-nYB$o4G}dYsiB`gGnx1Qg_$GgkzxZexeKrJnxVjZ{F1 zl8i&R$NHgc+wOlp)P9Jp{tc?ymSp}{RhpGpk)55AqIY&l8E^c|G|y6kI! zQpmuRz`bD&sR+=Wtg!l4-)gbRAw`GqsI8=5VY2Nt6a!Y?Mf8{aFhvyW&fr>qvel6D zem}=0j2?%;eq|3(yzm|?n0(WST0z#Xe}{XdPJ92K5MRuICbZOYYf*3M{v?$EqJ5gG z7w$9nmhiXl>}6G@*&pvm19U9i)<`Vc^$+E?zW8QerOIbxLAjl<7!d_L-qy+wtB>M# z2}+8`(l(!RFAsow*stahRLbYzv{xFMqQ&j&&Or$00%ia`>Rpg9PLtU7)ny^4YP?G^ zlty_|_NQe=WV-->HDX!$E$`KbRdj3${uSVtxbot^MXRf!rlY;V)V4LA4vqE6!#|#0 zb59^1R)_|#(5!B|MC%)>zlJP_hbPgjirD@XPXJ;la<#LS;PSPaKCpn>zid-MuiPLC z>%{W*qBzh_Pw~(3PgqyFWnr0HgGrPy2Gr))o$i7c=Ds~k4U<=(7OEao`D)`2;kB6D zXfksK_aqXR6r4`D>#c)6S)PNE*g;G2FmH_g3#!88&7~q(2|nf&wuP*njg<+ad@dc9 z=Kn_{?{qUA7eR&cCm^EQl`#u_g{jsncPPg&U^(YZw;PoJtT)gV+QB80j;h2Ro%8#H zKRI%*l;vCe;jL{#i;l$;L#oCMnxn^DGn(CN-1jflfR8FrAHL0Y5loD(>Mk(c&)FFX zME&79wShq~n^A|7*KBPy{A{#2eqJ|}3yVy(MGyl_q7RObNCBZ0MILxwhX>#IKOwvU zQq<|wtu=bGb*s&x;X%)Q?34>rps zp$Ao2khqm8w|r6Ppn$KgL-FudFl=i8b&tE3Cpckmg-`DUR zs%Tq_<>bi@*yt>BeJ92~Y(eFYbX|#47qgGicqDwOBRUmY9C7z?SWdEvTP~>$vopp* zvitMO`A&PBRnBYbtl#M~v;T@7ac6tpY#zI^OlrhobDPeJSRRrBFU9jKzEk;4?O;UI zIeziL&ByIg;8k{*&G#8syW1|n2z4r-2@CSGmle%DkFRPXWu?F67Srlez@qvV}Bpzu-<# zf)cRE?rZBN=Iu}{3T%(PPia?Ws!dqpdZ`?XH1gv3Mo9W@oP7hVmT|q@e zCbZH|WVobSL%Xb#k5}^X>}~*BpzNDa5<129C1z|f9^2T2&DJd<45U?Nrv6<*{#wA> zb_L+5Y?R*P=TSi&+66IktgzaNy0YF<4c-kRGT~VH;w3>scq5U3bLmQaOr!~ zNX>P&<(Qb6j?GqaIwAI&1Zw{<2?6hyUze9^exb%1ULjk7wHC61?q^P zQ--mK-KYdp4KLBJo>Wjn(XFl|9;TS?3k|&18xL?SWC_24Q8|3nma+}G(9VOT;k>P` zJDpcHbbhfE2)Okm{;@p;Fbq`hl& zf7A5+idExsv!jYSDm7G!Y)`5o#PkQ9gQ9)MSSrRK6&72^@{juI`dDI8kVPR;I0h47 zLd}_p$q4>RuD;ogzDG42N2E1|r;cFXdBgmqpGd z*tw!YmWW)|2cfri%+zoDFAVQj_uSzmuM>Xdv<5rhSG4ZCpAoEhnQ(h~W1Mzotyc06 zv4j+}o|IOxoeM#K*gNo2!RhLWw}FGqrr2JcgBU?j1KK1 z(tlv}Raj_G-gO6VKs3`OR8(^R+%SGhds6MamIm@YOu*;}v1VY@ZuMYC#B7$JQfe#9 z%_FZ#U(o}Wx%Cq+la`AM4rgu&HDqDx%JdTjGqLUv14mcjMtz5ya6 z6P2#wD=buK`JT@b zHav^t<=WzfHzRKYgXU%y?_9<5u3qB{ny!C-iRVgS3I0k|$$K*Rq%f&^X+Bb>%J3nr z>{i;wS|fXJ`Ch!;71__c29PGRhsn*`tJ74xf96irf!-~WgBO-V%;VLnkYh~H`e*?u z3KlRRc@>rhxMo9w<_5B!dG0*C`etI!Oo*HDO0eV~(_k+bfS_zRz9&=W8;@s`tR3bm zrcN2e>|_!4mWI*n6gCnP^V=69YS22HuiYNJ6NR4V*Brj}m>tZ00o8&DUtUgEis(#3 z`Fo^EJ7@foC1qPU$0s~#rr^~6aU+sb^`;&V;1?vIffgi&+iIu^!QY$}x=%VYHbC-4 z88XsE>jAwa(r&|+UA?cFT!0#_<8)KUhSGblZ+{+IbQpjFY~@H3#c*LF8%n-k*^Yni zxkjT2RrM)i z9s~3WWjgmBQ7xukb_y(|Qq8R0bf4JXB?gk7?O>qDb{v0fob{eJLZzb@1Ty?}W|8uL zW(w9^is{O#mgVSbzpK0ZS3>E?9E7#LXm(EjY@8#PlLtPeKs!|#nnLR9j=?=K zV`pO@Z(7Ldee+RD&?NYV8*VS@L@2J^>Qr;9iwWWjWwPY3*ZJshz08+Z?E(HUk4d}X ztS*#?ERykfl5B8RAy{1-x!XN*`59oQT&q0SNTwzJiYE>mx6Ta46|Z8NELOf{-WpUs zFoDrxjNVfONP=5`Tm7OA8@C((8or?wE8rLj3W#jyc3Q7wqod<;hE!H&IO=h(3+FK? z2Rq{h7C1$Of3v)P@!y3x^*@8^{|N>Q>N=3Rh^J0Tke{b2z)f7Tf;$s=B7HmUJ`t7| za?U}Oh(CmAvSxJE*01@@0g#@yo2UiRFFJ-jGa$sxJx)=QkM&os{8@cF^?C{H=j_LQ z=)a%t;K4D>W1jZOE8H%Lz6Hew@Hu%r3I!V?qiA7VX4CRHf^*ED#!n9njTp)Pq+BVl zz+%{|Nkd@h;9Gu}>iZeE>AQmdF&`hOdsxVp;HCD{LEZ*b1Y9g3)$O_UkFNdEwM_@o z^$nS^c|#Rft?Yr&2eS=BYO!E!3bNZQpCo_mK+p+~$mXUQ{$cmeg&*p0(dZHafHP6|9+@lt^&SP6nUAU>(Q8*_jAGe?+)s*1vkdNgd3gZMyOM*x7 zezgi%&=}Crvi92B<^spWmXR~2jnr8s$Qi`QMgEZD$ABnY6BaS zUZ%})g(-Yf*=d=>k5Fz;# z-vCs-EF{pEmtojD8N3H!&)g`HfQ?=Od8&eD!SV$57uo8avuw&8mRnVC0E;D#mBmW9 zA?e+^9T%)|%6M9^F~+9J;P^mCSnugM$k>h^=+WGG++!% zvPW;jze;{MWKH)IM*s9vEvN+9H8vl_I>J#!7O$3DzH<69*T2?Gjtk^z`11du?SIJQ zfe<$_jb&ApjV+ko6jJ0fK!C9p z3sn?uOY-%2QSd`fEffD-vf1Ft+=ot~ZOeh!@pd7H@}e1xeu>3`i3~%8?h&e~;dXoW zt2b@YiX5mIHP;aO9@dt{L6c8Jy)9`IglS(o|s&5QqbKwgcvpze$L{r*(YZ{L@f07}M2v4Q!FOb+Xyd z@JPjIu)4Nop9>`Kell07S4f&0aH9`woWLv4v+Q~bQ-8X^Jz0|w-xJ`aS7zm^)Y1A& zG`x4hhYNKQ87h|mM_^@HDrF-KlN=Fp#ix^lV3Z))<=WUbEz`34-Ax%*oH2Y?{j$fe zFeQc{$s~ZL-8O&X5Xnk7n%}9O;d4%;Vtizq>m+~*)xo#<(cPZ{75~evnZ*R5w{$=#6 z9<)a0jlkzl0V>L5r{Gxu*Z{Y6^eSO1%Mf+1D9m_LR<+|d^;WBJe%SSkU{0Dywe>mG zAq&~X^IS?+|8&GfeH^a`+ECh8yS|5FEmpPlk6bNYtR5J>l++?a^$Vy|8~8$`?&+nQ zV|G(=2+7)CL5wD}zvDS`n>w(Qhreq`U8f!7QsV+#kgA9>-NwZVXYJ`B%&6#Z25Gw( zlL`KgxF^m|>ijL>8`{p)+82-GTrn`g%r&7&g|^aXac*Gc(Ny2sqJPt?41araW7dN- zoc30P`uaGnnP9$ZAycKCa`HC18pSjns*H%WtZG_swzLtoJ-ub*pa4w|RS*fDivoJ& z0RX}fFbJ@dUlP!Rleemzr&@dWc^sdmJm&SZvg`ZW`|Ocm{O1yvG1-H6_;e(PZ>4`X zTyk6{`}b3%l2tL^7uB#=F%g~jOL}=1zg~)nxv4)^= zf1;x4!Svm9(v$Xf^=PcyZ>I2rt$nh{_~0i8xw3bhrAC+t~doH=2zym(1tQg+}+QE2+8@2)ggU8}Zdh1Km zwFyL9{R>gAL}CshAdclHWmQ~h5SGN-@{gjeWn9SoVX9O4al)XBpx)P~&`A>|u}!^_ zNovfJsr_m<;CI*Yrn*hl<9@*pZu=g!ry6Gead9_8)+cJnyO>@cqN5t5LZx=Ojgds> z2KSce(3VkE*%jNNz;!}f1iR*V@e4L#rc2udT=3_x&ux!4=;Mx=ND3LpAE)7dr`A9( zJH*F3ORY~uV)8qkM@nN|+2FyjPtU&u|7+Lpf(xv5bykP|A&+&=68X-`4-+A>ZjxM@ z>xn!R28lsjU$q$0rTO_@Ab4AMtwG~5_oeh*8ow3MOt}Joz`OG*F&!0HOp1m8ShLt) z)0KxqYPB+_1|DuHA@EICnF{N#I&AtWkdn1I=7xkFa!VAPLtg=vPI1(Vv5eXVhU6tz88VI8>wC zm)0Fye{K#SnaLtEkR`3zu3CnT*+(|IJDy9OfJp*}6vvopN^Wtd!9{Aqq`Fs;XdVFv z0DATrb1z9WZTdbnp3}YTS2uX@w%r4Z41XZZZy+>$haz_|?a3w%_bHWxk>6n;roC)8 zo6 zXu#Ef%b*+`P_PO(Eq$lYg|v4CxF}aoY_`y}*nL>k&L#*PZ%)a!9G(smZM&{ELtf45 zU4A%7%UAjamAiprJv!U#Q${db8g2!mmTW?boMQ7DlI$S}3{|bv5ly{OZ3DQgu-_U=w{Y9lo)mvfJWNxuyTpWnVSYN6a*Bx9NHtjVH{( z&WXe{z`2XUD8JB$)^o=dV>Rr>r2aNG^QOJqTIFtfLi@aq$naAzl(s z1T?Jij7EzY9xBoa?}%gYS9C5}{H-D+sO^hx4s%r#r5y6Y=80F5i=zR(#oCw3IgA`${mlEpuXnghJ4$_rk`)8Bqcr#c zZ^uijwV-r6R>lu&0^I?6b%X}>hM$m7WAK}zrpfwG?s$RJzO1%?I}Q6B|A{Pn^ij>_ zuB}sjT@@oqE7Uo@`wRsGzKUi_!WBe_LGvJc@JH) zJkP=|lMEH=9CVGXy<&|h7?mLeJ#nRHTqps0wW@Y`i30JLy+fCCe2>pT3i;4zRo>=A z<3Gk}j4uMm&=eKJMiMmNii(2h=uKOlZ1fEFe0(N+sc5jJ>gh$5ZeAUy%9Xv^L$R~_ z{v~@L=&Z0t2snO(+mj9{vd}$AqAG7Z2hsToJM>uvR*wCcOg02o_(IbJ$TH*ip2>b> z&RPF)2JC$W{cn5emDSY~>t5%eXL~QtL65JUiF6Zb>Kz1~CwTvRglH5V4Zf2k(lOSH z=X>aEKhNxW>&HFyqoXk#!u3lDjIo#h)t=$KNuvJE z5K%J>(6`g<#~rk1qr;~C%1YGqJ@XTlt5iuLL#WT^ptneF65{ydS$Vs&xI~5_K|bo2 zoc@(|fUff>8s@^~wRjCIA)Tv-1Mxm3tC1oDiTd4As}f0)^=ImGSkKwwmkOf}X_|~G zI<5;7s0Qwv%5I`|j6INdcO0M8*b1fR`EpQGH>x(g8O98zdO>eDHwnE7yEW>WmvE4< z2|mFsB8B=!Zd#}YU$M^tDpDJb)Z}NwB(^w#(ITHvlLLdK$u)bZjEz{%3G>`JXvVTv zOQ@8*!w|~-+pYdAfuVr<@BjL1J-vwTL(**Hp}|-trX^QSc&@{}*)kUIrH=vhRhXm| z9hHN}JTY3{U4#xW>p4g>AQ~XNV>$=1YJo!8F4)_zU2M?~KSIoSzFO=w0~Y-X3?vZm zEXp)S88rvrgFchm1e*;Zsa5Yf`@keEr=rVnZE9TTs^4h+xY0xPFFGa5D+AmUX)oVL z{|xt3c#v2UA+5z)`D#XH?%lt-k0pI-b`v}uL_6$~Is9G+Qg;?^+d4mWL>GVHQ!2mk zeuqzY<2~&+zSoXno>I1~rzUU>V4^*M*!6r0eD5m^d)m9Gvhl#ZQ=}y+cqupv@#t$U z8;>DYZX__~8+D$Y*V4X3tG~B@+E2_VucMs-)@_+!}oZ_AdJAdMC z`G+XG6eqeRmHX!-0!c{|SnG9TTg#w)L_C}9f{p-B0uL~WO1p~8ECZ??rM1EuM!agb z_YPS-BuT=yUFm{xspyooGkywXbU(KZ*ge*)IJSD1pv z*xX-97=%7j@iAUz5(0R4l$-!dtg3YAOs)bcQ7+ZLwfIXOSPpfo>T`unRLlIIwt03; z($v&!+=By|JEb@rsSCID_Tq~MMxOW>e8F{Y%YTK{x+wGH^4UYgQfmK+d~|(?98SA# z+5^vD?KJH;dvv)ulTD#hhwlDV*XVHWrs}k@4mcO{J>?Dn5T1A4Fo!Xnf=LdBIqGj_ zV)U6yGR}O-(kzP0vABuFutXxS3pB5brg$k}c{RE6`TcK=9AN-_{7} z^1w&8_JkT(jDMgVO*$`FG?7$dK)igCz{53JNot(E}<7C6A$Aj zu$3O$FwYHjCDM7#r28KQ%p~Iy_ya_~wO} zfBR?VdeQlDiW>vp&GU`}ZB+DsQ?(~`9pi}sabT*l-vkStf=X;e z#;dH6zewkSn*Z+o+ZsQa%WN7L<4GAyY&QgUC4J680~1=ZisG?9bzBGq$K6C|FR8Bk~R+n5?bsw&X37Dsh40d9Blj;ica* zVlgT*L*U(gn&uCgm6>(&p%KN9$o!^3eug*0nDS5<4cBWruxp>B(8&Z1et$s~WGlEF?l72B20;k{*U zw^45sUKQnWAlshZ2nM-t8F&r;B6vc$VbN4+lIk7 zWjJ5~)@oxfZT-V8*IvvDu)+MrRq<7-r-bg~i9#%Jorvo zi#Z~91aXbXcszghb^QLgJW+mbZ6?#vShe-MsT|0|WNZ_F$2l3#6ak}cewQEs&AVtM z1?i9v^`|w_gIyK(h-R^e?014lZe)c1{?(R3ryRIe9lGOb6%MaApYapJ#{_=j z^M)8ac|x`??2_{78btF}A@@NC87gu|)kOe#FYO7ae`Neb_(s=PvD?LKuU$zk)zMU3 zN2lEU%y0nR(||tr7~;F_XX1y0pG@6_30kPa7i~y+6X1{wkAH zj_iL(BZF0nU?Vt+V30y~0sjCzk9F=rJ?qDQA$T(X0Kl;6miHQ+){_mC_c!`A#gwM@ z`@(4(l`iUk zX8Jewm;5B!ovoxt%ywNhzF=?w!A_LF2Y!D!{{X^ed^|tm2yHa47ej6?L{{?omRilf z7`(BN{{XFocrB>%R;B9C(jcv7AA9;w?+V z>2s(Hi)C1smI0Zg2!TjF6>-{{c6xu4B-+sY+3`Q^aq*YO9uxSjlI2rS+Od@(wy%*iTvXb90TKfA{ z{fE93c*n)@c&7K^?}VRTn^2Ehn)mDr=F4=hBoen~V%a2|~ck7suNPVy;&}A)d$EfSv=y><9Xc2HOYphI&My+uYJ6R z;@i4ozu{kakN$q2{`nMFz3-3vkPcspOd^0cdq>se)K=9)I*)CgiLxL}+!2jq0xeW+kimQQ~SX+Ac*k|wsEd*~8O zzuDT#G8B!8$Y9JO$RwyyT3 z*v)TibkLLx{{VCaD}%V4<2?1^wpYX!_u6vBGHR*{E?O%~rDAc<%n%>Q^H8i_rEND~ z@Z`5c?2uUfp<90uh~tb%$Niq>wT=9Z3_x35?r-AQfTn(@6;n>stnV&u_Ki)ZRq}&0 zH!7b}N`?GS=T{GhEk4NbeVtk|`@*}H4Bn?TNS0ql-hkkYjNtVYw1}Y;05AZ+9+b4i zR=vA>X%H&JREB3SCe5IC=}_8gk8@zt?z7rh2-zmwj0t}Ola3E=^>#@2j@iZmBRHV| zQGmF|6akj{oQX91B(x0)4R8xPZ5SN}Juys@Q+sm>l)~}O0f-1BJdW+yel@P8x15eR z!OvQC0C75v{HNmAh9H(r>}_=|#6)8awAe-LTKXB#Z7 zB0;T6s+&XO$wbJ>1EY?$=$bFvBfOqDZi}i*h~t??;~vGq1Y^GMTHyR%8gJUaz)0gJ zEfZLquTS1uDE%6}MnE#8u5frb=|CLsgS9k@3%h@rx5pl(boVhkWsso?tIt8g^sQ}M zPG1mdGshLomd`vd6nA#TeAqV(7D7Q8;C4L)WO!O@jX%RONgtGLtmnCfAYyomDP0#0 z$wk=I=~6%1M%U+nlVc=5c~m?s#A0UH-9i;r{>*c#l?@wGB^HhD{$@(k-@F_>SHc zFC=gCW*L8W!e|?jyW|eLwtDUCnw@}8wA#n2LmLMYTY$469S+9epKwRgyocg9!uv~G z3;zHuW7Kr15-D|CeMa=hHmi8@k1dmGgKd9$r(up{BQ3NLHil3Sa?{;~lCxXM3$q>3 zmJC7MdCpHA$F?{fE6aR2;r&4T4Ac@$5NO(s&ZI8y?Gj(zj87X*$++MtMPq=(6PzAu zm%|T@mp&S6Z5PD4jQ3i6_bX+lc!uf`6w5Z?KEbHRz=rSmR!j)y$i~+pTiIc^j^2Mg zi5jBhwiR$PPD%RY=72n>;w7%{i@yf6Q;b>9d#N(;KjYs|ct_;dE7H9~RF%@kQ?ZB$ z#O(Q>j)6yVezoEswJ(O{@&5pbwM{=pp6UEY2ZjE@9kQy%k;ABJ7V)&gV#5v=)=!ri zBcaX#?X};Ay3dF8jbm5Qd_}2mzDR%kjXGiHTgNDua}ca?g1;^X!-0+Cr~vc`A`n1` z1_CHhJuzN8@%(?nN&7|o8_P#1p!hQ^nAaR|N-(C~{0H9hA&VV`}wjY1_zQ%RAOqXtqklUxo{j$PLNu)}J-(pEQwdkyK!*V}NtdAQSpkNkzxo&LMLIv9A0$ z2XM}RLyy9(+ccK(#)jRMQ9$9r3&-@V%?m9l7YI6|1JE81*Qc#>zAU`{%DUC$`!Ts$ zbkM~x3Xr~b;=qxW!BB8>(z<^*Ps%#+kyN#tR~HF!9lG3~E#P?F!YeBkJmehx++*C( z2Mh4-U1_!9sVrKz_6^0USnO2Wq)^Hq2N9gOJQBppeqwmVb{clEDp(|AOw>q>l?8mE z_gIX5{{U*n@YjhoC-FY9r=@}=zMbUkiDr!>gfJ%yh0YIr{uQ-hsA_*GB~how*p-R@ z07@KZ=JfZePeO=%KdMRnuXho$y^A0e;art$iM?*zJ zKBI4HKYKhe<0S5IF^+$=R!AcuP}u_RZap2lO@Rca~9VR;>)kvc&yV_pdG01;_j~ z&49Pq_ZHp^xCLFxtM0vnz7O|0*P|fS4Baeak9SX*jxqRm{U`%7!YLKkf*KcS&|XV) zGC5z~O(Fevezkw8sOjfW)uP;?p!+na+mtfyW{+!Ty22z za!Vdqj{H=HAMC$0%dUALou3cog+YJ-85{wOpLzhq(W2D;8)z0*Hy(Y>wS~NJeYQ1g zgp?wM-z0f5Avnn@T}OK8H18H#>RNEPk)amNg0~AQ$!~urIN`^?s1-+4*EF3bc;deC zBydS^tL3BJ#~VlwLIA<%)Kt-2=yB@TY?n#r#W05D5>vHg+GN_mahLYR-^gXY@T(uY9ozMq%=C`$oudLn!H{q3GV2~Q)wHYM4qe>n8bG{)Voim? zn^;koXqXk-1TBcinpKVq00(|YQt?%uukj8o3OgH{4-(sHw|cyXPPR+Uh3_JP_q$8` z*hzOU5K;(J$~pxA4)MN~AI4vcTKD`T&?VLX0ET}xpAWvOCAhXjm|V_q-tV)Fk0z}_y0MX zwdS9(_5Qa100q-lvC^%s*Ts6SrLMKa_r6wq``L;NY+`?OBj@Qr9hdg4zx?%2&Wh*% z0I>Cc`QxX5-}e6i;wY_5&d*Tzqi?6_cJqI&h2)7NF2|NOg$OFdw&ow~oc{pz>X(Q< zGfk&UmNrx2nHj@E?M$cM-ViJ|~oH9RC2%D`(Fb^y}8LG&in3Cu;Wg33GoR zhi-n%vSGo`ndOFcBrZPp%bXK~$2@~w2aYvstv|y)ew`e1&n(bK7=OA$%8Tkd9zM0f z-C6u=)oq=A)9}knXUdJSUfzHSBfpoEj322r(tJYj-m|KF9{U6uv|4_-6n2bt8100K z6tT+_yo(!kA1h!J-hefsUl2>YJ86H>?#9wln`Z+fh8gESr8*54SBf?VQ@0G~C6dzw zF`Iymy-Vgr+iTHYmDTjrM;c7JY)WNvHfWm_I0(mzw+;VS>wy`v0Mo? zw~sg^bciRl0Cm>>5}wvsq&mII8RZj6vM5(`YzlvaJ%Jqds&~3hn`v&#dE$Q?gdSN! zUi?LY$2<|!`qw-E01U(6i5X0`_xIr#BmJjXyt&+Y;Das!&JRyob-(Q6;JXPTnjZ&v zerQPE&2?;yz#JY!qa2T@>&*aN)qH>8O(CD{-Y?VF=3>h(x14Y?F~8gV=CP#s&+w@k zlxsRw>$eT%E8Me@^M43FgZY0~XQuo(@ZX0FLeE0ct;CWLraKtH=PlGPAB}8HAktxC zu``e1ju`ps2Lth-4?DN`)!^w{{R2bS?~5@xwea230$6j;mIv0YL-CQO09g0~#&cvS z9%h{#uKTiJuuw~c&je@rBZDPEPEV0KTt1E!&2n?h$o_m4; z2eA|Zh+f$KJZUdKoe;`6YxaZHLv!Vy}Z49bu)=BuVz+u z!Ega$KJYwx4@$ibf#7(VjlYEL?_BOXhMcZnBPW?XK>TXFUkbh;NC20|dOeEd0=j>O zqe7$Eo>u-*cmI?xAV`jW|U z8{2qdU}9BOc`f5YR4)n$&H(A{&{sX;Jp)zoH;LrB)oirWqlF=CWW0FykcVSPO9eRJ zC(F0GoSn6e;qTe@(k%hCPZ(?7D7aabWcxM7v2zi$2RMI5G0BI1RB`-V0mv2SHva$% zw9kzGFVysp25B)`=`c*z`j?0`64%S75EWhvVJT&n>*YKh$!=Y|!taO_1KK=M_LEp> za|VHmkR2T(9PKBZ{{R(qIv>RyM#o3Dw6*Y;j&*-lw~R;ji};{|S+EB#U62#+j>fls z33z?HCGcy)dRu}YPSLF`pFMXZD5v!Xx{3htAB;Z|wXG9P)iv#J;oXE9FNVB7sA`dF z7uS%_JXdk5`B19HNmY?c<%0vj73qHnbSV5W@TKbt0C1F2Zlbg^ zI*6>J)I@Ow0@@MxNAV7yuk!lVq9~0(909-{l@6O~EbOB|!T8BwIAiPdsp~U9sIMYf z?POK}t0@E?hNL9tr7Zw4B2C-Ejl_NIbNPSN7c%);oL=!s$Iz+i`P9-E4uEvdTaMnJ z=hCWbS4pK#E+@G$TbxI<<8I@gr{9mn3INFP&7|5UxvHw#0c9ySA(2M*l;E}W#N|}SAuKv$fd z#(LFhJPTztq)!f)VQn!@%p`?fk?=4H=Q!!#vF*qP#+7_8?RO}IDzQvQAaF76IH_m0 z7b%Cw;lb>B{Xni$#x_!0>X5@}dMqI^1LQ*-#FMz>?Ta7JwNj73QtA=zmj3cl>GoN2 zfA90R@}Lftdl`&dLwD=;wm4`Ry?|>UD1K^^xOt81$N#JmU(})jl?Di ze%ZyO919TMz1Mq;G$^dvRQ( z$@agEI(5uUl0hDecM~$OICDL*$NoBNO?-KzTW0mawFvBIT-2zv*X{0zwnJZ z*lD&i>$>dfS}O}zi+pMa`q?+S1wcsZa&v+0k7?oUKjG+;#GWdr-i;0>i+<=MykFb@%6m+J{ib+KM!1|moB2Y46k~bJ0ZvnwwXD=Y0EYv zi~_!y4!iqbYD;(ai@guw;x<<5-P$XSae5WBZW=fU$ZM`1KuCvTA2t0`;LnG2Zw+_` z3tb0J8b+5L#lV8iRH}bK1kR))kT#}9Lf`-ht(kmJrdS3>)GSb-;XLF8N2W7b9uL-Z zpAC3s(#F)>vfIaQqn$8V4PiCtvAD`?3PX*#rv*LhTpdCqxv2lVu>GV#BSu0DS;YhTz_b}`3k;cpb_ z^6HmgXcC}EJd3iRC_gx7ha;d24tjtA>=VwG7II0J@}X12XkC{cfC5j`8K&vlq*|4# zO$@P51B|TEuqtXu?jbhj;Taw_8@H#-7=9gTww5qj&pfd}kx6hvO3I;3q;Zq#eg2dI z<$oVkc#Gq2!X1APlBZg^)@2=vTG`9A{u0X-dd%!r7ROv*eQU@yole^C_SLp~nc;#j z4tPnC9#;Vb_t#(`BS0C&xL+>-7ptTr9Pl6XD%KZO8rzhqBO){2&j)XeU{z@?&! z$j~UFiU7*E^Zx+hCyDVmwOCs$ND=v&00J|(k~&~x-ILayJa@Y zU@|BHlrbk5Tmnu>=ntiAYJMY!O4My_DMnN5$IaonbAV zwcev|XM3v$w6TI`{{WAf7!SIjhGIC*(l80+b)XG6?=4{p7Dyu8%8CO37~o-lA}~Ic zX{8E!{z8AbPZr*4nh2KW-VF^b!-*!6!4bK7nXMNbu{iFFG|t&14%Et1R|sPCgq%W;1^xLFwg00~t<7ufXaP`-^5c)aSZ zJllo3+pIwRgaYKBeC{5fbb8PQqoP>bYx3(m6>j9UTWKcTd5Kw>Ml+0M*!1u1S1sa5 zRf^;1V$4AM$NY+^a2RRQDgm$#K1?d7TwoE~ry{dkOT4!5%vRItG1;^(yXCcy$^sF_ z2I7C%$Qk6Ebk7-}4KERReh(5_M-9Zc(IUtkeU|1(7@QG;P=ZG%gU3q8Z-d$amNsoV z8>}{5-aMBq!ySvU=RaQlwRcYuXm*OQO@FG3iNZ-MT#1Z1T<#>1h3UeN;v81ela6Qu z&-`WLJs04%sC6lAO{SM&rAqA$g`sw4Y2klR7Bn1^anC?GBmhlzdM>JUy$as(?JlfE z%pz8|xlohCk)5ufoG|V(Yl`@#;neZ(i{sFI`R!iwN1Ey>;cvL`+}kpSAH;=z0h?{3s$$ev()@E1d!%gc>Cwf>n6#oeezxVMFELrBqwR$aq(NGeVXU~a*!IlNJ)d=c;)$D>=mxjHOF zC8eU9>wwCkcgGl3mS!!Ui;dv9jWWXL!JC0|@l)cK6oVeOX&EQqOtgRfo|&k4FHiVq z@m;)Dbd6(Qyw{{#54QQj;OG#QEX#i!Y*)*-W{pdEVV#_=Lj^#f98~`R2X)UAYcP1P zSn&3zs_P4J8`)^rTD&k@=(2f0wbz`P^X3lBiu*^FpsZ-1my@J}!Cp4h^DQsV=-r zr!=tI$$4(FUn_`^P8H=*oyBl-$9#044?Weq3*w&)_-gk4>&3cWpKW1o_Yy^=Xb?e# zMJ<5yJAu=w09LJs!D)3{C}q^VU*lV|Bx=tP)DqPJARJ-@Pv=|SJ=0_HKZWJ7oa%{f zb__EmjD|U7M#_*R7-a)HvZQ|;FQ!3#uZ;9vDh0QnShVxuREhlinEdGuI3xp%p1coU zC<6)q0B5fT#-*-w!>LJ+`H0@ndAR*0b|0m29uxR$b?}?xXNPnvOWRYXYB#!`ySCQN zEaZ4n+9(89K2TJfYtEZks5nH@x_j!%EgKwNv~xh+S; zx|QF>y*tG={vOq3vx`NWPK6~3p{k=(kM0d~TJ^PmqxpTpnTzHFLun8dCgOJdt& zl;kxL%^Kk&)b+mvcz$SKCOh3~ zCvtE`0`EpAll(uOasGcW{i@*cR<+?RJHs9%)-?@FQ1Jzwth4E!9-sR*7+KGo=FIUr zG86?y9Z6!S{9o~p;{K=-2Z-u6S^!yM5-gG1S*(t@BoDuI{dlgzH`2Zz zS{*v$TDn0i`LNqAUExuHQZ)gXCVDR*bQm00JNqA7i;smjy2pQi66^Y=s0sck-ttt4 z{xL@$J+WS-(Smc(;~5=j1IGUV;USOyd+J~K1uy>q6Ge3UU;cU@$WdC{%J0)k(HF9qh;4{ng-3kchD$=56LW*$Ad13+Ql1%_%T6jgL@jkJt{kBMB)@>nye6yB_ z#$@@|a3Ewzc){p6tPhF0o%7v|8Y^EC-Nzb3BvWYu4>^Cn@crSC;Z&3$oujV@itb^b z`$tcXMjs@|vLal=wUi!k!`BBG?OAbauv+{`hS-~A{?O9=$abHd#8PrSz!KzrPrU$9 z_;qot-Twf{K@!Fch88kM8J-Qw2}v0llW=DK0>c=|&P8@$V!3+{8rZ*%H61-KME4Px z^8%^F8Nz?ywm$Jc!U@JR+}Be;5Nc!%Hsd7}d2N#a0CaKR+NevSz1@sSb2YQY5`s5d zgNzJk<|KZVr*h#f+_v4JNjth@-`c#J#a{!iHP46;DoHi3hwg3KX`bBMf1=DWgb6fq zGjAo1M$ote6am{@>-rCe$%^a57LXIbjNHQs9QJ<-0j#Y<;)jH736TF%nHW{(Y8O9}He%dnCba{8RHDZnEeBHD+aKstUEvEk2y{uH;4JEicxhHhO! zGd;RY{AV9KWxrnLfGK!ORkiV-#BCc~(*mZL+AZz6ASw60({I@cAHsXr72=H=T~Fg) zt*?KkgFH5tx^3(iv&|Ioqq@Mzml3lfs}@h)vVy^sMA`k&uTr;-Eq*0I3~|RACX)MA z1{HsNy(>$_8mj4f737{$+%#}I2wS9>9SHRGpbwwCG4ZBPhhMZ0#aJNl=ZJhsJ=U`U z5oxi*h)QXidJXL?iPr}kLv+t^TmB^dqI`d9`gFUz4Wnpwj0iJpz9IW5QR-Ag7xI(0 zTB+clf|@tQ&mH*w_g1>`01$Yddrz|2YWEg4_W^C~PWKS9mSMYRC+?`?yDcmBJosOx z%q|Cj{55rTjwjSC*8Wg`-D@dA{PE1Z7vBj{3|WPTCNH9^y8qf zqBXyTz8}^+HT{hGWtF{-RpW}*F>GOV`>z>H6k*N?{#E84H28I?d_1+flJZD3-6m&7 zYniPhmDno=RK2voOP~lCnjo_-2M2!ykPbriJa?~MTf_eV3hoBCPtA^!lsew3qe)@E`2I;9nMeP4Rt}v87%3lG{PMx3jlxZ&kb0nWXzHQ_5IPD=Gf~kBG)L_{2uV9iF^mC_@e8? zFQ#1|5Nan_j$2{n3tjNV8(X^)cPwHk!pVSK43z{>2T|bB*PaPUWsRGHyvbHP&q#3v-#Igcdgmj{{XGJw~svoNCkP`x8rY! zH=144x^Kh%E+vUes_K6_+BDN`=oUC*btjGim43C$XB{S zm7@sV-f7~5?=w5PIy9}hUNvA)@r)V(>wn=Rv;P2|>H5)FzwoRN{S127{qb-A0LG}T zY-V~CzY#n$;j4JpkA6W2Co$&X=x{i-=txc>=u0Uhat>cPWqBoKGNU`~;1o+tU z1$bUIA=Iex-`X?&4t4Oqg}gy=WAL}(-l5|g7+H~Zy=wUB7WV`m9vD2SCUhhIdigFp zrDo#R<*6pFkJ5iDuN&*PF|gD8CwS6hBkk9=_Uq3=cC?HK{0FsaCHqeiHxk2ZG*QR) zgoVR-Zh2+gz-4_n1de#kep!4K{{VxPV!n~?ek1%WzwrKzs9wFA>%Jb;hN5D4f`wbQZm0Qy|nrEBAr-Nzavi0&fV7Q)gAAPrhQMq_fu*23M87< zn%ZP+u2~3H$j(R152t$OH2(k-Yr4mUG@JbetaU35N&z&NEXCS3+5qxY02(qzK_?&* zaC%o^q~Cu>aiK!XEv)@x4H3+4RFFXYjZpCTkHGeNR*xaPx@m)ipUW<&M&}{h_(wPd z^}ro!jSSC%T1CyjfoEI$+l@so?=Bq{=0=h2(6Lv9vl2)SB*4kq2vNd{(%1A`Z7sB> zw}L3X%l?fKRXL3|5D`e|I29j&?%>h9F{qj4jtGA&bsP7VNeD!V4a~A+o`3~m&!;tO z$5H{Htjc5DlA|NAMhXcETjn8t={^4dz<^8P$ks^i2Ew1d5BFFSc=h)kxT@b1bvd+e z2uXDWjT>9s+Pkun50)+?-Z<=2a6ekX@W;gs7e~3eg7a3jlJaRoBv7(kI9?MNgdU6! zQJjD7=99<1KeF*JhHrGsdrd-Dy?~-T*5ch1l0YO($W92(0O^lWKplUHY!gxN_M-#4 zM3)w_M$#!cKvaT9(y}ytc5A5q&1q!i?8t*{#nLmF)Zj|RS(^+88Tp9^a1~x36l(q| zM}jRD2qK;`q}|OX2s{u+{G@bB7n0(WpmED(Y1lgF(+JYycLe$k=)8}V)P$k-P;yl{W% z=W}5Lf22re9C4kQ0H1mQ?0gC0Jv#Hov52*l)Y=^{_wvbi6s;S}KIKBmg+0}A{oHd^ zZErj;eLk%=iQ(aIsa-`Omr!jzV0m{khWXnPFeS6o2Wj-KN5nb?z2Yq{{A>Oa@aCHq zkpw!dHjv)St50zhGY5D`XwenQq1b=RyK7+AW$^z1!}_bi9<`|W${lON`iueXY;Clt zt!?&7$k9o>7LkrI&fpI0kw6^h!OOi>E<9r{m8V-=$v2C2P-mIlb_J1RAbhwvF)#5B zp2Ii1S@B8yAvXU268QJR9vavNVwUC$S2#I15=ky{IN*Bs>5uU1_I~h>#T|bySk*P# zYs>bN#5%-HZ6>R9mOGPCxK_=&$RcLQAd;sz^a8yb!QThG4e;^7&^#;Q%`L|sWsaE? zZhow*llYnd^5pp0;jMXp;$N$H+r`W`3}{*{{LwbG6+#ffO*7vi= zYjl#K+Q`rrEU(a&8R{{RMF4ev9q_K5;A=SSwCyU=#?&&TLdt&yjAQ+vpaIjbdf>h~ zTc?VCB78B>Tuc({S$q413{k{TS=`DwQVNke!N@!kD?8%1#Em24H;0!`@b&MC7V-&_ z;v0)?5>KQZCc@ki35$QpJ;9h@6H2} zw<83C$_spP;_0+Y%_h>uJvKYNW#^Q==gSmAI8MnJkNRqD(>-wfbBgM9TP4)A%Zql7 z308QTHjZ@P6M_iCFLgQOcNO8cl53t8)wJn6L*W}szYc$Bc5`UAcGi~CTtNktl0^Ri zYEZ$v#8rkM(Tuhco2l5K8{cBof9KOo{{X=0Klq9&rt`00_Tm?Q7wO!~I{xekJhNgYP2JeC=VZ<(~IbiZn?g^KI?nX(6*uD%k}7W2;8W z9LA~#fG&T%p=mxXx6tB-(_Yplx{lKB{`TeJ(=_=Rf|2q9?x~-c_9KJj*? zs`%FXTD`t&t$$F{&aEVYfo8kZS+1UJ0i5o+Y#(9iUc>O8`yax72Jq~5-X!pBnud*~ z$EjK^?}eCMt^wIOuCJwQ8dbN8^cihdOUNRU%Ry(BVRgq#glXxv`;JG>El1hWeeoZ4&jqv`t@m*~e-M$`amNM-?tE%1`oM$6DZOg^i83skb z$;rn$aQJ8ARsR5(B-C_I4?tHtbZsixCFJzqG_x*o-)C>ewT_zB+Jr`54YGg2%2~E+ zPcbKP=Z&fk2Y>GjW| zE4z{Rcv>h>u~^vZF}4l~`L^e{$5Hy%5iQS$tnOAB^xK7hx?){XTRDHh2WTXopRPHj z52w#>B=-Ii)@PjIwl(>U7-Sx-%iNxT^dC?G(&;`U*3ZNjcF-94ma2q*XhzsyH12iw z2O}SjYn%9YeXICZ>r(K4{3FuK6@w4pvOYj{5|mh z0K@lwEo7ZO&5bc!!}fp7`6thief;&{jyUJ>tNP!=4+_}D72K&5ldSMtqYK8}8p%9L z+~+taX+Q3dN&v?FpEYe-&%ie(+rv#Xa_c(1$DbwKXk?a6O6lBVmd5rV9^(eP89Zs? zAlpZUWkzVXseAa!2L9_2kO}-p9QM!49t!x8Y;@b3J9vC$sp@}l-Q1wI(KLx>g<~_w z>$+w|gE(>j04(R+_cEw-8~*6(K0#v0dAXE*B~=Ny6IDejwfblJ3t+ z@E)n;n~7w3U}b-|UpU~jo7^BJiOFpBCzHvq6!EXa-ABTn7?)A;CyzWopxFHFdOWKgF7?YqSZp9Vo+Ss5=SgPb6plx?m3d>np>b25(smAtJeiriY6|Ibms_Umwks9Uvq%9r3_(BH`9fJWFLQVnAY(eld z;ybzDd8KI^hSL5X)2(5Ufu20elQ74j^8551D#iZ*!A%$8SBo?#7hTo7L3iT|_0y)4 zQn-M9ni%cwrjg_FV~hfEz-*{EAY``hL(=>U;kkdMHdijx3=4qBO8a!*N#U} zdF}}S^Vt6YW!2O!18cfZihNfF&CZ&?i)D0>oN@MejCTBUkYmTCTm7AMH}F@)&lcNh zIvT^IXziu=QV4~>3#Y+t0i9J(@!(#PK*l&7tI=+}6X82}rf)TJk(Ol_?Un7!@HeI^OLA+nw*fUUNFQddo*!$VV{u!&tIFbN&xo_**{Lc)Qd8>7-cy) z7(Gw<2Du1+8u((_qdU&%$0XjcGI5Ny8=gO>psXJhd`^aU3}1zNC{HG#&L{;=|CD=2cUoasIGVZ7axPa=y33t{tm6b__`}yOwZAGsK%iJ*3wfe&OFA=*q)Ajce#19Q-MHsQ4qqOYrka()53Z zw%#9y#M)F7wd7tfk_}#Ko2!X_&>Zf%fzlR^Lg=C}qxWHBQi{3BscGf;B4HHcubF?+ zd=&WK;fpA5b-V8XX+9*-Sw@_?1>DBY+3vrwAhY{RJ-Am=E@FF}#8O6PKfG3AK2%|NlUDIRjwFXxQ z1Kj2Mm&ZRFUc8L*cx7A9Ym#EpVu<;IIU@uWQH%uy4uFBi0R*C#w3mNz@}rW}d`IF7 zKOLut-tyV+(n!@)Ve*SA$TN@O;yyOxZbr?UR~p)H#%~zgc!nvXe-A}1oy=Eh6k2M< zY_5s+a0E+*3Q%OA0SkP@6U`J+?Iqk?sE@IbOB}ETPF0v5svnHLG_k*X zq`1*H?YaRP$UJB#+|pqiE5SjqV-bUe3Ni^rKWQ%E$b_)?o#KDb3d0lI+-VcZEK?Z` z-I~q@=b137z<>fE0ON4}_sY0+@5YZA&m$8yfgTZIK1QC9We_+6C;=JRGC|#t4s()9 zDSJtG7b-bFhx+e{JP~;Wmh))$V(A0T9sQczp(!gWVOV2>^I-9irx{fvqSO8<_`<@) zt>L)Qw%l9AXiR^$o^vWI23!}(-I)$w?+^ea;c!t;+DY{eL`@&X&ll)AD%xAipvs2I z-X@akO^R7x<%&W}?ap^O`M&lzCj`|?kBYuC@kfWHit^_~PwhyFx%(}O+X7udJ49hZ zfMjd{033{MIHHOa<=i<@SHnIh@dtx6TbnCsG>e!n3rJ#G>d;9nOwizzf4q&f5E)1- zxr&jv=ghu0d|Ns%#5-xVy?<5HZ@l{(w>n;fV|g5L#RjJUxnDh$nUl-`Vd6Iu$mP}5 gNhqfo$-PLZl8%Sbzu80neJy|Q<9~$|QC1`W*}8 Date: Tue, 6 Feb 2018 15:47:34 -0500 Subject: [PATCH 82/99] Updates from review. --- .../Sandcastle/gallery/Ambient Occlusion.html | 9 +++-- Apps/Sandcastle/gallery/Depth of Field.html | 4 +-- Apps/Sandcastle/gallery/LensFlare.html | 33 ++++-------------- Apps/Sandcastle/gallery/Post Processing.html | 6 ++-- Apps/Sandcastle/gallery/Post Processing.jpg | Bin 7981 -> 9759 bytes CHANGES.md | 3 ++ Source/Scene/PointCloudEyeDomeLighting.js | 2 +- Source/Scene/PostProcessStage.js | 25 ++++++------- Source/Scene/PostProcessStageCollection.js | 7 ++++ Source/Scene/PostProcessStageComposite.js | 2 +- Source/Scene/PostProcessStageLibrary.js | 2 -- Source/Scene/PostProcessStageTextureCache.js | 2 +- .../AmbientOcclusionGenerate.glsl | 3 +- .../PostProcessStages/DepthViewPacked.glsl | 2 +- .../PointCloudEyeDomeLighting.glsl | 0 .../PostProcessStages/TextureOverlay.glsl | 12 ------- 16 files changed, 47 insertions(+), 65 deletions(-) rename Source/Shaders/{PostProcessFilters => PostProcessStages}/PointCloudEyeDomeLighting.glsl (100%) delete mode 100644 Source/Shaders/PostProcessStages/TextureOverlay.glsl diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html index eaeb789e3f4d..774b42edb973 100644 --- a/Apps/Sandcastle/gallery/Ambient Occlusion.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -60,9 +60,12 @@ //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); -viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ - url : 'https://beta.cesium.com/api/assets/1459?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzNjUyM2I5Yy01YmRhLTQ0MjktOGI0Zi02MDdmYzBjMmY0MjYiLCJpZCI6NDQsImFzc2V0cyI6WzE0NTldLCJpYXQiOjE0OTkyNjQ3ODF9.SW_rwY-ic0TwQBeiweXNqFyywoxnnUBtcVjeCmDGef4' -})); +Cesium.CesiumIon.create3DTileset(1459, { accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzNjUyM2I5Yy01YmRhLTQ0MjktOGI0Zi02MDdmYzBjMmY0MjYiLCJpZCI6NDQsImFzc2V0cyI6WzE0NTldLCJpYXQiOjE0OTkyNjQ3ODF9.SW_rwY-ic0TwQBeiweXNqFyywoxnnUBtcVjeCmDGef4' }) + .then(function(tileset) { + viewer.scene.primitives.add(tileset); + }).otherwise(function(error) { + console.log(error); + }); var viewModel = { show : true, diff --git a/Apps/Sandcastle/gallery/Depth of Field.html b/Apps/Sandcastle/gallery/Depth of Field.html index 5c3a08e04502..5b69ab09d1e2 100644 --- a/Apps/Sandcastle/gallery/Depth of Field.html +++ b/Apps/Sandcastle/gallery/Depth of Field.html @@ -34,11 +34,11 @@ Delta - + Sigma - + Step Size diff --git a/Apps/Sandcastle/gallery/LensFlare.html b/Apps/Sandcastle/gallery/LensFlare.html index f6c8f9c6acd9..86c76f01880a 100644 --- a/Apps/Sandcastle/gallery/LensFlare.html +++ b/Apps/Sandcastle/gallery/LensFlare.html @@ -44,12 +44,6 @@ Halo Width - - - - - - + + + + + +
+

Loading...

+
+ + + diff --git a/Apps/Sandcastle/gallery/Custom Post Process.jpg b/Apps/Sandcastle/gallery/Custom Post Process.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca6e5097184fed10d3239d480fcc3c0c08faf506 GIT binary patch literal 10844 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 - - 8-bit - - Night Vision @@ -71,7 +67,6 @@ blackAndWhiteGradations: 5.0, brightnessShow: false, brightnessValue: 0.5, - eightBitShow: false, nightVisionShow: false, silhouette : true }; @@ -89,7 +84,6 @@ var silhouette = viewer.scene.postProcessStages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage()); var blackAndWhite = collection.add(Cesium.PostProcessStageLibrary.createBlackAndWhiteStage()); var brightness = collection.add(Cesium.PostProcessStageLibrary.createBrightnessStage()); -var eightBit = collection.add(Cesium.PostProcessStageLibrary.createEightBitStage()); var nightVision = collection.add(Cesium.PostProcessStageLibrary.createNightVisionStage()); function updatePostProcess() { @@ -99,7 +93,6 @@ blackAndWhite.uniforms.gradations = Number(viewModel.blackAndWhiteGradations); brightness.enabled = Boolean(viewModel.brightnessShow); brightness.uniforms.brightness = Number(viewModel.brightnessValue); - eightBit.enabled = Boolean(viewModel.eightBitShow); nightVision.enabled = Boolean(viewModel.nightVisionShow); } updatePostProcess(); diff --git a/CHANGES.md b/CHANGES.md index dd12e46ecad0..141c1cc81802 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,7 +7,7 @@ Change Log * `Camera.distanceToBoundingSphere` now returns the signed distance to the bounding sphere. Positive values indicate that the bounding sphere is in the positive half-plane of the camera position and view direction while a negative value indicates it is in the negative half-plane. ##### Deprecated :hourglass_flowing_sand: -* The `Scene.fxaa` property has been deprecated and will be removed in Cesium 1.45. Use `Scene.postProcessStages.fxaa`. +* The `Scene.fxaa` property has been deprecated and will be removed in Cesium 1.47. Use `Scene.postProcessStages.fxaa`. ##### Additions :tada: * Added option `logDepthBuffer` to `Viewer`. With this option there is typically a single frustum using logarithmic depth rendered. This increases performance by issuing less draw calls to the GPU and helps to avoid artifacts on the connection of two frustums. [#5851](https://github.com/AnalyticalGraphicsInc/cesium/pull/5851) diff --git a/Source/Scene/PostProcessStageLibrary.js b/Source/Scene/PostProcessStageLibrary.js index 97330b584564..83da2dde04fe 100644 --- a/Source/Scene/PostProcessStageLibrary.js +++ b/Source/Scene/PostProcessStageLibrary.js @@ -13,7 +13,6 @@ define([ '../Shaders/PostProcessStages/DepthOfField', '../Shaders/PostProcessStages/DepthView', '../Shaders/PostProcessStages/EdgeDetection', - '../Shaders/PostProcessStages/EightBit', '../Shaders/PostProcessStages/FXAA', '../Shaders/PostProcessStages/GaussianBlur1D', '../Shaders/PostProcessStages/LensFlare', @@ -39,7 +38,6 @@ define([ DepthOfField, DepthView, EdgeDetection, - EightBit, FXAA, GaussianBlur1D, LensFlare, @@ -595,17 +593,6 @@ define([ }); }; - /** - * Creates a post-process stage that transforms the input texture to a pixelated eight-vit style image. - * @return {PostProcessStage} A post-process stage that transforms the input texture to a pixelated eight-vit style image. - */ - PostProcessStageLibrary.createEightBitStage = function() { - return new PostProcessStage({ - name : 'czm_eight_bit', - fragmentShader : EightBit - }); - }; - /** * Creates a post-process stage that adds a night vision effect to the input texture. * @return {PostProcessStage} A post-process stage that adds a night vision effect to the input texture. From 1f8bd1631b913d4ffd5ae1a82e4a188a44144ca4 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Tue, 10 Apr 2018 17:30:18 -0400 Subject: [PATCH 86/99] Remove eight bit shader and test. --- .../Shaders/PostProcessStages/EightBit.glsl | 21 ---------- Specs/Scene/PostProcessStageLibrarySpec.js | 42 ------------------- 2 files changed, 63 deletions(-) delete mode 100644 Source/Shaders/PostProcessStages/EightBit.glsl diff --git a/Source/Shaders/PostProcessStages/EightBit.glsl b/Source/Shaders/PostProcessStages/EightBit.glsl deleted file mode 100644 index ab9b9bf0720e..000000000000 --- a/Source/Shaders/PostProcessStages/EightBit.glsl +++ /dev/null @@ -1,21 +0,0 @@ -uniform sampler2D colorTexture; - -varying vec2 v_textureCoordinates; - -const int KERNEL_WIDTH = 16; - -void main(void) -{ - vec2 step = 1.0 / czm_viewport.zw; - vec2 integralPos = v_textureCoordinates - mod(v_textureCoordinates, 8.0 * step); - vec3 averageValue = vec3(0.0); - for (int i = 0; i < KERNEL_WIDTH; i++) - { - for (int j = 0; j < KERNEL_WIDTH; j++) - { - averageValue += texture2D(colorTexture, integralPos + step * vec2(i, j)).rgb; - } - } - averageValue /= float(KERNEL_WIDTH * KERNEL_WIDTH); - gl_FragColor = vec4(averageValue, 1.0); -} diff --git a/Specs/Scene/PostProcessStageLibrarySpec.js b/Specs/Scene/PostProcessStageLibrarySpec.js index 7ee27676cd97..f321e0f72d4c 100644 --- a/Specs/Scene/PostProcessStageLibrarySpec.js +++ b/Specs/Scene/PostProcessStageLibrarySpec.js @@ -158,48 +158,6 @@ defineSuite([ }); }); - it('eightBit', function() { - var fs = - 'void main() { \n' + - ' gl_FragColor = all(equal(floor(gl_FragCoord.xy), vec2(1.0, 1.0))) ? vec4(1.0, 0.0, 0.0, 1.0) : vec4(0.0, 0.0, 1.0, 1.0); \n' + - '} \n'; - scene.primitives.add(new ViewportPrimitive(fs)); - - expect(scene).toRenderAndCall(function (rgba) { - for (var i = 0; i < 3; ++i) { - for (var j = 0; j < 3; ++j) { - if (i === 1 && j === 1) { - continue; - } - var k = i * 4 * 3 + 4 * j; - expect(rgba[k]).toEqual(0); - expect(rgba[k + 1]).toEqual(0); - expect(rgba[k + 2]).toEqual(255); - expect(rgba[k + 3]).toEqual(255); - } - } - }); - - scene.postProcessStages.add(PostProcessStageLibrary.createEightBitStage()); - scene.renderForSpecs(); - expect(scene).toRenderAndCall(function(rgba) { - expect(rgba[0]).toBeGreaterThan(0); - expect(rgba[1]).toEqual(0); - expect(rgba[2]).toBeGreaterThan(0); - expect(rgba[3]).toEqual(255); - - for (var i = 0; i < 3; ++i) { - for (var j = 0; j < 3; ++j) { - var k = i * 4 * 3 + 4 * j; - expect(rgba[k]).toEqual(rgba[0]); - expect(rgba[k + 1]).toEqual(rgba[1]); - expect(rgba[k + 2]).toEqual(rgba[2]); - expect(rgba[k + 3]).toEqual(rgba[3]); - } - } - }); - }); - it('night vision', function() { var fs = 'void main() { \n' + From 9cf5469f11832801c7ba5bfbc7aa0bddd9752613 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 18 Apr 2018 19:20:35 -0400 Subject: [PATCH 87/99] Add ability to use an image, canvas, or video as a uniform. Updates from review. --- CHANGES.md | 2 +- Source/Scene/PostProcessStage.js | 22 ++++--- Source/Scene/PostProcessStageCollection.js | 40 ++++++------ Source/Scene/PostProcessStageComposite.js | 2 - Source/Scene/PostProcessStageLibrary.js | 64 +++++++++++--------- Source/Scene/PostProcessStageTextureCache.js | 2 - Specs/Scene/PostProcessStageLibrarySpec.js | 1 - Specs/Scene/PostProcessStageSpec.js | 25 ++++++++ 8 files changed, 92 insertions(+), 66 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a2d2c1f626bf..01c8ac0c84f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,7 +7,7 @@ Change Log * `Camera.distanceToBoundingSphere` now returns the signed distance to the bounding sphere. Positive values indicate that the bounding sphere is in the positive half-plane of the camera position and view direction while a negative value indicates it is in the negative half-plane. ##### Deprecated :hourglass_flowing_sand: -* The `Scene.fxaa` property has been deprecated and will be removed in Cesium 1.47. Use `Scene.postProcessStages.fxaa`. +* The `Scene.fxaa` property has been deprecated and will be removed in Cesium 1.47. Use `Scene.postProcessStages.fxaa.enabled`. ##### Additions :tada: * Added option `logDepthBuffer` to `Viewer`. With this option there is typically a single frustum using logarithmic depth rendered. This increases performance by issuing less draw calls to the GPU and helps to avoid artifacts on the connection of two frustums. [#5851](https://github.com/AnalyticalGraphicsInc/cesium/pull/5851) diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index 29009d67e5f8..279db8e5192e 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -404,7 +404,7 @@ define([ var actualUniforms = stage._actualUniforms; for (var name in uniforms) { if (uniforms.hasOwnProperty(name)) { - if (uniforms.hasOwnProperty(name) && typeof uniforms[name] !== 'function') { + if (typeof uniforms[name] !== 'function') { uniformMap[name] = getUniformMapFunction(stage, name); newUniforms[name] = getUniformValueGetterAndSetter(stage, uniforms, name); } else { @@ -415,7 +415,8 @@ define([ actualUniforms[name] = uniforms[name]; var value = uniformMap[name](); - if (typeof value === 'string' || value instanceof Texture) { + if (typeof value === 'string' || value instanceof Texture || value instanceof HTMLImageElement || + value instanceof HTMLCanvasElement || value instanceof HTMLVideoElement) { uniformMap[name + 'Dimensions'] = getUniformMapDimensionsFunction(uniformMap, name); } } @@ -537,15 +538,20 @@ define([ var promises = []; for (i = 0; i < length; ++i) { name = dirtyUniforms[i]; - var stageNameOrUrl = uniforms[name]; - var stageWithName = stage._textureCache.getStageByName(stageNameOrUrl); + var stageNameUrlOrImage = uniforms[name]; + var stageWithName = stage._textureCache.getStageByName(stageNameUrlOrImage); if (defined(stageWithName)) { - stage._actualUniforms[name] = createStageOutputTextureFunction(stage, stageNameOrUrl); - } else { + stage._actualUniforms[name] = createStageOutputTextureFunction(stage, stageNameUrlOrImage); + } else if (typeof stageNameUrlOrImage === 'string') { var resource = new Resource({ - url : stageNameOrUrl + url : stageNameUrlOrImage }); promises.push(resource.fetchImage().then(createLoadImageFunction(stage, name))); + } else { + stage._texturesToCreate.push({ + name : name, + source : stageNameUrlOrImage + }); } } @@ -683,8 +689,6 @@ define([ * assign the return value (undefined) to the object as done in the example. *

* - * @returns {undefined} - * * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called. * * @see PostProcessStage#isDestroyed diff --git a/Source/Scene/PostProcessStageCollection.js b/Source/Scene/PostProcessStageCollection.js index 796a5184d15a..ab1604b21352 100644 --- a/Source/Scene/PostProcessStageCollection.js +++ b/Source/Scene/PostProcessStageCollection.js @@ -159,23 +159,23 @@ define([ * stepSize, frustumLength, ambientOcclusionOnly, * delta, sigma, and kernelSize. *

- *

- * intensity is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is 3.0. + *

    + *
  • intensity is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is 3.0.
  • * - * bias is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, - * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is 0.1. + *
  • bias is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, + * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is 0.1.
  • * - * lengthCap is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value, - * sampling stops in the current direction. The default value is 0.26. + *
  • lengthCap is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value, + * sampling stops in the current direction. The default value is 0.26.
  • * - * stepSize is a scalar value indicating the distance to the next texel sample in the current direction. The default value is 1.95. + *
  • stepSize is a scalar value indicating the distance to the next texel sample in the current direction. The default value is 1.95.
  • * - * frustumLength is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment. - * The default value is 1000.0. + *
  • frustumLength is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment. + * The default value is 1000.0.
  • * - * ambientOcclusionOnly is a boolean value. When true, only the shadows generated are written to the output. When false, the input texture is modulated - * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is false. - *

    + *
  • ambientOcclusionOnly is a boolean value. When true, only the shadows generated are written to the output. When false, the input texture is modulated + * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is false.
  • + *
*

* delta, sigma, and kernelSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. * The blur is applied to the shadows generated from the image to make them smoother. @@ -202,15 +202,15 @@ define([ * This stage has the following uniforms: contrast, brightness, glowOnly, * delta, sigma, and kernelSize. *

- *

- * contrast is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is 128.0. + *

    + *
  • contrast is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is 128.0.
  • * - * brightness is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is - * added to the brightness. The default value is -0.3. + *
  • brightness is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is + * added to the brightness. The default value is -0.3.
  • * - * glowOnly is a boolean value. When true, only the glow effect will be shown. When false, the glow will be added to the input texture. - * The default value is false. This is a debug option for viewing the effects when changing the other uniform values. - *

    + *
  • glowOnly is a boolean value. When true, only the glow effect will be shown. When false, the glow will be added to the input texture. + * The default value is false. This is a debug option for viewing the effects when changing the other uniform values.
  • + *
*

* delta, sigma, and kernelSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. * The blur is applied to the shadows generated from the image to make them smoother. @@ -663,8 +663,6 @@ define([ * assign the return value (undefined) to the object as done in the example. *

* - * @returns {undefined} - * * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called. * * @see PostProcessStageCollection#isDestroyed diff --git a/Source/Scene/PostProcessStageComposite.js b/Source/Scene/PostProcessStageComposite.js index a5735e1249e1..acaf3d2c5228 100644 --- a/Source/Scene/PostProcessStageComposite.js +++ b/Source/Scene/PostProcessStageComposite.js @@ -250,8 +250,6 @@ define([ * assign the return value (undefined) to the object as done in the example. *

* - * @returns {undefined} - * * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called. * * @see PostProcessStageComposite#isDestroyed diff --git a/Source/Scene/PostProcessStageLibrary.js b/Source/Scene/PostProcessStageLibrary.js index 83da2dde04fe..66b8aa877bf9 100644 --- a/Source/Scene/PostProcessStageLibrary.js +++ b/Source/Scene/PostProcessStageLibrary.js @@ -222,10 +222,10 @@ define([ *

* This stage has the following uniforms: color and length *

- *

- * color is the color of the highlighted edge. The default is {@link Color#BLACK}. - * length is the length of the edges in pixels. The default is 0.5. - *

+ *
    + *
  • color is the color of the highlighted edge. The default is {@link Color#BLACK}.
  • + *
  • length is the length of the edges in pixels. The default is 0.5.
  • + *
* @return {PostProcessStageComposite} A post-process stage that applies a silhouette effect. */ PostProcessStageLibrary.createSilhouetteStage = function() { @@ -289,13 +289,13 @@ define([ * This post-process stage has the following uniforms: contrast, brightness, glowOnly, * delta, sigma, and stepSize. *

- *

- * contrast is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is 128.0. - * brightness is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is - * added to the brightness. The default value is -0.3. - * glowOnly is a boolean value. When true, only the glow effect will be shown. When false, the glow will be added to the input texture. - * The default value is false. This is a debug option for viewing the effects when changing the other uniform values. - *

+ *
    + *
  • contrast is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is 128.0.
  • + *
  • brightness is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is + * added to the brightness. The default value is -0.3.
  • + *
  • glowOnly is a boolean value. When true, only the glow effect will be shown. When false, the glow will be added to the input texture. + * The default value is false. This is a debug option for viewing the effects when changing the other uniform values.
  • + *
*

* delta, sigma, and stepSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. *

@@ -398,19 +398,19 @@ define([ * stepSize, frustumLength, randomTexture, ambientOcclusionOnly, * delta, sigma, and blurStepSize. *

- *

- * intensity is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is 3.0. - * bias is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, - * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is 0.1. - * lengthCap is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value, - * sampling stops in the current direction. The default value is 0.26. - * stepSize is a scalar value indicating the distance to the next texel sample in the current direction. The default value is 1.95. - * frustumLength is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment. - * The default value is 1000.0. - * randomTexture is a texture where the red channel is a random value in [0.0, 1.0]. The default value is undefined. This texture needs to be set. - * ambientOcclusionOnly is a boolean value. When true, only the shadows generated are written to the output. When false, the input texture is modulated - * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is false. - *

+ *
    + *
  • intensity is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is 3.0.
  • + *
  • bias is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, + * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is 0.1.
  • + *
  • lengthCap is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value, + * sampling stops in the current direction. The default value is 0.26.
  • + *
  • stepSize is a scalar value indicating the distance to the next texel sample in the current direction. The default value is 1.95.
  • + *
  • frustumLength is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment. + * The default value is 1000.0.
  • + *
  • randomTexture is a texture where the red channel is a random value in [0.0, 1.0]. The default value is undefined. This texture needs to be set.
  • + *
  • ambientOcclusionOnly is a boolean value. When true, only the shadows generated are written to the output. When false, the input texture is modulated + * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is false.
  • + *
*

* delta, sigma, and blurStepSize are the same properties as {@link PostProcessStageLibrary#createBlurStage}. * The blur is applied to the shadows generated from the image to make them smoother. @@ -621,12 +621,16 @@ define([ * Creates a post-process stage that applies an effect simulating light flaring a camera lens. *

* This stage has the following uniforms: dirtTexture, starTexture, intensity, distortion, ghostDispersal, - * haloWidth, and earthRadius. dirtTexture is a texture sampled to simulate dirt on the lens. starTexture is the texture - * sampled for the star pattern of the flare. intensity is a scalar multiplied by the result of the lens flare. The default value is 2.0. - * distortion is a scalar value that affects the chromatic effect distortion. The default value is 10.0. - * ghostDispesal is a scalar indicating how far the halo effect is from the center of the texture. The default value is 0.4. - * haloWidth is a scalar representing the width of the halo from the ghost dispersal. The default value is 0.4. - * earthRadius is the maximum radius of the earth. The default value is Ellipsoid.WGS84.maximumRadius. + * haloWidth, and earthRadius. + *

    + *
  • dirtTexture is a texture sampled to simulate dirt on the lens.
  • + *
  • starTexture is the texture sampled for the star pattern of the flare.
  • + *
  • intensity is a scalar multiplied by the result of the lens flare. The default value is 2.0.
  • + *
  • distortion is a scalar value that affects the chromatic effect distortion. The default value is 10.0.
  • + *
  • ghostDispesal is a scalar indicating how far the halo effect is from the center of the texture. The default value is 0.4.
  • + *
  • haloWidth is a scalar representing the width of the halo from the ghost dispersal. The default value is 0.4.
  • + *
  • earthRadius is the maximum radius of the earth. The default value is Ellipsoid.WGS84.maximumRadius.
  • + *
*

* @return {PostProcessStage} A post-process stage for applying a lens flare effect. */ diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index 32d29eab5779..a76981a5c173 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -354,8 +354,6 @@ define([ * assign the return value (undefined) to the object as done in the example. *

* - * @returns {undefined} - * * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called. * * @see PostProcessStageTextureCache#isDestroyed diff --git a/Specs/Scene/PostProcessStageLibrarySpec.js b/Specs/Scene/PostProcessStageLibrarySpec.js index f321e0f72d4c..276b830bda91 100644 --- a/Specs/Scene/PostProcessStageLibrarySpec.js +++ b/Specs/Scene/PostProcessStageLibrarySpec.js @@ -347,7 +347,6 @@ defineSuite([ scene.postProcessStages.ambientOcclusion.uniforms.ambientOcclusionOnly = true; scene.renderForSpecs(); expect(scene).toRenderAndCall(function(rgba) { - console.log(rgba); for (var i = 0; i < rgba.length; i += 4) { expect(rgba[i]).toEqual(255); expect(rgba[i + 1]).toEqual(255); diff --git a/Specs/Scene/PostProcessStageSpec.js b/Specs/Scene/PostProcessStageSpec.js index ae2c493d931a..38c969d6447d 100644 --- a/Specs/Scene/PostProcessStageSpec.js +++ b/Specs/Scene/PostProcessStageSpec.js @@ -152,6 +152,31 @@ defineSuite([ }); }); + it('can use a image uniform', function() { + var ready = false; + var image = new Image(); + image.src = './Data/Images/Blue2x2.png'; + image.onload = function() { ready = true; }; + + return pollToPromise(function() { + return ready; + }).then(function() { + expect(scene).toRender([0, 0, 0, 255]); + var stage = scene.postProcessStages.add(new PostProcessStage({ + fragmentShader : 'uniform sampler2D texture; void main() { gl_FragColor = texture2D(texture, vec2(0.5)); }', + uniforms : { + texture : image + } + })); + return pollToPromise(function() { + scene.renderForSpecs(); + return stage.ready; + }).then(function() { + expect(scene).toRender([0, 0, 255, 255]); + }); + }); + }); + it('destroys', function() { var stage = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' From 408f5ca2ba464140743dea5e9f1e3847f09f26fa Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 18 Apr 2018 19:23:04 -0400 Subject: [PATCH 88/99] Remove terrain from lens flare example. --- Apps/Sandcastle/gallery/LensFlare.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Apps/Sandcastle/gallery/LensFlare.html b/Apps/Sandcastle/gallery/LensFlare.html index 86c76f01880a..418e77b9f5bd 100644 --- a/Apps/Sandcastle/gallery/LensFlare.html +++ b/Apps/Sandcastle/gallery/LensFlare.html @@ -51,10 +51,6 @@ 'use strict'; //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); -viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ - url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles', - requestVertexNormals : true -}); var viewModel = { show: true, From 8a5bef0977232cc360e6f0d142ddc297795ca86d Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Thu, 19 Apr 2018 16:35:05 -0400 Subject: [PATCH 89/99] Fix resizing post process framebuffers. --- Source/Scene/PostProcessStage.js | 13 ++++++++----- Source/Scene/PostProcessStageTextureCache.js | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index 279db8e5192e..0b2f6f74a978 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -628,11 +628,14 @@ define([ } var colorTexture = framebuffer.getColorTexture(0); - var renderState = this._renderState; - if (!defined(renderState) || colorTexture.width !== renderState.viewport.width || colorTexture.height !== renderState.viewport.height) { - this._renderState = RenderState.fromCache({ - viewport : new BoundingRectangle(0, 0, colorTexture.width, colorTexture.height) - }); + var renderState; + if (colorTexture.width !== context.drawingBufferWidth || colorTexture.height !== context.drawingBufferHeight) { + renderState = this._renderState; + if (!defined(renderState) || colorTexture.width !== renderState.viewport.width || colorTexture.height !== renderState.viewport.height) { + this._renderState = RenderState.fromCache({ + viewport : new BoundingRectangle(0, 0, colorTexture.width, colorTexture.height) + }); + } } this._command.renderState = renderState; diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index a76981a5c173..a5f6f1bd1dee 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -229,8 +229,8 @@ define([ context : context, colorTextures : [new Texture({ context : context, - width : width, - height : height, + width : textureWidth, + height : textureHeight, pixelFormat : framebuffer.pixelFormat, pixelDatatype : framebuffer.pixelDatatype })] From 6682e22dcff57ab62299c93160ad7654252be242 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 2 May 2018 16:18:00 -0400 Subject: [PATCH 90/99] Fix silhouette in Edge. --- Source/Shaders/PostProcessStages/EdgeDetection.glsl | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Shaders/PostProcessStages/EdgeDetection.glsl b/Source/Shaders/PostProcessStages/EdgeDetection.glsl index 1c788720f5b8..cbf257cc6c81 100644 --- a/Source/Shaders/PostProcessStages/EdgeDetection.glsl +++ b/Source/Shaders/PostProcessStages/EdgeDetection.glsl @@ -1,6 +1,5 @@ uniform sampler2D depthTexture; uniform float length; -uniform float stepSize; uniform vec4 color; varying vec2 v_textureCoordinates; From f6d3654278eccf2dfbd09d699fb2f21ce019808e Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 2 May 2018 17:24:06 -0400 Subject: [PATCH 91/99] Fix blank screen and FXAA in IE. --- Source/Scene/Scene.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index 4c26e02ca8c6..e492b4adb3b4 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -3009,8 +3009,11 @@ define([ scene._oit.execute(context, passState); } - if (usePostProcess && (useOIT || defined(globeFramebuffer))) { - var inputFramebuffer = useOIT ? sceneFramebuffer : globeFramebuffer; + if (usePostProcess) { + var inputFramebuffer = sceneFramebuffer; + if (useGlobeDepthFramebuffer && !useOIT) { + inputFramebuffer = globeFramebuffer; + } var postProcess = scene.postProcessStages; var colorTexture = inputFramebuffer.getColorTexture(0); From a68418c03d2555dcfa291342b2b5063df569d2c5 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 2 May 2018 19:45:38 -0400 Subject: [PATCH 92/99] Do not execute stages that require a depth texture and the extension is unavailable. --- Source/Scene/PostProcessStage.js | 18 +++++++++++ Source/Scene/PostProcessStageCollection.js | 19 ++++++----- Source/Scene/PostProcessStageComposite.js | 23 ++++++++++++++ Source/Scene/PostProcessStageTextureCache.js | 33 ++++++++++---------- 4 files changed, 70 insertions(+), 23 deletions(-) diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index 0b2f6f74a978..b981472f38a3 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -161,6 +161,8 @@ define([ this._enabled = true; } + var depthTextureRegex = /uniform\s+sampler2D\s+depthTexture/g; + defineProperties(PostProcessStage.prototype, { /** * Determines if this post-process stage is ready to be executed. A stage is only executed when both ready @@ -333,6 +335,22 @@ define([ } return undefined; } + }, + /** + * Whether or not this post process stage requires a depth texture. If true and the WEBGL_depth_texture + * extension is unavailable, this stage will not execute. + * + * @memberof PostProcessStage.prototype + * @type {Boolean} + * @readonly + * + * @see {Context#depthTexture} + * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} + */ + requiresDepthTexture : { + get : function() { + return depthTextureRegex.test(this._fragmentShader); + } } }); diff --git a/Source/Scene/PostProcessStageCollection.js b/Source/Scene/PostProcessStageCollection.js index ab1604b21352..c363d5cf9bfa 100644 --- a/Source/Scene/PostProcessStageCollection.js +++ b/Source/Scene/PostProcessStageCollection.js @@ -450,7 +450,7 @@ define([ var count = 0; for (i = 0; i < length; ++i) { stage = stages[i]; - if (stage.ready && stage.enabled) { + if (stage.ready && stage.enabled && (!stage.requiresDepthTexture || context.depthTexture)) { activeStages[count++] = stage; } } @@ -460,24 +460,26 @@ define([ var bloom = this._bloom; var fxaa = this._fxaa; - if (this._textureCacheDirty || count !== this._lastLength || ao.enabled !== this._aoEnabled || bloom.enabled !== this._bloomEnabled || fxaa.enabled !== this._fxaaEnabled) { + var aoEnabled = ao.enabled && context.depthTexture; + + if (this._textureCacheDirty || count !== this._lastLength || aoEnabled !== this._aoEnabled || bloom.enabled !== this._bloomEnabled || fxaa.enabled !== this._fxaaEnabled) { // The number of stages to execute has changed. // Update dependencies and recreate framebuffers. this._textureCache.updateDependencies(); this._lastLength = count; - this._aoEnabled = ao.enabled; + this._aoEnabled = aoEnabled; this._bloomEnabled = bloom.enabled; this._fxaaEnabled = fxaa.enabled; this._textureCacheDirty = false; } - if (defined(this._randomTexture) && !ao.enabled) { + if (defined(this._randomTexture) && !aoEnabled) { this._randomTexture.destroy(); this._randomTexture = undefined; } - if (!defined(this._randomTexture) && ao.enabled) { + if (!defined(this._randomTexture) && aoEnabled) { length = 256 * 256 * 3; var random = new Uint8Array(length); for (i = 0; i < length; i += 3) { @@ -585,12 +587,15 @@ define([ var fxaa = this._fxaa; var ao = this._ao; var bloom = this._bloom; - if (!fxaa.enabled && !ao.enabled && !bloom.enabled && length === 0) { + + var aoEnabled = ao.enabled && context.depthTexture; + + if (!fxaa.enabled && !aoEnabled && !bloom.enabled && length === 0) { return; } var initialTexture = colorTexture; - if (ao.enabled && ao.ready) { + if (aoEnabled && ao.ready) { execute(ao, context, initialTexture, depthTexture); initialTexture = getOutputTexture(ao); } diff --git a/Source/Scene/PostProcessStageComposite.js b/Source/Scene/PostProcessStageComposite.js index acaf3d2c5228..ffdf3bb20caa 100644 --- a/Source/Scene/PostProcessStageComposite.js +++ b/Source/Scene/PostProcessStageComposite.js @@ -193,6 +193,29 @@ define([ get : function() { return this._stages.length; } + }, + /** + * Whether or not this post process stage requires a depth texture. If true and the WEBGL_depth_texture + * extension is unavailable, this stage will not execute. + * + * @memberof PostProcessStageComposite.prototype + * @type {Boolean} + * @readonly + * + * @see {Context#depthTexture} + * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} + */ + requiresDepthTexture : { + get : function() { + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + if (stages[i].requiresDepthTexture) { + return true; + } + } + return false; + } } }); diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index a5f6f1bd1dee..e1994dea5512 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -44,8 +44,8 @@ define([ return stage.name; } - function getStageDependencies(collection, dependencies, stage, previousName) { - if (!stage.enabled) { + function getStageDependencies(collection, context, dependencies, stage, previousName) { + if (!stage.enabled || (stage.requiresDepthTexture && !context.depthTexture)) { return previousName; } @@ -70,8 +70,8 @@ define([ return stage.name; } - function getCompositeDependencies(collection, dependencies, composite, previousName) { - if (defined(composite.enabled) && !composite.enabled) { + function getCompositeDependencies(collection, context, dependencies, composite, previousName) { + if ((defined(composite.enabled) && !composite.enabled) || (defined(composite.requiresDepthTexture) && composite.requiresDepthTexture && !context.depthTexture)) { return previousName; } @@ -81,9 +81,9 @@ define([ for (var i = 0; i < length; ++i) { var stage = composite.get(i); if (defined(stage.length)) { - currentName = getCompositeDependencies(collection, dependencies, stage, previousName); + currentName = getCompositeDependencies(collection, context, dependencies, stage, previousName); } else { - currentName = getStageDependencies(collection, dependencies, stage, previousName); + currentName = getStageDependencies(collection, context, dependencies, stage, previousName); } // Stages in a series only depend on the previous stage if (inSeries) { @@ -107,7 +107,7 @@ define([ return currentName; } - function getDependencies(collection) { + function getDependencies(collection, context) { var dependencies = {}; if (defined(collection.ambientOcclusion)) { @@ -115,12 +115,12 @@ define([ var bloom = collection.bloom; var fxaa = collection.fxaa; - var previousName = getCompositeDependencies(collection, dependencies, ao, undefined); - previousName = getCompositeDependencies(collection, dependencies, bloom, previousName); - previousName = getCompositeDependencies(collection, dependencies, collection, previousName); - getStageDependencies(collection, dependencies, fxaa, previousName); + var previousName = getCompositeDependencies(collection, context, dependencies, ao, undefined); + previousName = getCompositeDependencies(collection, context, dependencies, bloom, previousName); + previousName = getCompositeDependencies(collection, context, dependencies, collection, previousName); + getStageDependencies(collection, context, dependencies, fxaa, previousName); } else { - getCompositeDependencies(collection, dependencies, collection, undefined); + getCompositeDependencies(collection, context, dependencies, collection, undefined); } return dependencies; @@ -184,8 +184,8 @@ define([ return framebuffer; } - function createFramebuffers(cache) { - var dependencies = getDependencies(cache._collection); + function createFramebuffers(cache, context) { + var dependencies = getDependencies(cache._collection, context); for (var stageName in dependencies) { if (dependencies.hasOwnProperty(stageName)) { cache._stageNameToFramebuffer[stageName] = getFramebuffer(cache, stageName, dependencies[stageName]); @@ -254,7 +254,8 @@ define([ PostProcessStageTextureCache.prototype.update = function(context) { var collection = this._collection; var updateDependencies = this._updateDependencies; - var needsCheckDimensionsUpdate = !defined(collection._activeStages) || collection._activeStages.length > 0 || collection.ambientOcclusion.enabled || collection.bloom.enabled || collection.fxaa.enabled; + var aoEnabled = collection.ambientOcclusion.enabled && context.depthTexture; + var needsCheckDimensionsUpdate = !defined(collection._activeStages) || collection._activeStages.length > 0 || aoEnabled || collection.bloom.enabled || collection.fxaa.enabled; if (updateDependencies || (!needsCheckDimensionsUpdate && this._framebuffers.length > 0)) { releaseResources(this); this._framebuffers.length = 0; @@ -268,7 +269,7 @@ define([ } if (this._framebuffers.length === 0) { - createFramebuffers(this); + createFramebuffers(this, context); } var width = context.drawingBufferWidth; From 1928b7fb57ccce1ab23a647787d6185be67ceb42 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Wed, 2 May 2018 19:47:51 -0400 Subject: [PATCH 93/99] Fix crash when the Sun is visible after last commit. --- Source/Scene/PostProcessStageTextureCache.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index e1994dea5512..e61d8a158114 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -254,7 +254,7 @@ define([ PostProcessStageTextureCache.prototype.update = function(context) { var collection = this._collection; var updateDependencies = this._updateDependencies; - var aoEnabled = collection.ambientOcclusion.enabled && context.depthTexture; + var aoEnabled = defined(collection.ambientOcclusion) && collection.ambientOcclusion.enabled && context.depthTexture; var needsCheckDimensionsUpdate = !defined(collection._activeStages) || collection._activeStages.length > 0 || aoEnabled || collection.bloom.enabled || collection.fxaa.enabled; if (updateDependencies || (!needsCheckDimensionsUpdate && this._framebuffers.length > 0)) { releaseResources(this); From 8d6ad178e3b6aebab8e28ffeaf9d50fe60a28db3 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Thu, 3 May 2018 15:24:30 -0400 Subject: [PATCH 94/99] Update tests to check for depth textures and change requiresDepthTexture to isSupported. --- Source/Scene/PostProcessStage.js | 41 ++++++------ Source/Scene/PostProcessStageCollection.js | 2 +- Source/Scene/PostProcessStageComposite.js | 49 +++++++------- Source/Scene/PostProcessStageTextureCache.js | 4 +- Specs/Scene/PostProcessStageCompositeSpec.js | 68 +++++++++++++++++++- Specs/Scene/PostProcessStageLibrarySpec.js | 12 ++++ Specs/Scene/PostProcessStageSpec.js | 58 ++++++++++++++++- 7 files changed, 187 insertions(+), 47 deletions(-) diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index b981472f38a3..d7bfe26d46c1 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -161,8 +161,6 @@ define([ this._enabled = true; } - var depthTextureRegex = /uniform\s+sampler2D\s+depthTexture/g; - defineProperties(PostProcessStage.prototype, { /** * Determines if this post-process stage is ready to be executed. A stage is only executed when both ready @@ -335,25 +333,32 @@ define([ } return undefined; } - }, - /** - * Whether or not this post process stage requires a depth texture. If true and the WEBGL_depth_texture - * extension is unavailable, this stage will not execute. - * - * @memberof PostProcessStage.prototype - * @type {Boolean} - * @readonly - * - * @see {Context#depthTexture} - * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} - */ - requiresDepthTexture : { - get : function() { - return depthTextureRegex.test(this._fragmentShader); - } } }); + var depthTextureRegex = /uniform\s+sampler2D\s+depthTexture/g; + + /** + * Whether or not this post process stage is supported. + *

+ * A post process stage is not supported when it requires a depth texture and the WEBGL_depth_texture extension is not + * supported. + *

+ * + * @param {Context} context The context. + * @return {Boolean} Whether this post process stage is supported. + * + * @see {Context#depthTexture} + * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} + */ + PostProcessStage.prototype.isSupported = function(context) { + //>>includeStart('debug', pragmas.debug); + Check.typeOf.object('context', context); + //>>includeEnd('debug'); + + return !depthTextureRegex.test(this._fragmentShader) || context.depthTexture; + }; + function getUniformValueGetterAndSetter(stage, uniforms, name) { var currentValue = uniforms[name]; if (typeof currentValue === 'string' || currentValue instanceof HTMLCanvasElement || currentValue instanceof HTMLImageElement || diff --git a/Source/Scene/PostProcessStageCollection.js b/Source/Scene/PostProcessStageCollection.js index c363d5cf9bfa..11d70cb4cb28 100644 --- a/Source/Scene/PostProcessStageCollection.js +++ b/Source/Scene/PostProcessStageCollection.js @@ -450,7 +450,7 @@ define([ var count = 0; for (i = 0; i < length; ++i) { stage = stages[i]; - if (stage.ready && stage.enabled && (!stage.requiresDepthTexture || context.depthTexture)) { + if (stage.ready && stage.enabled && stage.isSupported(context)) { activeStages[count++] = stage; } } diff --git a/Source/Scene/PostProcessStageComposite.js b/Source/Scene/PostProcessStageComposite.js index ffdf3bb20caa..8f60731ec82e 100644 --- a/Source/Scene/PostProcessStageComposite.js +++ b/Source/Scene/PostProcessStageComposite.js @@ -193,31 +193,36 @@ define([ get : function() { return this._stages.length; } - }, - /** - * Whether or not this post process stage requires a depth texture. If true and the WEBGL_depth_texture - * extension is unavailable, this stage will not execute. - * - * @memberof PostProcessStageComposite.prototype - * @type {Boolean} - * @readonly - * - * @see {Context#depthTexture} - * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} - */ - requiresDepthTexture : { - get : function() { - var stages = this._stages; - var length = stages.length; - for (var i = 0; i < length; ++i) { - if (stages[i].requiresDepthTexture) { - return true; - } - } + } + }); + + /** + * Whether or not this post process stage is supported. + *

+ * A post process stage is not supported when it requires a depth texture and the WEBGL_depth_texture extension is not + * supported. + *

+ * + * @param {Context} context The context. + * @return {Boolean} Whether this post process stage is supported. + * + * @see {Context#depthTexture} + * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} + */ + PostProcessStageComposite.prototype.isSupported = function(context) { + //>>includeStart('debug', pragmas.debug); + Check.typeOf.object('context', context); + //>>includeEnd('debug'); + + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + if (!stages[i].isSupported(context)) { return false; } } - }); + return true; + }; /** * Gets the post-process stage at index diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index e61d8a158114..dc709851111e 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -45,7 +45,7 @@ define([ } function getStageDependencies(collection, context, dependencies, stage, previousName) { - if (!stage.enabled || (stage.requiresDepthTexture && !context.depthTexture)) { + if (!stage.enabled || !stage.isSupported(context)) { return previousName; } @@ -71,7 +71,7 @@ define([ } function getCompositeDependencies(collection, context, dependencies, composite, previousName) { - if ((defined(composite.enabled) && !composite.enabled) || (defined(composite.requiresDepthTexture) && composite.requiresDepthTexture && !context.depthTexture)) { + if ((defined(composite.enabled) && !composite.enabled) || (defined(composite.isSupported) && !composite.isSupported(context))) { return previousName; } diff --git a/Specs/Scene/PostProcessStageCompositeSpec.js b/Specs/Scene/PostProcessStageCompositeSpec.js index 0f2c625c3eae..d956ee981e8e 100644 --- a/Specs/Scene/PostProcessStageCompositeSpec.js +++ b/Specs/Scene/PostProcessStageCompositeSpec.js @@ -1,13 +1,19 @@ defineSuite([ 'Scene/PostProcessStageComposite', 'Core/Color', + 'Core/defined', 'Scene/PostProcessStage', - 'Specs/createScene' + 'Specs/createScene', + 'Specs/pollToPromise', + 'ThirdParty/when' ], function( PostProcessStageComposite, Color, + defined, PostProcessStage, - createScene) { + createScene, + pollToPromise, + when) { 'use strict'; var scene; @@ -161,6 +167,64 @@ defineSuite([ expect(scene).toRender([0, 0, 255, 255]); }); + it('isSupported throws without a context', function() { + var stage = new PostProcessStageComposite({ + stages : [new PostProcessStage({ + fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' + })] + }); + expect(function() { + return stage.isSupported(); + }).toThrowDeveloperError(); + }); + + it('isSupported', function() { + var stage = new PostProcessStageComposite({ + stages : [new PostProcessStage({ + fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' + })] + }); + expect(stage.isSupported(scene.context)).toEqual(true); + stage = new PostProcessStageComposite({ + stages : [new PostProcessStage({ + fragmentShader : 'uniform sampler2D depthTexture; void main() { texture2D(depthTexture, vec2(0.5)); }' + })] + }); + expect(stage.isSupported(scene.context)).toEqual(scene.context.depthTexture); + }); + + it('does not run a stage that requires depth textures when depth textures are not supported', function() { + var s = createScene(); + s.context._depthTexture = false; + + if (defined(s._globeDepth)) { + s._globeDepth.destroy(); + s._globeDepth = undefined; + if (defined(s._oit)) { + s._oit.destroy(); + s._oit = undefined; + } + } + + expect(s).toRender([0, 0, 0, 255]); + var stage = new PostProcessStageComposite({ + stages : [new PostProcessStage({ + fragmentShader : 'uniform sampler2D depthTexture; void main() { gl_FragColor = vec4(1.0); }' + })] + }); + return pollToPromise(function() { + s.renderForSpecs(); + return stage.ready; + }).then(function() { + expect(s).toRender([0, 0, 0, 255]); + }).always(function(e) { + s.destroyForSpecs(); + if (e) { + return when.reject(e); + } + }); + }); + it('destroys', function() { var stage1 = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' diff --git a/Specs/Scene/PostProcessStageLibrarySpec.js b/Specs/Scene/PostProcessStageLibrarySpec.js index 276b830bda91..eaa8afcc7ddc 100644 --- a/Specs/Scene/PostProcessStageLibrarySpec.js +++ b/Specs/Scene/PostProcessStageLibrarySpec.js @@ -193,6 +193,10 @@ defineSuite([ }); it('depth view', function() { + if (!scene.context.depthTexture) { + return; + } + var fs = 'void main() { \n' + ' gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); \n' + @@ -279,6 +283,10 @@ defineSuite([ }); it('depth of field', function() { + if (!scene.context.depthTexture) { + return; + } + var origin = Cartesian3.fromDegrees(-123.0744619, 44.0503706, 100.0); var modelMatrix = Transforms.headingPitchRollToFixedFrame(origin, new HeadingPitchRoll()); @@ -343,6 +351,10 @@ defineSuite([ }); it('ambient occlusion', function() { + if (!scene.context.depthTexture) { + return; + } + scene.postProcessStages.ambientOcclusion.enabled = true; scene.postProcessStages.ambientOcclusion.uniforms.ambientOcclusionOnly = true; scene.renderForSpecs(); diff --git a/Specs/Scene/PostProcessStageSpec.js b/Specs/Scene/PostProcessStageSpec.js index 38c969d6447d..bfee54fd81f7 100644 --- a/Specs/Scene/PostProcessStageSpec.js +++ b/Specs/Scene/PostProcessStageSpec.js @@ -2,20 +2,24 @@ defineSuite([ 'Scene/PostProcessStage', 'Core/BoundingRectangle', 'Core/Color', + 'Core/defined', 'Core/PixelFormat', 'Renderer/PixelDatatype', 'Scene/PostProcessStageSampleMode', 'Specs/createScene', - 'Specs/pollToPromise' + 'Specs/pollToPromise', + 'ThirdParty/when' ], function( PostProcessStage, BoundingRectangle, Color, + defined, PixelFormat, PixelDatatype, PostProcessStageSampleMode, createScene, - pollToPromise) { + pollToPromise, + when) { 'use strict'; var scene; @@ -177,6 +181,56 @@ defineSuite([ }); }); + it('isSupported throws without a context', function() { + var stage = new PostProcessStage({ + fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' + }); + expect(function() { + return stage.isSupported(); + }).toThrowDeveloperError(); + }); + + it('isSupported', function() { + var stage = new PostProcessStage({ + fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' + }); + expect(stage.isSupported(scene.context)).toEqual(true); + stage = new PostProcessStage({ + fragmentShader : 'uniform sampler2D depthTexture; void main() { texture2D(depthTexture, vec2(0.5)); }' + }); + expect(stage.isSupported(scene.context)).toEqual(scene.context.depthTexture); + }); + + it('does not run a stage that requires depth textures when depth textures are not supported', function() { + var s = createScene(); + s.context._depthTexture = false; + + if (defined(s._globeDepth)) { + s._globeDepth.destroy(); + s._globeDepth = undefined; + if (defined(s._oit)) { + s._oit.destroy(); + s._oit = undefined; + } + } + + expect(s).toRender([0, 0, 0, 255]); + var stage = s.postProcessStages.add(new PostProcessStage({ + fragmentShader : 'uniform sampler2D depthTexture; void main() { gl_FragColor = vec4(1.0); }' + })); + return pollToPromise(function() { + s.renderForSpecs(); + return stage.ready; + }).then(function() { + expect(s).toRender([0, 0, 0, 255]); + }).always(function(e) { + s.destroyForSpecs(); + if (e) { + return when.reject(e); + } + }); + }); + it('destroys', function() { var stage = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' From 6e53e43ccb5c84ee4de79ada3602596c39080975 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Thu, 3 May 2018 17:08:16 -0400 Subject: [PATCH 95/99] Updates from review. --- Source/Scene/PostProcessStage.js | 16 +++++++---- Source/Scene/PostProcessStageCollection.js | 22 ++++++++------ Source/Scene/PostProcessStageComposite.js | 30 ++++++++++++-------- Source/Scene/PostProcessStageTextureCache.js | 10 ++++--- Specs/Scene/PostProcessStageCompositeSpec.js | 6 ++-- Specs/Scene/PostProcessStageSpec.js | 6 ++-- 6 files changed, 54 insertions(+), 36 deletions(-) diff --git a/Source/Scene/PostProcessStage.js b/Source/Scene/PostProcessStage.js index d7bfe26d46c1..6116cb6ed2d8 100644 --- a/Source/Scene/PostProcessStage.js +++ b/Source/Scene/PostProcessStage.js @@ -338,6 +338,13 @@ define([ var depthTextureRegex = /uniform\s+sampler2D\s+depthTexture/g; + /** + * @private + */ + PostProcessStage.prototype._isSupported = function(context) { + return !depthTextureRegex.test(this._fragmentShader) || context.depthTexture; + }; + /** * Whether or not this post process stage is supported. *

@@ -345,18 +352,17 @@ define([ * supported. *

* - * @param {Context} context The context. + * @param {Scene} scene The scene. * @return {Boolean} Whether this post process stage is supported. * * @see {Context#depthTexture} * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} */ - PostProcessStage.prototype.isSupported = function(context) { + PostProcessStage.prototype.isSupported = function(scene) { //>>includeStart('debug', pragmas.debug); - Check.typeOf.object('context', context); + Check.typeOf.object('scene', scene); //>>includeEnd('debug'); - - return !depthTextureRegex.test(this._fragmentShader) || context.depthTexture; + return this._isSupported(scene.context); }; function getUniformValueGetterAndSetter(stage, uniforms, name) { diff --git a/Source/Scene/PostProcessStageCollection.js b/Source/Scene/PostProcessStageCollection.js index 11d70cb4cb28..a7eba11beede 100644 --- a/Source/Scene/PostProcessStageCollection.js +++ b/Source/Scene/PostProcessStageCollection.js @@ -450,7 +450,7 @@ define([ var count = 0; for (i = 0; i < length; ++i) { stage = stages[i]; - if (stage.ready && stage.enabled && stage.isSupported(context)) { + if (stage.ready && stage.enabled && stage._isSupported(context)) { activeStages[count++] = stage; } } @@ -460,17 +460,19 @@ define([ var bloom = this._bloom; var fxaa = this._fxaa; - var aoEnabled = ao.enabled && context.depthTexture; + var aoEnabled = ao.enabled && ao._isSupported(context); + var bloomEnabled = bloom.enabled && bloom._isSupported(context); + var fxaaEnabled = fxaa.enabled && fxaa._isSupported(context); - if (this._textureCacheDirty || count !== this._lastLength || aoEnabled !== this._aoEnabled || bloom.enabled !== this._bloomEnabled || fxaa.enabled !== this._fxaaEnabled) { + if (this._textureCacheDirty || count !== this._lastLength || aoEnabled !== this._aoEnabled || bloomEnabled !== this._bloomEnabled || fxaaEnabled !== this._fxaaEnabled) { // The number of stages to execute has changed. // Update dependencies and recreate framebuffers. this._textureCache.updateDependencies(); this._lastLength = count; this._aoEnabled = aoEnabled; - this._bloomEnabled = bloom.enabled; - this._fxaaEnabled = fxaa.enabled; + this._bloomEnabled = bloomEnabled; + this._fxaaEnabled = fxaaEnabled; this._textureCacheDirty = false; } @@ -588,9 +590,11 @@ define([ var ao = this._ao; var bloom = this._bloom; - var aoEnabled = ao.enabled && context.depthTexture; + var aoEnabled = ao.enabled && ao._isSupported(context); + var bloomEnabled = bloom.enabled && bloom._isSupported(context); + var fxaaEnabled = fxaa.enabled && fxaa._isSupported(context); - if (!fxaa.enabled && !aoEnabled && !bloom.enabled && length === 0) { + if (!fxaaEnabled && !aoEnabled && !bloomEnabled && length === 0) { return; } @@ -599,7 +603,7 @@ define([ execute(ao, context, initialTexture, depthTexture); initialTexture = getOutputTexture(ao); } - if (bloom.enabled && bloom.ready) { + if (bloomEnabled && bloom.ready) { execute(bloom, context, initialTexture, depthTexture); initialTexture = getOutputTexture(bloom); } @@ -614,7 +618,7 @@ define([ lastTexture = getOutputTexture(activeStages[length - 1]); } - if (fxaa.enabled && fxaa.ready) { + if (fxaaEnabled && fxaa.ready) { execute(fxaa, context, lastTexture, depthTexture); } }; diff --git a/Source/Scene/PostProcessStageComposite.js b/Source/Scene/PostProcessStageComposite.js index 8f60731ec82e..6c5b4d71e2ac 100644 --- a/Source/Scene/PostProcessStageComposite.js +++ b/Source/Scene/PostProcessStageComposite.js @@ -196,6 +196,20 @@ define([ } }); + /** + * @private + */ + PostProcessStageComposite.prototype._isSupported = function(context) { + var stages = this._stages; + var length = stages.length; + for (var i = 0; i < length; ++i) { + if (!stages[i]._isSupported(context)) { + return false; + } + } + return true; + }; + /** * Whether or not this post process stage is supported. *

@@ -203,25 +217,17 @@ define([ * supported. *

* - * @param {Context} context The context. + * @param {Scene} scene The scene. * @return {Boolean} Whether this post process stage is supported. * * @see {Context#depthTexture} * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture} */ - PostProcessStageComposite.prototype.isSupported = function(context) { + PostProcessStageComposite.prototype.isSupported = function(scene) { //>>includeStart('debug', pragmas.debug); - Check.typeOf.object('context', context); + Check.typeOf.object('scene', scene); //>>includeEnd('debug'); - - var stages = this._stages; - var length = stages.length; - for (var i = 0; i < length; ++i) { - if (!stages[i].isSupported(context)) { - return false; - } - } - return true; + return this._isSupported(scene.context); }; /** diff --git a/Source/Scene/PostProcessStageTextureCache.js b/Source/Scene/PostProcessStageTextureCache.js index dc709851111e..4dfd70997373 100644 --- a/Source/Scene/PostProcessStageTextureCache.js +++ b/Source/Scene/PostProcessStageTextureCache.js @@ -45,7 +45,7 @@ define([ } function getStageDependencies(collection, context, dependencies, stage, previousName) { - if (!stage.enabled || !stage.isSupported(context)) { + if (!stage.enabled || !stage._isSupported(context)) { return previousName; } @@ -71,7 +71,7 @@ define([ } function getCompositeDependencies(collection, context, dependencies, composite, previousName) { - if ((defined(composite.enabled) && !composite.enabled) || (defined(composite.isSupported) && !composite.isSupported(context))) { + if ((defined(composite.enabled) && !composite.enabled) || (defined(composite._isSupported) && !composite._isSupported(context))) { return previousName; } @@ -254,8 +254,10 @@ define([ PostProcessStageTextureCache.prototype.update = function(context) { var collection = this._collection; var updateDependencies = this._updateDependencies; - var aoEnabled = defined(collection.ambientOcclusion) && collection.ambientOcclusion.enabled && context.depthTexture; - var needsCheckDimensionsUpdate = !defined(collection._activeStages) || collection._activeStages.length > 0 || aoEnabled || collection.bloom.enabled || collection.fxaa.enabled; + var aoEnabled = defined(collection.ambientOcclusion) && collection.ambientOcclusion.enabled && collection.ambientOcclusion._isSupported(context); + var bloomEnabled = defined(collection.bloom) && collection.bloom.enabled && collection.bloom._isSupported(context); + var fxaaEnabled = defined(collection.fxaa) && collection.fxaa.enabled && collection.fxaa._isSupported(context); + var needsCheckDimensionsUpdate = !defined(collection._activeStages) || collection._activeStages.length > 0 || aoEnabled || bloomEnabled || fxaaEnabled; if (updateDependencies || (!needsCheckDimensionsUpdate && this._framebuffers.length > 0)) { releaseResources(this); this._framebuffers.length = 0; diff --git a/Specs/Scene/PostProcessStageCompositeSpec.js b/Specs/Scene/PostProcessStageCompositeSpec.js index d956ee981e8e..0d6b9766fafe 100644 --- a/Specs/Scene/PostProcessStageCompositeSpec.js +++ b/Specs/Scene/PostProcessStageCompositeSpec.js @@ -167,7 +167,7 @@ defineSuite([ expect(scene).toRender([0, 0, 255, 255]); }); - it('isSupported throws without a context', function() { + it('isSupported throws without a scene', function() { var stage = new PostProcessStageComposite({ stages : [new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' @@ -184,13 +184,13 @@ defineSuite([ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' })] }); - expect(stage.isSupported(scene.context)).toEqual(true); + expect(stage.isSupported(scene)).toEqual(true); stage = new PostProcessStageComposite({ stages : [new PostProcessStage({ fragmentShader : 'uniform sampler2D depthTexture; void main() { texture2D(depthTexture, vec2(0.5)); }' })] }); - expect(stage.isSupported(scene.context)).toEqual(scene.context.depthTexture); + expect(stage.isSupported(scene)).toEqual(scene.context.depthTexture); }); it('does not run a stage that requires depth textures when depth textures are not supported', function() { diff --git a/Specs/Scene/PostProcessStageSpec.js b/Specs/Scene/PostProcessStageSpec.js index bfee54fd81f7..47894285535a 100644 --- a/Specs/Scene/PostProcessStageSpec.js +++ b/Specs/Scene/PostProcessStageSpec.js @@ -181,7 +181,7 @@ defineSuite([ }); }); - it('isSupported throws without a context', function() { + it('isSupported throws without a scene', function() { var stage = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' }); @@ -194,11 +194,11 @@ defineSuite([ var stage = new PostProcessStage({ fragmentShader : 'void main() { gl_FragColor = vec4(1.0); }' }); - expect(stage.isSupported(scene.context)).toEqual(true); + expect(stage.isSupported(scene)).toEqual(true); stage = new PostProcessStage({ fragmentShader : 'uniform sampler2D depthTexture; void main() { texture2D(depthTexture, vec2(0.5)); }' }); - expect(stage.isSupported(scene.context)).toEqual(scene.context.depthTexture); + expect(stage.isSupported(scene)).toEqual(scene.context.depthTexture); }); it('does not run a stage that requires depth textures when depth textures are not supported', function() { From 5e11e9ed262e6ef33bb92a78be1b5e91881dd196 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Thu, 3 May 2018 17:37:50 -0400 Subject: [PATCH 96/99] Modify random value texture sampling. --- Source/Scene/PostProcessStageCollection.js | 4 ++-- .../Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Scene/PostProcessStageCollection.js b/Source/Scene/PostProcessStageCollection.js index a7eba11beede..b23acfb816ae 100644 --- a/Source/Scene/PostProcessStageCollection.js +++ b/Source/Scene/PostProcessStageCollection.js @@ -498,8 +498,8 @@ define([ height : 256 }, sampler : new Sampler({ - wrapS : TextureWrap.CLAMP_TO_EDGE, - wrapT : TextureWrap.CLAMP_TO_EDGE, + wrapS : TextureWrap.REPEAT, + wrapT : TextureWrap.REPEAT, minificationFilter : TextureMinificationFilter.NEAREST, magnificationFilter : TextureMagnificationFilter.NEAREST }) diff --git a/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl b/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl index 59d84f3477c5..4a579dfc1e2c 100644 --- a/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +++ b/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl @@ -58,9 +58,7 @@ void main(void) float gapAngle = 90.0 * czm_radiansPerDegree; // RandomNoise - vec2 noiseMapSize = vec2(256.0, 256.0); - vec2 noiseScale = vec2(czm_viewport.z / noiseMapSize.x, czm_viewport.w / noiseMapSize.y); - float randomVal = texture2D(randomTexture, v_textureCoordinates * noiseScale).x; + float randomVal = texture2D(randomTexture, v_textureCoordinates).x; float inverseViewportWidth = 1.0 / czm_viewport.z; float inverseViewportHeight = 1.0 / czm_viewport.w; From 84e242acc7c5c67de7e5139d492f782982dfa17c Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Fri, 4 May 2018 16:17:05 -0400 Subject: [PATCH 97/99] Fix failing test. --- Specs/Scene/PostProcessStageCompositeSpec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Specs/Scene/PostProcessStageCompositeSpec.js b/Specs/Scene/PostProcessStageCompositeSpec.js index 0d6b9766fafe..7d2230b0ef03 100644 --- a/Specs/Scene/PostProcessStageCompositeSpec.js +++ b/Specs/Scene/PostProcessStageCompositeSpec.js @@ -207,11 +207,11 @@ defineSuite([ } expect(s).toRender([0, 0, 0, 255]); - var stage = new PostProcessStageComposite({ + var stage = scene.postProcessStages.add(new PostProcessStageComposite({ stages : [new PostProcessStage({ fragmentShader : 'uniform sampler2D depthTexture; void main() { gl_FragColor = vec4(1.0); }' })] - }); + })); return pollToPromise(function() { s.renderForSpecs(); return stage.ready; From 3534c15cbc8eab2d53d8e2ccc089f0d5879638bf Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Fri, 4 May 2018 16:22:27 -0400 Subject: [PATCH 98/99] Add console warning when a post process isn't supported in a Sandcastle example. --- Apps/Sandcastle/gallery/Ambient Occlusion.html | 4 ++++ Apps/Sandcastle/gallery/Depth of Field.html | 3 +++ Apps/Sandcastle/gallery/Post Processing.html | 6 +++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Apps/Sandcastle/gallery/Ambient Occlusion.html b/Apps/Sandcastle/gallery/Ambient Occlusion.html index 868ed572ca31..348ab881dc45 100644 --- a/Apps/Sandcastle/gallery/Ambient Occlusion.html +++ b/Apps/Sandcastle/gallery/Ambient Occlusion.html @@ -60,6 +60,10 @@ //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); +if (!viewer.scene.postProcessStages.ambientOcclusion.isSupported(viewer.scene)) { + console.log('This browser does not support the ambient occlusion post process.'); +} + // Power Plant design model provided by Bentley Systems var tileset = new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(3837) }); tileset.readyPromise.then(function(tileset) { diff --git a/Apps/Sandcastle/gallery/Depth of Field.html b/Apps/Sandcastle/gallery/Depth of Field.html index 5b69ab09d1e2..92ce0f321977 100644 --- a/Apps/Sandcastle/gallery/Depth of Field.html +++ b/Apps/Sandcastle/gallery/Depth of Field.html @@ -94,6 +94,9 @@ } var depthOfField = viewer.scene.postProcessStages.add(Cesium.PostProcessStageLibrary.createDepthOfFieldStage()); +if (!depthOfField.isSupported(viewer.scene)) { + console.log('This browser does not support the depth of field post process.'); +} function updatePostProcess() { depthOfField.enabled = Boolean(viewModel.show); diff --git a/Apps/Sandcastle/gallery/Post Processing.html b/Apps/Sandcastle/gallery/Post Processing.html index c13ce3839369..d2fbf9662066 100644 --- a/Apps/Sandcastle/gallery/Post Processing.html +++ b/Apps/Sandcastle/gallery/Post Processing.html @@ -81,11 +81,15 @@ } var collection = viewer.scene.postProcessStages; -var silhouette = viewer.scene.postProcessStages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage()); +var silhouette = collection.add(Cesium.PostProcessStageLibrary.createSilhouetteStage()); var blackAndWhite = collection.add(Cesium.PostProcessStageLibrary.createBlackAndWhiteStage()); var brightness = collection.add(Cesium.PostProcessStageLibrary.createBrightnessStage()); var nightVision = collection.add(Cesium.PostProcessStageLibrary.createNightVisionStage()); +if (!silhouette.isSupported(viewer.scene)) { + console.log('This browser does not support the silhouette post process.'); +} + function updatePostProcess() { silhouette.enabled = Boolean(viewModel.silhouette); silhouette.uniforms.color = Cesium.Color.YELLOW; From 12c79e7de728589bbd788a6aa7a8af042b37182c Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Fri, 4 May 2018 16:25:00 -0400 Subject: [PATCH 99/99] Fix failing test. --- Specs/Scene/PostProcessStageCompositeSpec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Specs/Scene/PostProcessStageCompositeSpec.js b/Specs/Scene/PostProcessStageCompositeSpec.js index 7d2230b0ef03..ce5bb16f3240 100644 --- a/Specs/Scene/PostProcessStageCompositeSpec.js +++ b/Specs/Scene/PostProcessStageCompositeSpec.js @@ -207,7 +207,7 @@ defineSuite([ } expect(s).toRender([0, 0, 0, 255]); - var stage = scene.postProcessStages.add(new PostProcessStageComposite({ + var stage = s.postProcessStages.add(new PostProcessStageComposite({ stages : [new PostProcessStage({ fragmentShader : 'uniform sampler2D depthTexture; void main() { gl_FragColor = vec4(1.0); }' })]