@babylonjs/core 8.1.0 → 8.2.0
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/AudioV2/abstractAudio/abstractSound.js +1 -1
- package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
- package/Culling/Helper/boundingInfoHelper.js +9 -1
- package/Culling/Helper/boundingInfoHelper.js.map +1 -1
- package/Culling/ray.core.d.ts +1 -1
- package/Culling/ray.core.js +1 -1
- package/Culling/ray.core.js.map +1 -1
- package/Debug/debugLayer.js +8 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/physicsViewer.d.ts +4 -1
- package/Debug/physicsViewer.js +13 -5
- package/Debug/physicsViewer.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.d.ts +71 -0
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +246 -0
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.d.ts +17 -0
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js +23 -0
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +3 -2
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -4
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +6 -3
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +4 -2
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +2 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +13 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +17 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +4 -3
- package/Materials/Textures/renderTargetTexture.js +6 -5
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +3 -2
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/effectRenderer.d.ts +2 -1
- package/Materials/effectRenderer.js +3 -2
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/imageProcessingConfiguration.d.ts +8 -0
- package/Materials/imageProcessingConfiguration.js +16 -2
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +15 -6
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Misc/fileTools.d.ts +6 -0
- package/Misc/fileTools.js +30 -0
- package/Misc/fileTools.js.map +1 -1
- package/Physics/v2/characterController.d.ts +5 -0
- package/Physics/v2/characterController.js +7 -0
- package/Physics/v2/characterController.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +4 -21
- package/PostProcesses/imageProcessingPostProcess.js +27 -138
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/index.d.ts +1 -0
- package/PostProcesses/index.js +1 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/postProcess.js +2 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js +2 -2
- package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js +2 -2
- package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
- package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinBlurPostProcess.js +2 -2
- package/PostProcesses/thinBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +3 -3
- package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js +2 -2
- package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js +2 -2
- package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +258 -0
- package/PostProcesses/thinImageProcessingPostProcess.js +462 -0
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -0
- package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRPostProcess.js +2 -2
- package/PostProcesses/thinSSRPostProcess.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +1 -1
- package/PostProcesses/thinTAAPostProcess.js +2 -2
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +5 -5
- package/Rendering/objectRenderer.js +11 -11
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +10 -7
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +5 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +2 -2
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +16 -4
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +1 -1
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +10 -7
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +2 -2
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +24 -8
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.d.ts +1 -0
- package/ShadersWGSL/gaussianSplatting.vertex.js +4 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effectRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/effectRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NonNullableFields, Nullable } from \"../types\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { IShaderPath } from \"./effect\";\r\nimport { Effect } from \"./effect\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport type { IRenderTargetTexture, RenderTargetWrapper } from \"../Engines/renderTargetWrapper\";\r\nimport { ShaderLanguage } from \"./shaderLanguage\";\r\n\r\n// Prevents ES6 issue if not imported.\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\n/**\r\n * Effect Render Options\r\n */\r\nexport interface IEffectRendererOptions {\r\n /**\r\n * Defines the vertices positions.\r\n */\r\n positions?: number[];\r\n /**\r\n * Defines the indices.\r\n */\r\n indices?: number[];\r\n}\r\n\r\n// Fullscreen quad buffers by default.\r\nconst defaultOptions = {\r\n positions: [1, 1, -1, 1, -1, -1, 1, -1],\r\n indices: [0, 1, 2, 0, 2, 3],\r\n};\r\n\r\n/**\r\n * Helper class to render one or more effects.\r\n * You can access the previous rendering in your shader by declaring a sampler named textureSampler\r\n */\r\nexport class EffectRenderer {\r\n /**\r\n * The engine the effect renderer has been created for.\r\n */\r\n public readonly engine: AbstractEngine;\r\n\r\n private _vertexBuffers: { [key: string]: VertexBuffer };\r\n private _indexBuffer: DataBuffer;\r\n\r\n private _fullscreenViewport = new Viewport(0, 0, 1, 1);\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n private _savedStateDepthTest: boolean;\r\n private _savedStateStencilTest: boolean;\r\n\r\n /**\r\n * Creates an effect renderer\r\n * @param engine the engine to use for rendering\r\n * @param options defines the options of the effect renderer\r\n */\r\n constructor(engine: AbstractEngine, options: IEffectRendererOptions = defaultOptions) {\r\n const positions = options.positions ?? defaultOptions.positions;\r\n const indices = options.indices ?? defaultOptions.indices;\r\n\r\n this.engine = engine;\r\n this._vertexBuffers = {\r\n [VertexBuffer.PositionKind]: new VertexBuffer(engine, positions, VertexBuffer.PositionKind, false, false, 2),\r\n };\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n this._onContextRestoredObserver = engine.onContextRestoredObservable.add(() => {\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the current viewport in normalized coordinates 0-1\r\n * @param viewport Defines the viewport to set (defaults to 0 0 1 1)\r\n */\r\n public setViewport(viewport = this._fullscreenViewport): void {\r\n this.engine.setViewport(viewport);\r\n }\r\n\r\n /**\r\n * Binds the embedded attributes buffer to the effect.\r\n * @param effect Defines the effect to bind the attributes for\r\n */\r\n public bindBuffers(effect: Effect): void {\r\n this.engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n /**\r\n * Sets the current effect wrapper to use during draw.\r\n * The effect needs to be ready before calling this api.\r\n * This also sets the default full screen position attribute.\r\n * @param effectWrapper Defines the effect to draw with\r\n */\r\n public applyEffectWrapper(effectWrapper: EffectWrapper): void {\r\n this.engine.setState(true);\r\n this.engine.depthCullingState.depthTest = false;\r\n this.engine.stencilState.stencilTest = false;\r\n this.engine.enableEffect(effectWrapper.drawWrapper);\r\n this.bindBuffers(effectWrapper.effect);\r\n effectWrapper.onApplyObservable.notifyObservers({});\r\n }\r\n\r\n /**\r\n * Saves engine states\r\n */\r\n public saveStates(): void {\r\n this._savedStateDepthTest = this.engine.depthCullingState.depthTest;\r\n this._savedStateStencilTest = this.engine.stencilState.stencilTest;\r\n }\r\n\r\n /**\r\n * Restores engine states\r\n */\r\n public restoreStates(): void {\r\n this.engine.depthCullingState.depthTest = this._savedStateDepthTest;\r\n this.engine.stencilState.stencilTest = this._savedStateStencilTest;\r\n }\r\n\r\n /**\r\n * Draws a full screen quad.\r\n */\r\n public draw(): void {\r\n this.engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, 6);\r\n }\r\n\r\n private _isRenderTargetTexture(texture: RenderTargetWrapper | IRenderTargetTexture): texture is IRenderTargetTexture {\r\n return (texture as IRenderTargetTexture).renderTarget !== undefined;\r\n }\r\n\r\n /**\r\n * renders one or more effects to a specified texture\r\n * @param effectWrapper the effect to renderer\r\n * @param outputTexture texture to draw to, if null it will render to the currently bound frame buffer\r\n */\r\n public render(effectWrapper: EffectWrapper, outputTexture: Nullable<RenderTargetWrapper | IRenderTargetTexture> = null) {\r\n // Ensure effect is ready\r\n if (!effectWrapper.effect.isReady()) {\r\n return;\r\n }\r\n\r\n this.saveStates();\r\n\r\n // Reset state\r\n this.setViewport();\r\n\r\n const out = outputTexture === null ? null : this._isRenderTargetTexture(outputTexture) ? outputTexture.renderTarget! : outputTexture;\r\n\r\n if (out) {\r\n this.engine.bindFramebuffer(out);\r\n }\r\n\r\n this.applyEffectWrapper(effectWrapper);\r\n\r\n this.draw();\r\n\r\n if (out) {\r\n this.engine.unBindFramebuffer(out);\r\n }\r\n\r\n this.restoreStates();\r\n }\r\n\r\n /**\r\n * Disposes of the effect renderer\r\n */\r\n dispose() {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n delete this._vertexBuffers[VertexBuffer.PositionKind];\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this.engine._releaseBuffer(this._indexBuffer);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Allows for custom processing of the shader code used by an effect wrapper\r\n */\r\nexport type EffectWrapperCustomShaderCodeProcessing = {\r\n /**\r\n * If provided, will be called two times with the vertex and fragment code so that this code can be updated after the #include have been processed\r\n */\r\n processCodeAfterIncludes?: (postProcessName: string, shaderType: string, code: string) => string;\r\n /**\r\n * If provided, will be called two times with the vertex and fragment code so that this code can be updated before it is compiled by the GPU\r\n */\r\n processFinalCode?: (postProcessName: string, shaderType: string, code: string) => string;\r\n /**\r\n * If provided, will be called before creating the effect to collect additional custom bindings (defines, uniforms, samplers)\r\n */\r\n defineCustomBindings?: (postProcessName: string, defines: Nullable<string>, uniforms: string[], samplers: string[]) => Nullable<string>;\r\n /**\r\n * If provided, will be called when binding inputs to the shader code to allow the user to add custom bindings\r\n */\r\n bindCustomBindings?: (postProcessName: string, effect: Effect) => void;\r\n};\r\n\r\n/**\r\n * Options to create an EffectWrapper\r\n */\r\nexport interface EffectWrapperCreationOptions {\r\n /**\r\n * Engine to use to create the effect\r\n */\r\n engine?: AbstractEngine;\r\n /**\r\n * Fragment shader for the effect\r\n */\r\n fragmentShader?: string;\r\n /**\r\n * Use the shader store instead of direct source code\r\n */\r\n useShaderStore?: boolean;\r\n /**\r\n * Vertex shader for the effect (default: \"postprocess\")\r\n */\r\n vertexShader?: string;\r\n /**\r\n * Alias for vertexShader\r\n */\r\n vertexUrl?: string;\r\n /**\r\n * Attributes to use in the shader (default: [\"position\"])\r\n */\r\n attributeNames?: Array<string>;\r\n /**\r\n * Uniforms to use in the shader\r\n */\r\n uniformNames?: Array<string>;\r\n /**\r\n * Alias for uniformNames. Note that if it is provided, it takes precedence over uniformNames.\r\n */\r\n uniforms?: Nullable<string[]>;\r\n /**\r\n * Texture sampler names to use in the shader\r\n */\r\n samplerNames?: Array<string>;\r\n /**\r\n * Alias for samplerNames. Note that if it is provided, it takes precedence over samplerNames.\r\n */\r\n samplers?: Nullable<string[]>;\r\n /**\r\n * The list of uniform buffers used in the shader (if any)\r\n */\r\n uniformBuffers?: Nullable<string[]>;\r\n /**\r\n * Defines to use in the shader\r\n */\r\n defines?: Nullable<string | Array<string>>;\r\n /**\r\n * The index parameters to be used for babylons include syntax \"#include<kernelBlurVaryingDeclaration>[0..varyingCount]\". (default: undefined)\r\n * See usage in babylon.blurPostProcess.ts and kernelBlur.vertex.fx\r\n */\r\n indexParameters?: any;\r\n /**\r\n * If the shader should not be compiled immediately. (default: false)\r\n */\r\n blockCompilation?: boolean;\r\n /**\r\n * Callback when effect is compiled\r\n */\r\n onCompiled?: Nullable<(effect: Effect) => void>;\r\n /**\r\n * The friendly name of the effect (default: \"effectWrapper\")\r\n */\r\n name?: string;\r\n /**\r\n * The language the shader is written in (default: GLSL)\r\n */\r\n shaderLanguage?: ShaderLanguage;\r\n /**\r\n * Defines additional code to call to prepare the shader code\r\n */\r\n extraInitializations?: (useWebGPU: boolean, list: Promise<any>[]) => void;\r\n /**\r\n * Additional async code to run before preparing the effect\r\n */\r\n extraInitializationsAsync?: () => Promise<void>;\r\n /**\r\n * If the effect should be used as a post process (default: false). If true, the effect will be created with a \"scale\" uniform and a \"textureSampler\" sampler\r\n */\r\n useAsPostProcess?: boolean;\r\n}\r\n\r\n/**\r\n * Wraps an effect to be used for rendering\r\n */\r\nexport class EffectWrapper {\r\n /**\r\n * Force code to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n private static _CustomShaderCodeProcessing: { [effectWrapperName: string]: EffectWrapperCustomShaderCodeProcessing } = {};\r\n\r\n /**\r\n * Registers a shader code processing with an effect wrapper name.\r\n * @param effectWrapperName name of the effect wrapper. Use null for the fallback shader code processing. This is the shader code processing that will be used in case no specific shader code processing has been associated to an effect wrapper name\r\n * @param customShaderCodeProcessing shader code processing to associate to the effect wrapper name\r\n */\r\n public static RegisterShaderCodeProcessing(effectWrapperName: Nullable<string>, customShaderCodeProcessing?: EffectWrapperCustomShaderCodeProcessing) {\r\n if (!customShaderCodeProcessing) {\r\n delete EffectWrapper._CustomShaderCodeProcessing[effectWrapperName ?? \"\"];\r\n return;\r\n }\r\n\r\n EffectWrapper._CustomShaderCodeProcessing[effectWrapperName ?? \"\"] = customShaderCodeProcessing;\r\n }\r\n\r\n private static _GetShaderCodeProcessing(effectWrapperName: string) {\r\n return EffectWrapper._CustomShaderCodeProcessing[effectWrapperName] ?? EffectWrapper._CustomShaderCodeProcessing[\"\"];\r\n }\r\n\r\n /**\r\n * Gets or sets the name of the effect wrapper\r\n */\r\n public get name() {\r\n return this.options.name;\r\n }\r\n\r\n public set name(value: string) {\r\n this.options.name = value;\r\n }\r\n\r\n /**\r\n * Type of alpha mode to use when applying the effect (default: Engine.ALPHA_DISABLE). Used only if useAsPostProcess is true.\r\n */\r\n public alphaMode = Constants.ALPHA_DISABLE;\r\n\r\n /**\r\n * Executed when the effect is created\r\n * @returns effect that was created for this effect wrapper\r\n */\r\n public onEffectCreatedObservable = new Observable<Effect>(undefined, true);\r\n\r\n /**\r\n * Options used to create the effect wrapper\r\n */\r\n public readonly options: Required<NonNullableFields<EffectWrapperCreationOptions>>;\r\n\r\n /**\r\n * Get a value indicating if the effect is ready to be used\r\n * @returns true if the post-process is ready (shader is compiled)\r\n */\r\n public isReady() {\r\n return this._drawWrapper.effect?.isReady() ?? false;\r\n }\r\n\r\n /**\r\n * Get the draw wrapper associated with the effect wrapper\r\n * @returns the draw wrapper associated with the effect wrapper\r\n */\r\n public get drawWrapper() {\r\n return this._drawWrapper;\r\n }\r\n\r\n /**\r\n * Event that is fired (only when the EffectWrapper is used with an EffectRenderer) right before the effect is drawn (should be used to update uniforms)\r\n */\r\n public onApplyObservable = new Observable<{}>();\r\n\r\n /**\r\n * The underlying effect\r\n */\r\n public get effect(): Effect {\r\n return this._drawWrapper.effect!;\r\n }\r\n\r\n public set effect(effect: Effect) {\r\n this._drawWrapper.effect = effect;\r\n }\r\n\r\n protected readonly _drawWrapper: DrawWrapper;\r\n protected _shadersLoaded = false;\r\n protected readonly _shaderPath: IShaderPath;\r\n /** @internal */\r\n public _webGPUReady = false;\r\n\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * Creates an effect to be rendered\r\n * @param creationOptions options to create the effect\r\n */\r\n constructor(creationOptions: EffectWrapperCreationOptions) {\r\n this.options = {\r\n ...creationOptions,\r\n name: creationOptions.name || \"effectWrapper\",\r\n engine: creationOptions.engine!,\r\n uniforms: creationOptions.uniforms || creationOptions.uniformNames || [],\r\n uniformNames: undefined as any,\r\n samplers: creationOptions.samplers || creationOptions.samplerNames || [],\r\n samplerNames: undefined as any,\r\n attributeNames: creationOptions.attributeNames || [\"position\"],\r\n uniformBuffers: creationOptions.uniformBuffers || [],\r\n defines: creationOptions.defines || \"\",\r\n useShaderStore: creationOptions.useShaderStore || false,\r\n vertexUrl: creationOptions.vertexUrl || creationOptions.vertexShader || \"postprocess\",\r\n vertexShader: undefined as any,\r\n fragmentShader: creationOptions.fragmentShader || \"pass\",\r\n indexParameters: creationOptions.indexParameters,\r\n blockCompilation: creationOptions.blockCompilation || false,\r\n shaderLanguage: creationOptions.shaderLanguage || ShaderLanguage.GLSL,\r\n onCompiled: creationOptions.onCompiled || (undefined as any),\r\n extraInitializations: creationOptions.extraInitializations || (undefined as any),\r\n extraInitializationsAsync: creationOptions.extraInitializationsAsync || (undefined as any),\r\n useAsPostProcess: creationOptions.useAsPostProcess ?? false,\r\n };\r\n\r\n this.options.uniformNames = this.options.uniforms;\r\n this.options.samplerNames = this.options.samplers;\r\n this.options.vertexShader = this.options.vertexUrl;\r\n\r\n if (this.options.useAsPostProcess) {\r\n if (this.options.samplers.indexOf(\"textureSampler\") === -1) {\r\n this.options.samplers.push(\"textureSampler\");\r\n }\r\n if (this.options.uniforms.indexOf(\"scale\") === -1) {\r\n this.options.uniforms.push(\"scale\");\r\n }\r\n }\r\n\r\n if (creationOptions.vertexUrl || creationOptions.vertexShader) {\r\n this._shaderPath = {\r\n vertexSource: this.options.vertexShader,\r\n };\r\n } else {\r\n if (!this.options.useAsPostProcess) {\r\n this.options.uniforms.push(\"scale\");\r\n\r\n this.onApplyObservable.add(() => {\r\n this.effect.setFloat2(\"scale\", 1, 1);\r\n });\r\n }\r\n\r\n this._shaderPath = {\r\n vertex: this.options.vertexShader,\r\n };\r\n }\r\n\r\n this._shaderPath.fragmentSource = this.options.fragmentShader;\r\n this._shaderPath.spectorName = this.options.name;\r\n\r\n if (this.options.useShaderStore) {\r\n this._shaderPath.fragment = this._shaderPath.fragmentSource;\r\n if (!this._shaderPath.vertex) {\r\n this._shaderPath.vertex = this._shaderPath.vertexSource;\r\n }\r\n\r\n delete this._shaderPath.fragmentSource;\r\n delete this._shaderPath.vertexSource;\r\n }\r\n\r\n this.onApplyObservable.add(() => {\r\n this.bind();\r\n });\r\n\r\n if (!this.options.useShaderStore) {\r\n this._onContextRestoredObserver = this.options.engine.onContextRestoredObservable.add(() => {\r\n this.effect._pipelineContext = null; // because _prepareEffect will try to dispose this pipeline before recreating it and that would lead to webgl errors\r\n this.effect._prepareEffect();\r\n });\r\n }\r\n\r\n this._drawWrapper = new DrawWrapper(this.options.engine);\r\n this._webGPUReady = this.options.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n const defines = Array.isArray(this.options.defines) ? this.options.defines.join(\"\\n\") : this.options.defines;\r\n\r\n this._postConstructor(this.options.blockCompilation, defines, this.options.extraInitializations);\r\n }\r\n\r\n protected _gatherImports(useWebGPU = false, list: Promise<any>[]) {\r\n if (!this.options.useAsPostProcess) {\r\n return;\r\n }\r\n\r\n // this._webGPUReady is used to detect when an effect wrapper is intended to be used with WebGPU\r\n if (useWebGPU && this._webGPUReady) {\r\n list.push(Promise.all([import(\"../ShadersWGSL/postprocess.vertex\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/postprocess.vertex\")]));\r\n }\r\n }\r\n\r\n private _importPromises: Array<Promise<any>> = [];\r\n\r\n /** @internal */\r\n public _postConstructor(\r\n blockCompilation: boolean,\r\n defines: Nullable<string> = null,\r\n extraInitializations?: (useWebGPU: boolean, list: Promise<any>[]) => void,\r\n importPromises?: Array<Promise<any>>\r\n ) {\r\n this._importPromises.length = 0;\r\n\r\n if (importPromises) {\r\n this._importPromises.push(...importPromises);\r\n }\r\n\r\n const useWebGPU = this.options.engine.isWebGPU && !EffectWrapper.ForceGLSL;\r\n\r\n this._gatherImports(useWebGPU, this._importPromises);\r\n if (extraInitializations !== undefined) {\r\n extraInitializations(useWebGPU, this._importPromises);\r\n }\r\n\r\n if (useWebGPU && this._webGPUReady) {\r\n this.options.shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n\r\n if (!blockCompilation) {\r\n this.updateEffect(defines);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the effect with the current effect wrapper 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 * @param vertexUrl The url of the vertex shader to be used (default: the one given at construction time)\r\n * @param fragmentUrl The url of the fragment shader to be used (default: the one given at construction time)\r\n */\r\n public updateEffect(\r\n defines: Nullable<string> = null,\r\n uniforms: Nullable<string[]> = null,\r\n samplers: Nullable<string[]> = null,\r\n indexParameters?: any,\r\n onCompiled?: (effect: Effect) => void,\r\n onError?: (effect: Effect, errors: string) => void,\r\n vertexUrl?: string,\r\n fragmentUrl?: string\r\n ) {\r\n const customShaderCodeProcessing = EffectWrapper._GetShaderCodeProcessing(this.name);\r\n if (customShaderCodeProcessing?.defineCustomBindings) {\r\n const newUniforms = uniforms?.slice() ?? [];\r\n newUniforms.push(...this.options.uniforms);\r\n\r\n const newSamplers = samplers?.slice() ?? [];\r\n newSamplers.push(...this.options.samplers);\r\n\r\n defines = customShaderCodeProcessing.defineCustomBindings(this.name, defines, newUniforms, newSamplers);\r\n uniforms = newUniforms;\r\n samplers = newSamplers;\r\n }\r\n\r\n this.options.defines = defines || \"\";\r\n\r\n const waitImportsLoaded =\r\n this._shadersLoaded || this._importPromises.length === 0\r\n ? undefined\r\n : async () => {\r\n await Promise.all(this._importPromises);\r\n this._shadersLoaded = true;\r\n };\r\n\r\n let extraInitializationsAsync: (() => Promise<void>) | undefined;\r\n if (this.options.extraInitializationsAsync) {\r\n extraInitializationsAsync = async () => {\r\n waitImportsLoaded?.();\r\n await this.options.extraInitializationsAsync();\r\n };\r\n } else {\r\n extraInitializationsAsync = waitImportsLoaded;\r\n }\r\n\r\n if (this.options.useShaderStore) {\r\n this._drawWrapper.effect = this.options.engine.createEffect(\r\n { vertex: vertexUrl ?? this._shaderPath.vertex, fragment: fragmentUrl ?? this._shaderPath.fragment },\r\n {\r\n attributes: this.options.attributeNames,\r\n uniformsNames: uniforms || this.options.uniforms,\r\n uniformBuffersNames: this.options.uniformBuffers,\r\n samplers: samplers || this.options.samplers,\r\n defines: defines !== null ? defines : \"\",\r\n fallbacks: null,\r\n onCompiled: onCompiled ?? this.options.onCompiled,\r\n onError: onError ?? null,\r\n indexParameters: indexParameters || this.options.indexParameters,\r\n processCodeAfterIncludes: customShaderCodeProcessing?.processCodeAfterIncludes\r\n ? (shaderType: string, code: string) => customShaderCodeProcessing!.processCodeAfterIncludes!(this.name, shaderType, code)\r\n : null,\r\n processFinalCode: customShaderCodeProcessing?.processFinalCode\r\n ? (shaderType: string, code: string) => customShaderCodeProcessing!.processFinalCode!(this.name, shaderType, code)\r\n : null,\r\n shaderLanguage: this.options.shaderLanguage,\r\n extraInitializationsAsync,\r\n },\r\n this.options.engine\r\n );\r\n } else {\r\n this._drawWrapper.effect = new Effect(\r\n this._shaderPath,\r\n this.options.attributeNames,\r\n uniforms || this.options.uniforms,\r\n samplers || this.options.samplerNames,\r\n this.options.engine,\r\n defines,\r\n undefined,\r\n onCompiled || this.options.onCompiled,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this.options.shaderLanguage,\r\n extraInitializationsAsync\r\n );\r\n }\r\n\r\n this.onEffectCreatedObservable.notifyObservers(this._drawWrapper.effect);\r\n }\r\n\r\n /**\r\n * Binds the data to the effect.\r\n */\r\n public bind() {\r\n if (this.options.useAsPostProcess) {\r\n this.options.engine.setAlphaMode(this.alphaMode);\r\n this.drawWrapper.effect!.setFloat2(\"scale\", 1, 1);\r\n }\r\n\r\n EffectWrapper._GetShaderCodeProcessing(this.name)?.bindCustomBindings?.(this.name, this._drawWrapper.effect!);\r\n }\r\n\r\n /**\r\n * Disposes of the effect wrapper\r\n * @param _ignored kept for backward compatibility\r\n */\r\n public dispose(_ignored: boolean = false) {\r\n if (this._onContextRestoredObserver) {\r\n this.effect.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n this.onEffectCreatedObservable.clear();\r\n this._drawWrapper.dispose(true);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"effectRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/effectRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NonNullableFields, Nullable } from \"../types\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { IShaderPath } from \"./effect\";\r\nimport { Effect } from \"./effect\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport type { IRenderTargetTexture, RenderTargetWrapper } from \"../Engines/renderTargetWrapper\";\r\nimport { ShaderLanguage } from \"./shaderLanguage\";\r\n\r\n// Prevents ES6 issue if not imported.\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\n/**\r\n * Effect Render Options\r\n */\r\nexport interface IEffectRendererOptions {\r\n /**\r\n * Defines the vertices positions.\r\n */\r\n positions?: number[];\r\n /**\r\n * Defines the indices.\r\n */\r\n indices?: number[];\r\n}\r\n\r\n// Fullscreen quad buffers by default.\r\nconst defaultOptions = {\r\n positions: [1, 1, -1, 1, -1, -1, 1, -1],\r\n indices: [0, 1, 2, 0, 2, 3],\r\n};\r\n\r\n/**\r\n * Helper class to render one or more effects.\r\n * You can access the previous rendering in your shader by declaring a sampler named textureSampler\r\n */\r\nexport class EffectRenderer {\r\n /**\r\n * The engine the effect renderer has been created for.\r\n */\r\n public readonly engine: AbstractEngine;\r\n\r\n private _vertexBuffers: { [key: string]: VertexBuffer };\r\n private _indexBuffer: DataBuffer;\r\n\r\n private _fullscreenViewport = new Viewport(0, 0, 1, 1);\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n private _savedStateDepthTest: boolean;\r\n private _savedStateStencilTest: boolean;\r\n\r\n /**\r\n * Creates an effect renderer\r\n * @param engine the engine to use for rendering\r\n * @param options defines the options of the effect renderer\r\n */\r\n constructor(engine: AbstractEngine, options: IEffectRendererOptions = defaultOptions) {\r\n const positions = options.positions ?? defaultOptions.positions;\r\n const indices = options.indices ?? defaultOptions.indices;\r\n\r\n this.engine = engine;\r\n this._vertexBuffers = {\r\n [VertexBuffer.PositionKind]: new VertexBuffer(engine, positions, VertexBuffer.PositionKind, false, false, 2),\r\n };\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n this._onContextRestoredObserver = engine.onContextRestoredObservable.add(() => {\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the current viewport in normalized coordinates 0-1\r\n * @param viewport Defines the viewport to set (defaults to 0 0 1 1)\r\n */\r\n public setViewport(viewport = this._fullscreenViewport): void {\r\n this.engine.setViewport(viewport);\r\n }\r\n\r\n /**\r\n * Binds the embedded attributes buffer to the effect.\r\n * @param effect Defines the effect to bind the attributes for\r\n */\r\n public bindBuffers(effect: Effect): void {\r\n this.engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n /**\r\n * Sets the current effect wrapper to use during draw.\r\n * The effect needs to be ready before calling this api.\r\n * This also sets the default full screen position attribute.\r\n * @param effectWrapper Defines the effect to draw with\r\n */\r\n public applyEffectWrapper(effectWrapper: EffectWrapper): void {\r\n this.engine.setState(true);\r\n this.engine.depthCullingState.depthTest = false;\r\n this.engine.stencilState.stencilTest = false;\r\n this.engine.enableEffect(effectWrapper.drawWrapper);\r\n this.bindBuffers(effectWrapper.effect);\r\n effectWrapper.onApplyObservable.notifyObservers({});\r\n }\r\n\r\n /**\r\n * Saves engine states\r\n */\r\n public saveStates(): void {\r\n this._savedStateDepthTest = this.engine.depthCullingState.depthTest;\r\n this._savedStateStencilTest = this.engine.stencilState.stencilTest;\r\n }\r\n\r\n /**\r\n * Restores engine states\r\n */\r\n public restoreStates(): void {\r\n this.engine.depthCullingState.depthTest = this._savedStateDepthTest;\r\n this.engine.stencilState.stencilTest = this._savedStateStencilTest;\r\n }\r\n\r\n /**\r\n * Draws a full screen quad.\r\n */\r\n public draw(): void {\r\n this.engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, 6);\r\n }\r\n\r\n private _isRenderTargetTexture(texture: RenderTargetWrapper | IRenderTargetTexture): texture is IRenderTargetTexture {\r\n return (texture as IRenderTargetTexture).renderTarget !== undefined;\r\n }\r\n\r\n /**\r\n * renders one or more effects to a specified texture\r\n * @param effectWrapper the effect to renderer\r\n * @param outputTexture texture to draw to, if null it will render to the currently bound frame buffer\r\n */\r\n public render(effectWrapper: EffectWrapper, outputTexture: Nullable<RenderTargetWrapper | IRenderTargetTexture> = null) {\r\n // Ensure effect is ready\r\n if (!effectWrapper.effect.isReady()) {\r\n return;\r\n }\r\n\r\n this.saveStates();\r\n\r\n // Reset state\r\n this.setViewport();\r\n\r\n const out = outputTexture === null ? null : this._isRenderTargetTexture(outputTexture) ? outputTexture.renderTarget! : outputTexture;\r\n\r\n if (out) {\r\n this.engine.bindFramebuffer(out);\r\n }\r\n\r\n this.applyEffectWrapper(effectWrapper);\r\n\r\n this.draw();\r\n\r\n if (out) {\r\n this.engine.unBindFramebuffer(out);\r\n }\r\n\r\n this.restoreStates();\r\n }\r\n\r\n /**\r\n * Disposes of the effect renderer\r\n */\r\n dispose() {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n delete this._vertexBuffers[VertexBuffer.PositionKind];\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this.engine._releaseBuffer(this._indexBuffer);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Allows for custom processing of the shader code used by an effect wrapper\r\n */\r\nexport type EffectWrapperCustomShaderCodeProcessing = {\r\n /**\r\n * If provided, will be called two times with the vertex and fragment code so that this code can be updated after the #include have been processed\r\n */\r\n processCodeAfterIncludes?: (postProcessName: string, shaderType: string, code: string) => string;\r\n /**\r\n * If provided, will be called two times with the vertex and fragment code so that this code can be updated before it is compiled by the GPU\r\n */\r\n processFinalCode?: (postProcessName: string, shaderType: string, code: string) => string;\r\n /**\r\n * If provided, will be called before creating the effect to collect additional custom bindings (defines, uniforms, samplers)\r\n */\r\n defineCustomBindings?: (postProcessName: string, defines: Nullable<string>, uniforms: string[], samplers: string[]) => Nullable<string>;\r\n /**\r\n * If provided, will be called when binding inputs to the shader code to allow the user to add custom bindings\r\n */\r\n bindCustomBindings?: (postProcessName: string, effect: Effect) => void;\r\n};\r\n\r\n/**\r\n * Options to create an EffectWrapper\r\n */\r\nexport interface EffectWrapperCreationOptions {\r\n /**\r\n * Engine to use to create the effect\r\n */\r\n engine?: AbstractEngine;\r\n /**\r\n * Fragment shader for the effect\r\n */\r\n fragmentShader?: string;\r\n /**\r\n * Use the shader store instead of direct source code\r\n */\r\n useShaderStore?: boolean;\r\n /**\r\n * Vertex shader for the effect (default: \"postprocess\")\r\n */\r\n vertexShader?: string;\r\n /**\r\n * Alias for vertexShader\r\n */\r\n vertexUrl?: string;\r\n /**\r\n * Attributes to use in the shader (default: [\"position\"])\r\n */\r\n attributeNames?: Array<string>;\r\n /**\r\n * Uniforms to use in the shader\r\n */\r\n uniformNames?: Array<string>;\r\n /**\r\n * Alias for uniformNames. Note that if it is provided, it takes precedence over uniformNames.\r\n */\r\n uniforms?: Nullable<string[]>;\r\n /**\r\n * Texture sampler names to use in the shader\r\n */\r\n samplerNames?: Array<string>;\r\n /**\r\n * Alias for samplerNames. Note that if it is provided, it takes precedence over samplerNames.\r\n */\r\n samplers?: Nullable<string[]>;\r\n /**\r\n * The list of uniform buffers used in the shader (if any)\r\n */\r\n uniformBuffers?: Nullable<string[]>;\r\n /**\r\n * Defines to use in the shader\r\n */\r\n defines?: Nullable<string | Array<string>>;\r\n /**\r\n * The index parameters to be used for babylons include syntax \"#include<kernelBlurVaryingDeclaration>[0..varyingCount]\". (default: undefined)\r\n * See usage in babylon.blurPostProcess.ts and kernelBlur.vertex.fx\r\n */\r\n indexParameters?: any;\r\n /**\r\n * If the shader should not be compiled immediately. (default: false)\r\n */\r\n blockCompilation?: boolean;\r\n /**\r\n * Callback when effect is compiled\r\n */\r\n onCompiled?: Nullable<(effect: Effect) => void>;\r\n /**\r\n * The friendly name of the effect (default: \"effectWrapper\")\r\n */\r\n name?: string;\r\n /**\r\n * The language the shader is written in (default: GLSL)\r\n */\r\n shaderLanguage?: ShaderLanguage;\r\n /**\r\n * Defines additional code to call to prepare the shader code\r\n */\r\n extraInitializations?: (useWebGPU: boolean, list: Promise<any>[]) => void;\r\n /**\r\n * Additional async code to run before preparing the effect\r\n */\r\n extraInitializationsAsync?: () => Promise<void>;\r\n /**\r\n * If the effect should be used as a post process (default: false). If true, the effect will be created with a \"scale\" uniform and a \"textureSampler\" sampler\r\n */\r\n useAsPostProcess?: boolean;\r\n}\r\n\r\n/**\r\n * Wraps an effect to be used for rendering\r\n */\r\nexport class EffectWrapper {\r\n /**\r\n * Force code to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n private static _CustomShaderCodeProcessing: { [effectWrapperName: string]: EffectWrapperCustomShaderCodeProcessing } = {};\r\n\r\n /**\r\n * Registers a shader code processing with an effect wrapper name.\r\n * @param effectWrapperName name of the effect wrapper. Use null for the fallback shader code processing. This is the shader code processing that will be used in case no specific shader code processing has been associated to an effect wrapper name\r\n * @param customShaderCodeProcessing shader code processing to associate to the effect wrapper name\r\n */\r\n public static RegisterShaderCodeProcessing(effectWrapperName: Nullable<string>, customShaderCodeProcessing?: EffectWrapperCustomShaderCodeProcessing) {\r\n if (!customShaderCodeProcessing) {\r\n delete EffectWrapper._CustomShaderCodeProcessing[effectWrapperName ?? \"\"];\r\n return;\r\n }\r\n\r\n EffectWrapper._CustomShaderCodeProcessing[effectWrapperName ?? \"\"] = customShaderCodeProcessing;\r\n }\r\n\r\n private static _GetShaderCodeProcessing(effectWrapperName: string) {\r\n return EffectWrapper._CustomShaderCodeProcessing[effectWrapperName] ?? EffectWrapper._CustomShaderCodeProcessing[\"\"];\r\n }\r\n\r\n /**\r\n * Gets or sets the name of the effect wrapper\r\n */\r\n public get name() {\r\n return this.options.name;\r\n }\r\n\r\n public set name(value: string) {\r\n this.options.name = value;\r\n }\r\n\r\n /**\r\n * Type of alpha mode to use when applying the effect (default: Engine.ALPHA_DISABLE). Used only if useAsPostProcess is true.\r\n */\r\n public alphaMode = Constants.ALPHA_DISABLE;\r\n\r\n /**\r\n * Executed when the effect is created\r\n * @returns effect that was created for this effect wrapper\r\n */\r\n public onEffectCreatedObservable = new Observable<Effect>(undefined, true);\r\n\r\n /**\r\n * Options used to create the effect wrapper\r\n */\r\n public readonly options: Required<NonNullableFields<EffectWrapperCreationOptions>>;\r\n\r\n /**\r\n * Get a value indicating if the effect is ready to be used\r\n * @returns true if the post-process is ready (shader is compiled)\r\n */\r\n public isReady() {\r\n return this._drawWrapper.effect?.isReady() ?? false;\r\n }\r\n\r\n /**\r\n * Get the draw wrapper associated with the effect wrapper\r\n * @returns the draw wrapper associated with the effect wrapper\r\n */\r\n public get drawWrapper() {\r\n return this._drawWrapper;\r\n }\r\n\r\n /**\r\n * Event that is fired (only when the EffectWrapper is used with an EffectRenderer) right before the effect is drawn (should be used to update uniforms)\r\n */\r\n public onApplyObservable = new Observable<{}>();\r\n\r\n /**\r\n * The underlying effect\r\n */\r\n public get effect(): Effect {\r\n return this._drawWrapper.effect!;\r\n }\r\n\r\n public set effect(effect: Effect) {\r\n this._drawWrapper.effect = effect;\r\n }\r\n\r\n protected readonly _drawWrapper: DrawWrapper;\r\n protected _shadersLoaded = false;\r\n protected readonly _shaderPath: IShaderPath;\r\n /** @internal */\r\n public _webGPUReady = false;\r\n\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * Creates an effect to be rendered\r\n * @param creationOptions options to create the effect\r\n */\r\n constructor(creationOptions: EffectWrapperCreationOptions) {\r\n this.options = {\r\n ...creationOptions,\r\n name: creationOptions.name || \"effectWrapper\",\r\n engine: creationOptions.engine!,\r\n uniforms: creationOptions.uniforms || creationOptions.uniformNames || [],\r\n uniformNames: undefined as any,\r\n samplers: creationOptions.samplers || creationOptions.samplerNames || [],\r\n samplerNames: undefined as any,\r\n attributeNames: creationOptions.attributeNames || [\"position\"],\r\n uniformBuffers: creationOptions.uniformBuffers || [],\r\n defines: creationOptions.defines || \"\",\r\n useShaderStore: creationOptions.useShaderStore || false,\r\n vertexUrl: creationOptions.vertexUrl || creationOptions.vertexShader || \"postprocess\",\r\n vertexShader: undefined as any,\r\n fragmentShader: creationOptions.fragmentShader || \"pass\",\r\n indexParameters: creationOptions.indexParameters,\r\n blockCompilation: creationOptions.blockCompilation || false,\r\n shaderLanguage: creationOptions.shaderLanguage || ShaderLanguage.GLSL,\r\n onCompiled: creationOptions.onCompiled || (undefined as any),\r\n extraInitializations: creationOptions.extraInitializations || (undefined as any),\r\n extraInitializationsAsync: creationOptions.extraInitializationsAsync || (undefined as any),\r\n useAsPostProcess: creationOptions.useAsPostProcess ?? false,\r\n };\r\n\r\n this.options.uniformNames = this.options.uniforms;\r\n this.options.samplerNames = this.options.samplers;\r\n this.options.vertexShader = this.options.vertexUrl;\r\n\r\n if (this.options.useAsPostProcess) {\r\n if (this.options.samplers.indexOf(\"textureSampler\") === -1) {\r\n this.options.samplers.push(\"textureSampler\");\r\n }\r\n if (this.options.uniforms.indexOf(\"scale\") === -1) {\r\n this.options.uniforms.push(\"scale\");\r\n }\r\n }\r\n\r\n if (creationOptions.vertexUrl || creationOptions.vertexShader) {\r\n this._shaderPath = {\r\n vertexSource: this.options.vertexShader,\r\n };\r\n } else {\r\n if (!this.options.useAsPostProcess) {\r\n this.options.uniforms.push(\"scale\");\r\n\r\n this.onApplyObservable.add(() => {\r\n this.effect.setFloat2(\"scale\", 1, 1);\r\n });\r\n }\r\n\r\n this._shaderPath = {\r\n vertex: this.options.vertexShader,\r\n };\r\n }\r\n\r\n this._shaderPath.fragmentSource = this.options.fragmentShader;\r\n this._shaderPath.spectorName = this.options.name;\r\n\r\n if (this.options.useShaderStore) {\r\n this._shaderPath.fragment = this._shaderPath.fragmentSource;\r\n if (!this._shaderPath.vertex) {\r\n this._shaderPath.vertex = this._shaderPath.vertexSource;\r\n }\r\n\r\n delete this._shaderPath.fragmentSource;\r\n delete this._shaderPath.vertexSource;\r\n }\r\n\r\n this.onApplyObservable.add(() => {\r\n this.bind();\r\n });\r\n\r\n if (!this.options.useShaderStore) {\r\n this._onContextRestoredObserver = this.options.engine.onContextRestoredObservable.add(() => {\r\n this.effect._pipelineContext = null; // because _prepareEffect will try to dispose this pipeline before recreating it and that would lead to webgl errors\r\n this.effect._prepareEffect();\r\n });\r\n }\r\n\r\n this._drawWrapper = new DrawWrapper(this.options.engine);\r\n this._webGPUReady = this.options.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n const defines = Array.isArray(this.options.defines) ? this.options.defines.join(\"\\n\") : this.options.defines;\r\n\r\n this._postConstructor(this.options.blockCompilation, defines, this.options.extraInitializations);\r\n }\r\n\r\n protected _gatherImports(useWebGPU = false, list: Promise<any>[]) {\r\n if (!this.options.useAsPostProcess) {\r\n return;\r\n }\r\n\r\n // this._webGPUReady is used to detect when an effect wrapper is intended to be used with WebGPU\r\n if (useWebGPU && this._webGPUReady) {\r\n list.push(Promise.all([import(\"../ShadersWGSL/postprocess.vertex\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/postprocess.vertex\")]));\r\n }\r\n }\r\n\r\n private _importPromises: Array<Promise<any>> = [];\r\n\r\n /** @internal */\r\n public _postConstructor(\r\n blockCompilation: boolean,\r\n defines: Nullable<string> = null,\r\n extraInitializations?: (useWebGPU: boolean, list: Promise<any>[]) => void,\r\n importPromises?: Array<Promise<any>>\r\n ) {\r\n this._importPromises.length = 0;\r\n\r\n if (importPromises) {\r\n this._importPromises.push(...importPromises);\r\n }\r\n\r\n const useWebGPU = this.options.engine.isWebGPU && !EffectWrapper.ForceGLSL;\r\n\r\n this._gatherImports(useWebGPU, this._importPromises);\r\n if (extraInitializations !== undefined) {\r\n extraInitializations(useWebGPU, this._importPromises);\r\n }\r\n\r\n if (useWebGPU && this._webGPUReady) {\r\n this.options.shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n\r\n if (!blockCompilation) {\r\n this.updateEffect(defines);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the effect with the current effect wrapper 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 * @param vertexUrl The url of the vertex shader to be used (default: the one given at construction time)\r\n * @param fragmentUrl The url of the fragment shader to be used (default: the one given at construction time)\r\n */\r\n public updateEffect(\r\n defines: Nullable<string> = null,\r\n uniforms: Nullable<string[]> = null,\r\n samplers: Nullable<string[]> = null,\r\n indexParameters?: any,\r\n onCompiled?: (effect: Effect) => void,\r\n onError?: (effect: Effect, errors: string) => void,\r\n vertexUrl?: string,\r\n fragmentUrl?: string\r\n ) {\r\n const customShaderCodeProcessing = EffectWrapper._GetShaderCodeProcessing(this.name);\r\n if (customShaderCodeProcessing?.defineCustomBindings) {\r\n const newUniforms = uniforms?.slice() ?? [];\r\n newUniforms.push(...this.options.uniforms);\r\n\r\n const newSamplers = samplers?.slice() ?? [];\r\n newSamplers.push(...this.options.samplers);\r\n\r\n defines = customShaderCodeProcessing.defineCustomBindings(this.name, defines, newUniforms, newSamplers);\r\n uniforms = newUniforms;\r\n samplers = newSamplers;\r\n }\r\n\r\n this.options.defines = defines || \"\";\r\n\r\n const waitImportsLoaded =\r\n this._shadersLoaded || this._importPromises.length === 0\r\n ? undefined\r\n : async () => {\r\n await Promise.all(this._importPromises);\r\n this._shadersLoaded = true;\r\n };\r\n\r\n let extraInitializationsAsync: (() => Promise<void>) | undefined;\r\n if (this.options.extraInitializationsAsync) {\r\n extraInitializationsAsync = async () => {\r\n waitImportsLoaded?.();\r\n await this.options.extraInitializationsAsync();\r\n };\r\n } else {\r\n extraInitializationsAsync = waitImportsLoaded;\r\n }\r\n\r\n if (this.options.useShaderStore) {\r\n this._drawWrapper.effect = this.options.engine.createEffect(\r\n { vertex: vertexUrl ?? this._shaderPath.vertex, fragment: fragmentUrl ?? this._shaderPath.fragment },\r\n {\r\n attributes: this.options.attributeNames,\r\n uniformsNames: uniforms || this.options.uniforms,\r\n uniformBuffersNames: this.options.uniformBuffers,\r\n samplers: samplers || this.options.samplers,\r\n defines: defines !== null ? defines : \"\",\r\n fallbacks: null,\r\n onCompiled: onCompiled ?? this.options.onCompiled,\r\n onError: onError ?? null,\r\n indexParameters: indexParameters || this.options.indexParameters,\r\n processCodeAfterIncludes: customShaderCodeProcessing?.processCodeAfterIncludes\r\n ? (shaderType: string, code: string) => customShaderCodeProcessing!.processCodeAfterIncludes!(this.name, shaderType, code)\r\n : null,\r\n processFinalCode: customShaderCodeProcessing?.processFinalCode\r\n ? (shaderType: string, code: string) => customShaderCodeProcessing!.processFinalCode!(this.name, shaderType, code)\r\n : null,\r\n shaderLanguage: this.options.shaderLanguage,\r\n extraInitializationsAsync,\r\n },\r\n this.options.engine\r\n );\r\n } else {\r\n this._drawWrapper.effect = new Effect(\r\n this._shaderPath,\r\n this.options.attributeNames,\r\n uniforms || this.options.uniforms,\r\n samplers || this.options.samplerNames,\r\n this.options.engine,\r\n defines,\r\n undefined,\r\n onCompiled || this.options.onCompiled,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this.options.shaderLanguage,\r\n extraInitializationsAsync\r\n );\r\n }\r\n\r\n this.onEffectCreatedObservable.notifyObservers(this._drawWrapper.effect);\r\n }\r\n\r\n /**\r\n * Binds the data to the effect.\r\n * @param noDefaultBindings if true, the default bindings (scale and alpha mode) will not be set.\r\n */\r\n public bind(noDefaultBindings = false) {\r\n if (this.options.useAsPostProcess && !noDefaultBindings) {\r\n this.options.engine.setAlphaMode(this.alphaMode);\r\n this.drawWrapper.effect!.setFloat2(\"scale\", 1, 1);\r\n }\r\n\r\n EffectWrapper._GetShaderCodeProcessing(this.name)?.bindCustomBindings?.(this.name, this._drawWrapper.effect!);\r\n }\r\n\r\n /**\r\n * Disposes of the effect wrapper\r\n * @param _ignored kept for backward compatibility\r\n */\r\n public dispose(_ignored: boolean = false) {\r\n if (this._onContextRestoredObserver) {\r\n this.effect.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n this.onEffectCreatedObservable.clear();\r\n this._drawWrapper.dispose(true);\r\n }\r\n}\r\n"]}
|
|
@@ -217,6 +217,14 @@ export declare class ImageProcessingConfiguration {
|
|
|
217
217
|
* Sets whether the image processing is enabled or not.
|
|
218
218
|
*/
|
|
219
219
|
set isEnabled(value: boolean);
|
|
220
|
+
/**
|
|
221
|
+
* Width of the output texture used in the post process. If not provided, uses the width of the screen.
|
|
222
|
+
*/
|
|
223
|
+
outputTextureWidth: number;
|
|
224
|
+
/**
|
|
225
|
+
* Height of the output texture used in the post process. If not provided, uses the height of the screen.
|
|
226
|
+
*/
|
|
227
|
+
outputTextureHeight: number;
|
|
220
228
|
/**
|
|
221
229
|
* An event triggered when the configuration changes and requires Shader to Update some parameters.
|
|
222
230
|
*/
|
|
@@ -62,6 +62,14 @@ export class ImageProcessingConfiguration {
|
|
|
62
62
|
/** @internal */
|
|
63
63
|
this._applyByPostProcess = false;
|
|
64
64
|
this._isEnabled = true;
|
|
65
|
+
/**
|
|
66
|
+
* Width of the output texture used in the post process. If not provided, uses the width of the screen.
|
|
67
|
+
*/
|
|
68
|
+
this.outputTextureWidth = 0;
|
|
69
|
+
/**
|
|
70
|
+
* Height of the output texture used in the post process. If not provided, uses the height of the screen.
|
|
71
|
+
*/
|
|
72
|
+
this.outputTextureHeight = 0;
|
|
65
73
|
/**
|
|
66
74
|
* An event triggered when the configuration changes and requires Shader to Update some parameters.
|
|
67
75
|
*/
|
|
@@ -437,8 +445,8 @@ export class ImageProcessingConfiguration {
|
|
|
437
445
|
}
|
|
438
446
|
// Vignette and dither handled together due to common uniform.
|
|
439
447
|
if (this._vignetteEnabled || this._ditheringEnabled) {
|
|
440
|
-
const inverseWidth = 1 / effect.getEngine().getRenderWidth();
|
|
441
|
-
const inverseHeight = 1 / effect.getEngine().getRenderHeight();
|
|
448
|
+
const inverseWidth = 1 / (this.outputTextureWidth || effect.getEngine().getRenderWidth());
|
|
449
|
+
const inverseHeight = 1 / (this.outputTextureHeight || effect.getEngine().getRenderHeight());
|
|
442
450
|
effect.setFloat2("vInverseScreenSize", inverseWidth, inverseHeight);
|
|
443
451
|
if (this._ditheringEnabled) {
|
|
444
452
|
effect.setFloat("ditherIntensity", 0.5 * this._ditheringIntensity);
|
|
@@ -611,6 +619,12 @@ __decorate([
|
|
|
611
619
|
__decorate([
|
|
612
620
|
serialize()
|
|
613
621
|
], ImageProcessingConfiguration.prototype, "_isEnabled", void 0);
|
|
622
|
+
__decorate([
|
|
623
|
+
serialize()
|
|
624
|
+
], ImageProcessingConfiguration.prototype, "outputTextureWidth", void 0);
|
|
625
|
+
__decorate([
|
|
626
|
+
serialize()
|
|
627
|
+
], ImageProcessingConfiguration.prototype, "outputTextureHeight", void 0);
|
|
614
628
|
// References the dependencies.
|
|
615
629
|
SerializationHelper._ImageProcessingConfigurationParser = ImageProcessingConfiguration.Parse;
|
|
616
630
|
// Register Class Name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageProcessingConfiguration.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/imageProcessingConfiguration.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAC;AAChI,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,MAAM,OAAO,4BAA4B;IAAzC;QAkBI;;WAEG;QAEI,gBAAW,GAA0B,IAAI,WAAW,EAAE,CAAC;QAGtD,wBAAmB,GAAG,KAAK,CAAC;QAwC5B,yBAAoB,GAAG,KAAK,CAAC;QAoB7B,gCAA2B,GAAG,IAAI,CAAC;QAoBnC,qBAAgB,GAAG,IAAI,CAAC;QAmBhC,gBAAgB;QAET,cAAS,GAAG,GAAG,CAAC;QAoBf,wBAAmB,GAAG,KAAK,CAAC;QAoB5B,qBAAgB,GAAG,4BAA4B,CAAC,oBAAoB,CAAC;QAoBnE,cAAS,GAAG,GAAG,CAAC;QAmB1B;;WAEG;QAEI,oBAAe,GAAG,CAAC,CAAC;QAE3B;;WAEG;QAEI,oBAAe,GAAG,CAAC,CAAC;QAE3B;;WAEG;QAEI,oBAAe,GAAG,CAAC,CAAC;QAwB3B;;WAEG;QAEI,mBAAc,GAAG,GAAG,CAAC;QAE5B;;;WAGG;QAEI,kBAAa,GAAW,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtD;;WAEG;QAEI,sBAAiB,GAAG,GAAG,CAAC;QAGvB,uBAAkB,GAAG,4BAA4B,CAAC,qBAAqB,CAAC;QAoBxE,qBAAgB,GAAG,KAAK,CAAC;QAoBzB,sBAAiB,GAAG,KAAK,CAAC;QAsB1B,wBAAmB,GAAG,GAAG,GAAG,KAAK,CAAC;QAmB1C,gBAAgB;QAET,yBAAoB,GAAG,KAAK,CAAC;QAqBpC,gBAAgB;QAET,wBAAmB,GAAG,KAAK,CAAC;QAoB3B,eAAU,GAAG,IAAI,CAAC;QAmB1B;;WAEG;QACI,uBAAkB,GAAG,IAAI,UAAU,EAAgC,CAAC;IAiN/E,CAAC;IAplBG;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IACD;;OAEG;IACH,IAAW,kBAAkB,CAAC,KAAc;QACxC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IACD;;OAEG;IACH,IAAW,mBAAmB,CAAC,KAA4B;QACvD,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IACD;;OAEG;IACH,IAAW,mBAAmB,CAAC,KAAc;QACzC,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,0BAA0B;QACjC,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC5C,CAAC;IACD;;OAEG;IACH,IAAW,0BAA0B,CAAC,KAAc;QAChD,IAAI,IAAI,CAAC,2BAA2B,KAAK,KAAK,EAAE,CAAC;YAC7C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACD;;OAEG;IACH,IAAW,eAAe,CAAC,KAAc;QACrC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAKD;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD;;OAEG;IACH,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IACD;;OAEG;IACH,IAAW,kBAAkB,CAAC,KAAc;QACxC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACD;;OAEG;IACH,IAAW,eAAe,CAAC,KAAa;QACpC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD;;OAEG;IACH,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAoBD;;;OAGG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,IAAW,eAAe,CAAC,KAAa;QACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,IAAW,eAAe,CAAC,KAAa;QACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IAuBD;;OAEG;IACH,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IACD;;OAEG;IACH,IAAW,iBAAiB,CAAC,KAAa;QACtC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACD;;OAEG;IACH,IAAW,eAAe,CAAC,KAAc;QACrC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;;OAGG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACD;;;OAGG;IACH,IAAW,gBAAgB,CAAC,KAAc;QACtC,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IACD;;OAEG;IACH,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAKD;;;OAGG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IACD;;;OAGG;IACH,IAAW,mBAAmB,CAAC,KAAc;QACzC,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAKD;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IACD;;OAEG;IACH,IAAW,kBAAkB,CAAC,KAAc;QACxC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAID;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD;;OAEG;IACH,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAOD;;OAEG;IACO,iBAAiB;QACvB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAgBD;;;;OAIG;IACI,cAAc,CAAC,OAA6C,EAAE,cAAc,GAAG,KAAK;QACvF,IAAI,cAAc,KAAK,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAC5B,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;YAC7B,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;YAC/B,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;YAChC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACvD,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,UAAU,CAAC;YAChF,OAAO;QACX,CAAC;QAED,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;QACxC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,iBAAiB,KAAK,4BAA4B,CAAC,sBAAsB,CAAC;QACnH,OAAO,CAAC,uBAAuB,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,KAAK,4BAA4B,CAAC,2BAA2B;oBACzD,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;oBACxB,MAAM;gBACV,KAAK,4BAA4B,CAAC,gBAAgB;oBAC9C,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;oBACxB,MAAM;gBACV;oBACI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;oBACxB,MAAM;YACd,CAAC;QACL,CAAC;QAED,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;QACzC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;QACzC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACpE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC9E,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAoB,CAAC,IAAI,CAAC;QAC5D,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,CAAC;QAC9D,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC/C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC7D,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACvD,OAAO,CAAC,eAAe;YACnB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAC3J,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,kDAAkD;QAClD,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;IACxG,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,MAAc,EAAE,mBAA4B;QACpD,eAAe;QACf,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,8DAA8D;QAC9D,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,CAAC;YAC7D,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC;YAC/D,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;YAEpE,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,GAAG,YAAY,CAAC;gBAErG,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC;gBAC5D,IAAI,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC;gBAElD,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC;gBAC9E,cAAc,GAAG,GAAG,CAAC,cAAc,EAAE,0BAA0B,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBACvF,cAAc,GAAG,GAAG,CAAC,cAAc,EAAE,0BAA0B,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAEvF,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;gBAEtJ,MAAM,aAAa,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;gBACjD,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAC3H,CAAC;QACL,CAAC;QAED,WAAW;QACX,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjD,WAAW;QACX,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;YAE9D,MAAM,CAAC,SAAS,CACZ,wBAAwB,EACxB,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,eAAe;YAChD,GAAG,GAAG,WAAW,EAAE,gBAAgB;YACnC,WAAW,EAAE,cAAc;YAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS;aAC3C,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,KAAK;QACR,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,4BAA4B,EAAE,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,OAAO,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,MAAW;QAC3B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,4BAA4B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvG,yBAAyB;QACzB,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QACpD,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAMD;;OAEG;IACI,MAAM,KAAK,qBAAqB;QACnC,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,mBAAmB;QACjC,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;;AA5mBD;;GAEG;AACoB,iDAAoB,GAAG,CAAC,AAAJ,CAAK;AAEhD;;;GAGG;AACoB,6CAAgB,GAAG,CAAC,AAAJ,CAAK;AAE5C;;;GAGG;AACoB,wDAA2B,GAAG,CAAC,AAAJ,CAAK;AA8ZvD;;;;GAIG;AACW,4CAAe,GAAgF,iCAAiC,AAAjH,CAAkH;AAE/I;;;;GAIG;AACW,4CAAe,GAAoF,iCAAiC,AAArH,CAAsH;AAmKnJ,uDAAuD;AACxC,mDAAsB,GAAG,CAAC,AAAJ,CAAK;AAC3B,iDAAoB,GAAG,CAAC,AAAJ,CAAK;AAzkBjC;IADN,sBAAsB,EAAE;iEACqC;AAGtD;IADP,SAAS,EAAE;yEACwB;AAoB5B;IADP,kBAAkB,CAAC,qBAAqB,CAAC;0EACU;AAoB5C;IADP,SAAS,EAAE;0EACyB;AAoB7B;IADP,SAAS,EAAE;iFAC+B;AAoBnC;IADP,SAAS,EAAE;sEACoB;AAqBzB;IADN,SAAS,EAAE;+DACW;AAoBf;IADP,SAAS,EAAE;yEACwB;AAoB5B;IADP,SAAS,EAAE;sEACiE;AAoBnE;IADT,SAAS,EAAE;+DACc;AAuBnB;IADN,SAAS,EAAE;qEACe;AAMpB;IADN,SAAS,EAAE;qEACe;AAMpB;IADN,SAAS,EAAE;qEACe;AA4BpB;IADN,SAAS,EAAE;oEACgB;AAOrB;IADN,iBAAiB,EAAE;mEACkC;AAM/C;IADN,SAAS,EAAE;uEACmB;AAGvB;IADP,SAAS,EAAE;wEACoE;AAoBxE;IADP,SAAS,EAAE;sEACqB;AAoBzB;IADP,SAAS,EAAE;uEACsB;AAsB1B;IADP,SAAS,EAAE;yEAC8B;AAqBnC;IADN,SAAS,EAAE;0EACwB;AAuB7B;IADN,SAAS,EAAE;yEACuB;AAoB3B;IADP,SAAS,EAAE;gEACc;AAyO9B,+BAA+B;AAC/B,mBAAmB,CAAC,mCAAmC,GAAG,4BAA4B,CAAC,KAAK,CAAC;AAE7F,sBAAsB;AACtB,aAAa,CAAC,sCAAsC,EAAE,4BAA4B,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from \"../Misc/decorators\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { ColorCurves } from \"../Materials/colorCurves\";\r\n\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Mix } from \"../Misc/tools.functions\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport type { IImageProcessingConfigurationDefines } from \"./imageProcessingConfiguration.defines\";\r\nimport { PrepareSamplersForImageProcessing, PrepareUniformsForImageProcessing } from \"./imageProcessingConfiguration.functions\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * This groups together the common properties used for image processing either in direct forward pass\r\n * or through post processing effect depending on the use of the image processing pipeline in your scene\r\n * or not.\r\n */\r\nexport class ImageProcessingConfiguration {\r\n /**\r\n * Default tone mapping applied in BabylonJS.\r\n */\r\n public static readonly TONEMAPPING_STANDARD = 0;\r\n\r\n /**\r\n * ACES Tone mapping (used by default in unreal and unity). This can help getting closer\r\n * to other engines rendering to increase portability.\r\n */\r\n public static readonly TONEMAPPING_ACES = 1;\r\n\r\n /**\r\n * Neutral Tone mapping developped by the Khronos group in order to constrain\r\n * values between 0 and 1 without shifting Hue.\r\n */\r\n public static readonly TONEMAPPING_KHR_PBR_NEUTRAL = 2;\r\n\r\n /**\r\n * Color curves setup used in the effect if colorCurvesEnabled is set to true\r\n */\r\n @serializeAsColorCurves()\r\n public colorCurves: Nullable<ColorCurves> = new ColorCurves();\r\n\r\n @serialize()\r\n private _colorCurvesEnabled = false;\r\n /**\r\n * Gets whether the color curves effect is enabled.\r\n */\r\n public get colorCurvesEnabled(): boolean {\r\n return this._colorCurvesEnabled;\r\n }\r\n /**\r\n * Sets whether the color curves effect is enabled.\r\n */\r\n public set colorCurvesEnabled(value: boolean) {\r\n if (this._colorCurvesEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorCurvesEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serializeAsTexture(\"colorGradingTexture\")\r\n private _colorGradingTexture: Nullable<BaseTexture>;\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public get colorGradingTexture(): Nullable<BaseTexture> {\r\n return this._colorGradingTexture;\r\n }\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public set colorGradingTexture(value: Nullable<BaseTexture>) {\r\n if (this._colorGradingTexture === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingTexture = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingEnabled = false;\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public get colorGradingEnabled(): boolean {\r\n return this._colorGradingEnabled;\r\n }\r\n /**\r\n * Sets whether the color grading effect is enabled.\r\n */\r\n public set colorGradingEnabled(value: boolean) {\r\n if (this._colorGradingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingWithGreenDepth = true;\r\n /**\r\n * Gets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public get colorGradingWithGreenDepth(): boolean {\r\n return this._colorGradingWithGreenDepth;\r\n }\r\n /**\r\n * Sets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public set colorGradingWithGreenDepth(value: boolean) {\r\n if (this._colorGradingWithGreenDepth === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingWithGreenDepth = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingBGR = true;\r\n /**\r\n * Gets whether the color grading texture contains BGR values.\r\n */\r\n public get colorGradingBGR(): boolean {\r\n return this._colorGradingBGR;\r\n }\r\n /**\r\n * Sets whether the color grading texture contains BGR values.\r\n */\r\n public set colorGradingBGR(value: boolean) {\r\n if (this._colorGradingBGR === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingBGR = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _exposure = 1.0;\r\n /**\r\n * Gets the Exposure used in the effect.\r\n */\r\n public get exposure(): number {\r\n return this._exposure;\r\n }\r\n /**\r\n * Sets the Exposure used in the effect.\r\n */\r\n public set exposure(value: number) {\r\n if (this._exposure === value) {\r\n return;\r\n }\r\n\r\n this._exposure = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingEnabled = false;\r\n /**\r\n * Gets whether the tone mapping effect is enabled.\r\n */\r\n public get toneMappingEnabled(): boolean {\r\n return this._toneMappingEnabled;\r\n }\r\n /**\r\n * Sets whether the tone mapping effect is enabled.\r\n */\r\n public set toneMappingEnabled(value: boolean) {\r\n if (this._toneMappingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingType = ImageProcessingConfiguration.TONEMAPPING_STANDARD;\r\n /**\r\n * Gets the type of tone mapping effect.\r\n */\r\n public get toneMappingType(): number {\r\n return this._toneMappingType;\r\n }\r\n /**\r\n * Sets the type of tone mapping effect used in BabylonJS.\r\n */\r\n public set toneMappingType(value: number) {\r\n if (this._toneMappingType === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingType = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n protected _contrast = 1.0;\r\n /**\r\n * Gets the contrast used in the effect.\r\n */\r\n public get contrast(): number {\r\n return this._contrast;\r\n }\r\n /**\r\n * Sets the contrast used in the effect.\r\n */\r\n public set contrast(value: number) {\r\n if (this._contrast === value) {\r\n return;\r\n }\r\n\r\n this._contrast = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Vignette stretch size.\r\n */\r\n @serialize()\r\n public vignetteStretch = 0;\r\n\r\n /**\r\n * Vignette center X Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterX = 0;\r\n\r\n /**\r\n * Vignette center Y Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterY = 0;\r\n\r\n /**\r\n * Back Compat: Vignette center Y Offset.\r\n * @deprecated use vignetteCenterY instead\r\n */\r\n public get vignetteCentreY(): number {\r\n return this.vignetteCenterY;\r\n }\r\n public set vignetteCentreY(value: number) {\r\n this.vignetteCenterY = value;\r\n }\r\n\r\n /**\r\n * Back Compat: Vignette center X Offset.\r\n * @deprecated use vignetteCenterX instead\r\n */\r\n public get vignetteCentreX(): number {\r\n return this.vignetteCenterX;\r\n }\r\n public set vignetteCentreX(value: number) {\r\n this.vignetteCenterX = value;\r\n }\r\n\r\n /**\r\n * Vignette weight or intensity of the vignette effect.\r\n */\r\n @serialize()\r\n public vignetteWeight = 1.5;\r\n\r\n /**\r\n * Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n @serializeAsColor4()\r\n public vignetteColor: Color4 = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Camera field of view used by the Vignette effect.\r\n */\r\n @serialize()\r\n public vignetteCameraFov = 0.5;\r\n\r\n @serialize()\r\n private _vignetteBlendMode = ImageProcessingConfiguration.VIGNETTEMODE_MULTIPLY;\r\n /**\r\n * Gets the vignette blend mode allowing different kind of effect.\r\n */\r\n public get vignetteBlendMode(): number {\r\n return this._vignetteBlendMode;\r\n }\r\n /**\r\n * Sets the vignette blend mode allowing different kind of effect.\r\n */\r\n public set vignetteBlendMode(value: number) {\r\n if (this._vignetteBlendMode === value) {\r\n return;\r\n }\r\n\r\n this._vignetteBlendMode = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _vignetteEnabled = false;\r\n /**\r\n * Gets whether the vignette effect is enabled.\r\n */\r\n public get vignetteEnabled(): boolean {\r\n return this._vignetteEnabled;\r\n }\r\n /**\r\n * Sets whether the vignette effect is enabled.\r\n */\r\n public set vignetteEnabled(value: boolean) {\r\n if (this._vignetteEnabled === value) {\r\n return;\r\n }\r\n\r\n this._vignetteEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringEnabled = false;\r\n /**\r\n * Gets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public get ditheringEnabled(): boolean {\r\n return this._ditheringEnabled;\r\n }\r\n /**\r\n * Sets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public set ditheringEnabled(value: boolean) {\r\n if (this._ditheringEnabled === value) {\r\n return;\r\n }\r\n\r\n this._ditheringEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringIntensity = 1.0 / 255.0;\r\n /**\r\n * Gets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public get ditheringIntensity(): number {\r\n return this._ditheringIntensity;\r\n }\r\n /**\r\n * Sets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public set ditheringIntensity(value: number) {\r\n if (this._ditheringIntensity === value) {\r\n return;\r\n }\r\n\r\n this._ditheringIntensity = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _skipFinalColorClamp = false;\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public get skipFinalColorClamp(): boolean {\r\n return this._skipFinalColorClamp;\r\n }\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public set skipFinalColorClamp(value: boolean) {\r\n if (this._skipFinalColorClamp === value) {\r\n return;\r\n }\r\n\r\n this._skipFinalColorClamp = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _applyByPostProcess = false;\r\n /**\r\n * Gets whether the image processing is applied through a post process or not.\r\n */\r\n public get applyByPostProcess(): boolean {\r\n return this._applyByPostProcess;\r\n }\r\n /**\r\n * Sets whether the image processing is applied through a post process or not.\r\n */\r\n public set applyByPostProcess(value: boolean) {\r\n if (this._applyByPostProcess === value) {\r\n return;\r\n }\r\n\r\n this._applyByPostProcess = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _isEnabled = true;\r\n /**\r\n * Gets whether the image processing is enabled or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the image processing is enabled or not.\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * An event triggered when the configuration changes and requires Shader to Update some parameters.\r\n */\r\n public onUpdateParameters = new Observable<ImageProcessingConfiguration>();\r\n\r\n /**\r\n * Method called each time the image processing information changes requires to recompile the effect.\r\n */\r\n protected _updateParameters(): void {\r\n this.onUpdateParameters.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns \"ImageProcessingConfiguration\"\r\n */\r\n public getClassName(): string {\r\n return \"ImageProcessingConfiguration\";\r\n }\r\n\r\n /**\r\n * Prepare the list of uniforms associated with the Image Processing effects.\r\n * @param uniforms The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareUniforms: (uniforms: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareUniformsForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of samplers associated with the Image Processing effects.\r\n * @param samplersList The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareSamplers: (samplersList: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareSamplersForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of defines associated to the shader.\r\n * @param defines the list of defines to complete\r\n * @param forPostProcess Define if we are currently in post process mode or not\r\n */\r\n public prepareDefines(defines: IImageProcessingConfigurationDefines, forPostProcess = false): void {\r\n if (forPostProcess !== this.applyByPostProcess || !this._isEnabled) {\r\n defines.VIGNETTE = false;\r\n defines.TONEMAPPING = 0;\r\n defines.CONTRAST = false;\r\n defines.EXPOSURE = false;\r\n defines.COLORCURVES = false;\r\n defines.COLORGRADING = false;\r\n defines.COLORGRADING3D = false;\r\n defines.DITHER = false;\r\n defines.IMAGEPROCESSING = false;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess && this._isEnabled;\r\n return;\r\n }\r\n\r\n defines.VIGNETTE = this.vignetteEnabled;\r\n defines.VIGNETTEBLENDMODEMULTIPLY = this.vignetteBlendMode === ImageProcessingConfiguration._VIGNETTEMODE_MULTIPLY;\r\n defines.VIGNETTEBLENDMODEOPAQUE = !defines.VIGNETTEBLENDMODEMULTIPLY;\r\n\r\n if (!this._toneMappingEnabled) {\r\n defines.TONEMAPPING = 0;\r\n } else {\r\n switch (this._toneMappingType) {\r\n case ImageProcessingConfiguration.TONEMAPPING_KHR_PBR_NEUTRAL:\r\n defines.TONEMAPPING = 3;\r\n break;\r\n case ImageProcessingConfiguration.TONEMAPPING_ACES:\r\n defines.TONEMAPPING = 2;\r\n break;\r\n default:\r\n defines.TONEMAPPING = 1;\r\n break;\r\n }\r\n }\r\n\r\n defines.CONTRAST = this.contrast !== 1.0;\r\n defines.EXPOSURE = this.exposure !== 1.0;\r\n defines.COLORCURVES = this.colorCurvesEnabled && !!this.colorCurves;\r\n defines.COLORGRADING = this.colorGradingEnabled && !!this.colorGradingTexture;\r\n if (defines.COLORGRADING) {\r\n defines.COLORGRADING3D = this.colorGradingTexture!.is3D;\r\n } else {\r\n defines.COLORGRADING3D = false;\r\n }\r\n defines.SAMPLER3DGREENDEPTH = this.colorGradingWithGreenDepth;\r\n defines.SAMPLER3DBGRMAP = this.colorGradingBGR;\r\n defines.DITHER = this._ditheringEnabled;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSING =\r\n defines.VIGNETTE || !!defines.TONEMAPPING || defines.CONTRAST || defines.EXPOSURE || defines.COLORCURVES || defines.COLORGRADING || defines.DITHER;\r\n }\r\n\r\n /**\r\n * Returns true if all the image processing information are ready.\r\n * @returns True if ready, otherwise, false\r\n */\r\n public isReady() {\r\n // Color Grading texture can not be none blocking.\r\n return !this.colorGradingEnabled || !this.colorGradingTexture || this.colorGradingTexture.isReady();\r\n }\r\n\r\n /**\r\n * Binds the image processing to the shader.\r\n * @param effect The effect to bind to\r\n * @param overrideAspectRatio Override the aspect ratio of the effect\r\n */\r\n public bind(effect: Effect, overrideAspectRatio?: number): void {\r\n // Color Curves\r\n if (this._colorCurvesEnabled && this.colorCurves) {\r\n ColorCurves.Bind(this.colorCurves, effect);\r\n }\r\n\r\n // Vignette and dither handled together due to common uniform.\r\n if (this._vignetteEnabled || this._ditheringEnabled) {\r\n const inverseWidth = 1 / effect.getEngine().getRenderWidth();\r\n const inverseHeight = 1 / effect.getEngine().getRenderHeight();\r\n effect.setFloat2(\"vInverseScreenSize\", inverseWidth, inverseHeight);\r\n\r\n if (this._ditheringEnabled) {\r\n effect.setFloat(\"ditherIntensity\", 0.5 * this._ditheringIntensity);\r\n }\r\n\r\n if (this._vignetteEnabled) {\r\n const aspectRatio = overrideAspectRatio != null ? overrideAspectRatio : inverseHeight / inverseWidth;\r\n\r\n let vignetteScaleY = Math.tan(this.vignetteCameraFov * 0.5);\r\n let vignetteScaleX = vignetteScaleY * aspectRatio;\r\n\r\n const vignetteScaleGeometricMean = Math.sqrt(vignetteScaleX * vignetteScaleY);\r\n vignetteScaleX = Mix(vignetteScaleX, vignetteScaleGeometricMean, this.vignetteStretch);\r\n vignetteScaleY = Mix(vignetteScaleY, vignetteScaleGeometricMean, this.vignetteStretch);\r\n\r\n effect.setFloat4(\"vignetteSettings1\", vignetteScaleX, vignetteScaleY, -vignetteScaleX * this.vignetteCenterX, -vignetteScaleY * this.vignetteCenterY);\r\n\r\n const vignettePower = -2.0 * this.vignetteWeight;\r\n effect.setFloat4(\"vignetteSettings2\", this.vignetteColor.r, this.vignetteColor.g, this.vignetteColor.b, vignettePower);\r\n }\r\n }\r\n\r\n // Exposure\r\n effect.setFloat(\"exposureLinear\", this.exposure);\r\n\r\n // Contrast\r\n effect.setFloat(\"contrast\", this.contrast);\r\n\r\n // Color transform settings\r\n if (this.colorGradingTexture) {\r\n effect.setTexture(\"txColorTransform\", this.colorGradingTexture);\r\n const textureSize = this.colorGradingTexture.getSize().height;\r\n\r\n effect.setFloat4(\r\n \"colorTransformSettings\",\r\n (textureSize - 1) / textureSize, // textureScale\r\n 0.5 / textureSize, // textureOffset\r\n textureSize, // textureSize\r\n this.colorGradingTexture.level // weight\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current image processing instance.\r\n * @returns The cloned image processing\r\n */\r\n public clone(): ImageProcessingConfiguration {\r\n return SerializationHelper.Clone(() => new ImageProcessingConfiguration(), this);\r\n }\r\n\r\n /**\r\n * Serializes the current image processing instance to a json representation.\r\n * @returns a JSON representation\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n /**\r\n * Parses the image processing from a json representation.\r\n * @param source the JSON source to parse\r\n * @returns The parsed image processing\r\n */\r\n public static Parse(source: any): ImageProcessingConfiguration {\r\n const parsed = SerializationHelper.Parse(() => new ImageProcessingConfiguration(), source, null, null);\r\n // Backward compatibility\r\n if (source.vignetteCentreX !== undefined) {\r\n parsed.vignetteCenterX = source.vignetteCentreX;\r\n }\r\n if (source.vignetteCentreY !== undefined) {\r\n parsed.vignetteCenterY = source.vignetteCentreY;\r\n }\r\n\r\n return parsed;\r\n }\r\n\r\n // Static constants associated to the image processing.\r\n private static _VIGNETTEMODE_MULTIPLY = 0;\r\n private static _VIGNETTEMODE_OPAQUE = 1;\r\n\r\n /**\r\n * Used to apply the vignette as a mix with the pixel color.\r\n */\r\n public static get VIGNETTEMODE_MULTIPLY(): number {\r\n return this._VIGNETTEMODE_MULTIPLY;\r\n }\r\n\r\n /**\r\n * Used to apply the vignette as a replacement of the pixel color.\r\n */\r\n public static get VIGNETTEMODE_OPAQUE(): number {\r\n return this._VIGNETTEMODE_OPAQUE;\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._ImageProcessingConfigurationParser = ImageProcessingConfiguration.Parse;\r\n\r\n// Register Class Name\r\nRegisterClass(\"BABYLON.ImageProcessingConfiguration\", ImageProcessingConfiguration);\r\n"]}
|
|
1
|
+
{"version":3,"file":"imageProcessingConfiguration.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/imageProcessingConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from \"../Misc/decorators\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { ColorCurves } from \"../Materials/colorCurves\";\r\n\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Mix } from \"../Misc/tools.functions\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport type { IImageProcessingConfigurationDefines } from \"./imageProcessingConfiguration.defines\";\r\nimport { PrepareSamplersForImageProcessing, PrepareUniformsForImageProcessing } from \"./imageProcessingConfiguration.functions\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * This groups together the common properties used for image processing either in direct forward pass\r\n * or through post processing effect depending on the use of the image processing pipeline in your scene\r\n * or not.\r\n */\r\nexport class ImageProcessingConfiguration {\r\n /**\r\n * Default tone mapping applied in BabylonJS.\r\n */\r\n public static readonly TONEMAPPING_STANDARD = 0;\r\n\r\n /**\r\n * ACES Tone mapping (used by default in unreal and unity). This can help getting closer\r\n * to other engines rendering to increase portability.\r\n */\r\n public static readonly TONEMAPPING_ACES = 1;\r\n\r\n /**\r\n * Neutral Tone mapping developped by the Khronos group in order to constrain\r\n * values between 0 and 1 without shifting Hue.\r\n */\r\n public static readonly TONEMAPPING_KHR_PBR_NEUTRAL = 2;\r\n\r\n /**\r\n * Color curves setup used in the effect if colorCurvesEnabled is set to true\r\n */\r\n @serializeAsColorCurves()\r\n public colorCurves: Nullable<ColorCurves> = new ColorCurves();\r\n\r\n @serialize()\r\n private _colorCurvesEnabled = false;\r\n /**\r\n * Gets whether the color curves effect is enabled.\r\n */\r\n public get colorCurvesEnabled(): boolean {\r\n return this._colorCurvesEnabled;\r\n }\r\n /**\r\n * Sets whether the color curves effect is enabled.\r\n */\r\n public set colorCurvesEnabled(value: boolean) {\r\n if (this._colorCurvesEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorCurvesEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serializeAsTexture(\"colorGradingTexture\")\r\n private _colorGradingTexture: Nullable<BaseTexture>;\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public get colorGradingTexture(): Nullable<BaseTexture> {\r\n return this._colorGradingTexture;\r\n }\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public set colorGradingTexture(value: Nullable<BaseTexture>) {\r\n if (this._colorGradingTexture === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingTexture = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingEnabled = false;\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public get colorGradingEnabled(): boolean {\r\n return this._colorGradingEnabled;\r\n }\r\n /**\r\n * Sets whether the color grading effect is enabled.\r\n */\r\n public set colorGradingEnabled(value: boolean) {\r\n if (this._colorGradingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingWithGreenDepth = true;\r\n /**\r\n * Gets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public get colorGradingWithGreenDepth(): boolean {\r\n return this._colorGradingWithGreenDepth;\r\n }\r\n /**\r\n * Sets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public set colorGradingWithGreenDepth(value: boolean) {\r\n if (this._colorGradingWithGreenDepth === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingWithGreenDepth = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingBGR = true;\r\n /**\r\n * Gets whether the color grading texture contains BGR values.\r\n */\r\n public get colorGradingBGR(): boolean {\r\n return this._colorGradingBGR;\r\n }\r\n /**\r\n * Sets whether the color grading texture contains BGR values.\r\n */\r\n public set colorGradingBGR(value: boolean) {\r\n if (this._colorGradingBGR === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingBGR = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _exposure = 1.0;\r\n /**\r\n * Gets the Exposure used in the effect.\r\n */\r\n public get exposure(): number {\r\n return this._exposure;\r\n }\r\n /**\r\n * Sets the Exposure used in the effect.\r\n */\r\n public set exposure(value: number) {\r\n if (this._exposure === value) {\r\n return;\r\n }\r\n\r\n this._exposure = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingEnabled = false;\r\n /**\r\n * Gets whether the tone mapping effect is enabled.\r\n */\r\n public get toneMappingEnabled(): boolean {\r\n return this._toneMappingEnabled;\r\n }\r\n /**\r\n * Sets whether the tone mapping effect is enabled.\r\n */\r\n public set toneMappingEnabled(value: boolean) {\r\n if (this._toneMappingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingType = ImageProcessingConfiguration.TONEMAPPING_STANDARD;\r\n /**\r\n * Gets the type of tone mapping effect.\r\n */\r\n public get toneMappingType(): number {\r\n return this._toneMappingType;\r\n }\r\n /**\r\n * Sets the type of tone mapping effect used in BabylonJS.\r\n */\r\n public set toneMappingType(value: number) {\r\n if (this._toneMappingType === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingType = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n protected _contrast = 1.0;\r\n /**\r\n * Gets the contrast used in the effect.\r\n */\r\n public get contrast(): number {\r\n return this._contrast;\r\n }\r\n /**\r\n * Sets the contrast used in the effect.\r\n */\r\n public set contrast(value: number) {\r\n if (this._contrast === value) {\r\n return;\r\n }\r\n\r\n this._contrast = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Vignette stretch size.\r\n */\r\n @serialize()\r\n public vignetteStretch = 0;\r\n\r\n /**\r\n * Vignette center X Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterX = 0;\r\n\r\n /**\r\n * Vignette center Y Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterY = 0;\r\n\r\n /**\r\n * Back Compat: Vignette center Y Offset.\r\n * @deprecated use vignetteCenterY instead\r\n */\r\n public get vignetteCentreY(): number {\r\n return this.vignetteCenterY;\r\n }\r\n public set vignetteCentreY(value: number) {\r\n this.vignetteCenterY = value;\r\n }\r\n\r\n /**\r\n * Back Compat: Vignette center X Offset.\r\n * @deprecated use vignetteCenterX instead\r\n */\r\n public get vignetteCentreX(): number {\r\n return this.vignetteCenterX;\r\n }\r\n public set vignetteCentreX(value: number) {\r\n this.vignetteCenterX = value;\r\n }\r\n\r\n /**\r\n * Vignette weight or intensity of the vignette effect.\r\n */\r\n @serialize()\r\n public vignetteWeight = 1.5;\r\n\r\n /**\r\n * Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n @serializeAsColor4()\r\n public vignetteColor: Color4 = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Camera field of view used by the Vignette effect.\r\n */\r\n @serialize()\r\n public vignetteCameraFov = 0.5;\r\n\r\n @serialize()\r\n private _vignetteBlendMode = ImageProcessingConfiguration.VIGNETTEMODE_MULTIPLY;\r\n /**\r\n * Gets the vignette blend mode allowing different kind of effect.\r\n */\r\n public get vignetteBlendMode(): number {\r\n return this._vignetteBlendMode;\r\n }\r\n /**\r\n * Sets the vignette blend mode allowing different kind of effect.\r\n */\r\n public set vignetteBlendMode(value: number) {\r\n if (this._vignetteBlendMode === value) {\r\n return;\r\n }\r\n\r\n this._vignetteBlendMode = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _vignetteEnabled = false;\r\n /**\r\n * Gets whether the vignette effect is enabled.\r\n */\r\n public get vignetteEnabled(): boolean {\r\n return this._vignetteEnabled;\r\n }\r\n /**\r\n * Sets whether the vignette effect is enabled.\r\n */\r\n public set vignetteEnabled(value: boolean) {\r\n if (this._vignetteEnabled === value) {\r\n return;\r\n }\r\n\r\n this._vignetteEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringEnabled = false;\r\n /**\r\n * Gets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public get ditheringEnabled(): boolean {\r\n return this._ditheringEnabled;\r\n }\r\n /**\r\n * Sets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public set ditheringEnabled(value: boolean) {\r\n if (this._ditheringEnabled === value) {\r\n return;\r\n }\r\n\r\n this._ditheringEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringIntensity = 1.0 / 255.0;\r\n /**\r\n * Gets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public get ditheringIntensity(): number {\r\n return this._ditheringIntensity;\r\n }\r\n /**\r\n * Sets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public set ditheringIntensity(value: number) {\r\n if (this._ditheringIntensity === value) {\r\n return;\r\n }\r\n\r\n this._ditheringIntensity = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _skipFinalColorClamp = false;\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public get skipFinalColorClamp(): boolean {\r\n return this._skipFinalColorClamp;\r\n }\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public set skipFinalColorClamp(value: boolean) {\r\n if (this._skipFinalColorClamp === value) {\r\n return;\r\n }\r\n\r\n this._skipFinalColorClamp = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _applyByPostProcess = false;\r\n /**\r\n * Gets whether the image processing is applied through a post process or not.\r\n */\r\n public get applyByPostProcess(): boolean {\r\n return this._applyByPostProcess;\r\n }\r\n /**\r\n * Sets whether the image processing is applied through a post process or not.\r\n */\r\n public set applyByPostProcess(value: boolean) {\r\n if (this._applyByPostProcess === value) {\r\n return;\r\n }\r\n\r\n this._applyByPostProcess = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _isEnabled = true;\r\n /**\r\n * Gets whether the image processing is enabled or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the image processing is enabled or not.\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Width of the output texture used in the post process. If not provided, uses the width of the screen.\r\n */\r\n @serialize()\r\n public outputTextureWidth = 0;\r\n\r\n /**\r\n * Height of the output texture used in the post process. If not provided, uses the height of the screen.\r\n */\r\n @serialize()\r\n public outputTextureHeight = 0;\r\n\r\n /**\r\n * An event triggered when the configuration changes and requires Shader to Update some parameters.\r\n */\r\n public onUpdateParameters = new Observable<ImageProcessingConfiguration>();\r\n\r\n /**\r\n * Method called each time the image processing information changes requires to recompile the effect.\r\n */\r\n protected _updateParameters(): void {\r\n this.onUpdateParameters.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns \"ImageProcessingConfiguration\"\r\n */\r\n public getClassName(): string {\r\n return \"ImageProcessingConfiguration\";\r\n }\r\n\r\n /**\r\n * Prepare the list of uniforms associated with the Image Processing effects.\r\n * @param uniforms The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareUniforms: (uniforms: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareUniformsForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of samplers associated with the Image Processing effects.\r\n * @param samplersList The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareSamplers: (samplersList: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareSamplersForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of defines associated to the shader.\r\n * @param defines the list of defines to complete\r\n * @param forPostProcess Define if we are currently in post process mode or not\r\n */\r\n public prepareDefines(defines: IImageProcessingConfigurationDefines, forPostProcess = false): void {\r\n if (forPostProcess !== this.applyByPostProcess || !this._isEnabled) {\r\n defines.VIGNETTE = false;\r\n defines.TONEMAPPING = 0;\r\n defines.CONTRAST = false;\r\n defines.EXPOSURE = false;\r\n defines.COLORCURVES = false;\r\n defines.COLORGRADING = false;\r\n defines.COLORGRADING3D = false;\r\n defines.DITHER = false;\r\n defines.IMAGEPROCESSING = false;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess && this._isEnabled;\r\n return;\r\n }\r\n\r\n defines.VIGNETTE = this.vignetteEnabled;\r\n defines.VIGNETTEBLENDMODEMULTIPLY = this.vignetteBlendMode === ImageProcessingConfiguration._VIGNETTEMODE_MULTIPLY;\r\n defines.VIGNETTEBLENDMODEOPAQUE = !defines.VIGNETTEBLENDMODEMULTIPLY;\r\n\r\n if (!this._toneMappingEnabled) {\r\n defines.TONEMAPPING = 0;\r\n } else {\r\n switch (this._toneMappingType) {\r\n case ImageProcessingConfiguration.TONEMAPPING_KHR_PBR_NEUTRAL:\r\n defines.TONEMAPPING = 3;\r\n break;\r\n case ImageProcessingConfiguration.TONEMAPPING_ACES:\r\n defines.TONEMAPPING = 2;\r\n break;\r\n default:\r\n defines.TONEMAPPING = 1;\r\n break;\r\n }\r\n }\r\n\r\n defines.CONTRAST = this.contrast !== 1.0;\r\n defines.EXPOSURE = this.exposure !== 1.0;\r\n defines.COLORCURVES = this.colorCurvesEnabled && !!this.colorCurves;\r\n defines.COLORGRADING = this.colorGradingEnabled && !!this.colorGradingTexture;\r\n if (defines.COLORGRADING) {\r\n defines.COLORGRADING3D = this.colorGradingTexture!.is3D;\r\n } else {\r\n defines.COLORGRADING3D = false;\r\n }\r\n defines.SAMPLER3DGREENDEPTH = this.colorGradingWithGreenDepth;\r\n defines.SAMPLER3DBGRMAP = this.colorGradingBGR;\r\n defines.DITHER = this._ditheringEnabled;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSING =\r\n defines.VIGNETTE || !!defines.TONEMAPPING || defines.CONTRAST || defines.EXPOSURE || defines.COLORCURVES || defines.COLORGRADING || defines.DITHER;\r\n }\r\n\r\n /**\r\n * Returns true if all the image processing information are ready.\r\n * @returns True if ready, otherwise, false\r\n */\r\n public isReady() {\r\n // Color Grading texture can not be none blocking.\r\n return !this.colorGradingEnabled || !this.colorGradingTexture || this.colorGradingTexture.isReady();\r\n }\r\n\r\n /**\r\n * Binds the image processing to the shader.\r\n * @param effect The effect to bind to\r\n * @param overrideAspectRatio Override the aspect ratio of the effect\r\n */\r\n public bind(effect: Effect, overrideAspectRatio?: number): void {\r\n // Color Curves\r\n if (this._colorCurvesEnabled && this.colorCurves) {\r\n ColorCurves.Bind(this.colorCurves, effect);\r\n }\r\n\r\n // Vignette and dither handled together due to common uniform.\r\n if (this._vignetteEnabled || this._ditheringEnabled) {\r\n const inverseWidth = 1 / (this.outputTextureWidth || effect.getEngine().getRenderWidth());\r\n const inverseHeight = 1 / (this.outputTextureHeight || effect.getEngine().getRenderHeight());\r\n effect.setFloat2(\"vInverseScreenSize\", inverseWidth, inverseHeight);\r\n\r\n if (this._ditheringEnabled) {\r\n effect.setFloat(\"ditherIntensity\", 0.5 * this._ditheringIntensity);\r\n }\r\n\r\n if (this._vignetteEnabled) {\r\n const aspectRatio = overrideAspectRatio != null ? overrideAspectRatio : inverseHeight / inverseWidth;\r\n\r\n let vignetteScaleY = Math.tan(this.vignetteCameraFov * 0.5);\r\n let vignetteScaleX = vignetteScaleY * aspectRatio;\r\n\r\n const vignetteScaleGeometricMean = Math.sqrt(vignetteScaleX * vignetteScaleY);\r\n vignetteScaleX = Mix(vignetteScaleX, vignetteScaleGeometricMean, this.vignetteStretch);\r\n vignetteScaleY = Mix(vignetteScaleY, vignetteScaleGeometricMean, this.vignetteStretch);\r\n\r\n effect.setFloat4(\"vignetteSettings1\", vignetteScaleX, vignetteScaleY, -vignetteScaleX * this.vignetteCenterX, -vignetteScaleY * this.vignetteCenterY);\r\n\r\n const vignettePower = -2.0 * this.vignetteWeight;\r\n effect.setFloat4(\"vignetteSettings2\", this.vignetteColor.r, this.vignetteColor.g, this.vignetteColor.b, vignettePower);\r\n }\r\n }\r\n\r\n // Exposure\r\n effect.setFloat(\"exposureLinear\", this.exposure);\r\n\r\n // Contrast\r\n effect.setFloat(\"contrast\", this.contrast);\r\n\r\n // Color transform settings\r\n if (this.colorGradingTexture) {\r\n effect.setTexture(\"txColorTransform\", this.colorGradingTexture);\r\n const textureSize = this.colorGradingTexture.getSize().height;\r\n\r\n effect.setFloat4(\r\n \"colorTransformSettings\",\r\n (textureSize - 1) / textureSize, // textureScale\r\n 0.5 / textureSize, // textureOffset\r\n textureSize, // textureSize\r\n this.colorGradingTexture.level // weight\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current image processing instance.\r\n * @returns The cloned image processing\r\n */\r\n public clone(): ImageProcessingConfiguration {\r\n return SerializationHelper.Clone(() => new ImageProcessingConfiguration(), this);\r\n }\r\n\r\n /**\r\n * Serializes the current image processing instance to a json representation.\r\n * @returns a JSON representation\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n /**\r\n * Parses the image processing from a json representation.\r\n * @param source the JSON source to parse\r\n * @returns The parsed image processing\r\n */\r\n public static Parse(source: any): ImageProcessingConfiguration {\r\n const parsed = SerializationHelper.Parse(() => new ImageProcessingConfiguration(), source, null, null);\r\n // Backward compatibility\r\n if (source.vignetteCentreX !== undefined) {\r\n parsed.vignetteCenterX = source.vignetteCentreX;\r\n }\r\n if (source.vignetteCentreY !== undefined) {\r\n parsed.vignetteCenterY = source.vignetteCentreY;\r\n }\r\n\r\n return parsed;\r\n }\r\n\r\n // Static constants associated to the image processing.\r\n private static _VIGNETTEMODE_MULTIPLY = 0;\r\n private static _VIGNETTEMODE_OPAQUE = 1;\r\n\r\n /**\r\n * Used to apply the vignette as a mix with the pixel color.\r\n */\r\n public static get VIGNETTEMODE_MULTIPLY(): number {\r\n return this._VIGNETTEMODE_MULTIPLY;\r\n }\r\n\r\n /**\r\n * Used to apply the vignette as a replacement of the pixel color.\r\n */\r\n public static get VIGNETTEMODE_OPAQUE(): number {\r\n return this._VIGNETTEMODE_OPAQUE;\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._ImageProcessingConfigurationParser = ImageProcessingConfiguration.Parse;\r\n\r\n// Register Class Name\r\nRegisterClass(\"BABYLON.ImageProcessingConfiguration\", ImageProcessingConfiguration);\r\n"]}
|
|
@@ -736,6 +736,7 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
736
736
|
let r1 = 0;
|
|
737
737
|
let r2 = 0;
|
|
738
738
|
let r3 = 0;
|
|
739
|
+
const plySH = [];
|
|
739
740
|
for (let propertyIndex = 0; propertyIndex < header.vertexProperties.length; propertyIndex++) {
|
|
740
741
|
const property = header.vertexProperties[propertyIndex];
|
|
741
742
|
let value;
|
|
@@ -764,7 +765,7 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
764
765
|
const compressedChunk = compressedChunks[chunkIndex];
|
|
765
766
|
unpack111011(value, temp3);
|
|
766
767
|
position[0] = Scalar.Lerp(compressedChunk.min.x, compressedChunk.max.x, temp3.x);
|
|
767
|
-
position[1] = Scalar.Lerp(compressedChunk.min.y, compressedChunk.max.y, temp3.y);
|
|
768
|
+
position[1] = -Scalar.Lerp(compressedChunk.min.y, compressedChunk.max.y, temp3.y);
|
|
768
769
|
position[2] = Scalar.Lerp(compressedChunk.min.z, compressedChunk.max.z, temp3.z);
|
|
769
770
|
}
|
|
770
771
|
break;
|
|
@@ -772,9 +773,9 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
772
773
|
{
|
|
773
774
|
unpackRot(value, q);
|
|
774
775
|
r0 = q.w;
|
|
775
|
-
r1 =
|
|
776
|
+
r1 = q.z;
|
|
776
777
|
r2 = q.y;
|
|
777
|
-
r3 =
|
|
778
|
+
r3 = q.x;
|
|
778
779
|
}
|
|
779
780
|
break;
|
|
780
781
|
case 14 /* PLYValue.PACKED_SCALE */:
|
|
@@ -799,10 +800,10 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
799
800
|
position[0] = value;
|
|
800
801
|
break;
|
|
801
802
|
case 17 /* PLYValue.Y */:
|
|
802
|
-
position[1] = value;
|
|
803
|
+
position[1] = -value;
|
|
803
804
|
break;
|
|
804
805
|
case 18 /* PLYValue.Z */:
|
|
805
|
-
position[2] = value;
|
|
806
|
+
position[2] = -value;
|
|
806
807
|
break;
|
|
807
808
|
case 19 /* PLYValue.SCALE_0 */:
|
|
808
809
|
scale[0] = Math.exp(value);
|
|
@@ -853,7 +854,15 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
853
854
|
if (sh && property.value >= 40 /* PLYValue.SH_0 */ && property.value <= 84 /* PLYValue.SH_44 */) {
|
|
854
855
|
const clampedValue = Scalar.Clamp(value * 127.5 + 127.5, 0, 255);
|
|
855
856
|
const shIndex = property.value - 40 /* PLYValue.SH_0 */;
|
|
856
|
-
|
|
857
|
+
plySH[shIndex] = clampedValue;
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
if (sh) {
|
|
861
|
+
const shDim = header.shDegree == 1 ? 3 : header.shDegree == 2 ? 8 : 15;
|
|
862
|
+
for (let j = 0; j < shDim; j++) {
|
|
863
|
+
sh[j * 3 + 0] = plySH[j];
|
|
864
|
+
sh[j * 3 + 1] = plySH[j + shDim];
|
|
865
|
+
sh[j * 3 + 2] = plySH[j + shDim * 2];
|
|
857
866
|
}
|
|
858
867
|
}
|
|
859
868
|
q.set(r1, r2, r3, r0);
|