@zephyr3d/editor 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/assets/{index-DzQzWsCG.js → index-DlnbO59X.js} +2 -2
  2. package/dist/assistant/zephyr-types-index.json +9 -10
  3. package/dist/index.html +1 -1
  4. package/dist/modules/zephyr3d_backend-webgpu.js +13 -12
  5. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  6. package/dist/modules/zephyr3d_base.js +152 -152
  7. package/dist/modules/zephyr3d_base.js.map +1 -1
  8. package/dist/modules/zephyr3d_device.js +15 -15
  9. package/dist/modules/zephyr3d_device.js.map +1 -1
  10. package/dist/modules/zephyr3d_loaders.js +6 -6
  11. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  12. package/dist/modules/zephyr3d_scene.js +1382 -1385
  13. package/dist/modules/zephyr3d_scene.js.map +1 -1
  14. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +7 -6
  15. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  16. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +6 -6
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  18. package/dist/vendor/zephyr3d/base/dist/vfs/common.js +152 -152
  19. package/dist/vendor/zephyr3d/base/dist/vfs/common.js.map +1 -1
  20. package/dist/vendor/zephyr3d/device/dist/device.js +15 -15
  21. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  22. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +6 -6
  23. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  24. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +191 -194
  25. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  26. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js +19 -19
  27. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js.map +1 -1
  28. package/dist/vendor/zephyr3d/scene/dist/app/engine.js +131 -131
  29. package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
  30. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +119 -119
  31. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
  32. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +62 -62
  33. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  34. package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js +13 -13
  35. package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js.map +1 -1
  36. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +201 -201
  37. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1 -1
  39. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  40. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  41. package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js +4 -4
  42. package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js.map +1 -1
  43. package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js +11 -11
  44. package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +284 -284
  46. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +9 -9
  48. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +5 -5
  50. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +7 -7
  52. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
  53. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -1
  54. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
  55. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js +45 -45
  56. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js.map +1 -1
  57. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +275 -275
  58. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  59. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  60. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
  61. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
  62. package/package.json +3 -3
  63. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
  64. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -6,16 +6,16 @@ import { PostEffectLayer } from '../posteffect/posteffect.js';
6
6
 
7
7
  const SURFACE_MRT_FLAGS = MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_DIFFUSE | MaterialVaryingFlags.SSS_STORE_NORMAL | MaterialVaryingFlags.SSS_STORE_TRANSMISSION;
8
8
  const ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS = MaterialVaryingFlags.SSR_STORE_ROUGHNESS | MaterialVaryingFlags.SSS_STORE_PROFILE | MaterialVaryingFlags.SSS_STORE_NORMAL;
