@zephyr3d/scene 0.9.23 → 0.9.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +53 -50
- package/dist/index.js +2 -2
- package/dist/material/shader/helper.js +5 -2
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/render/cluster_light.js +6 -6
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/sky.js +123 -123
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +270 -249
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/shadow.js +54 -12
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/esm.js +5 -5
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcss.js +6 -5
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +12 -4
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +88 -69
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/values.js +2 -7
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 { DEPTH_FARTHEST, REVERSE_Z } from '@zephyr3d/base';\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 * Whether the shadow-space depth compared by a filter is the device depth\r\n * (direction flips under reverse-Z) or a linear distance encoding\r\n * (direction independent). Directional/rect receivers use the light\r\n * projection device depth; point uses distance/range and spot a linear\r\n * view-depth encoding.\r\n * @internal\r\n */\r\nexport function isDeviceDepthShadow(lightType: number): boolean {\r\n return lightType !== LIGHT_TYPE_POINT && lightType !== LIGHT_TYPE_SPOT;\r\n}\r\n\r\n/**\r\n * Maps the shadow-space NDC position to shadow map coordinates: xy to\r\n * [0, 1] texture space, depth to the device depth range. Under standard-Z\r\n * all components map from GL [-1, 1]; under reverse-Z the depth is already\r\n * zero-to-one and passes through.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec4(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z, ndc.w)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * vec3 variant of {@link ndcToShadowCoord}.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord3(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec3(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * Whether a shadow map device depth lies within the far bound of the\r\n * shadow projection (\"not beyond the shadow far plane\").\r\n * @internal\r\n */\r\nexport function shadowCoordDepthInRange(scope: PBInsideFunctionScope, z: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? pb.greaterThanEqual(z, 0) : pb.lessThanEqual(z, 1);\r\n}\r\n\r\n/**\r\n * Applies a depth bias that moves the receiver towards the light in the\r\n * encoding of the compared shadow depth.\r\n * @internal\r\n */\r\nexport function applyShadowDepthBias(\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n bias: PBShaderExp,\r\n deviceEncoded: boolean\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z && deviceEncoded ? pb.add(z, bias) : pb.sub(z, bias);\r\n}\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 // Receiver and stored depth are device-encoded here; under reverse-Z\r\n // \"lit\" means receiver depth >= stored depth.\r\n this.$return(\r\n REVERSE_Z ? pb.step(this.shadowTex.x, sampleDepth) : pb.step(sampleDepth, this.shadowTex.x)\r\n );\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 // directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers convert to a linear encoding beforehand.\r\n this.$return(\r\n REVERSE_Z && isDeviceDepthShadow(lightType)\r\n ? pb.step(this.shadowTex.x, this.z)\r\n : pb.step(this.z, this.shadowTex.x)\r\n );\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\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 // out-of-bounds samples read as \"farthest\" (no blocker); farthest is\r\n // DEPTH_FARTHEST for device-encoded depth, 1 for linear encodings\r\n this.$l.depth = pb.float(deviceEncoded ? DEPTH_FARTHEST : 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 deviceEncoded: boolean\r\n) {\r\n // Lit when the stored depth is farther than the receiver; farther means a\r\n // smaller value for device-encoded depth under reverse-Z.\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcName = flip ? 'lib_compareShadowDepthPCSSRev' : '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 = flip\r\n ? pb.sub(this.compareDepth, this.sampleDepth)\r\n : 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 deviceEncoded: boolean,\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}_${\r\n cascade ? 1 : 0\r\n }${REVERSE_Z && deviceEncoded ? '_rev' : ''}`;\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 deviceEncoded,\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(\r\n this,\r\n this.sampleDepth,\r\n this.tapCompareDepth,\r\n this.transitionWidth,\r\n deviceEncoded\r\n )\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, false)\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\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 deviceEncoded,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n // Blocker when the sample is closer to the light than the receiver;\r\n // device-encoded depth mirrors the difference under reverse-Z.\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 REVERSE_Z && deviceEncoded\r\n ? pb.sub(this.texCoord.z, this.sampleDepth)\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(\r\n scope: PBInsideFunctionScope,\r\n distance: PBShaderExp,\r\n occluder: PBShaderExp,\r\n deviceEncoded: boolean\r\n) {\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcNameChebyshevUpperBound = flip ? 'lib_chebyshevUpperBoundRev' : '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 // The one-sided Chebyshev bound applies when the receiver is farther\r\n // than the mean occluder depth; variance and squared difference are\r\n // invariant under the reverse-Z d -> 1-d mirror, only the side test\r\n // flips.\r\n this.$l.test = flip ? pb.step(this.moments.x, this.distance) : 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 false\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 isDeviceDepthShadow(lightType)\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 const deviceEncoded = isDeviceDepthShadow(lightType);\r\n if (depthBias) {\r\n this.depth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.min(1, pb.add(this.depth, this.depthBias))\r\n : pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n // ESM expects exp(k * (occluder - receiver)) with depth growing away\r\n // from the light; device-encoded depth grows towards the light under\r\n // reverse-Z, so the difference is mirrored.\r\n this.$l.shadow =\r\n REVERSE_Z && deviceEncoded\r\n ? logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(pb.mul(depthScale, this.depth), this.shadowTex.x))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.depth, this.shadowTex.x)))), 0, 1)\r\n : 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 = REVERSE_Z\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : 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 // Directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers and their stored depth use a linear encoding.\r\n const deviceEncoded = isDeviceDepthShadow(lightType);\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : 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 deviceEncoded,\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 // Penumbra estimation (receiver - blocker) / blocker; for device\r\n // depth under reverse-Z apply the d -> 1-d mirror of the expression.\r\n this.$l.penumbra =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.div(\r\n pb.max(pb.sub(this.blocker.x, this.lightDepth), 0),\r\n pb.max(pb.sub(1, this.blocker.x), 0.0001)\r\n )\r\n : pb.div(pb.max(pb.sub(this.lightDepth, this.blocker.x), 0), pb.max(this.blocker.x, 0.0001));\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 deviceEncoded,\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 = REVERSE_Z\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : 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":["isDeviceDepthShadow","lightType","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","ndcToShadowCoord","scope","ndc","pb","$builder","REVERSE_Z","vec4","add","mul","xy","vec2","z","w","ndcToShadowCoord3","vec3","shadowCoordDepthInRange","greaterThanEqual","lessThanEqual","applyShadowDepthBias","bias","deviceEncoded","sub","PCF_POISSON_DISC","getPCSSRotationMatrix","sampleCoord","temporalJitter","funcName","func","$l","frame","mod","float","ShaderHelper","getFramestamp","randomAngle","smoothNoise3D","Math","PI","randomBase","cos","sin","$return","mat2","x","y","neg","getGlobalScope","getShadowMapTexelSize","div","getShadowCameraParams","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","getLightTypeForShadow","$if","or","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","lightSpacePos","getLightViewMatrixForShadow","length","xyz","getLightPositionAndRangeForShadow","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","int","sampleDepth","getDevice","type","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","DEPTH_FARTHEST","sampleInside","all","bvec4","boundsPadding","zw","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","flip","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","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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"}
|
|
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 { DEPTH_FARTHEST, REVERSE_Z } from '@zephyr3d/base';\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 * Whether the shadow-space depth compared by a filter is the device depth\r\n * (direction flips under reverse-Z) or a linear distance encoding\r\n * (direction independent). Directional/rect receivers use the light\r\n * projection device depth; point uses distance/range and spot a linear\r\n * view-depth encoding.\r\n * @internal\r\n */\r\nexport function isDeviceDepthShadow(lightType: number): boolean {\r\n return lightType !== LIGHT_TYPE_POINT && lightType !== LIGHT_TYPE_SPOT;\r\n}\r\n\r\n/**\r\n * Maps the shadow-space NDC position to shadow map coordinates: xy to\r\n * [0, 1] texture space, depth to the device depth range. Under standard-Z\r\n * all components map from GL [-1, 1]; under reverse-Z the depth is already\r\n * zero-to-one and passes through.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec4(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z, ndc.w)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * vec3 variant of {@link ndcToShadowCoord}.\r\n * @internal\r\n */\r\nexport function ndcToShadowCoord3(scope: PBInsideFunctionScope, ndc: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z\r\n ? pb.vec3(pb.add(pb.mul(ndc.xy, 0.5), pb.vec2(0.5)), ndc.z)\r\n : pb.add(pb.mul(ndc, 0.5), 0.5);\r\n}\r\n\r\n/**\r\n * Whether a shadow map device depth lies within the far bound of the\r\n * shadow projection (\"not beyond the shadow far plane\").\r\n * @internal\r\n */\r\nexport function shadowCoordDepthInRange(scope: PBInsideFunctionScope, z: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z ? pb.greaterThanEqual(z, 0) : pb.lessThanEqual(z, 1);\r\n}\r\n\r\n/**\r\n * Applies a depth bias that moves the receiver towards the light in the\r\n * encoding of the compared shadow depth.\r\n * @internal\r\n */\r\nexport function applyShadowDepthBias(\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n bias: PBShaderExp,\r\n deviceEncoded: boolean\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n return REVERSE_Z && deviceEncoded ? pb.add(z, bias) : pb.sub(z, bias);\r\n}\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\n/** @internal */\r\nexport function getProgressivePoissonDiscSample(\r\n scope: PBInsideFunctionScope,\r\n index: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (pb.getDevice().type === 'webgl') {\r\n const funcName = 'lib_getProgressivePoissonDiscSampleWebGL1';\r\n pb.func(funcName, [pb.int('index')], function () {\r\n for (let i = 0; i < PCF_POISSON_DISC.length; i++) {\r\n const sample = PCF_POISSON_DISC[(i * 19) % PCF_POISSON_DISC.length];\r\n this.$if(pb.equal(this.index, i), function () {\r\n this.$return(pb.vec2(sample[0], sample[1]));\r\n });\r\n }\r\n this.$return(pb.vec2(PCF_POISSON_DISC[0][0], PCF_POISSON_DISC[0][1]));\r\n });\r\n return pb.getGlobalScope()[funcName](index) as PBShaderExp;\r\n }\r\n\r\n if (!pb.getGlobalScope().PCSSpdSamples) {\r\n pb.getGlobalScope().PCSSpdSamples = PCF_POISSON_DISC.map((sample) => pb.vec2(sample[0], sample[1]));\r\n }\r\n return pb\r\n .getGlobalScope()\r\n .PCSSpdSamples.at(pb.mod(pb.mul(index, 19), PCF_POISSON_DISC.length)) as PBShaderExp;\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 // Receiver and stored depth are device-encoded here; under reverse-Z\r\n // \"lit\" means receiver depth >= stored depth.\r\n this.$return(\r\n REVERSE_Z ? pb.step(this.shadowTex.x, sampleDepth) : pb.step(sampleDepth, this.shadowTex.x)\r\n );\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 // directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers convert to a linear encoding beforehand.\r\n this.$return(\r\n REVERSE_Z && isDeviceDepthShadow(lightType)\r\n ? pb.step(this.shadowTex.x, this.z)\r\n : pb.step(this.z, this.shadowTex.x)\r\n );\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\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 // out-of-bounds samples read as \"farthest\" (no blocker); farthest is\r\n // DEPTH_FARTHEST for device-encoded depth, 1 for linear encodings\r\n this.$l.depth = pb.float(deviceEncoded ? DEPTH_FARTHEST : 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 deviceEncoded: boolean\r\n) {\r\n // Lit when the stored depth is farther than the receiver; farther means a\r\n // smaller value for device-encoded depth under reverse-Z.\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcName = flip ? 'lib_compareShadowDepthPCSSRev' : '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 = flip\r\n ? pb.sub(this.compareDepth, this.sampleDepth)\r\n : 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 deviceEncoded: boolean,\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}_${\r\n cascade ? 1 : 0\r\n }${REVERSE_Z && deviceEncoded ? '_rev' : ''}`;\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 deviceEncoded,\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(\r\n this,\r\n this.sampleDepth,\r\n this.tapCompareDepth,\r\n this.transitionWidth,\r\n deviceEncoded\r\n )\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, false)\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 deviceEncoded: boolean,\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 REVERSE_Z && deviceEncoded ? '_rev' : ''\r\n }`;\r\n const pb = scope.$builder;\r\n const webgl1 = pb.getDevice().type === 'webgl';\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, webgl1 ? PCF_POISSON_DISC.length : this.tapCount, function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.tapCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 deviceEncoded,\r\n this.sampleCoord,\r\n this.bounds,\r\n this.cascade\r\n );\r\n // Blocker when the sample is closer to the light than the receiver;\r\n // device-encoded depth mirrors the difference under reverse-Z.\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 REVERSE_Z && deviceEncoded\r\n ? pb.sub(this.texCoord.z, this.sampleDepth)\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 const webgl1 = pb.getDevice().type === 'webgl';\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, webgl1 ? PCF_POISSON_DISC.length : this.tapCount, function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.tapCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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(\r\n scope: PBInsideFunctionScope,\r\n distance: PBShaderExp,\r\n occluder: PBShaderExp,\r\n deviceEncoded: boolean\r\n) {\r\n const flip = REVERSE_Z && deviceEncoded;\r\n const funcNameChebyshevUpperBound = flip ? 'lib_chebyshevUpperBoundRev' : '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 // The one-sided Chebyshev bound applies when the receiver is farther\r\n // than the mean occluder depth; variance and squared difference are\r\n // invariant under the reverse-Z d -> 1-d mirror, only the side test\r\n // flips.\r\n this.$l.test = flip ? pb.step(this.moments.x, this.distance) : 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 false\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 isDeviceDepthShadow(lightType)\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 const deviceEncoded = isDeviceDepthShadow(lightType);\r\n if (depthBias) {\r\n this.depth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.min(1, pb.add(this.depth, this.depthBias))\r\n : pb.max(0, pb.sub(this.depth, this.depthBias));\r\n }\r\n const depthScale = ShaderHelper.getDepthBiasValues(this).z;\r\n // ESM expects exp(k * (occluder - receiver)) with depth growing away\r\n // from the light; device-encoded depth grows towards the light under\r\n // reverse-Z, so the difference is mirrored.\r\n this.$l.shadow =\r\n REVERSE_Z && deviceEncoded\r\n ? logSpace\r\n ? pb.clamp(pb.exp(pb.min(87, pb.sub(pb.mul(depthScale, this.depth), this.shadowTex.x))), 0, 1)\r\n : pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.depth, this.shadowTex.x)))), 0, 1)\r\n : 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 = REVERSE_Z\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : 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 const webgl1 = pb.getDevice().type === 'webgl';\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 (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(\r\n pb.float('i'),\r\n 0,\r\n webgl1 ? PCF_POISSON_DISC.length : this.PCSSfilterSampleCount,\r\n function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.PCSSfilterSampleCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 );\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 // Directional/rect compare device depth (flips under reverse-Z);\r\n // spot receivers and their stored depth use a linear encoding.\r\n const deviceEncoded = isDeviceDepthShadow(lightType);\r\n this.$l.lightDepth = this.texCoord.z;\r\n if (receiverPlaneDepthBias) {\r\n this.lightDepth =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : 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 deviceEncoded,\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 // Penumbra estimation (receiver - blocker) / blocker; for device\r\n // depth under reverse-Z apply the d -> 1-d mirror of the expression.\r\n this.$l.penumbra =\r\n REVERSE_Z && deviceEncoded\r\n ? pb.div(\r\n pb.max(pb.sub(this.blocker.x, this.lightDepth), 0),\r\n pb.max(pb.sub(1, this.blocker.x), 0.0001)\r\n )\r\n : pb.div(pb.max(pb.sub(this.lightDepth, this.blocker.x), 0), pb.max(this.blocker.x, 0.0001));\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, webgl1 ? PCF_POISSON_DISC.length : this.PCSSfilterSampleCount, function () {\r\n if (webgl1) {\r\n this.$if(pb.greaterThanEqual(this.i, this.PCSSfilterSampleCount), function () {\r\n this.$break();\r\n });\r\n }\r\n this.duv = pb.mul(\r\n pb.mul(this.matrix, getProgressivePoissonDiscSample(this, pb.int(this.i))),\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 deviceEncoded,\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 = REVERSE_Z\r\n ? pb.add(this.lightDepth, this.receiverPlaneDepthBias.z)\r\n : 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":["isDeviceDepthShadow","lightType","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","ndcToShadowCoord","scope","ndc","pb","$builder","REVERSE_Z","vec4","add","mul","xy","vec2","z","w","ndcToShadowCoord3","vec3","shadowCoordDepthInRange","greaterThanEqual","lessThanEqual","applyShadowDepthBias","bias","deviceEncoded","sub","PCF_POISSON_DISC","getProgressivePoissonDiscSample","index","getDevice","type","funcName","func","int","i","length","sample","$if","equal","$return","getGlobalScope","PCSSpdSamples","map","at","mod","getPCSSRotationMatrix","sampleCoord","temporalJitter","$l","frame","float","ShaderHelper","getFramestamp","randomAngle","smoothNoise3D","Math","PI","randomBase","cos","sin","mat2","x","y","neg","getShadowMapTexelSize","div","getShadowCameraParams","getShadowMapSize","computeShadowMapDepth","worldPos","targetFormat","funcNameComputeShadowMapDepth","hasDepthChannel","emulateDepthClamp","clamp","$inputs","clamppedDepth","$builtins","fragCoord","depth","getLightTypeForShadow","or","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_RECT","$elseif","lightSpacePos","getLightViewMatrixForShadow","xyz","getLightPositionAndRangeForShadow","$else","encodeNormalizedFloatToRGBA","computeReceiverPlaneDepthBias","texCoord","funcNameComputeReceiverPlaneDepthBias","dx","dpdx","coords","dy","dpdy","biasMultiply","uv","minFractionalError","fractionalSamplingError","dot","abs","staticBias","min","sampleShadowMapPCF","shadowMapFormat","pos","offset","cascade","nativeShadowMap","sampleDepth","textureArraySampleCompareLevel","getShadowMap","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowDepthPCSS","bounds","DEPTH_FARTHEST","sampleInside","all","bvec4","boundsPadding","zw","samplePointShadowDepthPCSS","dir","compareShadowDepthPCSS","compareDepth","transitionWidth","flip","depthDelta","smoothStep","sampleShadowPCFPCSS","texelSize","receiverPlaneDepthBias","shadow","max","tapCoord","tapCompareDepth","offsets","ox","oy","samplePointShadowPCFPCSS","tangent","bitangent","sampleDir","normalize","findBlockerPCSS","tapCount","searchRadius","matrix","webgl1","blockerDepthSum","blockerCount","duv","blockerWeight","$for","$break","$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","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","blockerTransitionWidth","up","lessThan","cross","blocker","penumbra","filterRadius","samplePointDir","sampleBounds","numCols","numRows","cascadeIndex","cascadeCol","cascadeRow"],"mappings":"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"}
|