{"record":{"id":"30d5d32d4992fb19","repo":"BabylonJS/Babylon.js","slug":"ssr-post-process-this-name-automatic-thickne","errorCode":null,"errorMessage":"SSR post process \"${this.name}\": Automatic thickness computation requires a back depth texture to be connected!","messagePattern":"SSR post process \"(.+?)\": Automatic thickness computation requires a back depth texture to be connected!","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/dev/core/src/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.ts","lineNumber":430,"sourceCode":"    /**\r\n     * Gets the geometry back depth input component\r\n     */\r\n    public get geomBackDepth(): NodeRenderGraphConnectionPoint {\r\n        return this._inputs[6];\r\n    }\r\n\r\n    protected override _buildBlock(state: NodeRenderGraphBuildState) {\r\n        super._buildBlock(state);\r\n\r\n        this._frameGraphTask.normalTexture = this.geomNormal.connectedPoint?.value as FrameGraphTextureHandle;\r\n        this._frameGraphTask.depthTexture = this.geomDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n        this._frameGraphTask.reflectivityTexture = this.geomReflectivity.connectedPoint?.value as FrameGraphTextureHandle;\r\n        this._frameGraphTask.backDepthTexture = this.geomBackDepth.connectedPoint?.value as FrameGraphTextureHandle;\r\n        this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera;\r\n\r\n        if (this.enableAutomaticThicknessComputation) {\r\n            if (!this._frameGraphTask.backDepthTexture) {\r\n                throw new Error(`SSR post process \"${this.name}\": Automatic thickness computation requires a back depth texture to be connected!`);\r\n            }\r\n\r\n            const geomBackDepthOwnerBlock = this.geomBackDepth.connectedPoint!.ownerBlock;\r\n            if (geomBackDepthOwnerBlock.getClassName() === \"NodeRenderGraphGeometryRendererBlock\") {\r\n                const geometryBackFaceRendererBlock = geomBackDepthOwnerBlock as NodeRenderGraphGeometryRendererBlock;\r\n                if (!geometryBackFaceRendererBlock.reverseCulling) {\r\n                    throw new Error(\r\n                        `SSR post process \"${this.name}\": Automatic thickness computation requires the geometry renderer block for the back depth texture to have reverse culling enabled!`\r\n                    );\r\n                }\r\n\r\n                if (this._frameGraphTask.depthTexture) {\r\n                    const geomDepthOwnerBlock = this.geomDepth.connectedPoint!.ownerBlock;\r\n                    if (geomDepthOwnerBlock.getClassName() === \"NodeRenderGraphGeometryRendererBlock\") {\r\n                        const geomDepthConnectionPointType = this.geomDepth.connectedPoint!.type;\r\n                        const geomBackDepthConnectionPointType = this.geomBackDepth.connectedPoint!.type;\r\n\r\n                        if (geomDepthConnectionPointType !== geomBackDepthConnectionPointType) {\r","sourceCodeStart":412,"sourceCodeEnd":448,"githubUrl":"https://github.com/BabylonJS/Babylon.js/blob/0592b347b8a4ee0236089ea86a749cacfdb266d8/packages/dev/core/src/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.ts#L412-L448","documentation":"The SSR node render graph block requires a back depth texture when enableAutomaticThicknessComputation is on, because screen-space thickness needs depth of back faces. _buildBlock throws at graph build time if the geomBackDepth input is not connected.","triggerScenarios":"Building a NodeRenderGraph containing an ssrPostProcessBlock with enableAutomaticThicknessComputation=true while the geomBackDepth input remains unconnected.","commonSituations":"Enabling automatic thickness in a render graph editor or code but forgetting to wire a geometry renderer's back-depth output; toggling the option after the connection was removed.","solutions":["Connect a geometry renderer block's back depth output to ssrBlock.geomBackDepth","Set enableAutomaticThicknessComputation=false if you supply manual thickness instead","Verify the connection via geomBackDepth.connectedPoint before build"],"exampleFix":"// before\nssrBlock.enableAutomaticThicknessComputation = true; // geomBackDepth not connected\n// after\nssrBlock.geomBackDepth.connectTo(geomRendererBlock.backDepth);\nssrBlock.enableAutomaticThicknessComputation = true;","handlingStrategy":"validation","validationCode":"if (ssrBlock.enableAutomaticThicknessComputation && !ssrBlock.geomBackDepth.connectedPoint) {\n  throw new Error('Connect geomBackDepth before enabling automatic thickness');\n}","typeGuard":"function hasBackDepth(b) { return !!b.geomBackDepth.connectedPoint?.value; }","tryCatchPattern":"try { graph.build(); } catch (e) { if (e.message.includes('requires a back depth texture')) { ssrBlock.enableAutomaticThicknessComputation = false; graph.build(); } else { throw e; } }","preventionTips":["Always wire geomBackDepth from a geometry renderer before enabling automatic thickness","Check connectedPoint on all SSR inputs in a pre-build sanity function","Disable automatic thickness if your setup has no back-face depth pass"],"tags":["render-graph","ssr","missing-connection"],"backgroundTag":"missing-required-input","analyzedSha":"0592b347b8a4ee0236089ea86a749cacfdb266d8","analyzedAt":"2026-08-30T15:11:20.442Z","schemaVersion":2},"datasetVersion":"2026-08-30T18:17:15.746Z"}