@zephyr3d/editor 0.3.8 → 0.3.9

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 (137) hide show
  1. package/dist/assets/{index-BZ1L8ggE.js → index-CO6yA4Rj.js} +313 -11
  2. package/dist/assistant/zephyr-types-index.json +13834 -11679
  3. package/dist/index.html +1 -1
  4. package/dist/modules/zephyr3d_backend-webgpu.js +1 -1
  5. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  6. package/dist/modules/zephyr3d_device.js +2 -2
  7. package/dist/modules/zephyr3d_device.js.map +1 -1
  8. package/dist/modules/zephyr3d_scene.js +2325 -515
  9. package/dist/modules/zephyr3d_scene.js.map +1 -1
  10. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +1 -1
  11. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  12. package/dist/vendor/zephyr3d/device/dist/device.js +2 -2
  13. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  14. package/dist/vendor/zephyr3d/scene/dist/app/engine.js +3 -1
  15. package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
  16. package/dist/vendor/zephyr3d/scene/dist/asset/assetmanager.js +1 -0
  17. package/dist/vendor/zephyr3d/scene/dist/asset/assetmanager.js.map +1 -1
  18. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +87 -0
  19. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
  20. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +158 -4
  21. package/dist/vendor/zephyr3d/scene/dist/index.js +3 -0
  22. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  23. package/dist/vendor/zephyr3d/scene/dist/material/meshmaterial.js +8 -1
  24. package/dist/vendor/zephyr3d/scene/dist/material/meshmaterial.js.map +1 -1
  25. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +6 -0
  26. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
  27. package/dist/vendor/zephyr3d/scene/dist/material/skin.js +263 -0
  28. package/dist/vendor/zephyr3d/scene/dist/material/skin.js.map +1 -0
  29. package/dist/vendor/zephyr3d/scene/dist/posteffect/compositor.js +3 -0
  30. package/dist/vendor/zephyr3d/scene/dist/posteffect/compositor.js.map +1 -1
  31. package/dist/vendor/zephyr3d/scene/dist/posteffect/skinsss.js +194 -0
  32. package/dist/vendor/zephyr3d/scene/dist/posteffect/skinsss.js.map +1 -0
  33. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +26 -49
  34. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
  35. package/dist/vendor/zephyr3d/scene/dist/posteffect/sss.js +1 -0
  36. package/dist/vendor/zephyr3d/scene/dist/posteffect/sss.js.map +1 -1
  37. package/dist/vendor/zephyr3d/scene/dist/posteffect/taa.js +2 -40
  38. package/dist/vendor/zephyr3d/scene/dist/posteffect/taa.js.map +1 -1
  39. package/dist/vendor/zephyr3d/scene/dist/render/abuffer_oit.js +1 -0
  40. package/dist/vendor/zephyr3d/scene/dist/render/abuffer_oit.js.map +1 -1
  41. package/dist/vendor/zephyr3d/scene/dist/render/drawable_mixin.js +1 -0
  42. package/dist/vendor/zephyr3d/scene/dist/render/drawable_mixin.js.map +1 -1
  43. package/dist/vendor/zephyr3d/scene/dist/render/fbm_wavegenerator.js +1 -0
  44. package/dist/vendor/zephyr3d/scene/dist/render/fbm_wavegenerator.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/render/gerstner_wavegenerator.js +1 -0
  46. package/dist/vendor/zephyr3d/scene/dist/render/gerstner_wavegenerator.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/render/globalbindgroup_allocator.js +1 -0
  48. package/dist/vendor/zephyr3d/scene/dist/render/globalbindgroup_allocator.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +4 -1
  50. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/render_queue.js +1 -0
  52. package/dist/vendor/zephyr3d/scene/dist/render/render_queue.js.map +1 -1
  53. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +1 -0
  54. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
  55. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/device_pool_allocator.js +12 -5
  56. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  57. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +78 -8
  58. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  59. package/dist/vendor/zephyr3d/scene/dist/scene/basesprite.js +1 -0
  60. package/dist/vendor/zephyr3d/scene/dist/scene/basesprite.js.map +1 -1
  61. package/dist/vendor/zephyr3d/scene/dist/scene/batchgroup.js +1 -0
  62. package/dist/vendor/zephyr3d/scene/dist/scene/batchgroup.js.map +1 -1
  63. package/dist/vendor/zephyr3d/scene/dist/scene/environment.js +1 -0
  64. package/dist/vendor/zephyr3d/scene/dist/scene/environment.js.map +1 -1
  65. package/dist/vendor/zephyr3d/scene/dist/scene/light.js +158 -154
  66. package/dist/vendor/zephyr3d/scene/dist/scene/light.js.map +1 -1
  67. package/dist/vendor/zephyr3d/scene/dist/scene/mesh.js +1 -0
  68. package/dist/vendor/zephyr3d/scene/dist/scene/mesh.js.map +1 -1
  69. package/dist/vendor/zephyr3d/scene/dist/scene/msdftext.js +1 -0
  70. package/dist/vendor/zephyr3d/scene/dist/scene/msdftext.js.map +1 -1
  71. package/dist/vendor/zephyr3d/scene/dist/scene/msdftextsprite.js +1 -0
  72. package/dist/vendor/zephyr3d/scene/dist/scene/msdftextsprite.js.map +1 -1
  73. package/dist/vendor/zephyr3d/scene/dist/scene/particlesys.js +1 -0
  74. package/dist/vendor/zephyr3d/scene/dist/scene/particlesys.js.map +1 -1
  75. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
  76. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
  77. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grass.js +1 -0
  78. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grass.js.map +1 -1
  79. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grassmaterial.js +1 -0
  80. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  81. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/terrain-cm.js +1 -0
  82. package/dist/vendor/zephyr3d/scene/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  83. package/dist/vendor/zephyr3d/scene/dist/scene/water.js +1 -0
  84. package/dist/vendor/zephyr3d/scene/dist/scene/water.js.map +1 -1
  85. package/dist/vendor/zephyr3d/scene/dist/shaders/shadow.js +617 -1
  86. package/dist/vendor/zephyr3d/scene/dist/shaders/shadow.js.map +1 -1
  87. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -0
  88. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
  89. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_opt.js +1 -0
  90. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_opt.js.map +1 -1
  91. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_pd.js +1 -0
  92. package/dist/vendor/zephyr3d/scene/dist/shadow/pcf_pd.js.map +1 -1
  93. package/dist/vendor/zephyr3d/scene/dist/shadow/pcss.js +182 -0
  94. package/dist/vendor/zephyr3d/scene/dist/shadow/pcss.js.map +1 -0
  95. package/dist/vendor/zephyr3d/scene/dist/shadow/shader.js +1 -0
  96. package/dist/vendor/zephyr3d/scene/dist/shadow/shader.js.map +1 -1
  97. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_impl.js.map +1 -1
  98. package/dist/vendor/zephyr3d/scene/dist/shadow/shadowmapper.js +183 -105
  99. package/dist/vendor/zephyr3d/scene/dist/shadow/shadowmapper.js.map +1 -1
  100. package/dist/vendor/zephyr3d/scene/dist/shadow/ssm.js +1 -0
  101. package/dist/vendor/zephyr3d/scene/dist/shadow/ssm.js.map +1 -1
  102. package/dist/vendor/zephyr3d/scene/dist/shadow/vsm.js +1 -0
  103. package/dist/vendor/zephyr3d/scene/dist/shadow/vsm.js.map +1 -1
  104. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +3 -1
  105. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  106. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +1 -0
  107. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  108. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/batch.js +1 -0
  109. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/batch.js.map +1 -1
  110. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js +122 -0
  111. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  112. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js +1 -0
  113. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js.map +1 -1
  114. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js +102 -21
  115. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js.map +1 -1
  116. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js +195 -3
  117. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js.map +1 -1
  118. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js +1 -0
  119. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
  120. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js +1 -0
  121. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
  122. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js +1 -0
  123. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js.map +1 -1
  124. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js +1 -0
  125. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js.map +1 -1
  126. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js +1 -0
  127. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
  128. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js +1 -0
  129. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js.map +1 -1
  130. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/text.js +1 -0
  131. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/text.js.map +1 -1
  132. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/water.js +1 -0
  133. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/water.js.map +1 -1
  134. package/dist/vendor/zephyr3d/scene/dist/values.js +1 -0
  135. package/dist/vendor/zephyr3d/scene/dist/values.js.map +1 -1
  136. package/electron/main.cjs +30 -6
  137. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { getGGXLUT } from '../utility/textures/ggxlut';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram?: GPUProgram;\r\n private static _temporalProgram?: GPUProgram;\r\n private static _blurBlitterH: Nullable<BilateralBlurBlitter> = null;\r\n private static _blurBlitterV: Nullable<BilateralBlurBlitter> = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: Nullable<BindGroup>;\r\n private _temporalBindGroup: Nullable<BindGroup>;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n this._temporalBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment() {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture ?? null;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n const roughnessTexture = ctx.SSRRoughnessTexture!;\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program!.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', roughnessTexture, linearSampler);\r\n this._combineBindGroup.setTexture('albedoTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('extraTex', inputColorTexture, nearestSampler);\r\n this._combineBindGroup.setTexture('normalTex', ctx.SSRNormalTexture!, nearestSampler);\r\n this._combineBindGroup.setTexture('depthTex', ctx.linearDepthTexture!, nearestSampler);\r\n this._combineBindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue('ssrStrengthMode', 0);\r\n this._combineBindGroup.setValue(\r\n 'cameraNearFar',\r\n new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane())\r\n );\r\n this._combineBindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n this._combineBindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n inputColorTexture.width,\r\n inputColorTexture.height\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hasEnvRadiance = !!ctx.env!.light.envLight?.hasRadiance();\r\n const hash = hasEnvRadiance ? ctx.env!.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n const roughnessTexture = ctx.SSRRoughnessTexture!;\r\n const normalTexture = ctx.SSRNormalTexture!;\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', roughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', normalTexture, nearestSampler);\r\n bindGroup.setTexture('albedoTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('extraTex', inputColorTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('ssrStrengthMode', 0);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (hasEnvRadiance) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n bindGroup.setValue('envLightSpecularStrength', ctx.env!.light.specularStrength ?? 1);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hasEnvRadiance = !!ctx.env!.light.envLight?.hasRadiance();\r\n const hash = `${Number(blur)}:${\r\n hasEnvRadiance ? ctx.env!.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.camera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n const created = this._createIntersectProgram(ctx, blur);\r\n if (!created) {\r\n return;\r\n }\r\n program = created;\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n const roughnessTexture = ctx.SSRRoughnessTexture!;\r\n const normalTexture = ctx.SSRNormalTexture!;\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (hasEnvRadiance) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n bindGroup.setValue('envLightSpecularStrength', ctx.env!.light.specularStrength ?? 1);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('albedoTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('roughnessTex', roughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', normalTexture, nearestSampler);\r\n bindGroup.setTexture('extraTex', inputColorTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('ssrStrengthMode', 0);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height,\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height,\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n temporal(\r\n ctx: DrawContext,\r\n currentReflectTex: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n prevReflectTex: Texture2D,\r\n prevMotionVectorTex: Texture2D,\r\n outFramebuffer: FrameBuffer\r\n ) {\r\n const device = ctx.device;\r\n let program = SSR._temporalProgram;\r\n if (!program) {\r\n program = this._createTemporalProgram(ctx);\r\n SSR._temporalProgram = program;\r\n }\r\n if (!this._temporalBindGroup) {\r\n this._temporalBindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n this._temporalBindGroup.setTexture('historyColorTex', prevReflectTex, fetchSampler('clamp_linear_nomip'));\r\n this._temporalBindGroup.setTexture(\r\n 'currentColorTex',\r\n currentReflectTex,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setTexture(\r\n 'currentDepthTex',\r\n sceneDepthTexture,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setTexture(\r\n 'motionVector',\r\n ctx.motionVectorTexture!,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setTexture(\r\n 'prevMotionVector',\r\n prevMotionVectorTex,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._temporalBindGroup.setValue(\r\n 'texSize',\r\n new Vector2(sceneDepthTexture.width, sceneDepthTexture.height)\r\n );\r\n this._temporalBindGroup.setValue('temporalWeight', ctx.camera.ssrTemporalWeight);\r\n device.setFramebuffer(outFramebuffer);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._temporalBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n const ssrSceneColorTexture = ctx.sceneColorTexture ?? inputColorTexture;\r\n this.resolve(ctx, ssrSceneColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n const historyManager = ctx.camera.getHistoryResourceManager();\r\n const useGraphHistory = !!historyManager?.frameActive;\r\n const history = useGraphHistory ? null : ctx.camera.getHistoryData();\r\n let reflectanceTex = pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D;\r\n const prevSSRReflectTex = useGraphHistory\r\n ? historyManager!.tryGetPrevious(RGHistoryResources.SSR_REFLECT)\r\n : history!.prevSSRReflectTex;\r\n const prevSSRMotionVectorTex = useGraphHistory\r\n ? historyManager!.tryGetPrevious(RGHistoryResources.SSR_MOTION_VECTOR)\r\n : history!.prevSSRMotionVectorTex;\r\n const canTemporal =\r\n ctx.camera.ssrTemporal &&\r\n !!ctx.motionVectorTexture &&\r\n !!prevSSRReflectTex &&\r\n !!prevSSRMotionVectorTex &&\r\n prevSSRReflectTex.width === reflectanceTex.width &&\r\n prevSSRReflectTex.height === reflectanceTex.height;\r\n if (canTemporal) {\r\n this.temporal(\r\n ctx,\r\n reflectanceTex,\r\n sceneDepthTexture,\r\n prevSSRReflectTex as Texture2D,\r\n prevSSRMotionVectorTex as Texture2D,\r\n pingpongFramebuffer[1]\r\n );\r\n reflectanceTex = pingpongFramebuffer[1].getColorAttachments()[0] as Texture2D;\r\n }\r\n device.popDeviceStates();\r\n this.combine(ctx, inputColorTexture, reflectanceTex, srgbOutput);\r\n if (useGraphHistory) {\r\n if (ctx.camera.ssrTemporal) {\r\n const reflectanceSize = { width: reflectanceTex.width, height: reflectanceTex.height };\r\n historyManager!.queueRetainedCommit(\r\n RGHistoryResources.SSR_REFLECT,\r\n {\r\n format: reflectanceTex.format,\r\n sizeMode: 'absolute',\r\n width: reflectanceTex.width,\r\n height: reflectanceTex.height\r\n },\r\n reflectanceSize,\r\n reflectanceTex\r\n );\r\n }\r\n if (ctx.camera.ssrTemporal && ctx.motionVectorTexture) {\r\n const motionVectorSize = {\r\n width: ctx.motionVectorTexture.width,\r\n height: ctx.motionVectorTexture.height\r\n };\r\n historyManager!.queueRetainedCommit(\r\n RGHistoryResources.SSR_MOTION_VECTOR,\r\n {\r\n format: ctx.motionVectorTexture.format,\r\n sizeMode: 'absolute',\r\n width: ctx.motionVectorTexture.width,\r\n height: ctx.motionVectorTexture.height\r\n },\r\n motionVectorSize,\r\n ctx.motionVectorTexture\r\n );\r\n }\r\n } else {\r\n if (history!.prevSSRReflectTex) {\r\n device.pool.releaseTexture(history!.prevSSRReflectTex);\r\n history!.prevSSRReflectTex = null;\r\n }\r\n if (history!.prevSSRMotionVectorTex) {\r\n device.pool.releaseTexture(history!.prevSSRMotionVectorTex);\r\n history!.prevSSRMotionVectorTex = null;\r\n }\r\n if (ctx.camera.ssrTemporal) {\r\n device.pool.retainTexture(reflectanceTex);\r\n history!.prevSSRReflectTex = reflectanceTex;\r\n }\r\n if (ctx.camera.ssrTemporal && ctx.motionVectorTexture) {\r\n if (history!.prevSSRMotionVectorTex) {\r\n device.pool.releaseTexture(history!.prevSSRMotionVectorTex);\r\n }\r\n device.pool.retainTexture(ctx.motionVectorTexture);\r\n history!.prevSSRMotionVectorTex = ctx.motionVectorTexture;\r\n }\r\n }\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.albedoTex = pb.tex2D().uniform(0);\r\n this.extraTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.ssrStrengthMode = pb.int().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.viewPos4 = pb.mul(this.invProjMatrix, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.viewPos4.xyz, this.viewPos4.w), this.linearDepth));\r\n });\r\n pb.func('resolveDeferredStrength', [pb.vec2('uv'), pb.vec4('roughnessValue')], function () {\r\n this.$l.roughness = pb.clamp(this.roughnessValue.a, 0.045, 1);\r\n this.$l.base = pb.textureSampleLevel(this.albedoTex, this.uv, 0);\r\n // Hybrid may merge forward-only SSR surface data into the roughness MRT while the\r\n // deferred GBuffer remains empty at those pixels. Fall back to forward SSR semantics\r\n // there instead of decoding the mixed texture as deferred metallic/occlusion/F0 data.\r\n this.$if(pb.lessThanEqual(this.base.a, 1e-5), function () {\r\n this.$return(pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1)));\r\n });\r\n this.$l.pos = this.getPosition(this.uv);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.viewVec = pb.neg(pb.normalize(this.viewPos));\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n this.$l.NoV = pb.clamp(pb.dot(this.viewNormal, this.viewVec), 0.0001, 1);\r\n this.$l.baseColor = this.base.rgb;\r\n this.$l.extra = pb.textureSampleLevel(this.extraTex, this.uv, 0);\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.roughnessValue.g, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.specularWeight = pb.clamp(this.extra.a, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specStrength), this.baseColor, this.metallic);\r\n this.$l.Fr = pb.sub(pb.max(pb.vec3(pb.sub(1, this.roughness)), this.f0), this.f0);\r\n this.$l.kS = pb.add(this.f0, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n this.$l.fab = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rg,\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.FssEss = pb.add(pb.mul(this.kS, this.fab.x), pb.vec3(this.fab.y));\r\n this.$return(\r\n pb.clamp(pb.mul(this.FssEss, this.occlusion, this.specularWeight), pb.vec3(0), pb.vec3(1))\r\n );\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec2('uv'), pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.vec3();\r\n this.$if(pb.equal(this.ssrStrengthMode, 0), function () {\r\n this.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n })\r\n .$elseif(pb.equal(this.ssrStrengthMode, 1), function () {\r\n this.$l.roughAtten = pb.clamp(\r\n pb.sub(1, pb.div(this.roughnessValue.a, pb.max(this.ssrMaxRoughness, 1e-4))),\r\n 0,\r\n 1\r\n );\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(0.04, this.specStrength), 1, this.metallic);\r\n this.$l.s = pb.mul(this.roughAtten, this.roughAtten, this.f0);\r\n this.strength = pb.vec3(this.s);\r\n })\r\n .$else(function () {\r\n this.strength = this.resolveDeferredStrength(this.uv, this.roughnessValue);\r\n });\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(\r\n this.screenUV,\r\n this.sceneColor,\r\n this.reflectance,\r\n this.roughnessInfo\r\n );\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Combine';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.albedoTex = pb.tex2D().uniform(0);\r\n this.extraTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.ssrStrengthMode = pb.int().uniform(0);\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n this.envLightSpecularStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func('resolveDeferredStrength', [pb.vec2('uv'), pb.vec4('roughnessValue')], function () {\r\n this.$l.roughness = pb.clamp(this.roughnessValue.a, 0.045, 1);\r\n this.$l.base = pb.textureSampleLevel(this.albedoTex, this.uv, 0);\r\n this.$if(pb.lessThanEqual(this.base.a, 1e-5), function () {\r\n this.$return(pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1)));\r\n });\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.viewVec = pb.neg(pb.normalize(this.viewPos));\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n this.$l.NoV = pb.clamp(pb.dot(this.viewNormal, this.viewVec), 0.0001, 1);\r\n this.$l.baseColor = this.base.rgb;\r\n this.$l.extra = pb.textureSampleLevel(this.extraTex, this.uv, 0);\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.roughnessValue.g, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.specularWeight = pb.clamp(this.extra.a, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specStrength), this.baseColor, this.metallic);\r\n this.$l.Fr = pb.sub(pb.max(pb.vec3(pb.sub(1, this.roughness)), this.f0), this.f0);\r\n this.$l.kS = pb.add(this.f0, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n this.$l.fab = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rg,\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.FssEss = pb.add(pb.mul(this.kS, this.fab.x), pb.vec3(this.fab.y));\r\n this.$return(\r\n pb.clamp(pb.mul(this.FssEss, this.occlusion, this.specularWeight), pb.vec3(0), pb.vec3(1))\r\n );\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec2('uv'), pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.vec3();\r\n this.$if(pb.equal(this.ssrStrengthMode, 0), function () {\r\n this.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n })\r\n .$elseif(pb.equal(this.ssrStrengthMode, 1), function () {\r\n this.$l.roughAtten = pb.clamp(\r\n pb.sub(1, pb.div(this.roughnessValue.a, pb.max(this.ssrMaxRoughness, 1e-4))),\r\n 0,\r\n 1\r\n );\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(0.04, this.specStrength), 1, this.metallic);\r\n this.$l.s = pb.mul(this.roughAtten, this.roughAtten, this.f0);\r\n this.strength = pb.vec3(this.s);\r\n })\r\n .$else(function () {\r\n this.strength = this.resolveDeferredStrength(this.uv, this.roughnessValue);\r\n });\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env!.light.envLight?.hasRadiance()) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.clamp(this.roughness, 0, 1);\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2)!,\r\n this.envLightStrength,\r\n this.envLightSpecularStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, pb.clamp(this.alpha, 0, 1));\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.intersectSample = pb.vec4(0);\r\n this.$l.reflectance = pb.vec3(0);\r\n this.$if(pb.lessThan(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.hitAlpha = pb.clamp(this.intersectSample.w, 0, 1);\r\n this.$l.hitUV = pb.clamp(this.intersectSample.xy, pb.vec2(0), pb.vec2(1));\r\n this.$if(pb.greaterThan(this.hitAlpha, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(this.intersectTex, this.hitUV, 0);\r\n this.$l.indirectAlpha = pb.clamp(this.indirectIntersectSample.w, 0, 1);\r\n this.$l.indirectUV = pb.clamp(this.indirectIntersectSample.xy, pb.vec2(0), pb.vec2(1));\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.hitUV, 0);\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectAlpha, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectUV,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.hitUV,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectAlpha\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(this.hitUV, this.indirectRoughnessInfo);\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.hitUV, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.hitUV,\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.hitAlpha\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Resolve';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createTemporalProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.historyColorTex = pb.tex2D().uniform(0);\r\n this.currentColorTex = pb.tex2D().uniform(0);\r\n this.currentDepthTex = pb.tex2D().uniform(0);\r\n this.motionVector = pb.tex2D().uniform(0);\r\n this.prevMotionVector = pb.tex2D().uniform(0);\r\n this.texSize = pb.vec2().uniform(0);\r\n this.temporalWeight = pb.float().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.texSize);\r\n this.$l.currentColor = pb.textureSampleLevel(this.currentColorTex, this.screenUV, 0).rgb;\r\n this.$l.resolvedColor = temporalResolve(\r\n this,\r\n this.currentColorTex,\r\n this.historyColorTex,\r\n this.currentDepthTex,\r\n this.motionVector,\r\n this.prevMotionVector,\r\n this.screenUV,\r\n this.texSize,\r\n 0\r\n );\r\n this.$l.w = pb.clamp(this.temporalWeight, 0, 1);\r\n this.$outputs.outColor = pb.vec4(pb.mix(this.currentColor, this.resolvedColor, this.w), 1);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Temporal';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean): Nullable<GPUProgram> {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env!.light.envLight?.hasRadiance()) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n this.envLightSpecularStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.albedoTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.extraTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.ssrStrengthMode = pb.int().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveDeferredStrength',\r\n [pb.vec2('uv'), pb.vec4('roughnessValue'), pb.vec4('viewPosInfo')],\r\n function () {\r\n this.$l.roughness = pb.clamp(this.roughnessValue.a, 0.045, 1);\r\n this.$l.base = pb.textureSampleLevel(this.albedoTex, this.uv, 0);\r\n this.$if(pb.lessThanEqual(this.base.a, 1e-5), function () {\r\n this.$return(pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1)));\r\n });\r\n this.$l.viewPos = this.viewPosInfo.xyz;\r\n this.$l.viewVec = pb.neg(pb.normalize(this.viewPos));\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n this.$l.NoV = pb.clamp(pb.dot(this.viewNormal, this.viewVec), 0.0001, 1);\r\n this.$l.baseColor = this.base.rgb;\r\n this.$l.extra = pb.textureSampleLevel(this.extraTex, this.uv, 0);\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.roughnessValue.g, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.specularWeight = pb.clamp(this.extra.a, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specStrength), this.baseColor, this.metallic);\r\n this.$l.Fr = pb.sub(pb.max(pb.vec3(pb.sub(1, this.roughness)), this.f0), this.f0);\r\n this.$l.kS = pb.add(this.f0, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n this.$l.fab = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rg,\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.FssEss = pb.add(pb.mul(this.kS, this.fab.x), pb.vec3(this.fab.y));\r\n this.$return(\r\n pb.clamp(pb.mul(this.FssEss, this.occlusion, this.specularWeight), pb.vec3(0), pb.vec3(1))\r\n );\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float(0);\r\n this.$if(pb.lessThan(this.roughness, this.ssrMaxRoughness), function () {\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = pb.vec4(0);\r\n if (ctx.HiZTexture) {\r\n this.hitInfo = screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n );\r\n } else {\r\n this.hitInfo = screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.camera.ssrCalcThickness\r\n );\r\n }\r\n this.$l.hitAlpha = pb.clamp(this.hitInfo.w, 0, 1);\r\n this.$l.hitUV = pb.clamp(this.hitInfo.xy, pb.vec2(0), pb.vec2(1));\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitAlpha, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitAlpha;\r\n this.color = pb.vec3(this.hitUV, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness)!,\r\n this.envLightStrength,\r\n this.envLightSpecularStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitUV, 0).rgb,\r\n this.hitAlpha\r\n );\r\n this.$l.reflectance = pb.div(this.$l.reflectance, pb.add(this.$l.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.vec3();\r\n this.$if(pb.equal(this.ssrStrengthMode, 0), function () {\r\n this.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n })\r\n .$elseif(pb.equal(this.ssrStrengthMode, 1), function () {\r\n this.$l.roughAtten = pb.clamp(\r\n pb.sub(1, pb.div(this.roughness, pb.max(this.ssrMaxRoughness, 1e-4))),\r\n 0,\r\n 1\r\n );\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(0.04, this.specStrength), 1, this.metallic);\r\n this.$l.s = pb.mul(this.roughAtten, this.roughAtten, this.f0);\r\n this.strength = pb.vec3(this.s);\r\n })\r\n .$else(function () {\r\n this.strength = this.resolveDeferredStrength(\r\n this.screenUV,\r\n this.roughnessValue,\r\n this.pos\r\n );\r\n });\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n });\r\n if (!program) {\r\n return null;\r\n }\r\n program.name = blur ? '@SSR_Intersect_Blur' : '@SSR_Intersect';\r\n return program;\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_temporalProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_temporalBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","undefined","_createCombineProgrm","roughnessTexture","SSRRoughnessTexture","createBindGroup","bindGroupLayouts","linearSampler","nearestSampler","setTexture","SSRNormalTexture","getGGXLUT","setValue","ssrMaxRoughness","viewMatrix","Matrix4x4","invert","getProjectionMatrix","Vector4","width","height","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hasEnvRadiance","env","light","envLight","hasRadiance","hash","getHash","_createResolveProgram","bindGroup","normalTexture","worldMatrix","strength","specularStrength","updateBindGroup","intersect","blur","Number","HiZTexture","ssrCalcThickness","created","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","temporal","currentReflectTex","prevReflectTex","prevMotionVectorTex","outFramebuffer","_createTemporalProgram","motionVectorTexture","ssrTemporalWeight","setFramebuffer","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","intersectTex","ssrSceneColorTexture","sceneColorTexture","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","historyManager","getHistoryResourceManager","useGraphHistory","frameActive","history","getHistoryData","prevSSRReflectTex","tryGetPrevious","RGHistoryResources","SSR_REFLECT","prevSSRMotionVectorTex","SSR_MOTION_VECTOR","canTemporal","ssrTemporal","popDeviceStates","reflectanceSize","queueRetainedCommit","format","sizeMode","motionVectorSize","releaseTexture","retainTexture","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","albedoTex","extraTex","normalTex","zGGXLut","targetSize","mat4","invProjMatrix","float","ssrStrengthMode","outColor","func","$l","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","div","sub","x","clipSpacePos","clamp","viewPos4","$return","xyz","w","roughness","roughnessValue","a","base","textureSampleLevel","lessThanEqual","rgb","vec3","getPosition","greaterThanEqual","viewPos","viewVec","normalize","worldNormal","viewNormal","NoV","dot","baseColor","extra","metallic","r","occlusion","g","specStrength","b","specularWeight","f0","mix","Fr","kS","pow","fab","rg","FssEss","reflectance","equal","$elseif","roughAtten","s","$else","resolveDeferredStrength","color","sceneColor","screenUV","fragCoord","roughnessInfo","combined","resolveSample","linearToGamma","name","initShaderBindings","invViewMatrix","envLightStrength","envLightSpecularStrength","wPos","mat","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","reflectSceneColor","alpha","intersectSample","lessThan","hitAlpha","hitUV","greaterThan","indirectIntersectSample","indirectAlpha","indirectUV","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","historyColorTex","currentColorTex","currentDepthTex","motionVector","prevMotionVector","texSize","temporalWeight","currentColor","resolvedColor","temporalResolve","cameraPos","projMatrix","hizTex","depthMipLevels","viewPosInfo","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
1
+ {"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { getGGXLUT } from '../utility/textures/ggxlut';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram?: GPUProgram;\r\n private static _temporalProgram?: GPUProgram;\r\n private static _blurBlitterH: Nullable<BilateralBlurBlitter> = null;\r\n private static _blurBlitterV: Nullable<BilateralBlurBlitter> = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: Nullable<BindGroup>;\r\n private _temporalBindGroup: Nullable<BindGroup>;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n this._temporalBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment() {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture ?? null;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n const roughnessTexture = ctx.SSRRoughnessTexture!;\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program!.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', roughnessTexture, linearSampler);\r\n this._combineBindGroup.setTexture('albedoTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('extraTex', inputColorTexture, nearestSampler);\r\n this._combineBindGroup.setTexture('normalTex', ctx.SSRNormalTexture!, nearestSampler);\r\n this._combineBindGroup.setTexture('depthTex', ctx.linearDepthTexture!, nearestSampler);\r\n this._combineBindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue('ssrStrengthMode', 0);\r\n this._combineBindGroup.setValue(\r\n 'cameraNearFar',\r\n new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane())\r\n );\r\n this._combineBindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n this._combineBindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n inputColorTexture.width,\r\n inputColorTexture.height\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hasEnvRadiance = !!ctx.env!.light.envLight?.hasRadiance();\r\n const hash = hasEnvRadiance ? ctx.env!.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n const roughnessTexture = ctx.SSRRoughnessTexture!;\r\n const normalTexture = ctx.SSRNormalTexture!;\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', roughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', normalTexture, nearestSampler);\r\n bindGroup.setTexture('albedoTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('extraTex', inputColorTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('ssrStrengthMode', 0);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (hasEnvRadiance) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n bindGroup.setValue('envLightSpecularStrength', ctx.env!.light.specularStrength ?? 1);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hasEnvRadiance = !!ctx.env!.light.envLight?.hasRadiance();\r\n const hash = `${Number(blur)}:${\r\n hasEnvRadiance ? ctx.env!.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.camera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n const created = this._createIntersectProgram(ctx, blur);\r\n if (!created) {\r\n return;\r\n }\r\n program = created;\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n const roughnessTexture = ctx.SSRRoughnessTexture!;\r\n const normalTexture = ctx.SSRNormalTexture!;\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (hasEnvRadiance) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n bindGroup.setValue('envLightSpecularStrength', ctx.env!.light.specularStrength ?? 1);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('albedoTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('roughnessTex', roughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', normalTexture, nearestSampler);\r\n bindGroup.setTexture('extraTex', inputColorTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('ssrStrengthMode', 0);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height,\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height,\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n temporal(\r\n ctx: DrawContext,\r\n currentReflectTex: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n prevReflectTex: Texture2D,\r\n prevMotionVectorTex: Texture2D,\r\n outFramebuffer: FrameBuffer\r\n ) {\r\n const device = ctx.device;\r\n let program = SSR._temporalProgram;\r\n if (!program) {\r\n program = this._createTemporalProgram(ctx);\r\n SSR._temporalProgram = program;\r\n }\r\n if (!this._temporalBindGroup) {\r\n this._temporalBindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n this._temporalBindGroup.setTexture('historyColorTex', prevReflectTex, fetchSampler('clamp_linear_nomip'));\r\n this._temporalBindGroup.setTexture(\r\n 'currentColorTex',\r\n currentReflectTex,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setTexture(\r\n 'currentDepthTex',\r\n sceneDepthTexture,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setTexture(\r\n 'motionVector',\r\n ctx.motionVectorTexture!,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setTexture(\r\n 'prevMotionVector',\r\n prevMotionVectorTex,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._temporalBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._temporalBindGroup.setValue(\r\n 'texSize',\r\n new Vector2(sceneDepthTexture.width, sceneDepthTexture.height)\r\n );\r\n this._temporalBindGroup.setValue('temporalWeight', ctx.camera.ssrTemporalWeight);\r\n device.setFramebuffer(outFramebuffer);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._temporalBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n const ssrSceneColorTexture = ctx.sceneColorTexture ?? inputColorTexture;\r\n this.resolve(ctx, ssrSceneColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n const historyManager = ctx.camera.getHistoryResourceManager();\r\n let reflectanceTex = pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D;\r\n const prevSSRReflectTex = historyManager!.tryGetPrevious(RGHistoryResources.SSR_REFLECT);\r\n const prevSSRMotionVectorTex = historyManager!.tryGetPrevious(RGHistoryResources.SSR_MOTION_VECTOR);\r\n const canTemporal =\r\n ctx.camera.ssrTemporal &&\r\n !!ctx.motionVectorTexture &&\r\n !!prevSSRReflectTex &&\r\n !!prevSSRMotionVectorTex &&\r\n prevSSRReflectTex.width === reflectanceTex.width &&\r\n prevSSRReflectTex.height === reflectanceTex.height;\r\n if (canTemporal) {\r\n this.temporal(\r\n ctx,\r\n reflectanceTex,\r\n sceneDepthTexture,\r\n prevSSRReflectTex as Texture2D,\r\n prevSSRMotionVectorTex as Texture2D,\r\n pingpongFramebuffer[1]\r\n );\r\n reflectanceTex = pingpongFramebuffer[1].getColorAttachments()[0] as Texture2D;\r\n }\r\n device.popDeviceStates();\r\n this.combine(ctx, inputColorTexture, reflectanceTex, srgbOutput);\r\n if (ctx.camera.ssrTemporal) {\r\n const reflectanceSize = { width: reflectanceTex.width, height: reflectanceTex.height };\r\n historyManager!.queueRetainedCommit(\r\n RGHistoryResources.SSR_REFLECT,\r\n {\r\n format: reflectanceTex.format,\r\n sizeMode: 'absolute',\r\n width: reflectanceTex.width,\r\n height: reflectanceTex.height\r\n },\r\n reflectanceSize,\r\n reflectanceTex\r\n );\r\n }\r\n if (ctx.camera.ssrTemporal && ctx.motionVectorTexture) {\r\n const motionVectorSize = {\r\n width: ctx.motionVectorTexture.width,\r\n height: ctx.motionVectorTexture.height\r\n };\r\n historyManager!.queueRetainedCommit(\r\n RGHistoryResources.SSR_MOTION_VECTOR,\r\n {\r\n format: ctx.motionVectorTexture.format,\r\n sizeMode: 'absolute',\r\n width: ctx.motionVectorTexture.width,\r\n height: ctx.motionVectorTexture.height\r\n },\r\n motionVectorSize,\r\n ctx.motionVectorTexture\r\n );\r\n }\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.albedoTex = pb.tex2D().uniform(0);\r\n this.extraTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.ssrStrengthMode = pb.int().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.viewPos4 = pb.mul(this.invProjMatrix, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.viewPos4.xyz, this.viewPos4.w), this.linearDepth));\r\n });\r\n pb.func('resolveDeferredStrength', [pb.vec2('uv'), pb.vec4('roughnessValue')], function () {\r\n this.$l.roughness = pb.clamp(this.roughnessValue.a, 0.045, 1);\r\n this.$l.base = pb.textureSampleLevel(this.albedoTex, this.uv, 0);\r\n // Hybrid may merge forward-only SSR surface data into the roughness MRT while the\r\n // deferred GBuffer remains empty at those pixels. Fall back to forward SSR semantics\r\n // there instead of decoding the mixed texture as deferred metallic/occlusion/F0 data.\r\n this.$if(pb.lessThanEqual(this.base.a, 1e-5), function () {\r\n this.$return(pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1)));\r\n });\r\n this.$l.pos = this.getPosition(this.uv);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.viewVec = pb.neg(pb.normalize(this.viewPos));\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n this.$l.NoV = pb.clamp(pb.dot(this.viewNormal, this.viewVec), 0.0001, 1);\r\n this.$l.baseColor = this.base.rgb;\r\n this.$l.extra = pb.textureSampleLevel(this.extraTex, this.uv, 0);\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.roughnessValue.g, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.specularWeight = pb.clamp(this.extra.a, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specStrength), this.baseColor, this.metallic);\r\n this.$l.Fr = pb.sub(pb.max(pb.vec3(pb.sub(1, this.roughness)), this.f0), this.f0);\r\n this.$l.kS = pb.add(this.f0, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n this.$l.fab = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rg,\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.FssEss = pb.add(pb.mul(this.kS, this.fab.x), pb.vec3(this.fab.y));\r\n this.$return(\r\n pb.clamp(pb.mul(this.FssEss, this.occlusion, this.specularWeight), pb.vec3(0), pb.vec3(1))\r\n );\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec2('uv'), pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.vec3();\r\n this.$if(pb.equal(this.ssrStrengthMode, 0), function () {\r\n this.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n })\r\n .$elseif(pb.equal(this.ssrStrengthMode, 1), function () {\r\n this.$l.roughAtten = pb.clamp(\r\n pb.sub(1, pb.div(this.roughnessValue.a, pb.max(this.ssrMaxRoughness, 1e-4))),\r\n 0,\r\n 1\r\n );\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(0.04, this.specStrength), 1, this.metallic);\r\n this.$l.s = pb.mul(this.roughAtten, this.roughAtten, this.f0);\r\n this.strength = pb.vec3(this.s);\r\n })\r\n .$else(function () {\r\n this.strength = this.resolveDeferredStrength(this.uv, this.roughnessValue);\r\n });\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(\r\n this.screenUV,\r\n this.sceneColor,\r\n this.reflectance,\r\n this.roughnessInfo\r\n );\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Combine';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.albedoTex = pb.tex2D().uniform(0);\r\n this.extraTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.ssrStrengthMode = pb.int().uniform(0);\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n this.envLightSpecularStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func('resolveDeferredStrength', [pb.vec2('uv'), pb.vec4('roughnessValue')], function () {\r\n this.$l.roughness = pb.clamp(this.roughnessValue.a, 0.045, 1);\r\n this.$l.base = pb.textureSampleLevel(this.albedoTex, this.uv, 0);\r\n this.$if(pb.lessThanEqual(this.base.a, 1e-5), function () {\r\n this.$return(pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1)));\r\n });\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.viewVec = pb.neg(pb.normalize(this.viewPos));\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n this.$l.NoV = pb.clamp(pb.dot(this.viewNormal, this.viewVec), 0.0001, 1);\r\n this.$l.baseColor = this.base.rgb;\r\n this.$l.extra = pb.textureSampleLevel(this.extraTex, this.uv, 0);\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.roughnessValue.g, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.specularWeight = pb.clamp(this.extra.a, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specStrength), this.baseColor, this.metallic);\r\n this.$l.Fr = pb.sub(pb.max(pb.vec3(pb.sub(1, this.roughness)), this.f0), this.f0);\r\n this.$l.kS = pb.add(this.f0, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n this.$l.fab = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rg,\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.FssEss = pb.add(pb.mul(this.kS, this.fab.x), pb.vec3(this.fab.y));\r\n this.$return(\r\n pb.clamp(pb.mul(this.FssEss, this.occlusion, this.specularWeight), pb.vec3(0), pb.vec3(1))\r\n );\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec2('uv'), pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.vec3();\r\n this.$if(pb.equal(this.ssrStrengthMode, 0), function () {\r\n this.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n })\r\n .$elseif(pb.equal(this.ssrStrengthMode, 1), function () {\r\n this.$l.roughAtten = pb.clamp(\r\n pb.sub(1, pb.div(this.roughnessValue.a, pb.max(this.ssrMaxRoughness, 1e-4))),\r\n 0,\r\n 1\r\n );\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(0.04, this.specStrength), 1, this.metallic);\r\n this.$l.s = pb.mul(this.roughAtten, this.roughAtten, this.f0);\r\n this.strength = pb.vec3(this.s);\r\n })\r\n .$else(function () {\r\n this.strength = this.resolveDeferredStrength(this.uv, this.roughnessValue);\r\n });\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env!.light.envLight?.hasRadiance()) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.clamp(this.roughness, 0, 1);\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2)!,\r\n this.envLightStrength,\r\n this.envLightSpecularStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, pb.clamp(this.alpha, 0, 1));\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.intersectSample = pb.vec4(0);\r\n this.$l.reflectance = pb.vec3(0);\r\n this.$if(pb.lessThan(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.hitAlpha = pb.clamp(this.intersectSample.w, 0, 1);\r\n this.$l.hitUV = pb.clamp(this.intersectSample.xy, pb.vec2(0), pb.vec2(1));\r\n this.$if(pb.greaterThan(this.hitAlpha, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(this.intersectTex, this.hitUV, 0);\r\n this.$l.indirectAlpha = pb.clamp(this.indirectIntersectSample.w, 0, 1);\r\n this.$l.indirectUV = pb.clamp(this.indirectIntersectSample.xy, pb.vec2(0), pb.vec2(1));\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.hitUV, 0);\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectAlpha, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectUV,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.hitUV,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectAlpha\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(this.hitUV, this.indirectRoughnessInfo);\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.hitUV, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.hitUV,\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.hitAlpha\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Resolve';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createTemporalProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.historyColorTex = pb.tex2D().uniform(0);\r\n this.currentColorTex = pb.tex2D().uniform(0);\r\n this.currentDepthTex = pb.tex2D().uniform(0);\r\n this.motionVector = pb.tex2D().uniform(0);\r\n this.prevMotionVector = pb.tex2D().uniform(0);\r\n this.texSize = pb.vec2().uniform(0);\r\n this.temporalWeight = pb.float().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.texSize);\r\n this.$l.currentColor = pb.textureSampleLevel(this.currentColorTex, this.screenUV, 0).rgb;\r\n this.$l.resolvedColor = temporalResolve(\r\n this,\r\n this.currentColorTex,\r\n this.historyColorTex,\r\n this.currentDepthTex,\r\n this.motionVector,\r\n this.prevMotionVector,\r\n this.screenUV,\r\n this.texSize,\r\n 0\r\n );\r\n this.$l.w = pb.clamp(this.temporalWeight, 0, 1);\r\n this.$outputs.outColor = pb.vec4(pb.mix(this.currentColor, this.resolvedColor, this.w), 1);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Temporal';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean): Nullable<GPUProgram> {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env!.light.envLight?.hasRadiance()) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n this.envLightSpecularStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.albedoTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.extraTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.ssrStrengthMode = pb.int().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveDeferredStrength',\r\n [pb.vec2('uv'), pb.vec4('roughnessValue'), pb.vec4('viewPosInfo')],\r\n function () {\r\n this.$l.roughness = pb.clamp(this.roughnessValue.a, 0.045, 1);\r\n this.$l.base = pb.textureSampleLevel(this.albedoTex, this.uv, 0);\r\n this.$if(pb.lessThanEqual(this.base.a, 1e-5), function () {\r\n this.$return(pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1)));\r\n });\r\n this.$l.viewPos = this.viewPosInfo.xyz;\r\n this.$l.viewVec = pb.neg(pb.normalize(this.viewPos));\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n this.$l.NoV = pb.clamp(pb.dot(this.viewNormal, this.viewVec), 0.0001, 1);\r\n this.$l.baseColor = this.base.rgb;\r\n this.$l.extra = pb.textureSampleLevel(this.extraTex, this.uv, 0);\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.roughnessValue.g, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.specularWeight = pb.clamp(this.extra.a, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specStrength), this.baseColor, this.metallic);\r\n this.$l.Fr = pb.sub(pb.max(pb.vec3(pb.sub(1, this.roughness)), this.f0), this.f0);\r\n this.$l.kS = pb.add(this.f0, pb.mul(this.Fr, pb.pow(pb.sub(1, this.NoV), 5)));\r\n this.$l.fab = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rg,\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.FssEss = pb.add(pb.mul(this.kS, this.fab.x), pb.vec3(this.fab.y));\r\n this.$return(\r\n pb.clamp(pb.mul(this.FssEss, this.occlusion, this.specularWeight), pb.vec3(0), pb.vec3(1))\r\n );\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float(0);\r\n this.$if(pb.lessThan(this.roughness, this.ssrMaxRoughness), function () {\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = pb.vec4(0);\r\n if (ctx.HiZTexture) {\r\n this.hitInfo = screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n );\r\n } else {\r\n this.hitInfo = screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.camera.ssrCalcThickness\r\n );\r\n }\r\n this.$l.hitAlpha = pb.clamp(this.hitInfo.w, 0, 1);\r\n this.$l.hitUV = pb.clamp(this.hitInfo.xy, pb.vec2(0), pb.vec2(1));\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitAlpha, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitAlpha;\r\n this.color = pb.vec3(this.hitUV, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env!.light.envLight?.hasRadiance()) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness)!,\r\n this.envLightStrength,\r\n this.envLightSpecularStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitUV, 0).rgb,\r\n this.hitAlpha\r\n );\r\n this.$l.reflectance = pb.div(this.$l.reflectance, pb.add(this.$l.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.vec3();\r\n this.$if(pb.equal(this.ssrStrengthMode, 0), function () {\r\n this.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n })\r\n .$elseif(pb.equal(this.ssrStrengthMode, 1), function () {\r\n this.$l.roughAtten = pb.clamp(\r\n pb.sub(1, pb.div(this.roughness, pb.max(this.ssrMaxRoughness, 1e-4))),\r\n 0,\r\n 1\r\n );\r\n this.$l.metallic = pb.clamp(this.roughnessValue.r, 0, 1);\r\n this.$l.specStrength = pb.clamp(this.roughnessValue.b, 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(0.04, this.specStrength), 1, this.metallic);\r\n this.$l.s = pb.mul(this.roughAtten, this.roughAtten, this.f0);\r\n this.strength = pb.vec3(this.s);\r\n })\r\n .$else(function () {\r\n this.strength = this.resolveDeferredStrength(\r\n this.screenUV,\r\n this.roughnessValue,\r\n this.pos\r\n );\r\n });\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n });\r\n if (!program) {\r\n return null;\r\n }\r\n program.name = blur ? '@SSR_Intersect_Blur' : '@SSR_Intersect';\r\n return program;\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_temporalProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_temporalBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","undefined","_createCombineProgrm","roughnessTexture","SSRRoughnessTexture","createBindGroup","bindGroupLayouts","linearSampler","nearestSampler","setTexture","SSRNormalTexture","getGGXLUT","setValue","ssrMaxRoughness","viewMatrix","Matrix4x4","invert","getProjectionMatrix","Vector4","width","height","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hasEnvRadiance","env","light","envLight","hasRadiance","hash","getHash","_createResolveProgram","bindGroup","normalTexture","worldMatrix","strength","specularStrength","updateBindGroup","intersect","blur","Number","HiZTexture","ssrCalcThickness","created","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","temporal","currentReflectTex","prevReflectTex","prevMotionVectorTex","outFramebuffer","_createTemporalProgram","motionVectorTexture","ssrTemporalWeight","setFramebuffer","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","intersectTex","ssrSceneColorTexture","sceneColorTexture","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","historyManager","getHistoryResourceManager","prevSSRReflectTex","tryGetPrevious","RGHistoryResources","SSR_REFLECT","prevSSRMotionVectorTex","SSR_MOTION_VECTOR","canTemporal","ssrTemporal","popDeviceStates","reflectanceSize","queueRetainedCommit","format","sizeMode","motionVectorSize","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","albedoTex","extraTex","normalTex","zGGXLut","targetSize","mat4","invProjMatrix","float","ssrStrengthMode","outColor","func","$l","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","div","sub","x","clipSpacePos","clamp","viewPos4","$return","xyz","w","roughness","roughnessValue","a","base","textureSampleLevel","lessThanEqual","rgb","vec3","getPosition","greaterThanEqual","viewPos","viewVec","normalize","worldNormal","viewNormal","NoV","dot","baseColor","extra","metallic","r","occlusion","g","specStrength","b","specularWeight","f0","mix","Fr","kS","pow","fab","rg","FssEss","reflectance","equal","$elseif","roughAtten","s","$else","resolveDeferredStrength","color","sceneColor","screenUV","fragCoord","roughnessInfo","combined","resolveSample","linearToGamma","name","initShaderBindings","invViewMatrix","envLightStrength","envLightSpecularStrength","wPos","mat","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","reflectSceneColor","alpha","intersectSample","lessThan","hitAlpha","hitUV","greaterThan","indirectIntersectSample","indirectAlpha","indirectUV","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","historyColorTex","currentColorTex","currentDepthTex","motionVector","prevMotionVector","texSize","temporalWeight","currentColor","resolvedColor","temporalResolve","cameraPos","projMatrix","hizTex","depthMipLevels","viewPosInfo","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
@@ -5,6 +5,7 @@ import '../material/blinn.js';
5
5
  import '../material/unlit.js';
6
6
  import '../material/particle.js';
7
7
  import { SubsurfaceProfile } from '../material/subsurfaceprofile.js';
8
+ import '../material/skin.js';
8
9
  import '@zephyr3d/device';
9
10
  import { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LIGHT_TYPE_RECT } from '../values.js';
10
11
  import '../material/meshmaterial.js';