b148be114fc95748d996f45bd02777cd4d9da67b3fab64a5a26db54589336aa8.json 23 KB

1
  1. {"ast":null,"code":"import { Texture } from \"../Materials/Textures/texture.js\";\nimport { PostProcessRenderEffect } from \"../PostProcesses/RenderPipeline/postProcessRenderEffect.js\";\nimport { CircleOfConfusionPostProcess } from \"./circleOfConfusionPostProcess.js\";\nimport { DepthOfFieldBlurPostProcess } from \"./depthOfFieldBlurPostProcess.js\";\nimport { DepthOfFieldMergePostProcess } from \"./depthOfFieldMergePostProcess.js\";\nimport { ThinDepthOfFieldEffect } from \"./thinDepthOfFieldEffect.js\";\n/**\n * Specifies the level of max blur that should be applied when using the depth of field effect\n */\nexport var DepthOfFieldEffectBlurLevel;\n(function (DepthOfFieldEffectBlurLevel) {\n /**\n * Subtle blur\n */\n DepthOfFieldEffectBlurLevel[DepthOfFieldEffectBlurLevel[\"Low\"] = 0] = \"Low\";\n /**\n * Medium blur\n */\n DepthOfFieldEffectBlurLevel[DepthOfFieldEffectBlurLevel[\"Medium\"] = 1] = \"Medium\";\n /**\n * Large blur\n */\n DepthOfFieldEffectBlurLevel[DepthOfFieldEffectBlurLevel[\"High\"] = 2] = \"High\";\n})(DepthOfFieldEffectBlurLevel || (DepthOfFieldEffectBlurLevel = {}));\n/**\n * The depth of field effect applies a blur to objects that are closer or further from where the camera is focusing.\n */\nexport class DepthOfFieldEffect extends PostProcessRenderEffect {\n /**\n * The focal the length of the camera used in the effect in scene units/1000 (eg. millimeter)\n */\n set focalLength(value) {\n this._thinDepthOfFieldEffect.focalLength = value;\n }\n get focalLength() {\n return this._thinDepthOfFieldEffect.focalLength;\n }\n /**\n * F-Stop of the effect's camera. The diameter of the resulting aperture can be computed by lensSize/fStop. (default: 1.4)\n */\n set fStop(value) {\n this._thinDepthOfFieldEffect.fStop = value;\n }\n get fStop() {\n return this._thinDepthOfFieldEffect.fStop;\n }\n /**\n * Distance away from the camera to focus on in scene units/1000 (eg. millimeter). (default: 2000)\n */\n set focusDistance(value) {\n this._thinDepthOfFieldEffect.focusDistance = value;\n }\n get focusDistance() {\n return this._thinDepthOfFieldEffect.focusDistance;\n }\n /**\n * Max lens size in scene units/1000 (eg. millimeter). Standard cameras are 50mm. (default: 50) The diameter of the resulting aperture can be computed by lensSize/fStop.\n */\n set lensSize(value) {\n this._thinDepthOfFieldEffect.lensSize = value;\n }\n get lensSize() {\n return this._thinDepthOfFieldEffect.lensSize;\n }\n /**\n * Creates a new instance DepthOfFieldEffect\n * @param sceneOrEngine The scene or engine the effect belongs to.\n * @param depthTexture The depth texture of the scene to compute the circle of confusion.This must be set in order for this to function but may be set after initialization if needed.\n * @param blurLevel\n * @param pipelineTextureType The type of texture to be used when performing the post processing.\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\n * @param depthNotNormalized If the depth from the depth texture is already normalized or if the normalization should be done at runtime in the shader (default: false)\n */\n constructor(sceneOrEngine, depthTexture, blurLevel = 0 /* DepthOfFieldEffectBlurLevel.Low */, pipelineTextureType = 0, blockCompilation = false, depthNotNormalized = false) {\n const engine = sceneOrEngine._renderForCamera ? sceneOrEngine.getEngine() : sceneOrEngine;\n super(engine, \"depth of field\", () => {\n return this._effects;\n }, true);\n /**\n * @internal Internal post processes in depth of field effect\n */\n this._effects = [];\n this._thinDepthOfFieldEffect = new ThinDepthOfFieldEffect(\"Depth of Field\", engine, blurLevel, false, blockCompilation);\n // Use R-only formats if supported to store the circle of confusion values.\n // This should be more space and bandwidth efficient than using RGBA.\n const circleOfConfusionTextureFormat = engine.isWebGPU || engine.version > 1 ? 6 : 5;\n // Circle of confusion value for each pixel is used to determine how much to blur that pixel\n this._circleOfConfusion = new CircleOfConfusionPostProcess(\"circleOfConfusion\", depthTexture, {\n size: 1,\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n depthNotNormalized,\n effectWrapper: this._thinDepthOfFieldEffect._circleOfConfusion\n }, null);\n // Create a pyramid of blurred images (eg. fullSize 1/4 blur, half size 1/2 blur, quarter size 3/4 blur, eith size 4/4 blur)\n // Blur the image but do not blur on sharp far to near distance changes to avoid bleeding artifacts\n // See section 2.6.2 http://fileadmin.cs.lth.se/cs/education/edan35/lectures/12dof.pdf\n this._depthOfFieldBlurY = [];\n this._depthOfFieldBlurX = [];\n const blurCount = this._thinDepthOfFieldEffect._depthOfFieldBlurX.length;\n for (let i = 0; i < blurCount; i++) {\n const [thinBlurY, ratioY] = this._thinDepthOfFieldEffect._depthOfFieldBlurY[i];\n const blurY = new DepthOfFieldBlurPostProcess(\"vertical blur\", null, thinBlurY.direction, thinBlurY.kernel, {\n size: ratioY,\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n textureFormat: i == 0 ? circleOfConfusionTextureFormat : 5,\n effectWrapper: thinBlurY\n }, null, this._circleOfConfusion, i == 0 ? this._circleOfConfusion : null);\n blurY.autoClear = false;\n const [thinBlurX, ratioX] = this._thinDepthOfFieldEffect._depthOfFieldBlurX[i];\n const blurX = new DepthOfFieldBlurPostProcess(\"horizontal blur\", null, thinBlurX.direction, thinBlurX.kernel, {\n size: ratioX,\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n effectWrapper: thinBlurX\n }, null, this._circleOfConfusion, null);\n blurX.autoClear = false;\n this._depthOfFieldBlurY.push(blurY);\n this._depthOfFieldBlurX.push(blurX);\n }\n // Set all post processes on the effect.\n this._effects = [this._circleOfConfusion];\n for (let i = 0; i < this._depthOfFieldBlurX.length; i++) {\n this._effects.push(this._depthOfFieldBlurY[i]);\n this._effects.push(this._depthOfFieldBlurX[i]);\n }\n // Merge blurred images with original image based on circleOfConfusion\n this._dofMerge = new DepthOfFieldMergePostProcess(\"dofMerge\", this._circleOfConfusion, this._circleOfConfusion, this._depthOfFieldBlurX, {\n size: this._thinDepthOfFieldEffect._depthOfFieldBlurX[blurCount - 1][1],\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n effectWrapper: this._thinDepthOfFieldEffect._dofMerge\n }, null);\n this._dofMerge.autoClear = false;\n this._effects.push(this._dofMerge);\n }\n /**\n * Get the current class name of the current effect\n * @returns \"DepthOfFieldEffect\"\n */\n getClassName() {\n return \"DepthOfFieldEffect\";\n }\n /**\n * Depth texture to be used to compute the circle of confusion. This must be set here or in the constructor in order for the post process to function.\n */\n set depthTexture(value) {\n this._circleOfConfusion.depthTexture = value;\n }\n /**\n * Disposes each of the internal effects for a given camera.\n * @param camera The camera to dispose the effect on.\n */\n disposeEffects(camera) {\n for (let effectIndex = 0; effectIndex < this._effects.length; effectIndex++) {\n this._effects[effectIndex].dispose(camera);\n }\n }\n /**\n * @internal Internal\n */\n _updateEffects() {\n for (let effectIndex = 0; effectIndex < this._effects.length; effectIndex++) {\n this._effects[effectIndex].updateEffect();\n }\n }\n /**\n * Internal\n * @returns if all the contained post processes are ready.\n * @internal\n */\n _isReady() {\n return this._thinDepthOfFieldEffect.isReady();\n }\n}","map":{"version":3,"names":["Texture","PostProcessRenderEffect","CircleOfConfusionPostProcess","DepthOfFieldBlurPostProcess","DepthOfFieldMergePostProcess","ThinDepthOfFieldEffect","DepthOfFieldEffectBlurLevel","DepthOfFieldEffect","focalLength","value","_thinDepthOfFieldEffect","fStop","focusDistance","lensSize","constructor","sceneOrEngine","depthTexture","blurLevel","pipelineTextureType","blockCompilation","depthNotNormalized","engine","_renderForCamera","getEngine","_effects","circleOfConfusionTextureFormat","isWebGPU","version","_circleOfConfusion","size","samplingMode","BILINEAR_SAMPLINGMODE","textureType","effectWrapper","_depthOfFieldBlurY","_depthOfFieldBlurX","blurCount","length","i","thinBlurY","ratioY","blurY","direction","kernel","textureFormat","autoClear","thinBlurX","ratioX","blurX","push","_dofMerge","getClassName","disposeEffects","camera","effectIndex","dispose","_updateEffects","updateEffect","_isReady","isReady"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/PostProcesses/depthOfFieldEffect.js"],"sourcesContent":["import { Texture } from \"../Materials/Textures/texture.js\";\nimport { PostProcessRenderEffect } from \"../PostProcesses/RenderPipeline/postProcessRenderEffect.js\";\nimport { CircleOfConfusionPostProcess } from \"./circleOfConfusionPostProcess.js\";\nimport { DepthOfFieldBlurPostProcess } from \"./depthOfFieldBlurPostProcess.js\";\nimport { DepthOfFieldMergePostProcess } from \"./depthOfFieldMergePostProcess.js\";\n\nimport { ThinDepthOfFieldEffect } from \"./thinDepthOfFieldEffect.js\";\n/**\n * Specifies the level of max blur that should be applied when using the depth of field effect\n */\nexport var DepthOfFieldEffectBlurLevel;\n(function (DepthOfFieldEffectBlurLevel) {\n /**\n * Subtle blur\n */\n DepthOfFieldEffectBlurLevel[DepthOfFieldEffectBlurLevel[\"Low\"] = 0] = \"Low\";\n /**\n * Medium blur\n */\n DepthOfFieldEffectBlurLevel[DepthOfFieldEffectBlurLevel[\"Medium\"] = 1] = \"Medium\";\n /**\n * Large blur\n */\n DepthOfFieldEffectBlurLevel[DepthOfFieldEffectBlurLevel[\"High\"] = 2] = \"High\";\n})(DepthOfFieldEffectBlurLevel || (DepthOfFieldEffectBlurLevel = {}));\n/**\n * The depth of field effect applies a blur to objects that are closer or further from where the camera is focusing.\n */\nexport class DepthOfFieldEffect extends PostProcessRenderEffect {\n /**\n * The focal the length of the camera used in the effect in scene units/1000 (eg. millimeter)\n */\n set focalLength(value) {\n this._thinDepthOfFieldEffect.focalLength = value;\n }\n get focalLength() {\n return this._thinDepthOfFieldEffect.focalLength;\n }\n /**\n * F-Stop of the effect's camera. The diameter of the resulting aperture can be computed by lensSize/fStop. (default: 1.4)\n */\n set fStop(value) {\n this._thinDepthOfFieldEffect.fStop = value;\n }\n get fStop() {\n return this._thinDepthOfFieldEffect.fStop;\n }\n /**\n * Distance away from the camera to focus on in scene units/1000 (eg. millimeter). (default: 2000)\n */\n set focusDistance(value) {\n this._thinDepthOfFieldEffect.focusDistance = value;\n }\n get focusDistance() {\n return this._thinDepthOfFieldEffect.focusDistance;\n }\n /**\n * Max lens size in scene units/1000 (eg. millimeter). Standard cameras are 50mm. (default: 50) The diameter of the resulting aperture can be computed by lensSize/fStop.\n */\n set lensSize(value) {\n this._thinDepthOfFieldEffect.lensSize = value;\n }\n get lensSize() {\n return this._thinDepthOfFieldEffect.lensSize;\n }\n /**\n * Creates a new instance DepthOfFieldEffect\n * @param sceneOrEngine The scene or engine the effect belongs to.\n * @param depthTexture The depth texture of the scene to compute the circle of confusion.This must be set in order for this to function but may be set after initialization if needed.\n * @param blurLevel\n * @param pipelineTextureType The type of texture to be used when performing the post processing.\n * @param blockCompilation If compilation of the shader should not be done in the constructor. The updateEffect method can be used to compile the shader at a later time. (default: false)\n * @param depthNotNormalized If the depth from the depth texture is already normalized or if the normalization should be done at runtime in the shader (default: false)\n */\n constructor(sceneOrEngine, depthTexture, blurLevel = 0 /* DepthOfFieldEffectBlurLevel.Low */, pipelineTextureType = 0, blockCompilation = false, depthNotNormalized = false) {\n const engine = sceneOrEngine._renderForCamera ? sceneOrEngine.getEngine() : sceneOrEngine;\n super(engine, \"depth of field\", () => {\n return this._effects;\n }, true);\n /**\n * @internal Internal post processes in depth of field effect\n */\n this._effects = [];\n this._thinDepthOfFieldEffect = new ThinDepthOfFieldEffect(\"Depth of Field\", engine, blurLevel, false, blockCompilation);\n // Use R-only formats if supported to store the circle of confusion values.\n // This should be more space and bandwidth efficient than using RGBA.\n const circleOfConfusionTextureFormat = engine.isWebGPU || engine.version > 1 ? 6 : 5;\n // Circle of confusion value for each pixel is used to determine how much to blur that pixel\n this._circleOfConfusion = new CircleOfConfusionPostProcess(\"circleOfConfusion\", depthTexture, {\n size: 1,\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n depthNotNormalized,\n effectWrapper: this._thinDepthOfFieldEffect._circleOfConfusion,\n }, null);\n // Create a pyramid of blurred images (eg. fullSize 1/4 blur, half size 1/2 blur, quarter size 3/4 blur, eith size 4/4 blur)\n // Blur the image but do not blur on sharp far to near distance changes to avoid bleeding artifacts\n // See section 2.6.2 http://fileadmin.cs.lth.se/cs/education/edan35/lectures/12dof.pdf\n this._depthOfFieldBlurY = [];\n this._depthOfFieldBlurX = [];\n const blurCount = this._thinDepthOfFieldEffect._depthOfFieldBlurX.length;\n for (let i = 0; i < blurCount; i++) {\n const [thinBlurY, ratioY] = this._thinDepthOfFieldEffect._depthOfFieldBlurY[i];\n const blurY = new DepthOfFieldBlurPostProcess(\"vertical blur\", null, thinBlurY.direction, thinBlurY.kernel, {\n size: ratioY,\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n textureFormat: i == 0 ? circleOfConfusionTextureFormat : 5,\n effectWrapper: thinBlurY,\n }, null, this._circleOfConfusion, i == 0 ? this._circleOfConfusion : null);\n blurY.autoClear = false;\n const [thinBlurX, ratioX] = this._thinDepthOfFieldEffect._depthOfFieldBlurX[i];\n const blurX = new DepthOfFieldBlurPostProcess(\"horizontal blur\", null, thinBlurX.direction, thinBlurX.kernel, {\n size: ratioX,\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n effectWrapper: thinBlurX,\n }, null, this._circleOfConfusion, null);\n blurX.autoClear = false;\n this._depthOfFieldBlurY.push(blurY);\n this._depthOfFieldBlurX.push(blurX);\n }\n // Set all post processes on the effect.\n this._effects = [this._circleOfConfusion];\n for (let i = 0; i < this._depthOfFieldBlurX.length; i++) {\n this._effects.push(this._depthOfFieldBlurY[i]);\n this._effects.push(this._depthOfFieldBlurX[i]);\n }\n // Merge blurred images with original image based on circleOfConfusion\n this._dofMerge = new DepthOfFieldMergePostProcess(\"dofMerge\", this._circleOfConfusion, this._circleOfConfusion, this._depthOfFieldBlurX, {\n size: this._thinDepthOfFieldEffect._depthOfFieldBlurX[blurCount - 1][1],\n samplingMode: Texture.BILINEAR_SAMPLINGMODE,\n engine,\n textureType: pipelineTextureType,\n blockCompilation,\n effectWrapper: this._thinDepthOfFieldEffect._dofMerge,\n }, null);\n this._dofMerge.autoClear = false;\n this._effects.push(this._dofMerge);\n }\n /**\n * Get the current class name of the current effect\n * @returns \"DepthOfFieldEffect\"\n */\n getClassName() {\n return \"DepthOfFieldEffect\";\n }\n /**\n * Depth texture to be used to compute the circle of confusion. This must be set here or in the constructor in order for the post process to function.\n */\n set depthTexture(value) {\n this._circleOfConfusion.depthTexture = value;\n }\n /**\n * Disposes each of the internal effects for a given camera.\n * @param camera The camera to dispose the effect on.\n */\n disposeEffects(camera) {\n for (let effectIndex = 0; effectIndex < this._effects.length; effectIndex++) {\n this._effects[effectIndex].dispose(camera);\n }\n }\n /**\n * @internal Internal\n */\n _updateEffects() {\n for (let effectIndex = 0; effectIndex < this._effects.length; effectIndex++) {\n this._effects[effectIndex].updateEffect();\n }\n }\n /**\n * Internal\n * @returns if all the contained post processes are ready.\n * @internal\n */\n _isReady() {\n return this._thinDepthOfFieldEffect.isReady();\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}