9
- /**
10
- * Forward render pass
11
- * @internal
9
+ /**
10
+ * Forward render pass
11
+ * @internal
12
12
  */ class LightPass extends RenderPass {
13
13
  /** @internal */ _shadowMapHash;
14
14
  /** @internal */ _transmission;
15
15
  /** @internal */ _renderOpaque;
16
16
  /** @internal */ _renderTransparent;
17
- /**
18
- * Creates an instance of ForwardRenderPass
17
+ /**
18
+ * Creates an instance of ForwardRenderPass
19
19
  */ constructor(){
20
20
  super(RENDER_PASS_TYPE_LIGHT);
21
21
  this._shadowMapHash = null;
@@ -1 +1 @@
1
- {"version":3,"file":"lightpass.js","sources":["../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\nimport type { Nullable } from '@zephyr3d/base';\nimport { Vector4 } from '@zephyr3d/base';\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\nimport type { PunctualLight } from '../scene/light';\nimport type { DrawContext } from './drawable';\nimport { ShaderHelper } from '../material/shader/helper';\nimport { PostEffectLayer } from '../posteffect/posteffect';\nimport type { Camera } from '../camera';\n\nconst SURFACE_MRT_FLAGS =\n MaterialVaryingFlags.SSR_STORE_ROUGHNESS |\n MaterialVaryingFlags.SSS_STORE_PROFILE |\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\n MaterialVaryingFlags.SSS_STORE_NORMAL |\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\nconst ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS =\n MaterialVaryingFlags.SSR_STORE_ROUGHNESS |\n MaterialVaryingFlags.SSS_STORE_PROFILE |\n MaterialVaryingFlags.SSS_STORE_NORMAL;\n\n/**\n * Forward render pass\n * @internal\n */\nexport class LightPass extends RenderPass {\n /** @internal */\n protected _shadowMapHash: Nullable<string>;\n /** @internal */\n protected _transmission: boolean;\n /** @internal */\n protected _renderOpaque: boolean;\n /** @internal */\n protected _renderTransparent: boolean;\n /**\n * Creates an instance of ForwardRenderPass\n */\n constructor() {\n super(RENDER_PASS_TYPE_LIGHT);\n this._shadowMapHash = null;\n this._transmission = false;\n this._renderOpaque = true;\n this._renderTransparent = true;\n this._clearColor = Vector4.zero();\n }\n /** @internal */\n get transmission() {\n return this._transmission;\n }\n set transmission(val) {\n this._transmission = val;\n }\n /** @internal */\n get renderOpaque() {\n return this._renderOpaque;\n }\n set renderOpaque(val: boolean) {\n this._renderOpaque = !!val;\n }\n /** @internal */\n get renderTransparent() {\n return this._renderTransparent;\n }\n set renderTransparent(val: boolean) {\n this._renderTransparent = !!val;\n }\n /** @internal */\n protected getAdditiveLightPassColorAttachments(ctx: DrawContext, materialFlags: number) {\n const framebuffer = ctx.device.getFramebuffer();\n if (!framebuffer) {\n return null;\n }\n const attachments: any[] = [framebuffer.getColorAttachments()[0]];\n if (materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\n attachments.push(ctx.SSSDiffuseTexture!);\n }\n if (materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\n attachments.push(ctx.SSSTransmissionTexture!);\n }\n return attachments.length === 1 ? attachments[0] : attachments;\n }\n /** @internal */\n protected selectTransparentOITShadowLight(ctx: DrawContext, renderQueue: RenderQueue) {\n const shadowMapInfo = ctx.shadowMapInfo;\n if (!shadowMapInfo || shadowMapInfo.size === 0) {\n return null;\n }\n if (renderQueue.primaryDirectionalLight && shadowMapInfo.has(renderQueue.primaryDirectionalLight)) {\n return renderQueue.primaryDirectionalLight;\n }\n if (renderQueue.primaryTransmissionLight && shadowMapInfo.has(renderQueue.primaryTransmissionLight)) {\n return renderQueue.primaryTransmissionLight;\n }\n for (const light of renderQueue.shadowedLights) {\n if (shadowMapInfo.has(light)) {\n return light;\n }\n }\n return shadowMapInfo.keys().next().value ?? null;\n }\n /** @internal */\n protected _getGlobalBindGroupHash(ctx: DrawContext, camera: Camera) {\n return `${this._shadowMapHash}:${ctx.currentShadowLight?.runtimeId ?? 0}:${\n ctx.lightBlending ? 1 : 0\n }:${camera.oit?.calculateHash() ?? ''}:${ctx.env!.getHash(\n ctx\n )}:${ctx.materialFlags}:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${\n ctx.HiZTexture?.uid ?? 0\n }`;\n }\n /** @internal */\n protected renderLightPass(\n ctx: DrawContext,\n camera: Camera,\n itemList: RenderItemListBundle,\n lights: PunctualLight[],\n flags: any\n ) {\n const baseLightPass = !ctx.lightBlending;\n ctx.drawEnvLight =\n baseLightPass &&\n ctx.env!.light.type !== 'none' &&\n (ctx.env!.light.envLight.hasRadiance() || ctx.env!.light.envLight.hasIrradiance());\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\n if (!flags.cameraSet[ctx.renderPassHash]) {\n ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, !!ctx.device.getFramebuffer());\n flags.cameraSet[ctx.renderPassHash] = 1;\n }\n if (ctx.currentShadowLight) {\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\n } else {\n if (!flags.lightSet[ctx.renderPassHash]) {\n ShaderHelper.setLightUniforms(\n bindGroup,\n ctx,\n ctx.clusteredLight!.clusterParam,\n ctx.clusteredLight!.countParam,\n ctx.clusteredLight!.lightBuffer!,\n ctx.clusteredLight!.lightIndexTexture!\n );\n flags.lightSet[ctx.renderPassHash] = 1;\n }\n }\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\n ShaderHelper.setFogUniforms(\n bindGroup,\n ctx.env!.sky.skyType === 'scatter' ? 1 : 0,\n ctx.env!.sky.mappedFogType,\n baseLightPass ? 0 : 1,\n ctx.env!.sky.atmosphereParams,\n ctx.env!.sky.heightFogParams,\n ctx.env!.sky.getAerialPerspectiveLUT(ctx),\n ctx.env!.sky.getSkyDistantLightLUT(ctx)\n );\n flags.fogSet[ctx.renderPassHash] = 1;\n }\n ctx.device.setBindGroup(0, bindGroup);\n const reverseWinding = camera.worldMatrixDet < 0;\n for (const lit of itemList.lit) {\n this.drawItemList(lit, ctx, reverseWinding);\n }\n if (!ctx.lightBlending) {\n for (const unlit of itemList.unlit) {\n this.drawItemList(unlit, ctx, reverseWinding);\n }\n }\n }\n /** @internal */\n protected renderItems(ctx: DrawContext, camera: Camera, renderQueue: RenderQueue) {\n ctx.renderPassHash = null;\n ctx.env = ctx.scene.env;\n ctx.drawEnvLight = false;\n ctx.flip = this.isAutoFlip(ctx);\n const surfaceMRT = ctx.materialFlags & SURFACE_MRT_FLAGS;\n const additiveOpaqueMaterialFlags = ctx.materialFlags & ~ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS;\n const additiveTransparentMaterialFlags = ctx.materialFlags & ~SURFACE_MRT_FLAGS;\n const tmpFramebuffer = surfaceMRT\n ? ctx.device.pool.fetchTemporalFramebuffer(\n false,\n ctx.device.getDrawingBufferWidth(),\n ctx.device.getDrawingBufferHeight(),\n this.getAdditiveLightPassColorAttachments(ctx, additiveOpaqueMaterialFlags)!,\n ctx.device.getFramebuffer()!.getDepthAttachment()\n )\n : null;\n const needsTransparentSingleColorFramebuffer =\n !!tmpFramebuffer && tmpFramebuffer.getColorAttachments().length > 1;\n const transparentTmpFramebuffer = needsTransparentSingleColorFramebuffer\n ? ctx.device.pool.fetchTemporalFramebuffer(\n false,\n ctx.device.getDrawingBufferWidth(),\n ctx.device.getDrawingBufferHeight(),\n this.getAdditiveLightPassColorAttachments(ctx, additiveTransparentMaterialFlags)!,\n ctx.device.getFramebuffer()!.getDepthAttachment()\n )\n : tmpFramebuffer;\n const oit =\n renderQueue.drawTransparent && camera.oit && camera.oit.supportDevice(ctx.device.type)\n ? camera.oit\n : null;\n if (!oit && renderQueue.drawTransparent) {\n renderQueue.sortTransparentItems(camera.getWorldPosition());\n }\n const flags: any = {\n lightSet: {},\n cameraSet: {},\n fogSet: {}\n };\n const items = renderQueue.itemList;\n const lists = this._transmission\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\n : [items?.opaque, items?.transparent];\n const transparentPass = lists.length - 1;\n for (let i = 0; i < lists.length; i++) {\n const isOpaquePass = i === 0;\n if ((isOpaquePass && !this._renderOpaque) || (!isOpaquePass && !this._renderTransparent)) {\n continue;\n }\n if (lists[i]) {\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\n ctx.oit = i === 0 || !items ? null : oit;\n const isolateTransparentABufferLightPasses =\n !!ctx.oit && ctx.queue === QUEUE_TRANSPARENT && ctx.oit.getType() === 'ab';\n if ((ctx.queue === QUEUE_TRANSPARENT || this._transmission) && ctx.scene.env.sky.fogPresents) {\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\n }\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\n for (let p = 0; p < numOitPasses; p++) {\n if (ctx.oit && !isolateTransparentABufferLightPasses) {\n if (!ctx.oit.beginPass(ctx, p)) {\n continue;\n }\n }\n const runLightPass = (lights: PunctualLight[]) => {\n if (ctx.oit && isolateTransparentABufferLightPasses) {\n if (!ctx.oit.beginPass(ctx, p)) {\n return;\n }\n this.renderLightPass(ctx, camera, lists[i]!, lights, flags);\n ctx.oit.endPass(ctx, p);\n } else {\n this.renderLightPass(ctx, camera, lists[i]!, lights, flags);\n }\n };\n const runAdditiveLightPass = (lights: PunctualLight[]) => {\n const passFramebuffer =\n ctx.queue === QUEUE_TRANSPARENT ? transparentTmpFramebuffer : tmpFramebuffer;\n if (ctx.lightBlending && passFramebuffer && !ctx.oit) {\n const savedMaterialFlags = ctx.materialFlags;\n ctx.materialFlags =\n ctx.queue === QUEUE_TRANSPARENT\n ? savedMaterialFlags & ~SURFACE_MRT_FLAGS\n : savedMaterialFlags & ~ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS;\n ctx.device.pushDeviceStates();\n ctx.device.setFramebuffer(passFramebuffer);\n try {\n runLightPass(lights);\n } finally {\n ctx.materialFlags = savedMaterialFlags;\n ctx.device.popDeviceStates();\n }\n } else {\n runLightPass(lights);\n }\n };\n let lightIndex = 0;\n if (ctx.shadowMapInfo) {\n for (const k of ctx.shadowMapInfo.keys()) {\n ctx.currentShadowLight = k;\n ctx.lightBlending = lightIndex > 0;\n this._shadowMapHash = ctx.shadowMapInfo.get(k)!.shaderHash;\n runAdditiveLightPass([k]);\n lightIndex++;\n }\n }\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\n ctx.currentShadowLight = null;\n ctx.lightBlending = lightIndex > 0;\n this._shadowMapHash = '';\n runAdditiveLightPass(renderQueue.unshadowedLights);\n }\n if (ctx.oit && !isolateTransparentABufferLightPasses) {\n ctx.oit.endPass(ctx, p);\n }\n }\n if (ctx.oit) {\n ctx.oit.end(ctx);\n }\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\n }\n if (i === 0 && !ctx.sceneColorTexture) {\n if (tmpFramebuffer) {\n ctx.device.pushDeviceStates();\n ctx.device.setFramebuffer(tmpFramebuffer);\n }\n ctx.env.sky.renderSky(ctx);\n if (ctx.env.sky.fogPresents) {\n ctx.env.sky.renderFog(camera);\n }\n if (tmpFramebuffer) {\n ctx.device.popDeviceStates();\n }\n }\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\n if (i === 0 || i === transparentPass) {\n ctx.compositor?.drawPostEffects(\n ctx,\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\n ctx.linearDepthTexture!\n );\n if (\n i === 0 &&\n surfaceMRT &&\n (ctx.device.getFramebuffer()?.getColorAttachments().length ?? 0) <= 1\n ) {\n ctx.materialFlags &= ~surfaceMRT;\n }\n }\n }\n }\n if (tmpFramebuffer) {\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\n }\n if (transparentTmpFramebuffer && transparentTmpFramebuffer !== tmpFramebuffer) {\n ctx.device.pool.releaseFrameBuffer(transparentTmpFramebuffer);\n }\n ctx.oit = null;\n }\n}\n"],"names":["SURFACE_MRT_FLAGS","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","SSS_STORE_PROFILE","SSS_STORE_DIFFUSE","SSS_STORE_NORMAL","SSS_STORE_TRANSMISSION","ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS","LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_transmission","_renderOpaque","_renderTransparent","_clearColor","Vector4","zero","transmission","val","renderOpaque","renderTransparent","getAdditiveLightPassColorAttachments","ctx","materialFlags","framebuffer","device","getFramebuffer","attachments","getColorAttachments","push","SSSDiffuseTexture","SSSTransmissionTexture","length","selectTransparentOITShadowLight","renderQueue","shadowMapInfo","size","primaryDirectionalLight","has","primaryTransmissionLight","light","shadowedLights","keys","next","value","_getGlobalBindGroupHash","camera","currentShadowLight","runtimeId","lightBlending","oit","calculateHash","env","getHash","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","drawEnvLight","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","worldMatrixDet","lit","drawItemList","unlit","scene","flip","isAutoFlip","surfaceMRT","additiveOpaqueMaterialFlags","additiveTransparentMaterialFlags","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getDepthAttachment","needsTransparentSingleColorFramebuffer","transparentTmpFramebuffer","drawTransparent","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","i","isOpaquePass","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","isolateTransparentABufferLightPasses","getType","fogPresents","numOitPasses","begin","p","beginPass","runLightPass","endPass","runAdditiveLightPass","passFramebuffer","savedMaterialFlags","pushDeviceStates","setFramebuffer","popDeviceStates","lightIndex","k","get","shaderHash","unshadowedLights","end","renderSky","renderFog","needSceneColor","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":"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"}
1
+ {"version":3,"file":"lightpass.js","sources":["../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { PostEffectLayer } from '../posteffect/posteffect';\r\nimport type { Camera } from '../camera';\r\n\r\nconst SURFACE_MRT_FLAGS =\r\n MaterialVaryingFlags.SSR_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SSS_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\r\nconst ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS =\r\n MaterialVaryingFlags.SSR_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SSS_STORE_NORMAL;\r\n\r\n/**\r\n * Forward render pass\r\n * @internal\r\n */\r\nexport class LightPass extends RenderPass {\r\n /** @internal */\r\n protected _shadowMapHash: Nullable<string>;\r\n /** @internal */\r\n protected _transmission: boolean;\r\n /** @internal */\r\n protected _renderOpaque: boolean;\r\n /** @internal */\r\n protected _renderTransparent: boolean;\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_LIGHT);\r\n this._shadowMapHash = null;\r\n this._transmission = false;\r\n this._renderOpaque = true;\r\n this._renderTransparent = true;\r\n this._clearColor = Vector4.zero();\r\n }\r\n /** @internal */\r\n get transmission() {\r\n return this._transmission;\r\n }\r\n set transmission(val) {\r\n this._transmission = val;\r\n }\r\n /** @internal */\r\n get renderOpaque() {\r\n return this._renderOpaque;\r\n }\r\n set renderOpaque(val: boolean) {\r\n this._renderOpaque = !!val;\r\n }\r\n /** @internal */\r\n get renderTransparent() {\r\n return this._renderTransparent;\r\n }\r\n set renderTransparent(val: boolean) {\r\n this._renderTransparent = !!val;\r\n }\r\n /** @internal */\r\n protected getAdditiveLightPassColorAttachments(ctx: DrawContext, materialFlags: number) {\r\n const framebuffer = ctx.device.getFramebuffer();\r\n if (!framebuffer) {\r\n return null;\r\n }\r\n const attachments: any[] = [framebuffer.getColorAttachments()[0]];\r\n if (materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n attachments.push(ctx.SSSDiffuseTexture!);\r\n }\r\n if (materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n attachments.push(ctx.SSSTransmissionTexture!);\r\n }\r\n return attachments.length === 1 ? attachments[0] : attachments;\r\n }\r\n /** @internal */\r\n protected selectTransparentOITShadowLight(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const shadowMapInfo = ctx.shadowMapInfo;\r\n if (!shadowMapInfo || shadowMapInfo.size === 0) {\r\n return null;\r\n }\r\n if (renderQueue.primaryDirectionalLight && shadowMapInfo.has(renderQueue.primaryDirectionalLight)) {\r\n return renderQueue.primaryDirectionalLight;\r\n }\r\n if (renderQueue.primaryTransmissionLight && shadowMapInfo.has(renderQueue.primaryTransmissionLight)) {\r\n return renderQueue.primaryTransmissionLight;\r\n }\r\n for (const light of renderQueue.shadowedLights) {\r\n if (shadowMapInfo.has(light)) {\r\n return light;\r\n }\r\n }\r\n return shadowMapInfo.keys().next().value ?? null;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext, camera: Camera) {\r\n return `${this._shadowMapHash}:${ctx.currentShadowLight?.runtimeId ?? 0}:${\r\n ctx.lightBlending ? 1 : 0\r\n }:${camera.oit?.calculateHash() ?? ''}:${ctx.env!.getHash(\r\n ctx\r\n )}:${ctx.materialFlags}:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${\r\n ctx.HiZTexture?.uid ?? 0\r\n }`;\r\n }\r\n /** @internal */\r\n protected renderLightPass(\r\n ctx: DrawContext,\r\n camera: Camera,\r\n itemList: RenderItemListBundle,\r\n lights: PunctualLight[],\r\n flags: any\r\n ) {\r\n const baseLightPass = !ctx.lightBlending;\r\n ctx.drawEnvLight =\r\n baseLightPass &&\r\n ctx.env!.light.type !== 'none' &&\r\n (ctx.env!.light.envLight.hasRadiance() || ctx.env!.light.envLight.hasIrradiance());\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n if (!flags.cameraSet[ctx.renderPassHash]) {\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, !!ctx.device.getFramebuffer());\r\n flags.cameraSet[ctx.renderPassHash] = 1;\r\n }\r\n if (ctx.currentShadowLight) {\r\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\r\n } else {\r\n if (!flags.lightSet[ctx.renderPassHash]) {\r\n ShaderHelper.setLightUniforms(\r\n bindGroup,\r\n ctx,\r\n ctx.clusteredLight!.clusterParam,\r\n ctx.clusteredLight!.countParam,\r\n ctx.clusteredLight!.lightBuffer!,\r\n ctx.clusteredLight!.lightIndexTexture!\r\n );\r\n flags.lightSet[ctx.renderPassHash] = 1;\r\n }\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\r\n ShaderHelper.setFogUniforms(\r\n bindGroup,\r\n ctx.env!.sky.skyType === 'scatter' ? 1 : 0,\r\n ctx.env!.sky.mappedFogType,\r\n baseLightPass ? 0 : 1,\r\n ctx.env!.sky.atmosphereParams,\r\n ctx.env!.sky.heightFogParams,\r\n ctx.env!.sky.getAerialPerspectiveLUT(ctx),\r\n ctx.env!.sky.getSkyDistantLightLUT(ctx)\r\n );\r\n flags.fogSet[ctx.renderPassHash] = 1;\r\n }\r\n ctx.device.setBindGroup(0, bindGroup);\r\n const reverseWinding = camera.worldMatrixDet < 0;\r\n for (const lit of itemList.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n if (!ctx.lightBlending) {\r\n for (const unlit of itemList.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, camera: Camera, renderQueue: RenderQueue) {\r\n ctx.renderPassHash = null;\r\n ctx.env = ctx.scene.env;\r\n ctx.drawEnvLight = false;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n const surfaceMRT = ctx.materialFlags & SURFACE_MRT_FLAGS;\r\n const additiveOpaqueMaterialFlags = ctx.materialFlags & ~ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS;\r\n const additiveTransparentMaterialFlags = ctx.materialFlags & ~SURFACE_MRT_FLAGS;\r\n const tmpFramebuffer = surfaceMRT\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.device.getDrawingBufferWidth(),\r\n ctx.device.getDrawingBufferHeight(),\r\n this.getAdditiveLightPassColorAttachments(ctx, additiveOpaqueMaterialFlags)!,\r\n ctx.device.getFramebuffer()!.getDepthAttachment()\r\n )\r\n : null;\r\n const needsTransparentSingleColorFramebuffer =\r\n !!tmpFramebuffer && tmpFramebuffer.getColorAttachments().length > 1;\r\n const transparentTmpFramebuffer = needsTransparentSingleColorFramebuffer\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.device.getDrawingBufferWidth(),\r\n ctx.device.getDrawingBufferHeight(),\r\n this.getAdditiveLightPassColorAttachments(ctx, additiveTransparentMaterialFlags)!,\r\n ctx.device.getFramebuffer()!.getDepthAttachment()\r\n )\r\n : tmpFramebuffer;\r\n const oit =\r\n renderQueue.drawTransparent && camera.oit && camera.oit.supportDevice(ctx.device.type)\r\n ? camera.oit\r\n : null;\r\n if (!oit && renderQueue.drawTransparent) {\r\n renderQueue.sortTransparentItems(camera.getWorldPosition());\r\n }\r\n const flags: any = {\r\n lightSet: {},\r\n cameraSet: {},\r\n fogSet: {}\r\n };\r\n const items = renderQueue.itemList;\r\n const lists = this._transmission\r\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\r\n : [items?.opaque, items?.transparent];\r\n const transparentPass = lists.length - 1;\r\n for (let i = 0; i < lists.length; i++) {\r\n const isOpaquePass = i === 0;\r\n if ((isOpaquePass && !this._renderOpaque) || (!isOpaquePass && !this._renderTransparent)) {\r\n continue;\r\n }\r\n if (lists[i]) {\r\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\r\n ctx.oit = i === 0 || !items ? null : oit;\r\n const isolateTransparentABufferLightPasses =\r\n !!ctx.oit && ctx.queue === QUEUE_TRANSPARENT && ctx.oit.getType() === 'ab';\r\n if ((ctx.queue === QUEUE_TRANSPARENT || this._transmission) && ctx.scene.env.sky.fogPresents) {\r\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\r\n for (let p = 0; p < numOitPasses; p++) {\r\n if (ctx.oit && !isolateTransparentABufferLightPasses) {\r\n if (!ctx.oit.beginPass(ctx, p)) {\r\n continue;\r\n }\r\n }\r\n const runLightPass = (lights: PunctualLight[]) => {\r\n if (ctx.oit && isolateTransparentABufferLightPasses) {\r\n if (!ctx.oit.beginPass(ctx, p)) {\r\n return;\r\n }\r\n this.renderLightPass(ctx, camera, lists[i]!, lights, flags);\r\n ctx.oit.endPass(ctx, p);\r\n } else {\r\n this.renderLightPass(ctx, camera, lists[i]!, lights, flags);\r\n }\r\n };\r\n const runAdditiveLightPass = (lights: PunctualLight[]) => {\r\n const passFramebuffer =\r\n ctx.queue === QUEUE_TRANSPARENT ? transparentTmpFramebuffer : tmpFramebuffer;\r\n if (ctx.lightBlending && passFramebuffer && !ctx.oit) {\r\n const savedMaterialFlags = ctx.materialFlags;\r\n ctx.materialFlags =\r\n ctx.queue === QUEUE_TRANSPARENT\r\n ? savedMaterialFlags & ~SURFACE_MRT_FLAGS\r\n : savedMaterialFlags & ~ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS;\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(passFramebuffer);\r\n try {\r\n runLightPass(lights);\r\n } finally {\r\n ctx.materialFlags = savedMaterialFlags;\r\n ctx.device.popDeviceStates();\r\n }\r\n } else {\r\n runLightPass(lights);\r\n }\r\n };\r\n let lightIndex = 0;\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n ctx.currentShadowLight = k;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = ctx.shadowMapInfo.get(k)!.shaderHash;\r\n runAdditiveLightPass([k]);\r\n lightIndex++;\r\n }\r\n }\r\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\r\n ctx.currentShadowLight = null;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = '';\r\n runAdditiveLightPass(renderQueue.unshadowedLights);\r\n }\r\n if (ctx.oit && !isolateTransparentABufferLightPasses) {\r\n ctx.oit.endPass(ctx, p);\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.end(ctx);\r\n }\r\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n if (i === 0 && !ctx.sceneColorTexture) {\r\n if (tmpFramebuffer) {\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n ctx.env.sky.renderSky(ctx);\r\n if (ctx.env.sky.fogPresents) {\r\n ctx.env.sky.renderFog(camera);\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\r\n if (i === 0 || i === transparentPass) {\r\n ctx.compositor?.drawPostEffects(\r\n ctx,\r\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\r\n ctx.linearDepthTexture!\r\n );\r\n if (\r\n i === 0 &&\r\n surfaceMRT &&\r\n (ctx.device.getFramebuffer()?.getColorAttachments().length ?? 0) <= 1\r\n ) {\r\n ctx.materialFlags &= ~surfaceMRT;\r\n }\r\n }\r\n }\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n if (transparentTmpFramebuffer && transparentTmpFramebuffer !== tmpFramebuffer) {\r\n ctx.device.pool.releaseFrameBuffer(transparentTmpFramebuffer);\r\n }\r\n ctx.oit = null;\r\n }\r\n}\r\n"],"names":["SURFACE_MRT_FLAGS","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","SSS_STORE_PROFILE","SSS_STORE_DIFFUSE","SSS_STORE_NORMAL","SSS_STORE_TRANSMISSION","ADDITIVE_LIGHT_PASS_OMIT_MRT_FLAGS","LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_transmission","_renderOpaque","_renderTransparent","_clearColor","Vector4","zero","transmission","val","renderOpaque","renderTransparent","getAdditiveLightPassColorAttachments","ctx","materialFlags","framebuffer","device","getFramebuffer","attachments","getColorAttachments","push","SSSDiffuseTexture","SSSTransmissionTexture","length","selectTransparentOITShadowLight","renderQueue","shadowMapInfo","size","primaryDirectionalLight","has","primaryTransmissionLight","light","shadowedLights","keys","next","value","_getGlobalBindGroupHash","camera","currentShadowLight","runtimeId","lightBlending","oit","calculateHash","env","getHash","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","drawEnvLight","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","worldMatrixDet","lit","drawItemList","unlit","scene","flip","isAutoFlip","surfaceMRT","additiveOpaqueMaterialFlags","additiveTransparentMaterialFlags","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getDepthAttachment","needsTransparentSingleColorFramebuffer","transparentTmpFramebuffer","drawTransparent","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","i","isOpaquePass","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","isolateTransparentABufferLightPasses","getType","fogPresents","numOitPasses","begin","p","beginPass","runLightPass","endPass","runAdditiveLightPass","passFramebuffer","savedMaterialFlags","pushDeviceStates","setFramebuffer","popDeviceStates","lightIndex","k","get","shaderHash","unshadowedLights","end","renderSky","renderFog","needSceneColor","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":"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"}
@@ -7,14 +7,14 @@ import { GlobalBindGroupAllocator } from './globalbindgroup_allocator.js';
7
7
  import { fetchSampler } from '../utility/misc.js';
8
8
  import { executeForwardPlusGraph } from './rendergraph/forward_plus_builder.js';
9
9
 
10
- /**
11
- * Forward render scheme
12
- * @internal
10
+ /**
11
+ * Forward render scheme
12
+ * @internal
13
13
  */ class SceneRenderer {
14
- /**
15
- * Renders a scene by given camera
16
- * @param scene - The scene to render
17
- * @param camera - The camera that will be used to render the scene
14
+ /**
15
+ * Renders a scene by given camera
16
+ * @param scene - The scene to render
17
+ * @param camera - The camera that will be used to render the scene
18
18
  */ static renderScene(scene, camera) {
19
19
  const device = getDevice();
20
20
  const halfFloatColorBuffer = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sources":["../../src/render/renderer.ts"],"sourcesContent":["import type { TextureFormat } from '@zephyr3d/device';\nimport { CopyBlitter } from '../blitter';\nimport type { DrawContext } from './drawable';\nimport type { Scene } from '../scene';\nimport type { Camera } from '../camera';\nimport { GlobalBindGroupAllocator } from './globalbindgroup_allocator';\nimport { fetchSampler } from '../utility/misc';\nimport { getDevice } from '../app/api';\nimport { executeForwardPlusGraph } from './rendergraph/forward_plus_builder';\n\n/**\n * Forward render scheme\n * @internal\n */\nexport class SceneRenderer {\n /**\n * Renders a scene by given camera\n * @param scene - The scene to render\n * @param camera - The camera that will be used to render the scene\n */\n static renderScene(scene: Scene, camera: Camera): void {\n const device = getDevice();\n const halfFloatColorBuffer = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\n const colorFormat = camera.HDR && halfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\n const depthFormat = device.getDeviceCaps().framebufferCaps.supportDepth32floatStencil8\n ? 'd32fs8'\n : 'd24s8';\n const globalBindGroupAllocator = GlobalBindGroupAllocator.get();\n scene.frameUpdate();\n scene.frameUpdatePerCamera(camera);\n if (camera && !device.isContextLost()) {\n const defaultViewport = (!camera.TAA || device.type === 'webgl') && !camera.viewport && !camera.scissor;\n const renderX = camera.viewport ? device.screenXToDevice(camera.viewport[0]) : 0;\n const renderY = camera.viewport ? device.screenYToDevice(camera.viewport[1]) : 0;\n const renderWidth = camera.viewport\n ? device.screenXToDevice(camera.viewport[2])\n : device.getDrawingBufferWidth();\n const renderHeight = camera.viewport\n ? device.screenYToDevice(camera.viewport[3])\n : device.getDrawingBufferHeight();\n if (renderWidth > 0 && renderHeight > 0) {\n const tmpFramebuffer = defaultViewport\n ? null\n : device.pool.fetchTemporalFramebuffer(false, renderWidth, renderHeight, colorFormat, depthFormat);\n const originFramebuffer = device.getFramebuffer();\n if (tmpFramebuffer) {\n device.pushDeviceStates();\n device.setFramebuffer(tmpFramebuffer);\n }\n device.clearFrameBuffer(camera.clearColor, camera.clearDepth, camera.clearStencil);\n const SSR = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\n const SSS = camera.SSS;\n const glossySurfaceFormat: TextureFormat = halfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\n const ctx: DrawContext = {\n device,\n scene,\n renderWidth,\n renderHeight,\n oit: null,\n motionVectors:\n device.type !== 'webgl' && (camera.TAA || camera.motionBlur || (SSR && camera.ssrTemporal)),\n HiZ: camera.HiZ && device.type !== 'webgl',\n HiZTexture: null,\n globalBindGroupAllocator,\n camera,\n compositor: camera.compositor,\n queue: 0,\n lightBlending: false,\n renderPass: null,\n renderPassHash: null,\n flip: false,\n depthFormat,\n colorFormat,\n drawEnvLight: false,\n env: null,\n sunLight: null,\n primaryDirectionalLight: null,\n primaryTransmissionLight: null,\n materialFlags: 0,\n SSR,\n SSS,\n SSRCalcThickness: SSR && camera.ssrCalcThickness,\n SSRRoughnessTexture: SSR\n ? device.pool.fetchTemporalTexture2D(true, glossySurfaceFormat, renderWidth, renderHeight)\n : null,\n SSRNormalTexture: SSR\n ? device.pool.fetchTemporalTexture2D(true, glossySurfaceFormat, renderWidth, renderHeight)\n : null,\n SSSProfileTexture: null,\n SSSParamTexture: null,\n SSSDiffuseTexture: null,\n SSSTransmissionTexture: null,\n ssrSDFBoxBuffer: null,\n ssrSDFBoxCount: 0,\n finalFramebuffer: device.getFramebuffer(),\n intermediateFramebuffer: null\n };\n this._renderScene(ctx);\n if (tmpFramebuffer) {\n device.popDeviceStates();\n const oversizedViewport =\n renderX < 0 ||\n renderY < 0 ||\n renderX + renderWidth > device.getDrawingBufferWidth() ||\n renderY + renderHeight > device.getDrawingBufferHeight();\n const blitter = new CopyBlitter();\n if (oversizedViewport) {\n blitter.destRect = [renderX, renderY, renderWidth, renderHeight];\n } else {\n blitter.viewport = camera.viewport ? camera.viewport.slice() : null;\n }\n blitter.scissor = camera.scissor ? camera.scissor.slice() : null;\n blitter.srgbOut = !originFramebuffer;\n blitter.blit(\n tmpFramebuffer.getColorAttachments()[0],\n originFramebuffer ?? null,\n fetchSampler('clamp_nearest_nomip')\n );\n device.pool.releaseFrameBuffer(tmpFramebuffer);\n }\n } else {\n camera.getPickResultResolveFunc()?.(null);\n return;\n }\n }\n GlobalBindGroupAllocator.release(globalBindGroupAllocator);\n }\n\n /** @internal */\n protected static _renderScene(ctx: DrawContext): void {\n executeForwardPlusGraph(ctx);\n }\n}\n"],"names":["SceneRenderer","renderScene","scene","camera","device","getDevice","halfFloatColorBuffer","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","colorFormat","HDR","depthFormat","framebufferCaps","supportDepth32floatStencil8","globalBindGroupAllocator","GlobalBindGroupAllocator","get","frameUpdate","frameUpdatePerCamera","isContextLost","defaultViewport","TAA","type","viewport","scissor","renderX","screenXToDevice","renderY","screenYToDevice","renderWidth","getDrawingBufferWidth","renderHeight","getDrawingBufferHeight","tmpFramebuffer","pool","fetchTemporalFramebuffer","originFramebuffer","getFramebuffer","pushDeviceStates","setFramebuffer","clearFrameBuffer","clearColor","clearDepth","clearStencil","SSR","env","light","envLight","hasRadiance","SSS","glossySurfaceFormat","ctx","oit","motionVectors","motionBlur","ssrTemporal","HiZ","HiZTexture","compositor","queue","lightBlending","renderPass","renderPassHash","flip","drawEnvLight","sunLight","primaryDirectionalLight","primaryTransmissionLight","materialFlags","SSRCalcThickness","ssrCalcThickness","SSRRoughnessTexture","fetchTemporalTexture2D","SSRNormalTexture","SSSProfileTexture","SSSParamTexture","SSSDiffuseTexture","SSSTransmissionTexture","ssrSDFBoxBuffer","ssrSDFBoxCount","finalFramebuffer","intermediateFramebuffer","_renderScene","popDeviceStates","oversizedViewport","blitter","CopyBlitter","destRect","slice","srgbOut","blit","getColorAttachments","fetchSampler","releaseFrameBuffer","getPickResultResolveFunc","release","executeForwardPlusGraph"],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sources":["../../src/render/renderer.ts"],"sourcesContent":["import type { TextureFormat } from '@zephyr3d/device';\r\nimport { CopyBlitter } from '../blitter';\r\nimport type { DrawContext } from './drawable';\r\nimport type { Scene } from '../scene';\r\nimport type { Camera } from '../camera';\r\nimport { GlobalBindGroupAllocator } from './globalbindgroup_allocator';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\nimport { executeForwardPlusGraph } from './rendergraph/forward_plus_builder';\r\n\r\n/**\r\n * Forward render scheme\r\n * @internal\r\n */\r\nexport class SceneRenderer {\r\n /**\r\n * Renders a scene by given camera\r\n * @param scene - The scene to render\r\n * @param camera - The camera that will be used to render the scene\r\n */\r\n static renderScene(scene: Scene, camera: Camera): void {\r\n const device = getDevice();\r\n const halfFloatColorBuffer = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\r\n const colorFormat = camera.HDR && halfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\r\n const depthFormat = device.getDeviceCaps().framebufferCaps.supportDepth32floatStencil8\r\n ? 'd32fs8'\r\n : 'd24s8';\r\n const globalBindGroupAllocator = GlobalBindGroupAllocator.get();\r\n scene.frameUpdate();\r\n scene.frameUpdatePerCamera(camera);\r\n if (camera && !device.isContextLost()) {\r\n const defaultViewport = (!camera.TAA || device.type === 'webgl') && !camera.viewport && !camera.scissor;\r\n const renderX = camera.viewport ? device.screenXToDevice(camera.viewport[0]) : 0;\r\n const renderY = camera.viewport ? device.screenYToDevice(camera.viewport[1]) : 0;\r\n const renderWidth = camera.viewport\r\n ? device.screenXToDevice(camera.viewport[2])\r\n : device.getDrawingBufferWidth();\r\n const renderHeight = camera.viewport\r\n ? device.screenYToDevice(camera.viewport[3])\r\n : device.getDrawingBufferHeight();\r\n if (renderWidth > 0 && renderHeight > 0) {\r\n const tmpFramebuffer = defaultViewport\r\n ? null\r\n : device.pool.fetchTemporalFramebuffer(false, renderWidth, renderHeight, colorFormat, depthFormat);\r\n const originFramebuffer = device.getFramebuffer();\r\n if (tmpFramebuffer) {\r\n device.pushDeviceStates();\r\n device.setFramebuffer(tmpFramebuffer);\r\n }\r\n device.clearFrameBuffer(camera.clearColor, camera.clearDepth, camera.clearStencil);\r\n const SSR = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\r\n const SSS = camera.SSS;\r\n const glossySurfaceFormat: TextureFormat = halfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\r\n const ctx: DrawContext = {\r\n device,\r\n scene,\r\n renderWidth,\r\n renderHeight,\r\n oit: null,\r\n motionVectors:\r\n device.type !== 'webgl' && (camera.TAA || camera.motionBlur || (SSR && camera.ssrTemporal)),\r\n HiZ: camera.HiZ && device.type !== 'webgl',\r\n HiZTexture: null,\r\n globalBindGroupAllocator,\r\n camera,\r\n compositor: camera.compositor,\r\n queue: 0,\r\n lightBlending: false,\r\n renderPass: null,\r\n renderPassHash: null,\r\n flip: false,\r\n depthFormat,\r\n colorFormat,\r\n drawEnvLight: false,\r\n env: null,\r\n sunLight: null,\r\n primaryDirectionalLight: null,\r\n primaryTransmissionLight: null,\r\n materialFlags: 0,\r\n SSR,\r\n SSS,\r\n SSRCalcThickness: SSR && camera.ssrCalcThickness,\r\n SSRRoughnessTexture: SSR\r\n ? device.pool.fetchTemporalTexture2D(true, glossySurfaceFormat, renderWidth, renderHeight)\r\n : null,\r\n SSRNormalTexture: SSR\r\n ? device.pool.fetchTemporalTexture2D(true, glossySurfaceFormat, renderWidth, renderHeight)\r\n : null,\r\n SSSProfileTexture: null,\r\n SSSParamTexture: null,\r\n SSSDiffuseTexture: null,\r\n SSSTransmissionTexture: null,\r\n ssrSDFBoxBuffer: null,\r\n ssrSDFBoxCount: 0,\r\n finalFramebuffer: device.getFramebuffer(),\r\n intermediateFramebuffer: null\r\n };\r\n this._renderScene(ctx);\r\n if (tmpFramebuffer) {\r\n device.popDeviceStates();\r\n const oversizedViewport =\r\n renderX < 0 ||\r\n renderY < 0 ||\r\n renderX + renderWidth > device.getDrawingBufferWidth() ||\r\n renderY + renderHeight > device.getDrawingBufferHeight();\r\n const blitter = new CopyBlitter();\r\n if (oversizedViewport) {\r\n blitter.destRect = [renderX, renderY, renderWidth, renderHeight];\r\n } else {\r\n blitter.viewport = camera.viewport ? camera.viewport.slice() : null;\r\n }\r\n blitter.scissor = camera.scissor ? camera.scissor.slice() : null;\r\n blitter.srgbOut = !originFramebuffer;\r\n blitter.blit(\r\n tmpFramebuffer.getColorAttachments()[0],\r\n originFramebuffer ?? null,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n } else {\r\n camera.getPickResultResolveFunc()?.(null);\r\n return;\r\n }\r\n }\r\n GlobalBindGroupAllocator.release(globalBindGroupAllocator);\r\n }\r\n\r\n /** @internal */\r\n protected static _renderScene(ctx: DrawContext): void {\r\n executeForwardPlusGraph(ctx);\r\n }\r\n}\r\n"],"names":["SceneRenderer","renderScene","scene","camera","device","getDevice","halfFloatColorBuffer","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","colorFormat","HDR","depthFormat","framebufferCaps","supportDepth32floatStencil8","globalBindGroupAllocator","GlobalBindGroupAllocator","get","frameUpdate","frameUpdatePerCamera","isContextLost","defaultViewport","TAA","type","viewport","scissor","renderX","screenXToDevice","renderY","screenYToDevice","renderWidth","getDrawingBufferWidth","renderHeight","getDrawingBufferHeight","tmpFramebuffer","pool","fetchTemporalFramebuffer","originFramebuffer","getFramebuffer","pushDeviceStates","setFramebuffer","clearFrameBuffer","clearColor","clearDepth","clearStencil","SSR","env","light","envLight","hasRadiance","SSS","glossySurfaceFormat","ctx","oit","motionVectors","motionBlur","ssrTemporal","HiZ","HiZTexture","compositor","queue","lightBlending","renderPass","renderPassHash","flip","drawEnvLight","sunLight","primaryDirectionalLight","primaryTransmissionLight","materialFlags","SSRCalcThickness","ssrCalcThickness","SSRRoughnessTexture","fetchTemporalTexture2D","SSRNormalTexture","SSSProfileTexture","SSSParamTexture","SSSDiffuseTexture","SSSTransmissionTexture","ssrSDFBoxBuffer","ssrSDFBoxCount","finalFramebuffer","intermediateFramebuffer","_renderScene","popDeviceStates","oversizedViewport","blitter","CopyBlitter","destRect","slice","srgbOut","blit","getColorAttachments","fetchSampler","releaseFrameBuffer","getPickResultResolveFunc","release","executeForwardPlusGraph"],"mappings":"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"}
@@ -270,7 +270,7 @@ class BlurBlitter extends GaussianBlurBlitter {
270
270
  }
271
271
  getShadowMapColorFormat(_shadowMapParams) {
272
272
  const device = getDevice();
273
- return device.getDeviceCaps().textureCaps.supportFloatColorBuffer ? device.type === 'webgl' ? 'rgba32f' : 'rg32f' : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer ? device.type === 'webgl' ? 'rgba16f' : 'rg16f' : 'rgba8unorm';
273
+ return device.getDeviceCaps().textureCaps.supportFloatColorBuffer && device.getDeviceCaps().textureCaps.supportLinearFloatTexture ? device.type === 'webgl' ? 'rgba32f' : 'rg32f' : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer && device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture ? device.type === 'webgl' ? 'rgba16f' : 'rg16f' : 'rgba8unorm';
274
274
  }
275
275
  getShadowMapDepthFormat(_shadowMapParams) {
276
276
  return 'd24s8';
@@ -1 +1 @@
1
- {"version":3,"file":"esm.js","sources":["../../src/shadow/esm.ts"],"sourcesContent":["import type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport { computeShadowMapDepth, filterShadowESM } from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\nimport { Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: Nullable<FrameBuffer>;\r\n blurFramebuffer2: Nullable<FrameBuffer>;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat = false;\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 1, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.coverageSum = pb.float(0);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.coverage0 = pb.clamp(scope.d0.y, 0, 1);\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.coverageSum = pb.add(scope.coverageSum, pb.mul(scope.incrementalGaussian.x, scope.coverage0));\r\n\r\n if (that.logSpace) {\r\n scope.maxLogValue = pb.float(-1e20);\r\n scope.logValue0 = that._phase === 'horizonal' ? pb.mul(scope.d0.x, scope.multiplier) : scope.d0.x;\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.maxLogValue = this.logValue0;\r\n });\r\n } else {\r\n scope.depthSum = pb.mul(scope.incrementalGaussian.x, scope.coverage0, scope.d0.x);\r\n }\r\n\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(scope, type, srcTex, pb.sub(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.coefficientSum = pb.add(this.coefficientSum, pb.mul(this.incrementalGaussian.x, 2));\r\n this.coverageSum = pb.add(\r\n this.coverageSum,\r\n pb.mul(this.incrementalGaussian.x, pb.add(this.coverage1, this.coverage2))\r\n );\r\n if (that.logSpace) {\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue1);\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue2);\r\n });\r\n } else {\r\n this.depthSum = pb.add(\r\n this.depthSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n pb.add(pb.mul(this.coverage1, this.d1.x), pb.mul(this.coverage2, this.d2.x))\r\n )\r\n );\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n\r\n if (that.logSpace) {\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.momentSum = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage0,\r\n pb.exp(pb.min(87, pb.sub(this.logValue0, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage1,\r\n pb.exp(pb.min(87, pb.sub(this.logValue1, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage2,\r\n pb.exp(pb.min(87, pb.sub(this.logValue2, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.moment = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.moment = pb.add(this.maxLogValue, pb.log(pb.div(this.momentSum, this.coverageSum)));\r\n });\r\n return pb.vec4(scope.moment, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n } else {\r\n scope.$l.depth = pb.float(1);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.depth = pb.div(this.depthSum, this.coverageSum);\r\n });\r\n return pb.vec4(scope.depth, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash() {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n getType() {\r\n return 'esm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 0, 0, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2!.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0];\r\n const packFloat = colorAttachment.format === 'rgba8unorm';\r\n const logSpace = this._logSpace && !packFloat;\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = logSpace;\r\n this._blitterH.logSpaceMultiplier = this._depthScale;\r\n this._blitterH.packFloat = packFloat;\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = logSpace;\r\n this._blitterV.logSpaceMultiplier = this._depthScale;\r\n this._blitterV.packFloat = packFloat;\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer!);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2!\r\n );\r\n }\r\n }\r\n getDepthScale() {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash() {\r\n return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depth = computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n return shadowMapParams.shadowMap!.format === 'rgba8unorm' ? depth : pb.vec4(depth.x, 1, 0, 1);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n this.split,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n filterShadowESM(\r\n this,\r\n LIGHT_TYPE_POINT,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.dir,\r\n undefined,\r\n this.shadowBias\r\n )\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n undefined,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","filter","that","incrementalGaussian","vec3","x","div","mul","sigma","Math","sqrt","PI","y","exp","z","coefficientSum","float","coverageSum","d0","coverage0","clamp","add","logSpace","maxLogValue","logValue0","_phase","multiplier","$if","greaterThan","depthSum","xy","yz","$for","numBlurPixelsPerSide","$l","blurOffset","blurMultiplyVec","blurSize","i","d1","sub","d2","coverage1","coverage2","logValue1","logValue2","max","momentSum","min","moment","log","depth","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","getType","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","format","Vector4","getShadowMap","implData","blurFramebuffer2","fetchTemporalFramebuffer","autoRelease","lightType","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","logSpaceMultiplier","blit","getDepthScale","setDepthScale","getShaderHash","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportHalfFloatColorBuffer","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","shadowCoord","w","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","shadow","shadowBias","computeShadowBiasCSM","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","useNativeShadowMap"],"mappings":"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"}
1
+ {"version":3,"file":"esm.js","sources":["../../src/shadow/esm.ts"],"sourcesContent":["import type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport { computeShadowMapDepth, filterShadowESM } from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\nimport { Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: Nullable<FrameBuffer>;\r\n blurFramebuffer2: Nullable<FrameBuffer>;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat = false;\r\n get packFloat() {\r\n return this._packFloat;\r\n }\r\n set packFloat(b) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 1, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.coverageSum = pb.float(0);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.coverage0 = pb.clamp(scope.d0.y, 0, 1);\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.coverageSum = pb.add(scope.coverageSum, pb.mul(scope.incrementalGaussian.x, scope.coverage0));\r\n\r\n if (that.logSpace) {\r\n scope.maxLogValue = pb.float(-1e20);\r\n scope.logValue0 = that._phase === 'horizonal' ? pb.mul(scope.d0.x, scope.multiplier) : scope.d0.x;\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.maxLogValue = this.logValue0;\r\n });\r\n } else {\r\n scope.depthSum = pb.mul(scope.incrementalGaussian.x, scope.coverage0, scope.d0.x);\r\n }\r\n\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(scope, type, srcTex, pb.sub(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, this.blurOffset), srcLayer, sampleType);\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.coefficientSum = pb.add(this.coefficientSum, pb.mul(this.incrementalGaussian.x, 2));\r\n this.coverageSum = pb.add(\r\n this.coverageSum,\r\n pb.mul(this.incrementalGaussian.x, pb.add(this.coverage1, this.coverage2))\r\n );\r\n if (that.logSpace) {\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue1);\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.maxLogValue = pb.max(this.maxLogValue, this.logValue2);\r\n });\r\n } else {\r\n this.depthSum = pb.add(\r\n this.depthSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n pb.add(pb.mul(this.coverage1, this.d1.x), pb.mul(this.coverage2, this.d2.x))\r\n )\r\n );\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n\r\n if (that.logSpace) {\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.momentSum = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverage0, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage0,\r\n pb.exp(pb.min(87, pb.sub(this.logValue0, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.blurOffset = pb.mul(this.blurMultiplyVec, this.blurSize, this.i);\r\n this.$l.d1 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, this.blurOffset),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.$l.coverage1 = pb.clamp(this.d1.y, 0, 1);\r\n this.$l.coverage2 = pb.clamp(this.d2.y, 0, 1);\r\n this.$l.logValue1 = that._phase === 'horizonal' ? pb.mul(this.d1.x, this.multiplier) : this.d1.x;\r\n this.$l.logValue2 = that._phase === 'horizonal' ? pb.mul(this.d2.x, this.multiplier) : this.d2.x;\r\n this.$if(pb.greaterThan(this.coverage1, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage1,\r\n pb.exp(pb.min(87, pb.sub(this.logValue1, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.coverage2, 0.000001), function () {\r\n this.momentSum = pb.add(\r\n this.momentSum,\r\n pb.mul(\r\n this.incrementalGaussian.x,\r\n this.coverage2,\r\n pb.exp(pb.min(87, pb.sub(this.logValue2, this.maxLogValue)))\r\n )\r\n );\r\n });\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.moment = pb.float(0);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.moment = pb.add(this.maxLogValue, pb.log(pb.div(this.momentSum, this.coverageSum)));\r\n });\r\n return pb.vec4(scope.moment, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n } else {\r\n scope.$l.depth = pb.float(1);\r\n scope.$if(pb.greaterThan(scope.coverageSum, 0.000001), function () {\r\n this.depth = pb.div(this.depthSum, this.coverageSum);\r\n });\r\n return pb.vec4(scope.depth, pb.div(scope.coverageSum, scope.coefficientSum), 0, 1);\r\n }\r\n }\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, srcUV: PBShaderExp, texel: PBShaderExp) {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash() {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty() {\r\n return this._resourceDirty;\r\n }\r\n get blur() {\r\n return this._blur;\r\n }\r\n set blur(val) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap() {\r\n return this._mipmap;\r\n }\r\n set mipmap(b) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n getType() {\r\n return 'esm' as const;\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams) {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMapClearColor(shadowMapParams: ShadowMapParams) {\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer?.getColorAttachments()[0];\r\n return colorAttachment\r\n ? colorAttachment.format === 'rgba8unorm'\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 0, 0, 1)\r\n : null;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2!.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: Nullable<TextureFormat>,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments!, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams)!;\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer!.getColorAttachments()[0];\r\n const packFloat = colorAttachment.format === 'rgba8unorm';\r\n const logSpace = this._logSpace && !packFloat;\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = logSpace;\r\n this._blitterH.logSpaceMultiplier = this._depthScale;\r\n this._blitterH.packFloat = packFloat;\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = logSpace;\r\n this._blitterV.logSpaceMultiplier = this._depthScale;\r\n this._blitterV.packFloat = packFloat;\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer!);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer!.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2!\r\n );\r\n }\r\n }\r\n getDepthScale() {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash() {\r\n return `${this._blur ? 1 : 0}${this._logSpace ? 1 : 0}`;\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'rg32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer &&\r\n device.getDeviceCaps().textureCaps.supportLinearHalfFloatTexture\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'rg16f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams) {\r\n return 'd24s8' as const;\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const depth = computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap!.format);\r\n return shadowMapParams.shadowMap!.format === 'rgba8unorm' ? depth : pb.vec4(depth.x, 1, 0, 1);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ) {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n this.split,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split) as PBShaderExp;\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ) {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const logSpace = this._blur && this._logSpace && shadowMapParams.shadowMap!.format !== 'rgba8unorm';\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n filterShadowESM(\r\n this,\r\n LIGHT_TYPE_POINT,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.dir,\r\n undefined,\r\n this.shadowBias\r\n )\r\n );\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap!.format,\r\n logSpace,\r\n this.shadowCoord,\r\n undefined,\r\n this.shadowBias\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL) as PBShaderExp;\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams) {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","filter","that","incrementalGaussian","vec3","x","div","mul","sigma","Math","sqrt","PI","y","exp","z","coefficientSum","float","coverageSum","d0","coverage0","clamp","add","logSpace","maxLogValue","logValue0","_phase","multiplier","$if","greaterThan","depthSum","xy","yz","$for","numBlurPixelsPerSide","$l","blurOffset","blurMultiplyVec","blurSize","i","d1","sub","d2","coverage1","coverage2","logValue1","logValue2","max","momentSum","min","moment","log","depth","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","getType","getShadowMapBorder","_shadowMapParams","ceil","getShadowMapClearColor","shadowMapParams","colorAttachment","shadowMapFramebuffer","getColorAttachments","format","Vector4","getShadowMap","implData","blurFramebuffer2","fetchTemporalFramebuffer","autoRelease","lightType","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","getDevice","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","logSpaceMultiplier","blit","getDepthScale","setDepthScale","getShaderHash","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportLinearFloatTexture","supportHalfFloatColorBuffer","supportLinearHalfFloatTexture","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","int","shadowCoord","w","inShadow","all","bvec2","bvec4","greaterThanEqual","lessThanEqual","shadow","shadowBias","computeShadowBiasCSM","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","xyz","ShaderHelper","getLightPositionAndRangeForShadow","distance","length","computeShadowBias","undefined","useNativeShadowMap"],"mappings":"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"}