@zephyr3d/scene 0.9.6 → 0.9.7

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