@zephyr3d/scene 0.9.23 → 0.9.24
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 +2 -8
- package/dist/index.js +1 -1
- package/dist/material/shader/helper.js +440 -437
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/render/cluster_light.js +10 -10
- 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/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/values.js +57 -62
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
package/dist/shadow/esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ShadowImpl, getShadowMapFarthestDepth, getPackedShadowMapClearColor } from './shadow_impl.js';
|
|
2
|
+
import { Vector4 } from '@zephyr3d/base';
|
|
3
3
|
import '../render/primitive.js';
|
|
4
4
|
import { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc.js';
|
|
5
5
|
import { getDevice } from '../app/api.js';
|
|
6
6
|
import { GaussianBlurBlitter } from '../blitter/gaussianblur.js';
|
|
7
|
-
import {
|
|
7
|
+
import { computeShadowMapDepth, ndcToShadowCoord, shadowCoordDepthInRange, filterShadowESM } from '../shaders/shadow.js';
|
|
8
8
|
import { LIGHT_TYPE_POINT } from '../values.js';
|
|
9
9
|
import { ShaderHelper } from '../material/shader/helper.js';
|
|
10
10
|
import { computeShadowBiasCSM, computeShadowBias } from './shader.js';
|
|
@@ -195,8 +195,8 @@ class BlurBlitter extends GaussianBlurBlitter {
|
|
|
195
195
|
const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];
|
|
196
196
|
// Empty texels must read as "farthest": under reverse-Z that is 0 for
|
|
197
197
|
// device-encoded directional/rect maps, 1 for linear point/spot maps.
|
|
198
|
-
const farthest =
|
|
199
|
-
return colorAttachment ? colorAttachment.format === 'rgba8unorm' ?
|
|
198
|
+
const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);
|
|
199
|
+
return colorAttachment ? colorAttachment.format === 'rgba8unorm' ? getPackedShadowMapClearColor(shadowMapParams.lightType) : new Vector4(farthest, 0, 0, 1) : null;
|
|
200
200
|
}
|
|
201
201
|
getShadowMap(shadowMapParams) {
|
|
202
202
|
const implData = shadowMapParams.implData;
|
package/dist/shadow/esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esm.js","sources":["../../src/shadow/esm.ts"],"sourcesContent":["import { REVERSE_Z } from '@zephyr3d/base';\r\nimport type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport {\r\n computeShadowMapDepth,\r\n filterShadowESM,\r\n isDeviceDepthShadow,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\nimport { Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: Nullable<FrameBuffer>;\r\n blurFramebuffer2: Nullable<FrameBuffer>;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat = false;\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 1, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.coverageSum = pb.float(0);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.coverage0 = pb.clamp(scope.d0.y, 0, 1);\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.coverageSum = pb.add(scope.coverageSum, pb.mul(scope.incrementalGaussian.x, scope.coverage0));\r\n\r\n if (that.logSpace) {\r\n scope.maxLogValue = pb.float(-1e20);\r\n scope.logValue0 = that._phase === 'horizonal' ? pb.mul(scope.d0.x, scope.multiplier) : scope.d0.x;\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.maxLogValue = this.logValue0;\r\n });\r\n } else {\r\n scope.depthSum = pb.mul(scope.incrementalGaussian.x, scope.coverage0, scope.d0.x);\r\n }\r\n\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(scope, type, srcTex, pb.sub(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.coefficientSum = pb.add(this.coefficientSum, pb.mul(this.incrementalGaussian.x, 2));\r\n this.coverageSum = pb.add(\r\n this.coverageSum,\r\n pb.mul(this.incrementalGaussian.x, pb.add(this.coverage1, this.coverage2))\r\n );\r\n if (that.logSpace) {\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue1);\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue2);\r\n });\r\n } else {\r\n this.depthSum = pb.add(\r\n this.depthSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n pb.add(pb.mul(this.coverage1, this.d1.x), pb.mul(this.coverage2, this.d2.x))\r\n )\r\n );\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n\r\n if (that.logSpace) {\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.momentSum = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage0,\r\n pb.exp(pb.min(87, pb.sub(this.logValue0, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage1,\r\n pb.exp(pb.min(87, pb.sub(this.logValue1, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage2,\r\n pb.exp(pb.min(87, pb.sub(this.logValue2, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.moment = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.moment = pb.add(this.maxLogValue, pb.log(pb.div(this.momentSum, this.coverageSum)));\r\n });\r\n return pb.vec4(scope.moment, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n } else {\r\n scope.$l.depth = pb.float(1);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.depth = pb.div(this.depthSum, this.coverageSum);\r\n });\r\n return pb.vec4(scope.depth, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash() {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n getType() {\r\n return 'esm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\": under reverse-Z that is 0 for\r\n // device-encoded directional/rect maps, 1 for linear point/spot maps.\r\n const farthest = REVERSE_Z && isDeviceDepthShadow(shadowMapParams.lightType) ? 0 : 1;\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(farthest, 0, 0, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2!.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0];\r\n const packFloat = colorAttachment.format === 'rgba8unorm';\r\n const logSpace = this._logSpace && !packFloat;\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = logSpace;\r\n this._blitterH.logSpaceMultiplier = this._depthScale;\r\n this._blitterH.packFloat = packFloat;\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = logSpace;\r\n this._blitterV.logSpaceMultiplier = this._depthScale;\r\n this._blitterV.packFloat = packFloat;\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer!);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2!\r\n );\r\n }\r\n }\r\n getDepthScale() {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash() {\r\n return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depth = computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n return shadowMapParams.shadowMap!.format === 'rgba8unorm' ? depth : pb.vec4(depth.x, 1, 0, 1);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n this.split,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n filterShadowESM(\r\n this,\r\n LIGHT_TYPE_POINT,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.dir,\r\n undefined,\r\n this.shadowBias\r\n )\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n undefined,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","filter","that","incrementalGaussian","vec3","x","div","mul","sigma","Math","sqrt","PI","y","exp","z","coefficientSum","float","coverageSum","d0","coverage0","clamp","add","logSpace","maxLogValue","logValue0","_phase","multiplier","$if","greaterThan","depthSum","xy","yz","$for","numBlurPixelsPerSide","$l","blurOffset","blurMultiplyVec","blurSize","i","d1","sub","d2","coverage1","coverage2","logValue1","logValue2","max","momentSum","min","moment","log","depth","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","getType","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","farthest","REVERSE_Z","isDeviceDepthShadow","lightType","format","Vector4","getShadowMap","implData","blurFramebuffer2","fetchTemporalFramebuffer","autoRelease","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","logSpaceMultiplier","blit","getDepthScale","setDepthScale","getShaderHash","getParams","out","zero","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","shadowCoord","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","shadowCoordDepthInRange","shadow","shadowBias","computeShadowBiasCSM","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","useNativeShadowMap"],"mappings":";;;;;;;;;;;AAyBA,MAAMA,WAAoBC,SAAAA,mBAAAA,CAAAA;AACdC,IAAAA,UAAAA,GAAa,KAAM;AAC7B,IAAA,IAAIC,SAAY,GAAA;QACd,OAAO,IAAI,CAACD,UAAU;AACxB;IACA,IAAIC,SAAAA,CAAUC,CAAC,EAAE;AACf,QAAA,IAAI,IAAI,CAACF,UAAU,KAAK,CAAC,CAACE,CAAG,EAAA;AAC3B,YAAA,IAAI,CAACF,UAAU,GAAG,CAAC,CAACE,CAAAA;AACpB,YAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;IACAC,SACEC,CAAAA,KAA4B,EAC5BC,IAAc,EACdC,MAAmB,EACnBC,KAAkB,EAClBC,QAAqB,EACrBC,UAAoC,EACpC;QACA,MAAMC,EAAAA,GAAKN,MAAMO,QAAQ;QACzB,MAAMC,KAAAA,GAAQ,KAAK,CAACT,SAAAA,CAAUC,OAAOC,IAAMC,EAAAA,MAAAA,EAAQC,OAAOC,QAAUC,EAAAA,UAAAA,CAAAA;QACpE,IAAI,IAAI,CAACT,SAAS,EAAE;AAClB,YAAA,OAAOU,GAAGG,IAAI,CAACC,8BAA8BV,KAAOQ,EAAAA,KAAAA,CAAAA,EAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;SAC7D,MAAA;YACL,OAAOA,KAAAA;AACT;AACF;IACAG,MACEX,CAAAA,KAA4B,EAC5BC,IAAc,EACdC,MAAmB,EACnBC,KAAkB,EAClBC,QAAqB,EACrBC,UAAoC,EACpC;AACA,QAAA,MAAMO,OAAO,IAAI;QACjB,MAAMN,EAAAA,GAAKN,MAAMO,QAAQ;QACzBP,KAAMa,CAAAA,mBAAmB,GAAGP,EAAAA,CAAGQ,IAAI,EAAA;AACnCd,QAAAA,KAAAA,CAAMa,mBAAmB,CAACE,CAAC,GAAGT,EAAGU,CAAAA,GAAG,CAAC,CAAGV,EAAAA,EAAAA,CAAGW,GAAG,CAACjB,KAAAA,CAAMkB,KAAK,EAAEC,IAAAA,CAAKC,IAAI,CAAC,CAAA,GAAID,KAAKE,EAAE,CAAA,CAAA,CAAA;AACjFrB,QAAAA,KAAAA,CAAMa,mBAAmB,CAACS,CAAC,GAAGhB,EAAGiB,CAAAA,GAAG,CAACjB,EAAGU,CAAAA,GAAG,CAAC,IAAC,EAAKV,GAAGW,GAAG,CAACjB,MAAMkB,KAAK,EAAElB,MAAMkB,KAAK,CAAA,CAAA,CAAA;AACjFlB,QAAAA,KAAAA,CAAMa,mBAAmB,CAACW,CAAC,GAAGlB,GAAGW,GAAG,CAACjB,KAAMa,CAAAA,mBAAmB,CAACS,CAAC,EAAEtB,KAAMa,CAAAA,mBAAmB,CAACS,CAAC,CAAA;AAC7FtB,QAAAA,KAAAA,CAAMyB,cAAc,GAAGnB,EAAGoB,CAAAA,KAAK,CAAC,CAAA,CAAA;AAChC1B,QAAAA,KAAAA,CAAM2B,WAAW,GAAGrB,EAAGoB,CAAAA,KAAK,CAAC,CAAA,CAAA;QAC7B1B,KAAM4B,CAAAA,EAAE,GAAGhB,IAAKb,CAAAA,SAAS,CAACC,KAAOC,EAAAA,IAAAA,EAAMC,MAAQC,EAAAA,KAAAA,EAAOC,QAAUC,EAAAA,UAAAA,CAAAA;QAChEL,KAAM6B,CAAAA,SAAS,GAAGvB,EAAAA,CAAGwB,KAAK,CAAC9B,MAAM4B,EAAE,CAACN,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA;QAC1CtB,KAAMyB,CAAAA,cAAc,GAAGnB,EAAAA,CAAGyB,GAAG,CAAC/B,KAAMyB,CAAAA,cAAc,EAAEzB,KAAAA,CAAMa,mBAAmB,CAACE,CAAC,CAAA;AAC/Ef,QAAAA,KAAAA,CAAM2B,WAAW,GAAGrB,EAAAA,CAAGyB,GAAG,CAAC/B,MAAM2B,WAAW,EAAErB,EAAGW,CAAAA,GAAG,CAACjB,KAAMa,CAAAA,mBAAmB,CAACE,CAAC,EAAEf,MAAM6B,SAAS,CAAA,CAAA;QAEjG,IAAIjB,IAAAA,CAAKoB,QAAQ,EAAE;AACjBhC,YAAAA,KAAAA,CAAMiC,WAAW,GAAG3B,EAAGoB,CAAAA,KAAK,CAAC,KAAC,CAAA;YAC9B1B,KAAMkC,CAAAA,SAAS,GAAGtB,IAAKuB,CAAAA,MAAM,KAAK,WAAc7B,GAAAA,EAAAA,CAAGW,GAAG,CAACjB,KAAAA,CAAM4B,EAAE,CAACb,CAAC,EAAEf,KAAMoC,CAAAA,UAAU,IAAIpC,KAAM4B,CAAAA,EAAE,CAACb,CAAC;YACjGf,KAAMqC,CAAAA,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAACtC,KAAM6B,CAAAA,SAAS,EAAE,QAAW,CAAA,EAAA,WAAA;AACnD,gBAAA,IAAI,CAACI,WAAW,GAAG,IAAI,CAACC,SAAS;AACnC,aAAA,CAAA;SACK,MAAA;AACLlC,YAAAA,KAAAA,CAAMuC,QAAQ,GAAGjC,EAAAA,CAAGW,GAAG,CAACjB,MAAMa,mBAAmB,CAACE,CAAC,EAAEf,MAAM6B,SAAS,EAAE7B,KAAM4B,CAAAA,EAAE,CAACb,CAAC,CAAA;AAClF;QAEAf,KAAMa,CAAAA,mBAAmB,GAAGP,EAAGQ,CAAAA,IAAI,CACjCR,EAAGW,CAAAA,GAAG,CAACjB,KAAMa,CAAAA,mBAAmB,CAAC2B,EAAE,EAAExC,MAAMa,mBAAmB,CAAC4B,EAAE,CACjEzC,EAAAA,KAAAA,CAAMa,mBAAmB,CAACW,CAAC,CAAA;QAE7BxB,KAAM0C,CAAAA,IAAI,CAACpC,EAAGoB,CAAAA,KAAK,CAAC,GAAM,CAAA,EAAA,CAAA,EAAG1B,KAAM2C,CAAAA,oBAAoB,EAAE,WAAA;AACvD,YAAA,IAAI,CAACC,EAAE,CAACC,UAAU,GAAGvC,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAAC6B,eAAe,EAAE,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACC,CAAC,CAAA;AACvE,YAAA,IAAI,CAACJ,EAAE,CAACK,EAAE,GAAGrC,IAAAA,CAAKb,SAAS,CAACC,KAAAA,EAAOC,MAAMC,MAAQI,EAAAA,EAAAA,CAAG4C,GAAG,CAAC/C,KAAAA,EAAO,IAAI,CAAC0C,UAAU,GAAGzC,QAAUC,EAAAA,UAAAA,CAAAA;AAC3F,YAAA,IAAI,CAACuC,EAAE,CAACO,EAAE,GAAGvC,IAAAA,CAAKb,SAAS,CAACC,KAAAA,EAAOC,MAAMC,MAAQI,EAAAA,EAAAA,CAAGyB,GAAG,CAAC5B,KAAAA,EAAO,IAAI,CAAC0C,UAAU,GAAGzC,QAAUC,EAAAA,UAAAA,CAAAA;AAC3F,YAAA,IAAI,CAACuC,EAAE,CAACQ,SAAS,GAAG9C,EAAGwB,CAAAA,KAAK,CAAC,IAAI,CAACmB,EAAE,CAAC3B,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA;AAC3C,YAAA,IAAI,CAACsB,EAAE,CAACS,SAAS,GAAG/C,EAAGwB,CAAAA,KAAK,CAAC,IAAI,CAACqB,EAAE,CAAC7B,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA;AAC3C,YAAA,IAAI,CAACG,cAAc,GAAGnB,GAAGyB,GAAG,CAAC,IAAI,CAACN,cAAc,EAAEnB,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACJ,mBAAmB,CAACE,CAAC,EAAE,CAAA,CAAA,CAAA;AACrF,YAAA,IAAI,CAACY,WAAW,GAAGrB,EAAAA,CAAGyB,GAAG,CACvB,IAAI,CAACJ,WAAW,EAChBrB,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACJ,mBAAmB,CAACE,CAAC,EAAET,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACqB,SAAS,EAAE,IAAI,CAACC,SAAS,CAAA,CAAA,CAAA;YAE1E,IAAIzC,IAAAA,CAAKoB,QAAQ,EAAE;gBACjB,IAAI,CAACY,EAAE,CAACU,SAAS,GAAG1C,IAAKuB,CAAAA,MAAM,KAAK,WAAA,GAAc7B,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACgC,EAAE,CAAClC,CAAC,EAAE,IAAI,CAACqB,UAAU,CAAA,GAAI,IAAI,CAACa,EAAE,CAAClC,CAAC;gBAChG,IAAI,CAAC6B,EAAE,CAACW,SAAS,GAAG3C,IAAKuB,CAAAA,MAAM,KAAK,WAAA,GAAc7B,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACkC,EAAE,CAACpC,CAAC,EAAE,IAAI,CAACqB,UAAU,CAAA,GAAI,IAAI,CAACe,EAAE,CAACpC,CAAC;gBAChG,IAAI,CAACsB,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAAC,IAAI,CAACc,SAAS,EAAE,QAAW,CAAA,EAAA,WAAA;AACjD,oBAAA,IAAI,CAACnB,WAAW,GAAG3B,EAAAA,CAAGkD,GAAG,CAAC,IAAI,CAACvB,WAAW,EAAE,IAAI,CAACqB,SAAS,CAAA;AAC5D,iBAAA,CAAA;gBACA,IAAI,CAACjB,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAAC,IAAI,CAACe,SAAS,EAAE,QAAW,CAAA,EAAA,WAAA;AACjD,oBAAA,IAAI,CAACpB,WAAW,GAAG3B,EAAAA,CAAGkD,GAAG,CAAC,IAAI,CAACvB,WAAW,EAAE,IAAI,CAACsB,SAAS,CAAA;AAC5D,iBAAA,CAAA;aACK,MAAA;gBACL,IAAI,CAAChB,QAAQ,GAAGjC,EAAAA,CAAGyB,GAAG,CACpB,IAAI,CAACQ,QAAQ,EACbjC,GAAGW,GAAG,CACJ,IAAI,CAACJ,mBAAmB,CAACE,CAAC,EAC1BT,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAACmC,SAAS,EAAE,IAAI,CAACH,EAAE,CAAClC,CAAC,CAAA,EAAGT,GAAGW,GAAG,CAAC,IAAI,CAACoC,SAAS,EAAE,IAAI,CAACF,EAAE,CAACpC,CAAC,CAAA,CAAA,CAAA,CAAA;AAGhF;YACA,IAAI,CAACF,mBAAmB,GAAGP,EAAGQ,CAAAA,IAAI,CAChCR,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACJ,mBAAmB,CAAC2B,EAAE,EAAE,IAAI,CAAC3B,mBAAmB,CAAC4B,EAAE,CAAA,EAC/D,IAAI,CAAC5B,mBAAmB,CAACW,CAAC,CAAA;AAE9B,SAAA,CAAA;QAEA,IAAIZ,IAAAA,CAAKoB,QAAQ,EAAE;AACjBhC,YAAAA,KAAAA,CAAMa,mBAAmB,CAACE,CAAC,GAAGT,EAAGU,CAAAA,GAAG,CAAC,CAAGV,EAAAA,EAAAA,CAAGW,GAAG,CAACjB,KAAAA,CAAMkB,KAAK,EAAEC,IAAAA,CAAKC,IAAI,CAAC,CAAA,GAAID,KAAKE,EAAE,CAAA,CAAA,CAAA;AACjFrB,YAAAA,KAAAA,CAAMa,mBAAmB,CAACS,CAAC,GAAGhB,EAAGiB,CAAAA,GAAG,CAACjB,EAAGU,CAAAA,GAAG,CAAC,IAAC,EAAKV,GAAGW,GAAG,CAACjB,MAAMkB,KAAK,EAAElB,MAAMkB,KAAK,CAAA,CAAA,CAAA;AACjFlB,YAAAA,KAAAA,CAAMa,mBAAmB,CAACW,CAAC,GAAGlB,GAAGW,GAAG,CAACjB,KAAMa,CAAAA,mBAAmB,CAACS,CAAC,EAAEtB,KAAMa,CAAAA,mBAAmB,CAACS,CAAC,CAAA;AAC7FtB,YAAAA,KAAAA,CAAMyD,SAAS,GAAGnD,EAAGoB,CAAAA,KAAK,CAAC,CAAA,CAAA;YAC3B1B,KAAMqC,CAAAA,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAACtC,KAAM6B,CAAAA,SAAS,EAAE,QAAW,CAAA,EAAA,WAAA;AACnD,gBAAA,IAAI,CAAC4B,SAAS,GAAGnD,EAAGyB,CAAAA,GAAG,CACrB,IAAI,CAAC0B,SAAS,EACdnD,GAAGW,GAAG,CACJ,IAAI,CAACJ,mBAAmB,CAACE,CAAC,EAC1B,IAAI,CAACc,SAAS,EACdvB,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGoD,GAAG,CAAC,EAAA,EAAIpD,EAAG4C,CAAAA,GAAG,CAAC,IAAI,CAAChB,SAAS,EAAE,IAAI,CAACD,WAAW,CAAA,CAAA,CAAA,CAAA,CAAA;AAG/D,aAAA,CAAA;YACAjC,KAAMa,CAAAA,mBAAmB,GAAGP,EAAGQ,CAAAA,IAAI,CACjCR,EAAGW,CAAAA,GAAG,CAACjB,KAAMa,CAAAA,mBAAmB,CAAC2B,EAAE,EAAExC,MAAMa,mBAAmB,CAAC4B,EAAE,CACjEzC,EAAAA,KAAAA,CAAMa,mBAAmB,CAACW,CAAC,CAAA;YAE7BxB,KAAM0C,CAAAA,IAAI,CAACpC,EAAGoB,CAAAA,KAAK,CAAC,GAAM,CAAA,EAAA,CAAA,EAAG1B,KAAM2C,CAAAA,oBAAoB,EAAE,WAAA;AACvD,gBAAA,IAAI,CAACC,EAAE,CAACC,UAAU,GAAGvC,EAAAA,CAAGW,GAAG,CAAC,IAAI,CAAC6B,eAAe,EAAE,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACC,CAAC,CAAA;AACvE,gBAAA,IAAI,CAACJ,EAAE,CAACK,EAAE,GAAGrC,IAAAA,CAAKb,SAAS,CACzBC,KAAAA,EACAC,MACAC,MACAI,EAAAA,EAAAA,CAAG4C,GAAG,CAAC/C,KAAAA,EAAO,IAAI,CAAC0C,UAAU,GAC7BzC,QACAC,EAAAA,UAAAA,CAAAA;AAEF,gBAAA,IAAI,CAACuC,EAAE,CAACO,EAAE,GAAGvC,IAAAA,CAAKb,SAAS,CACzBC,KAAAA,EACAC,MACAC,MACAI,EAAAA,EAAAA,CAAGyB,GAAG,CAAC5B,KAAAA,EAAO,IAAI,CAAC0C,UAAU,GAC7BzC,QACAC,EAAAA,UAAAA,CAAAA;AAEF,gBAAA,IAAI,CAACuC,EAAE,CAACQ,SAAS,GAAG9C,EAAGwB,CAAAA,KAAK,CAAC,IAAI,CAACmB,EAAE,CAAC3B,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA;AAC3C,gBAAA,IAAI,CAACsB,EAAE,CAACS,SAAS,GAAG/C,EAAGwB,CAAAA,KAAK,CAAC,IAAI,CAACqB,EAAE,CAAC7B,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA;gBAC3C,IAAI,CAACsB,EAAE,CAACU,SAAS,GAAG1C,IAAKuB,CAAAA,MAAM,KAAK,WAAA,GAAc7B,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACgC,EAAE,CAAClC,CAAC,EAAE,IAAI,CAACqB,UAAU,CAAA,GAAI,IAAI,CAACa,EAAE,CAAClC,CAAC;gBAChG,IAAI,CAAC6B,EAAE,CAACW,SAAS,GAAG3C,IAAKuB,CAAAA,MAAM,KAAK,WAAA,GAAc7B,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACkC,EAAE,CAACpC,CAAC,EAAE,IAAI,CAACqB,UAAU,CAAA,GAAI,IAAI,CAACe,EAAE,CAACpC,CAAC;gBAChG,IAAI,CAACsB,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAAC,IAAI,CAACc,SAAS,EAAE,QAAW,CAAA,EAAA,WAAA;AACjD,oBAAA,IAAI,CAACK,SAAS,GAAGnD,EAAGyB,CAAAA,GAAG,CACrB,IAAI,CAAC0B,SAAS,EACdnD,GAAGW,GAAG,CACJ,IAAI,CAACJ,mBAAmB,CAACE,CAAC,EAC1B,IAAI,CAACqC,SAAS,EACd9C,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGoD,GAAG,CAAC,EAAA,EAAIpD,EAAG4C,CAAAA,GAAG,CAAC,IAAI,CAACI,SAAS,EAAE,IAAI,CAACrB,WAAW,CAAA,CAAA,CAAA,CAAA,CAAA;AAG/D,iBAAA,CAAA;gBACA,IAAI,CAACI,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAAC,IAAI,CAACe,SAAS,EAAE,QAAW,CAAA,EAAA,WAAA;AACjD,oBAAA,IAAI,CAACI,SAAS,GAAGnD,EAAGyB,CAAAA,GAAG,CACrB,IAAI,CAAC0B,SAAS,EACdnD,GAAGW,GAAG,CACJ,IAAI,CAACJ,mBAAmB,CAACE,CAAC,EAC1B,IAAI,CAACsC,SAAS,EACd/C,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGoD,GAAG,CAAC,EAAA,EAAIpD,EAAG4C,CAAAA,GAAG,CAAC,IAAI,CAACK,SAAS,EAAE,IAAI,CAACtB,WAAW,CAAA,CAAA,CAAA,CAAA,CAAA;AAG/D,iBAAA,CAAA;gBACA,IAAI,CAACpB,mBAAmB,GAAGP,EAAGQ,CAAAA,IAAI,CAChCR,EAAGW,CAAAA,GAAG,CAAC,IAAI,CAACJ,mBAAmB,CAAC2B,EAAE,EAAE,IAAI,CAAC3B,mBAAmB,CAAC4B,EAAE,CAAA,EAC/D,IAAI,CAAC5B,mBAAmB,CAACW,CAAC,CAAA;AAE9B,aAAA,CAAA;AACAxB,YAAAA,KAAAA,CAAM4C,EAAE,CAACe,MAAM,GAAGrD,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA;YAC3B1B,KAAMqC,CAAAA,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAACtC,KAAM2B,CAAAA,WAAW,EAAE,QAAW,CAAA,EAAA,WAAA;gBACrD,IAAI,CAACgC,MAAM,GAAGrD,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACE,WAAW,EAAE3B,EAAAA,CAAGsD,GAAG,CAACtD,EAAAA,CAAGU,GAAG,CAAC,IAAI,CAACyC,SAAS,EAAE,IAAI,CAAC9B,WAAW,CAAA,CAAA,CAAA;AACvF,aAAA,CAAA;AACA,YAAA,OAAOrB,EAAGG,CAAAA,IAAI,CAACT,KAAAA,CAAM2D,MAAM,EAAErD,EAAAA,CAAGU,GAAG,CAAChB,MAAM2B,WAAW,EAAE3B,KAAMyB,CAAAA,cAAc,GAAG,CAAG,EAAA,CAAA,CAAA;SAC5E,MAAA;AACLzB,YAAAA,KAAAA,CAAM4C,EAAE,CAACiB,KAAK,GAAGvD,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA;YAC1B1B,KAAMqC,CAAAA,GAAG,CAAC/B,EAAGgC,CAAAA,WAAW,CAACtC,KAAM2B,CAAAA,WAAW,EAAE,QAAW,CAAA,EAAA,WAAA;AACrD,gBAAA,IAAI,CAACkC,KAAK,GAAGvD,EAAAA,CAAGU,GAAG,CAAC,IAAI,CAACuB,QAAQ,EAAE,IAAI,CAACZ,WAAW,CAAA;AACrD,aAAA,CAAA;AACA,YAAA,OAAOrB,EAAGG,CAAAA,IAAI,CAACT,KAAAA,CAAM6D,KAAK,EAAEvD,EAAAA,CAAGU,GAAG,CAAChB,MAAM2B,WAAW,EAAE3B,KAAMyB,CAAAA,cAAc,GAAG,CAAG,EAAA,CAAA,CAAA;AAClF;AACF;AACAqC,IAAAA,UAAAA,CAAW9D,KAA4B,EAAEC,IAAc,EAAEE,KAAkB,EAAEK,KAAkB,EAAE;AAC/F,QAAA,MAAMuD,WAAW,KAAK,CAACD,UAAW9D,CAAAA,KAAAA,EAAOC,MAAME,KAAOK,EAAAA,KAAAA,CAAAA;QACtD,IAAI,IAAI,CAACZ,SAAS,EAAE;YAClB,OAAOoE,2BAAAA,CAA4BhE,KAAO+D,EAAAA,QAAAA,CAASE,CAAC,CAAA;SAC/C,MAAA;YACL,OAAOF,QAAAA;AACT;AACF;IACUG,QAAW,GAAA;QACnB,OAAO,CAAA,EAAG,KAAK,CAACA,QAAW,EAAA,CAAA,CAAC,EAAEC,MAAO,CAAA,IAAI,CAACvE,SAAS,CAAG,CAAA,CAAA;AACxD;AACF;AAEA,iBACO,MAAMwE,GAAYC,SAAAA,UAAAA,CAAAA;qBAEvB,WAA8B;qBAE9B,KAAyB;qBAEzB,WAA8B;qBAE9B,SAA4B;qBAE5B,SAA6B;qBAE7B,SAAiC;qBAEjC,SAAiC;qBAEjC,OAA2B;AAC3B,IAAA,WAAA,CAAYC,UAAmB,EAAEvB,QAAiB,EAAEwB,UAAmB,CAAE;QACvE,KAAK,EAAA;QACL,IAAI,CAACC,KAAK,GAAG,IAAA;QACb,IAAI,CAACC,WAAW,GAAGF,UAAc,IAAA,GAAA;QACjC,IAAI,CAACG,WAAW,GAAGJ,UAAc,IAAA,CAAA;QACjC,IAAI,CAACK,SAAS,GAAG5B,QAAY,IAAA,CAAA;QAC7B,IAAI,CAAC6B,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,OAAO,GAAG,IAAA;QACf,IAAI,CAACC,SAAS,GAAG,IAAIrF,WAAAA,CAAY,WAAa,EAAA,IAAI,CAACiF,WAAW,EAAE,CAAA,EAAG,CAAI,GAAA,IAAA,CAAA;QACvE,IAAI,CAACK,SAAS,GAAG,IAAItF,WAAAA,CAAY,UAAY,EAAA,IAAI,CAACiF,WAAW,EAAE,CAAA,EAAG,CAAI,GAAA,IAAA,CAAA;AACxE;IACAM,aAAgB,GAAA;QACd,OAAO,IAAI,CAACC,cAAc;AAC5B;AACA,IAAA,IAAIC,IAAO,GAAA;QACT,OAAO,IAAI,CAACV,KAAK;AACnB;IACA,IAAIU,IAAAA,CAAKC,GAAG,EAAE;AACZ,QAAA,IAAI,IAAI,CAACX,KAAK,KAAK,CAAC,CAACW,GAAK,EAAA;AACxB,YAAA,IAAI,CAACX,KAAK,GAAG,CAAC,CAACW,GAAAA;YACf,IAAI,CAACF,cAAc,GAAG,IAAA;AACxB;AACF;AACA,IAAA,IAAIG,MAAS,GAAA;QACX,OAAO,IAAI,CAACP,OAAO;AACrB;IACA,IAAIO,MAAAA,CAAOvF,CAAC,EAAE;AACZ,QAAA,IAAI,IAAI,CAACgF,OAAO,KAAK,CAAC,CAAChF,CAAG,EAAA;AACxB,YAAA,IAAI,CAACgF,OAAO,GAAG,CAAC,CAAChF,CAAAA;YACjB,IAAI,IAAI,CAAC2E,KAAK,EAAE;gBACd,IAAI,CAACS,cAAc,GAAG,IAAA;AACxB;AACF;AACF;AACA,IAAA,IAAIX,UAAa,GAAA;QACf,OAAO,IAAI,CAACI,WAAW;AACzB;IACA,IAAIJ,UAAAA,CAAWa,GAAG,EAAE;QAClB,IAAI,CAACT,WAAW,GAAGS,GAAAA;AACrB;AACA,IAAA,IAAIpC,QAAW,GAAA;QACb,OAAO,IAAI,CAAC4B,SAAS;AACvB;IACA,IAAI5B,QAAAA,CAASoC,GAAG,EAAE;QAChB,IAAI,CAACR,SAAS,GAAGQ,GAAAA;AACnB;AACA,IAAA,IAAInD,QAAW,GAAA;QACb,OAAO,IAAI,CAAC4C,SAAS;AACvB;IACA,IAAI5C,QAAAA,CAASmD,GAAG,EAAE;AAChB,QAAA,IAAI,CAACP,SAAS,GAAG,CAAC,CAACO,GAAAA;AACrB;IACAE,OAAU,GAAA;QACR,OAAO,KAAA;AACT;AACAC,IAAAA,kBAAAA,CAAmBC,gBAAiC,EAAE;AACpD,QAAA,OAAO,IAAI,CAACf,KAAK,GAAGrD,IAAKqE,CAAAA,IAAI,CAAC,CAAE,IAAI,CAACd,WAAW,GAAG,CAAA,IAAK,IAAK,IAAI,CAACC,SAAS,CAAI,GAAA,CAAA;AACjF;AACAc,IAAAA,sBAAAA,CAAuBC,eAAgC,EAAE;AACvD,QAAA,MAAMC,kBAAkBD,eAAgBE,CAAAA,oBAAoB,EAAEC,mBAAAA,EAAqB,CAAC,CAAE,CAAA;;;AAGtF,QAAA,MAAMC,WAAWC,SAAaC,IAAAA,mBAAAA,CAAoBN,eAAgBO,CAAAA,SAAS,IAAI,CAAI,GAAA,CAAA;AACnF,QAAA,OAAON,kBACHA,eAAgBO,CAAAA,MAAM,KAAK,YAAA,GACzB,IAAIC,OAAQ,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,KACrB,IAAIA,OAAAA,CAAQL,QAAU,EAAA,CAAA,EAAG,GAAG,CAC9B,CAAA,GAAA,IAAA;AACN;AACAM,IAAAA,YAAAA,CAAaV,eAAgC,EAAE;QAC7C,MAAMW,QAAAA,GAAWX,gBAAgBW,QAAQ;AACzC,QAAA,OACEA,QACIA,GAAAA,QAAAA,CAASC,gBAAgB,CAAET,mBAAmB,EAAE,CAAC,CAAE,CAAA,GACnDH,gBAAgBE,oBAAoB,CAAEC,mBAAmB,EAAE,CAAC,CAAE,CAAA;AAEtE;AACA,qBACAU,wBACEC,CAAAA,WAAoB,EACpBP,SAAiB,EACjBQ,WAAmB,EACnBC,KAAa,EACbC,MAAc,EACdC,WAA0B,EAC1BC,WAAoC,EACpCC,UAAoB,EACpB;AACA,QAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAMC,eAAkBR,GAAAA,WAAAA,GAAc,CAAKM,IAAAA,MAAAA,CAAO9G,IAAI,KAAK,OAAA;QAC3D,MAAMiH,gBAAAA,GAAmBN,cACrBK,eACE,GAAA;YACEF,MAAOI,CAAAA,IAAI,CAACC,2BAA2B,CACrC,OACAR,WACAF,EAAAA,KAAAA,EACAC,QACAF,WACAK,EAAAA,UAAAA;AAEH,SAAA,GACDb,cAAcoB,gBACZ,GAAA;AAACN,YAAAA,MAAAA,CAAOI,IAAI,CAACG,wBAAwB,CAAC,KAAA,EAAOV,aAAaF,KAAOI,EAAAA,UAAAA;SAAY,GAC7E;AAACC,YAAAA,MAAAA,CAAOI,IAAI,CAACI,sBAAsB,CAAC,KAAOX,EAAAA,WAAAA,EAAaF,OAAOC,MAAQG,EAAAA,UAAAA;SAAY,GACvF,IAAA;AACJ,QAAA,MAAMU,kBAAkBX,WACpBI,GAAAA,eAAAA,GACEF,MAAOI,CAAAA,IAAI,CAACC,2BAA2B,CAAC,KAAOP,EAAAA,WAAAA,EAAaH,OAAOC,MAAQF,EAAAA,WAAAA,EAAa,SACxFM,MAAO9G,CAAAA,IAAI,KAAK,OAAWgG,IAAAA,SAAAA,KAAcoB,gBACvCN,GAAAA,MAAAA,CAAOI,IAAI,CAACG,wBAAwB,CAAC,KAAA,EAAOT,aAAaH,KAAO,EAAA,KAAA,CAAA,GAChEK,MAAOI,CAAAA,IAAI,CAACI,sBAAsB,CAAC,OAAOV,WAAaH,EAAAA,KAAAA,EAAOC,QAAQ,KAC1E,CAAA,GAAA,IAAA;AACJ,QAAA,MAAMc,KAAKV,MAAOI,CAAAA,IAAI,CAACO,yBAAyB,CAAClB,aAAaU,gBAAmBM,EAAAA,eAAAA,CAAAA;AACjF,QAAA,IAAIN,gBAAkB,EAAA;AACpBH,YAAAA,MAAAA,CAAOI,IAAI,CAACQ,cAAc,CAACT,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAChD;AACA,QAAA,IAAIM,eAAiB,EAAA;YACnBT,MAAOI,CAAAA,IAAI,CAACQ,cAAc,CAACH,eAAAA,CAAAA;AAC7B;QACA,OAAOC,EAAAA;AACT;AACAG,IAAAA,iBAAAA,CAAkBlC,eAAgC,EAAE;AAClD,QAAA,MAAMW,QAAwB,GAAA;YAC5BwB,eAAiB,EAAA,IAAA;YACjBvB,gBAAkB,EAAA;AACpB,SAAA;AACAZ,QAAAA,eAAAA,CAAgBW,QAAQ,GAAGA,QAAAA;AAC3B,QAAA,MAAMO,WAAc,GAAA,IAAI,CAACkB,uBAAuB,CAACpC,eAAAA,CAAAA;QACjD,MAAMqC,cAAAA,GAAiBrC,gBAAgBE,oBAAoB,CAAEC,mBAAmB,EAAE,CAAC,CAAE,CAAA,CAACa,KAAK;QAC3F,MAAMsB,eAAAA,GAAkBtC,gBAAgBE,oBAAoB,CAAEC,mBAAmB,EAAE,CAAC,CAAE,CAAA,CAACc,MAAM;QAC7F,IAAI,IAAI,CAACnC,KAAK,EAAE;AACdkB,YAAAA,eAAAA,CAAgBW,QAAQ,GAAG;AACzBwB,gBAAAA,eAAAA,EAAiB,IAAI,CAACtB,wBAAwB,CAC5C,MACAb,eAAgBO,CAAAA,SAAS,EACzBP,eAAAA,CAAgBuC,iBAAiB,EACjCF,cACAC,EAAAA,eAAAA,EACApB,aACA,IACA,EAAA,KAAA,CAAA;AAEFN,gBAAAA,gBAAAA,EAAkB,IAAI,CAACC,wBAAwB,CAC7C,MACAb,eAAgBO,CAAAA,SAAS,EACzBP,eAAAA,CAAgBuC,iBAAiB,EACjCF,cACAC,EAAAA,eAAAA,EACApB,aACA,IACA,EAAA,IAAA;AAEJ,aAAA;SACK,MAAA;AACLlB,YAAAA,eAAAA,CAAgBW,QAAQ,GAAG,IAAA;AAC7B;AACAX,QAAAA,eAAAA,CAAgBwC,SAAS,GAAG,IAAI,CAAC9B,YAAY,CAACV,eAAAA,CAAAA;AAC9CA,QAAAA,eAAAA,CAAgByC,gBAAgB,GAAGzC,eAAAA,CAAgBwC,SAAS,EAAEE,kBAAkB,KAAU,CAAA,IAAA,IAAA;AAC5F;AACAC,IAAAA,mBAAAA,CAAoB3C,eAAgC,EAAE;QACpD,IAAIA,eAAAA,CAAgBW,QAAQ,EAAE;YAC5B,MAAMA,QAAAA,GAAWX,gBAAgBW,QAAQ;AACzC,YAAA,MAAMV,kBAAkBD,eAAgBE,CAAAA,oBAAoB,CAAEC,mBAAmB,EAAE,CAAC,CAAE,CAAA;YACtF,MAAMjG,SAAAA,GAAY+F,eAAgBO,CAAAA,MAAM,KAAK,YAAA;AAC7C,YAAA,MAAMlE,QAAW,GAAA,IAAI,CAAC4C,SAAS,IAAI,CAAChF,SAAAA;YACpC,IAAI,CAACkF,SAAS,CAAC/B,QAAQ,GAAG,IAAI,CAAC4B,SAAS,GAAGgB,eAAAA,CAAgBe,KAAK;AAChE,YAAA,IAAI,CAAC5B,SAAS,CAACR,UAAU,GAAG,IAAI,CAACI,WAAW;AAC5C,YAAA,IAAI,CAACI,SAAS,CAAC9C,QAAQ,GAAGA,QAAAA;AAC1B,YAAA,IAAI,CAAC8C,SAAS,CAACwD,kBAAkB,GAAG,IAAI,CAAC7D,WAAW;AACpD,YAAA,IAAI,CAACK,SAAS,CAAClF,SAAS,GAAGA,SAAAA;YAC3B,IAAI,CAACmF,SAAS,CAAChC,QAAQ,GAAG,IAAI,CAAC4B,SAAS,GAAGgB,eAAAA,CAAgBgB,MAAM;AACjE,YAAA,IAAI,CAAC5B,SAAS,CAACT,UAAU,GAAG,IAAI,CAACI,WAAW;AAC5C,YAAA,IAAI,CAACK,SAAS,CAAC/C,QAAQ,GAAGA,QAAAA;AAC1B,YAAA,IAAI,CAAC+C,SAAS,CAACuD,kBAAkB,GAAG,IAAI,CAAC7D,WAAW;AACpD,YAAA,IAAI,CAACM,SAAS,CAACnF,SAAS,GAAGA,SAAAA;AAC3B,YAAA,IAAI,CAACkF,SAAS,CAACyD,IAAI,CAAC5C,eAAAA,EAAwBU,SAASwB,eAAe,CAAA;AACpE,YAAA,IAAI,CAAC9C,SAAS,CAACwD,IAAI,CACjBlC,QAASwB,CAAAA,eAAe,CAAEhC,mBAAmB,EAAE,CAAC,CAAE,CAAA,EAClDQ,SAASC,gBAAgB,CAAA;AAE7B;AACF;IACAkC,aAAgB,GAAA;QACd,OAAO,IAAI,CAAC/D,WAAW;AACzB;AACAgE,IAAAA,aAAAA,CAActD,GAAW,EAAE;QACzB,IAAI,CAACV,WAAW,GAAGU,GAAAA;AACrB;IACAuD,aAAgB,GAAA;AACd,QAAA,OAAO,CAAG,EAAA,IAAI,CAAClE,KAAK,GAAG,CAAA,GAAI,CAAI,CAAA,EAAA,IAAI,CAACI,SAAS,GAAG,CAAA,GAAI,CAAG,CAAA,CAAA;AACzD;AACA+D,IAAAA,SAAAA,CAAUC,GAAa,EAAE;QACvB,OAAOA,GAAAA,IAAOzC,QAAQ0C,IAAI,EAAA;AAC5B;AACAf,IAAAA,uBAAAA,CAAwBvC,gBAAiC,EAAE;AACzD,QAAA,MAAMwB,MAASC,GAAAA,SAAAA,EAAAA;AACf,QAAA,OAAOD,OAAO+B,aAAa,EAAA,CAAGC,WAAW,CAACC,uBAAuB,IAC/DjC,MAAAA,CAAO+B,aAAa,EAAA,CAAGC,WAAW,CAACE,yBAAyB,GAC1DlC,MAAO9G,CAAAA,IAAI,KAAK,OACd,GAAA,SAAA,GACA,OACF8G,GAAAA,MAAAA,CAAO+B,aAAa,EAAGC,CAAAA,WAAW,CAACG,2BAA2B,IAC5DnC,OAAO+B,aAAa,EAAA,CAAGC,WAAW,CAACI,6BAA6B,GAChEpC,MAAAA,CAAO9G,IAAI,KAAK,OAAA,GACd,YACA,OACF,GAAA,YAAA;AACR;AACAmJ,IAAAA,uBAAAA,CAAwB7D,gBAAiC,EAAE;QACzD,OAAO,OAAA;AACT;AACA8D,IAAAA,qBAAAA,CACE3D,eAAgC,EAChC1F,KAA4B,EAC5BsJ,QAAqB,EACrB;QACA,MAAMhJ,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAMsD,QAAQwF,qBAAsBrJ,CAAAA,KAAAA,EAAOsJ,UAAU5D,eAAgBwC,CAAAA,SAAS,CAAEhC,MAAM,CAAA;AACtF,QAAA,OAAOR,eAAgBwC,CAAAA,SAAS,CAAEhC,MAAM,KAAK,YAAerC,GAAAA,KAAAA,GAAQvD,EAAGG,CAAAA,IAAI,CAACoD,KAAAA,CAAM9C,CAAC,EAAE,GAAG,CAAG,EAAA,CAAA,CAAA;AAC7F;IACAwI,gBACE7D,CAAAA,eAAgC,EAChC1F,KAA4B,EAC5BwJ,YAAyB,EACzBC,KAAkB,EAClBC,KAAkB,EAClB;AACA,QAAA,MAAMC,wBAA2B,GAAA,sBAAA;QACjC,MAAMrJ,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAMyB,QAAW,GAAA,IAAI,CAACwC,KAAK,IAAI,IAAI,CAACI,SAAS,IAAIc,eAAAA,CAAgBwC,SAAS,CAAEhC,MAAM,KAAK,YAAA;QACvF5F,EAAGsJ,CAAAA,IAAI,CACLD,wBACA,EAAA;AAACrJ,YAAAA,EAAAA,CAAGG,IAAI,CAAC,cAAA,CAAA;AAAiBH,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,OAAA,CAAA;AAAUpB,YAAAA,EAAAA,CAAGuJ,GAAG,CAAC,OAAA;SAAS,EAC7D,WAAA;AACE,YAAA,IAAI,CAACjH,EAAE,CAACkH,WAAW,GAAGxJ,GAAGU,GAAG,CAAC,IAAI,CAACwI,YAAY,EAAE,IAAI,CAACA,YAAY,CAACO,CAAC,CAAA;YACnE,IAAI,CAACnH,EAAE,CAACkH,WAAW,GAAGE,iBAAiB,IAAI,EAAE,IAAI,CAACF,WAAW,CAAA;AAC7D,YAAA,IAAI,CAAClH,EAAE,CAACqH,QAAQ,GAAG3J,EAAAA,CAAG4J,GAAG,CACvB5J,EAAG6J,CAAAA,KAAK,CACN7J,EAAAA,CAAG4J,GAAG,CACJ5J,EAAAA,CAAG8J,KAAK,CACN9J,EAAG+J,CAAAA,gBAAgB,CAAC,IAAI,CAACP,WAAW,CAAC/I,CAAC,EAAE,CAAA,CAAA,EACxCT,EAAGgK,CAAAA,aAAa,CAAC,IAAI,CAACR,WAAW,CAAC/I,CAAC,EAAE,CACrCT,CAAAA,EAAAA,EAAAA,CAAG+J,gBAAgB,CAAC,IAAI,CAACP,WAAW,CAACxI,CAAC,EAAE,IACxChB,EAAGgK,CAAAA,aAAa,CAAC,IAAI,CAACR,WAAW,CAACxI,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCiJ,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACT,WAAW,CAACtI,CAAC,CAAA,CAAA,CAAA;AAGpD,YAAA,IAAI,CAACoB,EAAE,CAAC4H,MAAM,GAAGlK,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA;AAC1B,YAAA,IAAI,CAACW,GAAG,CAAC,IAAI,CAAC4H,QAAQ,EAAE,WAAA;AACtB,gBAAA,IAAI,CAACrH,EAAE,CAAC6H,UAAU,GAAGC,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAACjB,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA;gBACtE,IAAI,CAACc,MAAM,GAAGG,eACZ,CAAA,IAAI,EACJjF,eAAgBO,CAAAA,SAAS,EACzBP,eAAAA,CAAgBwC,SAAS,CAAEhC,MAAM,EACjClE,QAAAA,EACA,IAAI,CAAC8H,WAAW,EAChB,IAAI,CAACJ,KAAK,EACV,IAAI,CAACe,UAAU,CAAA;AAEnB,aAAA,CAAA;AACA,YAAA,IAAI,CAACG,OAAO,CAAC,IAAI,CAACJ,MAAM,CAAA;AAC1B,SAAA,CAAA;AAEF,QAAA,OAAOlK,GAAGuK,cAAc,EAAE,CAAClB,wBAAyB,CAAA,CAACH,cAAcC,KAAOC,EAAAA,KAAAA,CAAAA;AAC5E;AACAoB,IAAAA,aAAAA,CACEpF,eAAgC,EAChC1F,KAA4B,EAC5BwJ,YAAyB,EACzBC,KAAkB,EAClB;AACA,QAAA,MAAMsB,qBAAwB,GAAA,mBAAA;QAC9B,MAAMzK,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAMyB,QAAW,GAAA,IAAI,CAACwC,KAAK,IAAI,IAAI,CAACI,SAAS,IAAIc,eAAAA,CAAgBwC,SAAS,CAAEhC,MAAM,KAAK,YAAA;QACvF5F,EAAGsJ,CAAAA,IAAI,CAACmB,qBAAuB,EAAA;AAACzK,YAAAA,EAAAA,CAAGG,IAAI,CAAC,cAAA,CAAA;AAAiBH,YAAAA,EAAAA,CAAGoB,KAAK,CAAC,OAAA;SAAS,EAAE,WAAA;YAC3E,IAAIgE,eAAAA,CAAgBO,SAAS,KAAKoB,gBAAkB,EAAA;AAClD,gBAAA,IAAI,CAACzE,EAAE,CAACoI,GAAG,GAAG1K,EAAAA,CAAG4C,GAAG,CAAC,IAAI,CAACsG,YAAY,CAACyB,GAAG,EAAEC,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAEF,GAAG,CAAA;gBACpG,IAAI,CAACrI,EAAE,CAACwI,QAAQ,GAAG9K,EAAGU,CAAAA,GAAG,CACvBV,EAAG+K,CAAAA,MAAM,CAAC,IAAI,CAACL,GAAG,CAClBE,EAAAA,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAEpB,CAAC,CAAA;AAExD,gBAAA,IAAI,CAACnH,EAAE,CAAC6H,UAAU,GAAGa,iBAAAA,CACnB5F,gBAAgBO,SAAS,EACzB,IAAI,EACJ,IAAI,CAACmF,QAAQ,EACb,IAAI,CAAC3B,KAAK,EACV,IAAA,CAAA;gBAEF,IAAI,CAACmB,OAAO,CACVD,eAAAA,CACE,IAAI,EACJtD,gBAAAA,EACA3B,gBAAgBwC,SAAS,CAAEhC,MAAM,EACjClE,QAAAA,EACA,IAAI,CAACgJ,GAAG,EACRO,SACA,EAAA,IAAI,CAACd,UAAU,CAAA,CAAA;aAGd,MAAA;AACL,gBAAA,IAAI,CAAC7H,EAAE,CAACkH,WAAW,GAAGxJ,GAAGU,GAAG,CAAC,IAAI,CAACwI,YAAY,EAAE,IAAI,CAACA,YAAY,CAACO,CAAC,CAAA;gBACnE,IAAI,CAACnH,EAAE,CAACkH,WAAW,GAAGE,iBAAiB,IAAI,EAAE,IAAI,CAACF,WAAW,CAAA;AAC7D,gBAAA,IAAI,CAAClH,EAAE,CAACqH,QAAQ,GAAG3J,EAAAA,CAAG4J,GAAG,CACvB5J,EAAG6J,CAAAA,KAAK,CACN7J,EAAAA,CAAG4J,GAAG,CACJ5J,EAAAA,CAAG8J,KAAK,CACN9J,EAAG+J,CAAAA,gBAAgB,CAAC,IAAI,CAACP,WAAW,CAAC/I,CAAC,EAAE,CAAA,CAAA,EACxCT,EAAGgK,CAAAA,aAAa,CAAC,IAAI,CAACR,WAAW,CAAC/I,CAAC,EAAE,CACrCT,CAAAA,EAAAA,EAAAA,CAAG+J,gBAAgB,CAAC,IAAI,CAACP,WAAW,CAACxI,CAAC,EAAE,IACxChB,EAAGgK,CAAAA,aAAa,CAAC,IAAI,CAACR,WAAW,CAACxI,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCiJ,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACT,WAAW,CAACtI,CAAC,CAAA,CAAA,CAAA;AAGpD,gBAAA,IAAI,CAACoB,EAAE,CAAC4H,MAAM,GAAGlK,EAAAA,CAAGoB,KAAK,CAAC,CAAA,CAAA;AAC1B,gBAAA,IAAI,CAACW,GAAG,CAAC,IAAI,CAAC4H,QAAQ,EAAE,WAAA;oBACtB,IAAI,CAACrH,EAAE,CAAC6H,UAAU,GAAGa,iBACnB5F,CAAAA,eAAAA,CAAgBO,SAAS,EACzB,IAAI,EACJ,IAAI,CAAC6D,WAAW,CAACtI,CAAC,EAClB,IAAI,CAACiI,KAAK,EACV,KAAA,CAAA;oBAEF,IAAI,CAACe,MAAM,GAAGG,eAAAA,CACZ,IAAI,EACJjF,eAAAA,CAAgBO,SAAS,EACzBP,eAAgBwC,CAAAA,SAAS,CAAEhC,MAAM,EACjClE,UACA,IAAI,CAAC8H,WAAW,EAChByB,SAAAA,EACA,IAAI,CAACd,UAAU,CAAA;AAEnB,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACG,OAAO,CAAC,IAAI,CAACJ,MAAM,CAAA;AAC1B;AACF,SAAA,CAAA;AACA,QAAA,OAAOlK,GAAGuK,cAAc,EAAE,CAACE,qBAAAA,CAAsB,CAACvB,YAAcC,EAAAA,KAAAA,CAAAA;AAClE;AACA+B,IAAAA,kBAAAA,CAAmBjG,gBAAiC,EAAE;QACpD,OAAO,KAAA;AACT;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"esm.js","sources":["../../src/shadow/esm.ts"],"sourcesContent":["import type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { getPackedShadowMapClearColor, getShadowMapFarthestDepth, ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport {\r\n computeShadowMapDepth,\r\n filterShadowESM,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\nimport { Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: Nullable<FrameBuffer>;\r\n blurFramebuffer2: Nullable<FrameBuffer>;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat = false;\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 1, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.coverageSum = pb.float(0);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.coverage0 = pb.clamp(scope.d0.y, 0, 1);\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.coverageSum = pb.add(scope.coverageSum, pb.mul(scope.incrementalGaussian.x, scope.coverage0));\r\n\r\n if (that.logSpace) {\r\n scope.maxLogValue = pb.float(-1e20);\r\n scope.logValue0 = that._phase === 'horizonal' ? pb.mul(scope.d0.x, scope.multiplier) : scope.d0.x;\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.maxLogValue = this.logValue0;\r\n });\r\n } else {\r\n scope.depthSum = pb.mul(scope.incrementalGaussian.x, scope.coverage0, scope.d0.x);\r\n }\r\n\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(scope, type, srcTex, pb.sub(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.coefficientSum = pb.add(this.coefficientSum, pb.mul(this.incrementalGaussian.x, 2));\r\n this.coverageSum = pb.add(\r\n this.coverageSum,\r\n pb.mul(this.incrementalGaussian.x, pb.add(this.coverage1, this.coverage2))\r\n );\r\n if (that.logSpace) {\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue1);\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue2);\r\n });\r\n } else {\r\n this.depthSum = pb.add(\r\n this.depthSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n pb.add(pb.mul(this.coverage1, this.d1.x), pb.mul(this.coverage2, this.d2.x))\r\n )\r\n );\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n\r\n if (that.logSpace) {\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.momentSum = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage0,\r\n pb.exp(pb.min(87, pb.sub(this.logValue0, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage1,\r\n pb.exp(pb.min(87, pb.sub(this.logValue1, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage2,\r\n pb.exp(pb.min(87, pb.sub(this.logValue2, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.moment = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.moment = pb.add(this.maxLogValue, pb.log(pb.div(this.momentSum, this.coverageSum)));\r\n });\r\n return pb.vec4(scope.moment, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n } else {\r\n scope.$l.depth = pb.float(1);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.depth = pb.div(this.depthSum, this.coverageSum);\r\n });\r\n return pb.vec4(scope.depth, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash() {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n getType() {\r\n return 'esm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\": under reverse-Z that is 0 for\r\n // device-encoded directional/rect maps, 1 for linear point/spot maps.\r\n const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? getPackedShadowMapClearColor(shadowMapParams.lightType)\r\n : new Vector4(farthest, 0, 0, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2!.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0];\r\n const packFloat = colorAttachment.format === 'rgba8unorm';\r\n const logSpace = this._logSpace && !packFloat;\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = logSpace;\r\n this._blitterH.logSpaceMultiplier = this._depthScale;\r\n this._blitterH.packFloat = packFloat;\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = logSpace;\r\n this._blitterV.logSpaceMultiplier = this._depthScale;\r\n this._blitterV.packFloat = packFloat;\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer!);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2!\r\n );\r\n }\r\n }\r\n getDepthScale() {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash() {\r\n return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depth = computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n return shadowMapParams.shadowMap!.format === 'rgba8unorm' ? depth : pb.vec4(depth.x, 1, 0, 1);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n this.split,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n filterShadowESM(\r\n this,\r\n LIGHT_TYPE_POINT,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.dir,\r\n undefined,\r\n this.shadowBias\r\n )\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n undefined,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","filter","that","incrementalGaussian","vec3","x","div","mul","sigma","Math","sqrt","PI","y","exp","z","coefficientSum","float","coverageSum","d0","coverage0","clamp","add","logSpace","maxLogValue","logValue0","_phase","multiplier","$if","greaterThan","depthSum","xy","yz","$for","numBlurPixelsPerSide","$l","blurOffset","blurMultiplyVec","blurSize","i","d1","sub","d2","coverage1","coverage2","logValue1","logValue2","max","momentSum","min","moment","log","depth","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","getType","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","farthest","getShadowMapFarthestDepth","lightType","format","getPackedShadowMapClearColor","Vector4","getShadowMap","implData","blurFramebuffer2","fetchTemporalFramebuffer","autoRelease","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","logSpaceMultiplier","blit","getDepthScale","setDepthScale","getShaderHash","getParams","out","zero","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","shadowCoord","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","shadowCoordDepthInRange","shadow","shadowBias","computeShadowBiasCSM","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","useNativeShadowMap"],"mappings":"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"}
|
package/dist/shadow/pcss.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ShadowImpl } from './shadow_impl.js';
|
|
3
|
-
import {
|
|
1
|
+
import { Vector4 } from '@zephyr3d/base';
|
|
2
|
+
import { ShadowImpl, getShadowMapFarthestDepth, getPackedShadowMapClearColor } from './shadow_impl.js';
|
|
3
|
+
import { computeShadowMapDepth, ndcToShadowCoord, shadowCoordDepthInRange, computeReceiverPlaneDepthBias, applyShadowDepthBias, filterShadowPCSS } from '../shaders/shadow.js';
|
|
4
4
|
import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
|
|
5
5
|
import { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values.js';
|
|
6
6
|
import { ShaderHelper } from '../material/shader/helper.js';
|
|
@@ -62,11 +62,12 @@ import { getDevice } from '../app/api.js';
|
|
|
62
62
|
return this._lightRadius > 0 ? Math.ceil(Math.max(this._lightRadius, this._maxFilterRadius) + 2) : 0;
|
|
63
63
|
}
|
|
64
64
|
getShadowMapClearColor(shadowMapParams) {
|
|
65
|
+
const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];
|
|
65
66
|
// Empty texels must read as "farthest" (no blocker): under reverse-Z
|
|
66
67
|
// that is 0 for the device-encoded directional/rect maps, while the
|
|
67
68
|
// linear point/spot encodings keep 1 = far.
|
|
68
|
-
const farthest =
|
|
69
|
-
return new Vector4(farthest, farthest, farthest, 1);
|
|
69
|
+
const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);
|
|
70
|
+
return colorAttachment ? colorAttachment.format === 'rgba8unorm' ? getPackedShadowMapClearColor(shadowMapParams.lightType) : new Vector4(farthest, farthest, farthest, 1) : null;
|
|
70
71
|
}
|
|
71
72
|
getShadowMap(shadowMapParams) {
|
|
72
73
|
return shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0];
|
package/dist/shadow/pcss.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcss.js","sources":["../../src/shadow/pcss.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { REVERSE_Z, Vector4 } from '@zephyr3d/base';\r\nimport type { PBInsideFunctionScope, PBShaderExp, TextureFormat } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport {\r\n applyShadowDepthBias,\r\n computeReceiverPlaneDepthBias,\r\n computeShadowMapDepth,\r\n filterShadowPCSS,\r\n isDeviceDepthShadow,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @internal */\r\nexport class PCSS extends ShadowImpl {\r\n protected _lightRadius: number;\r\n protected _blockerSampleCount: number;\r\n protected _filterSampleCount: number;\r\n protected _maxFilterRadius: number;\r\n protected _temporalJitter: boolean;\r\n constructor(\r\n lightRadius?: number,\r\n blockerSampleCount?: number,\r\n filterSampleCount?: number,\r\n maxFilterRadius?: number,\r\n temporalJitter?: boolean\r\n ) {\r\n super();\r\n this._lightRadius = lightRadius ?? 8;\r\n this._blockerSampleCount = blockerSampleCount ?? 24;\r\n this._filterSampleCount = filterSampleCount ?? 32;\r\n this._maxFilterRadius = maxFilterRadius ?? 32;\r\n this._temporalJitter = temporalJitter ?? true;\r\n }\r\n get lightRadius() {\r\n return this._lightRadius;\r\n }\r\n set lightRadius(val) {\r\n this._lightRadius = Math.max(0, Number(val) || 0);\r\n }\r\n get blockerSampleCount() {\r\n return this._blockerSampleCount;\r\n }\r\n set blockerSampleCount(val) {\r\n this._blockerSampleCount = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n }\r\n get filterSampleCount() {\r\n return this._filterSampleCount;\r\n }\r\n set filterSampleCount(val) {\r\n this._filterSampleCount = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n }\r\n get maxFilterRadius() {\r\n return this._maxFilterRadius;\r\n }\r\n set maxFilterRadius(val) {\r\n this._maxFilterRadius = Math.max(1, Number(val) || 1);\r\n }\r\n get temporalJitter() {\r\n return this._temporalJitter;\r\n }\r\n set temporalJitter(val) {\r\n this._temporalJitter = !!val;\r\n }\r\n getType() {\r\n return 'pcss' as const;\r\n }\r\n dispose() {}\r\n resourceDirty() {\r\n return false;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._lightRadius > 0 ? Math.ceil(Math.max(this._lightRadius, this._maxFilterRadius) + 2) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n // Empty texels must read as \"farthest\" (no blocker): under reverse-Z\r\n // that is 0 for the device-encoded directional/rect maps, while the\r\n // linear point/spot encodings keep 1 = far.\r\n const farthest = REVERSE_Z && isDeviceDepthShadow(shadowMapParams.lightType) ? 0 : 1;\r\n return new Vector4(farthest, farthest, farthest, 1);\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0] as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale() {\r\n return 1;\r\n }\r\n setDepthScale(_val: number) {}\r\n getShaderHash() {\r\n return `${Number(this._temporalJitter)}`;\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams): Nullable<TextureFormat> {\r\n const device = getDevice();\r\n if (device.type === 'webgl') {\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? 'rgba16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? 'rgba32f'\r\n : 'rgba8unorm';\r\n }\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? 'r16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? 'r32f'\r\n : 'rgba8unorm';\r\n }\r\n getParams(out: Vector4) {\r\n out = out ?? new Vector4();\r\n out.setXYZW(this._lightRadius, this._blockerSampleCount, this._filterSampleCount, this._maxFilterRadius);\r\n return out;\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return this.preferredShadowMapDepthFormat();\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$l.receiverPlaneDepthBias = computeReceiverPlaneDepthBias(this, this.shadowCoord);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = applyShadowDepthBias(this, this.shadowCoord.z, this.shadowBias, true);\r\n this.shadow = filterShadowPCSS(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias,\r\n this.split,\r\n that._temporalJitter,\r\n shadowMapParams.numShadowCascades\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$l.shadowCoord = pb.vec4(this.dir, pb.sub(this.distance, this.shadowBias));\r\n this.$return(\r\n filterShadowPCSS(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n undefined,\r\n undefined,\r\n that._temporalJitter\r\n )\r\n );\r\n }\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.shadowCoord.z = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowCoord.z,\r\n this.nearFar\r\n );\r\n }\r\n this.$l.receiverPlaneDepthBias = computeReceiverPlaneDepthBias(this, this.shadowCoord);\r\n this.$if(this.inShadow, function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n true\r\n );\r\n } else {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n }\r\n this.shadowCoord.z = applyShadowDepthBias(\r\n this,\r\n this.shadowCoord.z,\r\n this.shadowBias,\r\n shadowMapParams.lightType !== LIGHT_TYPE_SPOT\r\n );\r\n this.shadow = filterShadowPCSS(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias,\r\n undefined,\r\n that._temporalJitter\r\n );\r\n });\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n /** @internal */\r\n samplePointShadowMap(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMap = 'lib_samplePointShadowMapPCSS';\r\n const pb = scope.$builder;\r\n pb.func(funcNameSampleShadowMap, [pb.vec3('coords'), pb.float('z'), pb.float('bias')], function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCSS","ShadowImpl","_lightRadius","_blockerSampleCount","_filterSampleCount","_maxFilterRadius","_temporalJitter","lightRadius","blockerSampleCount","filterSampleCount","maxFilterRadius","temporalJitter","val","Math","max","Number","min","getType","dispose","resourceDirty","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","farthest","REVERSE_Z","isDeviceDepthShadow","lightType","Vector4","getShadowMap","shadowMapFramebuffer","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","device","getDevice","type","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","supportFloatColorBuffer","getParams","out","setXYZW","getShadowMapDepthFormat","preferredShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","shadowCoordDepthInRange","z","shadow","receiverPlaneDepthBias","computeReceiverPlaneDepthBias","$if","shadowBias","computeShadowBiasCSM","applyShadowDepthBias","filterShadowPCSS","numShadowCascades","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","sub","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","LIGHT_TYPE_SPOT","nearFar","getShadowCameraParams","xy","nonLinearDepthToLinearNormalized","useNativeShadowMap","samplePointShadowMap","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step"],"mappings":";;;;;;;;;AAoBA,iBACO,MAAMA,IAAaC,SAAAA,UAAAA,CAAAA;IACdC,YAAqB;IACrBC,mBAA4B;IAC5BC,kBAA2B;IAC3BC,gBAAyB;IACzBC,eAAyB;IACnC,WACEC,CAAAA,WAAoB,EACpBC,kBAA2B,EAC3BC,iBAA0B,EAC1BC,eAAwB,EACxBC,cAAwB,CACxB;QACA,KAAK,EAAA;QACL,IAAI,CAACT,YAAY,GAAGK,WAAe,IAAA,CAAA;QACnC,IAAI,CAACJ,mBAAmB,GAAGK,kBAAsB,IAAA,EAAA;QACjD,IAAI,CAACJ,kBAAkB,GAAGK,iBAAqB,IAAA,EAAA;QAC/C,IAAI,CAACJ,gBAAgB,GAAGK,eAAmB,IAAA,EAAA;QAC3C,IAAI,CAACJ,eAAe,GAAGK,cAAkB,IAAA,IAAA;AAC3C;AACA,IAAA,IAAIJ,WAAc,GAAA;QAChB,OAAO,IAAI,CAACL,YAAY;AAC1B;IACA,IAAIK,WAAAA,CAAYK,GAAG,EAAE;QACnB,IAAI,CAACV,YAAY,GAAGW,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAGC,OAAOH,GAAQ,CAAA,IAAA,CAAA,CAAA;AACjD;AACA,IAAA,IAAIJ,kBAAqB,GAAA;QACvB,OAAO,IAAI,CAACL,mBAAmB;AACjC;IACA,IAAIK,kBAAAA,CAAmBI,GAAG,EAAE;AAC1B,QAAA,IAAI,CAACT,mBAAmB,GAAGU,IAAAA,CAAKG,GAAG,CAACH,IAAKC,CAAAA,GAAG,CAAC,CAAA,EAAGC,MAAOH,CAAAA,GAAAA,CAAAA,IAAQ,CAAI,CAAA,EAAA,EAAA,CAAA;AACrE;AACA,IAAA,IAAIH,iBAAoB,GAAA;QACtB,OAAO,IAAI,CAACL,kBAAkB;AAChC;IACA,IAAIK,iBAAAA,CAAkBG,GAAG,EAAE;AACzB,QAAA,IAAI,CAACR,kBAAkB,GAAGS,IAAAA,CAAKG,GAAG,CAACH,IAAKC,CAAAA,GAAG,CAAC,CAAA,EAAGC,MAAOH,CAAAA,GAAAA,CAAAA,IAAQ,CAAI,CAAA,EAAA,EAAA,CAAA;AACpE;AACA,IAAA,IAAIF,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACL,gBAAgB;AAC9B;IACA,IAAIK,eAAAA,CAAgBE,GAAG,EAAE;QACvB,IAAI,CAACP,gBAAgB,GAAGQ,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAGC,OAAOH,GAAQ,CAAA,IAAA,CAAA,CAAA;AACrD;AACA,IAAA,IAAID,cAAiB,GAAA;QACnB,OAAO,IAAI,CAACL,eAAe;AAC7B;IACA,IAAIK,cAAAA,CAAeC,GAAG,EAAE;AACtB,QAAA,IAAI,CAACN,eAAe,GAAG,CAAC,CAACM,GAAAA;AAC3B;IACAK,OAAU,GAAA;QACR,OAAO,MAAA;AACT;AACAC,IAAAA,OAAAA,GAAU;IACVC,aAAgB,GAAA;QACd,OAAO,KAAA;AACT;AACAC,IAAAA,kBAAAA,CAAmBC,gBAAiC,EAAE;AACpD,QAAA,OAAO,IAAI,CAACnB,YAAY,GAAG,CAAIW,GAAAA,IAAAA,CAAKS,IAAI,CAACT,IAAAA,CAAKC,GAAG,CAAC,IAAI,CAACZ,YAAY,EAAE,IAAI,CAACG,gBAAgB,IAAI,CAAK,CAAA,GAAA,CAAA;AACrG;AACAkB,IAAAA,sBAAAA,CAAuBC,eAAgC,EAAE;;;;AAIvD,QAAA,MAAMC,WAAWC,SAAaC,IAAAA,mBAAAA,CAAoBH,eAAgBI,CAAAA,SAAS,IAAI,CAAI,GAAA,CAAA;AACnF,QAAA,OAAO,IAAIC,OAAAA,CAAQJ,QAAUA,EAAAA,QAAAA,EAAUA,QAAU,EAAA,CAAA,CAAA;AACnD;AACAK,IAAAA,YAAAA,CAAaN,eAAgC,EAAE;AAC7C,QAAA,OAAOA,gBAAgBO,oBAAoB,CAAEC,mBAAmB,EAAE,CAAC,CAAE,CAAA;AACvE;AACAC,IAAAA,iBAAAA,CAAkBT,eAAgC,EAAE;AAClDA,QAAAA,eAAAA,CAAgBU,SAAS,GAAG,IAAI,CAACJ,YAAY,CAACN,eAAAA,CAAAA;AAC9CA,QAAAA,eAAAA,CAAgBW,gBAAgB,GAAGX,eAAAA,CAAgBU,SAAS,EAAEE,kBAAkB,KAAU,CAAA,IAAA,IAAA;AAC5F;AACAC,IAAAA,mBAAAA,GAAsB;IACtBC,aAAgB,GAAA;QACd,OAAO,CAAA;AACT;IACAC,aAAcC,CAAAA,IAAY,EAAE;IAC5BC,aAAgB,GAAA;AACd,QAAA,OAAO,CAAG1B,EAAAA,MAAAA,CAAO,IAAI,CAACT,eAAe,CAAG,CAAA,CAAA;AAC1C;AACAoC,IAAAA,uBAAAA,CAAwBrB,gBAAiC,EAA2B;AAClF,QAAA,MAAMsB,MAASC,GAAAA,SAAAA,EAAAA;QACf,IAAID,MAAAA,CAAOE,IAAI,KAAK,OAAS,EAAA;AAC3B,YAAA,OAAOF,MAAOG,CAAAA,aAAa,EAAGC,CAAAA,WAAW,CAACC,2BAA2B,GACjE,SACAL,GAAAA,MAAAA,CAAOG,aAAa,EAAGC,CAAAA,WAAW,CAACE,uBAAuB,GACxD,SACA,GAAA,YAAA;AACR;AACA,QAAA,OAAON,MAAOG,CAAAA,aAAa,EAAGC,CAAAA,WAAW,CAACC,2BAA2B,GACjE,MACAL,GAAAA,MAAAA,CAAOG,aAAa,EAAGC,CAAAA,WAAW,CAACE,uBAAuB,GACxD,MACA,GAAA,YAAA;AACR;AACAC,IAAAA,SAAAA,CAAUC,GAAY,EAAE;AACtBA,QAAAA,GAAAA,GAAMA,OAAO,IAAItB,OAAAA,EAAAA;AACjBsB,QAAAA,GAAAA,CAAIC,OAAO,CAAC,IAAI,CAAClD,YAAY,EAAE,IAAI,CAACC,mBAAmB,EAAE,IAAI,CAACC,kBAAkB,EAAE,IAAI,CAACC,gBAAgB,CAAA;QACvG,OAAO8C,GAAAA;AACT;AACAE,IAAAA,uBAAAA,CAAwBhC,gBAAiC,EAAiB;QACxE,OAAO,IAAI,CAACiC,6BAA6B,EAAA;AAC3C;AACAC,IAAAA,qBAAAA,CACE/B,eAAgC,EAChCgC,KAA4B,EAC5BC,QAAqB,EACrB;AACA,QAAA,OAAOF,sBAAsBC,KAAOC,EAAAA,QAAAA,EAAUjC,eAAgBU,CAAAA,SAAS,CAAEwB,MAAM,CAAA;AACjF;IACAC,gBACEnC,CAAAA,eAAgC,EAChCgC,KAA4B,EAC5BI,YAAyB,EACzBC,KAAkB,EAClBC,KAAkB,EAClB;AACA,QAAA,MAAMC,wBAA2B,GAAA,sBAAA;QACjC,MAAMC,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CACLJ,wBACA,EAAA;AAACC,YAAAA,EAAAA,CAAGI,IAAI,CAAC,cAAA,CAAA;AAAiBJ,YAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA,CAAA;AAAUL,YAAAA,EAAAA,CAAGM,GAAG,CAAC,OAAA;SAAS,EAC7D,WAAA;AACE,YAAA,IAAI,CAACC,EAAE,CAACC,WAAW,GAAGR,GAAGS,GAAG,CAAC,IAAI,CAACb,YAAY,EAAE,IAAI,CAACA,YAAY,CAACc,CAAC,CAAA;YACnE,IAAI,CAACH,EAAE,CAACC,WAAW,GAAGG,iBAAiB,IAAI,EAAE,IAAI,CAACH,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACD,EAAE,CAACK,QAAQ,GAAGZ,EAAAA,CAAGa,GAAG,CACvBb,EAAGc,CAAAA,KAAK,CACNd,EAAAA,CAAGa,GAAG,CACJb,EAAAA,CAAGe,KAAK,CACNf,EAAGgB,CAAAA,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACS,CAAC,EAAE,CAAA,CAAA,EACxCjB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACS,CAAC,EAAE,CACrCjB,CAAAA,EAAAA,EAAAA,CAAGgB,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACW,CAAC,EAAE,IACxCnB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACW,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCC,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACZ,WAAW,CAACa,CAAC,CAAA,CAAA,CAAA;AAGpD,YAAA,IAAI,CAACd,EAAE,CAACe,MAAM,GAAGtB,EAAAA,CAAGK,KAAK,CAAC,CAAA,CAAA;YAC1B,IAAI,CAACE,EAAE,CAACgB,sBAAsB,GAAGC,8BAA8B,IAAI,EAAE,IAAI,CAAChB,WAAW,CAAA;AACrF,YAAA,IAAI,CAACiB,GAAG,CAAC,IAAI,CAACb,QAAQ,EAAE,WAAA;AACtB,gBAAA,IAAI,CAACL,EAAE,CAACmB,UAAU,GAAGC,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAAC9B,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA;AACtE,gBAAA,IAAI,CAACU,WAAW,CAACa,CAAC,GAAGO,qBAAqB,IAAI,EAAE,IAAI,CAACpB,WAAW,CAACa,CAAC,EAAE,IAAI,CAACK,UAAU,EAAE,IAAA,CAAA;AACrF,gBAAA,IAAI,CAACJ,MAAM,GAAGO,gBAAAA,CACZ,IAAI,EACJrE,eAAgBI,CAAAA,SAAS,EACzBJ,eAAAA,CAAgBU,SAAS,CAAEwB,MAAM,EACjC,IAAI,CAACc,WAAW,EAChB,IAAI,CAACe,sBAAsB,EAC3B,IAAI,CAACzB,KAAK,EACVI,IAAAA,CAAK5D,eAAe,EACpBkB,gBAAgBsE,iBAAiB,CAAA;AAErC,aAAA,CAAA;AACA,YAAA,IAAI,CAACC,OAAO,CAAC,IAAI,CAACT,MAAM,CAAA;AAC1B,SAAA,CAAA;AAEF,QAAA,OAAOtB,GAAGgC,cAAc,EAAE,CAACjC,wBAAyB,CAAA,CAACH,cAAcC,KAAOC,EAAAA,KAAAA,CAAAA;AAC5E;AACAmC,IAAAA,aAAAA,CACEzE,eAAgC,EAChCgC,KAA4B,EAC5BI,YAAyB,EACzBC,KAAkB,EAClB;AACA,QAAA,MAAMqC,qBAAwB,GAAA,mBAAA;QAC9B,MAAMlC,EAAAA,GAAKR,MAAMS,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CAAC+B,qBAAuB,EAAA;AAAClC,YAAAA,EAAAA,CAAGI,IAAI,CAAC,cAAA,CAAA;AAAiBJ,YAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA;SAAS,EAAE,WAAA;YAC3E,IAAI7C,eAAAA,CAAgBI,SAAS,KAAKuE,gBAAkB,EAAA;AAClD,gBAAA,IAAI,CAAC5B,EAAE,CAAC6B,GAAG,GAAGpC,EAAAA,CAAGqC,GAAG,CAAC,IAAI,CAACzC,YAAY,CAAC0C,GAAG,EAAEC,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAEF,GAAG,CAAA;gBACpG,IAAI,CAAC/B,EAAE,CAACkC,QAAQ,GAAGzC,EAAGS,CAAAA,GAAG,CACvBT,EAAG0C,CAAAA,MAAM,CAAC,IAAI,CAACN,GAAG,CAClBG,EAAAA,YAAAA,CAAaC,iCAAiC,CAAC,IAAI,EAAE9B,CAAC,CAAA;AAExD,gBAAA,IAAI,CAACH,EAAE,CAACmB,UAAU,GAAGiB,iBAAAA,CACnBnF,gBAAgBI,SAAS,EACzB,IAAI,EACJ,IAAI,CAAC6E,QAAQ,EACb,IAAI,CAAC5C,KAAK,EACV,IAAA,CAAA;gBAEF,IAAI,CAACU,EAAE,CAACC,WAAW,GAAGR,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACgC,GAAG,EAAEpC,EAAAA,CAAGqC,GAAG,CAAC,IAAI,CAACI,QAAQ,EAAE,IAAI,CAACf,UAAU,CAAA,CAAA;gBAC7E,IAAI,CAACK,OAAO,CACVF,gBAAAA,CACE,IAAI,EACJrE,eAAAA,CAAgBI,SAAS,EACzBJ,eAAAA,CAAgBU,SAAS,CAAEwB,MAAM,EACjC,IAAI,CAACc,WAAW,EAChBoC,SAAAA,EACAA,SACA1C,EAAAA,IAAAA,CAAK5D,eAAe,CAAA,CAAA;AAG1B;AACA,YAAA,IAAI,CAACiE,EAAE,CAACC,WAAW,GAAGR,GAAGS,GAAG,CAAC,IAAI,CAACb,YAAY,EAAE,IAAI,CAACA,YAAY,CAACc,CAAC,CAAA;YACnE,IAAI,CAACH,EAAE,CAACC,WAAW,GAAGG,iBAAiB,IAAI,EAAE,IAAI,CAACH,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACD,EAAE,CAACK,QAAQ,GAAGZ,EAAAA,CAAGa,GAAG,CACvBb,EAAGc,CAAAA,KAAK,CACNd,EAAAA,CAAGa,GAAG,CACJb,EAAAA,CAAGe,KAAK,CACNf,EAAGgB,CAAAA,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACS,CAAC,EAAE,CAAA,CAAA,EACxCjB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACS,CAAC,EAAE,CACrCjB,CAAAA,EAAAA,EAAAA,CAAGgB,gBAAgB,CAAC,IAAI,CAACR,WAAW,CAACW,CAAC,EAAE,IACxCnB,EAAGkB,CAAAA,aAAa,CAAC,IAAI,CAACV,WAAW,CAACW,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,EAGzCC,uBAAwB,CAAA,IAAI,EAAE,IAAI,CAACZ,WAAW,CAACa,CAAC,CAAA,CAAA,CAAA;AAGpD,YAAA,IAAI,CAACd,EAAE,CAACe,MAAM,GAAGtB,EAAAA,CAAGK,KAAK,CAAC,CAAA,CAAA;YAC1B,IAAI7C,eAAAA,CAAgBI,SAAS,KAAKiF,eAAiB,EAAA;gBACjD,IAAI,CAACtC,EAAE,CAACuC,OAAO,GAAGP,aAAaQ,qBAAqB,CAAC,IAAI,CAAA,CAAEC,EAAE;AAC7D,gBAAA,IAAI,CAACxC,WAAW,CAACa,CAAC,GAAGkB,YAAAA,CAAaU,gCAAgC,CAChE,IAAI,EACJ,IAAI,CAACzC,WAAW,CAACa,CAAC,EAClB,IAAI,CAACyB,OAAO,CAAA;AAEhB;YACA,IAAI,CAACvC,EAAE,CAACgB,sBAAsB,GAAGC,8BAA8B,IAAI,EAAE,IAAI,CAAChB,WAAW,CAAA;AACrF,YAAA,IAAI,CAACiB,GAAG,CAAC,IAAI,CAACb,QAAQ,EAAE,WAAA;gBACtB,IAAIpD,eAAAA,CAAgBI,SAAS,KAAKiF,eAAiB,EAAA;oBACjD,IAAI,CAACtC,EAAE,CAACmB,UAAU,GAAGiB,iBACnBnF,CAAAA,eAAAA,CAAgBI,SAAS,EACzB,IAAI,EACJ,IAAI,CAAC4C,WAAW,CAACa,CAAC,EAClB,IAAI,CAACxB,KAAK,EACV,IAAA,CAAA;iBAEG,MAAA;oBACL,IAAI,CAACU,EAAE,CAACmB,UAAU,GAAGiB,iBACnBnF,CAAAA,eAAAA,CAAgBI,SAAS,EACzB,IAAI,EACJ,IAAI,CAAC4C,WAAW,CAACa,CAAC,EAClB,IAAI,CAACxB,KAAK,EACV,KAAA,CAAA;AAEJ;gBACA,IAAI,CAACW,WAAW,CAACa,CAAC,GAAGO,oBACnB,CAAA,IAAI,EACJ,IAAI,CAACpB,WAAW,CAACa,CAAC,EAClB,IAAI,CAACK,UAAU,EACflE,eAAAA,CAAgBI,SAAS,KAAKiF,eAAAA,CAAAA;gBAEhC,IAAI,CAACvB,MAAM,GAAGO,gBACZ,CAAA,IAAI,EACJrE,eAAgBI,CAAAA,SAAS,EACzBJ,eAAAA,CAAgBU,SAAS,CAAEwB,MAAM,EACjC,IAAI,CAACc,WAAW,EAChB,IAAI,CAACe,sBAAsB,EAC3BqB,SACA1C,EAAAA,IAAAA,CAAK5D,eAAe,CAAA;AAExB,aAAA,CAAA;AACA,YAAA,IAAI,CAACyF,OAAO,CAAC,IAAI,CAACT,MAAM,CAAA;AAC1B,SAAA,CAAA;AACA,QAAA,OAAOtB,GAAGgC,cAAc,EAAE,CAACE,qBAAAA,CAAsB,CAACtC,YAAcC,EAAAA,KAAAA,CAAAA;AAClE;AACAqD,IAAAA,kBAAAA,CAAmB7F,gBAAiC,EAAE;QACpD,OAAO,KAAA;AACT;qBAEA8F,oBACE3F,CAAAA,eAAgC,EAChCgC,KAA4B,EAC5B4D,MAAmB,EACnB/B,CAAc,EACdgC,IAAiB,EACjB;AACA,QAAA,MAAMC,uBAA0B,GAAA,8BAAA;QAChC,MAAMtD,EAAAA,GAAKR,MAAMS,QAAQ;QACzBD,EAAGG,CAAAA,IAAI,CAACmD,uBAAyB,EAAA;AAACtD,YAAAA,EAAAA,CAAGuD,IAAI,CAAC,QAAA,CAAA;AAAWvD,YAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,YAAAA,EAAAA,CAAGK,KAAK,CAAC,MAAA;SAAQ,EAAE,WAAA;AACrF,YAAA,MAAMmD,iBAAoBhG,GAAAA,eAAAA,CAAgBU,SAAS,CAAEwB,MAAM,KAAK,YAAA;AAChE,YAAA,IAAI,CAACa,EAAE,CAACkD,SAAS,GAAGzD,GAAG0D,kBAAkB,CAACnB,YAAazE,CAAAA,YAAY,CAAC,IAAI,CAAA,EAAG,IAAI,CAACsF,MAAM,EAAE,CAAA,CAAA;AACxF,YAAA,IAAI,CAACI,iBAAmB,EAAA;gBACtB,IAAI,CAACC,SAAS,CAACxC,CAAC,GAAG0C,8BAA8B,IAAI,EAAE,IAAI,CAACF,SAAS,CAAA;AACvE;AACA,YAAA,IAAI,CAAClD,EAAE,CAACkC,QAAQ,GAAGzC,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAAChB,CAAC,EAAE,IAAI,CAACgC,IAAI,CAAA;AAC3C,YAAA,IAAI,CAACtB,OAAO,CAAC/B,EAAAA,CAAG4D,IAAI,CAAC,IAAI,CAACnB,QAAQ,EAAE,IAAI,CAACgB,SAAS,CAACxC,CAAC,CAAA,CAAA;AACtD,SAAA,CAAA;AACA,QAAA,OAAOjB,GAAGgC,cAAc,EAAE,CAACsB,uBAAwB,CAAA,CAACF,QAAQ/B,CAAGgC,EAAAA,IAAAA,CAAAA;AACjE;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"pcss.js","sources":["../../src/shadow/pcss.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { PBInsideFunctionScope, PBShaderExp, TextureFormat } from '@zephyr3d/device';\r\nimport { getPackedShadowMapClearColor, getShadowMapFarthestDepth, ShadowImpl } from './shadow_impl';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport {\r\n applyShadowDepthBias,\r\n computeReceiverPlaneDepthBias,\r\n computeShadowMapDepth,\r\n filterShadowPCSS,\r\n ndcToShadowCoord,\r\n shadowCoordDepthInRange\r\n} from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @internal */\r\nexport class PCSS extends ShadowImpl {\r\n protected _lightRadius: number;\r\n protected _blockerSampleCount: number;\r\n protected _filterSampleCount: number;\r\n protected _maxFilterRadius: number;\r\n protected _temporalJitter: boolean;\r\n constructor(\r\n lightRadius?: number,\r\n blockerSampleCount?: number,\r\n filterSampleCount?: number,\r\n maxFilterRadius?: number,\r\n temporalJitter?: boolean\r\n ) {\r\n super();\r\n this._lightRadius = lightRadius ?? 8;\r\n this._blockerSampleCount = blockerSampleCount ?? 24;\r\n this._filterSampleCount = filterSampleCount ?? 32;\r\n this._maxFilterRadius = maxFilterRadius ?? 32;\r\n this._temporalJitter = temporalJitter ?? true;\r\n }\r\n get lightRadius() {\r\n return this._lightRadius;\r\n }\r\n set lightRadius(val) {\r\n this._lightRadius = Math.max(0, Number(val) || 0);\r\n }\r\n get blockerSampleCount() {\r\n return this._blockerSampleCount;\r\n }\r\n set blockerSampleCount(val) {\r\n this._blockerSampleCount = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n }\r\n get filterSampleCount() {\r\n return this._filterSampleCount;\r\n }\r\n set filterSampleCount(val) {\r\n this._filterSampleCount = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n }\r\n get maxFilterRadius() {\r\n return this._maxFilterRadius;\r\n }\r\n set maxFilterRadius(val) {\r\n this._maxFilterRadius = Math.max(1, Number(val) || 1);\r\n }\r\n get temporalJitter() {\r\n return this._temporalJitter;\r\n }\r\n set temporalJitter(val) {\r\n this._temporalJitter = !!val;\r\n }\r\n getType() {\r\n return 'pcss' as const;\r\n }\r\n dispose() {}\r\n resourceDirty() {\r\n return false;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._lightRadius > 0 ? Math.ceil(Math.max(this._lightRadius, this._maxFilterRadius) + 2) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\" (no blocker): under reverse-Z\r\n // that is 0 for the device-encoded directional/rect maps, while the\r\n // linear point/spot encodings keep 1 = far.\r\n const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? getPackedShadowMapClearColor(shadowMapParams.lightType)\r\n : new Vector4(farthest, farthest, farthest, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0] as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale() {\r\n return 1;\r\n }\r\n setDepthScale(_val: number) {}\r\n getShaderHash() {\r\n return `${Number(this._temporalJitter)}`;\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams): Nullable<TextureFormat> {\r\n const device = getDevice();\r\n if (device.type === 'webgl') {\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? 'rgba16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? 'rgba32f'\r\n : 'rgba8unorm';\r\n }\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? 'r16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? 'r32f'\r\n : 'rgba8unorm';\r\n }\r\n getParams(out: Vector4) {\r\n out = out ?? new Vector4();\r\n out.setXYZW(this._lightRadius, this._blockerSampleCount, this._filterSampleCount, this._maxFilterRadius);\r\n return out;\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return this.preferredShadowMapDepthFormat();\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$l.receiverPlaneDepthBias = computeReceiverPlaneDepthBias(this, this.shadowCoord);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = applyShadowDepthBias(this, this.shadowCoord.z, this.shadowBias, true);\r\n this.shadow = filterShadowPCSS(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias,\r\n this.split,\r\n that._temporalJitter,\r\n shadowMapParams.numShadowCascades\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$l.shadowCoord = pb.vec4(this.dir, pb.sub(this.distance, this.shadowBias));\r\n this.$return(\r\n filterShadowPCSS(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n undefined,\r\n undefined,\r\n that._temporalJitter\r\n )\r\n );\r\n }\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = ndcToShadowCoord(this, this.shadowCoord);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n shadowCoordDepthInRange(this, this.shadowCoord.z)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.shadowCoord.z = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowCoord.z,\r\n this.nearFar\r\n );\r\n }\r\n this.$l.receiverPlaneDepthBias = computeReceiverPlaneDepthBias(this, this.shadowCoord);\r\n this.$if(this.inShadow, function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n true\r\n );\r\n } else {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n }\r\n this.shadowCoord.z = applyShadowDepthBias(\r\n this,\r\n this.shadowCoord.z,\r\n this.shadowBias,\r\n shadowMapParams.lightType !== LIGHT_TYPE_SPOT\r\n );\r\n this.shadow = filterShadowPCSS(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias,\r\n undefined,\r\n that._temporalJitter\r\n );\r\n });\r\n this.$return(this.shadow);\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n /** @internal */\r\n samplePointShadowMap(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMap = 'lib_samplePointShadowMapPCSS';\r\n const pb = scope.$builder;\r\n pb.func(funcNameSampleShadowMap, [pb.vec3('coords'), pb.float('z'), pb.float('bias')], function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords, 0);\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCSS","ShadowImpl","_lightRadius","_blockerSampleCount","_filterSampleCount","_maxFilterRadius","_temporalJitter","lightRadius","blockerSampleCount","filterSampleCount","maxFilterRadius","temporalJitter","val","Math","max","Number","min","getType","dispose","resourceDirty","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","farthest","getShadowMapFarthestDepth","lightType","format","getPackedShadowMapClearColor","Vector4","getShadowMap","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","device","getDevice","type","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","supportFloatColorBuffer","getParams","out","setXYZW","getShadowMapDepthFormat","preferredShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","ndcToShadowCoord","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","shadowCoordDepthInRange","z","shadow","receiverPlaneDepthBias","computeReceiverPlaneDepthBias","$if","shadowBias","computeShadowBiasCSM","applyShadowDepthBias","filterShadowPCSS","numShadowCascades","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","sub","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","LIGHT_TYPE_SPOT","nearFar","getShadowCameraParams","xy","nonLinearDepthToLinearNormalized","useNativeShadowMap","samplePointShadowMap","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step"],"mappings":"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"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Vector4, REVERSE_Z } from '@zephyr3d/base';
|
|
2
2
|
import { isDeviceDepthShadow } from '../shaders/shadow.js';
|
|
3
3
|
import { getDevice } from '../app/api.js';
|
|
4
4
|
|
|
5
|
+
/** @internal */ function getShadowMapFarthestDepth(lightType) {
|
|
6
|
+
return REVERSE_Z && isDeviceDepthShadow(lightType) ? 0 : 1;
|
|
7
|
+
}
|
|
8
|
+
/** @internal */ function getPackedShadowMapClearColor(lightType) {
|
|
9
|
+
// The RGBA8 decoder assigns the alpha channel a weight of 1, so the
|
|
10
|
+
// normalized depth endpoints are represented by transparent/opaque black.
|
|
11
|
+
return new Vector4(0, 0, 0, getShadowMapFarthestDepth(lightType));
|
|
12
|
+
}
|
|
5
13
|
/** @internal */ class ShadowImpl {
|
|
6
14
|
_resourceDirty;
|
|
7
15
|
constructor(){
|
|
@@ -17,8 +25,8 @@ import { getDevice } from '../app/api.js';
|
|
|
17
25
|
const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];
|
|
18
26
|
// Empty texels must read as "farthest": under reverse-Z that is 0 for
|
|
19
27
|
// device-encoded directional/rect maps, 1 for linear point/spot maps.
|
|
20
|
-
const farthest =
|
|
21
|
-
return colorAttachment ? colorAttachment.isFloatFormat() ? new Vector4(farthest, farthest, farthest, 1) :
|
|
28
|
+
const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);
|
|
29
|
+
return colorAttachment ? colorAttachment.isFloatFormat() ? new Vector4(farthest, farthest, farthest, 1) : getPackedShadowMapClearColor(shadowMapParams.lightType) : null;
|
|
22
30
|
}
|
|
23
31
|
/**
|
|
24
32
|
* Depth format for shadow maps rendered into a native depth attachment.
|
|
@@ -35,5 +43,5 @@ import { getDevice } from '../app/api.js';
|
|
|
35
43
|
}
|
|
36
44
|
}
|
|
37
45
|
|
|
38
|
-
export { ShadowImpl };
|
|
46
|
+
export { ShadowImpl, getPackedShadowMapClearColor, getShadowMapFarthestDepth };
|
|
39
47
|
//# sourceMappingURL=shadow_impl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow_impl.js","sources":["../../src/shadow/shadow_impl.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureFormat } from '@zephyr3d/device';\r\nimport type { ShadowMapParams, ShadowMapType, ShadowMode } from './shadowmapper';\r\nimport { REVERSE_Z, Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { isDeviceDepthShadow } from '../shaders/shadow';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @internal */\r\nexport abstract class ShadowImpl {\r\n protected _resourceDirty: boolean;\r\n constructor() {\r\n this._resourceDirty = true;\r\n }\r\n invalidateResource() {\r\n this._resourceDirty = true;\r\n }\r\n updateResources(shadowMapParams: ShadowMapParams) {\r\n this.doUpdateResources(shadowMapParams);\r\n }\r\n abstract getType(): ShadowMode;\r\n abstract getShadowMapBorder(shadowMapParams: ShadowMapParams): number;\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\": under reverse-Z that is 0 for\r\n // device-encoded directional/rect maps, 1 for linear point/spot maps.\r\n const farthest =
|
|
1
|
+
{"version":3,"file":"shadow_impl.js","sources":["../../src/shadow/shadow_impl.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureFormat } from '@zephyr3d/device';\r\nimport type { ShadowMapParams, ShadowMapType, ShadowMode } from './shadowmapper';\r\nimport { REVERSE_Z, Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { isDeviceDepthShadow } from '../shaders/shadow';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @internal */\r\nexport function getShadowMapFarthestDepth(lightType: number) {\r\n return REVERSE_Z && isDeviceDepthShadow(lightType) ? 0 : 1;\r\n}\r\n\r\n/** @internal */\r\nexport function getPackedShadowMapClearColor(lightType: number) {\r\n // The RGBA8 decoder assigns the alpha channel a weight of 1, so the\r\n // normalized depth endpoints are represented by transparent/opaque black.\r\n return new Vector4(0, 0, 0, getShadowMapFarthestDepth(lightType));\r\n}\r\n\r\n/** @internal */\r\nexport abstract class ShadowImpl {\r\n protected _resourceDirty: boolean;\r\n constructor() {\r\n this._resourceDirty = true;\r\n }\r\n invalidateResource() {\r\n this._resourceDirty = true;\r\n }\r\n updateResources(shadowMapParams: ShadowMapParams) {\r\n this.doUpdateResources(shadowMapParams);\r\n }\r\n abstract getType(): ShadowMode;\r\n abstract getShadowMapBorder(shadowMapParams: ShadowMapParams): number;\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n // Empty texels must read as \"farthest\": under reverse-Z that is 0 for\r\n // device-encoded directional/rect maps, 1 for linear point/spot maps.\r\n const farthest = getShadowMapFarthestDepth(shadowMapParams.lightType);\r\n return colorAttachment\r\n ? colorAttachment.isFloatFormat()\r\n ? new Vector4(farthest, farthest, farthest, 1)\r\n : getPackedShadowMapClearColor(shadowMapParams.lightType)\r\n : null;\r\n }\r\n /**\r\n * Depth format for shadow maps rendered into a native depth attachment.\r\n *\r\n * Float depth everywhere except WebGL, where d24s8 is kept under\r\n * standard-Z (WebGL1 compatibility, no precision benefit anyway). Under\r\n * reverse-Z the WebGL2 float depth format is used so shadow maps share\r\n * the near-uniform precision distribution (full benefit with\r\n * EXT_clip_control active).\r\n * @internal\r\n */\r\n protected preferredShadowMapDepthFormat(): TextureFormat {\r\n const device = getDevice();\r\n return device.type !== 'webgl' ||\r\n (REVERSE_Z && device.getDeviceCaps().framebufferCaps.supportDepth32float)\r\n ? 'd32f'\r\n : 'd24s8';\r\n }\r\n abstract getParams(out?: Vector4): Vector4;\r\n abstract getShadowMap(shadowMapParams: ShadowMapParams): ShadowMapType;\r\n abstract postRenderShadowMap(shadowMapParams: ShadowMapParams): void;\r\n abstract getDepthScale(): number;\r\n abstract setDepthScale(val: number): void;\r\n abstract resourceDirty(): boolean;\r\n abstract doUpdateResources(shadowMapParams: ShadowMapParams): void;\r\n abstract getShaderHash(): string;\r\n abstract computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ): PBShaderExp;\r\n abstract computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ): PBShaderExp;\r\n abstract computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ): PBShaderExp;\r\n abstract getShadowMapColorFormat(shadowMapParams: ShadowMapParams): Nullable<TextureFormat>;\r\n abstract getShadowMapDepthFormat(shadowMapParams: ShadowMapParams): TextureFormat;\r\n abstract useNativeShadowMap(shadowMapParams: ShadowMapParams): boolean;\r\n}\r\n"],"names":["getShadowMapFarthestDepth","lightType","REVERSE_Z","isDeviceDepthShadow","getPackedShadowMapClearColor","Vector4","ShadowImpl","_resourceDirty","invalidateResource","updateResources","shadowMapParams","doUpdateResources","getShadowMapClearColor","colorAttachment","shadowMapFramebuffer","getColorAttachments","farthest","isFloatFormat","device","getDevice","type","getDeviceCaps","framebufferCaps","supportDepth32float"],"mappings":";;;;AAMA,iBACO,SAASA,yBAAAA,CAA0BC,SAAiB,EAAA;IACzD,OAAOC,SAAAA,IAAaC,mBAAoBF,CAAAA,SAAAA,CAAAA,GAAa,CAAI,GAAA,CAAA;AAC3D;AAEA,iBACO,SAASG,4BAAAA,CAA6BH,SAAiB,EAAA;;;AAG5D,IAAA,OAAO,IAAII,OAAAA,CAAQ,CAAG,EAAA,CAAA,EAAG,GAAGL,yBAA0BC,CAAAA,SAAAA,CAAAA,CAAAA;AACxD;AAEA,iBACO,MAAeK,UAAAA,CAAAA;IACVC,cAAwB;IAClC,WAAc,EAAA;QACZ,IAAI,CAACA,cAAc,GAAG,IAAA;AACxB;IACAC,kBAAqB,GAAA;QACnB,IAAI,CAACD,cAAc,GAAG,IAAA;AACxB;AACAE,IAAAA,eAAAA,CAAgBC,eAAgC,EAAE;QAChD,IAAI,CAACC,iBAAiB,CAACD,eAAAA,CAAAA;AACzB;AAGAE,IAAAA,sBAAAA,CAAuBF,eAAgC,EAAE;AACvD,QAAA,MAAMG,kBAAkBH,eAAgBI,CAAAA,oBAAoB,EAAEC,mBAAAA,EAAqB,CAAC,CAAE,CAAA;;;QAGtF,MAAMC,QAAAA,GAAWhB,yBAA0BU,CAAAA,eAAAA,CAAgBT,SAAS,CAAA;AACpE,QAAA,OAAOY,eACHA,GAAAA,eAAAA,CAAgBI,aAAa,EAAA,GAC3B,IAAIZ,OAAAA,CAAQW,QAAUA,EAAAA,QAAAA,EAAUA,QAAU,EAAA,CAAA,CAAA,GAC1CZ,4BAA6BM,CAAAA,eAAAA,CAAgBT,SAAS,CACxD,GAAA,IAAA;AACN;AACA;;;;;;;;;AASC,MACD,6BAAyD,GAAA;AACvD,QAAA,MAAMiB,MAASC,GAAAA,SAAAA,EAAAA;AACf,QAAA,OAAOD,MAAOE,CAAAA,IAAI,KAAK,OAAA,IACpBlB,SAAagB,IAAAA,MAAAA,CAAOG,aAAa,EAAA,CAAGC,eAAe,CAACC,mBAAmB,GACtE,MACA,GAAA,OAAA;AACN;AA8BF;;;;"}
|