@zephyr3d/scene 0.9.21 → 0.9.22
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 +9 -0
- package/dist/posteffect/posteffect.js +16 -0
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/ssgi.js +644 -0
- package/dist/posteffect/ssgi.js.map +1 -0
- package/dist/posteffect/sss.js +121 -36
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +41 -0
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +3 -0
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/shaders/ssgi.js +63 -0
- package/dist/shaders/ssgi.js.map +1 -0
- package/dist/shadow/esm.js +3 -1
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +4 -1
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +4 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +2 -0
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +5 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +4 -1
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -1
- package/dist/shadow/vsm.js.map +1 -1
- package/package.json +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcf_opt.js","sources":["../../src/shadow/pcf_opt.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureFormat, TextureSampler } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { computeShadowMapDepth, computeReceiverPlaneDepthBias, filterShadowPCF } from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class PCFOPT extends ShadowImpl {\r\n protected _kernelSize: number;\r\n protected _shadowSampler: Nullable<TextureSampler>;\r\n constructor(kernelSize?: number) {\r\n super();\r\n this._kernelSize = kernelSize ?? 5;\r\n this._shadowSampler = null;\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n this._kernelSize = val;\r\n }\r\n getType() {\r\n return 'pcf-opt' as const;\r\n }\r\n dispose() {\r\n this._shadowSampler = null;\r\n }\r\n resourceDirty() {\r\n return false;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._kernelSize;\r\n }\r\n getParams() {}\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return (\r\n this.useNativeShadowMap(shadowMapParams)\r\n ? shadowMapParams.shadowMapFramebuffer!.getDepthAttachment()\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler =\r\n shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || 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 `${this._kernelSize}`;\r\n }\r\n getShadowMapColorFormat(shadowMapParams: ShadowMapParams): Nullable<TextureFormat> {\r\n return this.useNativeShadowMap(shadowMapParams) ? null : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias,\r\n this.split\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n } else {\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(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n }\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = 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.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias\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 getDevice().type !== 'webgl';\r\n }\r\n /** @internal */\r\n sampleShadowMap(\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_sampleShadowMapOPT`;\r\n const pb = scope.$builder;\r\n const that = this;\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n pb.sub(this.z, this.bias)\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\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 });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n /** @internal */\r\n sampleShadowMapCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n split: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMOPT';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameSampleShadowMapCSM,\r\n [pb.vec4('coords'), pb.int('split'), pb.float('z'), pb.float('bias')],\r\n function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n this.distance\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance),\r\n 0,\r\n 1\r\n )\r\n );\r\n }\r\n } else {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);\r\n }\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCFOPT","ShadowImpl","_kernelSize","_shadowSampler","kernelSize","val","getType","dispose","resourceDirty","getShadowMapBorder","_shadowMapParams","getParams","getShadowMap","shadowMapParams","useNativeShadowMap","shadowMapFramebuffer","getDepthAttachment","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","getShadowMapDepthFormat","getDevice","type","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","receiverPlaneDepthBias","computeReceiverPlaneDepthBias","$if","shadowBias","computeShadowBiasCSM","sub","filterShadowPCF","lightType","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","xy","maxZ","max","abs","distance","linearDepthToNonLinear","computeShadowBias","sampleShadowMap","length","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","clamp","textureSampleCompareLevel","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowMapCSM","funcNameSampleShadowMapCSM","isTexture2DArray","textureArraySampleCompareLevel","textureArraySampleLevel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pcf_opt.js","sources":["../../src/shadow/pcf_opt.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureFormat, TextureSampler } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { computeShadowMapDepth, computeReceiverPlaneDepthBias, filterShadowPCF } from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class PCFOPT extends ShadowImpl {\r\n protected _kernelSize: number;\r\n protected _shadowSampler: Nullable<TextureSampler>;\r\n constructor(kernelSize?: number) {\r\n super();\r\n this._kernelSize = kernelSize ?? 5;\r\n this._shadowSampler = null;\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n this._kernelSize = val;\r\n }\r\n getType() {\r\n return 'pcf-opt' as const;\r\n }\r\n dispose() {\r\n this._shadowSampler = null;\r\n }\r\n resourceDirty() {\r\n return false;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._kernelSize;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return (\r\n this.useNativeShadowMap(shadowMapParams)\r\n ? shadowMapParams.shadowMapFramebuffer!.getDepthAttachment()\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler =\r\n shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || 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 `${this._kernelSize}`;\r\n }\r\n getShadowMapColorFormat(shadowMapParams: ShadowMapParams): Nullable<TextureFormat> {\r\n return this.useNativeShadowMap(shadowMapParams) ? null : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias,\r\n this.split\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n } else {\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(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n }\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = 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.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n that._kernelSize,\r\n this.shadowCoord,\r\n this.receiverPlaneDepthBias\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 getDevice().type !== 'webgl';\r\n }\r\n /** @internal */\r\n sampleShadowMap(\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_sampleShadowMapOPT`;\r\n const pb = scope.$builder;\r\n const that = this;\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n pb.sub(this.z, this.bias)\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\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 });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n /** @internal */\r\n sampleShadowMapCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n split: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMOPT';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameSampleShadowMapCSM,\r\n [pb.vec4('coords'), pb.int('split'), pb.float('z'), pb.float('bias')],\r\n function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n this.distance\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance),\r\n 0,\r\n 1\r\n )\r\n );\r\n }\r\n } else {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);\r\n }\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCFOPT","ShadowImpl","_kernelSize","_shadowSampler","kernelSize","val","getType","dispose","resourceDirty","getShadowMapBorder","_shadowMapParams","getParams","out","Vector4","zero","getShadowMap","shadowMapParams","useNativeShadowMap","shadowMapFramebuffer","getDepthAttachment","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","getShadowMapDepthFormat","getDevice","type","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","receiverPlaneDepthBias","computeReceiverPlaneDepthBias","$if","shadowBias","computeShadowBiasCSM","sub","filterShadowPCF","lightType","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","xy","maxZ","max","abs","distance","linearDepthToNonLinear","computeShadowBias","sampleShadowMap","length","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","clamp","textureSampleCompareLevel","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowMapCSM","funcNameSampleShadowMapCSM","isTexture2DArray","textureArraySampleCompareLevel","textureArraySampleLevel"],"mappings":"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"}
|
package/dist/shadow/pcf_pd.js
CHANGED
|
@@ -5,6 +5,7 @@ import { LIGHT_TYPE_POINT } from '../values.js';
|
|
|
5
5
|
import { ShaderHelper } from '../material/shader/helper.js';
|
|
6
6
|
import { computeShadowBiasCSM, computeShadowBias } from './shader.js';
|
|
7
7
|
import { getDevice } from '../app/api.js';
|
|
8
|
+
import { Vector4 } from '@zephyr3d/base';
|
|
8
9
|
|
|
9
10
|
/** @internal */ class PCFPD extends ShadowImpl {
|
|
10
11
|
static SHADER_VERSION = 3;
|
|
@@ -41,7 +42,9 @@ import { getDevice } from '../app/api.js';
|
|
|
41
42
|
}
|
|
42
43
|
return 3;
|
|
43
44
|
}
|
|
44
|
-
getParams() {
|
|
45
|
+
getParams(out) {
|
|
46
|
+
return out ?? Vector4.zero();
|
|
47
|
+
}
|
|
45
48
|
getShadowMapBorder(_shadowMapParams) {
|
|
46
49
|
return Math.max(this._sampleRadius + 1, this.getPCFKernelSize());
|
|
47
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcf_pd.js","sources":["../../src/shadow/pcf_pd.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureSampler } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport { computeShadowMapDepth, filterShadowPCF } from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class PCFPD extends ShadowImpl {\r\n private static readonly SHADER_VERSION = 3;\r\n protected _tapCount: number;\r\n protected _sampleRadius: number;\r\n protected _shadowSampler: Nullable<TextureSampler>;\r\n constructor(tapCount?: number, sampleRadius?: number) {\r\n super();\r\n this._tapCount = tapCount ?? 3;\r\n this._sampleRadius = sampleRadius ?? 1;\r\n this._shadowSampler = null;\r\n }\r\n get tapCount() {\r\n return this._tapCount;\r\n }\r\n set tapCount(val) {\r\n this._tapCount = val;\r\n }\r\n getType() {\r\n return 'pcf-pd' as const;\r\n }\r\n dispose() {\r\n this._shadowSampler = null;\r\n }\r\n resourceDirty() {\r\n return false;\r\n }\r\n private getPCFKernelSize() {\r\n if (this._sampleRadius >= 4 || this._tapCount >= 32) {\r\n return 7;\r\n }\r\n if (this._sampleRadius >= 2 || this._tapCount >= 12) {\r\n return 5;\r\n }\r\n return 3;\r\n }\r\n getParams() {}\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return Math.max(this._sampleRadius + 1, this.getPCFKernelSize());\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return (\r\n this.useNativeShadowMap(shadowMapParams)\r\n ? shadowMapParams.shadowMapFramebuffer!.getDepthAttachment()\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler =\r\n shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale() {\r\n return this._sampleRadius;\r\n }\r\n setDepthScale(val: number) {\r\n this._sampleRadius = val;\r\n }\r\n getShaderHash() {\r\n return `${PCFPD.SHADER_VERSION}-${this._tapCount}-${this._sampleRadius}`;\r\n }\r\n getShadowMapColorFormat(shadowMapParams: ShadowMapParams) {\r\n if (this.useNativeShadowMap(shadowMapParams)) {\r\n return null;\r\n } else {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'r16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'r32f'\r\n : 'rgba8unorm';\r\n }\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\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 kernelSize = this.getPCFKernelSize();\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n kernelSize,\r\n this.shadowCoord,\r\n undefined,\r\n this.split\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 const kernelSize = this.getPCFKernelSize();\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n } else {\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(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n }\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n kernelSize,\r\n this.shadowCoord\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 getDevice().type !== 'webgl';\r\n }\r\n /** @internal */\r\n sampleShadowMap(\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_sampleShadowMapPD';\r\n const pb = scope.$builder;\r\n const that = this;\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n pb.sub(this.z, this.bias)\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\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 });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n /** @internal */\r\n sampleShadowMapCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n split: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMPD';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameSampleShadowMapCSM,\r\n [pb.vec4('coords'), pb.int('split'), pb.float('z'), pb.float('bias')],\r\n function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n this.distance\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance),\r\n 0,\r\n 1\r\n )\r\n );\r\n }\r\n } else {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);\r\n }\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCFPD","ShadowImpl","SHADER_VERSION","_tapCount","_sampleRadius","_shadowSampler","tapCount","sampleRadius","val","getType","dispose","resourceDirty","getPCFKernelSize","getParams","getShadowMapBorder","_shadowMapParams","Math","max","getShadowMap","shadowMapParams","useNativeShadowMap","shadowMapFramebuffer","getDepthAttachment","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","getShaderHash","getShadowMapColorFormat","device","getDevice","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","type","supportFloatColorBuffer","getShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","kernelSize","func","vec4","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","$if","shadowBias","computeShadowBiasCSM","sub","filterShadowPCF","lightType","undefined","$return","getGlobalScope","computeShadow","funcNameComputeShadow","that","LIGHT_TYPE_POINT","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","xy","maxZ","abs","distance","linearDepthToNonLinear","computeShadowBias","sampleShadowMap","length","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","clamp","textureSampleCompareLevel","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowMapCSM","funcNameSampleShadowMapCSM","isTexture2DArray","textureArraySampleCompareLevel","textureArraySampleLevel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pcf_pd.js","sources":["../../src/shadow/pcf_pd.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp, TextureSampler } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport { computeShadowMapDepth, filterShadowPCF } from '../shaders/shadow';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class PCFPD extends ShadowImpl {\r\n private static readonly SHADER_VERSION = 3;\r\n protected _tapCount: number;\r\n protected _sampleRadius: number;\r\n protected _shadowSampler: Nullable<TextureSampler>;\r\n constructor(tapCount?: number, sampleRadius?: number) {\r\n super();\r\n this._tapCount = tapCount ?? 3;\r\n this._sampleRadius = sampleRadius ?? 1;\r\n this._shadowSampler = null;\r\n }\r\n get tapCount() {\r\n return this._tapCount;\r\n }\r\n set tapCount(val) {\r\n this._tapCount = val;\r\n }\r\n getType() {\r\n return 'pcf-pd' as const;\r\n }\r\n dispose() {\r\n this._shadowSampler = null;\r\n }\r\n resourceDirty() {\r\n return false;\r\n }\r\n private getPCFKernelSize() {\r\n if (this._sampleRadius >= 4 || this._tapCount >= 32) {\r\n return 7;\r\n }\r\n if (this._sampleRadius >= 2 || this._tapCount >= 12) {\r\n return 5;\r\n }\r\n return 3;\r\n }\r\n getParams(out?: Vector4) {\r\n return out ?? Vector4.zero();\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return Math.max(this._sampleRadius + 1, this.getPCFKernelSize());\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n return (\r\n this.useNativeShadowMap(shadowMapParams)\r\n ? shadowMapParams.shadowMapFramebuffer!.getDepthAttachment()\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler =\r\n shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale() {\r\n return this._sampleRadius;\r\n }\r\n setDepthScale(val: number) {\r\n this._sampleRadius = val;\r\n }\r\n getShaderHash() {\r\n return `${PCFPD.SHADER_VERSION}-${this._tapCount}-${this._sampleRadius}`;\r\n }\r\n getShadowMapColorFormat(shadowMapParams: ShadowMapParams) {\r\n if (this.useNativeShadowMap(shadowMapParams)) {\r\n return null;\r\n } else {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'r16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'r32f'\r\n : 'rgba8unorm';\r\n }\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\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 kernelSize = this.getPCFKernelSize();\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n kernelSize,\r\n this.shadowCoord,\r\n undefined,\r\n this.split\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 const kernelSize = this.getPCFKernelSize();\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n } else {\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(that.sampleShadowMap(shadowMapParams, this, this.dir, this.distance, this.shadowBias));\r\n }\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = filterShadowPCF(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n kernelSize,\r\n this.shadowCoord\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 getDevice().type !== 'webgl';\r\n }\r\n /** @internal */\r\n sampleShadowMap(\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_sampleShadowMapPD';\r\n const pb = scope.$builder;\r\n const that = this;\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 if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords,\r\n pb.sub(this.z, this.bias)\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\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 });\r\n return pb.getGlobalScope()[funcNameSampleShadowMap](coords, z, bias) as PBShaderExp;\r\n }\r\n /** @internal */\r\n sampleShadowMapCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n coords: PBShaderExp,\r\n split: PBShaderExp,\r\n z: PBShaderExp,\r\n bias: PBShaderExp\r\n ) {\r\n const funcNameSampleShadowMapCSM = 'lib_sampleShadowMapCSMPD';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameSampleShadowMapCSM,\r\n [pb.vec4('coords'), pb.int('split'), pb.float('z'), pb.float('bias')],\r\n function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n this.$l.distance = pb.sub(this.z, this.bias);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n this.distance\r\n ),\r\n 0,\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$return(\r\n pb.clamp(\r\n pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.coords.xy, this.distance),\r\n 0,\r\n 1\r\n )\r\n );\r\n }\r\n } else {\r\n if (shadowMapParams.shadowMap!.isTexture2DArray()) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.coords.xy,\r\n this.split,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.coords.xy, 0);\r\n }\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n }\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameSampleShadowMapCSM](coords, split, z, bias) as PBShaderExp;\r\n }\r\n}\r\n"],"names":["PCFPD","ShadowImpl","SHADER_VERSION","_tapCount","_sampleRadius","_shadowSampler","tapCount","sampleRadius","val","getType","dispose","resourceDirty","getPCFKernelSize","getParams","out","Vector4","zero","getShadowMapBorder","_shadowMapParams","Math","max","getShadowMap","shadowMapParams","useNativeShadowMap","shadowMapFramebuffer","getDepthAttachment","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","getShaderHash","getShadowMapColorFormat","device","getDevice","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","type","supportFloatColorBuffer","getShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","kernelSize","func","vec4","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","$if","shadowBias","computeShadowBiasCSM","sub","filterShadowPCF","lightType","undefined","$return","getGlobalScope","computeShadow","funcNameComputeShadow","that","LIGHT_TYPE_POINT","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","xy","maxZ","abs","distance","linearDepthToNonLinear","computeShadowBias","sampleShadowMap","length","coords","bias","funcNameSampleShadowMap","vec3","floatDepthTexture","clamp","textureSampleCompareLevel","shadowTex","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","sampleShadowMapCSM","funcNameSampleShadowMapCSM","isTexture2DArray","textureArraySampleCompareLevel","textureArraySampleLevel"],"mappings":"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"}
|
package/dist/shadow/pcss.js
CHANGED
|
@@ -87,7 +87,9 @@ import { getDevice } from '../app/api.js';
|
|
|
87
87
|
return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer ? 'r16f' : device.getDeviceCaps().textureCaps.supportFloatColorBuffer ? 'r32f' : 'rgba8unorm';
|
|
88
88
|
}
|
|
89
89
|
getParams(out) {
|
|
90
|
+
out = out ?? new Vector4();
|
|
90
91
|
out.setXYZW(this._lightRadius, this._blockerSampleCount, this._filterSampleCount, this._maxFilterRadius);
|
|
92
|
+
return out;
|
|
91
93
|
}
|
|
92
94
|
getShadowMapDepthFormat(_shadowMapParams) {
|
|
93
95
|
return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';
|
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 { 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 { computeReceiverPlaneDepthBias, computeShadowMapDepth, filterShadowPCSS } 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 return new Vector4(1, 1, 1, 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.setXYZW(this._lightRadius, this._blockerSampleCount, this._filterSampleCount, this._maxFilterRadius);\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = pb.sub(this.shadowCoord.z, this.shadowBias);\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = pb.sub(this.shadowCoord.z, this.shadowBias);\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","Vector4","getShadowMap","shadowMapParams","shadowMapFramebuffer","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","device","getDevice","type","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","supportFloatColorBuffer","getParams","out","setXYZW","getShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","receiverPlaneDepthBias","computeReceiverPlaneDepthBias","$if","shadowBias","computeShadowBiasCSM","sub","filterShadowPCSS","lightType","numShadowCascades","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","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
|
+
{"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 { ShadowImpl } from './shadow_impl';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { computeReceiverPlaneDepthBias, computeShadowMapDepth, filterShadowPCSS } 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 return new Vector4(1, 1, 1, 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 getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = pb.sub(this.shadowCoord.z, this.shadowBias);\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 = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\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 pb.lessThanEqual(this.shadowCoord.z, 1)\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 = pb.sub(this.shadowCoord.z, this.shadowBias);\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","Vector4","getShadowMap","shadowMapParams","shadowMapFramebuffer","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","device","getDevice","type","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","supportFloatColorBuffer","getParams","out","setXYZW","getShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","receiverPlaneDepthBias","computeReceiverPlaneDepthBias","$if","shadowBias","computeShadowBiasCSM","sub","filterShadowPCSS","lightType","numShadowCascades","$return","getGlobalScope","computeShadow","funcNameComputeShadow","LIGHT_TYPE_POINT","dir","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 +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 { Vector4, type Nullable } from '@zephyr3d/base';\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 return colorAttachment\r\n ? colorAttachment.isFloatFormat()\r\n ? new Vector4(1, 1, 1, 1)\r\n : new Vector4(0, 0, 0, 1)\r\n : null;\r\n }\r\n abstract getParams(out
|
|
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 { Vector4, type Nullable } from '@zephyr3d/base';\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 return colorAttachment\r\n ? colorAttachment.isFloatFormat()\r\n ? new Vector4(1, 1, 1, 1)\r\n : new Vector4(0, 0, 0, 1)\r\n : null;\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":["ShadowImpl","_resourceDirty","invalidateResource","updateResources","shadowMapParams","doUpdateResources","getShadowMapClearColor","colorAttachment","shadowMapFramebuffer","getColorAttachments","isFloatFormat","Vector4"],"mappings":";;AAIA,iBACO,MAAeA,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;AACtF,QAAA,OAAOF,eACHA,GAAAA,eAAAA,CAAgBG,aAAa,EAAA,GAC3B,IAAIC,OAAQ,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,KACrB,IAAIA,OAAAA,CAAQ,CAAG,EAAA,CAAA,EAAG,GAAG,CACvB,CAAA,GAAA,IAAA;AACN;AA8BF;;;;"}
|
|
@@ -690,7 +690,11 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
|
|
|
690
690
|
}
|
|
691
691
|
/** @internal */ static fetchShadowMapParams() {
|
|
692
692
|
if (this._shadowMapParams.length > 0) {
|
|
693
|
-
|
|
693
|
+
const params = this._shadowMapParams.pop();
|
|
694
|
+
// Pooled objects retain last frame's ordinal; clear it so it is only set
|
|
695
|
+
// again by ShadowMaskRenderer for lights actually written to the mask.
|
|
696
|
+
params.maskOrdinal = undefined;
|
|
697
|
+
return params;
|
|
694
698
|
} else {
|
|
695
699
|
return {
|
|
696
700
|
lightType: LIGHT_TYPE_NONE,
|