@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Buffers/buffer.js +3 -2
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.d.ts +4 -0
- package/Cameras/camera.js +2 -0
- package/Cameras/camera.js.map +1 -1
- package/Culling/boundingBox.d.ts +7 -1
- package/Culling/boundingBox.js +4 -0
- package/Culling/boundingBox.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -2
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
- package/DeviceInput/InputDevices/deviceEnums.js +0 -2
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/Engines/Extensions/engine.alpha.js +6 -6
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/IDrawContext.d.ts +4 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -0
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
- package/Engines/WebGPU/webgpuBufferManager.js +3 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
- package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
- package/Engines/WebGPU/webgpuDrawContext.js +75 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
- package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +40 -7
- package/Engines/constants.js +40 -7
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +37 -2
- package/Engines/engine.js +68 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nativeEngine.js +19 -13
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +8 -2
- package/Engines/thinEngine.js +10 -5
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +28 -7
- package/Engines/webgpuEngine.js +177 -58
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -3
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +0 -2
- package/Layers/effectLayer.js +12 -11
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +5 -0
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.js +2 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -0
- package/LensFlares/lensFlare.js +5 -0
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -1
- package/LensFlares/lensFlareSystem.js +15 -12
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +0 -3
- package/Lights/Shadows/shadowGenerator.js +8 -14
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -0
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +8 -11
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
- package/Materials/Node/Blocks/cloudBlock.js +27 -8
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
- package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
- package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +4 -4
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +10 -5
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -0
- package/Materials/Textures/baseTexture.js +2 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +27 -0
- package/Materials/Textures/renderTargetTexture.js +127 -14
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +11 -4
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +2 -1
- package/Materials/drawWrapper.js +10 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/material.d.ts +3 -1
- package/Materials/material.detailMapConfiguration.d.ts +1 -1
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +18 -9
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +3 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +0 -1
- package/Materials/shaderMaterial.js +3 -4
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -4
- package/Materials/shadowDepthWrapper.js +16 -15
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +10 -5
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +10 -2
- package/Materials/uniformBuffer.js +17 -11
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +13 -0
- package/Meshes/abstractMesh.js +22 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +7 -0
- package/Meshes/geometry.js +16 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +15 -0
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +10 -9
- package/Meshes/subMesh.js +44 -43
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/basis.d.ts +3 -2
- package/Misc/basis.js +16 -15
- package/Misc/basis.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -0
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -0
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneSerializer.js +17 -17
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/textureTools.js +2 -0
- package/Misc/textureTools.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +5 -1
- package/Particles/gpuParticleSystem.js +31 -5
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +5 -1
- package/Particles/particleSystem.js +35 -5
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
- package/Physics/Plugins/ammoJSPlugin.js +10 -0
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +1 -0
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +1 -0
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +6 -0
- package/PostProcesses/postProcess.js +9 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js +3 -2
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -3
- package/Rendering/boundingBoxRenderer.js +46 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +20 -1
- package/Rendering/depthPeelingRenderer.js +125 -32
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
- package/Rendering/depthPeelingSceneComponent.js +16 -0
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +9 -2
- package/Rendering/depthRenderer.js +77 -43
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +0 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -0
- package/Rendering/edgesRenderer.js +11 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +4 -4
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +5 -4
- package/Rendering/outlineRenderer.js +24 -19
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/oitFragment.js +1 -1
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.fragment.js +9 -0
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
- package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
- package/Shaders/boundingBoxRenderer.vertex.js +9 -0
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
- package/Sprites/spriteManager.d.ts +3 -1
- package/Sprites/spriteManager.js +16 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +2 -0
- package/Sprites/spriteRenderer.js +26 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +28 -13
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/package.json +16 -1
- package/scene.d.ts +18 -4
- package/scene.js +100 -41
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standardRenderingPipeline.js","sourceRoot":"","sources":["../../../../../sourceES6/core/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../../types\";\r\nimport { serialize, serializeAsTexture, SerializationHelper } from \"../../../Misc/decorators\";\r\nimport { IAnimatable } from '../../../Animations/animatable.interface';\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Vector2, Vector3, Matrix, Vector4 } from \"../../../Maths/math.vector\";\r\nimport { Scalar } from \"../../../Maths/math.scalar\";\r\nimport { Camera } from \"../../../Cameras/camera\";\r\nimport { Effect } from \"../../../Materials/effect\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { BlurPostProcess } from \"../../../PostProcesses/blurPostProcess\";\r\nimport { FxaaPostProcess } from \"../../../PostProcesses/fxaaPostProcess\";\r\nimport { IDisposable } from \"../../../scene\";\r\nimport { SpotLight } from \"../../../Lights/spotLight\";\r\nimport { DirectionalLight } from \"../../../Lights/directionalLight\";\r\nimport { GeometryBufferRenderer } from \"../../../Rendering/geometryBufferRenderer\";\r\nimport { Scene } from \"../../../scene\";\r\n\r\nimport { RegisterClass } from '../../../Misc/typeStore';\r\nimport { MotionBlurPostProcess } from \"../../motionBlurPostProcess\";\r\nimport { ScreenSpaceReflectionPostProcess } from \"../../screenSpaceReflectionPostProcess\";\r\n\r\ndeclare type Animation = import(\"../../../Animations/animation\").Animation;\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\nimport \"../../../Shaders/standard.fragment\";\r\n/**\r\n * Standard rendering pipeline\r\n * Default pipeline should be used going forward but the standard pipeline will be kept for backwards compatibility.\r\n * @see https://doc.babylonjs.com/how_to/using_standard_rendering_pipeline\r\n */\r\nexport class StandardRenderingPipeline extends PostProcessRenderPipeline implements IDisposable, IAnimatable {\r\n /**\r\n * Public members\r\n */\r\n // Post-processes\r\n /**\r\n * Post-process which contains the original scene color before the pipeline applies all the effects\r\n */\r\n public originalPostProcess: Nullable<PostProcess>;\r\n /**\r\n * Post-process used to down scale an image x4\r\n */\r\n public downSampleX4PostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to calculate the illuminated surfaces controlled by a threshold\r\n */\r\n public brightPassPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process array storing all the horizontal blur post-processes used by the pipeline\r\n */\r\n public blurHPostProcesses: PostProcess[] = [];\r\n /**\r\n * Post-process array storing all the vertical blur post-processes used by the pipeline\r\n */\r\n public blurVPostProcesses: PostProcess[] = [];\r\n /**\r\n * Post-process used to add colors of 2 textures (typically brightness + real scene color)\r\n */\r\n public textureAdderPostProcess: Nullable<PostProcess> = null;\r\n\r\n /**\r\n * Post-process used to create volumetric lighting effect\r\n */\r\n public volumetricLightPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to smooth the previous volumetric light post-process on the X axis\r\n */\r\n public volumetricLightSmoothXPostProcess: Nullable<BlurPostProcess> = null;\r\n /**\r\n * Post-process used to smooth the previous volumetric light post-process on the Y axis\r\n */\r\n public volumetricLightSmoothYPostProcess: Nullable<BlurPostProcess> = null;\r\n /**\r\n * Post-process used to merge the volumetric light effect and the real scene color\r\n */\r\n public volumetricLightMergePostProces: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to store the final volumetric light post-process (attach/detach for debug purpose)\r\n */\r\n public volumetricLightFinalPostProcess: Nullable<PostProcess> = null;\r\n\r\n /**\r\n * Base post-process used to calculate the average luminance of the final image for HDR\r\n */\r\n public luminancePostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-processes used to create down sample post-processes in order to get\r\n * the average luminance of the final image for HDR\r\n * Array of length \"StandardRenderingPipeline.LuminanceSteps\"\r\n */\r\n public luminanceDownSamplePostProcesses: PostProcess[] = [];\r\n /**\r\n * Post-process used to create a HDR effect (light adaptation)\r\n */\r\n public hdrPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to store the final texture adder post-process (attach/detach for debug purpose)\r\n */\r\n public textureAdderFinalPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to store the final lens flare post-process (attach/detach for debug purpose)\r\n */\r\n public lensFlareFinalPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to merge the final HDR post-process and the real scene color\r\n */\r\n public hdrFinalPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to create a lens flare effect\r\n */\r\n public lensFlarePostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process that merges the result of the lens flare post-process and the real scene color\r\n */\r\n public lensFlareComposePostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to create a motion blur effect\r\n */\r\n public motionBlurPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to create a depth of field effect\r\n */\r\n public depthOfFieldPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * The Fast Approximate Anti-Aliasing post process which attempts to remove aliasing from an image.\r\n */\r\n public fxaaPostProcess: Nullable<FxaaPostProcess> = null;\r\n /**\r\n * Post-process used to simulate realtime reflections using the screen space and geometry renderer.\r\n */\r\n public screenSpaceReflectionPostProcess: Nullable<ScreenSpaceReflectionPostProcess> = null;\r\n\r\n // Values\r\n\r\n /**\r\n * Represents the brightness threshold in order to configure the illuminated surfaces\r\n */\r\n @serialize()\r\n public brightThreshold: number = 1.0;\r\n\r\n /**\r\n * Configures the blur intensity used for surexposed surfaces are highlighted surfaces (light halo)\r\n */\r\n @serialize()\r\n public blurWidth: number = 512.0;\r\n /**\r\n * Sets if the blur for highlighted surfaces must be only horizontal\r\n */\r\n @serialize()\r\n public horizontalBlur: boolean = false;\r\n\r\n /**\r\n * Gets the overall exposure used by the pipeline\r\n */\r\n @serialize()\r\n public get exposure(): number {\r\n return this._fixedExposure;\r\n }\r\n /**\r\n * Sets the overall exposure used by the pipeline\r\n */\r\n public set exposure(value: number) {\r\n this._fixedExposure = value;\r\n this._currentExposure = value;\r\n }\r\n\r\n /**\r\n * Texture used typically to simulate \"dirty\" on camera lens\r\n */\r\n @serializeAsTexture(\"lensTexture\")\r\n public lensTexture: Nullable<Texture> = null;\r\n\r\n /**\r\n * Represents the offset coefficient based on Rayleigh principle. Typically in interval [-0.2, 0.2]\r\n */\r\n @serialize()\r\n public volumetricLightCoefficient: number = 0.2;\r\n /**\r\n * The overall power of volumetric lights, typically in interval [0, 10] maximum\r\n */\r\n @serialize()\r\n public volumetricLightPower: number = 4.0;\r\n /**\r\n * Used the set the blur intensity to smooth the volumetric lights\r\n */\r\n @serialize()\r\n public volumetricLightBlurScale: number = 64.0;\r\n /**\r\n * Light (spot or directional) used to generate the volumetric lights rays\r\n * The source light must have a shadow generate so the pipeline can get its\r\n * depth map\r\n */\r\n public sourceLight: Nullable<SpotLight | DirectionalLight> = null;\r\n\r\n /**\r\n * For eye adaptation, represents the minimum luminance the eye can see\r\n */\r\n @serialize()\r\n public hdrMinimumLuminance: number = 1.0;\r\n /**\r\n * For eye adaptation, represents the decrease luminance speed\r\n */\r\n @serialize()\r\n public hdrDecreaseRate: number = 0.5;\r\n /**\r\n * For eye adaptation, represents the increase luminance speed\r\n */\r\n @serialize()\r\n public hdrIncreaseRate: number = 0.5;\r\n /**\r\n * Gets whether or not the exposure of the overall pipeline should be automatically adjusted by the HDR post-process\r\n */\r\n @serialize()\r\n public get hdrAutoExposure(): boolean {\r\n return this._hdrAutoExposure;\r\n }\r\n /**\r\n * Sets whether or not the exposure of the overall pipeline should be automatically adjusted by the HDR post-process\r\n */\r\n public set hdrAutoExposure(value: boolean) {\r\n this._hdrAutoExposure = value;\r\n if (this.hdrPostProcess) {\r\n const defines = [\"#define HDR\"];\r\n if (value) {\r\n defines.push(\"#define AUTO_EXPOSURE\");\r\n }\r\n this.hdrPostProcess.updateEffect(defines.join(\"\\n\"));\r\n }\r\n }\r\n\r\n /**\r\n * Lens color texture used by the lens flare effect. Mandatory if lens flare effect enabled\r\n */\r\n @serializeAsTexture(\"lensColorTexture\")\r\n public lensColorTexture: Nullable<Texture> = null;\r\n /**\r\n * The overall strengh for the lens flare effect\r\n */\r\n @serialize()\r\n public lensFlareStrength: number = 20.0;\r\n /**\r\n * Dispersion coefficient for lens flare ghosts\r\n */\r\n @serialize()\r\n public lensFlareGhostDispersal: number = 1.4;\r\n /**\r\n * Main lens flare halo width\r\n */\r\n @serialize()\r\n public lensFlareHaloWidth: number = 0.7;\r\n /**\r\n * Based on the lens distortion effect, defines how much the lens flare result\r\n * is distorted\r\n */\r\n @serialize()\r\n public lensFlareDistortionStrength: number = 16.0;\r\n /**\r\n * Configures the blur intensity used for for lens flare (halo)\r\n */\r\n @serialize()\r\n public lensFlareBlurWidth: number = 512.0;\r\n /**\r\n * Lens star texture must be used to simulate rays on the flares and is available\r\n * in the documentation\r\n */\r\n @serializeAsTexture(\"lensStarTexture\")\r\n public lensStarTexture: Nullable<Texture> = null;\r\n /**\r\n * As the \"lensTexture\" (can be the same texture or different), it is used to apply the lens\r\n * flare effect by taking account of the dirt texture\r\n */\r\n @serializeAsTexture(\"lensFlareDirtTexture\")\r\n public lensFlareDirtTexture: Nullable<Texture> = null;\r\n\r\n /**\r\n * Represents the focal length for the depth of field effect\r\n */\r\n @serialize()\r\n public depthOfFieldDistance: number = 10.0;\r\n /**\r\n * Represents the blur intensity for the blurred part of the depth of field effect\r\n */\r\n @serialize()\r\n public depthOfFieldBlurWidth: number = 64.0;\r\n\r\n /**\r\n * Gets how much the image is blurred by the movement while using the motion blur post-process\r\n */\r\n @serialize()\r\n public get motionStrength(): number {\r\n return this._motionStrength;\r\n }\r\n /**\r\n * Sets how much the image is blurred by the movement while using the motion blur post-process\r\n */\r\n public set motionStrength(strength: number) {\r\n this._motionStrength = strength;\r\n\r\n if (this._isObjectBasedMotionBlur && this.motionBlurPostProcess) {\r\n (this.motionBlurPostProcess as MotionBlurPostProcess).motionStrength = strength;\r\n }\r\n }\r\n\r\n /**\r\n * Gets whether or not the motion blur post-process is object based or screen based.\r\n */\r\n @serialize()\r\n public get objectBasedMotionBlur(): boolean {\r\n return this._isObjectBasedMotionBlur;\r\n }\r\n /**\r\n * Sets whether or not the motion blur post-process should be object based or screen based\r\n */\r\n public set objectBasedMotionBlur(value: boolean) {\r\n const shouldRebuild = this._isObjectBasedMotionBlur !== value;\r\n this._isObjectBasedMotionBlur = value;\r\n\r\n if (shouldRebuild) {\r\n this._buildPipeline();\r\n }\r\n }\r\n\r\n /**\r\n * List of animations for the pipeline (IAnimatable implementation)\r\n */\r\n public animations: Animation[] = [];\r\n\r\n /**\r\n * Private members\r\n */\r\n private _scene: Scene;\r\n private _currentDepthOfFieldSource: Nullable<PostProcess> = null;\r\n private _basePostProcess: Nullable<PostProcess>;\r\n\r\n private _fixedExposure: number = 1.0;\r\n private _currentExposure: number = 1.0;\r\n private _hdrAutoExposure: boolean = false;\r\n private _hdrCurrentLuminance: number = 1.0;\r\n private _motionStrength: number = 1.0;\r\n private _isObjectBasedMotionBlur: boolean = false;\r\n\r\n private _floatTextureType: number;\r\n\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n\r\n @serialize()\r\n private _ratio: number;\r\n\r\n // Getters and setters\r\n private _bloomEnabled: boolean = false;\r\n private _depthOfFieldEnabled: boolean = false;\r\n private _vlsEnabled: boolean = false;\r\n private _lensFlareEnabled: boolean = false;\r\n private _hdrEnabled: boolean = false;\r\n private _motionBlurEnabled: boolean = false;\r\n private _fxaaEnabled: boolean = false;\r\n private _screenSpaceReflectionsEnabled: boolean = false;\r\n\r\n private _motionBlurSamples: number = 64.0;\r\n private _volumetricLightStepsCount: number = 50.0;\r\n private _samples: number = 1;\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the bloom pipeline is enabled\r\n */\r\n @serialize()\r\n public get BloomEnabled(): boolean {\r\n return this._bloomEnabled;\r\n }\r\n\r\n public set BloomEnabled(enabled: boolean) {\r\n if (this._bloomEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._bloomEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the depth of field pipeline is enabled\r\n */\r\n @serialize()\r\n public get DepthOfFieldEnabled(): boolean {\r\n return this._depthOfFieldEnabled;\r\n }\r\n\r\n public set DepthOfFieldEnabled(enabled: boolean) {\r\n if (this._depthOfFieldEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._depthOfFieldEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the lens flare pipeline is enabled\r\n */\r\n @serialize()\r\n public get LensFlareEnabled(): boolean {\r\n return this._lensFlareEnabled;\r\n }\r\n\r\n public set LensFlareEnabled(enabled: boolean) {\r\n if (this._lensFlareEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._lensFlareEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the HDR pipeline is enabled\r\n */\r\n @serialize()\r\n public get HDREnabled(): boolean {\r\n return this._hdrEnabled;\r\n }\r\n\r\n public set HDREnabled(enabled: boolean) {\r\n if (this._hdrEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._hdrEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the volumetric lights scattering effect is enabled\r\n */\r\n @serialize()\r\n public get VLSEnabled(): boolean {\r\n return this._vlsEnabled;\r\n }\r\n\r\n public set VLSEnabled(enabled) {\r\n if (this._vlsEnabled === enabled) {\r\n return;\r\n }\r\n\r\n if (enabled) {\r\n var geometry = this._scene.enableGeometryBufferRenderer();\r\n if (!geometry) {\r\n Logger.Warn(\"Geometry renderer is not supported, cannot create volumetric lights in Standard Rendering Pipeline\");\r\n return;\r\n }\r\n }\r\n\r\n this._vlsEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the motion blur effect is enabled\r\n */\r\n @serialize()\r\n public get MotionBlurEnabled(): boolean {\r\n return this._motionBlurEnabled;\r\n }\r\n\r\n public set MotionBlurEnabled(enabled: boolean) {\r\n if (this._motionBlurEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._motionBlurEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Specifies if anti-aliasing is enabled\r\n */\r\n @serialize()\r\n public get fxaaEnabled(): boolean {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n public set fxaaEnabled(enabled: boolean) {\r\n if (this._fxaaEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._fxaaEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Specifies if screen space reflections are enabled.\r\n */\r\n @serialize()\r\n public get screenSpaceReflectionsEnabled(): boolean {\r\n return this._screenSpaceReflectionsEnabled;\r\n }\r\n\r\n public set screenSpaceReflectionsEnabled(enabled: boolean) {\r\n if (this._screenSpaceReflectionsEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._screenSpaceReflectionsEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Specifies the number of steps used to calculate the volumetric lights\r\n * Typically in interval [50, 200]\r\n */\r\n @serialize()\r\n public get volumetricLightStepsCount(): number {\r\n return this._volumetricLightStepsCount;\r\n }\r\n\r\n public set volumetricLightStepsCount(count: number) {\r\n if (this.volumetricLightPostProcess) {\r\n this.volumetricLightPostProcess.updateEffect(\"#define VLS\\n#define NB_STEPS \" + count.toFixed(1));\r\n }\r\n\r\n this._volumetricLightStepsCount = count;\r\n }\r\n\r\n /**\r\n * Specifies the number of samples used for the motion blur effect\r\n * Typically in interval [16, 64]\r\n */\r\n @serialize()\r\n public get motionBlurSamples(): number {\r\n return this._motionBlurSamples;\r\n }\r\n\r\n public set motionBlurSamples(samples: number) {\r\n if (this.motionBlurPostProcess) {\r\n if (this._isObjectBasedMotionBlur) {\r\n (this.motionBlurPostProcess as MotionBlurPostProcess).motionBlurSamples = samples;\r\n } else {\r\n this.motionBlurPostProcess.updateEffect(\"#define MOTION_BLUR\\n#define MAX_MOTION_SAMPLES \" + samples.toFixed(1));\r\n }\r\n }\r\n\r\n this._motionBlurSamples = samples;\r\n }\r\n\r\n /**\r\n * Specifies MSAA sample count, setting this to 4 will provide 4x anti aliasing. (default: 1)\r\n */\r\n @serialize()\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public set samples(sampleCount: number) {\r\n if (this._samples === sampleCount) {\r\n return;\r\n }\r\n\r\n this._samples = sampleCount;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Default pipeline should be used going forward but the standard pipeline will be kept for backwards compatibility.\r\n * @constructor\r\n * @param name The rendering pipeline name\r\n * @param scene The scene linked to this pipeline\r\n * @param ratio The size of the postprocesses (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param originalPostProcess the custom original color post-process. Must be \"reusable\". Can be null.\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to\r\n */\r\n constructor(name: string, scene: Scene, ratio: number, originalPostProcess: Nullable<PostProcess> = null, cameras?: Camera[]) {\r\n super(scene.getEngine(), name);\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n // Initialize\r\n this._scene = scene;\r\n this._basePostProcess = originalPostProcess;\r\n this._ratio = ratio;\r\n\r\n // Misc\r\n this._floatTextureType = scene.getEngine().getCaps().textureFloatRender ? 1 : 2;\r\n\r\n // Finish\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n this._buildPipeline();\r\n }\r\n\r\n private _buildPipeline(): void {\r\n var ratio = this._ratio;\r\n var scene = this._scene;\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n\r\n // Create pass post-process\r\n if (this._screenSpaceReflectionsEnabled) {\r\n this.screenSpaceReflectionPostProcess = new ScreenSpaceReflectionPostProcess(\"HDRPass\", scene, ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, this._floatTextureType);\r\n this.screenSpaceReflectionPostProcess.onApplyObservable.add(() => {\r\n this._currentDepthOfFieldSource = this.screenSpaceReflectionPostProcess;\r\n });\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRScreenSpaceReflections\", () => this.screenSpaceReflectionPostProcess, true));\r\n }\r\n\r\n if (!this._basePostProcess) {\r\n this.originalPostProcess = new PostProcess(\"HDRPass\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", this._floatTextureType);\r\n }\r\n else {\r\n this.originalPostProcess = this._basePostProcess;\r\n }\r\n\r\n this.originalPostProcess.autoClear = !this.screenSpaceReflectionPostProcess;\r\n this.originalPostProcess.onApplyObservable.add(() => {\r\n this._currentDepthOfFieldSource = this.originalPostProcess;\r\n });\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRPassPostProcess\", () => this.originalPostProcess, true));\r\n\r\n if (this._bloomEnabled) {\r\n // Create down sample X4 post-process\r\n this._createDownSampleX4PostProcess(scene, ratio / 4);\r\n\r\n // Create bright pass post-process\r\n this._createBrightPassPostProcess(scene, ratio / 4);\r\n\r\n // Create gaussian blur post-processes (down sampling blurs)\r\n this._createBlurPostProcesses(scene, ratio / 4, 1);\r\n\r\n // Create texture adder post-process\r\n this._createTextureAdderPostProcess(scene, ratio);\r\n\r\n // Create depth-of-field source post-process\r\n this.textureAdderFinalPostProcess = new PostProcess(\"HDRDepthOfFieldSource\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBaseDepthOfFieldSource\", () => { return this.textureAdderFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._vlsEnabled) {\r\n // Create volumetric light\r\n this._createVolumetricLightPostProcess(scene, ratio);\r\n\r\n // Create volumetric light final post-process\r\n this.volumetricLightFinalPostProcess = new PostProcess(\"HDRVLSFinal\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRVLSFinal\", () => { return this.volumetricLightFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._lensFlareEnabled) {\r\n // Create lens flare post-process\r\n this._createLensFlarePostProcess(scene, ratio);\r\n\r\n // Create depth-of-field source post-process post lens-flare and disable it now\r\n this.lensFlareFinalPostProcess = new PostProcess(\"HDRPostLensFlareDepthOfFieldSource\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRPostLensFlareDepthOfFieldSource\", () => { return this.lensFlareFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._hdrEnabled) {\r\n // Create luminance\r\n this._createLuminancePostProcesses(scene, this._floatTextureType);\r\n\r\n // Create HDR\r\n this._createHdrPostProcess(scene, ratio);\r\n\r\n // Create depth-of-field source post-process post hdr and disable it now\r\n this.hdrFinalPostProcess = new PostProcess(\"HDRPostHDReDepthOfFieldSource\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRPostHDReDepthOfFieldSource\", () => { return this.hdrFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._depthOfFieldEnabled) {\r\n // Create gaussian blur used by depth-of-field\r\n this._createBlurPostProcesses(scene, ratio / 2, 3, \"depthOfFieldBlurWidth\");\r\n\r\n // Create depth-of-field post-process\r\n this._createDepthOfFieldPostProcess(scene, ratio);\r\n }\r\n\r\n if (this._motionBlurEnabled) {\r\n // Create motion blur post-process\r\n this._createMotionBlurPostProcess(scene, ratio);\r\n }\r\n\r\n if (this._fxaaEnabled) {\r\n // Create fxaa post-process\r\n this.fxaaPostProcess = new FxaaPostProcess(\"fxaa\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRFxaa\", () => { return this.fxaaPostProcess; }, true));\r\n }\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n\r\n if (!this._enableMSAAOnFirstPostProcess(this._samples) && this._samples > 1) {\r\n Logger.Warn(\"MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0\");\r\n }\r\n }\r\n\r\n // Down Sample X4 Post-Processs\r\n private _createDownSampleX4PostProcess(scene: Scene, ratio: number): void {\r\n var downSampleX4Offsets = new Array<number>(32);\r\n this.downSampleX4PostProcess = new PostProcess(\"HDRDownSampleX4\", \"standard\", [\"dsOffsets\"], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define DOWN_SAMPLE_X4\", this._floatTextureType);\r\n\r\n this.downSampleX4PostProcess.onApply = (effect: Effect) => {\r\n var id = 0;\r\n let width = (<PostProcess>this.downSampleX4PostProcess).width;\r\n let height = (<PostProcess>this.downSampleX4PostProcess).height;\r\n\r\n for (var i = -2; i < 2; i++) {\r\n for (var j = -2; j < 2; j++) {\r\n downSampleX4Offsets[id] = (i + 0.5) * (1.0 / width);\r\n downSampleX4Offsets[id + 1] = (j + 0.5) * (1.0 / height);\r\n id += 2;\r\n }\r\n }\r\n\r\n effect.setArray2(\"dsOffsets\", downSampleX4Offsets);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRDownSampleX4\", () => { return this.downSampleX4PostProcess; }, true));\r\n }\r\n\r\n // Brightpass Post-Process\r\n private _createBrightPassPostProcess(scene: Scene, ratio: number): void {\r\n var brightOffsets = new Array<number>(8);\r\n this.brightPassPostProcess = new PostProcess(\"HDRBrightPass\", \"standard\", [\"dsOffsets\", \"brightThreshold\"], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define BRIGHT_PASS\", this._floatTextureType);\r\n\r\n this.brightPassPostProcess.onApply = (effect: Effect) => {\r\n var sU = (1.0 / (<PostProcess>this.brightPassPostProcess).width);\r\n var sV = (1.0 / (<PostProcess>this.brightPassPostProcess).height);\r\n\r\n brightOffsets[0] = -0.5 * sU;\r\n brightOffsets[1] = 0.5 * sV;\r\n brightOffsets[2] = 0.5 * sU;\r\n brightOffsets[3] = 0.5 * sV;\r\n brightOffsets[4] = -0.5 * sU;\r\n brightOffsets[5] = -0.5 * sV;\r\n brightOffsets[6] = 0.5 * sU;\r\n brightOffsets[7] = -0.5 * sV;\r\n\r\n effect.setArray2(\"dsOffsets\", brightOffsets);\r\n effect.setFloat(\"brightThreshold\", this.brightThreshold);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBrightPass\", () => { return this.brightPassPostProcess; }, true));\r\n }\r\n\r\n // Create blur H&V post-processes\r\n private _createBlurPostProcesses(scene: Scene, ratio: number, indice: number, blurWidthKey: string = \"blurWidth\"): void {\r\n var engine = scene.getEngine();\r\n\r\n var blurX = new BlurPostProcess(\"HDRBlurH\" + \"_\" + indice, new Vector2(1, 0), (<any>this)[blurWidthKey], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, this._floatTextureType);\r\n var blurY = new BlurPostProcess(\"HDRBlurV\" + \"_\" + indice, new Vector2(0, 1), (<any>this)[blurWidthKey], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, this._floatTextureType);\r\n\r\n blurX.onActivateObservable.add(() => {\r\n let dw = blurX.width / engine.getRenderWidth();\r\n blurX.kernel = (<any>this)[blurWidthKey] * dw;\r\n });\r\n\r\n blurY.onActivateObservable.add(() => {\r\n let dw = blurY.height / engine.getRenderHeight();\r\n blurY.kernel = this.horizontalBlur ? 64 * dw : (<any>this)[blurWidthKey] * dw;\r\n });\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBlurH\" + indice, () => { return blurX; }, true));\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBlurV\" + indice, () => { return blurY; }, true));\r\n\r\n this.blurHPostProcesses.push(blurX);\r\n this.blurVPostProcesses.push(blurY);\r\n }\r\n\r\n // Create texture adder post-process\r\n private _createTextureAdderPostProcess(scene: Scene, ratio: number): void {\r\n this.textureAdderPostProcess = new PostProcess(\"HDRTextureAdder\", \"standard\", [\"exposure\"], [\"otherSampler\", \"lensSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define TEXTURE_ADDER\", this._floatTextureType);\r\n this.textureAdderPostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"otherSampler\", this._vlsEnabled ? this._currentDepthOfFieldSource : this.originalPostProcess);\r\n effect.setTexture(\"lensSampler\", this.lensTexture);\r\n\r\n effect.setFloat(\"exposure\", this._currentExposure);\r\n\r\n this._currentDepthOfFieldSource = this.textureAdderFinalPostProcess;\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRTextureAdder\", () => { return this.textureAdderPostProcess; }, true));\r\n }\r\n\r\n private _createVolumetricLightPostProcess(scene: Scene, ratio: number): void {\r\n var geometryRenderer = <GeometryBufferRenderer>scene.enableGeometryBufferRenderer();\r\n geometryRenderer.enablePosition = true;\r\n\r\n var geometry = geometryRenderer.getGBuffer();\r\n\r\n // Base post-process\r\n this.volumetricLightPostProcess = new PostProcess(\"HDRVLS\", \"standard\",\r\n [\"shadowViewProjection\", \"cameraPosition\", \"sunDirection\", \"sunColor\", \"scatteringCoefficient\", \"scatteringPower\", \"depthValues\"],\r\n [\"shadowMapSampler\", \"positionSampler\"],\r\n ratio / 8,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n scene.getEngine(),\r\n false, \"#define VLS\\n#define NB_STEPS \" + this._volumetricLightStepsCount.toFixed(1));\r\n\r\n var depthValues = Vector2.Zero();\r\n\r\n this.volumetricLightPostProcess.onApply = (effect: Effect) => {\r\n if (this.sourceLight && this.sourceLight.getShadowGenerator() && this._scene.activeCamera) {\r\n var generator = this.sourceLight.getShadowGenerator()!;\r\n\r\n effect.setTexture(\"shadowMapSampler\", generator.getShadowMap());\r\n effect.setTexture(\"positionSampler\", geometry.textures[2]);\r\n\r\n effect.setColor3(\"sunColor\", this.sourceLight.diffuse);\r\n effect.setVector3(\"sunDirection\", this.sourceLight.getShadowDirection());\r\n\r\n effect.setVector3(\"cameraPosition\", this._scene.activeCamera.globalPosition);\r\n effect.setMatrix(\"shadowViewProjection\", generator.getTransformMatrix());\r\n\r\n effect.setFloat(\"scatteringCoefficient\", this.volumetricLightCoefficient);\r\n effect.setFloat(\"scatteringPower\", this.volumetricLightPower);\r\n\r\n depthValues.x = this.sourceLight.getDepthMinZ(this._scene.activeCamera);\r\n depthValues.y = this.sourceLight.getDepthMaxZ(this._scene.activeCamera);\r\n effect.setVector2(\"depthValues\", depthValues);\r\n }\r\n };\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRVLS\", () => { return this.volumetricLightPostProcess; }, true));\r\n\r\n // Smooth\r\n this._createBlurPostProcesses(scene, ratio / 4, 0, \"volumetricLightBlurScale\");\r\n\r\n // Merge\r\n this.volumetricLightMergePostProces = new PostProcess(\"HDRVLSMerge\", \"standard\", [], [\"originalSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define VLSMERGE\");\r\n\r\n this.volumetricLightMergePostProces.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"originalSampler\", this._bloomEnabled ? this.textureAdderFinalPostProcess : this.originalPostProcess);\r\n\r\n this._currentDepthOfFieldSource = this.volumetricLightFinalPostProcess;\r\n };\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRVLSMerge\", () => { return this.volumetricLightMergePostProces; }, true));\r\n }\r\n\r\n // Create luminance\r\n private _createLuminancePostProcesses(scene: Scene, textureType: number): void {\r\n // Create luminance\r\n var size = Math.pow(3, StandardRenderingPipeline.LuminanceSteps);\r\n this.luminancePostProcess = new PostProcess(\"HDRLuminance\", \"standard\", [\"lumOffsets\"], [], { width: size, height: size }, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define LUMINANCE\", textureType);\r\n\r\n var offsets: number[] = [];\r\n this.luminancePostProcess.onApply = (effect: Effect) => {\r\n var sU = (1.0 / (<PostProcess>this.luminancePostProcess).width);\r\n var sV = (1.0 / (<PostProcess>this.luminancePostProcess).height);\r\n\r\n offsets[0] = -0.5 * sU;\r\n offsets[1] = 0.5 * sV;\r\n offsets[2] = 0.5 * sU;\r\n offsets[3] = 0.5 * sV;\r\n offsets[4] = -0.5 * sU;\r\n offsets[5] = -0.5 * sV;\r\n offsets[6] = 0.5 * sU;\r\n offsets[7] = -0.5 * sV;\r\n\r\n effect.setArray2(\"lumOffsets\", offsets);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLuminance\", () => { return this.luminancePostProcess; }, true));\r\n\r\n // Create down sample luminance\r\n for (var i = StandardRenderingPipeline.LuminanceSteps - 1; i >= 0; i--) {\r\n var size = Math.pow(3, i);\r\n\r\n var defines = \"#define LUMINANCE_DOWN_SAMPLE\\n\";\r\n if (i === 0) {\r\n defines += \"#define FINAL_DOWN_SAMPLER\";\r\n }\r\n\r\n var postProcess = new PostProcess(\"HDRLuminanceDownSample\" + i, \"standard\", [\"dsOffsets\", \"halfDestPixelSize\"], [], { width: size, height: size }, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, defines, textureType);\r\n this.luminanceDownSamplePostProcesses.push(postProcess);\r\n }\r\n\r\n // Create callbacks and add effects\r\n var lastLuminance: Nullable<PostProcess> = this.luminancePostProcess;\r\n\r\n this.luminanceDownSamplePostProcesses.forEach((pp, index) => {\r\n var downSampleOffsets = new Array<number>(18);\r\n\r\n pp.onApply = (effect: Effect) => {\r\n if (!lastLuminance) {\r\n return;\r\n }\r\n\r\n var id = 0;\r\n for (var x = -1; x < 2; x++) {\r\n for (var y = -1; y < 2; y++) {\r\n downSampleOffsets[id] = x / lastLuminance.width;\r\n downSampleOffsets[id + 1] = y / lastLuminance.height;\r\n id += 2;\r\n }\r\n }\r\n\r\n effect.setArray2(\"dsOffsets\", downSampleOffsets);\r\n effect.setFloat(\"halfDestPixelSize\", 0.5 / lastLuminance.width);\r\n\r\n if (index === this.luminanceDownSamplePostProcesses.length - 1) {\r\n lastLuminance = this.luminancePostProcess;\r\n } else {\r\n lastLuminance = pp;\r\n }\r\n };\r\n\r\n if (index === this.luminanceDownSamplePostProcesses.length - 1) {\r\n pp.onAfterRender = () => {\r\n var pixel = scene.getEngine().readPixels(0, 0, 1, 1);\r\n var bit_shift = new Vector4(1.0 / (255.0 * 255.0 * 255.0), 1.0 / (255.0 * 255.0), 1.0 / 255.0, 1.0);\r\n pixel.then((pixel) => {\r\n const data = new Uint8Array(pixel.buffer);\r\n this._hdrCurrentLuminance = (data[0] * bit_shift.x + data[1] * bit_shift.y + data[2] * bit_shift.z + data[3] * bit_shift.w) / 100.0;\r\n });\r\n };\r\n }\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLuminanceDownSample\" + index, () => { return pp; }, true));\r\n });\r\n }\r\n\r\n // Create HDR post-process\r\n private _createHdrPostProcess(scene: Scene, ratio: number): void {\r\n const defines = [\"#define HDR\"];\r\n if (this._hdrAutoExposure) {\r\n defines.push(\"#define AUTO_EXPOSURE\");\r\n }\r\n this.hdrPostProcess = new PostProcess(\"HDR\", \"standard\", [\"averageLuminance\"], [\"textureAdderSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, defines.join(\"\\n\"), 0);\r\n\r\n var outputLiminance = 1;\r\n var time = 0;\r\n var lastTime = 0;\r\n\r\n this.hdrPostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"textureAdderSampler\", this._currentDepthOfFieldSource);\r\n\r\n time += scene.getEngine().getDeltaTime();\r\n\r\n if (outputLiminance < 0) {\r\n outputLiminance = this._hdrCurrentLuminance;\r\n } else {\r\n var dt = (lastTime - time) / 1000.0;\r\n\r\n if (this._hdrCurrentLuminance < outputLiminance + this.hdrDecreaseRate * dt) {\r\n outputLiminance += this.hdrDecreaseRate * dt;\r\n }\r\n else if (this._hdrCurrentLuminance > outputLiminance - this.hdrIncreaseRate * dt) {\r\n outputLiminance -= this.hdrIncreaseRate * dt;\r\n }\r\n else {\r\n outputLiminance = this._hdrCurrentLuminance;\r\n }\r\n }\r\n\r\n if (this.hdrAutoExposure) {\r\n this._currentExposure = this._fixedExposure / outputLiminance;\r\n } else {\r\n outputLiminance = Scalar.Clamp(outputLiminance, this.hdrMinimumLuminance, 1e20);\r\n effect.setFloat(\"averageLuminance\", outputLiminance);\r\n }\r\n\r\n lastTime = time;\r\n\r\n this._currentDepthOfFieldSource = this.hdrFinalPostProcess;\r\n };\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDR\", () => { return this.hdrPostProcess; }, true));\r\n }\r\n\r\n // Create lens flare post-process\r\n private _createLensFlarePostProcess(scene: Scene, ratio: number): void {\r\n this.lensFlarePostProcess = new PostProcess(\"HDRLensFlare\", \"standard\", [\"strength\", \"ghostDispersal\", \"haloWidth\", \"resolution\", \"distortionStrength\"], [\"lensColorSampler\"], ratio / 2, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define LENS_FLARE\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLensFlare\", () => { return this.lensFlarePostProcess; }, true));\r\n\r\n this._createBlurPostProcesses(scene, ratio / 4, 2, \"lensFlareBlurWidth\");\r\n\r\n this.lensFlareComposePostProcess = new PostProcess(\"HDRLensFlareCompose\", \"standard\", [\"lensStarMatrix\"], [\"otherSampler\", \"lensDirtSampler\", \"lensStarSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define LENS_FLARE_COMPOSE\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLensFlareCompose\", () => { return this.lensFlareComposePostProcess; }, true));\r\n\r\n var resolution = new Vector2(0, 0);\r\n\r\n // Lens flare\r\n this.lensFlarePostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"textureSampler\", this._bloomEnabled ? this.blurHPostProcesses[0] : this.originalPostProcess);\r\n effect.setTexture(\"lensColorSampler\", this.lensColorTexture);\r\n effect.setFloat(\"strength\", this.lensFlareStrength);\r\n effect.setFloat(\"ghostDispersal\", this.lensFlareGhostDispersal);\r\n effect.setFloat(\"haloWidth\", this.lensFlareHaloWidth);\r\n\r\n // Shift\r\n resolution.x = (<PostProcess>this.lensFlarePostProcess).width;\r\n resolution.y = (<PostProcess>this.lensFlarePostProcess).height;\r\n effect.setVector2(\"resolution\", resolution);\r\n\r\n effect.setFloat(\"distortionStrength\", this.lensFlareDistortionStrength);\r\n };\r\n\r\n // Compose\r\n var scaleBias1 = Matrix.FromValues(\r\n 2.0, 0.0, -1.0, 0.0,\r\n 0.0, 2.0, -1.0, 0.0,\r\n 0.0, 0.0, 1.0, 0.0,\r\n 0.0, 0.0, 0.0, 1.0\r\n );\r\n\r\n var scaleBias2 = Matrix.FromValues(\r\n 0.5, 0.0, 0.5, 0.0,\r\n 0.0, 0.5, 0.5, 0.0,\r\n 0.0, 0.0, 1.0, 0.0,\r\n 0.0, 0.0, 0.0, 1.0\r\n );\r\n\r\n this.lensFlareComposePostProcess.onApply = (effect: Effect) => {\r\n if (!this._scene.activeCamera) {\r\n return;\r\n }\r\n\r\n effect.setTextureFromPostProcess(\"otherSampler\", this.lensFlarePostProcess);\r\n effect.setTexture(\"lensDirtSampler\", this.lensFlareDirtTexture);\r\n effect.setTexture(\"lensStarSampler\", this.lensStarTexture);\r\n\r\n // Lens start rotation matrix\r\n var camerax = (<Vector4>this._scene.activeCamera.getViewMatrix().getRow(0));\r\n var cameraz = (<Vector4>this._scene.activeCamera.getViewMatrix().getRow(2));\r\n var camRot = Vector3.Dot(camerax.toVector3(), new Vector3(1.0, 0.0, 0.0)) + Vector3.Dot(cameraz.toVector3(), new Vector3(0.0, 0.0, 1.0));\r\n camRot *= 4.0;\r\n\r\n var starRotation = Matrix.FromValues(\r\n Math.cos(camRot) * 0.5, -Math.sin(camRot), 0.0, 0.0,\r\n Math.sin(camRot), Math.cos(camRot) * 0.5, 0.0, 0.0,\r\n 0.0, 0.0, 1.0, 0.0,\r\n 0.0, 0.0, 0.0, 1.0\r\n );\r\n\r\n var lensStarMatrix = scaleBias2.multiply(starRotation).multiply(scaleBias1);\r\n\r\n effect.setMatrix(\"lensStarMatrix\", lensStarMatrix);\r\n\r\n this._currentDepthOfFieldSource = this.lensFlareFinalPostProcess;\r\n };\r\n }\r\n\r\n // Create depth-of-field post-process\r\n private _createDepthOfFieldPostProcess(scene: Scene, ratio: number): void {\r\n this.depthOfFieldPostProcess = new PostProcess(\"HDRDepthOfField\", \"standard\", [\"distance\"], [\"otherSampler\", \"depthSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define DEPTH_OF_FIELD\", 0);\r\n this.depthOfFieldPostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"otherSampler\", this._currentDepthOfFieldSource);\r\n effect.setTexture(\"depthSampler\", this._getDepthTexture());\r\n\r\n effect.setFloat(\"distance\", this.depthOfFieldDistance);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRDepthOfField\", () => { return this.depthOfFieldPostProcess; }, true));\r\n }\r\n\r\n // Create motion blur post-process\r\n private _createMotionBlurPostProcess(scene: Scene, ratio: number): void {\r\n if (this._isObjectBasedMotionBlur) {\r\n const mb = new MotionBlurPostProcess(\"HDRMotionBlur\", scene, ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, 0);\r\n mb.motionStrength = this.motionStrength;\r\n mb.motionBlurSamples = this.motionBlurSamples;\r\n this.motionBlurPostProcess = mb;\r\n } else {\r\n this.motionBlurPostProcess = new PostProcess(\"HDRMotionBlur\", \"standard\",\r\n [\"inverseViewProjection\", \"prevViewProjection\", \"screenSize\", \"motionScale\", \"motionStrength\"],\r\n [\"depthSampler\"],\r\n ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define MOTION_BLUR\\n#define MAX_MOTION_SAMPLES \" + this.motionBlurSamples.toFixed(1), 0);\r\n\r\n var motionScale: number = 0;\r\n var prevViewProjection = Matrix.Identity();\r\n var invViewProjection = Matrix.Identity();\r\n var viewProjection = Matrix.Identity();\r\n var screenSize = Vector2.Zero();\r\n\r\n this.motionBlurPostProcess.onApply = (effect: Effect) => {\r\n viewProjection = scene.getProjectionMatrix().multiply(scene.getViewMatrix());\r\n\r\n viewProjection.invertToRef(invViewProjection);\r\n effect.setMatrix(\"inverseViewProjection\", invViewProjection);\r\n\r\n effect.setMatrix(\"prevViewProjection\", prevViewProjection);\r\n prevViewProjection = viewProjection;\r\n\r\n screenSize.x = (<PostProcess>this.motionBlurPostProcess).width;\r\n screenSize.y = (<PostProcess>this.motionBlurPostProcess).height;\r\n effect.setVector2(\"screenSize\", screenSize);\r\n\r\n motionScale = scene.getEngine().getFps() / 60.0;\r\n effect.setFloat(\"motionScale\", motionScale);\r\n effect.setFloat(\"motionStrength\", this.motionStrength);\r\n\r\n effect.setTexture(\"depthSampler\", this._getDepthTexture());\r\n };\r\n }\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRMotionBlur\", () => { return this.motionBlurPostProcess; }, true));\r\n }\r\n\r\n private _getDepthTexture(): Texture {\r\n if (this._scene.getEngine().getCaps().drawBuffersExtension) {\r\n let renderer = <GeometryBufferRenderer>this._scene.enableGeometryBufferRenderer();\r\n return renderer.getGBuffer().textures[0];\r\n }\r\n\r\n return this._scene.enableDepthRenderer().getDepthMap();\r\n }\r\n\r\n private _disposePostProcesses(): void {\r\n for (var i = 0; i < this._cameras.length; i++) {\r\n var camera = this._cameras[i];\r\n\r\n if (this.originalPostProcess) { this.originalPostProcess.dispose(camera); }\r\n if (this.screenSpaceReflectionPostProcess) { this.screenSpaceReflectionPostProcess.dispose(camera); }\r\n\r\n if (this.downSampleX4PostProcess) { this.downSampleX4PostProcess.dispose(camera); }\r\n if (this.brightPassPostProcess) { this.brightPassPostProcess.dispose(camera); }\r\n if (this.textureAdderPostProcess) { this.textureAdderPostProcess.dispose(camera); }\r\n\r\n if (this.volumetricLightPostProcess) { this.volumetricLightPostProcess.dispose(camera); }\r\n if (this.volumetricLightSmoothXPostProcess) { this.volumetricLightSmoothXPostProcess.dispose(camera); }\r\n if (this.volumetricLightSmoothYPostProcess) { this.volumetricLightSmoothYPostProcess.dispose(camera); }\r\n if (this.volumetricLightMergePostProces) { this.volumetricLightMergePostProces.dispose(camera); }\r\n if (this.volumetricLightFinalPostProcess) { this.volumetricLightFinalPostProcess.dispose(camera); }\r\n\r\n if (this.lensFlarePostProcess) { this.lensFlarePostProcess.dispose(camera); }\r\n if (this.lensFlareComposePostProcess) { this.lensFlareComposePostProcess.dispose(camera); }\r\n\r\n for (var j = 0; j < this.luminanceDownSamplePostProcesses.length; j++) {\r\n this.luminanceDownSamplePostProcesses[j].dispose(camera);\r\n }\r\n\r\n if (this.luminancePostProcess) { this.luminancePostProcess.dispose(camera); }\r\n if (this.hdrPostProcess) { this.hdrPostProcess.dispose(camera); }\r\n if (this.hdrFinalPostProcess) { this.hdrFinalPostProcess.dispose(camera); }\r\n\r\n if (this.depthOfFieldPostProcess) { this.depthOfFieldPostProcess.dispose(camera); }\r\n\r\n if (this.motionBlurPostProcess) { this.motionBlurPostProcess.dispose(camera); }\r\n\r\n if (this.fxaaPostProcess) { this.fxaaPostProcess.dispose(camera); }\r\n\r\n for (var j = 0; j < this.blurHPostProcesses.length; j++) {\r\n this.blurHPostProcesses[j].dispose(camera);\r\n }\r\n\r\n for (var j = 0; j < this.blurVPostProcesses.length; j++) {\r\n this.blurVPostProcesses[j].dispose(camera);\r\n }\r\n }\r\n\r\n this.originalPostProcess = null;\r\n this.downSampleX4PostProcess = null;\r\n this.brightPassPostProcess = null;\r\n this.textureAdderPostProcess = null;\r\n this.textureAdderFinalPostProcess = null;\r\n this.volumetricLightPostProcess = null;\r\n this.volumetricLightSmoothXPostProcess = null;\r\n this.volumetricLightSmoothYPostProcess = null;\r\n this.volumetricLightMergePostProces = null;\r\n this.volumetricLightFinalPostProcess = null;\r\n this.lensFlarePostProcess = null;\r\n this.lensFlareComposePostProcess = null;\r\n this.luminancePostProcess = null;\r\n this.hdrPostProcess = null;\r\n this.hdrFinalPostProcess = null;\r\n this.depthOfFieldPostProcess = null;\r\n this.motionBlurPostProcess = null;\r\n this.fxaaPostProcess = null;\r\n this.screenSpaceReflectionPostProcess = null;\r\n\r\n this.luminanceDownSamplePostProcesses = [];\r\n this.blurHPostProcesses = [];\r\n this.blurVPostProcesses = [];\r\n }\r\n\r\n /**\r\n * Dispose of the pipeline and stop all post processes\r\n */\r\n public dispose(): void {\r\n this._disposePostProcesses();\r\n\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n var serializationObject = SerializationHelper.Serialize(this);\r\n\r\n if (this.sourceLight) {\r\n serializationObject.sourceLightId = this.sourceLight.id;\r\n }\r\n\r\n if (this.screenSpaceReflectionPostProcess) {\r\n serializationObject.screenSpaceReflectionPostProcess = SerializationHelper.Serialize(this.screenSpaceReflectionPostProcess);\r\n }\r\n\r\n serializationObject.customType = \"StandardRenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): StandardRenderingPipeline {\r\n var p = SerializationHelper.Parse(() => new StandardRenderingPipeline(source._name, scene, source._ratio), source, scene, rootUrl);\r\n\r\n if (source.sourceLightId) {\r\n p.sourceLight = <SpotLight | DirectionalLight>scene.getLightById(source.sourceLightId);\r\n }\r\n\r\n if (source.screenSpaceReflectionPostProcess) {\r\n SerializationHelper.Parse(() => p.screenSpaceReflectionPostProcess, source.screenSpaceReflectionPostProcess, scene, rootUrl);\r\n }\r\n\r\n return p;\r\n }\r\n\r\n /**\r\n * Luminance steps\r\n */\r\n public static LuminanceSteps: number = 6;\r\n}\r\n\r\nRegisterClass(\"BABYLON.StandardRenderingPipeline\", StandardRenderingPipeline);\r\n"]}
|
|
1
|
+
{"version":3,"file":"standardRenderingPipeline.js","sourceRoot":"","sources":["../../../../../sourceES6/core/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../../types\";\r\nimport { serialize, serializeAsTexture, SerializationHelper } from \"../../../Misc/decorators\";\r\nimport { IAnimatable } from '../../../Animations/animatable.interface';\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Vector2, Vector3, Matrix, Vector4 } from \"../../../Maths/math.vector\";\r\nimport { Scalar } from \"../../../Maths/math.scalar\";\r\nimport { Camera } from \"../../../Cameras/camera\";\r\nimport { Effect } from \"../../../Materials/effect\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { BlurPostProcess } from \"../../../PostProcesses/blurPostProcess\";\r\nimport { FxaaPostProcess } from \"../../../PostProcesses/fxaaPostProcess\";\r\nimport { IDisposable } from \"../../../scene\";\r\nimport { SpotLight } from \"../../../Lights/spotLight\";\r\nimport { DirectionalLight } from \"../../../Lights/directionalLight\";\r\nimport { GeometryBufferRenderer } from \"../../../Rendering/geometryBufferRenderer\";\r\nimport { Scene } from \"../../../scene\";\r\n\r\nimport { RegisterClass } from '../../../Misc/typeStore';\r\nimport { MotionBlurPostProcess } from \"../../motionBlurPostProcess\";\r\nimport { ScreenSpaceReflectionPostProcess } from \"../../screenSpaceReflectionPostProcess\";\r\n\r\ndeclare type Animation = import(\"../../../Animations/animation\").Animation;\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\nimport \"../../../Shaders/standard.fragment\";\r\n/**\r\n * Standard rendering pipeline\r\n * Default pipeline should be used going forward but the standard pipeline will be kept for backwards compatibility.\r\n * @see https://doc.babylonjs.com/how_to/using_standard_rendering_pipeline\r\n */\r\nexport class StandardRenderingPipeline extends PostProcessRenderPipeline implements IDisposable, IAnimatable {\r\n /**\r\n * Public members\r\n */\r\n // Post-processes\r\n /**\r\n * Post-process which contains the original scene color before the pipeline applies all the effects\r\n */\r\n public originalPostProcess: Nullable<PostProcess>;\r\n /**\r\n * Post-process used to down scale an image x4\r\n */\r\n public downSampleX4PostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to calculate the illuminated surfaces controlled by a threshold\r\n */\r\n public brightPassPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process array storing all the horizontal blur post-processes used by the pipeline\r\n */\r\n public blurHPostProcesses: PostProcess[] = [];\r\n /**\r\n * Post-process array storing all the vertical blur post-processes used by the pipeline\r\n */\r\n public blurVPostProcesses: PostProcess[] = [];\r\n /**\r\n * Post-process used to add colors of 2 textures (typically brightness + real scene color)\r\n */\r\n public textureAdderPostProcess: Nullable<PostProcess> = null;\r\n\r\n /**\r\n * Post-process used to create volumetric lighting effect\r\n */\r\n public volumetricLightPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to smooth the previous volumetric light post-process on the X axis\r\n */\r\n public volumetricLightSmoothXPostProcess: Nullable<BlurPostProcess> = null;\r\n /**\r\n * Post-process used to smooth the previous volumetric light post-process on the Y axis\r\n */\r\n public volumetricLightSmoothYPostProcess: Nullable<BlurPostProcess> = null;\r\n /**\r\n * Post-process used to merge the volumetric light effect and the real scene color\r\n */\r\n public volumetricLightMergePostProces: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to store the final volumetric light post-process (attach/detach for debug purpose)\r\n */\r\n public volumetricLightFinalPostProcess: Nullable<PostProcess> = null;\r\n\r\n /**\r\n * Base post-process used to calculate the average luminance of the final image for HDR\r\n */\r\n public luminancePostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-processes used to create down sample post-processes in order to get\r\n * the average luminance of the final image for HDR\r\n * Array of length \"StandardRenderingPipeline.LuminanceSteps\"\r\n */\r\n public luminanceDownSamplePostProcesses: PostProcess[] = [];\r\n /**\r\n * Post-process used to create a HDR effect (light adaptation)\r\n */\r\n public hdrPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to store the final texture adder post-process (attach/detach for debug purpose)\r\n */\r\n public textureAdderFinalPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to store the final lens flare post-process (attach/detach for debug purpose)\r\n */\r\n public lensFlareFinalPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to merge the final HDR post-process and the real scene color\r\n */\r\n public hdrFinalPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to create a lens flare effect\r\n */\r\n public lensFlarePostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process that merges the result of the lens flare post-process and the real scene color\r\n */\r\n public lensFlareComposePostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to create a motion blur effect\r\n */\r\n public motionBlurPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * Post-process used to create a depth of field effect\r\n */\r\n public depthOfFieldPostProcess: Nullable<PostProcess> = null;\r\n /**\r\n * The Fast Approximate Anti-Aliasing post process which attempts to remove aliasing from an image.\r\n */\r\n public fxaaPostProcess: Nullable<FxaaPostProcess> = null;\r\n /**\r\n * Post-process used to simulate realtime reflections using the screen space and geometry renderer.\r\n */\r\n public screenSpaceReflectionPostProcess: Nullable<ScreenSpaceReflectionPostProcess> = null;\r\n\r\n // Values\r\n\r\n /**\r\n * Represents the brightness threshold in order to configure the illuminated surfaces\r\n */\r\n @serialize()\r\n public brightThreshold: number = 1.0;\r\n\r\n /**\r\n * Configures the blur intensity used for surexposed surfaces are highlighted surfaces (light halo)\r\n */\r\n @serialize()\r\n public blurWidth: number = 512.0;\r\n /**\r\n * Sets if the blur for highlighted surfaces must be only horizontal\r\n */\r\n @serialize()\r\n public horizontalBlur: boolean = false;\r\n\r\n /**\r\n * Gets the overall exposure used by the pipeline\r\n */\r\n @serialize()\r\n public get exposure(): number {\r\n return this._fixedExposure;\r\n }\r\n /**\r\n * Sets the overall exposure used by the pipeline\r\n */\r\n public set exposure(value: number) {\r\n this._fixedExposure = value;\r\n this._currentExposure = value;\r\n }\r\n\r\n /**\r\n * Texture used typically to simulate \"dirty\" on camera lens\r\n */\r\n @serializeAsTexture(\"lensTexture\")\r\n public lensTexture: Nullable<Texture> = null;\r\n\r\n /**\r\n * Represents the offset coefficient based on Rayleigh principle. Typically in interval [-0.2, 0.2]\r\n */\r\n @serialize()\r\n public volumetricLightCoefficient: number = 0.2;\r\n /**\r\n * The overall power of volumetric lights, typically in interval [0, 10] maximum\r\n */\r\n @serialize()\r\n public volumetricLightPower: number = 4.0;\r\n /**\r\n * Used the set the blur intensity to smooth the volumetric lights\r\n */\r\n @serialize()\r\n public volumetricLightBlurScale: number = 64.0;\r\n /**\r\n * Light (spot or directional) used to generate the volumetric lights rays\r\n * The source light must have a shadow generate so the pipeline can get its\r\n * depth map\r\n */\r\n public sourceLight: Nullable<SpotLight | DirectionalLight> = null;\r\n\r\n /**\r\n * For eye adaptation, represents the minimum luminance the eye can see\r\n */\r\n @serialize()\r\n public hdrMinimumLuminance: number = 1.0;\r\n /**\r\n * For eye adaptation, represents the decrease luminance speed\r\n */\r\n @serialize()\r\n public hdrDecreaseRate: number = 0.5;\r\n /**\r\n * For eye adaptation, represents the increase luminance speed\r\n */\r\n @serialize()\r\n public hdrIncreaseRate: number = 0.5;\r\n /**\r\n * Gets whether or not the exposure of the overall pipeline should be automatically adjusted by the HDR post-process\r\n */\r\n @serialize()\r\n public get hdrAutoExposure(): boolean {\r\n return this._hdrAutoExposure;\r\n }\r\n /**\r\n * Sets whether or not the exposure of the overall pipeline should be automatically adjusted by the HDR post-process\r\n */\r\n public set hdrAutoExposure(value: boolean) {\r\n this._hdrAutoExposure = value;\r\n if (this.hdrPostProcess) {\r\n const defines = [\"#define HDR\"];\r\n if (value) {\r\n defines.push(\"#define AUTO_EXPOSURE\");\r\n }\r\n this.hdrPostProcess.updateEffect(defines.join(\"\\n\"));\r\n }\r\n }\r\n\r\n /**\r\n * Lens color texture used by the lens flare effect. Mandatory if lens flare effect enabled\r\n */\r\n @serializeAsTexture(\"lensColorTexture\")\r\n public lensColorTexture: Nullable<Texture> = null;\r\n /**\r\n * The overall strengh for the lens flare effect\r\n */\r\n @serialize()\r\n public lensFlareStrength: number = 20.0;\r\n /**\r\n * Dispersion coefficient for lens flare ghosts\r\n */\r\n @serialize()\r\n public lensFlareGhostDispersal: number = 1.4;\r\n /**\r\n * Main lens flare halo width\r\n */\r\n @serialize()\r\n public lensFlareHaloWidth: number = 0.7;\r\n /**\r\n * Based on the lens distortion effect, defines how much the lens flare result\r\n * is distorted\r\n */\r\n @serialize()\r\n public lensFlareDistortionStrength: number = 16.0;\r\n /**\r\n * Configures the blur intensity used for for lens flare (halo)\r\n */\r\n @serialize()\r\n public lensFlareBlurWidth: number = 512.0;\r\n /**\r\n * Lens star texture must be used to simulate rays on the flares and is available\r\n * in the documentation\r\n */\r\n @serializeAsTexture(\"lensStarTexture\")\r\n public lensStarTexture: Nullable<Texture> = null;\r\n /**\r\n * As the \"lensTexture\" (can be the same texture or different), it is used to apply the lens\r\n * flare effect by taking account of the dirt texture\r\n */\r\n @serializeAsTexture(\"lensFlareDirtTexture\")\r\n public lensFlareDirtTexture: Nullable<Texture> = null;\r\n\r\n /**\r\n * Represents the focal length for the depth of field effect\r\n */\r\n @serialize()\r\n public depthOfFieldDistance: number = 10.0;\r\n /**\r\n * Represents the blur intensity for the blurred part of the depth of field effect\r\n */\r\n @serialize()\r\n public depthOfFieldBlurWidth: number = 64.0;\r\n\r\n /**\r\n * Gets how much the image is blurred by the movement while using the motion blur post-process\r\n */\r\n @serialize()\r\n public get motionStrength(): number {\r\n return this._motionStrength;\r\n }\r\n /**\r\n * Sets how much the image is blurred by the movement while using the motion blur post-process\r\n */\r\n public set motionStrength(strength: number) {\r\n this._motionStrength = strength;\r\n\r\n if (this._isObjectBasedMotionBlur && this.motionBlurPostProcess) {\r\n (this.motionBlurPostProcess as MotionBlurPostProcess).motionStrength = strength;\r\n }\r\n }\r\n\r\n /**\r\n * Gets whether or not the motion blur post-process is object based or screen based.\r\n */\r\n @serialize()\r\n public get objectBasedMotionBlur(): boolean {\r\n return this._isObjectBasedMotionBlur;\r\n }\r\n /**\r\n * Sets whether or not the motion blur post-process should be object based or screen based\r\n */\r\n public set objectBasedMotionBlur(value: boolean) {\r\n const shouldRebuild = this._isObjectBasedMotionBlur !== value;\r\n this._isObjectBasedMotionBlur = value;\r\n\r\n if (shouldRebuild) {\r\n this._buildPipeline();\r\n }\r\n }\r\n\r\n /**\r\n * List of animations for the pipeline (IAnimatable implementation)\r\n */\r\n public animations: Animation[] = [];\r\n\r\n /**\r\n * Private members\r\n */\r\n private _scene: Scene;\r\n private _currentDepthOfFieldSource: Nullable<PostProcess> = null;\r\n private _basePostProcess: Nullable<PostProcess>;\r\n\r\n private _fixedExposure: number = 1.0;\r\n private _currentExposure: number = 1.0;\r\n private _hdrAutoExposure: boolean = false;\r\n private _hdrCurrentLuminance: number = 1.0;\r\n private _motionStrength: number = 1.0;\r\n private _isObjectBasedMotionBlur: boolean = false;\r\n\r\n private _floatTextureType: number;\r\n\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n\r\n @serialize()\r\n private _ratio: number;\r\n\r\n // Getters and setters\r\n private _bloomEnabled: boolean = false;\r\n private _depthOfFieldEnabled: boolean = false;\r\n private _vlsEnabled: boolean = false;\r\n private _lensFlareEnabled: boolean = false;\r\n private _hdrEnabled: boolean = false;\r\n private _motionBlurEnabled: boolean = false;\r\n private _fxaaEnabled: boolean = false;\r\n private _screenSpaceReflectionsEnabled: boolean = false;\r\n\r\n private _motionBlurSamples: number = 64.0;\r\n private _volumetricLightStepsCount: number = 50.0;\r\n private _samples: number = 1;\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the bloom pipeline is enabled\r\n */\r\n @serialize()\r\n public get BloomEnabled(): boolean {\r\n return this._bloomEnabled;\r\n }\r\n\r\n public set BloomEnabled(enabled: boolean) {\r\n if (this._bloomEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._bloomEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the depth of field pipeline is enabled\r\n */\r\n @serialize()\r\n public get DepthOfFieldEnabled(): boolean {\r\n return this._depthOfFieldEnabled;\r\n }\r\n\r\n public set DepthOfFieldEnabled(enabled: boolean) {\r\n if (this._depthOfFieldEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._depthOfFieldEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the lens flare pipeline is enabled\r\n */\r\n @serialize()\r\n public get LensFlareEnabled(): boolean {\r\n return this._lensFlareEnabled;\r\n }\r\n\r\n public set LensFlareEnabled(enabled: boolean) {\r\n if (this._lensFlareEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._lensFlareEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the HDR pipeline is enabled\r\n */\r\n @serialize()\r\n public get HDREnabled(): boolean {\r\n return this._hdrEnabled;\r\n }\r\n\r\n public set HDREnabled(enabled: boolean) {\r\n if (this._hdrEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._hdrEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the volumetric lights scattering effect is enabled\r\n */\r\n @serialize()\r\n public get VLSEnabled(): boolean {\r\n return this._vlsEnabled;\r\n }\r\n\r\n public set VLSEnabled(enabled) {\r\n if (this._vlsEnabled === enabled) {\r\n return;\r\n }\r\n\r\n if (enabled) {\r\n var geometry = this._scene.enableGeometryBufferRenderer();\r\n if (!geometry) {\r\n Logger.Warn(\"Geometry renderer is not supported, cannot create volumetric lights in Standard Rendering Pipeline\");\r\n return;\r\n }\r\n }\r\n\r\n this._vlsEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Specifies if the motion blur effect is enabled\r\n */\r\n @serialize()\r\n public get MotionBlurEnabled(): boolean {\r\n return this._motionBlurEnabled;\r\n }\r\n\r\n public set MotionBlurEnabled(enabled: boolean) {\r\n if (this._motionBlurEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._motionBlurEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Specifies if anti-aliasing is enabled\r\n */\r\n @serialize()\r\n public get fxaaEnabled(): boolean {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n public set fxaaEnabled(enabled: boolean) {\r\n if (this._fxaaEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._fxaaEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Specifies if screen space reflections are enabled.\r\n */\r\n @serialize()\r\n public get screenSpaceReflectionsEnabled(): boolean {\r\n return this._screenSpaceReflectionsEnabled;\r\n }\r\n\r\n public set screenSpaceReflectionsEnabled(enabled: boolean) {\r\n if (this._screenSpaceReflectionsEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._screenSpaceReflectionsEnabled = enabled;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Specifies the number of steps used to calculate the volumetric lights\r\n * Typically in interval [50, 200]\r\n */\r\n @serialize()\r\n public get volumetricLightStepsCount(): number {\r\n return this._volumetricLightStepsCount;\r\n }\r\n\r\n public set volumetricLightStepsCount(count: number) {\r\n if (this.volumetricLightPostProcess) {\r\n this.volumetricLightPostProcess.updateEffect(\"#define VLS\\n#define NB_STEPS \" + count.toFixed(1));\r\n }\r\n\r\n this._volumetricLightStepsCount = count;\r\n }\r\n\r\n /**\r\n * Specifies the number of samples used for the motion blur effect\r\n * Typically in interval [16, 64]\r\n */\r\n @serialize()\r\n public get motionBlurSamples(): number {\r\n return this._motionBlurSamples;\r\n }\r\n\r\n public set motionBlurSamples(samples: number) {\r\n if (this.motionBlurPostProcess) {\r\n if (this._isObjectBasedMotionBlur) {\r\n (this.motionBlurPostProcess as MotionBlurPostProcess).motionBlurSamples = samples;\r\n } else {\r\n this.motionBlurPostProcess.updateEffect(\"#define MOTION_BLUR\\n#define MAX_MOTION_SAMPLES \" + samples.toFixed(1));\r\n }\r\n }\r\n\r\n this._motionBlurSamples = samples;\r\n }\r\n\r\n /**\r\n * Specifies MSAA sample count, setting this to 4 will provide 4x anti aliasing. (default: 1)\r\n */\r\n @serialize()\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n public set samples(sampleCount: number) {\r\n if (this._samples === sampleCount) {\r\n return;\r\n }\r\n\r\n this._samples = sampleCount;\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Default pipeline should be used going forward but the standard pipeline will be kept for backwards compatibility.\r\n * @constructor\r\n * @param name The rendering pipeline name\r\n * @param scene The scene linked to this pipeline\r\n * @param ratio The size of the postprocesses (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param originalPostProcess the custom original color post-process. Must be \"reusable\". Can be null.\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to\r\n */\r\n constructor(name: string, scene: Scene, ratio: number, originalPostProcess: Nullable<PostProcess> = null, cameras?: Camera[]) {\r\n super(scene.getEngine(), name);\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n // Initialize\r\n this._scene = scene;\r\n this._basePostProcess = originalPostProcess;\r\n this._ratio = ratio;\r\n\r\n // Misc\r\n this._floatTextureType = scene.getEngine().getCaps().textureFloatRender ? 1 : 2;\r\n\r\n // Finish\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n this._buildPipeline();\r\n }\r\n\r\n private _buildPipeline(): void {\r\n var ratio = this._ratio;\r\n var scene = this._scene;\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n\r\n // Create pass post-process\r\n if (this._screenSpaceReflectionsEnabled) {\r\n this.screenSpaceReflectionPostProcess = new ScreenSpaceReflectionPostProcess(\"HDRPass\", scene, ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, this._floatTextureType);\r\n this.screenSpaceReflectionPostProcess.onApplyObservable.add(() => {\r\n this._currentDepthOfFieldSource = this.screenSpaceReflectionPostProcess;\r\n });\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRScreenSpaceReflections\", () => this.screenSpaceReflectionPostProcess, true));\r\n }\r\n\r\n if (!this._basePostProcess) {\r\n this.originalPostProcess = new PostProcess(\"HDRPass\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", this._floatTextureType);\r\n }\r\n else {\r\n this.originalPostProcess = this._basePostProcess;\r\n }\r\n\r\n this.originalPostProcess.autoClear = !this.screenSpaceReflectionPostProcess;\r\n this.originalPostProcess.onApplyObservable.add(() => {\r\n this._currentDepthOfFieldSource = this.originalPostProcess;\r\n });\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRPassPostProcess\", () => this.originalPostProcess, true));\r\n\r\n if (this._bloomEnabled) {\r\n // Create down sample X4 post-process\r\n this._createDownSampleX4PostProcess(scene, ratio / 4);\r\n\r\n // Create bright pass post-process\r\n this._createBrightPassPostProcess(scene, ratio / 4);\r\n\r\n // Create gaussian blur post-processes (down sampling blurs)\r\n this._createBlurPostProcesses(scene, ratio / 4, 1);\r\n\r\n // Create texture adder post-process\r\n this._createTextureAdderPostProcess(scene, ratio);\r\n\r\n // Create depth-of-field source post-process\r\n this.textureAdderFinalPostProcess = new PostProcess(\"HDRDepthOfFieldSource\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBaseDepthOfFieldSource\", () => { return this.textureAdderFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._vlsEnabled) {\r\n // Create volumetric light\r\n this._createVolumetricLightPostProcess(scene, ratio);\r\n\r\n // Create volumetric light final post-process\r\n this.volumetricLightFinalPostProcess = new PostProcess(\"HDRVLSFinal\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRVLSFinal\", () => { return this.volumetricLightFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._lensFlareEnabled) {\r\n // Create lens flare post-process\r\n this._createLensFlarePostProcess(scene, ratio);\r\n\r\n // Create depth-of-field source post-process post lens-flare and disable it now\r\n this.lensFlareFinalPostProcess = new PostProcess(\"HDRPostLensFlareDepthOfFieldSource\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRPostLensFlareDepthOfFieldSource\", () => { return this.lensFlareFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._hdrEnabled) {\r\n // Create luminance\r\n this._createLuminancePostProcesses(scene, this._floatTextureType);\r\n\r\n // Create HDR\r\n this._createHdrPostProcess(scene, ratio);\r\n\r\n // Create depth-of-field source post-process post hdr and disable it now\r\n this.hdrFinalPostProcess = new PostProcess(\"HDRPostHDReDepthOfFieldSource\", \"standard\", [], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define PASS_POST_PROCESS\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRPostHDReDepthOfFieldSource\", () => { return this.hdrFinalPostProcess; }, true));\r\n }\r\n\r\n if (this._depthOfFieldEnabled) {\r\n // Create gaussian blur used by depth-of-field\r\n this._createBlurPostProcesses(scene, ratio / 2, 3, \"depthOfFieldBlurWidth\");\r\n\r\n // Create depth-of-field post-process\r\n this._createDepthOfFieldPostProcess(scene, ratio);\r\n }\r\n\r\n if (this._motionBlurEnabled) {\r\n // Create motion blur post-process\r\n this._createMotionBlurPostProcess(scene, ratio);\r\n }\r\n\r\n if (this._fxaaEnabled) {\r\n // Create fxaa post-process\r\n this.fxaaPostProcess = new FxaaPostProcess(\"fxaa\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRFxaa\", () => { return this.fxaaPostProcess; }, true));\r\n }\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n\r\n if (!this._enableMSAAOnFirstPostProcess(this._samples) && this._samples > 1) {\r\n Logger.Warn(\"MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0\");\r\n }\r\n }\r\n\r\n // Down Sample X4 Post-Processs\r\n private _createDownSampleX4PostProcess(scene: Scene, ratio: number): void {\r\n var downSampleX4Offsets = new Array<number>(32);\r\n this.downSampleX4PostProcess = new PostProcess(\"HDRDownSampleX4\", \"standard\", [\"dsOffsets\"], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define DOWN_SAMPLE_X4\", this._floatTextureType);\r\n\r\n this.downSampleX4PostProcess.onApply = (effect: Effect) => {\r\n var id = 0;\r\n let width = (<PostProcess>this.downSampleX4PostProcess).width;\r\n let height = (<PostProcess>this.downSampleX4PostProcess).height;\r\n\r\n for (var i = -2; i < 2; i++) {\r\n for (var j = -2; j < 2; j++) {\r\n downSampleX4Offsets[id] = (i + 0.5) * (1.0 / width);\r\n downSampleX4Offsets[id + 1] = (j + 0.5) * (1.0 / height);\r\n id += 2;\r\n }\r\n }\r\n\r\n effect.setArray2(\"dsOffsets\", downSampleX4Offsets);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRDownSampleX4\", () => { return this.downSampleX4PostProcess; }, true));\r\n }\r\n\r\n // Brightpass Post-Process\r\n private _createBrightPassPostProcess(scene: Scene, ratio: number): void {\r\n var brightOffsets = new Array<number>(8);\r\n this.brightPassPostProcess = new PostProcess(\"HDRBrightPass\", \"standard\", [\"dsOffsets\", \"brightThreshold\"], [], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define BRIGHT_PASS\", this._floatTextureType);\r\n\r\n this.brightPassPostProcess.onApply = (effect: Effect) => {\r\n var sU = (1.0 / (<PostProcess>this.brightPassPostProcess).width);\r\n var sV = (1.0 / (<PostProcess>this.brightPassPostProcess).height);\r\n\r\n brightOffsets[0] = -0.5 * sU;\r\n brightOffsets[1] = 0.5 * sV;\r\n brightOffsets[2] = 0.5 * sU;\r\n brightOffsets[3] = 0.5 * sV;\r\n brightOffsets[4] = -0.5 * sU;\r\n brightOffsets[5] = -0.5 * sV;\r\n brightOffsets[6] = 0.5 * sU;\r\n brightOffsets[7] = -0.5 * sV;\r\n\r\n effect.setArray2(\"dsOffsets\", brightOffsets);\r\n effect.setFloat(\"brightThreshold\", this.brightThreshold);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBrightPass\", () => { return this.brightPassPostProcess; }, true));\r\n }\r\n\r\n // Create blur H&V post-processes\r\n private _createBlurPostProcesses(scene: Scene, ratio: number, indice: number, blurWidthKey: string = \"blurWidth\"): void {\r\n var engine = scene.getEngine();\r\n\r\n var blurX = new BlurPostProcess(\"HDRBlurH\" + \"_\" + indice, new Vector2(1, 0), (<any>this)[blurWidthKey], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, this._floatTextureType);\r\n var blurY = new BlurPostProcess(\"HDRBlurV\" + \"_\" + indice, new Vector2(0, 1), (<any>this)[blurWidthKey], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, this._floatTextureType);\r\n\r\n blurX.onActivateObservable.add(() => {\r\n let dw = blurX.width / engine.getRenderWidth();\r\n blurX.kernel = (<any>this)[blurWidthKey] * dw;\r\n });\r\n\r\n blurY.onActivateObservable.add(() => {\r\n let dw = blurY.height / engine.getRenderHeight();\r\n blurY.kernel = this.horizontalBlur ? 64 * dw : (<any>this)[blurWidthKey] * dw;\r\n });\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBlurH\" + indice, () => { return blurX; }, true));\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRBlurV\" + indice, () => { return blurY; }, true));\r\n\r\n this.blurHPostProcesses.push(blurX);\r\n this.blurVPostProcesses.push(blurY);\r\n }\r\n\r\n // Create texture adder post-process\r\n private _createTextureAdderPostProcess(scene: Scene, ratio: number): void {\r\n this.textureAdderPostProcess = new PostProcess(\"HDRTextureAdder\", \"standard\", [\"exposure\"], [\"otherSampler\", \"lensSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define TEXTURE_ADDER\", this._floatTextureType);\r\n this.textureAdderPostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"otherSampler\", this._vlsEnabled ? this._currentDepthOfFieldSource : this.originalPostProcess);\r\n effect.setTexture(\"lensSampler\", this.lensTexture);\r\n\r\n effect.setFloat(\"exposure\", this._currentExposure);\r\n\r\n this._currentDepthOfFieldSource = this.textureAdderFinalPostProcess;\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRTextureAdder\", () => { return this.textureAdderPostProcess; }, true));\r\n }\r\n\r\n private _createVolumetricLightPostProcess(scene: Scene, ratio: number): void {\r\n var geometryRenderer = <GeometryBufferRenderer>scene.enableGeometryBufferRenderer();\r\n geometryRenderer.enablePosition = true;\r\n\r\n var geometry = geometryRenderer.getGBuffer();\r\n\r\n // Base post-process\r\n this.volumetricLightPostProcess = new PostProcess(\"HDRVLS\", \"standard\",\r\n [\"shadowViewProjection\", \"cameraPosition\", \"sunDirection\", \"sunColor\", \"scatteringCoefficient\", \"scatteringPower\", \"depthValues\"],\r\n [\"shadowMapSampler\", \"positionSampler\"],\r\n ratio / 8,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n scene.getEngine(),\r\n false, \"#define VLS\\n#define NB_STEPS \" + this._volumetricLightStepsCount.toFixed(1));\r\n\r\n var depthValues = Vector2.Zero();\r\n\r\n this.volumetricLightPostProcess.onApply = (effect: Effect) => {\r\n if (this.sourceLight && this.sourceLight.getShadowGenerator() && this._scene.activeCamera) {\r\n var generator = this.sourceLight.getShadowGenerator()!;\r\n\r\n effect.setTexture(\"shadowMapSampler\", generator.getShadowMap());\r\n effect.setTexture(\"positionSampler\", geometry.textures[2]);\r\n\r\n effect.setColor3(\"sunColor\", this.sourceLight.diffuse);\r\n effect.setVector3(\"sunDirection\", this.sourceLight.getShadowDirection());\r\n\r\n effect.setVector3(\"cameraPosition\", this._scene.activeCamera.globalPosition);\r\n effect.setMatrix(\"shadowViewProjection\", generator.getTransformMatrix());\r\n\r\n effect.setFloat(\"scatteringCoefficient\", this.volumetricLightCoefficient);\r\n effect.setFloat(\"scatteringPower\", this.volumetricLightPower);\r\n\r\n depthValues.x = this.sourceLight.getDepthMinZ(this._scene.activeCamera);\r\n depthValues.y = this.sourceLight.getDepthMaxZ(this._scene.activeCamera);\r\n effect.setVector2(\"depthValues\", depthValues);\r\n }\r\n };\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRVLS\", () => { return this.volumetricLightPostProcess; }, true));\r\n\r\n // Smooth\r\n this._createBlurPostProcesses(scene, ratio / 4, 0, \"volumetricLightBlurScale\");\r\n\r\n // Merge\r\n this.volumetricLightMergePostProces = new PostProcess(\"HDRVLSMerge\", \"standard\", [], [\"originalSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define VLSMERGE\");\r\n\r\n this.volumetricLightMergePostProces.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"originalSampler\", this._bloomEnabled ? this.textureAdderFinalPostProcess : this.originalPostProcess);\r\n\r\n this._currentDepthOfFieldSource = this.volumetricLightFinalPostProcess;\r\n };\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRVLSMerge\", () => { return this.volumetricLightMergePostProces; }, true));\r\n }\r\n\r\n // Create luminance\r\n private _createLuminancePostProcesses(scene: Scene, textureType: number): void {\r\n // Create luminance\r\n var size = Math.pow(3, StandardRenderingPipeline.LuminanceSteps);\r\n this.luminancePostProcess = new PostProcess(\"HDRLuminance\", \"standard\", [\"lumOffsets\"], [], { width: size, height: size }, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define LUMINANCE\", textureType);\r\n\r\n var offsets: number[] = [];\r\n this.luminancePostProcess.onApply = (effect: Effect) => {\r\n var sU = (1.0 / (<PostProcess>this.luminancePostProcess).width);\r\n var sV = (1.0 / (<PostProcess>this.luminancePostProcess).height);\r\n\r\n offsets[0] = -0.5 * sU;\r\n offsets[1] = 0.5 * sV;\r\n offsets[2] = 0.5 * sU;\r\n offsets[3] = 0.5 * sV;\r\n offsets[4] = -0.5 * sU;\r\n offsets[5] = -0.5 * sV;\r\n offsets[6] = 0.5 * sU;\r\n offsets[7] = -0.5 * sV;\r\n\r\n effect.setArray2(\"lumOffsets\", offsets);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLuminance\", () => { return this.luminancePostProcess; }, true));\r\n\r\n // Create down sample luminance\r\n for (var i = StandardRenderingPipeline.LuminanceSteps - 1; i >= 0; i--) {\r\n var size = Math.pow(3, i);\r\n\r\n var defines = \"#define LUMINANCE_DOWN_SAMPLE\\n\";\r\n if (i === 0) {\r\n defines += \"#define FINAL_DOWN_SAMPLER\";\r\n }\r\n\r\n var postProcess = new PostProcess(\"HDRLuminanceDownSample\" + i, \"standard\", [\"dsOffsets\", \"halfDestPixelSize\"], [], { width: size, height: size }, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, defines, textureType);\r\n this.luminanceDownSamplePostProcesses.push(postProcess);\r\n }\r\n\r\n // Create callbacks and add effects\r\n var lastLuminance: Nullable<PostProcess> = this.luminancePostProcess;\r\n\r\n this.luminanceDownSamplePostProcesses.forEach((pp, index) => {\r\n var downSampleOffsets = new Array<number>(18);\r\n\r\n pp.onApply = (effect: Effect) => {\r\n if (!lastLuminance) {\r\n return;\r\n }\r\n\r\n var id = 0;\r\n for (var x = -1; x < 2; x++) {\r\n for (var y = -1; y < 2; y++) {\r\n downSampleOffsets[id] = x / lastLuminance.width;\r\n downSampleOffsets[id + 1] = y / lastLuminance.height;\r\n id += 2;\r\n }\r\n }\r\n\r\n effect.setArray2(\"dsOffsets\", downSampleOffsets);\r\n effect.setFloat(\"halfDestPixelSize\", 0.5 / lastLuminance.width);\r\n\r\n if (index === this.luminanceDownSamplePostProcesses.length - 1) {\r\n lastLuminance = this.luminancePostProcess;\r\n } else {\r\n lastLuminance = pp;\r\n }\r\n };\r\n\r\n if (index === this.luminanceDownSamplePostProcesses.length - 1) {\r\n pp.onAfterRender = () => {\r\n var pixel = scene.getEngine().readPixels(0, 0, 1, 1);\r\n var bit_shift = new Vector4(1.0 / (255.0 * 255.0 * 255.0), 1.0 / (255.0 * 255.0), 1.0 / 255.0, 1.0);\r\n pixel.then((pixel) => {\r\n const data = new Uint8Array(pixel.buffer);\r\n this._hdrCurrentLuminance = (data[0] * bit_shift.x + data[1] * bit_shift.y + data[2] * bit_shift.z + data[3] * bit_shift.w) / 100.0;\r\n });\r\n };\r\n }\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLuminanceDownSample\" + index, () => { return pp; }, true));\r\n });\r\n }\r\n\r\n // Create HDR post-process\r\n private _createHdrPostProcess(scene: Scene, ratio: number): void {\r\n const defines = [\"#define HDR\"];\r\n if (this._hdrAutoExposure) {\r\n defines.push(\"#define AUTO_EXPOSURE\");\r\n }\r\n this.hdrPostProcess = new PostProcess(\"HDR\", \"standard\", [\"averageLuminance\"], [\"textureAdderSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, defines.join(\"\\n\"), 0);\r\n\r\n var outputLiminance = 1;\r\n var time = 0;\r\n var lastTime = 0;\r\n\r\n this.hdrPostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"textureAdderSampler\", this._currentDepthOfFieldSource);\r\n\r\n time += scene.getEngine().getDeltaTime();\r\n\r\n if (outputLiminance < 0) {\r\n outputLiminance = this._hdrCurrentLuminance;\r\n } else {\r\n var dt = (lastTime - time) / 1000.0;\r\n\r\n if (this._hdrCurrentLuminance < outputLiminance + this.hdrDecreaseRate * dt) {\r\n outputLiminance += this.hdrDecreaseRate * dt;\r\n }\r\n else if (this._hdrCurrentLuminance > outputLiminance - this.hdrIncreaseRate * dt) {\r\n outputLiminance -= this.hdrIncreaseRate * dt;\r\n }\r\n else {\r\n outputLiminance = this._hdrCurrentLuminance;\r\n }\r\n }\r\n\r\n if (this.hdrAutoExposure) {\r\n this._currentExposure = this._fixedExposure / outputLiminance;\r\n } else {\r\n outputLiminance = Scalar.Clamp(outputLiminance, this.hdrMinimumLuminance, 1e20);\r\n effect.setFloat(\"averageLuminance\", outputLiminance);\r\n }\r\n\r\n lastTime = time;\r\n\r\n this._currentDepthOfFieldSource = this.hdrFinalPostProcess;\r\n };\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDR\", () => { return this.hdrPostProcess; }, true));\r\n }\r\n\r\n // Create lens flare post-process\r\n private _createLensFlarePostProcess(scene: Scene, ratio: number): void {\r\n this.lensFlarePostProcess = new PostProcess(\"HDRLensFlare\", \"standard\", [\"strength\", \"ghostDispersal\", \"haloWidth\", \"resolution\", \"distortionStrength\"], [\"lensColorSampler\"], ratio / 2, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define LENS_FLARE\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLensFlare\", () => { return this.lensFlarePostProcess; }, true));\r\n\r\n this._createBlurPostProcesses(scene, ratio / 4, 2, \"lensFlareBlurWidth\");\r\n\r\n this.lensFlareComposePostProcess = new PostProcess(\"HDRLensFlareCompose\", \"standard\", [\"lensStarMatrix\"], [\"otherSampler\", \"lensDirtSampler\", \"lensStarSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define LENS_FLARE_COMPOSE\", 0);\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRLensFlareCompose\", () => { return this.lensFlareComposePostProcess; }, true));\r\n\r\n var resolution = new Vector2(0, 0);\r\n\r\n // Lens flare\r\n this.lensFlarePostProcess.externalTextureSamplerBinding = true;\r\n this.lensFlarePostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"textureSampler\", this._bloomEnabled ? this.blurHPostProcesses[0] : this.originalPostProcess);\r\n effect.setTexture(\"lensColorSampler\", this.lensColorTexture);\r\n effect.setFloat(\"strength\", this.lensFlareStrength);\r\n effect.setFloat(\"ghostDispersal\", this.lensFlareGhostDispersal);\r\n effect.setFloat(\"haloWidth\", this.lensFlareHaloWidth);\r\n\r\n // Shift\r\n resolution.x = (<PostProcess>this.lensFlarePostProcess).width;\r\n resolution.y = (<PostProcess>this.lensFlarePostProcess).height;\r\n effect.setVector2(\"resolution\", resolution);\r\n\r\n effect.setFloat(\"distortionStrength\", this.lensFlareDistortionStrength);\r\n };\r\n\r\n // Compose\r\n var scaleBias1 = Matrix.FromValues(\r\n 2.0, 0.0, -1.0, 0.0,\r\n 0.0, 2.0, -1.0, 0.0,\r\n 0.0, 0.0, 1.0, 0.0,\r\n 0.0, 0.0, 0.0, 1.0\r\n );\r\n\r\n var scaleBias2 = Matrix.FromValues(\r\n 0.5, 0.0, 0.5, 0.0,\r\n 0.0, 0.5, 0.5, 0.0,\r\n 0.0, 0.0, 1.0, 0.0,\r\n 0.0, 0.0, 0.0, 1.0\r\n );\r\n\r\n this.lensFlareComposePostProcess.onApply = (effect: Effect) => {\r\n if (!this._scene.activeCamera) {\r\n return;\r\n }\r\n\r\n effect.setTextureFromPostProcess(\"otherSampler\", this.lensFlarePostProcess);\r\n effect.setTexture(\"lensDirtSampler\", this.lensFlareDirtTexture);\r\n effect.setTexture(\"lensStarSampler\", this.lensStarTexture);\r\n\r\n // Lens start rotation matrix\r\n var camerax = (<Vector4>this._scene.activeCamera.getViewMatrix().getRow(0));\r\n var cameraz = (<Vector4>this._scene.activeCamera.getViewMatrix().getRow(2));\r\n var camRot = Vector3.Dot(camerax.toVector3(), new Vector3(1.0, 0.0, 0.0)) + Vector3.Dot(cameraz.toVector3(), new Vector3(0.0, 0.0, 1.0));\r\n camRot *= 4.0;\r\n\r\n var starRotation = Matrix.FromValues(\r\n Math.cos(camRot) * 0.5, -Math.sin(camRot), 0.0, 0.0,\r\n Math.sin(camRot), Math.cos(camRot) * 0.5, 0.0, 0.0,\r\n 0.0, 0.0, 1.0, 0.0,\r\n 0.0, 0.0, 0.0, 1.0\r\n );\r\n\r\n var lensStarMatrix = scaleBias2.multiply(starRotation).multiply(scaleBias1);\r\n\r\n effect.setMatrix(\"lensStarMatrix\", lensStarMatrix);\r\n\r\n this._currentDepthOfFieldSource = this.lensFlareFinalPostProcess;\r\n };\r\n }\r\n\r\n // Create depth-of-field post-process\r\n private _createDepthOfFieldPostProcess(scene: Scene, ratio: number): void {\r\n this.depthOfFieldPostProcess = new PostProcess(\"HDRDepthOfField\", \"standard\", [\"distance\"], [\"otherSampler\", \"depthSampler\"], ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define DEPTH_OF_FIELD\", 0);\r\n this.depthOfFieldPostProcess.onApply = (effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"otherSampler\", this._currentDepthOfFieldSource);\r\n effect.setTexture(\"depthSampler\", this._getDepthTexture());\r\n\r\n effect.setFloat(\"distance\", this.depthOfFieldDistance);\r\n };\r\n\r\n // Add to pipeline\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRDepthOfField\", () => { return this.depthOfFieldPostProcess; }, true));\r\n }\r\n\r\n // Create motion blur post-process\r\n private _createMotionBlurPostProcess(scene: Scene, ratio: number): void {\r\n if (this._isObjectBasedMotionBlur) {\r\n const mb = new MotionBlurPostProcess(\"HDRMotionBlur\", scene, ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, 0);\r\n mb.motionStrength = this.motionStrength;\r\n mb.motionBlurSamples = this.motionBlurSamples;\r\n this.motionBlurPostProcess = mb;\r\n } else {\r\n this.motionBlurPostProcess = new PostProcess(\"HDRMotionBlur\", \"standard\",\r\n [\"inverseViewProjection\", \"prevViewProjection\", \"screenSize\", \"motionScale\", \"motionStrength\"],\r\n [\"depthSampler\"],\r\n ratio, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, \"#define MOTION_BLUR\\n#define MAX_MOTION_SAMPLES \" + this.motionBlurSamples.toFixed(1), 0);\r\n\r\n var motionScale: number = 0;\r\n var prevViewProjection = Matrix.Identity();\r\n var invViewProjection = Matrix.Identity();\r\n var viewProjection = Matrix.Identity();\r\n var screenSize = Vector2.Zero();\r\n\r\n this.motionBlurPostProcess.onApply = (effect: Effect) => {\r\n viewProjection = scene.getProjectionMatrix().multiply(scene.getViewMatrix());\r\n\r\n viewProjection.invertToRef(invViewProjection);\r\n effect.setMatrix(\"inverseViewProjection\", invViewProjection);\r\n\r\n effect.setMatrix(\"prevViewProjection\", prevViewProjection);\r\n prevViewProjection = viewProjection;\r\n\r\n screenSize.x = (<PostProcess>this.motionBlurPostProcess).width;\r\n screenSize.y = (<PostProcess>this.motionBlurPostProcess).height;\r\n effect.setVector2(\"screenSize\", screenSize);\r\n\r\n motionScale = scene.getEngine().getFps() / 60.0;\r\n effect.setFloat(\"motionScale\", motionScale);\r\n effect.setFloat(\"motionStrength\", this.motionStrength);\r\n\r\n effect.setTexture(\"depthSampler\", this._getDepthTexture());\r\n };\r\n }\r\n\r\n this.addEffect(new PostProcessRenderEffect(scene.getEngine(), \"HDRMotionBlur\", () => { return this.motionBlurPostProcess; }, true));\r\n }\r\n\r\n private _getDepthTexture(): Texture {\r\n if (this._scene.getEngine().getCaps().drawBuffersExtension) {\r\n let renderer = <GeometryBufferRenderer>this._scene.enableGeometryBufferRenderer();\r\n return renderer.getGBuffer().textures[0];\r\n }\r\n\r\n return this._scene.enableDepthRenderer().getDepthMap();\r\n }\r\n\r\n private _disposePostProcesses(): void {\r\n for (var i = 0; i < this._cameras.length; i++) {\r\n var camera = this._cameras[i];\r\n\r\n if (this.originalPostProcess) { this.originalPostProcess.dispose(camera); }\r\n if (this.screenSpaceReflectionPostProcess) { this.screenSpaceReflectionPostProcess.dispose(camera); }\r\n\r\n if (this.downSampleX4PostProcess) { this.downSampleX4PostProcess.dispose(camera); }\r\n if (this.brightPassPostProcess) { this.brightPassPostProcess.dispose(camera); }\r\n if (this.textureAdderPostProcess) { this.textureAdderPostProcess.dispose(camera); }\r\n\r\n if (this.volumetricLightPostProcess) { this.volumetricLightPostProcess.dispose(camera); }\r\n if (this.volumetricLightSmoothXPostProcess) { this.volumetricLightSmoothXPostProcess.dispose(camera); }\r\n if (this.volumetricLightSmoothYPostProcess) { this.volumetricLightSmoothYPostProcess.dispose(camera); }\r\n if (this.volumetricLightMergePostProces) { this.volumetricLightMergePostProces.dispose(camera); }\r\n if (this.volumetricLightFinalPostProcess) { this.volumetricLightFinalPostProcess.dispose(camera); }\r\n\r\n if (this.lensFlarePostProcess) { this.lensFlarePostProcess.dispose(camera); }\r\n if (this.lensFlareComposePostProcess) { this.lensFlareComposePostProcess.dispose(camera); }\r\n\r\n for (var j = 0; j < this.luminanceDownSamplePostProcesses.length; j++) {\r\n this.luminanceDownSamplePostProcesses[j].dispose(camera);\r\n }\r\n\r\n if (this.luminancePostProcess) { this.luminancePostProcess.dispose(camera); }\r\n if (this.hdrPostProcess) { this.hdrPostProcess.dispose(camera); }\r\n if (this.hdrFinalPostProcess) { this.hdrFinalPostProcess.dispose(camera); }\r\n\r\n if (this.depthOfFieldPostProcess) { this.depthOfFieldPostProcess.dispose(camera); }\r\n\r\n if (this.motionBlurPostProcess) { this.motionBlurPostProcess.dispose(camera); }\r\n\r\n if (this.fxaaPostProcess) { this.fxaaPostProcess.dispose(camera); }\r\n\r\n for (var j = 0; j < this.blurHPostProcesses.length; j++) {\r\n this.blurHPostProcesses[j].dispose(camera);\r\n }\r\n\r\n for (var j = 0; j < this.blurVPostProcesses.length; j++) {\r\n this.blurVPostProcesses[j].dispose(camera);\r\n }\r\n }\r\n\r\n this.originalPostProcess = null;\r\n this.downSampleX4PostProcess = null;\r\n this.brightPassPostProcess = null;\r\n this.textureAdderPostProcess = null;\r\n this.textureAdderFinalPostProcess = null;\r\n this.volumetricLightPostProcess = null;\r\n this.volumetricLightSmoothXPostProcess = null;\r\n this.volumetricLightSmoothYPostProcess = null;\r\n this.volumetricLightMergePostProces = null;\r\n this.volumetricLightFinalPostProcess = null;\r\n this.lensFlarePostProcess = null;\r\n this.lensFlareComposePostProcess = null;\r\n this.luminancePostProcess = null;\r\n this.hdrPostProcess = null;\r\n this.hdrFinalPostProcess = null;\r\n this.depthOfFieldPostProcess = null;\r\n this.motionBlurPostProcess = null;\r\n this.fxaaPostProcess = null;\r\n this.screenSpaceReflectionPostProcess = null;\r\n\r\n this.luminanceDownSamplePostProcesses = [];\r\n this.blurHPostProcesses = [];\r\n this.blurVPostProcesses = [];\r\n }\r\n\r\n /**\r\n * Dispose of the pipeline and stop all post processes\r\n */\r\n public dispose(): void {\r\n this._disposePostProcesses();\r\n\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n var serializationObject = SerializationHelper.Serialize(this);\r\n\r\n if (this.sourceLight) {\r\n serializationObject.sourceLightId = this.sourceLight.id;\r\n }\r\n\r\n if (this.screenSpaceReflectionPostProcess) {\r\n serializationObject.screenSpaceReflectionPostProcess = SerializationHelper.Serialize(this.screenSpaceReflectionPostProcess);\r\n }\r\n\r\n serializationObject.customType = \"StandardRenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): StandardRenderingPipeline {\r\n var p = SerializationHelper.Parse(() => new StandardRenderingPipeline(source._name, scene, source._ratio), source, scene, rootUrl);\r\n\r\n if (source.sourceLightId) {\r\n p.sourceLight = <SpotLight | DirectionalLight>scene.getLightById(source.sourceLightId);\r\n }\r\n\r\n if (source.screenSpaceReflectionPostProcess) {\r\n SerializationHelper.Parse(() => p.screenSpaceReflectionPostProcess, source.screenSpaceReflectionPostProcess, scene, rootUrl);\r\n }\r\n\r\n return p;\r\n }\r\n\r\n /**\r\n * Luminance steps\r\n */\r\n public static LuminanceSteps: number = 6;\r\n}\r\n\r\nRegisterClass(\"BABYLON.StandardRenderingPipeline\", StandardRenderingPipeline);\r\n"]}
|
|
@@ -31,6 +31,7 @@ var BloomMergePostProcess = /** @class */ (function (_super) {
|
|
|
31
31
|
/** Weight of the bloom to be added to the original input. */
|
|
32
32
|
_this.weight = 1;
|
|
33
33
|
_this.weight = weight;
|
|
34
|
+
_this.externalTextureSamplerBinding = true;
|
|
34
35
|
_this.onApplyObservable.add(function (effect) {
|
|
35
36
|
effect.setTextureFromPostProcess("textureSampler", originalFromInput);
|
|
36
37
|
effect.setTextureFromPostProcessOutput("bloomBlur", blurred);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bloomMergePostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/bloomMergePostProcess.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAOhE,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH;IAA2C,yCAAW;IAalD;;;;;;;;;;;;;OAaG;IACH,+BAAY,IAAY,EAAE,iBAA8B,EAAE,OAAoB;IAC1E,6DAA6D;IAC7D,MAAc,EACd,OAAoC,EACpC,MAAwB,EAAE,YAAqB,EAAE,MAAe,EAAE,QAAkB,EAAE,WAAuB,EAAE,gBAAwB;QAAjD,4BAAA,EAAA,eAAuB;QAAE,iCAAA,EAAA,wBAAwB;QAJ3I,YAKI,kBAAM,IAAI,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"bloomMergePostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/bloomMergePostProcess.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAOhE,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH;IAA2C,yCAAW;IAalD;;;;;;;;;;;;;OAaG;IACH,+BAAY,IAAY,EAAE,iBAA8B,EAAE,OAAoB;IAC1E,6DAA6D;IAC7D,MAAc,EACd,OAAoC,EACpC,MAAwB,EAAE,YAAqB,EAAE,MAAe,EAAE,QAAkB,EAAE,WAAuB,EAAE,gBAAwB;QAAjD,4BAAA,EAAA,eAAuB;QAAE,iCAAA,EAAA,wBAAwB;QAJ3I,YAKI,kBAAM,IAAI,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,SAYvJ;QA3CD,6DAA6D;QAEtD,YAAM,GAAG,CAAC,CAAC;QA8Bd,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,MAAc;YACtC,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;YACtE,MAAM,CAAC,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAI,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE;YACnB,KAAI,CAAC,YAAY,EAAE,CAAC;SACvB;;IACL,CAAC;IAvCD;;;OAGG;IACI,4CAAY,GAAnB;QACI,OAAO,uBAAuB,CAAC;IACnC,CAAC;IARD;QADC,SAAS,EAAE;yDACM;IA0CtB,4BAAC;CAAA,AA7CD,CAA2C,WAAW,GA6CrD;SA7CY,qBAAqB;AA+ClC,aAAa,CAAC,+BAA+B,EAAE,qBAAqB,CAAC,CAAC","sourcesContent":["import { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { Nullable } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { Camera } from \"../Cameras/camera\";\r\n\r\n\r\nimport \"../Shaders/bloomMerge.fragment\";\r\nimport { RegisterClass } from '../Misc/typeStore';\r\nimport { serialize } from '../Misc/decorators';\r\n\r\n/**\r\n * The BloomMergePostProcess merges blurred images with the original based on the values of the circle of confusion.\r\n */\r\nexport class BloomMergePostProcess extends PostProcess {\r\n /** Weight of the bloom to be added to the original input. */\r\n @serialize()\r\n public weight = 1;\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"BloomMergePostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"BloomMergePostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new instance of @see BloomMergePostProcess\r\n * @param name The name of the effect.\r\n * @param originalFromInput Post process which's input will be used for the merge.\r\n * @param blurred Blurred highlights post process which's output will be used.\r\n * @param weight Weight of the bloom to be added to the original input.\r\n * @param options The required width/height ratio to downsize to before computing the render pass.\r\n * @param camera The camera to apply the render pass to.\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\r\n */\r\n constructor(name: string, originalFromInput: PostProcess, blurred: PostProcess,\r\n /** Weight of the bloom to be added to the original input. */\r\n weight: number,\r\n options: number | PostProcessOptions,\r\n camera: Nullable<Camera>, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType: number = 0, blockCompilation = false) {\r\n super(name, \"bloomMerge\", [\"bloomWeight\"], [\"bloomBlur\"], options, camera, samplingMode, engine, reusable, null, textureType, undefined, null, true);\r\n this.weight = weight;\r\n this.externalTextureSamplerBinding = true;\r\n this.onApplyObservable.add((effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"textureSampler\", originalFromInput);\r\n effect.setTextureFromPostProcessOutput(\"bloomBlur\", blurred);\r\n effect.setFloat(\"bloomWeight\", this.weight);\r\n });\r\n\r\n if (!blockCompilation) {\r\n this.updateEffect();\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.BloomMergePostProcess\", BloomMergePostProcess);\r\n"]}
|
|
@@ -34,6 +34,7 @@ var DepthOfFieldBlurPostProcess = /** @class */ (function (_super) {
|
|
|
34
34
|
if (blockCompilation === void 0) { blockCompilation = false; }
|
|
35
35
|
var _this = _super.call(this, name, direction, kernel, options, camera, samplingMode = 2, engine, reusable, textureType = 0, "#define DOF 1\r\n", blockCompilation) || this;
|
|
36
36
|
_this.direction = direction;
|
|
37
|
+
_this.externalTextureSamplerBinding = !!imageToBlur;
|
|
37
38
|
_this.onApplyObservable.add(function (effect) {
|
|
38
39
|
if (imageToBlur != null) {
|
|
39
40
|
effect.setTextureFromPostProcess("textureSampler", imageToBlur);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthOfFieldBlurPostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/depthOfFieldBlurPostProcess.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;GAKG;AACH;IAAiD,+CAAe;IAe5D;;;;;;;;;;;;;;;OAeG;IACH,qCAAY,IAAY,EAAE,KAAY,EAAE,SAAkB,EAAE,MAAc,EAAE,OAAoC,EAAE,MAAwB,EAAE,iBAA8B,EAAE,WAAyC,EAAE,YAAoD,EAAE,MAAe,EAAE,QAAkB,EAAE,WAAuB,EAAE,gBAAwB;QAAvL,4BAAA,EAAA,kBAAyC;QAAE,6BAAA,EAAA,eAAuB,OAAO,CAAC,qBAAqB;QAAuC,4BAAA,EAAA,eAAuB;QAAE,iCAAA,EAAA,wBAAwB;QAAnW,YACI,kBAAM,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"depthOfFieldBlurPostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/depthOfFieldBlurPostProcess.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;GAKG;AACH;IAAiD,+CAAe;IAe5D;;;;;;;;;;;;;;;OAeG;IACH,qCAAY,IAAY,EAAE,KAAY,EAAE,SAAkB,EAAE,MAAc,EAAE,OAAoC,EAAE,MAAwB,EAAE,iBAA8B,EAAE,WAAyC,EAAE,YAAoD,EAAE,MAAe,EAAE,QAAkB,EAAE,WAAuB,EAAE,gBAAwB;QAAvL,4BAAA,EAAA,kBAAyC;QAAE,6BAAA,EAAA,eAAuB,OAAO,CAAC,qBAAqB;QAAuC,4BAAA,EAAA,eAAuB;QAAE,iCAAA,EAAA,wBAAwB;QAAnW,YACI,kBAAM,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,SAc9I;QAZG,KAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,KAAI,CAAC,6BAA6B,GAAG,CAAC,CAAC,WAAW,CAAC;QAEnD,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,MAAc;YACtC,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;aACnE;YACD,MAAM,CAAC,+BAA+B,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;YACtF,IAAI,KAAK,CAAC,YAAY,EAAE;gBACpB,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACvF;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAvCD;;;OAGG;IACI,kDAAY,GAAnB;QACI,OAAO,6BAA6B,CAAC;IACzC,CAAC;IARD;QADC,SAAS,EAAE;kEACc;IA0C9B,kCAAC;CAAA,AA/CD,CAAiD,eAAe,GA+C/D;SA/CY,2BAA2B;AAiDxC,aAAa,CAAC,qCAAqC,EAAE,2BAA2B,CAAC,CAAC","sourcesContent":["import { Nullable } from \"../types\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { BlurPostProcess } from \"./blurPostProcess\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { Scene } from \"../scene\";\r\n\r\nimport { RegisterClass } from '../Misc/typeStore';\r\nimport { serialize } from '../Misc/decorators';\r\n\r\n/**\r\n * The DepthOfFieldBlurPostProcess applied a blur in a give direction.\r\n * This blur differs from the standard BlurPostProcess as it attempts to avoid blurring pixels\r\n * based on samples that have a large difference in distance than the center pixel.\r\n * See section 2.6.2 http://fileadmin.cs.lth.se/cs/education/edan35/lectures/12dof.pdf\r\n */\r\nexport class DepthOfFieldBlurPostProcess extends BlurPostProcess {\r\n /**\r\n * The direction the blur should be applied\r\n */\r\n @serialize()\r\n public direction: Vector2;\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"DepthOfFieldBlurPostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"DepthOfFieldBlurPostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new instance CircleOfConfusionPostProcess\r\n * @param name The name of the effect.\r\n * @param scene The scene the effect belongs to.\r\n * @param direction The direction the blur should be applied.\r\n * @param kernel The size of the kernel used to blur.\r\n * @param options The required width/height ratio to downsize to before computing the render pass.\r\n * @param camera The camera to apply the render pass to.\r\n * @param circleOfConfusion The circle of confusion + depth map to be used to avoid blurring across edges\r\n * @param imageToBlur The image to apply the blur to (default: Current rendered frame)\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\r\n */\r\n constructor(name: string, scene: Scene, direction: Vector2, kernel: number, options: number | PostProcessOptions, camera: Nullable<Camera>, circleOfConfusion: PostProcess, imageToBlur: Nullable<PostProcess> = null, samplingMode: number = Texture.BILINEAR_SAMPLINGMODE, engine?: Engine, reusable?: boolean, textureType: number = 0, blockCompilation = false) {\r\n super(name, direction, kernel, options, camera, samplingMode = 2, engine, reusable, textureType = 0, `#define DOF 1\\r\\n`, blockCompilation);\r\n\r\n this.direction = direction;\r\n this.externalTextureSamplerBinding = !!imageToBlur;\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n if (imageToBlur != null) {\r\n effect.setTextureFromPostProcess(\"textureSampler\", imageToBlur);\r\n }\r\n effect.setTextureFromPostProcessOutput(\"circleOfConfusionSampler\", circleOfConfusion);\r\n if (scene.activeCamera) {\r\n effect.setFloat2('cameraMinMaxZ', scene.activeCamera.minZ, scene.activeCamera.maxZ);\r\n }\r\n });\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DepthOfFieldBlurPostProcess\", DepthOfFieldBlurPostProcess);"]}
|
|
@@ -34,6 +34,7 @@ var DepthOfFieldMergePostProcess = /** @class */ (function (_super) {
|
|
|
34
34
|
if (blockCompilation === void 0) { blockCompilation = false; }
|
|
35
35
|
var _this = _super.call(this, name, "depthOfFieldMerge", [], ["circleOfConfusionSampler", "blurStep0", "blurStep1", "blurStep2"], options, camera, samplingMode, engine, reusable, null, textureType, undefined, null, true) || this;
|
|
36
36
|
_this.blurSteps = blurSteps;
|
|
37
|
+
_this.externalTextureSamplerBinding = true;
|
|
37
38
|
_this.onApplyObservable.add(function (effect) {
|
|
38
39
|
effect.setTextureFromPostProcess("textureSampler", originalFromInput);
|
|
39
40
|
effect.setTextureFromPostProcessOutput("circleOfConfusionSampler", circleOfConfusion);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthOfFieldMergePostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/depthOfFieldMergePostProcess.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAIhE,OAAO,uCAAuC,CAAC;AAE/C;;GAEG;AACH;IAAA;IAmBA,CAAC;IAAD,0CAAC;AAAD,CAAC,AAnBD,IAmBC;;AAED;;GAEG;AACH;IAAkD,gDAAW;IASzD;;;;;;;;;;;;;OAaG;IACH,sCAAY,IAAY,EAAE,iBAA8B,EAAE,iBAA8B,EAAU,SAA6B,EAAE,OAAoC,EAAE,MAAwB,EAAE,YAAqB,EAAE,MAAe,EAAE,QAAkB,EAAE,WAAuB,EAAE,gBAAwB;QAAjD,4BAAA,EAAA,eAAuB;QAAE,iCAAA,EAAA,wBAAwB;QAA9S,YACI,kBAAM,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,0BAA0B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"depthOfFieldMergePostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/depthOfFieldMergePostProcess.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAIhE,OAAO,uCAAuC,CAAC;AAE/C;;GAEG;AACH;IAAA;IAmBA,CAAC;IAAD,0CAAC;AAAD,CAAC,AAnBD,IAmBC;;AAED;;GAEG;AACH;IAAkD,gDAAW;IASzD;;;;;;;;;;;;;OAaG;IACH,sCAAY,IAAY,EAAE,iBAA8B,EAAE,iBAA8B,EAAU,SAA6B,EAAE,OAAoC,EAAE,MAAwB,EAAE,YAAqB,EAAE,MAAe,EAAE,QAAkB,EAAE,WAAuB,EAAE,gBAAwB;QAAjD,4BAAA,EAAA,eAAuB;QAAE,iCAAA,EAAA,wBAAwB;QAA9S,YACI,kBAAM,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,0BAA0B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,SAavM;QAdiG,eAAS,GAAT,SAAS,CAAoB;QAE3H,KAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,MAAc;YACtC,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;YACtE,MAAM,CAAC,+BAA+B,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;YACtF,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,KAAK;gBAC1B,MAAM,CAAC,+BAA+B,CAAC,UAAU,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE;YACnB,KAAI,CAAC,YAAY,EAAE,CAAC;SACvB;;IACL,CAAC;IApCD;;;OAGG;IACI,mDAAY,GAAnB;QACI,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAgCD;;;;;;;;OAQG;IACI,mDAAY,GAAnB,UAAoB,OAAgC,EAAE,QAAmC,EAAE,QAAmC,EAAE,eAAqB,EACjJ,UAAqC,EAAE,OAAkD;QADzE,wBAAA,EAAA,cAAgC;QAAE,yBAAA,EAAA,eAAmC;QAAE,yBAAA,EAAA,eAAmC;QAE1H,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,qBAAqB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;SACzE;QACD,iBAAM,YAAY,YAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC;IACL,mCAAC;AAAD,CAAC,AAxDD,CAAkD,WAAW,GAwD5D","sourcesContent":["import { Nullable } from \"../types\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n\r\nimport \"../Shaders/depthOfFieldMerge.fragment\";\r\n\r\n/**\r\n * Options to be set when merging outputs from the default pipeline.\r\n */\r\nexport class DepthOfFieldMergePostProcessOptions {\r\n /**\r\n * The original image to merge on top of\r\n */\r\n public originalFromInput: PostProcess;\r\n /**\r\n * Parameters to perform the merge of the depth of field effect\r\n */\r\n public depthOfField?: {\r\n circleOfConfusion: PostProcess;\r\n blurSteps: Array<PostProcess>;\r\n };\r\n /**\r\n * Parameters to perform the merge of bloom effect\r\n */\r\n public bloom?: {\r\n blurred: PostProcess;\r\n weight: number;\r\n };\r\n}\r\n\r\n/**\r\n * The DepthOfFieldMergePostProcess merges blurred images with the original based on the values of the circle of confusion.\r\n */\r\nexport class DepthOfFieldMergePostProcess extends PostProcess {\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"DepthOfFieldMergePostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"DepthOfFieldMergePostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new instance of DepthOfFieldMergePostProcess\r\n * @param name The name of the effect.\r\n * @param originalFromInput Post process which's input will be used for the merge.\r\n * @param circleOfConfusion Circle of confusion post process which's output will be used to blur each pixel.\r\n * @param blurSteps Blur post processes from low to high which will be mixed with the original image.\r\n * @param options The required width/height ratio to downsize to before computing the render pass.\r\n * @param camera The camera to apply the render pass to.\r\n * @param samplingMode The sampling mode to be used when computing the pass. (default: 0)\r\n * @param engine The engine which the post process will be applied. (default: current engine)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n * @param textureType Type of textures used when performing the post process. (default: 0)\r\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\r\n */\r\n constructor(name: string, originalFromInput: PostProcess, circleOfConfusion: PostProcess, private blurSteps: Array<PostProcess>, options: number | PostProcessOptions, camera: Nullable<Camera>, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType: number = 0, blockCompilation = false) {\r\n super(name, \"depthOfFieldMerge\", [], [\"circleOfConfusionSampler\", \"blurStep0\", \"blurStep1\", \"blurStep2\"], options, camera, samplingMode, engine, reusable, null, textureType, undefined, null, true);\r\n this.externalTextureSamplerBinding = true;\r\n this.onApplyObservable.add((effect: Effect) => {\r\n effect.setTextureFromPostProcess(\"textureSampler\", originalFromInput);\r\n effect.setTextureFromPostProcessOutput(\"circleOfConfusionSampler\", circleOfConfusion);\r\n blurSteps.forEach((step, index) => {\r\n effect.setTextureFromPostProcessOutput(\"blurStep\" + (blurSteps.length - index - 1), step);\r\n });\r\n });\r\n\r\n if (!blockCompilation) {\r\n this.updateEffect();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the effect with the current post process compile time values and recompiles the shader.\r\n * @param defines Define statements that should be added at the beginning of the shader. (default: null)\r\n * @param uniforms Set of uniform variables that will be passed to the shader. (default: null)\r\n * @param samplers Set of Texture2D variables that will be passed to the shader. (default: null)\r\n * @param indexParameters The index parameters to be used for babylons include syntax \"#include<kernelBlurVaryingDeclaration>[0..varyingCount]\". (default: undefined) See usage in babylon.blurPostProcess.ts and kernelBlur.vertex.fx\r\n * @param onCompiled Called when the shader has been compiled.\r\n * @param onError Called if there is an error when compiling a shader.\r\n */\r\n public updateEffect(defines: Nullable<string> = null, uniforms: Nullable<string[]> = null, samplers: Nullable<string[]> = null, indexParameters?: any,\r\n onCompiled?: (effect: Effect) => void, onError?: (effect: Effect, errors: string) => void) {\r\n if (!defines) {\r\n defines = \"\";\r\n defines += \"#define BLUR_LEVEL \" + (this.blurSteps.length - 1) + \"\\n\";\r\n }\r\n super.updateEffect(defines, uniforms, samplers, indexParameters, onCompiled, onError);\r\n }\r\n}\r\n"]}
|
|
@@ -25,6 +25,7 @@ var ExtractHighlightsPostProcess = /** @class */ (function (_super) {
|
|
|
25
25
|
*/
|
|
26
26
|
_this._inputPostProcess = null;
|
|
27
27
|
_this.onApplyObservable.add(function (effect) {
|
|
28
|
+
_this.externalTextureSamplerBinding = !!_this._inputPostProcess;
|
|
28
29
|
if (_this._inputPostProcess) {
|
|
29
30
|
effect.setTextureFromPostProcess("textureSampler", _this._inputPostProcess);
|
|
30
31
|
}
|