@onerjs/core 8.28.4 → 8.28.5
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/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.d.ts +94 -0
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +312 -0
- package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.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/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -7
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +0 -6
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -4
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -4
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -4
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +0 -8
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +3 -5
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +13 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +25 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +76 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +147 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +14 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +29 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +2 -11
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrTask.js +8 -9
- package/FrameGraph/Tasks/PostProcesses/ssrTask.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/Fragment/fragmentOutputBlock.d.ts +4 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +6 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +1 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/openPbrMaterial.js +5 -5
- package/Materials/PBR/openPbrMaterial.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +1 -1
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +1 -1
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +21 -30
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +163 -256
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +1 -3
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.d.ts +130 -0
- package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js +193 -0
- package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js.map +1 -0
- package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +26 -0
- package/PostProcesses/thinSSAO2BlurPostProcess.js +81 -0
- package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -0
- package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +15 -0
- package/PostProcesses/thinSSAO2CombinePostProcess.js +48 -0
- package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -0
- package/PostProcesses/thinSSAO2PostProcess.d.ts +45 -0
- package/PostProcesses/thinSSAO2PostProcess.js +208 -0
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthOfFieldBlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,kEAA2D;AACrG,OAAO,EAAE,OAAO,EAAE,sCAA+B;AAEjD;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAKlE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAiD;QAC/F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAH7H,kCAA6B,GAAG,SAAS,CAAC,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"depthOfFieldBlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,kEAA2D;AACrG,OAAO,EAAE,OAAO,EAAE,sCAA+B;AAEjD;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAKlE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAiD;QAC/F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAH7H,kCAA6B,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAI/E,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,4DAA4D,CAAC,CAAC;QAC9H,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtG,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC/H,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBlurTask } from \"./blurTask\";\r\nimport { ThinDepthOfFieldBlurPostProcess } from \"core/PostProcesses/thinDepthOfFieldBlurPostProcess\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphDepthOfFieldBlurTask extends FrameGraphBlurTask {\r\n public circleOfConfusionTexture: FrameGraphTextureHandle;\r\n\r\n public circleOfConfusionSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinDepthOfFieldBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined) {\r\n throw new Error(`FrameGraphDepthOfFieldBlurTask \"${this.name}\": sourceTexture and circleOfConfusionTexture are required`);\r\n }\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n context.setTextureSamplingMode(this.circleOfConfusionTexture, this.circleOfConfusionSamplingMode);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"circleOfConfusionSampler\", this.circleOfConfusionTexture);\r\n }\r\n );\r\n\r\n pass.addDependencies(this.circleOfConfusionTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
|
|
@@ -8,16 +8,15 @@ export class FrameGraphDepthOfFieldMergeTask extends FrameGraphPostProcessTask {
|
|
|
8
8
|
constructor(name, frameGraph, thinPostProcess) {
|
|
9
9
|
super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldMergePostProcess(name, frameGraph.engine));
|
|
10
10
|
this.blurSteps = [];
|
|
11
|
-
this.onTexturesAllocatedObservable.add((context) => {
|
|
12
|
-
context.setTextureSamplingMode(this.blurSteps[this.blurSteps.length - 1], 2);
|
|
13
|
-
});
|
|
14
11
|
}
|
|
15
12
|
record(skipCreationOfDisabledPasses = false) {
|
|
16
13
|
if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined || this.blurSteps.length === 0) {
|
|
17
14
|
throw new Error(`FrameGraphBloomMergeTask "${this.name}": sourceTexture, circleOfConfusionTexture and blurSteps are required`);
|
|
18
15
|
}
|
|
19
16
|
this.postProcess.updateEffect("#define BLUR_LEVEL " + (this.blurSteps.length - 1) + "\n");
|
|
20
|
-
const pass = super.record(skipCreationOfDisabledPasses,
|
|
17
|
+
const pass = super.record(skipCreationOfDisabledPasses, (context) => {
|
|
18
|
+
context.setTextureSamplingMode(this.blurSteps[this.blurSteps.length - 1], 2);
|
|
19
|
+
}, (context) => {
|
|
21
20
|
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "circleOfConfusionSampler", this.circleOfConfusionTexture);
|
|
22
21
|
for (let i = 0; i < this.blurSteps.length; i++) {
|
|
23
22
|
const handle = this.blurSteps[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthOfFieldMergeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,mEAA4D;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,yBAAyB;IAK1E,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAkD;QAChG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,gCAAgC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAHvG,cAAS,GAA8B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"depthOfFieldMergeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,mEAA4D;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,yBAAyB;IAK1E,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAkD;QAChG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,gCAAgC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAHvG,cAAS,GAA8B,EAAE,CAAC;IAIjD,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjH,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,IAAI,uEAAuE,CAAC,CAAC;QACnI,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAE1F,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACvH,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC3H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1H,CAAC;QACL,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAErC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinDepthOfFieldMergePostProcess } from \"core/PostProcesses/thinDepthOfFieldMergePostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphDepthOfFieldMergeTask extends FrameGraphPostProcessTask {\r\n public circleOfConfusionTexture: FrameGraphTextureHandle;\r\n\r\n public blurSteps: FrameGraphTextureHandle[] = [];\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinDepthOfFieldMergePostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldMergePostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined || this.blurSteps.length === 0) {\r\n throw new Error(`FrameGraphBloomMergeTask \"${this.name}\": sourceTexture, circleOfConfusionTexture and blurSteps are required`);\r\n }\r\n\r\n this.postProcess.updateEffect(\"#define BLUR_LEVEL \" + (this.blurSteps.length - 1) + \"\\n\");\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n context.setTextureSamplingMode(this.blurSteps[this.blurSteps.length - 1], Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"circleOfConfusionSampler\", this.circleOfConfusionTexture);\r\n for (let i = 0; i < this.blurSteps.length; i++) {\r\n const handle = this.blurSteps[i];\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"blurStep\" + (this.blurSteps.length - i - 1), handle);\r\n }\r\n }\r\n );\r\n\r\n pass.addDependencies(this.circleOfConfusionTexture);\r\n pass.addDependencies(this.blurSteps);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
|
|
@@ -68,14 +68,6 @@ export class FrameGraphDepthOfFieldTask extends FrameGraphTask {
|
|
|
68
68
|
this._blurY.push(new FrameGraphDepthOfFieldBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.depthOfField._depthOfFieldBlurY[i][0]));
|
|
69
69
|
}
|
|
70
70
|
this._merge = new FrameGraphDepthOfFieldMergeTask(`${name} Merge`, this._frameGraph, this.depthOfField._dofMerge);
|
|
71
|
-
this.onTexturesAllocatedObservable.add((context) => {
|
|
72
|
-
this._circleOfConfusion.onTexturesAllocatedObservable.notifyObservers(context);
|
|
73
|
-
for (let i = 0; i < blurCount; i++) {
|
|
74
|
-
this._blurX[i].onTexturesAllocatedObservable.notifyObservers(context);
|
|
75
|
-
this._blurY[i].onTexturesAllocatedObservable.notifyObservers(context);
|
|
76
|
-
}
|
|
77
|
-
this._merge.onTexturesAllocatedObservable.notifyObservers(context);
|
|
78
|
-
});
|
|
79
71
|
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
80
72
|
}
|
|
81
73
|
isReady() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthOfFieldTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,yDAAkD;AAEnF;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IAgD1D;;OAEG;IACH,IAAoB,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAoB,IAAI,CAAC,IAAY;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,GAAG,IAAI,sBAAsB,CAAC;QACjE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;YAC/C,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,IAAI,QAAQ,CAAC;QACvC,CAAC;IACL,CAAC;IASD;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,uDAAgF,EAAE,GAAG,GAAG,KAAK;QAC3I,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAlF5B;;WAEG;QACI,uBAAkB,GAAG,SAAS,CAAC,6BAA6B,CAAC;QAQpE;;WAEG;QACI,sBAAiB,GAAG,SAAS,CAAC,6BAA6B,CAAC;QAuDlD,WAAM,GAAqC,EAAE,CAAC;QAC9C,WAAM,GAAqC,EAAE,CAAC;QAc3D,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC,yBAAyB,CAAC;QACvE,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC,sBAAsB,CAAC;YACxE,CAAC;iBAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACjC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC,iBAAiB,CAAC;YACnE,CAAC;QACL,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAEzF,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAA+B,CAAC,GAAG,IAAI,sBAAsB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAErJ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAE9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7I,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,+BAA+B,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAElH,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEe,OAAO;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE3G,MAAM,WAAW,GAAG;YAChB,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAAK;YAC1C,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,MAAM;SAC/C,CAAC;QACF,MAAM,8BAA8B,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACtJ,MAAM,sBAAsB,GAAqC;YAC7D,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE;gBACL,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC;gBACzC,OAAO,EAAE,CAAC,8BAA8B,CAAC;gBACzC,OAAO,EAAE,CAAC;gBACV,cAAc,EAAE,CAAC,KAAK,CAAC;gBACvB,MAAM,EAAE,CAAC,EAAE,CAAC;aACf;YACD,gBAAgB,EAAE,KAAK;SAC1B,CAAC;QAEF,MAAM,8BAA8B,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAEvJ,IAAI,CAAC,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,qCAAqC;QACjG,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACzD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACnE,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,kBAAkB,CAAC,aAAa,GAAG,8BAA8B,CAAC;QACvE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAErC,sBAAsB,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAExE,MAAM,SAAS,GAA8B,EAAE,CAAC;QAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACjF,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAEnF,sBAAsB,CAAC,OAAO,CAAC,MAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAElI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,SAAS,CAAC,6BAA6B,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB,GAAG,8BAA8B,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,kBAAkB,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAElI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,SAAS,CAAC,6BAA6B,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAwB,GAAG,8BAA8B,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,kBAAkB,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE5B,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,4BAA4B,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEnH,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QAE9I,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,wBAAwB,GAAG,8BAA8B,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEnF,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjD,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;IAEe,OAAO;QACnB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureCreationOptions, FrameGraphTextureHandle, AbstractEngine, Camera } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinDepthOfFieldEffectBlurLevel } from \"core/PostProcesses/thinDepthOfFieldEffect\";\r\nimport { FrameGraphDepthOfFieldMergeTask } from \"./depthOfFieldMergeTask\";\r\nimport { FrameGraphCircleOfConfusionTask } from \"./circleOfConfusionTask\";\r\nimport { FrameGraphDepthOfFieldBlurTask } from \"./depthOfFieldBlurTask\";\r\nimport { ThinDepthOfFieldEffect } from \"core/PostProcesses/thinDepthOfFieldEffect\";\r\n\r\n/**\r\n * Task which applies a depth of field effect.\r\n */\r\nexport class FrameGraphDepthOfFieldTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the depth of field effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture to use for the depth of field effect.\r\n * Should store camera space depth (Z coordinate).\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the depth texture.\r\n */\r\n public depthSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public camera: Camera;\r\n\r\n /**\r\n * The target texture to render the depth of field effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the depth of field effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth of field effect.\r\n */\r\n public readonly depthOfField: ThinDepthOfFieldEffect;\r\n\r\n /**\r\n * Whether the depth of field effect is applied on HDR textures.\r\n * When true, the depth of field effect will use a higher precision texture format (half float or float). Else, it will use unsigned byte.\r\n */\r\n public readonly hdr: boolean;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._circleOfConfusion) {\r\n this._circleOfConfusion.name = `${name} Circle of Confusion`;\r\n }\r\n\r\n if (this._blurX) {\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].name = `${name} Blur X${i}`;\r\n this._blurY[i].name = `${name} Blur Y${i}`;\r\n }\r\n }\r\n\r\n if (this._merge) {\r\n this._merge.name = `${name} Merge`;\r\n }\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _circleOfConfusion: FrameGraphCircleOfConfusionTask;\r\n private readonly _blurX: FrameGraphDepthOfFieldBlurTask[] = [];\r\n private readonly _blurY: FrameGraphDepthOfFieldBlurTask[] = [];\r\n private readonly _merge: FrameGraphDepthOfFieldMergeTask;\r\n private readonly _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * Constructs a depth of field task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param blurLevel The blur level of the depth of field effect (default: ThinDepthOfFieldEffectBlurLevel.Low).\r\n * @param hdr Whether the depth of field effect is HDR.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, blurLevel: ThinDepthOfFieldEffectBlurLevel = ThinDepthOfFieldEffectBlurLevel.Low, hdr = false) {\r\n super(name, frameGraph);\r\n\r\n this._engine = frameGraph.engine;\r\n this.hdr = hdr;\r\n\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (hdr) {\r\n const caps = frameGraph.engine.getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n }\r\n\r\n this.depthOfField = new ThinDepthOfFieldEffect(name, frameGraph.engine, blurLevel, true);\r\n\r\n this._circleOfConfusion = new FrameGraphCircleOfConfusionTask(`${name} Circle of Confusion`, this._frameGraph, this.depthOfField._circleOfConfusion);\r\n\r\n const blurCount = this.depthOfField._depthOfFieldBlurX.length;\r\n\r\n for (let i = 0; i < blurCount; i++) {\r\n this._blurX.push(new FrameGraphDepthOfFieldBlurTask(`${name} Blur X${i}`, this._frameGraph, this.depthOfField._depthOfFieldBlurX[i][0]));\r\n this._blurY.push(new FrameGraphDepthOfFieldBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.depthOfField._depthOfFieldBlurY[i][0]));\r\n }\r\n\r\n this._merge = new FrameGraphDepthOfFieldMergeTask(`${name} Merge`, this._frameGraph, this.depthOfField._dofMerge);\r\n\r\n this.onTexturesAllocatedObservable.add((context) => {\r\n this._circleOfConfusion.onTexturesAllocatedObservable.notifyObservers(context);\r\n for (let i = 0; i < blurCount; i++) {\r\n this._blurX[i].onTexturesAllocatedObservable.notifyObservers(context);\r\n this._blurY[i].onTexturesAllocatedObservable.notifyObservers(context);\r\n }\r\n this._merge.onTexturesAllocatedObservable.notifyObservers(context);\r\n });\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.depthOfField.isReady();\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(\"FrameGraphDepthOfFieldTask: sourceTexture, depthTexture and camera are required\");\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n const textureSize = {\r\n width: sourceTextureDescription.size.width,\r\n height: sourceTextureDescription.size.height,\r\n };\r\n const circleOfConfusionTextureFormat = this._engine.isWebGPU || this._engine.version > 1 ? Constants.TEXTUREFORMAT_RED : Constants.TEXTUREFORMAT_RGBA;\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this._defaultPipelineTextureType],\r\n formats: [circleOfConfusionTextureFormat],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const circleOfConfusionTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._circleOfConfusion.name, textureCreationOptions);\r\n\r\n this._circleOfConfusion.sourceTexture = this.sourceTexture; // texture not used by the CoC shader\r\n this._circleOfConfusion.depthTexture = this.depthTexture;\r\n this._circleOfConfusion.depthSamplingMode = this.depthSamplingMode;\r\n this._circleOfConfusion.camera = this.camera;\r\n this._circleOfConfusion.targetTexture = circleOfConfusionTextureHandle;\r\n this._circleOfConfusion.record(true);\r\n\r\n textureCreationOptions.options.formats = [Constants.TEXTUREFORMAT_RGBA];\r\n\r\n const blurSteps: FrameGraphTextureHandle[] = [];\r\n\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n const ratio = this.depthOfField._depthOfFieldBlurX[i][1];\r\n\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width * ratio) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height * ratio) || 1;\r\n\r\n textureCreationOptions.options.labels![0] = \"step \" + (i + 1);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY[i].name, textureCreationOptions);\r\n\r\n this._blurY[i].sourceTexture = i === 0 ? this.sourceTexture : this._blurX[i - 1].outputTexture;\r\n this._blurY[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurY[i].circleOfConfusionTexture = circleOfConfusionTextureHandle;\r\n this._blurY[i].targetTexture = blurYTextureHandle;\r\n this._blurY[i].record(true);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX[i].name, textureCreationOptions);\r\n\r\n this._blurX[i].sourceTexture = this._blurY[i].outputTexture;\r\n this._blurX[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurX[i].circleOfConfusionTexture = circleOfConfusionTextureHandle;\r\n this._blurX[i].targetTexture = blurXTextureHandle;\r\n this._blurX[i].record(true);\r\n\r\n blurSteps.push(blurXTextureHandle);\r\n }\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this._merge.name, sourceTextureCreationOptions);\r\n\r\n this._merge.sourceTexture = this.sourceTexture;\r\n this._merge.sourceSamplingMode = this.sourceSamplingMode;\r\n this._merge.circleOfConfusionTexture = circleOfConfusionTextureHandle;\r\n this._merge.blurSteps = blurSteps;\r\n this._merge.targetTexture = this.outputTexture;\r\n this._merge.record(true);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._circleOfConfusion.dispose();\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].dispose();\r\n this._blurY[i].dispose();\r\n }\r\n this._merge.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"depthOfFieldTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureCreationOptions, FrameGraphTextureHandle, AbstractEngine, Camera } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinDepthOfFieldEffectBlurLevel } from \"core/PostProcesses/thinDepthOfFieldEffect\";\r\nimport { FrameGraphDepthOfFieldMergeTask } from \"./depthOfFieldMergeTask\";\r\nimport { FrameGraphCircleOfConfusionTask } from \"./circleOfConfusionTask\";\r\nimport { FrameGraphDepthOfFieldBlurTask } from \"./depthOfFieldBlurTask\";\r\nimport { ThinDepthOfFieldEffect } from \"core/PostProcesses/thinDepthOfFieldEffect\";\r\n\r\n/**\r\n * Task which applies a depth of field effect.\r\n */\r\nexport class FrameGraphDepthOfFieldTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the depth of field effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture to use for the depth of field effect.\r\n * Should store camera space depth (Z coordinate).\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the depth texture.\r\n */\r\n public depthSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public camera: Camera;\r\n\r\n /**\r\n * The target texture to render the depth of field effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the depth of field effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth of field effect.\r\n */\r\n public readonly depthOfField: ThinDepthOfFieldEffect;\r\n\r\n /**\r\n * Whether the depth of field effect is applied on HDR textures.\r\n * When true, the depth of field effect will use a higher precision texture format (half float or float). Else, it will use unsigned byte.\r\n */\r\n public readonly hdr: boolean;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._circleOfConfusion) {\r\n this._circleOfConfusion.name = `${name} Circle of Confusion`;\r\n }\r\n\r\n if (this._blurX) {\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].name = `${name} Blur X${i}`;\r\n this._blurY[i].name = `${name} Blur Y${i}`;\r\n }\r\n }\r\n\r\n if (this._merge) {\r\n this._merge.name = `${name} Merge`;\r\n }\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _circleOfConfusion: FrameGraphCircleOfConfusionTask;\r\n private readonly _blurX: FrameGraphDepthOfFieldBlurTask[] = [];\r\n private readonly _blurY: FrameGraphDepthOfFieldBlurTask[] = [];\r\n private readonly _merge: FrameGraphDepthOfFieldMergeTask;\r\n private readonly _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * Constructs a depth of field task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param blurLevel The blur level of the depth of field effect (default: ThinDepthOfFieldEffectBlurLevel.Low).\r\n * @param hdr Whether the depth of field effect is HDR.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, blurLevel: ThinDepthOfFieldEffectBlurLevel = ThinDepthOfFieldEffectBlurLevel.Low, hdr = false) {\r\n super(name, frameGraph);\r\n\r\n this._engine = frameGraph.engine;\r\n this.hdr = hdr;\r\n\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (hdr) {\r\n const caps = frameGraph.engine.getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n }\r\n\r\n this.depthOfField = new ThinDepthOfFieldEffect(name, frameGraph.engine, blurLevel, true);\r\n\r\n this._circleOfConfusion = new FrameGraphCircleOfConfusionTask(`${name} Circle of Confusion`, this._frameGraph, this.depthOfField._circleOfConfusion);\r\n\r\n const blurCount = this.depthOfField._depthOfFieldBlurX.length;\r\n\r\n for (let i = 0; i < blurCount; i++) {\r\n this._blurX.push(new FrameGraphDepthOfFieldBlurTask(`${name} Blur X${i}`, this._frameGraph, this.depthOfField._depthOfFieldBlurX[i][0]));\r\n this._blurY.push(new FrameGraphDepthOfFieldBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.depthOfField._depthOfFieldBlurY[i][0]));\r\n }\r\n\r\n this._merge = new FrameGraphDepthOfFieldMergeTask(`${name} Merge`, this._frameGraph, this.depthOfField._dofMerge);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.depthOfField.isReady();\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(\"FrameGraphDepthOfFieldTask: sourceTexture, depthTexture and camera are required\");\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n const textureSize = {\r\n width: sourceTextureDescription.size.width,\r\n height: sourceTextureDescription.size.height,\r\n };\r\n const circleOfConfusionTextureFormat = this._engine.isWebGPU || this._engine.version > 1 ? Constants.TEXTUREFORMAT_RED : Constants.TEXTUREFORMAT_RGBA;\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this._defaultPipelineTextureType],\r\n formats: [circleOfConfusionTextureFormat],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const circleOfConfusionTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._circleOfConfusion.name, textureCreationOptions);\r\n\r\n this._circleOfConfusion.sourceTexture = this.sourceTexture; // texture not used by the CoC shader\r\n this._circleOfConfusion.depthTexture = this.depthTexture;\r\n this._circleOfConfusion.depthSamplingMode = this.depthSamplingMode;\r\n this._circleOfConfusion.camera = this.camera;\r\n this._circleOfConfusion.targetTexture = circleOfConfusionTextureHandle;\r\n this._circleOfConfusion.record(true);\r\n\r\n textureCreationOptions.options.formats = [Constants.TEXTUREFORMAT_RGBA];\r\n\r\n const blurSteps: FrameGraphTextureHandle[] = [];\r\n\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n const ratio = this.depthOfField._depthOfFieldBlurX[i][1];\r\n\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width * ratio) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height * ratio) || 1;\r\n\r\n textureCreationOptions.options.labels![0] = \"step \" + (i + 1);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY[i].name, textureCreationOptions);\r\n\r\n this._blurY[i].sourceTexture = i === 0 ? this.sourceTexture : this._blurX[i - 1].outputTexture;\r\n this._blurY[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurY[i].circleOfConfusionTexture = circleOfConfusionTextureHandle;\r\n this._blurY[i].targetTexture = blurYTextureHandle;\r\n this._blurY[i].record(true);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX[i].name, textureCreationOptions);\r\n\r\n this._blurX[i].sourceTexture = this._blurY[i].outputTexture;\r\n this._blurX[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurX[i].circleOfConfusionTexture = circleOfConfusionTextureHandle;\r\n this._blurX[i].targetTexture = blurXTextureHandle;\r\n this._blurX[i].record(true);\r\n\r\n blurSteps.push(blurXTextureHandle);\r\n }\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this._merge.name, sourceTextureCreationOptions);\r\n\r\n this._merge.sourceTexture = this.sourceTexture;\r\n this._merge.sourceSamplingMode = this.sourceSamplingMode;\r\n this._merge.circleOfConfusionTexture = circleOfConfusionTextureHandle;\r\n this._merge.blurSteps = blurSteps;\r\n this._merge.targetTexture = this.outputTexture;\r\n this._merge.record(true);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._circleOfConfusion.dispose();\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].dispose();\r\n this._blurY[i].dispose();\r\n }\r\n this._merge.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -54,11 +54,6 @@ export class FrameGraphPostProcessTask extends FrameGraphTask {
|
|
|
54
54
|
this._postProcessDrawWrapper = this.postProcess.drawWrapper;
|
|
55
55
|
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
56
56
|
this.outputDepthAttachmentTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
57
|
-
this.onTexturesAllocatedObservable.add((context) => {
|
|
58
|
-
if (this.sourceTexture !== undefined) {
|
|
59
|
-
context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
57
|
}
|
|
63
58
|
isReady() {
|
|
64
59
|
return this.postProcess.isReady();
|
|
@@ -94,6 +89,9 @@ export class FrameGraphPostProcessTask extends FrameGraphTask {
|
|
|
94
89
|
pass.setRenderTarget(this.outputTexture);
|
|
95
90
|
pass.setRenderTargetDepth(this.depthAttachmentTexture);
|
|
96
91
|
pass.setExecuteFunc((context) => {
|
|
92
|
+
if (this.sourceTexture !== undefined) {
|
|
93
|
+
context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);
|
|
94
|
+
}
|
|
97
95
|
additionalExecute?.(context);
|
|
98
96
|
context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {
|
|
99
97
|
if (this.sourceTexture !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postProcessTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, DrawWrapper, FrameGraphRenderPass, FrameGraphRenderContext, EffectWrapper, IStencilState } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { textureSizeIsObject } from \"../../../Materials/Textures/textureCreationOptions\";\r\n\r\n/**\r\n * Task which applies a post process.\r\n */\r\nexport class FrameGraphPostProcessTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the post process on.\r\n * It's allowed to be undefined if the post process does not require a source texture.\r\n * In that case, targetTexture must be provided.\r\n */\r\n public sourceTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The target texture to render the post process to.\r\n * If not supplied, a texture with the same configuration as the source texture will be created.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The stencil state to use for the post process (optional).\r\n */\r\n public stencilState?: IStencilState;\r\n\r\n /**\r\n * The depth attachment texture to use for the post process (optional).\r\n * Note that a post-process task never writes to the depth buffer: attaching a depth texture is only useful if you want to test against the depth/stencil aspect or write to the stencil buffer.\r\n */\r\n public depthAttachmentTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * If true, the depth attachment will be read-only.\r\n * This means that the post process will not write to the depth buffer.\r\n * Setting depthReadOnly and stencilReadOnly to true is useful when you want to also be able to bind this same depth/stencil attachment to a shader.\r\n * Note that it will only work in WebGPU, as WebGL does not support read-only depth/stencil attachments.\r\n */\r\n public depthReadOnly = false;\r\n\r\n /**\r\n * If true, the stencil attachment will be read-only.\r\n * This means that the post process will not write to the stencil buffer.\r\n * Setting depthReadOnly and stencilReadOnly to true is useful when you want to also be able to bind this same depth/stencil attachment to a shader.\r\n * Note that it will only work in WebGPU, as WebGL does not support read-only depth/stencil attachments.\r\n */\r\n public stencilReadOnly = false;\r\n\r\n /**\r\n * If true, color write will be disabled when applying the post process.\r\n * This means that the post process will not write to the color buffer.\r\n */\r\n public disableColorWrite = false;\r\n\r\n /**\r\n * If true, the post process will be generated by a back face full-screen quad (CW order).\r\n */\r\n public drawBackFace = false;\r\n\r\n /**\r\n * If depth testing should be enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * The output texture of the post process.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth attachment texture.\r\n * This texture will point to the same texture than the depthAttachmentTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputDepthAttachmentTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The post process to apply.\r\n */\r\n public readonly postProcess: EffectWrapper;\r\n\r\n /**\r\n * The draw wrapper used by the post process\r\n */\r\n public get drawWrapper() {\r\n return this._postProcessDrawWrapper;\r\n }\r\n\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n protected _sourceWidth: number;\r\n protected _sourceHeight: number;\r\n protected _outputWidth: number;\r\n protected _outputHeight: number;\r\n\r\n /**\r\n * Constructs a new post process task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param postProcess The post process to apply.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, postProcess: EffectWrapper) {\r\n super(name, frameGraph);\r\n\r\n this.postProcess = postProcess;\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthAttachmentTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n\r\n this.onTexturesAllocatedObservable.add((context) => {\r\n if (this.sourceTexture !== undefined) {\r\n context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);\r\n }\r\n });\r\n }\r\n\r\n public override isReady() {\r\n return this.postProcess.isReady();\r\n }\r\n\r\n public record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined && this.targetTexture === undefined) {\r\n throw new Error(`FrameGraphPostProcessTask \"${this.name}\": sourceTexture or targetTexture is required`);\r\n }\r\n\r\n const sourceTextureCreationOptions = this.sourceTexture !== undefined ? this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture) : undefined;\r\n if (sourceTextureCreationOptions) {\r\n sourceTextureCreationOptions.options.samples = 1;\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name, sourceTextureCreationOptions);\r\n if (this.depthAttachmentTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthAttachmentTexture, this.depthAttachmentTexture);\r\n }\r\n\r\n if (sourceTextureCreationOptions) {\r\n const sourceSize = !sourceTextureCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(sourceTextureCreationOptions.size)\r\n ? sourceTextureCreationOptions.size\r\n : { width: sourceTextureCreationOptions.size, height: sourceTextureCreationOptions.size }\r\n : this._frameGraph.textureManager.getAbsoluteDimensions(sourceTextureCreationOptions.size);\r\n\r\n this._sourceWidth = sourceSize.width;\r\n this._sourceHeight = sourceSize.height;\r\n }\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.outputTexture);\r\n\r\n this._outputWidth = outputTextureDescription.size.width;\r\n this._outputHeight = outputTextureDescription.size.height;\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.depthReadOnly = this.depthReadOnly;\r\n pass.stencilReadOnly = this.stencilReadOnly;\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setRenderTargetDepth(this.depthAttachmentTexture);\r\n pass.setExecuteFunc((context) => {\r\n additionalExecute?.(context);\r\n context.applyFullScreenEffect(\r\n this._postProcessDrawWrapper,\r\n () => {\r\n if (this.sourceTexture !== undefined) {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"textureSampler\", this.sourceTexture);\r\n }\r\n additionalBindings?.(context);\r\n this.postProcess.bind();\r\n },\r\n this.stencilState,\r\n this.disableColorWrite,\r\n this.drawBackFace,\r\n this.depthTest\r\n );\r\n });\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.depthReadOnly = this.depthReadOnly;\r\n passDisabled.stencilReadOnly = this.stencilReadOnly;\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setRenderTargetDepth(this.depthAttachmentTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n if (this.sourceTexture !== undefined) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n this.postProcess.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"postProcessTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, DrawWrapper, FrameGraphRenderPass, FrameGraphRenderContext, EffectWrapper, IStencilState } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { textureSizeIsObject } from \"../../../Materials/Textures/textureCreationOptions\";\r\n\r\n/**\r\n * Task which applies a post process.\r\n */\r\nexport class FrameGraphPostProcessTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the post process on.\r\n * It's allowed to be undefined if the post process does not require a source texture.\r\n * In that case, targetTexture must be provided.\r\n */\r\n public sourceTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The target texture to render the post process to.\r\n * If not supplied, a texture with the same configuration as the source texture will be created.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The stencil state to use for the post process (optional).\r\n */\r\n public stencilState?: IStencilState;\r\n\r\n /**\r\n * The depth attachment texture to use for the post process (optional).\r\n * Note that a post-process task never writes to the depth buffer: attaching a depth texture is only useful if you want to test against the depth/stencil aspect or write to the stencil buffer.\r\n */\r\n public depthAttachmentTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * If true, the depth attachment will be read-only.\r\n * This means that the post process will not write to the depth buffer.\r\n * Setting depthReadOnly and stencilReadOnly to true is useful when you want to also be able to bind this same depth/stencil attachment to a shader.\r\n * Note that it will only work in WebGPU, as WebGL does not support read-only depth/stencil attachments.\r\n */\r\n public depthReadOnly = false;\r\n\r\n /**\r\n * If true, the stencil attachment will be read-only.\r\n * This means that the post process will not write to the stencil buffer.\r\n * Setting depthReadOnly and stencilReadOnly to true is useful when you want to also be able to bind this same depth/stencil attachment to a shader.\r\n * Note that it will only work in WebGPU, as WebGL does not support read-only depth/stencil attachments.\r\n */\r\n public stencilReadOnly = false;\r\n\r\n /**\r\n * If true, color write will be disabled when applying the post process.\r\n * This means that the post process will not write to the color buffer.\r\n */\r\n public disableColorWrite = false;\r\n\r\n /**\r\n * If true, the post process will be generated by a back face full-screen quad (CW order).\r\n */\r\n public drawBackFace = false;\r\n\r\n /**\r\n * If depth testing should be enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * The output texture of the post process.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth attachment texture.\r\n * This texture will point to the same texture than the depthAttachmentTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputDepthAttachmentTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The post process to apply.\r\n */\r\n public readonly postProcess: EffectWrapper;\r\n\r\n /**\r\n * The draw wrapper used by the post process\r\n */\r\n public get drawWrapper() {\r\n return this._postProcessDrawWrapper;\r\n }\r\n\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n protected _sourceWidth: number;\r\n protected _sourceHeight: number;\r\n protected _outputWidth: number;\r\n protected _outputHeight: number;\r\n\r\n /**\r\n * Constructs a new post process task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param postProcess The post process to apply.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, postProcess: EffectWrapper) {\r\n super(name, frameGraph);\r\n\r\n this.postProcess = postProcess;\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthAttachmentTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.postProcess.isReady();\r\n }\r\n\r\n public record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined && this.targetTexture === undefined) {\r\n throw new Error(`FrameGraphPostProcessTask \"${this.name}\": sourceTexture or targetTexture is required`);\r\n }\r\n\r\n const sourceTextureCreationOptions = this.sourceTexture !== undefined ? this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture) : undefined;\r\n if (sourceTextureCreationOptions) {\r\n sourceTextureCreationOptions.options.samples = 1;\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name, sourceTextureCreationOptions);\r\n if (this.depthAttachmentTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthAttachmentTexture, this.depthAttachmentTexture);\r\n }\r\n\r\n if (sourceTextureCreationOptions) {\r\n const sourceSize = !sourceTextureCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(sourceTextureCreationOptions.size)\r\n ? sourceTextureCreationOptions.size\r\n : { width: sourceTextureCreationOptions.size, height: sourceTextureCreationOptions.size }\r\n : this._frameGraph.textureManager.getAbsoluteDimensions(sourceTextureCreationOptions.size);\r\n\r\n this._sourceWidth = sourceSize.width;\r\n this._sourceHeight = sourceSize.height;\r\n }\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.outputTexture);\r\n\r\n this._outputWidth = outputTextureDescription.size.width;\r\n this._outputHeight = outputTextureDescription.size.height;\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.depthReadOnly = this.depthReadOnly;\r\n pass.stencilReadOnly = this.stencilReadOnly;\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setRenderTargetDepth(this.depthAttachmentTexture);\r\n pass.setExecuteFunc((context) => {\r\n if (this.sourceTexture !== undefined) {\r\n context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);\r\n }\r\n additionalExecute?.(context);\r\n context.applyFullScreenEffect(\r\n this._postProcessDrawWrapper,\r\n () => {\r\n if (this.sourceTexture !== undefined) {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"textureSampler\", this.sourceTexture);\r\n }\r\n additionalBindings?.(context);\r\n this.postProcess.bind();\r\n },\r\n this.stencilState,\r\n this.disableColorWrite,\r\n this.drawBackFace,\r\n this.depthTest\r\n );\r\n });\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.depthReadOnly = this.depthReadOnly;\r\n passDisabled.stencilReadOnly = this.stencilReadOnly;\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setRenderTargetDepth(this.depthAttachmentTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n if (this.sourceTexture !== undefined) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n this.postProcess.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FrameGraph, FrameGraphRenderPass, FrameGraphTextureHandle } from "../../../index.js";
|
|
2
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
3
|
+
import { ThinSSAO2BlurPostProcess } from "../../../PostProcesses/thinSSAO2BlurPostProcess.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare class FrameGraphSSAO2BlurTask extends FrameGraphPostProcessTask {
|
|
8
|
+
private _isHorizontal;
|
|
9
|
+
readonly postProcess: ThinSSAO2BlurPostProcess;
|
|
10
|
+
depthTexture: FrameGraphTextureHandle;
|
|
11
|
+
constructor(name: string, frameGraph: FrameGraph, _isHorizontal: boolean, thinPostProcess?: ThinSSAO2BlurPostProcess);
|
|
12
|
+
record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
|
|
13
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
3
|
+
import { ThinSSAO2BlurPostProcess } from "../../../PostProcesses/thinSSAO2BlurPostProcess.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export class FrameGraphSSAO2BlurTask extends FrameGraphPostProcessTask {
|
|
8
|
+
constructor(name, frameGraph, _isHorizontal, thinPostProcess) {
|
|
9
|
+
super(name, frameGraph, thinPostProcess || new ThinSSAO2BlurPostProcess(name, frameGraph.engine, _isHorizontal));
|
|
10
|
+
this._isHorizontal = _isHorizontal;
|
|
11
|
+
}
|
|
12
|
+
record(skipCreationOfDisabledPasses = false) {
|
|
13
|
+
if (this.sourceTexture === undefined || this.depthTexture === undefined) {
|
|
14
|
+
throw new Error(`FrameGraphSSAO2BlurTask "${this.name}": sourceTexture and depthTexture are required`);
|
|
15
|
+
}
|
|
16
|
+
const pass = super.record(skipCreationOfDisabledPasses, (context) => {
|
|
17
|
+
context.setTextureSamplingMode(this.depthTexture, 2);
|
|
18
|
+
}, (context) => {
|
|
19
|
+
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "depthSampler", this.depthTexture);
|
|
20
|
+
});
|
|
21
|
+
this.postProcess.textureSize = this._isHorizontal ? this._outputWidth : this._outputHeight;
|
|
22
|
+
return pass;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ssao2BlurTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssao2BlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,2DAAoD;AAEvF;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,yBAAyB;IAKlE,YACI,IAAY,EACZ,UAAsB,EACd,aAAsB,EAC9B,eAA0C;QAE1C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QAHzG,kBAAa,GAAb,aAAa,CAAS;IAIlC,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,gDAAgD,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAC/F,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvG,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QAE3F,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderPass, FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { ThinSSAO2BlurPostProcess } from \"core/PostProcesses/thinSSAO2BlurPostProcess\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphSSAO2BlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinSSAO2BlurPostProcess;\r\n\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n constructor(\r\n name: string,\r\n frameGraph: FrameGraph,\r\n private _isHorizontal: boolean,\r\n thinPostProcess?: ThinSSAO2BlurPostProcess\r\n ) {\r\n super(name, frameGraph, thinPostProcess || new ThinSSAO2BlurPostProcess(name, frameGraph.engine, _isHorizontal));\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined) {\r\n throw new Error(`FrameGraphSSAO2BlurTask \"${this.name}\": sourceTexture and depthTexture are required`);\r\n }\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n context.setTextureSamplingMode(this.depthTexture, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n }\r\n );\r\n\r\n this.postProcess.textureSize = this._isHorizontal ? this._outputWidth : this._outputHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { FrameGraph, FrameGraphTextureHandle, Camera } from "../../../index.js";
|
|
2
|
+
import { FrameGraphTask } from "../../frameGraphTask.js";
|
|
3
|
+
import { ThinSSAO2RenderingPipeline } from "../../../PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js";
|
|
4
|
+
/**
|
|
5
|
+
* Task which applies a SSAO2 post process.
|
|
6
|
+
*/
|
|
7
|
+
export declare class FrameGraphSSAO2RenderingPipelineTask extends FrameGraphTask {
|
|
8
|
+
/**
|
|
9
|
+
* The source texture to apply the SSAO2 effect on.
|
|
10
|
+
*/
|
|
11
|
+
sourceTexture: FrameGraphTextureHandle;
|
|
12
|
+
/**
|
|
13
|
+
* The sampling mode to use for the source texture.
|
|
14
|
+
*/
|
|
15
|
+
sourceSamplingMode: number;
|
|
16
|
+
/**
|
|
17
|
+
* The depth texture used by the SSAO2 effect (Z coordinate in camera view space).
|
|
18
|
+
*/
|
|
19
|
+
depthTexture: FrameGraphTextureHandle;
|
|
20
|
+
/**
|
|
21
|
+
* The normal texture used by the SSAO2 effect (normal vector in camera view space).
|
|
22
|
+
*/
|
|
23
|
+
normalTexture: FrameGraphTextureHandle;
|
|
24
|
+
private _camera;
|
|
25
|
+
/**
|
|
26
|
+
* The camera used to render the scene.
|
|
27
|
+
*/
|
|
28
|
+
get camera(): Camera;
|
|
29
|
+
set camera(camera: Camera);
|
|
30
|
+
/**
|
|
31
|
+
* The target texture to render the SSAO2 effect to.
|
|
32
|
+
*/
|
|
33
|
+
targetTexture?: FrameGraphTextureHandle;
|
|
34
|
+
/**
|
|
35
|
+
* The output texture of the SSAO2 effect.
|
|
36
|
+
*/
|
|
37
|
+
readonly outputTexture: FrameGraphTextureHandle;
|
|
38
|
+
/**
|
|
39
|
+
* The SSAO2 Rendering pipeline.
|
|
40
|
+
*/
|
|
41
|
+
readonly ssao: ThinSSAO2RenderingPipeline;
|
|
42
|
+
/**
|
|
43
|
+
* The name of the task.
|
|
44
|
+
*/
|
|
45
|
+
get name(): string;
|
|
46
|
+
set name(name: string);
|
|
47
|
+
/**
|
|
48
|
+
* The ratio between the SSAO texture size and the source texture size
|
|
49
|
+
*/
|
|
50
|
+
readonly ratioSSAO: number;
|
|
51
|
+
/**
|
|
52
|
+
* The ratio between the SSAO blur texture size and the source texture size
|
|
53
|
+
*/
|
|
54
|
+
readonly ratioBlur: number;
|
|
55
|
+
/**
|
|
56
|
+
* The texture type used by the different post processes created by SSAO2.
|
|
57
|
+
* It's a read-only property. If you want to change it, you must recreate the task and pass the appropriate texture type to the constructor.
|
|
58
|
+
*/
|
|
59
|
+
readonly textureType: number;
|
|
60
|
+
private readonly _ssao;
|
|
61
|
+
private readonly _ssaoBlurX;
|
|
62
|
+
private readonly _ssaoBlurY;
|
|
63
|
+
private readonly _ssaoCombine;
|
|
64
|
+
/**
|
|
65
|
+
* Constructs a SSAO2 rendering pipeline task.
|
|
66
|
+
* @param name The name of the task.
|
|
67
|
+
* @param frameGraph The frame graph this task belongs to.
|
|
68
|
+
* @param ratioSSAO The ratio between the SSAO texture size and the source texture size
|
|
69
|
+
* @param ratioBlur The ratio between the SSAO blur texture size and the source texture size
|
|
70
|
+
* @param textureType The texture type used by the different post processes created by SSAO2 (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)
|
|
71
|
+
*/
|
|
72
|
+
constructor(name: string, frameGraph: FrameGraph, ratioSSAO: number, ratioBlur: number, textureType?: number);
|
|
73
|
+
isReady(): boolean;
|
|
74
|
+
record(): void;
|
|
75
|
+
dispose(): void;
|
|
76
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
|
|
2
|
+
import { FrameGraphTask } from "../../frameGraphTask.js";
|
|
3
|
+
import { ThinSSAO2RenderingPipeline } from "../../../PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js";
|
|
4
|
+
import { FrameGraphSSAO2Task } from "./ssao2Task.js";
|
|
5
|
+
import { FrameGraphSSAO2BlurTask } from "./ssao2BlurTask.js";
|
|
6
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
7
|
+
/**
|
|
8
|
+
* Task which applies a SSAO2 post process.
|
|
9
|
+
*/
|
|
10
|
+
export class FrameGraphSSAO2RenderingPipelineTask extends FrameGraphTask {
|
|
11
|
+
/**
|
|
12
|
+
* The camera used to render the scene.
|
|
13
|
+
*/
|
|
14
|
+
get camera() {
|
|
15
|
+
return this._camera;
|
|
16
|
+
}
|
|
17
|
+
set camera(camera) {
|
|
18
|
+
if (camera === this._camera) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this._camera = camera;
|
|
22
|
+
this.ssao.camera = camera;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The name of the task.
|
|
26
|
+
*/
|
|
27
|
+
get name() {
|
|
28
|
+
return this._name;
|
|
29
|
+
}
|
|
30
|
+
set name(name) {
|
|
31
|
+
this._name = name;
|
|
32
|
+
if (this._ssao) {
|
|
33
|
+
this._ssao.name = `${name} SSAO2 main`;
|
|
34
|
+
}
|
|
35
|
+
if (this._ssaoBlurX) {
|
|
36
|
+
this._ssaoBlurX.name = `${name} SSAO2 Blur X`;
|
|
37
|
+
}
|
|
38
|
+
if (this._ssaoBlurY) {
|
|
39
|
+
this._ssaoBlurY.name = `${name} SSAO2 Blur Y`;
|
|
40
|
+
}
|
|
41
|
+
if (this._ssaoCombine) {
|
|
42
|
+
this._ssaoCombine.name = `${name} SSAO2 Combine`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Constructs a SSAO2 rendering pipeline task.
|
|
47
|
+
* @param name The name of the task.
|
|
48
|
+
* @param frameGraph The frame graph this task belongs to.
|
|
49
|
+
* @param ratioSSAO The ratio between the SSAO texture size and the source texture size
|
|
50
|
+
* @param ratioBlur The ratio between the SSAO blur texture size and the source texture size
|
|
51
|
+
* @param textureType The texture type used by the different post processes created by SSAO2 (default: 0)
|
|
52
|
+
*/
|
|
53
|
+
constructor(name, frameGraph, ratioSSAO, ratioBlur, textureType = 0) {
|
|
54
|
+
super(name, frameGraph);
|
|
55
|
+
/**
|
|
56
|
+
* The sampling mode to use for the source texture.
|
|
57
|
+
*/
|
|
58
|
+
this.sourceSamplingMode = 2;
|
|
59
|
+
this.ratioSSAO = ratioSSAO;
|
|
60
|
+
this.ratioBlur = ratioBlur;
|
|
61
|
+
this.textureType = textureType;
|
|
62
|
+
this.ssao = new ThinSSAO2RenderingPipeline(name, frameGraph.scene);
|
|
63
|
+
this._ssao = new FrameGraphSSAO2Task(`${name} SSAO2 main`, this._frameGraph, this.ssao._ssaoPostProcess);
|
|
64
|
+
this._ssaoBlurX = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur X`, this._frameGraph, true, this.ssao._ssaoBlurXPostProcess);
|
|
65
|
+
this._ssaoBlurY = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur Y`, this._frameGraph, false, this.ssao._ssaoBlurYPostProcess);
|
|
66
|
+
this._ssaoCombine = new FrameGraphPostProcessTask(`${name} SSAO2 Combine`, this._frameGraph, this.ssao._ssaoCombinePostProcess);
|
|
67
|
+
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
68
|
+
}
|
|
69
|
+
isReady() {
|
|
70
|
+
return this.ssao.isReady();
|
|
71
|
+
}
|
|
72
|
+
record() {
|
|
73
|
+
if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) {
|
|
74
|
+
throw new Error(`FrameGraphSSAO2RenderingPipelineTask "${this.name}": sourceTexture, depthTexture, normalTexture and camera are required`);
|
|
75
|
+
}
|
|
76
|
+
const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);
|
|
77
|
+
this._ssao.sourceTexture = this.sourceTexture;
|
|
78
|
+
this._ssao.sourceSamplingMode = this.sourceSamplingMode;
|
|
79
|
+
this._ssao.camera = this.camera;
|
|
80
|
+
this._ssao.depthTexture = this.depthTexture;
|
|
81
|
+
this._ssao.normalTexture = this.normalTexture;
|
|
82
|
+
const textureSize = {
|
|
83
|
+
width: Math.floor(sourceTextureDescription.size.width * this.ratioSSAO) || 1,
|
|
84
|
+
height: Math.floor(sourceTextureDescription.size.height * this.ratioSSAO) || 1,
|
|
85
|
+
};
|
|
86
|
+
const textureCreationOptions = {
|
|
87
|
+
size: textureSize,
|
|
88
|
+
options: {
|
|
89
|
+
createMipMaps: false,
|
|
90
|
+
types: [this.textureType],
|
|
91
|
+
formats: [5],
|
|
92
|
+
samples: 1,
|
|
93
|
+
useSRGBBuffers: [false],
|
|
94
|
+
labels: [""],
|
|
95
|
+
},
|
|
96
|
+
sizeIsPercentage: false,
|
|
97
|
+
};
|
|
98
|
+
const ssaoTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssao.name, textureCreationOptions);
|
|
99
|
+
// SSAO main post process
|
|
100
|
+
this._ssao.targetTexture = ssaoTextureHandle;
|
|
101
|
+
this._ssao.record(true);
|
|
102
|
+
// SSAO Blur X & Y
|
|
103
|
+
textureSize.width = Math.floor(sourceTextureDescription.size.width * this.ratioBlur) || 1;
|
|
104
|
+
textureSize.height = Math.floor(sourceTextureDescription.size.height * this.ratioBlur) || 1;
|
|
105
|
+
const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);
|
|
106
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name + " Output", sourceTextureCreationOptions);
|
|
107
|
+
const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurX.name, textureCreationOptions);
|
|
108
|
+
this._ssaoBlurX.sourceTexture = ssaoTextureHandle;
|
|
109
|
+
this._ssaoBlurX.depthTexture = this.depthTexture;
|
|
110
|
+
this._ssaoBlurX.sourceSamplingMode = 2;
|
|
111
|
+
this._ssaoBlurX.targetTexture = blurXTextureHandle;
|
|
112
|
+
this._ssaoBlurX.record(true);
|
|
113
|
+
const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurY.name, textureCreationOptions);
|
|
114
|
+
this._ssaoBlurY.sourceTexture = blurXTextureHandle;
|
|
115
|
+
this._ssaoBlurY.depthTexture = this.depthTexture;
|
|
116
|
+
this._ssaoBlurY.sourceSamplingMode = 2;
|
|
117
|
+
this._ssaoBlurY.targetTexture = blurYTextureHandle;
|
|
118
|
+
this._ssaoBlurY.record(true);
|
|
119
|
+
// SSAO Combine
|
|
120
|
+
this._ssaoCombine.sourceTexture = this.sourceTexture;
|
|
121
|
+
this._ssaoCombine.sourceSamplingMode = this.sourceSamplingMode;
|
|
122
|
+
this._ssaoCombine.targetTexture = this.outputTexture;
|
|
123
|
+
const combinerPass = this._ssaoCombine.record(true, (context) => {
|
|
124
|
+
context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);
|
|
125
|
+
context.setTextureSamplingMode(blurYTextureHandle, 2);
|
|
126
|
+
}, (context) => {
|
|
127
|
+
context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect, "textureSampler", blurYTextureHandle);
|
|
128
|
+
context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect, "originalColor", this.sourceTexture);
|
|
129
|
+
});
|
|
130
|
+
combinerPass.addDependencies(blurYTextureHandle);
|
|
131
|
+
const passDisabled = this._frameGraph.addRenderPass(this.name + "_disabled", true);
|
|
132
|
+
passDisabled.addDependencies(this.sourceTexture);
|
|
133
|
+
passDisabled.setRenderTarget(this.outputTexture);
|
|
134
|
+
passDisabled.setExecuteFunc((context) => {
|
|
135
|
+
context.copyTexture(this.sourceTexture);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
dispose() {
|
|
139
|
+
this._ssao.dispose();
|
|
140
|
+
this._ssaoBlurX.dispose();
|
|
141
|
+
this._ssaoBlurY.dispose();
|
|
142
|
+
this._ssaoCombine.dispose();
|
|
143
|
+
this.ssao.dispose();
|
|
144
|
+
super.dispose();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=ssao2RenderingPipelineTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssao2RenderingPipelineTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, Camera, FrameGraphTextureCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinSSAO2RenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline\";\r\nimport { FrameGraphSSAO2Task } from \"./ssao2Task\";\r\nimport { FrameGraphSSAO2BlurTask } from \"./ssao2BlurTask\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a SSAO2 post process.\r\n */\r\nexport class FrameGraphSSAO2RenderingPipelineTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the SSAO2 effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture used by the SSAO2 effect (Z coordinate in camera view space).\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal texture used by the SSAO2 effect (normal vector in camera view space).\r\n */\r\n public normalTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n if (camera === this._camera) {\r\n return;\r\n }\r\n\r\n this._camera = camera;\r\n\r\n this.ssao.camera = camera;\r\n }\r\n\r\n /**\r\n * The target texture to render the SSAO2 effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the SSAO2 effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The SSAO2 Rendering pipeline.\r\n */\r\n public readonly ssao: ThinSSAO2RenderingPipeline;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._ssao) {\r\n this._ssao.name = `${name} SSAO2 main`;\r\n }\r\n if (this._ssaoBlurX) {\r\n this._ssaoBlurX.name = `${name} SSAO2 Blur X`;\r\n }\r\n if (this._ssaoBlurY) {\r\n this._ssaoBlurY.name = `${name} SSAO2 Blur Y`;\r\n }\r\n if (this._ssaoCombine) {\r\n this._ssaoCombine.name = `${name} SSAO2 Combine`;\r\n }\r\n }\r\n\r\n /**\r\n * The ratio between the SSAO texture size and the source texture size\r\n */\r\n public readonly ratioSSAO: number;\r\n\r\n /**\r\n * The ratio between the SSAO blur texture size and the source texture size\r\n */\r\n public readonly ratioBlur: number;\r\n\r\n /**\r\n * The texture type used by the different post processes created by SSAO2.\r\n * It's a read-only property. If you want to change it, you must recreate the task and pass the appropriate texture type to the constructor.\r\n */\r\n public readonly textureType: number;\r\n\r\n private readonly _ssao: FrameGraphSSAO2Task;\r\n private readonly _ssaoBlurX: FrameGraphSSAO2BlurTask;\r\n private readonly _ssaoBlurY: FrameGraphSSAO2BlurTask;\r\n private readonly _ssaoCombine: FrameGraphPostProcessTask;\r\n\r\n /**\r\n * Constructs a SSAO2 rendering pipeline task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param ratioSSAO The ratio between the SSAO texture size and the source texture size\r\n * @param ratioBlur The ratio between the SSAO blur texture size and the source texture size\r\n * @param textureType The texture type used by the different post processes created by SSAO2 (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, ratioSSAO: number, ratioBlur: number, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph);\r\n\r\n this.ratioSSAO = ratioSSAO;\r\n this.ratioBlur = ratioBlur;\r\n this.textureType = textureType;\r\n\r\n this.ssao = new ThinSSAO2RenderingPipeline(name, frameGraph.scene);\r\n\r\n this._ssao = new FrameGraphSSAO2Task(`${name} SSAO2 main`, this._frameGraph, this.ssao._ssaoPostProcess);\r\n this._ssaoBlurX = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur X`, this._frameGraph, true, this.ssao._ssaoBlurXPostProcess);\r\n this._ssaoBlurY = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur Y`, this._frameGraph, false, this.ssao._ssaoBlurYPostProcess);\r\n this._ssaoCombine = new FrameGraphPostProcessTask(`${name} SSAO2 Combine`, this._frameGraph, this.ssao._ssaoCombinePostProcess);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.ssao.isReady();\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphSSAO2RenderingPipelineTask \"${this.name}\": sourceTexture, depthTexture, normalTexture and camera are required`);\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n this._ssao.sourceTexture = this.sourceTexture;\r\n this._ssao.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssao.camera = this.camera;\r\n this._ssao.depthTexture = this.depthTexture;\r\n this._ssao.normalTexture = this.normalTexture;\r\n\r\n const textureSize = {\r\n width: Math.floor(sourceTextureDescription.size.width * this.ratioSSAO) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height * this.ratioSSAO) || 1,\r\n };\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.textureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const ssaoTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssao.name, textureCreationOptions);\r\n\r\n // SSAO main post process\r\n this._ssao.targetTexture = ssaoTextureHandle;\r\n this._ssao.record(true);\r\n\r\n // SSAO Blur X & Y\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width * this.ratioBlur) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height * this.ratioBlur) || 1;\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name + \" Output\", sourceTextureCreationOptions);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurX.name, textureCreationOptions);\r\n\r\n this._ssaoBlurX.sourceTexture = ssaoTextureHandle!;\r\n this._ssaoBlurX.depthTexture = this.depthTexture;\r\n this._ssaoBlurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssaoBlurX.targetTexture = blurXTextureHandle;\r\n this._ssaoBlurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurY.name, textureCreationOptions);\r\n\r\n this._ssaoBlurY.sourceTexture = blurXTextureHandle;\r\n this._ssaoBlurY.depthTexture = this.depthTexture;\r\n this._ssaoBlurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssaoBlurY.targetTexture = blurYTextureHandle;\r\n this._ssaoBlurY.record(true);\r\n\r\n // SSAO Combine\r\n this._ssaoCombine.sourceTexture = this.sourceTexture;\r\n this._ssaoCombine.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssaoCombine.targetTexture = this.outputTexture;\r\n const combinerPass = this._ssaoCombine.record(\r\n true,\r\n (context) => {\r\n context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);\r\n context.setTextureSamplingMode(blurYTextureHandle, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect!, \"textureSampler\", blurYTextureHandle);\r\n context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect!, \"originalColor\", this.sourceTexture);\r\n }\r\n );\r\n\r\n combinerPass.addDependencies(blurYTextureHandle);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._ssao.dispose();\r\n this._ssaoBlurX.dispose();\r\n this._ssaoBlurY.dispose();\r\n this._ssaoCombine.dispose();\r\n this.ssao.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FrameGraph, FrameGraphRenderPass, Camera, FrameGraphTextureHandle } from "../../../index.js";
|
|
2
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
3
|
+
import { ThinSSAO2PostProcess } from "../../../PostProcesses/thinSSAO2PostProcess.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare class FrameGraphSSAO2Task extends FrameGraphPostProcessTask {
|
|
8
|
+
depthTexture: FrameGraphTextureHandle;
|
|
9
|
+
normalTexture: FrameGraphTextureHandle;
|
|
10
|
+
camera: Camera;
|
|
11
|
+
readonly postProcess: ThinSSAO2PostProcess;
|
|
12
|
+
constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinSSAO2PostProcess);
|
|
13
|
+
record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
|
|
14
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
3
|
+
import { ThinSSAO2PostProcess } from "../../../PostProcesses/thinSSAO2PostProcess.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export class FrameGraphSSAO2Task extends FrameGraphPostProcessTask {
|
|
8
|
+
constructor(name, frameGraph, thinPostProcess) {
|
|
9
|
+
super(name, frameGraph, thinPostProcess || new ThinSSAO2PostProcess(name, frameGraph.scene));
|
|
10
|
+
}
|
|
11
|
+
record(skipCreationOfDisabledPasses = false) {
|
|
12
|
+
if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) {
|
|
13
|
+
throw new Error(`FrameGraphSSAO2Task "${this.name}": sourceTexture, depthTexture, normalTexture and camera are required`);
|
|
14
|
+
}
|
|
15
|
+
const pass = super.record(skipCreationOfDisabledPasses, (context) => {
|
|
16
|
+
this.postProcess.camera = this.camera;
|
|
17
|
+
context.setTextureSamplingMode(this.depthTexture, 2);
|
|
18
|
+
context.setTextureSamplingMode(this.normalTexture, 2);
|
|
19
|
+
}, (context) => {
|
|
20
|
+
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "depthSampler", this.depthTexture);
|
|
21
|
+
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "normalSampler", this.normalTexture);
|
|
22
|
+
});
|
|
23
|
+
pass.addDependencies([this.depthTexture]);
|
|
24
|
+
this.postProcess.textureWidth = this._sourceWidth;
|
|
25
|
+
this.postProcess.textureHeight = this._sourceHeight;
|
|
26
|
+
return pass;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=ssao2Task.js.map
|