@zephyr3d/scene 0.9.16 → 0.9.17

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.
@@ -1 +1 @@
1
- {"version":3,"file":"shadow.js","sources":["../../src/shaders/shadow.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { hasDepthChannel } from '@zephyr3d/device';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from './misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { smoothNoise3D } from './noise';\r\nimport { getDevice } from '../app/api';\r\n\r\n/*\r\n const PCF_KERNEL_3x3 = [\r\n [0.5, 1.0, 0.5],\r\n [1.0, 1.0, 1.0],\r\n [0.5, 1.0, 0.5]\r\n ];\r\n const PCF_KERNEL_SUM_3x3 = 7;\r\n\r\n const PCF_KERNEL_5x5 = [\r\n [0.0, 0.5, 1.0, 0.5, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 0.5, 1.0, 0.5, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_5x5 = 17;\r\n\r\n const PCF_KERNEL_7x7 = [\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_7x7 = 33;\r\n\r\n const PCF_KERNEL_9x9 = [\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_9x9 = 53;\r\n */\r\n\r\nconst PCF_POISSON_DISC = [\r\n [0.511749, 0.547686],\r\n [0.58929, 0.257224],\r\n [0.165018, 0.57663],\r\n [0.407692, 0.742285],\r\n [0.707012, 0.646523],\r\n [0.31463, 0.466825],\r\n [0.801257, 0.485186],\r\n [0.418136, 0.146517],\r\n [0.579889, 0.0368284],\r\n [0.79801, 0.140114],\r\n [-0.0413185, 0.371455],\r\n [-0.0529108, 0.627352],\r\n [0.0821375, 0.882071],\r\n [0.17308, 0.301207],\r\n [-0.120452, 0.867216],\r\n [0.371096, 0.916454],\r\n [-0.178381, 0.146101],\r\n [-0.276489, 0.550525],\r\n [0.12542, 0.126643],\r\n [-0.296654, 0.286879],\r\n [0.261744, -0.00604975],\r\n [-0.213417, 0.715776],\r\n [0.425684, -0.153211],\r\n [-0.480054, 0.321357],\r\n [-0.0717878, -0.0250567],\r\n [-0.328775, -0.169666],\r\n [-0.394923, 0.130802],\r\n [-0.553681, -0.176777],\r\n [-0.722615, 0.120616],\r\n [-0.693065, 0.309017],\r\n [0.603193, 0.791471],\r\n [-0.0754941, -0.297988],\r\n [0.109303, -0.156472],\r\n [0.260605, -0.280111],\r\n [0.129731, -0.487954],\r\n [-0.537315, 0.520494],\r\n [-0.42758, 0.800607],\r\n [0.77309, -0.0728102],\r\n [0.908777, 0.328356],\r\n [0.985341, 0.0759158],\r\n [0.947536, -0.11837],\r\n [-0.103315, -0.610747],\r\n [0.337171, -0.584],\r\n [0.210919, -0.720055],\r\n [0.41894, -0.36769],\r\n [-0.254228, -0.49368],\r\n [-0.428562, -0.404037],\r\n [-0.831732, -0.189615],\r\n [-0.922642, 0.0888026],\r\n [-0.865914, 0.427795],\r\n [0.706117, -0.311662],\r\n [0.545465, -0.520942],\r\n [-0.695738, 0.664492],\r\n [0.389421, -0.899007],\r\n [0.48842, -0.708054],\r\n [0.760298, -0.62735],\r\n [-0.390788, -0.707388],\r\n [-0.591046, -0.686721],\r\n [-0.769903, -0.413775],\r\n [-0.604457, -0.502571],\r\n [-0.557234, 0.00451362],\r\n [0.147572, -0.924353],\r\n [-0.0662488, -0.892081],\r\n [0.863832, -0.4072]\r\n];\r\n\r\nfunction getPCSSRotationMatrix(\r\n scope: PBInsideFunctionScope,\r\n sampleCoord: PBShaderExp,\r\n temporalJitter: boolean\r\n) {\r\n const funcName = `lib_getPCSSRotationMatrix_${temporalJitter ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec2('sampleCoord')], function () {\r\n if (temporalJitter) {\r\n this.$l.frame = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), pb.mul(this.frame, 0.61803398875))),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(\r\n pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x)\r\n );\r\n } else {\r\n this.$return(pb.mat2(0.8660254, 0.5, -0.5, 0.8660254));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapTexelSize(scope: PBInsideFunctionScope) {\r\n return scope.$builder.div(1, ShaderHelper.getShadowCameraParams(scope).z) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapSize(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getShadowCameraParams(scope).z as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeShadowMapDepth(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n targetFormat: TextureFormat\r\n) {\r\n const funcNameComputeShadowMapDepth = 'Z_computeShadowMapDepth';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadowMapDepth, [pb.vec3('worldPos')], function () {\r\n if (hasDepthChannel(targetFormat)) {\r\n // use native shadowmap\r\n this.$return(\r\n pb.vec4(\r\n pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z,\r\n 0,\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.depth = pb.float();\r\n this.$l.lightType = ShaderHelper.getLightTypeForShadow(this);\r\n this.$if(\r\n pb.or(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), pb.equal(this.lightType, LIGHT_TYPE_RECT)),\r\n function () {\r\n this.depth = pb.emulateDepthClamp\r\n ? pb.clamp(this.$inputs.clamppedDepth, 0, 1)\r\n : this.$builtins.fragCoord.z;\r\n }\r\n )\r\n .$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.length(this.lightSpacePos.xyz), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n })\r\n .$else(function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.neg(this.lightSpacePos.z), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n });\r\n this.$return(\r\n targetFormat === 'rgba8unorm'\r\n ? encodeNormalizedFloatToRGBA(this, this.depth)\r\n : pb.vec4(this.depth, 0, 0, 1)\r\n );\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadowMapDepth](worldPos) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeReceiverPlaneDepthBias(scope: PBInsideFunctionScope, texCoord: PBShaderExp) {\r\n const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeReceiverPlaneDepthBias, [pb.vec4('coords')], function () {\r\n this.$l.dx = pb.dpdx(this.coords);\r\n this.$l.dy = pb.dpdy(this.coords);\r\n this.$l.biasMultiply = pb.float(1);\r\n this.$l.uv = pb.vec2(\r\n pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)),\r\n pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z))\r\n );\r\n this.$l.uv = pb.mul(\r\n this.$l.uv,\r\n pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x)))\r\n );\r\n // from unity shader\r\n this.$l.minFractionalError = pb.float(0.01);\r\n this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));\r\n this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);\r\n // return\r\n this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));\r\n });\r\n return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getRandomRotationMatrix(scope: PBInsideFunctionScope, sampleCoord: PBShaderExp) {\r\n const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';\r\n const pb = scope.$builder;\r\n pb.func(funcNameGetRandomRotationMatrix, [pb.vec2('sampleCoord')], function () {\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), 0)),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));\r\n });\r\n return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getPoissonDiscSampleRadius(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getDepthBiasValues(scope).z as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPCF(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n offset: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `${cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF'}_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.vec2('offset'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n const sampleDepth = this.z;\r\n const uv = pb.add(this.coords, this.offset);\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n uv,\r\n this.cascade,\r\n sampleDepth\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), uv, sampleDepth)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), uv, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), uv, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(sampleDepth, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, depth, offset, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcNameSampleShadowMap,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),\r\n pb.float('z'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z), 0, 1)\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n } else {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n this.cascade,\r\n this.z\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n }\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade)\r\n : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPoissonTap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n filterRadius: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowMapPoissonTap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.float('filterRadius'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.tap = pb.float(0);\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.tapInside = pb.bool();\r\n const offsets = [\r\n [-0.375, -0.375],\r\n [0.375, -0.375],\r\n [-0.375, 0.375],\r\n [0.375, 0.375]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.tapCoord = pb.add(this.coords, pb.mul(pb.vec2(ox, oy), this.filterRadius));\r\n this.tapInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.tapCoord.x, 0),\r\n pb.lessThanEqual(this.tapCoord.x, 1),\r\n pb.greaterThanEqual(this.tapCoord.y, 0),\r\n pb.lessThanEqual(this.tapCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.tapInside, function () {\r\n this.tap = pb.add(\r\n this.tap,\r\n sampleShadowMap(this, lightType, shadowMapFormat, this.tapCoord, this.z, this.cascade)\r\n );\r\n }).$else(function () {\r\n this.tap = pb.add(this.tap, 1);\r\n });\r\n }\r\n this.$return(pb.mul(this.tap, 0.25));\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcName](pos, depth, filterRadius, cascade)\r\n : pb.getGlobalScope()[funcName](pos, depth, filterRadius)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowDepthPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.vec4('bounds'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.depth = pb.float(1);\r\n this.$l.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.coords.x, this.bounds.x),\r\n pb.lessThanEqual(this.coords.x, this.bounds.z),\r\n pb.greaterThanEqual(this.coords.y, this.bounds.y),\r\n pb.lessThanEqual(this.coords.y, this.bounds.w)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n this.$l.boundsPadding = pb.mul(\r\n pb.sub(this.bounds.zw, this.bounds.xy),\r\n getShadowMapTexelSize(this),\r\n 0.5\r\n );\r\n this.$l.sampleCoord = pb.clamp(\r\n this.coords,\r\n pb.add(this.bounds.xy, this.boundsPadding),\r\n pb.sub(this.bounds.zw, this.boundsPadding)\r\n );\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, 0);\r\n this.depth =\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x;\r\n });\r\n this.$return(this.depth);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, bounds, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction compareShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n sampleDepth: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n transitionWidth: PBShaderExp\r\n) {\r\n const funcName = 'lib_compareShadowDepthPCSS';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.float('sampleDepth'), pb.float('compareDepth'), pb.float('transitionWidth')],\r\n function () {\r\n this.$l.depthDelta = pb.sub(this.sampleDepth, this.compareDepth);\r\n this.$return(pb.smoothStep(pb.neg(this.transitionWidth), this.transitionWidth, this.depthDelta));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](sampleDepth, compareDepth, transitionWidth) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowPCFPCSS_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('coords'),\r\n pb.vec4('bounds'),\r\n pb.float('compareDepth'),\r\n pb.vec2('texelSize'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.texelSize), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.tapCompareDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.tapCoord = pb.add(this.coords, this.offset);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.tapCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.tapCompareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.compareDepth, pb.dot(this.offset, this.receiverPlaneDepthBias.xy))\r\n : this.compareDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.tapCompareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](pos, bounds, compareDepth, texelSize, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction findBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n texCoord: PBShaderExp,\r\n bounds: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_findBlockerPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec4('texCoord'),\r\n pb.vec4('bounds'),\r\n pb.vec2('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.texCoord.z)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](texCoord, bounds, searchRadius, tapCount, transitionWidth, matrix, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(scope: PBInsideFunctionScope, distance: PBShaderExp, occluder: PBShaderExp) {\r\n const funcNameChebyshevUpperBound = 'lib_chebyshevUpperBound';\r\n const pb = scope.$builder;\r\n pb.func(funcNameChebyshevUpperBound, [pb.float('distance'), pb.vec3('occluder')], function () {\r\n this.$l.shadow = pb.float(1);\r\n this.$l.coverage = this.occluder.z;\r\n this.$l.invCoverage = pb.div(1, pb.max(this.coverage, 0.00001));\r\n this.$l.moments = pb.mul(this.occluder.xy, this.invCoverage);\r\n this.$l.test = pb.step(this.distance, this.moments.x);\r\n this.$if(pb.notEqual(this.test, 1), function () {\r\n this.$l.d = pb.sub(this.distance, this.moments.x);\r\n this.$l.variance = pb.max(pb.sub(this.moments.y, pb.mul(this.moments.x, this.moments.x)), 0.000002);\r\n const darkness = ShaderHelper.getDepthBiasValues(this).z;\r\n this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));\r\n this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);\r\n });\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.coverage, 0, 1));\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowVSM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowVSM = 'lib_filterShadowVSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowVSM,\r\n [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xyz, 0);\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.w,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n } else {\r\n if (getDevice().type !== 'webgl' && cascade) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.texCoord.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xy, 0);\r\n }\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.z,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowESM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n logSpace: boolean,\r\n shadowVertex: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n depthBias?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowESM = 'lib_filterShadowESM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowESM,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),\r\n ...(cascade ? [pb.int('cascade')] : []),\r\n ...(depthBias ? [pb.float('depthBias')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.depth = pb.div(\r\n pb.length(this.shadowVertex.xyz),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xyz, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n } else {\r\n if (cascade && getDevice().type !== 'webgl') {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowVertex.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xy, 0);\r\n }\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n if (lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowVertex.z,\r\n this.nearFar\r\n );\r\n } else {\r\n this.$l.depth = this.shadowVertex.z;\r\n }\r\n }\r\n if (depthBias) {\r\n this.depth = pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n this.$l.shadow = logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(this.shadowTex.x, pb.mul(depthScale, this.depth)))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1);\r\n if (shadowMapFormat !== 'rgba8unorm') {\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.shadowTex.y, 0, 1));\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowESM\r\n ](shadowVertex, ...(cascade ? [cascade] : []), ...(depthBias ? [depthBias] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCF(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n kernelSize: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCF,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n const shadowMapTexelSize = getShadowMapTexelSize(this);\r\n this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));\r\n this.$l.st = pb.fract(this.uv);\r\n this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));\r\n this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);\r\n this.$l.shadow = pb.float(0);\r\n if (kernelSize === 3) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));\r\n this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));\r\n this.$l.u = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1),\r\n pb.add(pb.div(this.st.x, this.uvw1.x), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1),\r\n pb.add(pb.div(this.st.y, this.uvw1.y), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 16);\r\n } else if (kernelSize === 5) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));\r\n this.$l.uvw1 = pb.vec2(7);\r\n this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));\r\n this.$l.u = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2),\r\n pb.div(pb.add(this.st.x, 3), this.uvw1.x),\r\n pb.add(pb.div(this.st.x, this.uvw2.x), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2),\r\n pb.div(pb.add(this.st.y, 3), this.uvw1.y),\r\n pb.add(pb.div(this.st.y, this.uvw2.y), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 144);\r\n } else if (kernelSize === 7) {\r\n this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));\r\n this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));\r\n this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));\r\n this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);\r\n this.$l.u = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1),\r\n pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3)\r\n );\r\n this.$l.v = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1),\r\n pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3)\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 2704);\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCF\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCSS(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n temporalJitter = true,\r\n numCascades = 1\r\n) {\r\n const funcNameFilterShadowPCSS = `lib_filterShadowPCSS_${lightType}_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}_${temporalJitter ? 1 : 0}_${numCascades}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCSS,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.PCSSblockerSampleCount = ShaderHelper.getShadowImplParams(this).y;\r\n this.$l.PCSSfilterSampleCount = ShaderHelper.getShadowImplParams(this).z;\r\n this.$l.PCSSlightRadius = ShaderHelper.getShadowImplParams(this).x;\r\n this.$l.PCSSmaxFilterRadius = ShaderHelper.getShadowImplParams(this).w;\r\n this.$l.PCSSsearchRadius = this.$choice(\r\n pb.greaterThan(this.PCSSlightRadius, 0),\r\n pb.max(this.PCSSlightRadius, this.PCSSmaxFilterRadius),\r\n 0\r\n );\r\n\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.sampleBounds = pb.vec4(0, 0, 1, 1);\r\n if (cascade && getDevice().type === 'webgl' && numCascades > 1) {\r\n const numCols = numCascades > 1 ? 2 : 1;\r\n const numRows = numCascades > 2 ? 2 : 1;\r\n this.$l.cascadeIndex = pb.float(this.cascade);\r\n this.$l.cascadeCol = pb.mod(this.cascadeIndex, 2);\r\n this.$l.cascadeRow = pb.floor(pb.mul(this.cascadeIndex, 0.5));\r\n this.sampleBounds = pb.vec4(\r\n pb.mul(this.cascadeCol, 1 / numCols),\r\n pb.mul(this.cascadeRow, 1 / numRows),\r\n pb.mul(pb.add(this.cascadeCol, 1), 1 / numCols),\r\n pb.mul(pb.add(this.cascadeRow, 1), 1 / numRows)\r\n );\r\n }\r\n this.$l.shadowMapTexelSize = pb.mul(\r\n pb.sub(this.sampleBounds.zw, this.sampleBounds.xy),\r\n getShadowMapTexelSize(this)\r\n );\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.searchRadius), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((s) => pb.vec2(s[0], s[1]));\r\n }\r\n\r\n this.$l.blocker = findBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n pb.vec4(this.texCoord.xy, this.lightDepth, this.texCoord.w),\r\n this.sampleBounds,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.cascade\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.compareDepth = pb.float();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.compareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.sampleBounds,\r\n this.compareDepth,\r\n this.shadowMapTexelSize,\r\n this.receiverPlaneDepthBias,\r\n this.cascade\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCSS\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPoissonDisc(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPoissonDisc = `lib_filterShadowPoissonDisc_${lightType}_${shadowMapFormat}_${tapCount}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPoissonDisc,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleInside = pb.bool();\r\n this.$l.tapFilterRadius = pb.mul(getShadowMapTexelSize(this), 0.85);\r\n this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));\r\n this.$l.matrix = getRandomRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this)))\r\n );\r\n this.$l.shadow = pb.float(0);\r\n for (let i = 0; i < tapCount; i++) {\r\n this.duv = pb.mul(\r\n this.matrix,\r\n pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius)\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.sampleCoord.x, 0),\r\n pb.lessThanEqual(this.sampleCoord.x, 1),\r\n pb.greaterThanEqual(this.sampleCoord.y, 0),\r\n pb.lessThanEqual(this.sampleCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n const sampleDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowMapPoissonTap(\r\n this,\r\n lightType,\r\n shadowMapFormat,\r\n this.sampleCoord.xy,\r\n sampleDepth,\r\n this.tapFilterRadius,\r\n this.cascade\r\n )\r\n );\r\n }).$else(function () {\r\n this.shadow = pb.add(this.shadow, 1);\r\n });\r\n }\r\n this.shadow = pb.div(this.shadow, tapCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPoissonDisc\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n"],"names":["PCF_POISSON_DISC","getPCSSRotationMatrix","scope","sampleCoord","temporalJitter","funcName","pb","$builder","func","vec2","$l","frame","mod","float","ShaderHelper","getFramestamp","randomAngle","mul","smoothNoise3D","vec3","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getGlobalScope","getShadowMapTexelSize","div","getShadowCameraParams","z","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","vec4","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","lightType","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","LIGHT_TYPE_POINT","lightSpacePos","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","w","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","sub","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","add","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","sampleInside","all","bvec4","greaterThanEqual","lessThanEqual","boundsPadding","zw","xy","compareShadowDepthPCSS","compareDepth","transitionWidth","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","tapCoord","tapCompareDepth","offsets","ox","oy","findBlockerPCSS","tapCount","searchRadius","matrix","blockerDepthSum","blockerCount","duv","blockerWeight","$for","PCSSpdSamples","at","i","$choice","greaterThan","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","coverage","invCoverage","moments","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","LIGHT_TYPE_SPOT","nearFar","nonLinearDepthToLinearNormalized","depthScale","exp","filterShadowPCF","kernelSize","funcNameFilterShadowPCF","lightDepth","shadowMapTexelSize","st","fract","baseUV","floor","uvw0","uvw1","u","v","uvw2","uvw3","filterShadowPCSS","numCascades","funcNameFilterShadowPCSS","PCSSblockerSampleCount","getShadowImplParams","PCSSfilterSampleCount","PCSSlightRadius","PCSSmaxFilterRadius","PCSSsearchRadius","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow","blockerTransitionWidth","map","s","blocker","penumbra","filterRadius"],"mappings":"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"}
1
+ {"version":3,"file":"shadow.js","sources":["../../src/shaders/shadow.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { hasDepthChannel } from '@zephyr3d/device';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from './misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { smoothNoise3D } from './noise';\r\nimport { getDevice } from '../app/api';\r\n\r\n/*\r\n const PCF_KERNEL_3x3 = [\r\n [0.5, 1.0, 0.5],\r\n [1.0, 1.0, 1.0],\r\n [0.5, 1.0, 0.5]\r\n ];\r\n const PCF_KERNEL_SUM_3x3 = 7;\r\n\r\n const PCF_KERNEL_5x5 = [\r\n [0.0, 0.5, 1.0, 0.5, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 0.5, 1.0, 0.5, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_5x5 = 17;\r\n\r\n const PCF_KERNEL_7x7 = [\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_7x7 = 33;\r\n\r\n const PCF_KERNEL_9x9 = [\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\r\n [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],\r\n [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],\r\n [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],\r\n [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]\r\n ];\r\n const PCF_KERNEL_SUM_9x9 = 53;\r\n */\r\n\r\nconst PCF_POISSON_DISC = [\r\n [0.511749, 0.547686],\r\n [0.58929, 0.257224],\r\n [0.165018, 0.57663],\r\n [0.407692, 0.742285],\r\n [0.707012, 0.646523],\r\n [0.31463, 0.466825],\r\n [0.801257, 0.485186],\r\n [0.418136, 0.146517],\r\n [0.579889, 0.0368284],\r\n [0.79801, 0.140114],\r\n [-0.0413185, 0.371455],\r\n [-0.0529108, 0.627352],\r\n [0.0821375, 0.882071],\r\n [0.17308, 0.301207],\r\n [-0.120452, 0.867216],\r\n [0.371096, 0.916454],\r\n [-0.178381, 0.146101],\r\n [-0.276489, 0.550525],\r\n [0.12542, 0.126643],\r\n [-0.296654, 0.286879],\r\n [0.261744, -0.00604975],\r\n [-0.213417, 0.715776],\r\n [0.425684, -0.153211],\r\n [-0.480054, 0.321357],\r\n [-0.0717878, -0.0250567],\r\n [-0.328775, -0.169666],\r\n [-0.394923, 0.130802],\r\n [-0.553681, -0.176777],\r\n [-0.722615, 0.120616],\r\n [-0.693065, 0.309017],\r\n [0.603193, 0.791471],\r\n [-0.0754941, -0.297988],\r\n [0.109303, -0.156472],\r\n [0.260605, -0.280111],\r\n [0.129731, -0.487954],\r\n [-0.537315, 0.520494],\r\n [-0.42758, 0.800607],\r\n [0.77309, -0.0728102],\r\n [0.908777, 0.328356],\r\n [0.985341, 0.0759158],\r\n [0.947536, -0.11837],\r\n [-0.103315, -0.610747],\r\n [0.337171, -0.584],\r\n [0.210919, -0.720055],\r\n [0.41894, -0.36769],\r\n [-0.254228, -0.49368],\r\n [-0.428562, -0.404037],\r\n [-0.831732, -0.189615],\r\n [-0.922642, 0.0888026],\r\n [-0.865914, 0.427795],\r\n [0.706117, -0.311662],\r\n [0.545465, -0.520942],\r\n [-0.695738, 0.664492],\r\n [0.389421, -0.899007],\r\n [0.48842, -0.708054],\r\n [0.760298, -0.62735],\r\n [-0.390788, -0.707388],\r\n [-0.591046, -0.686721],\r\n [-0.769903, -0.413775],\r\n [-0.604457, -0.502571],\r\n [-0.557234, 0.00451362],\r\n [0.147572, -0.924353],\r\n [-0.0662488, -0.892081],\r\n [0.863832, -0.4072]\r\n];\r\n\r\nfunction getPCSSRotationMatrix(\r\n scope: PBInsideFunctionScope,\r\n sampleCoord: PBShaderExp,\r\n temporalJitter: boolean\r\n) {\r\n const funcName = `lib_getPCSSRotationMatrix_${temporalJitter ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec2('sampleCoord')], function () {\r\n if (temporalJitter) {\r\n this.$l.frame = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), pb.mul(this.frame, 0.61803398875))),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(\r\n pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x)\r\n );\r\n } else {\r\n this.$return(pb.mat2(0.8660254, 0.5, -0.5, 0.8660254));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapTexelSize(scope: PBInsideFunctionScope) {\r\n return scope.$builder.div(1, ShaderHelper.getShadowCameraParams(scope).z) as PBShaderExp;\r\n}\r\n\r\nfunction getShadowMapSize(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getShadowCameraParams(scope).z as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeShadowMapDepth(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n targetFormat: TextureFormat\r\n) {\r\n const funcNameComputeShadowMapDepth = 'Z_computeShadowMapDepth';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadowMapDepth, [pb.vec3('worldPos')], function () {\r\n if (hasDepthChannel(targetFormat)) {\r\n // use native shadowmap\r\n this.$return(\r\n pb.vec4(\r\n pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z,\r\n 0,\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.depth = pb.float();\r\n this.$l.lightType = ShaderHelper.getLightTypeForShadow(this);\r\n this.$if(\r\n pb.or(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), pb.equal(this.lightType, LIGHT_TYPE_RECT)),\r\n function () {\r\n this.depth = pb.emulateDepthClamp\r\n ? pb.clamp(this.$inputs.clamppedDepth, 0, 1)\r\n : this.$builtins.fragCoord.z;\r\n }\r\n )\r\n .$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.length(this.lightSpacePos.xyz), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n })\r\n .$else(function () {\r\n this.$l.lightSpacePos = pb.mul(\r\n ShaderHelper.getLightViewMatrixForShadow(this),\r\n pb.vec4(this.worldPos, 1)\r\n );\r\n this.depth = pb.clamp(\r\n pb.div(pb.neg(this.lightSpacePos.z), ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n 0,\r\n 1\r\n );\r\n });\r\n this.$return(\r\n targetFormat === 'rgba8unorm'\r\n ? encodeNormalizedFloatToRGBA(this, this.depth)\r\n : pb.vec4(this.depth, 0, 0, 1)\r\n );\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadowMapDepth](worldPos) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function computeReceiverPlaneDepthBias(scope: PBInsideFunctionScope, texCoord: PBShaderExp) {\r\n const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeReceiverPlaneDepthBias, [pb.vec4('coords')], function () {\r\n this.$l.dx = pb.dpdx(this.coords);\r\n this.$l.dy = pb.dpdy(this.coords);\r\n this.$l.biasMultiply = pb.float(1);\r\n this.$l.uv = pb.vec2(\r\n pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)),\r\n pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z))\r\n );\r\n this.$l.uv = pb.mul(\r\n this.$l.uv,\r\n pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x)))\r\n );\r\n // from unity shader\r\n this.$l.minFractionalError = pb.float(0.01);\r\n this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));\r\n this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);\r\n // return\r\n this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));\r\n });\r\n return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getRandomRotationMatrix(scope: PBInsideFunctionScope, sampleCoord: PBShaderExp) {\r\n const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';\r\n const pb = scope.$builder;\r\n pb.func(funcNameGetRandomRotationMatrix, [pb.vec2('sampleCoord')], function () {\r\n this.$l.randomAngle = pb.mul(\r\n smoothNoise3D(this, pb.vec3(pb.mul(this.sampleCoord, 0.35), 0)),\r\n 2 * Math.PI\r\n );\r\n this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));\r\n this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));\r\n });\r\n return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](sampleCoord) as PBShaderExp;\r\n}\r\n\r\nfunction getPoissonDiscSampleRadius(scope: PBInsideFunctionScope) {\r\n return ShaderHelper.getDepthBiasValues(scope).z as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPCF(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n offset: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `${cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF'}_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.vec2('offset'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n const sampleDepth = this.z;\r\n const uv = pb.add(this.coords, this.offset);\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n uv,\r\n this.cascade,\r\n sampleDepth\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), uv, sampleDepth)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), uv, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), uv, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(sampleDepth, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, depth, offset, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameSampleShadowMap = `lib_sampleShadowMap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n const nativeShadowMap = hasDepthChannel(shadowMapFormat);\r\n pb.func(\r\n funcNameSampleShadowMap,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),\r\n pb.float('z'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n pb.clamp(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z), 0, 1)\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n } else {\r\n if (nativeShadowMap) {\r\n this.$return(\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n this.cascade,\r\n this.z\r\n )\r\n : pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords, this.z)\r\n );\r\n } else {\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.coords, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.z, this.shadowTex.x));\r\n }\r\n }\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade)\r\n : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowMapPoissonTap(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n depth: PBShaderExp,\r\n filterRadius: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowMapPoissonTap_${lightType}_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.float('z'), pb.float('filterRadius'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.tap = pb.float(0);\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.tapInside = pb.bool();\r\n const offsets = [\r\n [-0.375, -0.375],\r\n [0.375, -0.375],\r\n [-0.375, 0.375],\r\n [0.375, 0.375]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.tapCoord = pb.add(this.coords, pb.mul(pb.vec2(ox, oy), this.filterRadius));\r\n this.tapInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.tapCoord.x, 0),\r\n pb.lessThanEqual(this.tapCoord.x, 1),\r\n pb.greaterThanEqual(this.tapCoord.y, 0),\r\n pb.lessThanEqual(this.tapCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.tapInside, function () {\r\n this.tap = pb.add(\r\n this.tap,\r\n sampleShadowMap(this, lightType, shadowMapFormat, this.tapCoord, this.z, this.cascade)\r\n );\r\n }).$else(function () {\r\n this.tap = pb.add(this.tap, 1);\r\n });\r\n }\r\n this.$return(pb.mul(this.tap, 0.25));\r\n }\r\n );\r\n return (\r\n cascade\r\n ? pb.getGlobalScope()[funcName](pos, depth, filterRadius, cascade)\r\n : pb.getGlobalScope()[funcName](pos, depth, filterRadius)\r\n ) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowDepthPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.vec2('coords'), pb.vec4('bounds'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n this.$l.depth = pb.float(1);\r\n this.$l.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.coords.x, this.bounds.x),\r\n pb.lessThanEqual(this.coords.x, this.bounds.z),\r\n pb.greaterThanEqual(this.coords.y, this.bounds.y),\r\n pb.lessThanEqual(this.coords.y, this.bounds.w)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n this.$l.boundsPadding = pb.mul(\r\n pb.sub(this.bounds.zw, this.bounds.xy),\r\n getShadowMapTexelSize(this),\r\n 0.5\r\n );\r\n this.$l.sampleCoord = pb.clamp(\r\n this.coords,\r\n pb.add(this.bounds.xy, this.boundsPadding),\r\n pb.sub(this.bounds.zw, this.boundsPadding)\r\n );\r\n this.$l.shadowTex =\r\n cascade && getDevice().type !== 'webgl'\r\n ? pb.textureArraySampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, this.cascade, 0)\r\n : pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.sampleCoord, 0);\r\n this.depth =\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x;\r\n });\r\n this.$return(this.depth);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](pos, bounds, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowDepthPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(funcName, [pb.vec3('dir')], function () {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.dir, 0);\r\n this.$return(\r\n shadowMapFormat === 'rgba8unorm'\r\n ? decodeNormalizedFloatFromRGBA(this, this.shadowTex)\r\n : this.shadowTex.x\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](dir) as PBShaderExp;\r\n}\r\n\r\nfunction compareShadowDepthPCSS(\r\n scope: PBInsideFunctionScope,\r\n sampleDepth: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n transitionWidth: PBShaderExp\r\n) {\r\n const funcName = 'lib_compareShadowDepthPCSS';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [pb.float('sampleDepth'), pb.float('compareDepth'), pb.float('transitionWidth')],\r\n function () {\r\n this.$l.depthDelta = pb.sub(this.sampleDepth, this.compareDepth);\r\n this.$return(pb.smoothStep(pb.neg(this.transitionWidth), this.transitionWidth, this.depthDelta));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](sampleDepth, compareDepth, transitionWidth) as PBShaderExp;\r\n}\r\n\r\nfunction sampleShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n pos: PBShaderExp,\r\n bounds: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_sampleShadowPCFPCSS_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('coords'),\r\n pb.vec4('bounds'),\r\n pb.float('compareDepth'),\r\n pb.vec2('texelSize'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.texelSize), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.tapCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.tapCompareDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.tapCoord = pb.add(this.coords, this.offset);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.tapCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.tapCompareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.compareDepth, pb.dot(this.offset, this.receiverPlaneDepthBias.xy))\r\n : this.compareDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.tapCompareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](pos, bounds, compareDepth, texelSize, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction samplePointShadowPCFPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n texelSize: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_samplePointShadowPCFPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('texelSize'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.shadow = pb.float(0);\r\n this.$l.transitionWidth = pb.float(1 / 65535);\r\n this.$l.offset = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n const offsets = [\r\n [-0.35, -0.35],\r\n [0.35, -0.35],\r\n [-0.35, 0.35],\r\n [0.35, 0.35]\r\n ];\r\n for (const [ox, oy] of offsets) {\r\n this.offset = pb.mul(pb.vec2(ox, oy), this.texelSize);\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.offset.x), pb.mul(this.bitangent, this.offset.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.shadow = pb.add(\r\n this.shadow,\r\n compareShadowDepthPCSS(this, this.sampleDepth, this.compareDepth, this.transitionWidth)\r\n );\r\n }\r\n this.$return(pb.mul(this.shadow, 0.25));\r\n }\r\n );\r\n return pb.getGlobalScope()[funcName](dir, compareDepth, texelSize, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction findBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n texCoord: PBShaderExp,\r\n bounds: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcName = `lib_findBlockerPCSS_${shadowMapFormat}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec4('texCoord'),\r\n pb.vec4('bounds'),\r\n pb.vec2('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleDepth = sampleShadowDepthPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.texCoord.z)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](texCoord, bounds, searchRadius, tapCount, transitionWidth, matrix, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\nfunction findPointBlockerPCSS(\r\n scope: PBInsideFunctionScope,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: PBShaderExp,\r\n dir: PBShaderExp,\r\n compareDepth: PBShaderExp,\r\n searchRadius: PBShaderExp,\r\n transitionWidth: PBShaderExp,\r\n matrix: PBShaderExp,\r\n tangent: PBShaderExp,\r\n bitangent: PBShaderExp\r\n) {\r\n const funcName = `lib_findPointBlockerPCSS_${shadowMapFormat}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('dir'),\r\n pb.float('compareDepth'),\r\n pb.float('searchRadius'),\r\n pb.float('tapCount'),\r\n pb.float('transitionWidth'),\r\n pb.mat2('matrix'),\r\n pb.vec3('tangent'),\r\n pb.vec3('bitangent')\r\n ],\r\n function () {\r\n this.$l.blockerDepthSum = pb.float(0);\r\n this.$l.blockerCount = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleDir = pb.vec3();\r\n this.$l.sampleDepth = pb.float();\r\n this.$l.blockerWeight = pb.float();\r\n this.$for(pb.float('i'), 0, this.tapCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.searchRadius\r\n );\r\n this.sampleDir = pb.normalize(\r\n pb.add(this.dir, pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y)))\r\n );\r\n this.sampleDepth = samplePointShadowDepthPCSS(this, shadowMapFormat, this.sampleDir);\r\n this.blockerWeight = pb.sub(\r\n 1,\r\n pb.smoothStep(\r\n pb.neg(this.transitionWidth),\r\n this.transitionWidth,\r\n pb.sub(this.sampleDepth, this.compareDepth)\r\n )\r\n );\r\n this.blockerDepthSum = pb.add(this.blockerDepthSum, pb.mul(this.sampleDepth, this.blockerWeight));\r\n this.blockerCount = pb.add(this.blockerCount, this.blockerWeight);\r\n });\r\n this.$return(\r\n pb.vec2(\r\n this.$choice(\r\n pb.greaterThan(this.blockerCount, 0),\r\n pb.div(this.blockerDepthSum, pb.max(this.blockerCount, 0.0001)),\r\n -1\r\n ),\r\n this.blockerCount\r\n )\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcName\r\n ](dir, compareDepth, searchRadius, tapCount, transitionWidth, matrix, tangent, bitangent) as PBShaderExp;\r\n}\r\n\r\nfunction chebyshevUpperBound(scope: PBInsideFunctionScope, distance: PBShaderExp, occluder: PBShaderExp) {\r\n const funcNameChebyshevUpperBound = 'lib_chebyshevUpperBound';\r\n const pb = scope.$builder;\r\n pb.func(funcNameChebyshevUpperBound, [pb.float('distance'), pb.vec3('occluder')], function () {\r\n this.$l.shadow = pb.float(1);\r\n this.$l.coverage = this.occluder.z;\r\n this.$l.invCoverage = pb.div(1, pb.max(this.coverage, 0.00001));\r\n this.$l.moments = pb.mul(this.occluder.xy, this.invCoverage);\r\n this.$l.test = pb.step(this.distance, this.moments.x);\r\n this.$if(pb.notEqual(this.test, 1), function () {\r\n this.$l.d = pb.sub(this.distance, this.moments.x);\r\n this.$l.variance = pb.max(pb.sub(this.moments.y, pb.mul(this.moments.x, this.moments.x)), 0.000002);\r\n const darkness = ShaderHelper.getDepthBiasValues(this).z;\r\n this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));\r\n this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);\r\n });\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.coverage, 0, 1));\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowVSM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowVSM = 'lib_filterShadowVSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowVSM,\r\n [pb.vec4('texCoord'), ...(cascade ? [pb.int('cascade')] : [])],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xyz, 0);\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.w,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n } else {\r\n if (getDevice().type !== 'webgl' && cascade) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.texCoord.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.texCoord.xy, 0);\r\n }\r\n this.$return(\r\n chebyshevUpperBound(\r\n this,\r\n this.texCoord.z,\r\n shadowMapFormat === 'rgba8unorm'\r\n ? pb.vec3(decode2HalfFromRGBA(this, this.shadowTex), 1)\r\n : this.shadowTex.rgb\r\n )\r\n );\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowESM(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n logSpace: boolean,\r\n shadowVertex: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n depthBias?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowESM = 'lib_filterShadowESM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowESM,\r\n [\r\n lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),\r\n ...(cascade ? [pb.int('cascade')] : []),\r\n ...(depthBias ? [pb.float('depthBias')] : [])\r\n ],\r\n function () {\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.depth = pb.div(\r\n pb.length(this.shadowVertex.xyz),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xyz, 0);\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n } else {\r\n if (cascade && getDevice().type !== 'webgl') {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowVertex.xy,\r\n this.cascade,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowVertex.xy, 0);\r\n }\r\n if (shadowMapFormat === 'rgba8unorm') {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n if (lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowVertex.z,\r\n this.nearFar\r\n );\r\n } else {\r\n this.$l.depth = this.shadowVertex.z;\r\n }\r\n }\r\n if (depthBias) {\r\n this.depth = pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n this.$l.shadow = logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(this.shadowTex.x, pb.mul(depthScale, this.depth)))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1);\r\n if (shadowMapFormat !== 'rgba8unorm') {\r\n this.shadow = pb.mix(1, this.shadow, pb.clamp(this.shadowTex.y, 0, 1));\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowESM\r\n ](shadowVertex, ...(cascade ? [cascade] : []), ...(depthBias ? [depthBias] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCF(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n kernelSize: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCF,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n const shadowMapTexelSize = getShadowMapTexelSize(this);\r\n this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));\r\n this.$l.st = pb.fract(this.uv);\r\n this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));\r\n this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);\r\n this.$l.shadow = pb.float(0);\r\n if (kernelSize === 3) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));\r\n this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));\r\n this.$l.u = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1),\r\n pb.add(pb.div(this.st.x, this.uvw1.x), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec2(\r\n pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1),\r\n pb.add(pb.div(this.st.y, this.uvw1.y), 1)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 16);\r\n } else if (kernelSize === 5) {\r\n this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));\r\n this.$l.uvw1 = pb.vec2(7);\r\n this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));\r\n this.$l.u = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2),\r\n pb.div(pb.add(this.st.x, 3), this.uvw1.x),\r\n pb.add(pb.div(this.st.x, this.uvw2.x), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.$l.v = pb.mul(\r\n pb.vec3(\r\n pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2),\r\n pb.div(pb.add(this.st.y, 3), this.uvw1.y),\r\n pb.add(pb.div(this.st.y, this.uvw2.y), 2)\r\n ),\r\n shadowMapTexelSize\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.x),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.y),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.x, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.y, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.vec2(this.u.z, this.v.z),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 144);\r\n } else if (kernelSize === 7) {\r\n this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));\r\n this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));\r\n this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));\r\n this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);\r\n this.$l.u = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1),\r\n pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3)\r\n );\r\n this.$l.v = pb.vec4(\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3),\r\n pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1),\r\n pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1),\r\n pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3)\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw0.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw1.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw2.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw0.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw1.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw2.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n pb.mul(\r\n sampleShadowMapPCF(\r\n this,\r\n shadowMapFormat,\r\n this.baseUV,\r\n pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize),\r\n this.lightDepth,\r\n this.cascade\r\n ),\r\n this.uvw3.x,\r\n this.uvw3.y\r\n )\r\n );\r\n this.shadow = pb.div(this.shadow, 2704);\r\n }\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCF\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPCSS(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp,\r\n temporalJitter = true,\r\n numCascades = 1\r\n) {\r\n const funcNameFilterShadowPCSS = `lib_filterShadowPCSS_${lightType}_${shadowMapFormat}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}_${temporalJitter ? 1 : 0}_${numCascades}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPCSS,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.PCSSblockerSampleCount = ShaderHelper.getShadowImplParams(this).y;\r\n this.$l.PCSSfilterSampleCount = ShaderHelper.getShadowImplParams(this).z;\r\n this.$l.PCSSlightRadius = ShaderHelper.getShadowImplParams(this).x;\r\n this.$l.PCSSmaxFilterRadius = ShaderHelper.getShadowImplParams(this).w;\r\n this.$l.PCSSsearchRadius = this.$choice(\r\n pb.greaterThan(this.PCSSlightRadius, 0),\r\n pb.max(this.PCSSlightRadius, this.PCSSmaxFilterRadius),\r\n 0\r\n );\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((s) => pb.vec2(s[0], s[1]));\r\n }\r\n\r\n if (lightType === LIGHT_TYPE_POINT) {\r\n this.$l.lightDepth = this.texCoord.w;\r\n this.$l.sampleDir = pb.normalize(this.texCoord.xyz);\r\n this.$l.shadowMapTexelSize = pb.mul(getShadowMapTexelSize(this), 2);\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.sampleDir.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = pb.float(1 / 65535);\r\n this.$l.up = this.$choice(\r\n pb.lessThan(pb.abs(this.sampleDir.y), 0.999),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(1, 0, 0)\r\n );\r\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.sampleDir));\r\n this.$l.bitangent = pb.cross(this.sampleDir, this.tangent);\r\n this.$l.blocker = findPointBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n this.sampleDir,\r\n this.lightDepth,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.tangent,\r\n this.bitangent\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.samplePointDir = pb.vec3();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.samplePointDir = pb.normalize(\r\n pb.add(\r\n this.sampleDir,\r\n pb.add(pb.mul(this.tangent, this.duv.x), pb.mul(this.bitangent, this.duv.y))\r\n )\r\n );\r\n this.shadow = pb.add(\r\n this.shadow,\r\n samplePointShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.samplePointDir,\r\n this.lightDepth,\r\n this.shadowMapTexelSize,\r\n this.tangent,\r\n this.bitangent\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n return;\r\n }\r\n\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.sampleBounds = pb.vec4(0, 0, 1, 1);\r\n if (cascade && getDevice().type === 'webgl' && numCascades > 1) {\r\n const numCols = numCascades > 1 ? 2 : 1;\r\n const numRows = numCascades > 2 ? 2 : 1;\r\n this.$l.cascadeIndex = pb.float(this.cascade);\r\n this.$l.cascadeCol = pb.mod(this.cascadeIndex, 2);\r\n this.$l.cascadeRow = pb.floor(pb.mul(this.cascadeIndex, 0.5));\r\n this.sampleBounds = pb.vec4(\r\n pb.mul(this.cascadeCol, 1 / numCols),\r\n pb.mul(this.cascadeRow, 1 / numRows),\r\n pb.mul(pb.add(this.cascadeCol, 1), 1 / numCols),\r\n pb.mul(pb.add(this.cascadeRow, 1), 1 / numRows)\r\n );\r\n }\r\n this.$l.shadowMapTexelSize = pb.mul(\r\n pb.sub(this.sampleBounds.zw, this.sampleBounds.xy),\r\n getShadowMapTexelSize(this)\r\n );\r\n this.$l.matrix = getPCSSRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))),\r\n temporalJitter\r\n );\r\n this.$l.searchRadius = pb.mul(\r\n pb.clamp(this.PCSSsearchRadius, 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.blockerTransitionWidth = receiverPlaneDepthBias\r\n ? pb.max(pb.dot(pb.abs(this.receiverPlaneDepthBias.xy), this.searchRadius), 1 / 65535)\r\n : pb.float(1 / 65535);\r\n\r\n this.$l.blocker = findBlockerPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.PCSSblockerSampleCount,\r\n pb.vec4(this.texCoord.xy, this.lightDepth, this.texCoord.w),\r\n this.sampleBounds,\r\n this.searchRadius,\r\n this.blockerTransitionWidth,\r\n this.matrix,\r\n this.cascade\r\n );\r\n this.$if(pb.lessThanEqual(this.blocker.y, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$l.penumbra = pb.div(\r\n pb.max(pb.sub(this.lightDepth, this.blocker.x), 0),\r\n pb.max(this.blocker.x, 0.0001)\r\n );\r\n this.$l.filterRadius = pb.mul(\r\n pb.clamp(pb.mul(this.penumbra, this.PCSSlightRadius), 0, pb.max(0, this.PCSSmaxFilterRadius)),\r\n this.shadowMapTexelSize\r\n );\r\n this.$l.shadow = pb.float(0);\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.compareDepth = pb.float();\r\n this.$for(pb.float('i'), 0, this.PCSSfilterSampleCount, function () {\r\n this.duv = pb.mul(\r\n pb.mul(\r\n this.matrix,\r\n this.PCSSpdSamples.at(pb.mod(pb.mul(pb.int(this.i), 19), PCF_POISSON_DISC.length))\r\n ),\r\n this.filterRadius\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.compareDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowPCFPCSS(\r\n this,\r\n shadowMapFormat,\r\n this.sampleCoord,\r\n this.sampleBounds,\r\n this.compareDepth,\r\n this.shadowMapTexelSize,\r\n this.receiverPlaneDepthBias,\r\n this.cascade\r\n )\r\n );\r\n });\r\n this.shadow = pb.div(this.shadow, this.PCSSfilterSampleCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPCSS\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function filterShadowPoissonDisc(\r\n scope: PBInsideFunctionScope,\r\n lightType: number,\r\n shadowMapFormat: TextureFormat,\r\n tapCount: number,\r\n texCoord: PBShaderExp,\r\n receiverPlaneDepthBias?: PBShaderExp,\r\n cascade?: PBShaderExp\r\n) {\r\n const funcNameFilterShadowPoissonDisc = `lib_filterShadowPoissonDisc_${lightType}_${shadowMapFormat}_${tapCount}_${receiverPlaneDepthBias ? 1 : 0}_${cascade ? 1 : 0}`;\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameFilterShadowPoissonDisc,\r\n [\r\n pb.vec4('texCoord'),\r\n ...(receiverPlaneDepthBias ? [pb.vec3('receiverPlaneDepthBias')] : []),\r\n ...(cascade ? [pb.int('cascade')] : [])\r\n ],\r\n function () {\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);\r\n }\r\n this.$l.duv = pb.vec2();\r\n this.$l.sampleCoord = pb.vec2();\r\n this.$l.sampleInside = pb.bool();\r\n this.$l.tapFilterRadius = pb.mul(getShadowMapTexelSize(this), 0.85);\r\n this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));\r\n this.$l.matrix = getRandomRotationMatrix(\r\n this,\r\n pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this)))\r\n );\r\n this.$l.shadow = pb.float(0);\r\n for (let i = 0; i < tapCount; i++) {\r\n this.duv = pb.mul(\r\n this.matrix,\r\n pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius)\r\n );\r\n this.sampleCoord = pb.add(this.texCoord.xy, this.duv);\r\n this.sampleInside = pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.sampleCoord.x, 0),\r\n pb.lessThanEqual(this.sampleCoord.x, 1),\r\n pb.greaterThanEqual(this.sampleCoord.y, 0),\r\n pb.lessThanEqual(this.sampleCoord.y, 1)\r\n )\r\n );\r\n this.$if(this.sampleInside, function () {\r\n const sampleDepth = receiverPlaneDepthBias\r\n ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy))\r\n : this.lightDepth;\r\n this.shadow = pb.add(\r\n this.shadow,\r\n sampleShadowMapPoissonTap(\r\n this,\r\n lightType,\r\n shadowMapFormat,\r\n this.sampleCoord.xy,\r\n sampleDepth,\r\n this.tapFilterRadius,\r\n this.cascade\r\n )\r\n );\r\n }).$else(function () {\r\n this.shadow = pb.add(this.shadow, 1);\r\n });\r\n }\r\n this.shadow = pb.div(this.shadow, tapCount);\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [\r\n funcNameFilterShadowPoissonDisc\r\n ](texCoord, ...(receiverPlaneDepthBias ? [receiverPlaneDepthBias] : []), ...(cascade ? [cascade] : [])) as PBShaderExp;\r\n}\r\n"],"names":["PCF_POISSON_DISC","getPCSSRotationMatrix","scope","sampleCoord","temporalJitter","funcName","pb","$builder","func","vec2","$l","frame","mod","float","ShaderHelper","getFramestamp","randomAngle","mul","smoothNoise3D","vec3","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getGlobalScope","getShadowMapTexelSize","div","getShadowCameraParams","z","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","vec4","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","lightType","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","LIGHT_TYPE_POINT","lightSpacePos","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","w","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","sub","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","add","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","sampleInside","all","bvec4","greaterThanEqual","lessThanEqual","boundsPadding","zw","xy","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","sampleDir","normalize","findBlockerPCSS","tapCount","searchRadius","matrix","blockerDepthSum","blockerCount","duv","blockerWeight","$for","PCSSpdSamples","at","i","$choice","greaterThan","findPointBlockerPCSS","chebyshevUpperBound","distance","occluder","funcNameChebyshevUpperBound","coverage","invCoverage","moments","test","notEqual","d","variance","darkness","getDepthBiasValues","mix","filterShadowVSM","funcNameFilterShadowVSM","decode2HalfFromRGBA","rgb","filterShadowESM","logSpace","shadowVertex","depthBias","funcNameFilterShadowESM","LIGHT_TYPE_SPOT","nearFar","nonLinearDepthToLinearNormalized","depthScale","exp","filterShadowPCF","kernelSize","funcNameFilterShadowPCF","lightDepth","shadowMapTexelSize","st","fract","baseUV","floor","uvw0","uvw1","u","v","uvw2","uvw3","filterShadowPCSS","numCascades","funcNameFilterShadowPCSS","PCSSblockerSampleCount","getShadowImplParams","PCSSfilterSampleCount","PCSSlightRadius","PCSSmaxFilterRadius","PCSSsearchRadius","map","s","blockerTransitionWidth","up","lessThan","cross","blocker","penumbra","filterRadius","samplePointDir","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow"],"mappings":"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"}
@@ -130,7 +130,8 @@ import { getDevice } from '../app/api.js';
130
130
  this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);
131
131
  this.$l.distance = pb.div(pb.length(this.dir), ShaderHelper.getLightPositionAndRangeForShadow(this).w);
132
132
  this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.distance, this.NdotL, true);
133
- this.$return(that.samplePointShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));
133
+ this.$l.shadowCoord = pb.vec4(this.dir, pb.sub(this.distance, this.shadowBias));
134
+ this.$return(filterShadowPCSS(this, shadowMapParams.lightType, shadowMapParams.shadowMap.format, this.shadowCoord, undefined, undefined, that._temporalJitter));
134
135
  }
135
136
  this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);
136
137
  this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);