@zephyr3d/scene 0.9.20 → 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.
Files changed (38) hide show
  1. package/dist/camera/camera.js +208 -208
  2. package/dist/camera/camera.js.map +1 -1
  3. package/dist/index.d.ts +9 -0
  4. package/dist/posteffect/posteffect.js +16 -0
  5. package/dist/posteffect/posteffect.js.map +1 -1
  6. package/dist/posteffect/ssgi.js +644 -0
  7. package/dist/posteffect/ssgi.js.map +1 -0
  8. package/dist/posteffect/sss.js +129 -44
  9. package/dist/posteffect/sss.js.map +1 -1
  10. package/dist/render/lightpass.js +5 -1
  11. package/dist/render/lightpass.js.map +1 -1
  12. package/dist/render/rendergraph/forward_plus_builder.js +21 -6
  13. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  14. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  15. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  16. package/dist/render/shadow_mask_pass.js +42 -39
  17. package/dist/render/shadow_mask_pass.js.map +1 -1
  18. package/dist/shaders/ssgi.js +63 -0
  19. package/dist/shaders/ssgi.js.map +1 -0
  20. package/dist/shadow/esm.js +3 -1
  21. package/dist/shadow/esm.js.map +1 -1
  22. package/dist/shadow/pcf_opt.js +4 -1
  23. package/dist/shadow/pcf_opt.js.map +1 -1
  24. package/dist/shadow/pcf_pd.js +4 -1
  25. package/dist/shadow/pcf_pd.js.map +1 -1
  26. package/dist/shadow/pcss.js +2 -0
  27. package/dist/shadow/pcss.js.map +1 -1
  28. package/dist/shadow/shadow_impl.js.map +1 -1
  29. package/dist/shadow/shadowmapper.js +5 -1
  30. package/dist/shadow/shadowmapper.js.map +1 -1
  31. package/dist/shadow/ssm.js +4 -1
  32. package/dist/shadow/ssm.js.map +1 -1
  33. package/dist/shadow/vsm.js +3 -1
  34. package/dist/shadow/vsm.js.map +1 -1
  35. package/dist/utility/serialization/scene/camera.js.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  38. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -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: Vector4): void;\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;;;;"}
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
- return this._shadowMapParams.pop();
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,