@zephyr3d/scene 0.9.0 → 0.9.2
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/animation/animationset.js +135 -133
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +151 -103
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_system.js +87 -114
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +165 -144
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +3 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +185 -185
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +794 -261
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +290 -288
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +13 -26
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/pbrmr.js +1 -11
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +236 -156
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +36 -16
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +4 -20
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +2 -2
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +4 -7
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +493 -493
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/manager.js +34 -3
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowmapper.js","sources":["../../src/shadow/shadowmapper.ts"],"sourcesContent":["import type { RequireOptionals, Nullable } from '@zephyr3d/base';\r\nimport { retainObject, Matrix4x4, Vector3, Vector4, AABB, CubeFace, Frustum } from '@zephyr3d/base';\r\nimport type {\r\n PBShaderExp,\r\n FrameBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureFormat,\r\n PBInsideFunctionScope,\r\n TextureSampler,\r\n TextureCreationOptions,\r\n TextureType,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport { Camera } from '../camera/camera';\r\nimport { SSM } from './ssm';\r\nimport { ESM } from './esm';\r\nimport { VSM } from './vsm';\r\nimport { PCFPD } from './pcf_pd';\r\nimport { PCFOPT } from './pcf_opt';\r\nimport type { PointLight, PunctualLight, RectLight, SpotLight } from '../scene/light';\r\nimport type { ShadowMapPass } from '../render/shadowmap_pass';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { ShadowImpl } from './shadow_impl';\r\nimport type { DrawContext } from '../render';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\nconst tmpFrustum = new Frustum(Matrix4x4.identity());\r\n\r\n/**\r\n * Shadow mapping mode\r\n * @public\r\n */\r\nexport type ShadowMode = 'hard' | 'vsm' | 'esm' | 'pcf-pd' | 'pcf-opt';\r\nexport type ShadowQualityPreset = 'character-small' | 'outdoor-large';\r\n\r\n/** @internal */\r\nexport type ShadowMapParams = {\r\n lightType: number;\r\n shaderHash: string;\r\n numShadowCascades: number;\r\n depthClampEnabled: boolean;\r\n cascadeDistances: Vector4;\r\n depthBiasValues: Vector4[];\r\n depthBiasScales: Vector4;\r\n cameraParams: Vector4;\r\n shadowMatrices: Float32Array;\r\n shadowMapFramebuffer: Nullable<FrameBuffer>;\r\n shadowMap: Nullable<BaseTexture>;\r\n shadowMapSampler: Nullable<TextureSampler>;\r\n impl: Nullable<ShadowImpl>;\r\n implData: unknown;\r\n};\r\n\r\n/** @internal */\r\nexport type ShadowMapType = Texture2D | TextureCube | Texture2DArray;\r\n\r\n/** @internal */\r\nexport interface ShadowConfig {\r\n shadowMapSize: number;\r\n numCascades?: number;\r\n splitLambda?: number;\r\n depthBias?: number;\r\n normalBias?: number;\r\n nearClip?: number;\r\n}\r\n\r\n// const zeroPosition = Vector3.zero();\r\n/**\r\n * The shadow map generator\r\n * @public\r\n */\r\nexport class ShadowMapper {\r\n /** @internal */\r\n private static readonly _snapMatrix = new Matrix4x4();\r\n /** @internal */\r\n private static readonly _target = new Vector3();\r\n /** @internal */\r\n private static readonly _up = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumMin = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumMax = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumCenter = new Vector3();\r\n /** @internal */\r\n private static readonly _lightCameras: WeakMap<Scene, Camera[]> = new WeakMap();\r\n /** @internal */\r\n private static readonly _shadowMapParams: ShadowMapParams[] = [];\r\n /** @internal */\r\n protected _light: PunctualLight;\r\n /** @internal */\r\n protected _config: RequireOptionals<ShadowConfig>;\r\n /** @internal */\r\n protected _resourceDirty: boolean;\r\n /** @internal */\r\n protected _shadowMode: ShadowMode;\r\n /** @internal */\r\n protected _shadowDistance: number;\r\n /** @internal */\r\n protected _impl: Nullable<ShadowImpl>;\r\n /** @internal */\r\n protected _pdSampleCount: number;\r\n /** @internal */\r\n protected _pdSampleRadius: number;\r\n /** @internal */\r\n protected _pcfKernelSize: number;\r\n /** @internal */\r\n protected _vsmBlurKernelSize: number;\r\n /** @internal */\r\n protected _vsmBlurRadius: number;\r\n /** @internal */\r\n protected _vsmDarkness: number;\r\n /** @internal */\r\n protected _esmBlur: boolean;\r\n /** @internal */\r\n protected _esmBlurKernelSize: number;\r\n /** @internal */\r\n protected _esmBlurRadius: number;\r\n /** @internal */\r\n protected _esmDepthScale: number;\r\n /** @internal */\r\n protected _shadowRegion: Nullable<AABB>;\r\n /** @internal */\r\n protected _autoShadowRegion: boolean;\r\n /**\r\n * Creates an instance of ShadowMapper\r\n * @param light - The light that is used to generate shadow map\r\n */\r\n constructor(light: PunctualLight) {\r\n this._light = light;\r\n this._config = {\r\n shadowMapSize: 1024,\r\n numCascades: 1,\r\n splitLambda: 0.5,\r\n depthBias: 0.5,\r\n normalBias: 0.2,\r\n nearClip: 1\r\n };\r\n this._resourceDirty = true;\r\n this._shadowMode = 'hard';\r\n this._shadowDistance = 2000;\r\n this._impl = null;\r\n this._pdSampleCount = 12;\r\n this._pdSampleRadius = 4;\r\n this._pcfKernelSize = 5;\r\n this._vsmBlurKernelSize = 5;\r\n this._vsmBlurRadius = 4;\r\n this._vsmDarkness = 0.3;\r\n this._esmBlur = true;\r\n this._esmBlurKernelSize = 5;\r\n this._esmBlurRadius = 4;\r\n this._esmDepthScale = 200;\r\n this._shadowRegion = null;\r\n this._autoShadowRegion = false;\r\n this.applyMode(this._shadowMode);\r\n }\r\n copyFrom(other: ShadowMapper) {\r\n this.shadowMapSize = other.shadowMapSize;\r\n this.shadowRegion = other.shadowRegion ? new AABB(other.shadowRegion) : null;\r\n this.shadowDistance = other.shadowDistance;\r\n this.numShadowCascades = other.numShadowCascades;\r\n this.splitLambda = other.splitLambda;\r\n this.depthBias = other.depthBias;\r\n this.normalBias = other.normalBias;\r\n this.nearClip = other.nearClip;\r\n this.mode = other.mode;\r\n this.pdSampleCount = other.pdSampleCount;\r\n this.pdSampleRadius = other.pdSampleRadius;\r\n this.pcfKernelSize = other.pcfKernelSize;\r\n this.vsmBlurKernelSize = other.vsmBlurKernelSize;\r\n this.vsmBlurRadius = other.vsmBlurRadius;\r\n this.vsmDarkness = other.vsmDarkness;\r\n this.esmBlur = other.esmBlur;\r\n this.esmBlurKernelSize = other.esmBlurKernelSize;\r\n this.esmBlurRadius = other.esmBlurRadius;\r\n this.esmDepthScale = other.esmDepthScale;\r\n }\r\n /** The light that is used to generate shadow map */\r\n get light() {\r\n return this._light;\r\n }\r\n /** Size of the shadow map */\r\n get shadowMapSize() {\r\n return this._config.shadowMapSize;\r\n }\r\n set shadowMapSize(num) {\r\n if (!Number.isInteger(num) || num < 1) {\r\n console.error(`invalid shadow map size: ${num}`);\r\n return;\r\n }\r\n if (this._config.shadowMapSize !== num) {\r\n this._config.shadowMapSize = num;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n /** Shadow region for directional light */\r\n get shadowRegion() {\r\n return this._shadowRegion;\r\n }\r\n set shadowRegion(region) {\r\n this._shadowRegion = region;\r\n this._autoShadowRegion = false;\r\n }\r\n /** @internal */\r\n updateDirectionalShadowRegion(force = false) {\r\n if (!this._light.isDirectionLight()) {\r\n return;\r\n }\r\n if (!force && !this._autoShadowRegion) {\r\n return;\r\n }\r\n const scene = this._light.scene;\r\n if (!scene) {\r\n return;\r\n }\r\n const aabb = new AABB();\r\n aabb.beginExtend();\r\n scene.rootNode.iterate((child) => {\r\n if ((child.isMesh() || child.isClipmapTerrain()) && child.castShadow) {\r\n const bbox = child.getWorldBoundingVolume()?.toAABB();\r\n if (bbox) {\r\n aabb.extend(bbox.minPoint);\r\n aabb.extend(bbox.maxPoint);\r\n }\r\n }\r\n });\r\n this._shadowRegion = aabb.isValid() ? aabb : null;\r\n this._autoShadowRegion = true;\r\n }\r\n /** Maximum distance from the camera, shadow will not be rendered beyond this range */\r\n get shadowDistance() {\r\n return this._shadowDistance;\r\n }\r\n set shadowDistance(val) {\r\n this._shadowDistance = Math.max(0, val);\r\n }\r\n /** Count of the cascades, The maximum value is 4 */\r\n get numShadowCascades() {\r\n return this._config.numCascades;\r\n }\r\n set numShadowCascades(num) {\r\n if (num !== 1 && num !== 2 && num !== 3 && num !== 4) {\r\n console.error(`invalid shadow cascade number: ${num}`);\r\n return;\r\n }\r\n if (!this._light.isDirectionLight() && num > 1) {\r\n console.error(`only directional light can have more than one shadow cascades`);\r\n return;\r\n }\r\n if (num !== this._config.numCascades) {\r\n this._config.numCascades = num;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n /** The split lambda for cascaded shadow mapping */\r\n get splitLambda() {\r\n return this._config.splitLambda;\r\n }\r\n set splitLambda(val) {\r\n if (this._config.splitLambda !== val) {\r\n this._config.splitLambda = val;\r\n }\r\n }\r\n /** Depth bias for the shadow map */\r\n get depthBias() {\r\n return this._config.depthBias;\r\n }\r\n set depthBias(val) {\r\n this._config.depthBias = val;\r\n }\r\n /** Normal bias for the shadow map */\r\n get normalBias() {\r\n return this._config.normalBias;\r\n }\r\n set normalBias(val) {\r\n this._config.normalBias = val;\r\n }\r\n /** Near clip plane */\r\n get nearClip() {\r\n return this._config.nearClip;\r\n }\r\n set nearClip(val) {\r\n if (this._config.nearClip !== val) {\r\n this._config.nearClip = val;\r\n }\r\n }\r\n /** Shadow map mode */\r\n get mode() {\r\n return this._shadowMode;\r\n }\r\n set mode(mode) {\r\n if (mode !== this._shadowMode) {\r\n this._shadowMode = mode;\r\n this.applyMode(this._shadowMode);\r\n }\r\n }\r\n /**\r\n * Applies a practical shadow preset for common scenarios.\r\n *\r\n * `character-small`: higher contact quality and tighter distance for character-centric scenes.\r\n * `outdoor-large`: longer distance coverage for open scenes.\r\n */\r\n applyQualityPreset(preset: ShadowQualityPreset) {\r\n if (preset === 'character-small') {\r\n this.mode = 'pcf-opt';\r\n this.shadowMapSize = 2048;\r\n this.shadowDistance = 120;\r\n this.splitLambda = 0.75;\r\n this.depthBias = 0.18;\r\n this.normalBias = 0.3;\r\n this.nearClip = 0.2;\r\n this.pcfKernelSize = 5;\r\n this.numShadowCascades = this._light.isDirectionLight() ? 3 : 1;\r\n return;\r\n }\r\n this.mode = 'pcf-opt';\r\n this.shadowMapSize = 2048;\r\n this.shadowDistance = 800;\r\n this.splitLambda = 0.6;\r\n this.depthBias = 0.35;\r\n this.normalBias = 0.22;\r\n this.nearClip = 1;\r\n this.pcfKernelSize = 3;\r\n this.numShadowCascades = this._light.isDirectionLight() ? 4 : 1;\r\n }\r\n /** @internal */\r\n getShaderHash(shadowMapParams: ShadowMapParams) {\r\n return `${shadowMapParams.impl!.constructor.name}_${shadowMapParams.impl!.getShaderHash()}_${\r\n shadowMapParams.lightType\r\n }_${shadowMapParams.shadowMap!.target}_${Number(shadowMapParams.numShadowCascades > 1)}_${Number(\r\n getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap!.format)\r\n .filterable\r\n )}`;\r\n }\r\n /** Sample count for poisson disc PCF */\r\n get pdSampleCount() {\r\n return this._pdSampleCount;\r\n }\r\n set pdSampleCount(val) {\r\n val = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n if (val !== this._pdSampleCount) {\r\n this._pdSampleCount = val;\r\n const pcfpd = this.asPCFPD();\r\n if (pcfpd) {\r\n pcfpd.tapCount = this._pdSampleCount;\r\n }\r\n }\r\n }\r\n /** Radius for poisson disc PCF */\r\n get pdSampleRadius() {\r\n return this._pdSampleRadius;\r\n }\r\n set pdSampleRadius(val) {\r\n val = Math.max(0, Number(val) >> 0);\r\n if (val !== this._pdSampleRadius) {\r\n this._pdSampleRadius = val;\r\n this.asPCFPD()?.setDepthScale(this._pdSampleRadius);\r\n }\r\n }\r\n /** Kernel size for optimized PCF */\r\n get pcfKernelSize() {\r\n return this._pcfKernelSize;\r\n }\r\n set pcfKernelSize(val) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n if (val !== this._pcfKernelSize) {\r\n this._pcfKernelSize = val;\r\n const pcfopt = this.asPCFOPT();\r\n if (pcfopt) {\r\n pcfopt.kernelSize = this._pcfKernelSize;\r\n }\r\n }\r\n }\r\n /** Kernel size of VSM */\r\n get vsmBlurKernelSize() {\r\n return this._vsmBlurKernelSize;\r\n }\r\n set vsmBlurKernelSize(val) {\r\n val = Math.max(3, Number(val) >> 0) | 1;\r\n if (val !== this._vsmBlurKernelSize) {\r\n this._vsmBlurKernelSize = val;\r\n const vsm = this.asVSM();\r\n if (vsm) {\r\n vsm.kernelSize = this._vsmBlurKernelSize;\r\n }\r\n }\r\n }\r\n /** Blur radius for VSM */\r\n get vsmBlurRadius() {\r\n return this._vsmBlurRadius;\r\n }\r\n set vsmBlurRadius(val) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._vsmBlurRadius) {\r\n this._vsmBlurRadius = val;\r\n const vsm = this.asVSM();\r\n if (vsm) {\r\n vsm.blurSize = this._vsmBlurRadius;\r\n }\r\n }\r\n }\r\n /** Darkness for VSM */\r\n get vsmDarkness() {\r\n return this._vsmDarkness;\r\n }\r\n set vsmDarkness(val) {\r\n val = Math.min(0.999, Math.max(0, Number(val) || 0));\r\n if (val !== this._vsmDarkness) {\r\n this._vsmDarkness = val;\r\n this.asVSM()?.setDepthScale(this._vsmDarkness);\r\n }\r\n }\r\n /** Whether to enable ESM blur */\r\n get esmBlur() {\r\n return this._esmBlur;\r\n }\r\n set esmBlur(val) {\r\n if (!!val !== this.esmBlur) {\r\n this._esmBlur = !!val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.blur = this._esmBlur;\r\n }\r\n }\r\n }\r\n /** Kernel size for ESM */\r\n get esmBlurKernelSize() {\r\n return this._esmBlurKernelSize;\r\n }\r\n set esmBlurKernelSize(val) {\r\n val = Math.max(3, Number(val) >> 0) | 1;\r\n if (val !== this._esmBlurKernelSize) {\r\n this._esmBlurKernelSize = val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.kernelSize = this._esmBlurKernelSize;\r\n }\r\n }\r\n }\r\n /** Blur radius for ESM */\r\n get esmBlurRadius() {\r\n return this._esmBlurRadius;\r\n }\r\n set esmBlurRadius(val) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._esmBlurRadius) {\r\n this._esmBlurRadius = val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.blurSize = this._esmBlurRadius;\r\n }\r\n }\r\n }\r\n /** Depth scale for ESM */\r\n get esmDepthScale() {\r\n return this._esmDepthScale;\r\n }\r\n set esmDepthScale(val) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._esmDepthScale) {\r\n this._esmDepthScale = val;\r\n this.asESM()?.setDepthScale(this._esmDepthScale);\r\n }\r\n }\r\n /** @internal */\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n return this._impl!.computeShadow(shadowMapParams, scope, shadowVertex, NdotL);\r\n }\r\n /** @internal */\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 return this._impl!.computeShadowCSM(shadowMapParams, scope, shadowVertex, NdotL, split);\r\n }\r\n /** @internal */\r\n static releaseTemporalResources(ctx: DrawContext) {\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n const shadowMapParams = ctx.shadowMapInfo.get(k)!;\r\n //ctx.device.pool.releaseFrameBuffer(shadowMapParams.shadowMapFramebuffer);\r\n shadowMapParams.lightType = LIGHT_TYPE_NONE;\r\n shadowMapParams.depthClampEnabled = false;\r\n shadowMapParams.shaderHash = '';\r\n shadowMapParams.numShadowCascades = 1;\r\n shadowMapParams.shadowMapFramebuffer = null;\r\n shadowMapParams.impl = null;\r\n shadowMapParams.shadowMap = null;\r\n shadowMapParams.shadowMapSampler = null;\r\n shadowMapParams.implData = null;\r\n this._shadowMapParams.push(shadowMapParams);\r\n }\r\n ctx.shadowMapInfo = null;\r\n }\r\n }\r\n /** @internal */\r\n static computeShadowBias(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n linear: boolean\r\n ) {\r\n const pb = scope.$builder;\r\n const depthBiasParam = ShaderHelper.getDepthBiasValues(scope);\r\n if (shadowMapParams.lightType === LIGHT_TYPE_DIRECTIONAL) {\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL))), pb.vec2(1, 1));\r\n } else {\r\n const nearFar = ShaderHelper.getShadowCameraParams(scope).xy;\r\n const linearDepth = linear ? z : ShaderHelper.nonLinearDepthToLinearNormalized(scope, z, nearFar);\r\n const biasScaleFactor = pb.mix(1, depthBiasParam.w, linearDepth);\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL)), biasScaleFactor), pb.vec2(1, 1));\r\n }\r\n }\r\n /** @internal */\r\n static computeShadowBiasCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depthBiasParam = ShaderHelper.getDepthBiasValues(scope);\r\n const splitFlags = pb.vec4(\r\n pb.float(pb.equal(split, 0)),\r\n pb.float(pb.equal(split, 1)),\r\n pb.float(pb.equal(split, 2)),\r\n pb.float(pb.equal(split, 3))\r\n );\r\n const depthBiasScale = pb.dot(ShaderHelper.getDepthBiasScales(scope), splitFlags);\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL)), depthBiasScale), pb.vec2(1, 1));\r\n }\r\n /** @internal */\r\n protected isTextureInvalid(\r\n texture: Texture2D | TextureCube | Texture2DArray,\r\n target: TextureType,\r\n format: TextureFormat,\r\n width: number,\r\n height: number\r\n ) {\r\n return (\r\n texture &&\r\n (texture.target !== target ||\r\n texture.format !== format ||\r\n texture.width !== width ||\r\n texture.height !== height ||\r\n texture.depth !== this.numShadowCascades)\r\n );\r\n }\r\n /** @internal */\r\n protected createTexture(\r\n target: TextureType,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n const device = getDevice();\r\n const options: TextureCreationOptions = {\r\n mipmapping: false\r\n };\r\n switch (target) {\r\n case '2d':\r\n return device.createTexture2D(format, width, height, options)!;\r\n case 'cube':\r\n return device.createCubeTexture(format, width, options)!;\r\n case '2darray':\r\n return device.createTexture2DArray(format, width, height, depth, options)!;\r\n default:\r\n throw new Error(`Invalid target ${target}`);\r\n }\r\n }\r\n /** @internal */\r\n static fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: TextureFormat,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /** @internal */\r\n protected updateResources(shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n const colorFormat = shadowMapParams.impl!.getShadowMapColorFormat(shadowMapParams);\r\n const depthFormat = shadowMapParams.impl!.getShadowMapDepthFormat(shadowMapParams);\r\n const numCascades = shadowMapParams.numShadowCascades;\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const shadowMapWidth =\r\n numCascades > 1 && !useTextureArray ? 2 * this._config.shadowMapSize : this._config.shadowMapSize;\r\n const shadowMapHeight =\r\n numCascades > 2 && !useTextureArray ? 2 * this._config.shadowMapSize : this._config.shadowMapSize;\r\n /*\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [device.pool.fetchTemporalTexture2DArray(false, colorFormat, shadowMapWidth, shadowMapHeight, numCascades, false)]\r\n : this._light.isPointLight()\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, shadowMapWidth, false)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, shadowMapWidth, shadowMapHeight, false)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, shadowMapWidth, shadowMapHeight, numCascades, false)\r\n : device.type !== 'webgl' && this._light.isPointLight()\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, shadowMapWidth, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, shadowMapWidth, shadowMapHeight, false)\r\n : null;\r\n shadowMapParams.shadowMapFramebuffer = device.pool.createTemporalFramebuffer(false, colorAttachments, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n */\r\n shadowMapParams.shadowMapFramebuffer = ShadowMapper.fetchTemporalFramebuffer(\r\n true,\r\n this._light.lightType,\r\n numCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat!,\r\n depthFormat\r\n );\r\n shadowMapParams.impl = this._impl;\r\n this._impl!.updateResources(shadowMapParams);\r\n }\r\n /** @internal */\r\n protected createLightCameraPoint(lightCamera: Camera) {\r\n //lightCamera.reparent(this._light);\r\n lightCamera.parent = lightCamera.scene!.rootNode;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n lightCamera.setPerspective(\r\n Math.PI / 2,\r\n 1,\r\n this._config.nearClip!,\r\n Math.min(this._shadowDistance, (this._light as PointLight).range)\r\n );\r\n lightCamera.position.set(this._light.positionAndRange.xyz());\r\n }\r\n /** @internal */\r\n protected createLightCameraSpot(lightCamera: Camera) {\r\n lightCamera.parent = this._light;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n lightCamera.setPerspective(\r\n 2 * Math.acos((this._light as SpotLight).cutoff),\r\n 1,\r\n this._config.nearClip,\r\n Math.min(this._shadowDistance, (this._light as SpotLight).range)\r\n );\r\n }\r\n /** @internal */\r\n protected createLightCameraRect(lightCamera: Camera) {\r\n const rect = this._light as RectLight;\r\n lightCamera.parent = this._light;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n const halfW = rect.width * 0.5;\r\n const halfH = rect.height * 0.5;\r\n const far = Math.min(this._shadowDistance, rect.range);\r\n lightCamera.setOrtho(\r\n -halfW,\r\n halfW,\r\n -halfH,\r\n halfH,\r\n this._config.nearClip,\r\n Math.max(this._config.nearClip + 0.001, far)\r\n );\r\n }\r\n /** @internal */\r\n protected createLightCameraDirectional(\r\n sceneAABB: AABB,\r\n sceneCamera: Camera,\r\n lightCamera: Camera,\r\n cropMatrix?: Nullable<Matrix4x4>,\r\n border?: number\r\n ) {\r\n let frustum = sceneCamera.frustumViewSpace;\r\n if (this._shadowDistance < sceneCamera.getFarPlane()) {\r\n tmpMatrix.set(sceneCamera.getProjectionMatrix());\r\n tmpMatrix.setNearFar(tmpMatrix.getNearPlane(), this._shadowDistance);\r\n //tmpMatrix.multiplyRight(sceneCamera.viewMatrix);\r\n tmpFrustum.initWithMatrix(tmpMatrix);\r\n frustum = tmpFrustum;\r\n }\r\n border = border || 0;\r\n const expand = (this.shadowMapSize - 2 * border) / this.shadowMapSize;\r\n //const frustum = sceneCamera.frustum;\r\n const frustumMin = ShadowMapper._frustumMin;\r\n const frustumMax = ShadowMapper._frustumMax;\r\n const frustumCenter = ShadowMapper._frustumCenter;\r\n const target = ShadowMapper._target;\r\n const up = ShadowMapper._up;\r\n // const frustum = new Frustum(sceneCamera.viewProjectionMatrix);\r\n frustumMin.setXYZ(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n frustumMax.setXYZ(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n frustum.corners.forEach((p) => {\r\n frustumMin.inplaceMin(p);\r\n frustumMax.inplaceMax(p);\r\n });\r\n let radius = Vector3.distance(frustumMin, frustumMax) * 0.5 * expand;\r\n const center = sceneCamera.thisToWorld(\r\n Vector3.add(frustumMin, frustumMax, frustumCenter).scaleBy(0.5),\r\n frustumCenter\r\n );\r\n // Bounding sphere of the shadow camera should not be larger than bounding sphere of the scene.\r\n const sceneRadius = sceneAABB.diagonalLength * 0.5 * expand;\r\n if (sceneRadius < radius) {\r\n radius = sceneRadius;\r\n Vector3.add(sceneAABB.minPoint, sceneAABB.maxPoint, center).scaleBy(0.5);\r\n }\r\n target.setXYZ(\r\n center.x + this._light.directionAndCutoff.x,\r\n center.y + this._light.directionAndCutoff.y,\r\n center.z + this._light.directionAndCutoff.z\r\n );\r\n up.setXYZ(0, 1, 0);\r\n lightCamera.lookAt(center, target, up);\r\n lightCamera.position.set(center);\r\n lightCamera.setOrtho(\r\n -radius,\r\n radius,\r\n -radius,\r\n radius,\r\n -radius,\r\n Math.max(Vector3.distance(center, sceneCamera.getWorldPosition()), sceneCamera.getFarPlane())\r\n );\r\n center.setXYZ(0, 0, 0);\r\n lightCamera.viewProjectionMatrix.transformPointP(center, center);\r\n if (cropMatrix) {\r\n const tx = center.x * this.shadowMapSize * 0.5;\r\n const ty = center.y * this.shadowMapSize * 0.5;\r\n const rx = Math.round(tx);\r\n const ry = Math.round(ty);\r\n center.setXYZ(((rx - tx) * 2) / this.shadowMapSize, ((ry - ty) * 2) / this.shadowMapSize, 0);\r\n cropMatrix.translation(center);\r\n }\r\n\r\n /*\r\n const minx = frustumMin.x;\r\n const maxx = frustumMax.x;\r\n const miny = frustumMin.y;\r\n const maxy = frustumMax.y;\r\n const minz = frustumMin.z;\r\n const maxz = frustumMax.z;\r\n const texelSizeW = (maxx - minx) / this.shadowMapSize;\r\n const texelSizeH = (maxy - miny) / this.shadowMapSize;\r\n const cx = Math.floor((minx + maxx) / 2 / texelSizeW) * texelSizeW;\r\n const cy = Math.floor((miny + maxy) / 2 / texelSizeH) * texelSizeH;\r\n const cz = (minz + maxz) / 2;\r\n const hx = Math.floor(((maxx - minx) * (expand + 0.5)) / texelSizeW) * texelSizeW;\r\n const hy = Math.floor(((maxy - miny) * (expand + 0.5)) / texelSizeH) * texelSizeH;\r\n lightCamera.position.setXYZ(cx, cy, cz);\r\n lightCamera.setOrtho(\r\n -hx,\r\n hx,\r\n -hy,\r\n hy,\r\n sceneMax.z - maxz,\r\n sceneMax.z - minz + 1\r\n );\r\n if (cropMatrix) {\r\n // compute crop matrix\r\n let clipMaxX = 0,\r\n clipMaxY = 0;\r\n let clipMinX = Number.MAX_VALUE,\r\n clipMinY = Number.MAX_VALUE;\r\n frustum.corners.forEach((p) => {\r\n const clipPos = lightCamera.viewProjectionMatrix.transformPoint(p);\r\n clipPos.x = Math.min(1, Math.max(-1, clipPos.x / clipPos.w));\r\n clipPos.y = Math.min(1, Math.max(-1, clipPos.y / clipPos.w));\r\n if (clipPos.x > clipMaxX) {\r\n clipMaxX = clipPos.x;\r\n }\r\n if (clipPos.x < clipMinX) {\r\n clipMinX = clipPos.x;\r\n }\r\n if (clipPos.y > clipMaxY) {\r\n clipMaxY = clipPos.y;\r\n }\r\n if (clipPos.y < clipMinY) {\r\n clipMinY = clipPos.y;\r\n }\r\n });\r\n const clipW = clipMaxX - clipMinX;\r\n const clipH = clipMaxY - clipMinY;\r\n clipMinX -= expand * clipW;\r\n clipMinY -= expand * clipH;\r\n clipMaxX += expand * clipW;\r\n clipMaxY += expand * clipH;\r\n const scaleX = 2 / (clipMaxX - clipMinX);\r\n const scaleY = 2 / (clipMaxY - clipMinY);\r\n const offsetX = -0.5 * (clipMaxX + clipMinX) * scaleX;\r\n const offsetY = -0.5 * (clipMaxY + clipMinY) * scaleY;\r\n cropMatrix.identity();\r\n cropMatrix.m00 = scaleX;\r\n cropMatrix.m11 = scaleY;\r\n cropMatrix.m03 = offsetX;\r\n cropMatrix.m13 = offsetY;\r\n }\r\n */\r\n }\r\n /** @internal */\r\n private static fetchShadowMapParams() {\r\n if (this._shadowMapParams.length > 0) {\r\n return this._shadowMapParams.pop()!;\r\n } else {\r\n return {\r\n lightType: LIGHT_TYPE_NONE,\r\n depthClampEnabled: false,\r\n shaderHash: '',\r\n cameraParams: new Vector4(),\r\n cascadeDistances: new Vector4(),\r\n depthBiasScales: new Vector4(),\r\n depthBiasValues: [new Vector4(), new Vector4(), new Vector4(), new Vector4()],\r\n numShadowCascades: 1,\r\n shadowMatrices: new Float32Array(16 * 4),\r\n shadowMap: null,\r\n shadowMapSampler: null,\r\n shadowMapFramebuffer: null,\r\n impl: null,\r\n implData: null\r\n };\r\n }\r\n }\r\n /** @internal */\r\n private static fetchCameraForScene(scene: Scene) {\r\n const cameras = this._lightCameras.get(scene);\r\n if (!cameras || cameras.length === 0) {\r\n const camera = new Camera(scene);\r\n retainObject(camera);\r\n return camera;\r\n } else {\r\n const camera = cameras.pop()!;\r\n camera.parent = scene.rootNode;\r\n camera.position.setXYZ(0, 0, 0);\r\n camera.rotation.identity();\r\n camera.scale.setXYZ(1, 1, 1);\r\n camera.clipMask = 0;\r\n return camera;\r\n }\r\n }\r\n /** @internal */\r\n private static releaseCamera(camera: Camera) {\r\n let cameras = this._lightCameras.get(camera.scene!);\r\n if (!cameras) {\r\n cameras = [];\r\n this._lightCameras.set(camera.scene!, cameras);\r\n }\r\n camera.remove();\r\n cameras.push(camera);\r\n }\r\n /** @internal */\r\n calcSplitDistances(nearPlane: number, farPlane: number, numCascades: number) {\r\n const result: number[] = [0, 0, 0, 0, 0];\r\n for (let i = 0; i <= numCascades; ++i) {\r\n const fIDM = i / numCascades;\r\n const fLog = nearPlane * Math.pow(farPlane / nearPlane, fIDM);\r\n const fUniform = nearPlane + (farPlane - nearPlane) * fIDM;\r\n result[i] = fLog * this._config.splitLambda + fUniform * (1 - this._config.splitLambda);\r\n }\r\n return result;\r\n }\r\n /** @internal */\r\n protected calcDepthBiasParams(\r\n camera: Camera,\r\n shadowMapSize: number,\r\n depthBias: number,\r\n normalBias: number,\r\n depthScale: number,\r\n result: Vector4\r\n ) {\r\n const sizeNear = Math.min(\r\n camera.getProjectionMatrix().getNearPlaneWidth(),\r\n camera.getProjectionMatrix().getNearPlaneHeight()\r\n );\r\n const sizeFar = Math.min(\r\n camera.getProjectionMatrix().getFarPlaneWidth(),\r\n camera.getProjectionMatrix().getFarPlaneHeight()\r\n );\r\n const scaleFactor = (sizeNear / shadowMapSize) * 2;\r\n result.setXYZW(depthBias * scaleFactor, normalBias * 0.0001, depthScale, sizeFar / sizeNear);\r\n }\r\n /** @internal */\r\n protected postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n this._impl!.postRenderShadowMap(shadowMapParams);\r\n }\r\n /** @internal */\r\n render(ctx: DrawContext, renderPass: ShadowMapPass) {\r\n if (!ctx.shadowMapInfo) {\r\n ctx.shadowMapInfo = new Map();\r\n }\r\n const shadowMapParams = ShadowMapper.fetchShadowMapParams();\r\n shadowMapParams.impl = this._impl;\r\n shadowMapParams.lightType = this.light.lightType;\r\n shadowMapParams.numShadowCascades =\r\n shadowMapParams.lightType === LIGHT_TYPE_DIRECTIONAL ? (this._config.numCascades ?? 1) : 1;\r\n ctx.shadowMapInfo.set(this.light, shadowMapParams);\r\n const scene = ctx.scene;\r\n const camera = ctx.camera;\r\n renderPass.light = this._light;\r\n this.updateResources(shadowMapParams);\r\n shadowMapParams.shaderHash = this.getShaderHash(shadowMapParams);\r\n const device = getDevice();\r\n const fb = shadowMapParams.shadowMapFramebuffer!;\r\n shadowMapParams.depthClampEnabled = false;\r\n renderPass.clearColor = fb.getColorAttachments()[0]\r\n ? fb.getColorAttachments()[0].isFloatFormat()\r\n ? new Vector4(1, 1, 1, 1)\r\n : new Vector4(0, 0, 0, 1)\r\n : null;\r\n const depthScale = this._impl!.getDepthScale();\r\n if (this._light.isDirectionLight() && this._autoShadowRegion) {\r\n this.updateDirectionalShadowRegion();\r\n }\r\n const shadowRegion =\r\n this._light.isDirectionLight() && this._shadowRegion && this._shadowRegion.isValid()\r\n ? this._shadowRegion\r\n : scene.boundingBox;\r\n if (this._light.isPointLight()) {\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n this.createLightCameraPoint(shadowMapRenderCamera);\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[0]\r\n );\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n device.setFramebuffer(fb);\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.transpose(shadowMapRenderCamera.viewMatrix));\r\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\r\n shadowMapRenderCamera.lookAtCubeFace(face);\r\n fb.setColorAttachmentCubeFace(0, face);\r\n fb.setDepthAttachmentCubeFace(face);\r\n renderPass.render(ctx, shadowMapRenderCamera);\r\n }\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.identity());\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n } else {\r\n if (this._config.numCascades > 1) {\r\n const distances = this.calcSplitDistances(\r\n camera.getNearPlane(),\r\n Math.min(this._shadowDistance, camera.getFarPlane()),\r\n this._config.numCascades\r\n );\r\n const cascadeCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const shadowMapCullCamera = ShadowMapper.fetchCameraForScene(scene);\r\n shadowMapCullCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;\r\n cascadeCamera.parent = camera;\r\n shadowMapParams.depthClampEnabled = getDevice().getDeviceCaps().shaderCaps.supportFragmentDepth;\r\n for (let split = 0; split < this._config.numCascades; split++) {\r\n cascadeCamera.setPerspective(\r\n camera.getFOV(),\r\n camera.getAspect(),\r\n distances[split],\r\n distances[split + 1]\r\n );\r\n const snapMatrix = ShadowMapper._snapMatrix;\r\n const border = shadowMapParams.impl!.getShadowMapBorder(shadowMapParams); //20 / this._config.shadowMapSize;\r\n this.createLightCameraDirectional(\r\n shadowRegion,\r\n cascadeCamera,\r\n shadowMapRenderCamera,\r\n snapMatrix,\r\n border\r\n );\r\n this.createLightCameraDirectional(shadowRegion, cascadeCamera, shadowMapCullCamera, null, border);\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[split]\r\n );\r\n shadowMapParams.depthBiasScales[split] =\r\n shadowMapParams.depthBiasValues[0].x !== 0\r\n ? shadowMapParams.depthBiasValues[split].x / shadowMapParams.depthBiasValues[0].x\r\n : 1;\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n let scissor: Nullable<number[]> = null;\r\n if (\r\n fb.getColorAttachments()[0]?.isTexture2DArray() ||\r\n fb.getDepthAttachment()?.isTexture2DArray()\r\n ) {\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n );\r\n fb.setColorAttachmentLayer(0, split);\r\n fb.setDepthAttachmentLayer(split);\r\n } else {\r\n const numRows = this._config.numCascades > 2 ? 2 : 1;\r\n const numCols = this._config.numCascades > 1 ? 2 : 1;\r\n const adjMatrix = new Matrix4x4();\r\n const col = split % 2;\r\n const row = split >> 1;\r\n adjMatrix.setRowXYZW(0, 1.5 - 0.5 * numCols, 0, 0, 0);\r\n adjMatrix.setRowXYZW(1, 0, 1.5 - 0.5 * numRows, 0, 0);\r\n adjMatrix.setRowXYZW(2, 0, 0, 1, 0);\r\n adjMatrix.setRowXYZW(3, col - 0.5 * numCols + 0.5, row - 0.5 * numRows + 0.5, 0, 1);\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(\r\n adjMatrix,\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n )\r\n );\r\n if (device.type === 'webgpu') {\r\n scissor = [\r\n col * this._config.shadowMapSize,\r\n (numRows - 1 - row) * this._config.shadowMapSize,\r\n this._config.shadowMapSize,\r\n this._config.shadowMapSize\r\n ];\r\n } else {\r\n scissor = [\r\n col * this._config.shadowMapSize,\r\n row * this._config.shadowMapSize,\r\n this._config.shadowMapSize,\r\n this._config.shadowMapSize\r\n ];\r\n }\r\n }\r\n device.setFramebuffer(fb);\r\n device.setScissor(scissor);\r\n renderPass.render(ctx, shadowMapRenderCamera, shadowMapCullCamera);\r\n shadowMapParams.shadowMatrices.set(\r\n Matrix4x4.transpose(shadowMapRenderCamera.viewProjectionMatrix),\r\n split * 16\r\n );\r\n shadowMapParams.cascadeDistances[split] = distances[split + 1];\r\n }\r\n ShadowMapper.releaseCamera(cascadeCamera);\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n ShadowMapper.releaseCamera(shadowMapCullCamera);\r\n } else {\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene)!;\r\n const snapMatrix = ShadowMapper._snapMatrix;\r\n shadowMapRenderCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;\r\n if (this._light.isDirectionLight()) {\r\n this.createLightCameraDirectional(\r\n shadowRegion,\r\n camera,\r\n shadowMapRenderCamera,\r\n snapMatrix,\r\n shadowMapParams.impl!.getShadowMapBorder(shadowMapParams)\r\n );\r\n } else if (this._light.isRectLight()) {\r\n this.createLightCameraRect(shadowMapRenderCamera);\r\n } else {\r\n this.createLightCameraSpot(shadowMapRenderCamera);\r\n }\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[0]\r\n );\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n device.setFramebuffer(fb);\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n );\r\n renderPass.render(ctx, shadowMapRenderCamera);\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.transpose(shadowMapRenderCamera.viewProjectionMatrix));\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n }\r\n }\r\n this.postRenderShadowMap(shadowMapParams);\r\n }\r\n /** @internal */\r\n private applyMode(mode: ShadowMode) {\r\n if (mode !== 'hard' && mode !== 'vsm' && mode !== 'esm' && mode !== 'pcf-pd' && mode !== 'pcf-opt') {\r\n console.error(`ShadowMapper.setShadowMode() failed: invalid mode: ${mode}`);\r\n return;\r\n }\r\n this._impl = null;\r\n if (mode === 'hard') {\r\n this._impl = new SSM();\r\n } else if (mode === 'vsm') {\r\n this._impl = new VSM(this._vsmBlurKernelSize, this._vsmBlurRadius, this._vsmDarkness);\r\n } else if (mode === 'esm') {\r\n this._impl = new ESM(this._esmBlurKernelSize, this._esmBlurRadius, this._esmDepthScale);\r\n } else if (mode === 'pcf-pd') {\r\n this._impl = new PCFPD(this._pdSampleCount, this._pdSampleRadius);\r\n } else if (mode === 'pcf-opt') {\r\n this._impl = new PCFOPT(this._pcfKernelSize);\r\n }\r\n }\r\n /** @internal */\r\n private asVSM() {\r\n return this._impl?.getType() === 'vsm' ? (this._impl as VSM) : null;\r\n }\r\n /** @internal */\r\n private asESM() {\r\n return this._impl?.getType() === 'esm' ? (this._impl as ESM) : null;\r\n }\r\n /** @internal */\r\n private asPCFPD() {\r\n return this._impl?.getType() === 'pcf-pd' ? (this._impl as PCFPD) : null;\r\n }\r\n /** @internal */\r\n private asPCFOPT() {\r\n return this._impl?.getType() === 'pcf-opt' ? (this._impl as PCFOPT) : null;\r\n }\r\n}\r\n"],"names":["tmpMatrix","Matrix4x4","tmpFrustum","Frustum","identity","ShadowMapper","_snapMatrix","_target","Vector3","_up","_frustumMin","_frustumMax","_frustumCenter","_lightCameras","WeakMap","_shadowMapParams","light","_light","_config","shadowMapSize","numCascades","splitLambda","depthBias","normalBias","nearClip","_resourceDirty","_shadowMode","_shadowDistance","_impl","_pdSampleCount","_pdSampleRadius","_pcfKernelSize","_vsmBlurKernelSize","_vsmBlurRadius","_vsmDarkness","_esmBlur","_esmBlurKernelSize","_esmBlurRadius","_esmDepthScale","_shadowRegion","_autoShadowRegion","applyMode","copyFrom","other","shadowRegion","AABB","shadowDistance","numShadowCascades","mode","pdSampleCount","pdSampleRadius","pcfKernelSize","vsmBlurKernelSize","vsmBlurRadius","vsmDarkness","esmBlur","esmBlurKernelSize","esmBlurRadius","esmDepthScale","num","Number","isInteger","console","error","region","updateDirectionalShadowRegion","force","isDirectionLight","scene","aabb","beginExtend","rootNode","iterate","child","isMesh","isClipmapTerrain","castShadow","bbox","getWorldBoundingVolume","toAABB","extend","minPoint","maxPoint","isValid","val","Math","max","applyQualityPreset","preset","getShaderHash","shadowMapParams","impl","name","lightType","shadowMap","target","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","format","filterable","min","pcfpd","asPCFPD","tapCount","setDepthScale","pcfopt","asPCFOPT","kernelSize","vsm","asVSM","blurSize","esm","asESM","blur","computeShadow","scope","shadowVertex","NdotL","computeShadowCSM","split","releaseTemporalResources","ctx","shadowMapInfo","k","keys","get","LIGHT_TYPE_NONE","depthClampEnabled","shaderHash","shadowMapFramebuffer","shadowMapSampler","implData","push","computeShadowBias","z","linear","pb","$builder","depthBiasParam","ShaderHelper","getDepthBiasValues","LIGHT_TYPE_DIRECTIONAL","dot","mul","xy","vec2","sub","nearFar","getShadowCameraParams","linearDepth","nonLinearDepthToLinearNormalized","biasScaleFactor","mix","w","computeShadowBiasCSM","splitFlags","vec4","float","equal","depthBiasScale","getDepthBiasScales","isTextureInvalid","texture","width","height","depth","createTexture","device","options","mipmapping","createTexture2D","createCubeTexture","createTexture2DArray","Error","fetchTemporalFramebuffer","autoRelease","colorFormat","depthFormat","useTextureArray","type","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","updateResources","getShadowMapColorFormat","getShadowMapDepthFormat","shadowMapWidth","shadowMapHeight","createLightCameraPoint","lightCamera","parent","position","setXYZ","rotation","scale","setPerspective","PI","range","set","positionAndRange","xyz","createLightCameraSpot","acos","cutoff","createLightCameraRect","rect","halfW","halfH","far","setOrtho","createLightCameraDirectional","sceneAABB","sceneCamera","cropMatrix","border","frustum","frustumViewSpace","getFarPlane","getProjectionMatrix","setNearFar","getNearPlane","initWithMatrix","expand","frustumMin","frustumMax","frustumCenter","up","MAX_VALUE","corners","forEach","p","inplaceMin","inplaceMax","radius","distance","center","thisToWorld","add","scaleBy","sceneRadius","diagonalLength","x","directionAndCutoff","y","lookAt","getWorldPosition","viewProjectionMatrix","transformPointP","tx","ty","rx","round","ry","translation","fetchShadowMapParams","length","pop","cameraParams","Vector4","cascadeDistances","depthBiasScales","depthBiasValues","shadowMatrices","Float32Array","fetchCameraForScene","cameras","camera","Camera","retainObject","clipMask","releaseCamera","remove","calcSplitDistances","nearPlane","farPlane","result","i","fIDM","fLog","pow","fUniform","calcDepthBiasParams","depthScale","sizeNear","getNearPlaneWidth","getNearPlaneHeight","sizeFar","getFarPlaneWidth","getFarPlaneHeight","scaleFactor","setXYZW","postRenderShadowMap","render","renderPass","Map","clearColor","getColorAttachments","isFloatFormat","getDepthScale","boundingBox","isPointLight","shadowMapRenderCamera","setFramebuffer","transpose","viewMatrix","face","CubeFace","PX","NX","PY","NY","PZ","NZ","lookAtCubeFace","setColorAttachmentCubeFace","setDepthAttachmentCubeFace","distances","cascadeCamera","shadowMapCullCamera","ClipLeft","ClipRight","ClipBottom","ClipTop","shaderCaps","supportFragmentDepth","getFOV","getAspect","snapMatrix","getShadowMapBorder","scissor","isTexture2DArray","getDepthAttachment","setProjectionMatrix","multiply","setColorAttachmentLayer","setDepthAttachmentLayer","numRows","numCols","adjMatrix","col","row","setRowXYZW","setScissor","isRectLight","SSM","VSM","ESM","PCFPD","PCFOPT","getType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shadowmapper.js","sources":["../../src/shadow/shadowmapper.ts"],"sourcesContent":["import type { RequireOptionals, Nullable } from '@zephyr3d/base';\r\nimport { retainObject, Matrix4x4, Vector3, Vector4, AABB, CubeFace, Frustum } from '@zephyr3d/base';\r\nimport type {\r\n PBShaderExp,\r\n FrameBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureFormat,\r\n PBInsideFunctionScope,\r\n TextureSampler,\r\n TextureCreationOptions,\r\n TextureType,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport { Camera } from '../camera/camera';\r\nimport { SSM } from './ssm';\r\nimport { ESM } from './esm';\r\nimport { VSM } from './vsm';\r\nimport { PCFPD } from './pcf_pd';\r\nimport { PCFOPT } from './pcf_opt';\r\nimport type { PointLight, PunctualLight, RectLight, SpotLight } from '../scene/light';\r\nimport type { ShadowMapPass } from '../render/shadowmap_pass';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { ShadowImpl } from './shadow_impl';\r\nimport type { DrawContext } from '../render';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\nconst tmpFrustum = new Frustum(Matrix4x4.identity());\r\n\r\n/**\r\n * Shadow mapping mode\r\n * @public\r\n */\r\nexport type ShadowMode = 'hard' | 'vsm' | 'esm' | 'pcf-pd' | 'pcf-opt';\r\n/**\r\n * Preset shadow quality profiles.\r\n *\r\n * @public\r\n */\r\nexport type ShadowQualityPreset = 'character-small' | 'outdoor-large';\r\n\r\n/** @internal */\r\nexport type ShadowMapParams = {\r\n lightType: number;\r\n shaderHash: string;\r\n numShadowCascades: number;\r\n depthClampEnabled: boolean;\r\n cascadeDistances: Vector4;\r\n depthBiasValues: Vector4[];\r\n depthBiasScales: Vector4;\r\n cameraParams: Vector4;\r\n shadowMatrices: Float32Array;\r\n shadowMapFramebuffer: Nullable<FrameBuffer>;\r\n shadowMap: Nullable<BaseTexture>;\r\n shadowMapSampler: Nullable<TextureSampler>;\r\n impl: Nullable<ShadowImpl>;\r\n implData: unknown;\r\n};\r\n\r\n/** @internal */\r\nexport type ShadowMapType = Texture2D | TextureCube | Texture2DArray;\r\n\r\n/** @internal */\r\nexport interface ShadowConfig {\r\n shadowMapSize: number;\r\n numCascades?: number;\r\n splitLambda?: number;\r\n depthBias?: number;\r\n normalBias?: number;\r\n nearClip?: number;\r\n}\r\n\r\n// const zeroPosition = Vector3.zero();\r\n/**\r\n * The shadow map generator\r\n * @public\r\n */\r\nexport class ShadowMapper {\r\n /** @internal */\r\n private static readonly _snapMatrix = new Matrix4x4();\r\n /** @internal */\r\n private static readonly _target = new Vector3();\r\n /** @internal */\r\n private static readonly _up = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumMin = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumMax = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumCenter = new Vector3();\r\n /** @internal */\r\n private static readonly _lightCameras: WeakMap<Scene, Camera[]> = new WeakMap();\r\n /** @internal */\r\n private static readonly _shadowMapParams: ShadowMapParams[] = [];\r\n /** @internal */\r\n protected _light: PunctualLight;\r\n /** @internal */\r\n protected _config: RequireOptionals<ShadowConfig>;\r\n /** @internal */\r\n protected _resourceDirty: boolean;\r\n /** @internal */\r\n protected _shadowMode: ShadowMode;\r\n /** @internal */\r\n protected _shadowDistance: number;\r\n /** @internal */\r\n protected _impl: Nullable<ShadowImpl>;\r\n /** @internal */\r\n protected _pdSampleCount: number;\r\n /** @internal */\r\n protected _pdSampleRadius: number;\r\n /** @internal */\r\n protected _pcfKernelSize: number;\r\n /** @internal */\r\n protected _vsmBlurKernelSize: number;\r\n /** @internal */\r\n protected _vsmBlurRadius: number;\r\n /** @internal */\r\n protected _vsmDarkness: number;\r\n /** @internal */\r\n protected _esmBlur: boolean;\r\n /** @internal */\r\n protected _esmBlurKernelSize: number;\r\n /** @internal */\r\n protected _esmBlurRadius: number;\r\n /** @internal */\r\n protected _esmDepthScale: number;\r\n /** @internal */\r\n protected _shadowRegion: Nullable<AABB>;\r\n /** @internal */\r\n protected _autoShadowRegion: boolean;\r\n /**\r\n * Creates an instance of ShadowMapper\r\n * @param light - The light that is used to generate shadow map\r\n */\r\n constructor(light: PunctualLight) {\r\n this._light = light;\r\n this._config = {\r\n shadowMapSize: 1024,\r\n numCascades: 1,\r\n splitLambda: 0.5,\r\n depthBias: 0.5,\r\n normalBias: 0.2,\r\n nearClip: 1\r\n };\r\n this._resourceDirty = true;\r\n this._shadowMode = 'hard';\r\n this._shadowDistance = 2000;\r\n this._impl = null;\r\n this._pdSampleCount = 12;\r\n this._pdSampleRadius = 4;\r\n this._pcfKernelSize = 5;\r\n this._vsmBlurKernelSize = 5;\r\n this._vsmBlurRadius = 4;\r\n this._vsmDarkness = 0.3;\r\n this._esmBlur = true;\r\n this._esmBlurKernelSize = 5;\r\n this._esmBlurRadius = 4;\r\n this._esmDepthScale = 200;\r\n this._shadowRegion = null;\r\n this._autoShadowRegion = false;\r\n this.applyMode(this._shadowMode);\r\n }\r\n copyFrom(other: ShadowMapper) {\r\n this.shadowMapSize = other.shadowMapSize;\r\n this.shadowRegion = other.shadowRegion ? new AABB(other.shadowRegion) : null;\r\n this.shadowDistance = other.shadowDistance;\r\n this.numShadowCascades = other.numShadowCascades;\r\n this.splitLambda = other.splitLambda;\r\n this.depthBias = other.depthBias;\r\n this.normalBias = other.normalBias;\r\n this.nearClip = other.nearClip;\r\n this.mode = other.mode;\r\n this.pdSampleCount = other.pdSampleCount;\r\n this.pdSampleRadius = other.pdSampleRadius;\r\n this.pcfKernelSize = other.pcfKernelSize;\r\n this.vsmBlurKernelSize = other.vsmBlurKernelSize;\r\n this.vsmBlurRadius = other.vsmBlurRadius;\r\n this.vsmDarkness = other.vsmDarkness;\r\n this.esmBlur = other.esmBlur;\r\n this.esmBlurKernelSize = other.esmBlurKernelSize;\r\n this.esmBlurRadius = other.esmBlurRadius;\r\n this.esmDepthScale = other.esmDepthScale;\r\n }\r\n /** The light that is used to generate shadow map */\r\n get light() {\r\n return this._light;\r\n }\r\n /** Size of the shadow map */\r\n get shadowMapSize() {\r\n return this._config.shadowMapSize;\r\n }\r\n set shadowMapSize(num) {\r\n if (!Number.isInteger(num) || num < 1) {\r\n console.error(`invalid shadow map size: ${num}`);\r\n return;\r\n }\r\n if (this._config.shadowMapSize !== num) {\r\n this._config.shadowMapSize = num;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n /** Shadow region for directional light */\r\n get shadowRegion() {\r\n return this._shadowRegion;\r\n }\r\n set shadowRegion(region) {\r\n this._shadowRegion = region;\r\n this._autoShadowRegion = false;\r\n }\r\n /** @internal */\r\n updateDirectionalShadowRegion(force = false) {\r\n if (!this._light.isDirectionLight()) {\r\n return;\r\n }\r\n if (!force && !this._autoShadowRegion) {\r\n return;\r\n }\r\n const scene = this._light.scene;\r\n if (!scene) {\r\n return;\r\n }\r\n const aabb = new AABB();\r\n aabb.beginExtend();\r\n scene.rootNode.iterate((child) => {\r\n if ((child.isMesh() || child.isClipmapTerrain()) && child.castShadow) {\r\n const bbox = child.getWorldBoundingVolume()?.toAABB();\r\n if (bbox) {\r\n aabb.extend(bbox.minPoint);\r\n aabb.extend(bbox.maxPoint);\r\n }\r\n }\r\n });\r\n this._shadowRegion = aabb.isValid() ? aabb : null;\r\n this._autoShadowRegion = true;\r\n }\r\n /** Maximum distance from the camera, shadow will not be rendered beyond this range */\r\n get shadowDistance() {\r\n return this._shadowDistance;\r\n }\r\n set shadowDistance(val) {\r\n this._shadowDistance = Math.max(0, val);\r\n }\r\n /** Count of the cascades, The maximum value is 4 */\r\n get numShadowCascades() {\r\n return this._config.numCascades;\r\n }\r\n set numShadowCascades(num) {\r\n if (num !== 1 && num !== 2 && num !== 3 && num !== 4) {\r\n console.error(`invalid shadow cascade number: ${num}`);\r\n return;\r\n }\r\n if (!this._light.isDirectionLight() && num > 1) {\r\n console.error(`only directional light can have more than one shadow cascades`);\r\n return;\r\n }\r\n if (num !== this._config.numCascades) {\r\n this._config.numCascades = num;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n /** The split lambda for cascaded shadow mapping */\r\n get splitLambda() {\r\n return this._config.splitLambda;\r\n }\r\n set splitLambda(val) {\r\n if (this._config.splitLambda !== val) {\r\n this._config.splitLambda = val;\r\n }\r\n }\r\n /** Depth bias for the shadow map */\r\n get depthBias() {\r\n return this._config.depthBias;\r\n }\r\n set depthBias(val) {\r\n this._config.depthBias = val;\r\n }\r\n /** Normal bias for the shadow map */\r\n get normalBias() {\r\n return this._config.normalBias;\r\n }\r\n set normalBias(val) {\r\n this._config.normalBias = val;\r\n }\r\n /** Near clip plane */\r\n get nearClip() {\r\n return this._config.nearClip;\r\n }\r\n set nearClip(val) {\r\n if (this._config.nearClip !== val) {\r\n this._config.nearClip = val;\r\n }\r\n }\r\n /** Shadow map mode */\r\n get mode() {\r\n return this._shadowMode;\r\n }\r\n set mode(mode) {\r\n if (mode !== this._shadowMode) {\r\n this._shadowMode = mode;\r\n this.applyMode(this._shadowMode);\r\n }\r\n }\r\n /**\r\n * Applies a practical shadow preset for common scenarios.\r\n *\r\n * `character-small`: higher contact quality and tighter distance for character-centric scenes.\r\n * `outdoor-large`: longer distance coverage for open scenes.\r\n */\r\n applyQualityPreset(preset: ShadowQualityPreset) {\r\n if (preset === 'character-small') {\r\n this.mode = 'pcf-opt';\r\n this.shadowMapSize = 2048;\r\n this.shadowDistance = 120;\r\n this.splitLambda = 0.75;\r\n this.depthBias = 0.18;\r\n this.normalBias = 0.3;\r\n this.nearClip = 0.2;\r\n this.pcfKernelSize = 5;\r\n this.numShadowCascades = this._light.isDirectionLight() ? 3 : 1;\r\n return;\r\n }\r\n this.mode = 'pcf-opt';\r\n this.shadowMapSize = 2048;\r\n this.shadowDistance = 800;\r\n this.splitLambda = 0.6;\r\n this.depthBias = 0.35;\r\n this.normalBias = 0.22;\r\n this.nearClip = 1;\r\n this.pcfKernelSize = 3;\r\n this.numShadowCascades = this._light.isDirectionLight() ? 4 : 1;\r\n }\r\n /** @internal */\r\n getShaderHash(shadowMapParams: ShadowMapParams) {\r\n return `${shadowMapParams.impl!.constructor.name}_${shadowMapParams.impl!.getShaderHash()}_${\r\n shadowMapParams.lightType\r\n }_${shadowMapParams.shadowMap!.target}_${Number(shadowMapParams.numShadowCascades > 1)}_${Number(\r\n getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap!.format)\r\n .filterable\r\n )}`;\r\n }\r\n /** Sample count for poisson disc PCF */\r\n get pdSampleCount() {\r\n return this._pdSampleCount;\r\n }\r\n set pdSampleCount(val) {\r\n val = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n if (val !== this._pdSampleCount) {\r\n this._pdSampleCount = val;\r\n const pcfpd = this.asPCFPD();\r\n if (pcfpd) {\r\n pcfpd.tapCount = this._pdSampleCount;\r\n }\r\n }\r\n }\r\n /** Radius for poisson disc PCF */\r\n get pdSampleRadius() {\r\n return this._pdSampleRadius;\r\n }\r\n set pdSampleRadius(val) {\r\n val = Math.max(0, Number(val) >> 0);\r\n if (val !== this._pdSampleRadius) {\r\n this._pdSampleRadius = val;\r\n this.asPCFPD()?.setDepthScale(this._pdSampleRadius);\r\n }\r\n }\r\n /** Kernel size for optimized PCF */\r\n get pcfKernelSize() {\r\n return this._pcfKernelSize;\r\n }\r\n set pcfKernelSize(val) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n if (val !== this._pcfKernelSize) {\r\n this._pcfKernelSize = val;\r\n const pcfopt = this.asPCFOPT();\r\n if (pcfopt) {\r\n pcfopt.kernelSize = this._pcfKernelSize;\r\n }\r\n }\r\n }\r\n /** Kernel size of VSM */\r\n get vsmBlurKernelSize() {\r\n return this._vsmBlurKernelSize;\r\n }\r\n set vsmBlurKernelSize(val) {\r\n val = Math.max(3, Number(val) >> 0) | 1;\r\n if (val !== this._vsmBlurKernelSize) {\r\n this._vsmBlurKernelSize = val;\r\n const vsm = this.asVSM();\r\n if (vsm) {\r\n vsm.kernelSize = this._vsmBlurKernelSize;\r\n }\r\n }\r\n }\r\n /** Blur radius for VSM */\r\n get vsmBlurRadius() {\r\n return this._vsmBlurRadius;\r\n }\r\n set vsmBlurRadius(val) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._vsmBlurRadius) {\r\n this._vsmBlurRadius = val;\r\n const vsm = this.asVSM();\r\n if (vsm) {\r\n vsm.blurSize = this._vsmBlurRadius;\r\n }\r\n }\r\n }\r\n /** Darkness for VSM */\r\n get vsmDarkness() {\r\n return this._vsmDarkness;\r\n }\r\n set vsmDarkness(val) {\r\n val = Math.min(0.999, Math.max(0, Number(val) || 0));\r\n if (val !== this._vsmDarkness) {\r\n this._vsmDarkness = val;\r\n this.asVSM()?.setDepthScale(this._vsmDarkness);\r\n }\r\n }\r\n /** Whether to enable ESM blur */\r\n get esmBlur() {\r\n return this._esmBlur;\r\n }\r\n set esmBlur(val) {\r\n if (!!val !== this.esmBlur) {\r\n this._esmBlur = !!val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.blur = this._esmBlur;\r\n }\r\n }\r\n }\r\n /** Kernel size for ESM */\r\n get esmBlurKernelSize() {\r\n return this._esmBlurKernelSize;\r\n }\r\n set esmBlurKernelSize(val) {\r\n val = Math.max(3, Number(val) >> 0) | 1;\r\n if (val !== this._esmBlurKernelSize) {\r\n this._esmBlurKernelSize = val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.kernelSize = this._esmBlurKernelSize;\r\n }\r\n }\r\n }\r\n /** Blur radius for ESM */\r\n get esmBlurRadius() {\r\n return this._esmBlurRadius;\r\n }\r\n set esmBlurRadius(val) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._esmBlurRadius) {\r\n this._esmBlurRadius = val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.blurSize = this._esmBlurRadius;\r\n }\r\n }\r\n }\r\n /** Depth scale for ESM */\r\n get esmDepthScale() {\r\n return this._esmDepthScale;\r\n }\r\n set esmDepthScale(val) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._esmDepthScale) {\r\n this._esmDepthScale = val;\r\n this.asESM()?.setDepthScale(this._esmDepthScale);\r\n }\r\n }\r\n /** @internal */\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n return this._impl!.computeShadow(shadowMapParams, scope, shadowVertex, NdotL);\r\n }\r\n /** @internal */\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 return this._impl!.computeShadowCSM(shadowMapParams, scope, shadowVertex, NdotL, split);\r\n }\r\n /** @internal */\r\n static releaseTemporalResources(ctx: DrawContext) {\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n const shadowMapParams = ctx.shadowMapInfo.get(k)!;\r\n //ctx.device.pool.releaseFrameBuffer(shadowMapParams.shadowMapFramebuffer);\r\n shadowMapParams.lightType = LIGHT_TYPE_NONE;\r\n shadowMapParams.depthClampEnabled = false;\r\n shadowMapParams.shaderHash = '';\r\n shadowMapParams.numShadowCascades = 1;\r\n shadowMapParams.shadowMapFramebuffer = null;\r\n shadowMapParams.impl = null;\r\n shadowMapParams.shadowMap = null;\r\n shadowMapParams.shadowMapSampler = null;\r\n shadowMapParams.implData = null;\r\n this._shadowMapParams.push(shadowMapParams);\r\n }\r\n ctx.shadowMapInfo = null;\r\n }\r\n }\r\n /** @internal */\r\n static computeShadowBias(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n linear: boolean\r\n ) {\r\n const pb = scope.$builder;\r\n const depthBiasParam = ShaderHelper.getDepthBiasValues(scope);\r\n if (shadowMapParams.lightType === LIGHT_TYPE_DIRECTIONAL) {\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL))), pb.vec2(1, 1));\r\n } else {\r\n const nearFar = ShaderHelper.getShadowCameraParams(scope).xy;\r\n const linearDepth = linear ? z : ShaderHelper.nonLinearDepthToLinearNormalized(scope, z, nearFar);\r\n const biasScaleFactor = pb.mix(1, depthBiasParam.w, linearDepth);\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL)), biasScaleFactor), pb.vec2(1, 1));\r\n }\r\n }\r\n /** @internal */\r\n static computeShadowBiasCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depthBiasParam = ShaderHelper.getDepthBiasValues(scope);\r\n const splitFlags = pb.vec4(\r\n pb.float(pb.equal(split, 0)),\r\n pb.float(pb.equal(split, 1)),\r\n pb.float(pb.equal(split, 2)),\r\n pb.float(pb.equal(split, 3))\r\n );\r\n const depthBiasScale = pb.dot(ShaderHelper.getDepthBiasScales(scope), splitFlags);\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL)), depthBiasScale), pb.vec2(1, 1));\r\n }\r\n /** @internal */\r\n protected isTextureInvalid(\r\n texture: Texture2D | TextureCube | Texture2DArray,\r\n target: TextureType,\r\n format: TextureFormat,\r\n width: number,\r\n height: number\r\n ) {\r\n return (\r\n texture &&\r\n (texture.target !== target ||\r\n texture.format !== format ||\r\n texture.width !== width ||\r\n texture.height !== height ||\r\n texture.depth !== this.numShadowCascades)\r\n );\r\n }\r\n /** @internal */\r\n protected createTexture(\r\n target: TextureType,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n const device = getDevice();\r\n const options: TextureCreationOptions = {\r\n mipmapping: false\r\n };\r\n switch (target) {\r\n case '2d':\r\n return device.createTexture2D(format, width, height, options)!;\r\n case 'cube':\r\n return device.createCubeTexture(format, width, options)!;\r\n case '2darray':\r\n return device.createTexture2DArray(format, width, height, depth, options)!;\r\n default:\r\n throw new Error(`Invalid target ${target}`);\r\n }\r\n }\r\n /** @internal */\r\n static fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: TextureFormat,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /** @internal */\r\n protected updateResources(shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n const colorFormat = shadowMapParams.impl!.getShadowMapColorFormat(shadowMapParams);\r\n const depthFormat = shadowMapParams.impl!.getShadowMapDepthFormat(shadowMapParams);\r\n const numCascades = shadowMapParams.numShadowCascades;\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const shadowMapWidth =\r\n numCascades > 1 && !useTextureArray ? 2 * this._config.shadowMapSize : this._config.shadowMapSize;\r\n const shadowMapHeight =\r\n numCascades > 2 && !useTextureArray ? 2 * this._config.shadowMapSize : this._config.shadowMapSize;\r\n /*\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [device.pool.fetchTemporalTexture2DArray(false, colorFormat, shadowMapWidth, shadowMapHeight, numCascades, false)]\r\n : this._light.isPointLight()\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, shadowMapWidth, false)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, shadowMapWidth, shadowMapHeight, false)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, shadowMapWidth, shadowMapHeight, numCascades, false)\r\n : device.type !== 'webgl' && this._light.isPointLight()\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, shadowMapWidth, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, shadowMapWidth, shadowMapHeight, false)\r\n : null;\r\n shadowMapParams.shadowMapFramebuffer = device.pool.createTemporalFramebuffer(false, colorAttachments, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n */\r\n shadowMapParams.shadowMapFramebuffer = ShadowMapper.fetchTemporalFramebuffer(\r\n true,\r\n this._light.lightType,\r\n numCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat!,\r\n depthFormat\r\n );\r\n shadowMapParams.impl = this._impl;\r\n this._impl!.updateResources(shadowMapParams);\r\n }\r\n /** @internal */\r\n protected createLightCameraPoint(lightCamera: Camera) {\r\n //lightCamera.reparent(this._light);\r\n lightCamera.parent = lightCamera.scene!.rootNode;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n lightCamera.setPerspective(\r\n Math.PI / 2,\r\n 1,\r\n this._config.nearClip!,\r\n Math.min(this._shadowDistance, (this._light as PointLight).range)\r\n );\r\n lightCamera.position.set(this._light.positionAndRange.xyz());\r\n }\r\n /** @internal */\r\n protected createLightCameraSpot(lightCamera: Camera) {\r\n lightCamera.parent = this._light;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n lightCamera.setPerspective(\r\n 2 * Math.acos((this._light as SpotLight).cutoff),\r\n 1,\r\n this._config.nearClip,\r\n Math.min(this._shadowDistance, (this._light as SpotLight).range)\r\n );\r\n }\r\n /** @internal */\r\n protected createLightCameraRect(lightCamera: Camera) {\r\n const rect = this._light as RectLight;\r\n lightCamera.parent = this._light;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n const halfW = rect.width * 0.5;\r\n const halfH = rect.height * 0.5;\r\n const far = Math.min(this._shadowDistance, rect.range);\r\n lightCamera.setOrtho(\r\n -halfW,\r\n halfW,\r\n -halfH,\r\n halfH,\r\n this._config.nearClip,\r\n Math.max(this._config.nearClip + 0.001, far)\r\n );\r\n }\r\n /** @internal */\r\n protected createLightCameraDirectional(\r\n sceneAABB: AABB,\r\n sceneCamera: Camera,\r\n lightCamera: Camera,\r\n cropMatrix?: Nullable<Matrix4x4>,\r\n border?: number\r\n ) {\r\n let frustum = sceneCamera.frustumViewSpace;\r\n if (this._shadowDistance < sceneCamera.getFarPlane()) {\r\n tmpMatrix.set(sceneCamera.getProjectionMatrix());\r\n tmpMatrix.setNearFar(tmpMatrix.getNearPlane(), this._shadowDistance);\r\n //tmpMatrix.multiplyRight(sceneCamera.viewMatrix);\r\n tmpFrustum.initWithMatrix(tmpMatrix);\r\n frustum = tmpFrustum;\r\n }\r\n border = border || 0;\r\n const expand = (this.shadowMapSize - 2 * border) / this.shadowMapSize;\r\n //const frustum = sceneCamera.frustum;\r\n const frustumMin = ShadowMapper._frustumMin;\r\n const frustumMax = ShadowMapper._frustumMax;\r\n const frustumCenter = ShadowMapper._frustumCenter;\r\n const target = ShadowMapper._target;\r\n const up = ShadowMapper._up;\r\n // const frustum = new Frustum(sceneCamera.viewProjectionMatrix);\r\n frustumMin.setXYZ(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n frustumMax.setXYZ(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n frustum.corners.forEach((p) => {\r\n frustumMin.inplaceMin(p);\r\n frustumMax.inplaceMax(p);\r\n });\r\n let radius = Vector3.distance(frustumMin, frustumMax) * 0.5 * expand;\r\n const center = sceneCamera.thisToWorld(\r\n Vector3.add(frustumMin, frustumMax, frustumCenter).scaleBy(0.5),\r\n frustumCenter\r\n );\r\n // Bounding sphere of the shadow camera should not be larger than bounding sphere of the scene.\r\n const sceneRadius = sceneAABB.diagonalLength * 0.5 * expand;\r\n if (sceneRadius < radius) {\r\n radius = sceneRadius;\r\n Vector3.add(sceneAABB.minPoint, sceneAABB.maxPoint, center).scaleBy(0.5);\r\n }\r\n target.setXYZ(\r\n center.x + this._light.directionAndCutoff.x,\r\n center.y + this._light.directionAndCutoff.y,\r\n center.z + this._light.directionAndCutoff.z\r\n );\r\n up.setXYZ(0, 1, 0);\r\n lightCamera.lookAt(center, target, up);\r\n lightCamera.position.set(center);\r\n lightCamera.setOrtho(\r\n -radius,\r\n radius,\r\n -radius,\r\n radius,\r\n -radius,\r\n Math.max(Vector3.distance(center, sceneCamera.getWorldPosition()), sceneCamera.getFarPlane())\r\n );\r\n center.setXYZ(0, 0, 0);\r\n lightCamera.viewProjectionMatrix.transformPointP(center, center);\r\n if (cropMatrix) {\r\n const tx = center.x * this.shadowMapSize * 0.5;\r\n const ty = center.y * this.shadowMapSize * 0.5;\r\n const rx = Math.round(tx);\r\n const ry = Math.round(ty);\r\n center.setXYZ(((rx - tx) * 2) / this.shadowMapSize, ((ry - ty) * 2) / this.shadowMapSize, 0);\r\n cropMatrix.translation(center);\r\n }\r\n\r\n /*\r\n const minx = frustumMin.x;\r\n const maxx = frustumMax.x;\r\n const miny = frustumMin.y;\r\n const maxy = frustumMax.y;\r\n const minz = frustumMin.z;\r\n const maxz = frustumMax.z;\r\n const texelSizeW = (maxx - minx) / this.shadowMapSize;\r\n const texelSizeH = (maxy - miny) / this.shadowMapSize;\r\n const cx = Math.floor((minx + maxx) / 2 / texelSizeW) * texelSizeW;\r\n const cy = Math.floor((miny + maxy) / 2 / texelSizeH) * texelSizeH;\r\n const cz = (minz + maxz) / 2;\r\n const hx = Math.floor(((maxx - minx) * (expand + 0.5)) / texelSizeW) * texelSizeW;\r\n const hy = Math.floor(((maxy - miny) * (expand + 0.5)) / texelSizeH) * texelSizeH;\r\n lightCamera.position.setXYZ(cx, cy, cz);\r\n lightCamera.setOrtho(\r\n -hx,\r\n hx,\r\n -hy,\r\n hy,\r\n sceneMax.z - maxz,\r\n sceneMax.z - minz + 1\r\n );\r\n if (cropMatrix) {\r\n // compute crop matrix\r\n let clipMaxX = 0,\r\n clipMaxY = 0;\r\n let clipMinX = Number.MAX_VALUE,\r\n clipMinY = Number.MAX_VALUE;\r\n frustum.corners.forEach((p) => {\r\n const clipPos = lightCamera.viewProjectionMatrix.transformPoint(p);\r\n clipPos.x = Math.min(1, Math.max(-1, clipPos.x / clipPos.w));\r\n clipPos.y = Math.min(1, Math.max(-1, clipPos.y / clipPos.w));\r\n if (clipPos.x > clipMaxX) {\r\n clipMaxX = clipPos.x;\r\n }\r\n if (clipPos.x < clipMinX) {\r\n clipMinX = clipPos.x;\r\n }\r\n if (clipPos.y > clipMaxY) {\r\n clipMaxY = clipPos.y;\r\n }\r\n if (clipPos.y < clipMinY) {\r\n clipMinY = clipPos.y;\r\n }\r\n });\r\n const clipW = clipMaxX - clipMinX;\r\n const clipH = clipMaxY - clipMinY;\r\n clipMinX -= expand * clipW;\r\n clipMinY -= expand * clipH;\r\n clipMaxX += expand * clipW;\r\n clipMaxY += expand * clipH;\r\n const scaleX = 2 / (clipMaxX - clipMinX);\r\n const scaleY = 2 / (clipMaxY - clipMinY);\r\n const offsetX = -0.5 * (clipMaxX + clipMinX) * scaleX;\r\n const offsetY = -0.5 * (clipMaxY + clipMinY) * scaleY;\r\n cropMatrix.identity();\r\n cropMatrix.m00 = scaleX;\r\n cropMatrix.m11 = scaleY;\r\n cropMatrix.m03 = offsetX;\r\n cropMatrix.m13 = offsetY;\r\n }\r\n */\r\n }\r\n /** @internal */\r\n private static fetchShadowMapParams() {\r\n if (this._shadowMapParams.length > 0) {\r\n return this._shadowMapParams.pop()!;\r\n } else {\r\n return {\r\n lightType: LIGHT_TYPE_NONE,\r\n depthClampEnabled: false,\r\n shaderHash: '',\r\n cameraParams: new Vector4(),\r\n cascadeDistances: new Vector4(),\r\n depthBiasScales: new Vector4(),\r\n depthBiasValues: [new Vector4(), new Vector4(), new Vector4(), new Vector4()],\r\n numShadowCascades: 1,\r\n shadowMatrices: new Float32Array(16 * 4),\r\n shadowMap: null,\r\n shadowMapSampler: null,\r\n shadowMapFramebuffer: null,\r\n impl: null,\r\n implData: null\r\n };\r\n }\r\n }\r\n /** @internal */\r\n private static fetchCameraForScene(scene: Scene) {\r\n const cameras = this._lightCameras.get(scene);\r\n if (!cameras || cameras.length === 0) {\r\n const camera = new Camera(scene);\r\n retainObject(camera);\r\n return camera;\r\n } else {\r\n const camera = cameras.pop()!;\r\n camera.parent = scene.rootNode;\r\n camera.position.setXYZ(0, 0, 0);\r\n camera.rotation.identity();\r\n camera.scale.setXYZ(1, 1, 1);\r\n camera.clipMask = 0;\r\n return camera;\r\n }\r\n }\r\n /** @internal */\r\n private static releaseCamera(camera: Camera) {\r\n let cameras = this._lightCameras.get(camera.scene!);\r\n if (!cameras) {\r\n cameras = [];\r\n this._lightCameras.set(camera.scene!, cameras);\r\n }\r\n camera.remove();\r\n cameras.push(camera);\r\n }\r\n /** @internal */\r\n calcSplitDistances(nearPlane: number, farPlane: number, numCascades: number) {\r\n const result: number[] = [0, 0, 0, 0, 0];\r\n for (let i = 0; i <= numCascades; ++i) {\r\n const fIDM = i / numCascades;\r\n const fLog = nearPlane * Math.pow(farPlane / nearPlane, fIDM);\r\n const fUniform = nearPlane + (farPlane - nearPlane) * fIDM;\r\n result[i] = fLog * this._config.splitLambda + fUniform * (1 - this._config.splitLambda);\r\n }\r\n return result;\r\n }\r\n /** @internal */\r\n protected calcDepthBiasParams(\r\n camera: Camera,\r\n shadowMapSize: number,\r\n depthBias: number,\r\n normalBias: number,\r\n depthScale: number,\r\n result: Vector4\r\n ) {\r\n const sizeNear = Math.min(\r\n camera.getProjectionMatrix().getNearPlaneWidth(),\r\n camera.getProjectionMatrix().getNearPlaneHeight()\r\n );\r\n const sizeFar = Math.min(\r\n camera.getProjectionMatrix().getFarPlaneWidth(),\r\n camera.getProjectionMatrix().getFarPlaneHeight()\r\n );\r\n const scaleFactor = (sizeNear / shadowMapSize) * 2;\r\n result.setXYZW(depthBias * scaleFactor, normalBias * 0.0001, depthScale, sizeFar / sizeNear);\r\n }\r\n /** @internal */\r\n protected postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n this._impl!.postRenderShadowMap(shadowMapParams);\r\n }\r\n /** @internal */\r\n render(ctx: DrawContext, renderPass: ShadowMapPass) {\r\n if (!ctx.shadowMapInfo) {\r\n ctx.shadowMapInfo = new Map();\r\n }\r\n const shadowMapParams = ShadowMapper.fetchShadowMapParams();\r\n shadowMapParams.impl = this._impl;\r\n shadowMapParams.lightType = this.light.lightType;\r\n shadowMapParams.numShadowCascades =\r\n shadowMapParams.lightType === LIGHT_TYPE_DIRECTIONAL ? (this._config.numCascades ?? 1) : 1;\r\n ctx.shadowMapInfo.set(this.light, shadowMapParams);\r\n const scene = ctx.scene;\r\n const camera = ctx.camera;\r\n renderPass.light = this._light;\r\n this.updateResources(shadowMapParams);\r\n shadowMapParams.shaderHash = this.getShaderHash(shadowMapParams);\r\n const device = getDevice();\r\n const fb = shadowMapParams.shadowMapFramebuffer!;\r\n shadowMapParams.depthClampEnabled = false;\r\n renderPass.clearColor = fb.getColorAttachments()[0]\r\n ? fb.getColorAttachments()[0].isFloatFormat()\r\n ? new Vector4(1, 1, 1, 1)\r\n : new Vector4(0, 0, 0, 1)\r\n : null;\r\n const depthScale = this._impl!.getDepthScale();\r\n if (this._light.isDirectionLight() && this._autoShadowRegion) {\r\n this.updateDirectionalShadowRegion();\r\n }\r\n const shadowRegion =\r\n this._light.isDirectionLight() && this._shadowRegion && this._shadowRegion.isValid()\r\n ? this._shadowRegion\r\n : scene.boundingBox;\r\n if (this._light.isPointLight()) {\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n this.createLightCameraPoint(shadowMapRenderCamera);\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[0]\r\n );\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n device.setFramebuffer(fb);\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.transpose(shadowMapRenderCamera.viewMatrix));\r\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\r\n shadowMapRenderCamera.lookAtCubeFace(face);\r\n fb.setColorAttachmentCubeFace(0, face);\r\n fb.setDepthAttachmentCubeFace(face);\r\n renderPass.render(ctx, shadowMapRenderCamera);\r\n }\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.identity());\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n } else {\r\n if (this._config.numCascades > 1) {\r\n const distances = this.calcSplitDistances(\r\n camera.getNearPlane(),\r\n Math.min(this._shadowDistance, camera.getFarPlane()),\r\n this._config.numCascades\r\n );\r\n const cascadeCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const shadowMapCullCamera = ShadowMapper.fetchCameraForScene(scene);\r\n shadowMapCullCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;\r\n cascadeCamera.parent = camera;\r\n shadowMapParams.depthClampEnabled = getDevice().getDeviceCaps().shaderCaps.supportFragmentDepth;\r\n for (let split = 0; split < this._config.numCascades; split++) {\r\n cascadeCamera.setPerspective(\r\n camera.getFOV(),\r\n camera.getAspect(),\r\n distances[split],\r\n distances[split + 1]\r\n );\r\n const snapMatrix = ShadowMapper._snapMatrix;\r\n const border = shadowMapParams.impl!.getShadowMapBorder(shadowMapParams); //20 / this._config.shadowMapSize;\r\n this.createLightCameraDirectional(\r\n shadowRegion,\r\n cascadeCamera,\r\n shadowMapRenderCamera,\r\n snapMatrix,\r\n border\r\n );\r\n this.createLightCameraDirectional(shadowRegion, cascadeCamera, shadowMapCullCamera, null, border);\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[split]\r\n );\r\n shadowMapParams.depthBiasScales[split] =\r\n shadowMapParams.depthBiasValues[0].x !== 0\r\n ? shadowMapParams.depthBiasValues[split].x / shadowMapParams.depthBiasValues[0].x\r\n : 1;\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n let scissor: Nullable<number[]> = null;\r\n if (\r\n fb.getColorAttachments()[0]?.isTexture2DArray() ||\r\n fb.getDepthAttachment()?.isTexture2DArray()\r\n ) {\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n );\r\n fb.setColorAttachmentLayer(0, split);\r\n fb.setDepthAttachmentLayer(split);\r\n } else {\r\n const numRows = this._config.numCascades > 2 ? 2 : 1;\r\n const numCols = this._config.numCascades > 1 ? 2 : 1;\r\n const adjMatrix = new Matrix4x4();\r\n const col = split % 2;\r\n const row = split >> 1;\r\n adjMatrix.setRowXYZW(0, 1.5 - 0.5 * numCols, 0, 0, 0);\r\n adjMatrix.setRowXYZW(1, 0, 1.5 - 0.5 * numRows, 0, 0);\r\n adjMatrix.setRowXYZW(2, 0, 0, 1, 0);\r\n adjMatrix.setRowXYZW(3, col - 0.5 * numCols + 0.5, row - 0.5 * numRows + 0.5, 0, 1);\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(\r\n adjMatrix,\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n )\r\n );\r\n if (device.type === 'webgpu') {\r\n scissor = [\r\n col * this._config.shadowMapSize,\r\n (numRows - 1 - row) * this._config.shadowMapSize,\r\n this._config.shadowMapSize,\r\n this._config.shadowMapSize\r\n ];\r\n } else {\r\n scissor = [\r\n col * this._config.shadowMapSize,\r\n row * this._config.shadowMapSize,\r\n this._config.shadowMapSize,\r\n this._config.shadowMapSize\r\n ];\r\n }\r\n }\r\n device.setFramebuffer(fb);\r\n device.setScissor(scissor);\r\n renderPass.render(ctx, shadowMapRenderCamera, shadowMapCullCamera);\r\n shadowMapParams.shadowMatrices.set(\r\n Matrix4x4.transpose(shadowMapRenderCamera.viewProjectionMatrix),\r\n split * 16\r\n );\r\n shadowMapParams.cascadeDistances[split] = distances[split + 1];\r\n }\r\n ShadowMapper.releaseCamera(cascadeCamera);\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n ShadowMapper.releaseCamera(shadowMapCullCamera);\r\n } else {\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene)!;\r\n const snapMatrix = ShadowMapper._snapMatrix;\r\n shadowMapRenderCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;\r\n if (this._light.isDirectionLight()) {\r\n this.createLightCameraDirectional(\r\n shadowRegion,\r\n camera,\r\n shadowMapRenderCamera,\r\n snapMatrix,\r\n shadowMapParams.impl!.getShadowMapBorder(shadowMapParams)\r\n );\r\n } else if (this._light.isRectLight()) {\r\n this.createLightCameraRect(shadowMapRenderCamera);\r\n } else {\r\n this.createLightCameraSpot(shadowMapRenderCamera);\r\n }\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[0]\r\n );\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n device.setFramebuffer(fb);\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n );\r\n renderPass.render(ctx, shadowMapRenderCamera);\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.transpose(shadowMapRenderCamera.viewProjectionMatrix));\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n }\r\n }\r\n this.postRenderShadowMap(shadowMapParams);\r\n }\r\n /** @internal */\r\n private applyMode(mode: ShadowMode) {\r\n if (mode !== 'hard' && mode !== 'vsm' && mode !== 'esm' && mode !== 'pcf-pd' && mode !== 'pcf-opt') {\r\n console.error(`ShadowMapper.setShadowMode() failed: invalid mode: ${mode}`);\r\n return;\r\n }\r\n this._impl = null;\r\n if (mode === 'hard') {\r\n this._impl = new SSM();\r\n } else if (mode === 'vsm') {\r\n this._impl = new VSM(this._vsmBlurKernelSize, this._vsmBlurRadius, this._vsmDarkness);\r\n } else if (mode === 'esm') {\r\n this._impl = new ESM(this._esmBlurKernelSize, this._esmBlurRadius, this._esmDepthScale);\r\n } else if (mode === 'pcf-pd') {\r\n this._impl = new PCFPD(this._pdSampleCount, this._pdSampleRadius);\r\n } else if (mode === 'pcf-opt') {\r\n this._impl = new PCFOPT(this._pcfKernelSize);\r\n }\r\n }\r\n /** @internal */\r\n private asVSM() {\r\n return this._impl?.getType() === 'vsm' ? (this._impl as VSM) : null;\r\n }\r\n /** @internal */\r\n private asESM() {\r\n return this._impl?.getType() === 'esm' ? (this._impl as ESM) : null;\r\n }\r\n /** @internal */\r\n private asPCFPD() {\r\n return this._impl?.getType() === 'pcf-pd' ? (this._impl as PCFPD) : null;\r\n }\r\n /** @internal */\r\n private asPCFOPT() {\r\n return this._impl?.getType() === 'pcf-opt' ? (this._impl as PCFOPT) : null;\r\n }\r\n}\r\n"],"names":["tmpMatrix","Matrix4x4","tmpFrustum","Frustum","identity","ShadowMapper","_snapMatrix","_target","Vector3","_up","_frustumMin","_frustumMax","_frustumCenter","_lightCameras","WeakMap","_shadowMapParams","light","_light","_config","shadowMapSize","numCascades","splitLambda","depthBias","normalBias","nearClip","_resourceDirty","_shadowMode","_shadowDistance","_impl","_pdSampleCount","_pdSampleRadius","_pcfKernelSize","_vsmBlurKernelSize","_vsmBlurRadius","_vsmDarkness","_esmBlur","_esmBlurKernelSize","_esmBlurRadius","_esmDepthScale","_shadowRegion","_autoShadowRegion","applyMode","copyFrom","other","shadowRegion","AABB","shadowDistance","numShadowCascades","mode","pdSampleCount","pdSampleRadius","pcfKernelSize","vsmBlurKernelSize","vsmBlurRadius","vsmDarkness","esmBlur","esmBlurKernelSize","esmBlurRadius","esmDepthScale","num","Number","isInteger","console","error","region","updateDirectionalShadowRegion","force","isDirectionLight","scene","aabb","beginExtend","rootNode","iterate","child","isMesh","isClipmapTerrain","castShadow","bbox","getWorldBoundingVolume","toAABB","extend","minPoint","maxPoint","isValid","val","Math","max","applyQualityPreset","preset","getShaderHash","shadowMapParams","impl","name","lightType","shadowMap","target","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","format","filterable","min","pcfpd","asPCFPD","tapCount","setDepthScale","pcfopt","asPCFOPT","kernelSize","vsm","asVSM","blurSize","esm","asESM","blur","computeShadow","scope","shadowVertex","NdotL","computeShadowCSM","split","releaseTemporalResources","ctx","shadowMapInfo","k","keys","get","LIGHT_TYPE_NONE","depthClampEnabled","shaderHash","shadowMapFramebuffer","shadowMapSampler","implData","push","computeShadowBias","z","linear","pb","$builder","depthBiasParam","ShaderHelper","getDepthBiasValues","LIGHT_TYPE_DIRECTIONAL","dot","mul","xy","vec2","sub","nearFar","getShadowCameraParams","linearDepth","nonLinearDepthToLinearNormalized","biasScaleFactor","mix","w","computeShadowBiasCSM","splitFlags","vec4","float","equal","depthBiasScale","getDepthBiasScales","isTextureInvalid","texture","width","height","depth","createTexture","device","options","mipmapping","createTexture2D","createCubeTexture","createTexture2DArray","Error","fetchTemporalFramebuffer","autoRelease","colorFormat","depthFormat","useTextureArray","type","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","updateResources","getShadowMapColorFormat","getShadowMapDepthFormat","shadowMapWidth","shadowMapHeight","createLightCameraPoint","lightCamera","parent","position","setXYZ","rotation","scale","setPerspective","PI","range","set","positionAndRange","xyz","createLightCameraSpot","acos","cutoff","createLightCameraRect","rect","halfW","halfH","far","setOrtho","createLightCameraDirectional","sceneAABB","sceneCamera","cropMatrix","border","frustum","frustumViewSpace","getFarPlane","getProjectionMatrix","setNearFar","getNearPlane","initWithMatrix","expand","frustumMin","frustumMax","frustumCenter","up","MAX_VALUE","corners","forEach","p","inplaceMin","inplaceMax","radius","distance","center","thisToWorld","add","scaleBy","sceneRadius","diagonalLength","x","directionAndCutoff","y","lookAt","getWorldPosition","viewProjectionMatrix","transformPointP","tx","ty","rx","round","ry","translation","fetchShadowMapParams","length","pop","cameraParams","Vector4","cascadeDistances","depthBiasScales","depthBiasValues","shadowMatrices","Float32Array","fetchCameraForScene","cameras","camera","Camera","retainObject","clipMask","releaseCamera","remove","calcSplitDistances","nearPlane","farPlane","result","i","fIDM","fLog","pow","fUniform","calcDepthBiasParams","depthScale","sizeNear","getNearPlaneWidth","getNearPlaneHeight","sizeFar","getFarPlaneWidth","getFarPlaneHeight","scaleFactor","setXYZW","postRenderShadowMap","render","renderPass","Map","clearColor","getColorAttachments","isFloatFormat","getDepthScale","boundingBox","isPointLight","shadowMapRenderCamera","setFramebuffer","transpose","viewMatrix","face","CubeFace","PX","NX","PY","NY","PZ","NZ","lookAtCubeFace","setColorAttachmentCubeFace","setDepthAttachmentCubeFace","distances","cascadeCamera","shadowMapCullCamera","ClipLeft","ClipRight","ClipBottom","ClipTop","shaderCaps","supportFragmentDepth","getFOV","getAspect","snapMatrix","getShadowMapBorder","scissor","isTexture2DArray","getDepthAttachment","setProjectionMatrix","multiply","setColorAttachmentLayer","setDepthAttachmentLayer","numRows","numCols","adjMatrix","col","row","setRowXYZW","setScissor","isRectLight","SSM","VSM","ESM","PCFPD","PCFOPT","getType"],"mappings":"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"}
|
package/dist/shapes/box.js
CHANGED
|
@@ -318,7 +318,7 @@ import { Shape } from './shape.js';
|
|
|
318
318
|
pushFaceTangent(1, 0, 0);
|
|
319
319
|
// Right (+X): u -> -Z
|
|
320
320
|
pushFaceTangent(0, 0, -1);
|
|
321
|
-
// Back (-Z): u -> -X
|
|
321
|
+
// Back (-Z): u -> -X, opposite to the front face to keep a right-handed TBN basis
|
|
322
322
|
pushFaceTangent(-1, 0, 0);
|
|
323
323
|
// Left (-X): u -> +Z
|
|
324
324
|
pushFaceTangent(0, 0, 1);
|