@zephyr3d/scene 0.9.25 → 0.9.27

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 (299) hide show
  1. package/dist/animation/animationset.js +92 -30
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  4. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  5. package/dist/animation/joint_dynamics/controller.js +7 -5
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  8. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  9. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  10. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  11. package/dist/animation/morphtrack.js +3 -4
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/skeleton.js +79 -25
  14. package/dist/animation/skeleton.js.map +1 -1
  15. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  16. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  17. package/dist/animation/spring/spring_collider.js +4 -3
  18. package/dist/animation/spring/spring_collider.js.map +1 -1
  19. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  20. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  21. package/dist/animation/spring/spring_particle.js +2 -0
  22. package/dist/animation/spring/spring_particle.js.map +1 -1
  23. package/dist/animation/spring/spring_system.js +11 -3
  24. package/dist/animation/spring/spring_system.js.map +1 -1
  25. package/dist/animation/spring_modifier.js +10 -0
  26. package/dist/animation/spring_modifier.js.map +1 -1
  27. package/dist/app/engine.js +53 -43
  28. package/dist/app/engine.js.map +1 -1
  29. package/dist/app/scriptingsystem.js +119 -6
  30. package/dist/app/scriptingsystem.js.map +1 -1
  31. package/dist/app/scriptregistry.js +3 -2
  32. package/dist/app/scriptregistry.js.map +1 -1
  33. package/dist/asset/assetmanager.js +284 -67
  34. package/dist/asset/assetmanager.js.map +1 -1
  35. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  36. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  37. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  38. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  39. package/dist/asset/model.js +184 -69
  40. package/dist/asset/model.js.map +1 -1
  41. package/dist/camera/camera.js +268 -44
  42. package/dist/camera/camera.js.map +1 -1
  43. package/dist/camera/perspectivecamera.js +3 -1
  44. package/dist/camera/perspectivecamera.js.map +1 -1
  45. package/dist/index.d.ts +9044 -5139
  46. package/dist/index.js +17 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/material/eye.js +932 -0
  49. package/dist/material/eye.js.map +1 -0
  50. package/dist/material/hair.js +917 -0
  51. package/dist/material/hair.js.map +1 -0
  52. package/dist/material/hairstrand.js +842 -0
  53. package/dist/material/hairstrand.js.map +1 -0
  54. package/dist/material/hairstrand_data.js +162 -0
  55. package/dist/material/hairstrand_data.js.map +1 -0
  56. package/dist/material/lambert.js +5 -2
  57. package/dist/material/lambert.js.map +1 -1
  58. package/dist/material/material.js +48 -10
  59. package/dist/material/material.js.map +1 -1
  60. package/dist/material/meshmaterial.js +120 -19
  61. package/dist/material/meshmaterial.js.map +1 -1
  62. package/dist/material/mixins/albedocolor.js +1 -1
  63. package/dist/material/mixins/albedocolor.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  65. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  67. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  71. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  72. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  73. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  74. package/dist/material/mixins/lit.js +106 -19
  75. package/dist/material/mixins/lit.js.map +1 -1
  76. package/dist/material/mixins/pbr/common.js +4 -4
  77. package/dist/material/mixins/pbr/common.js.map +1 -1
  78. package/dist/material/mixins/texture.js +48 -11
  79. package/dist/material/mixins/texture.js.map +1 -1
  80. package/dist/material/mtoon.js +6 -5
  81. package/dist/material/mtoon.js.map +1 -1
  82. package/dist/material/pbrblueprint.js +146 -28
  83. package/dist/material/pbrblueprint.js.map +1 -1
  84. package/dist/material/pbrblueprint_instance.js +501 -0
  85. package/dist/material/pbrblueprint_instance.js.map +1 -0
  86. package/dist/material/pbrmr.js +15 -16
  87. package/dist/material/pbrmr.js.map +1 -1
  88. package/dist/material/shader/helper.js +734 -23
  89. package/dist/material/shader/helper.js.map +1 -1
  90. package/dist/material/shader/terrain_blend.js +55 -0
  91. package/dist/material/shader/terrain_blend.js.map +1 -0
  92. package/dist/material/skin.js +192 -32
  93. package/dist/material/skin.js.map +1 -1
  94. package/dist/material/spriteblueprint.js +16 -1
  95. package/dist/material/spriteblueprint.js.map +1 -1
  96. package/dist/material/subsurfaceprofile.js +86 -23
  97. package/dist/material/subsurfaceprofile.js.map +1 -1
  98. package/dist/material/water.js +2059 -72
  99. package/dist/material/water.js.map +1 -1
  100. package/dist/posteffect/bloom.js +167 -7
  101. package/dist/posteffect/bloom.js.map +1 -1
  102. package/dist/posteffect/coloradjust.js +2 -1
  103. package/dist/posteffect/coloradjust.js.map +1 -1
  104. package/dist/posteffect/compositor.js.map +1 -1
  105. package/dist/posteffect/fxaa.js +2 -1
  106. package/dist/posteffect/fxaa.js.map +1 -1
  107. package/dist/posteffect/grayscale.js +3 -1
  108. package/dist/posteffect/grayscale.js.map +1 -1
  109. package/dist/posteffect/motionblur.js +664 -56
  110. package/dist/posteffect/motionblur.js.map +1 -1
  111. package/dist/posteffect/posteffect.js +12 -1
  112. package/dist/posteffect/posteffect.js.map +1 -1
  113. package/dist/posteffect/sao.js +46 -44
  114. package/dist/posteffect/sao.js.map +1 -1
  115. package/dist/posteffect/skinsss.js +368 -69
  116. package/dist/posteffect/skinsss.js.map +1 -1
  117. package/dist/posteffect/ssgi.js +16 -9
  118. package/dist/posteffect/ssgi.js.map +1 -1
  119. package/dist/posteffect/ssr.js +3 -0
  120. package/dist/posteffect/ssr.js.map +1 -1
  121. package/dist/posteffect/sss.js +121 -36
  122. package/dist/posteffect/sss.js.map +1 -1
  123. package/dist/posteffect/taa.js.map +1 -1
  124. package/dist/posteffect/tonemap.js +44 -1
  125. package/dist/posteffect/tonemap.js.map +1 -1
  126. package/dist/render/abuffer_oit.js +8 -2
  127. package/dist/render/abuffer_oit.js.map +1 -1
  128. package/dist/render/clipmap.js +156 -5
  129. package/dist/render/clipmap.js.map +1 -1
  130. package/dist/render/cull_visitor.js +20 -0
  131. package/dist/render/cull_visitor.js.map +1 -1
  132. package/dist/render/depthpass.js +36 -2
  133. package/dist/render/depthpass.js.map +1 -1
  134. package/dist/render/drawable_mixin.js +26 -1
  135. package/dist/render/drawable_mixin.js.map +1 -1
  136. package/dist/render/dualdepthpeeling_oit.js +3 -2
  137. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  138. package/dist/render/envlight.js +1 -1
  139. package/dist/render/envlight.js.map +1 -1
  140. package/dist/render/fbm_wavegenerator.js +6 -3
  141. package/dist/render/fbm_wavegenerator.js.map +1 -1
  142. package/dist/render/fft_wavegenerator.js +57 -15
  143. package/dist/render/fft_wavegenerator.js.map +1 -1
  144. package/dist/render/gerstner_wavegenerator.js +130 -20
  145. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  146. package/dist/render/globalbindgroup_allocator.js +3 -0
  147. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  148. package/dist/render/hzb.js +80 -22
  149. package/dist/render/hzb.js.map +1 -1
  150. package/dist/render/lightpass.js +6 -3
  151. package/dist/render/lightpass.js.map +1 -1
  152. package/dist/render/oit.js +29 -0
  153. package/dist/render/oit.js.map +1 -0
  154. package/dist/render/render_queue.js +39 -0
  155. package/dist/render/render_queue.js.map +1 -1
  156. package/dist/render/renderer.js +4 -0
  157. package/dist/render/renderer.js.map +1 -1
  158. package/dist/render/rendergraph/blackboard.js +1 -0
  159. package/dist/render/rendergraph/blackboard.js.map +1 -1
  160. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  161. package/dist/render/rendergraph/executor.js +2 -0
  162. package/dist/render/rendergraph/executor.js.map +1 -1
  163. package/dist/render/rendergraph/forward_plus_builder.js +379 -10
  164. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  165. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  166. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  167. package/dist/render/rendergraph/history_resources.js +8 -1
  168. package/dist/render/rendergraph/history_resources.js.map +1 -1
  169. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  170. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  171. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  172. package/dist/render/rendergraph/types.js.map +1 -1
  173. package/dist/render/shadow_mask_pass.js +73 -8
  174. package/dist/render/shadow_mask_pass.js.map +1 -1
  175. package/dist/render/sky.js +166 -126
  176. package/dist/render/sky.js.map +1 -1
  177. package/dist/render/underwater.js +624 -0
  178. package/dist/render/underwater.js.map +1 -0
  179. package/dist/render/water_caustics.js +1380 -0
  180. package/dist/render/water_caustics.js.map +1 -0
  181. package/dist/render/weightedblended_oit.js +3 -2
  182. package/dist/render/weightedblended_oit.js.map +1 -1
  183. package/dist/scene/basesprite.js +8 -0
  184. package/dist/scene/basesprite.js.map +1 -1
  185. package/dist/scene/batchgroup.js +3 -0
  186. package/dist/scene/batchgroup.js.map +1 -1
  187. package/dist/scene/environment.js +4 -1
  188. package/dist/scene/environment.js.map +1 -1
  189. package/dist/scene/hair.js +963 -0
  190. package/dist/scene/hair.js.map +1 -0
  191. package/dist/scene/light.js +5 -1
  192. package/dist/scene/light.js.map +1 -1
  193. package/dist/scene/mesh.js +481 -47
  194. package/dist/scene/mesh.js.map +1 -1
  195. package/dist/scene/meshdrawable.js +6 -0
  196. package/dist/scene/meshdrawable.js.map +1 -1
  197. package/dist/scene/msdftext.js +3 -0
  198. package/dist/scene/msdftext.js.map +1 -1
  199. package/dist/scene/msdftextsprite.js +3 -0
  200. package/dist/scene/msdftextsprite.js.map +1 -1
  201. package/dist/scene/particlesys.js +6 -0
  202. package/dist/scene/particlesys.js.map +1 -1
  203. package/dist/scene/scene.js +3 -0
  204. package/dist/scene/scene.js.map +1 -1
  205. package/dist/scene/scene_node.js +6 -1
  206. package/dist/scene/scene_node.js.map +1 -1
  207. package/dist/scene/terrain-cm/grass.js +3 -0
  208. package/dist/scene/terrain-cm/grass.js.map +1 -1
  209. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  210. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  211. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  212. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  213. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  214. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  215. package/dist/scene/water.js +546 -4
  216. package/dist/scene/water.js.map +1 -1
  217. package/dist/shaders/atmosphere.js.map +1 -1
  218. package/dist/shaders/diffusion.js +54 -0
  219. package/dist/shaders/diffusion.js.map +1 -0
  220. package/dist/shaders/shadow.js +33 -21
  221. package/dist/shaders/shadow.js.map +1 -1
  222. package/dist/shaders/temporal.js +71 -33
  223. package/dist/shaders/temporal.js.map +1 -1
  224. package/dist/shaders/water.js +22 -19
  225. package/dist/shaders/water.js.map +1 -1
  226. package/dist/shaders/water_medium.js +56 -0
  227. package/dist/shaders/water_medium.js.map +1 -0
  228. package/dist/shadow/dom.js +546 -0
  229. package/dist/shadow/dom.js.map +1 -0
  230. package/dist/shadow/pcf_opt.js +3 -5
  231. package/dist/shadow/pcf_opt.js.map +1 -1
  232. package/dist/shadow/pcf_pd.js +1 -1
  233. package/dist/shadow/pcf_pd.js.map +1 -1
  234. package/dist/shadow/receiver_bias.js +41 -0
  235. package/dist/shadow/receiver_bias.js.map +1 -0
  236. package/dist/shadow/shader.js +20 -60
  237. package/dist/shadow/shader.js.map +1 -1
  238. package/dist/shadow/shadow_impl.js +89 -0
  239. package/dist/shadow/shadow_impl.js.map +1 -1
  240. package/dist/shadow/shadow_region.js +1 -1
  241. package/dist/shadow/shadow_region.js.map +1 -1
  242. package/dist/shadow/shadowmapper.js +150 -37
  243. package/dist/shadow/shadowmapper.js.map +1 -1
  244. package/dist/shapes/shape.js +11 -2
  245. package/dist/shapes/shape.js.map +1 -1
  246. package/dist/shapes/sphere.js +50 -9
  247. package/dist/shapes/sphere.js.map +1 -1
  248. package/dist/utility/blueprint/common/constants.js +112 -2
  249. package/dist/utility/blueprint/common/constants.js.map +1 -1
  250. package/dist/utility/blueprint/material/func.js +142 -49
  251. package/dist/utility/blueprint/material/func.js.map +1 -1
  252. package/dist/utility/blueprint/material/ir.js +490 -25
  253. package/dist/utility/blueprint/material/ir.js.map +1 -1
  254. package/dist/utility/blueprint/material/texture.js +898 -4
  255. package/dist/utility/blueprint/material/texture.js.map +1 -1
  256. package/dist/utility/serialization/manager.js +434 -101
  257. package/dist/utility/serialization/manager.js.map +1 -1
  258. package/dist/utility/serialization/scene/animation.js +401 -5
  259. package/dist/utility/serialization/scene/animation.js.map +1 -1
  260. package/dist/utility/serialization/scene/batch.js +4 -0
  261. package/dist/utility/serialization/scene/batch.js.map +1 -1
  262. package/dist/utility/serialization/scene/camera.js +186 -26
  263. package/dist/utility/serialization/scene/camera.js.map +1 -1
  264. package/dist/utility/serialization/scene/common.js +26 -5
  265. package/dist/utility/serialization/scene/common.js.map +1 -1
  266. package/dist/utility/serialization/scene/hair.js +1141 -0
  267. package/dist/utility/serialization/scene/hair.js.map +1 -0
  268. package/dist/utility/serialization/scene/light.js +84 -4
  269. package/dist/utility/serialization/scene/light.js.map +1 -1
  270. package/dist/utility/serialization/scene/material.js +1867 -166
  271. package/dist/utility/serialization/scene/material.js.map +1 -1
  272. package/dist/utility/serialization/scene/mesh.js +231 -14
  273. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  274. package/dist/utility/serialization/scene/node.js +141 -7
  275. package/dist/utility/serialization/scene/node.js.map +1 -1
  276. package/dist/utility/serialization/scene/particle.js +4 -0
  277. package/dist/utility/serialization/scene/particle.js.map +1 -1
  278. package/dist/utility/serialization/scene/primitive.js +18 -0
  279. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  280. package/dist/utility/serialization/scene/sprite.js +4 -0
  281. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  282. package/dist/utility/serialization/scene/terrain.js +4 -0
  283. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  284. package/dist/utility/serialization/scene/text.js +4 -0
  285. package/dist/utility/serialization/scene/text.js.map +1 -1
  286. package/dist/utility/serialization/scene/water.js +1105 -21
  287. package/dist/utility/serialization/scene/water.js.map +1 -1
  288. package/dist/utility/serialization/types.js.map +1 -1
  289. package/dist/utility/shprojector.js +9 -8
  290. package/dist/utility/shprojector.js.map +1 -1
  291. package/dist/values.js +49 -2
  292. package/dist/values.js.map +1 -1
  293. package/package.json +3 -3
  294. package/dist/render/rendergraph/frame_graph_context.js +0 -41
  295. package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
  296. package/dist/shaders/ssgi.js +0 -63
  297. package/dist/shaders/ssgi.js.map +0 -1
  298. package/dist/shaders/ssgi_reprojection.js +0 -118
  299. package/dist/shaders/ssgi_reprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport type { PostEffectSetupContext } 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 {\r\n screenSpaceRayTracing_HiZ,\r\n screenSpaceRayTracing_Linear2D,\r\n SSR_calcJitter,\r\n SSR_interleavedGradientNoise\r\n} from '../shaders/ssr';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_FARTHER, DEPTH_FARTHEST, 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\nimport { FrameResources } from '../render/rendergraph/blackboard';\r\nimport type { RGExecuteContext, RGHandle, RGPassBuilder, RGTextureDesc } from '../render/rendergraph/types';\r\n\r\nconst DEBUG_HIZ_INTERSECT = false;\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 /** {@inheritDoc AbstractPostEffect.requireMotionVectorTexture} */\r\n requireMotionVectorTexture(ctx: DrawContext) {\r\n return !!ctx.camera.ssrTemporal;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireHiZTexture} */\r\n requireHiZTexture(ctx: DrawContext) {\r\n return !!ctx.camera.HiZ;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireSceneNormalTexture} */\r\n requireSceneNormalTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireSceneRoughnessTexture} */\r\n requireSceneRoughnessTexture() {\r\n return true;\r\n }\r\n /**\r\n * Declares SSR's internal steps (intersect, resolve, optional bilateral\r\n * blur, optional temporal resolve, combine) as individual render graph\r\n * passes, mirroring the sequence of {@link SSR.apply}.\r\n */\r\n setup(s: PostEffectSetupContext): RGHandle {\r\n const { graph, ctx, history } = s;\r\n const linearDepthHandle = s.blackboard.get(FrameResources.LinearDepth);\r\n // Reflected geometry must contribute its own radiance, not the fog the camera\r\n // ray picked up on the way to it, which would otherwise be applied twice:\r\n // once inside the reflection and again over the final image. Only published\r\n // when the scene has fog; without it SceneColor is already fog free.\r\n const noFogHandle = s.blackboard.get(FrameResources.SceneColorNoFog);\r\n const texDesc: RGTextureDesc = {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const readCommon = (builder: RGPassBuilder) => {\r\n if (linearDepthHandle) {\r\n builder.read(linearDepthHandle);\r\n }\r\n // Roughness/normal MRT outputs, HiZ and the scene color copy are reached\r\n // through DrawContext fields; the dependency list carries their handles.\r\n for (const dep of s.dependencies) {\r\n builder.read(dep);\r\n }\r\n };\r\n const getLinearDepth = (rg: RGExecuteContext) =>\r\n linearDepthHandle ? rg.getTexture<Texture2D>(linearDepthHandle) : ctx.linearDepthTexture!;\r\n\r\n // 1. Ray march the scene (HiZ or linear 2D) into the intersect texture.\r\n const intersectHandle = graph.addPass('SSR:Intersect', (builder) => {\r\n builder.read(s.input);\r\n readCommon(builder);\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:intersect' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSR:intersectFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(rg.getFramebuffer<FrameBuffer>(fb));\r\n this.intersect(ctx, rg.getTexture<Texture2D>(s.input), getLinearDepth(rg), true, false);\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n\r\n // 2. Resolve reflection color from the intersect result.\r\n const resolveHandle = graph.addPass('SSR:Resolve', (builder) => {\r\n builder.read(s.input);\r\n if (noFogHandle) {\r\n builder.read(noFogHandle);\r\n }\r\n builder.read(intersectHandle);\r\n readCommon(builder);\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:resolve' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSR:resolveFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(rg.getFramebuffer<FrameBuffer>(fb));\r\n const inputTex = rg.getTexture<Texture2D>(s.input);\r\n this.resolve(\r\n ctx,\r\n noFogHandle ? rg.getTexture<Texture2D>(noFogHandle) : (ctx.sceneColorTexture ?? inputTex),\r\n getLinearDepth(rg),\r\n rg.getTexture<Texture2D>(intersectHandle)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n\r\n // 3. Optional bilateral blur (horizontal + vertical), guided by the\r\n // per-pixel blur size stored in the intersect texture.\r\n let reflectHandle = resolveHandle;\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n reflectHandle = graph.addPass('SSR:Blur', (builder) => {\r\n builder.read(resolveHandle);\r\n builder.read(intersectHandle);\r\n readCommon(builder);\r\n const middle = builder.createTexture({ ...texDesc, label: 'SSR:blurH' });\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:blur' });\r\n const middleFB = builder.createFramebuffer({\r\n label: 'SSR:blurHFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: middle,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n const outFB = builder.createFramebuffer({\r\n label: 'SSR:blurFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n const intersectTex = rg.getTexture<Texture2D>(intersectHandle);\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, DEPTH_COMPARE_FARTHER);\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 rg.getTexture<Texture2D>(resolveHandle),\r\n rg.getFramebuffer<FrameBuffer>(middleFB)\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, DEPTH_COMPARE_FARTHER);\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 rg.getTexture<Texture2D>(middle),\r\n rg.getFramebuffer<FrameBuffer>(outFB)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n }\r\n\r\n // 4. Optional temporal resolve against last frame's reflection.\r\n const wantTemporal = !!ctx.camera.ssrTemporal;\r\n const motionVectorHandle = wantTemporal ? s.blackboard.get(FrameResources.MotionVector) : null;\r\n const historySize = { width: s.width, height: s.height };\r\n const prevReflectHandle =\r\n wantTemporal && history && motionVectorHandle\r\n ? history.importPreviousIfCompatible(graph, RGHistoryResources.SSR_REFLECT, texDesc, historySize)\r\n : null;\r\n const prevMotionVectorHandle =\r\n wantTemporal && history && motionVectorHandle\r\n ? history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSR_MOTION_VECTOR,\r\n texDesc,\r\n historySize\r\n )\r\n : null;\r\n if (motionVectorHandle && prevReflectHandle && prevMotionVectorHandle) {\r\n const blurredHandle = reflectHandle;\r\n reflectHandle = graph.addPass('SSR:Temporal', (builder) => {\r\n builder.read(blurredHandle);\r\n builder.read(prevReflectHandle);\r\n builder.read(prevMotionVectorHandle);\r\n builder.read(motionVectorHandle);\r\n readCommon(builder);\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:temporal' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSR:temporalFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n this.temporal(\r\n ctx,\r\n rg.getTexture<Texture2D>(blurredHandle),\r\n getLinearDepth(rg),\r\n rg.getTexture<Texture2D>(prevReflectHandle),\r\n rg.getTexture<Texture2D>(prevMotionVectorHandle),\r\n rg.getFramebuffer<FrameBuffer>(fb)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n }\r\n\r\n // 5. Combine reflections with the scene color and queue history commits.\r\n const finalReflectHandle = reflectHandle;\r\n return graph.addPass('PostEffect:SSR', (builder) => {\r\n builder.read(s.input);\r\n builder.read(finalReflectHandle);\r\n if (motionVectorHandle) {\r\n builder.read(motionVectorHandle);\r\n }\r\n readCommon(builder);\r\n const output = s.createOutput(builder, { needDepthAttachment: true });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(\r\n output.framebuffer ? rg.getFramebuffer<FrameBuffer>(output.framebuffer) : null\r\n );\r\n const inputTex = rg.getTexture<Texture2D>(s.input);\r\n const reflectanceTex = rg.getTexture<Texture2D>(finalReflectHandle);\r\n copyTexture(\r\n inputTex,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n this.combine(ctx, inputTex, reflectanceTex, output.srgbOutput);\r\n if (wantTemporal && history) {\r\n history.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 { width: reflectanceTex.width, height: reflectanceTex.height },\r\n reflectanceTex\r\n );\r\n if (ctx.motionVectorTexture) {\r\n history.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 { width: ctx.motionVectorTexture.width, height: ctx.motionVectorTexture.height },\r\n ctx.motionVectorTexture\r\n );\r\n }\r\n }\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return output.color;\r\n });\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 srcTex: Texture2D,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(srcTex.width, srcTex.height);\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(srcTex, 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.SceneRoughnessTexture!;\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.SceneNormalTexture!, 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, DEPTH_COMPARE_FARTHER));\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.SceneRoughnessTexture!;\r\n const normalTexture = ctx.SceneNormalTexture!;\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', ShaderHelper.getEnvLightLuminance(ctx));\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, DEPTH_COMPARE_FARTHER));\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.SceneRoughnessTexture!;\r\n const normalTexture = ctx.SceneNormalTexture!;\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (hasEnvRadiance) {\r\n bindGroup.setValue('envLightStrength', ShaderHelper.getEnvLightLuminance(ctx));\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 // Temporal jitter phase for the UE5-style fixed-step HZB march\r\n // (UE View.StateFrameIndexMod8).\r\n bindGroup.setValue('ssrFrameIndex', device.frameInfo.frameCounter % 8);\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, DEPTH_COMPARE_FARTHER));\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, DEPTH_COMPARE_FARTHER));\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, DEPTH_COMPARE_FARTHER);\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].getColorAttachments()[0] as Texture2D,\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, DEPTH_COMPARE_FARTHER);\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].getColorAttachments()[0] as Texture2D,\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, DEPTH_FARTHEST, 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 // Linear depth is r32f/rg32f and is only sampled with nearest\r\n // filtering, so it must use the non-filtering float sample type on\r\n // adapters without float32-filterable.\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').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 = ShaderHelper.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 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, DEPTH_FARTHEST, 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().sampleType('unfilterable-float').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 = ShaderHelper.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 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, DEPTH_FARTHEST, 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, DEPTH_FARTHEST, 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().sampleType('unfilterable-float').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 // Hi-Z is r32f and is sampled with a nearest sampler. Do not\r\n // require the optional float32-filterable feature just to bind it.\r\n this.hizTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n this.ssrFrameIndex = pb.float().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 = ShaderHelper.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 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 // UE5-style temporal jitter of the fixed-step march; the\r\n // temporal resolve pass converges the resulting noise.\r\n this.$l.ssrStepOffset = pb.sub(\r\n SSR_interleavedGradientNoise(this, this.$builtins.fragCoord.xy, this.ssrFrameIndex),\r\n 0.5\r\n );\r\n // Nudge the ray origin off the surface along the normal so the\r\n // grazing-angle march does not self-intersect the reflector's\r\n // quantized depth staircase (regular stripe artifacts). Scales\r\n // with view distance to track depth precision; same idea as the\r\n // SSGI ray-origin bias.\r\n this.$l.ssrRayOrigin = pb.add(\r\n this.viewPos,\r\n pb.mul(pb.normalize(this.viewNormal), pb.max(0.01, pb.mul(pb.neg(this.viewPos.z), 0.002)))\r\n );\r\n this.hitInfo = screenSpaceRayTracing_HiZ(\r\n this,\r\n this.ssrRayOrigin,\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.x,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex,\r\n undefined,\r\n this.roughness,\r\n this.ssrStepOffset\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 if (ctx.HiZTexture && DEBUG_HIZ_INTERSECT) {\r\n this.a = this.hizDebug.a;\r\n this.color = this.hizDebug.rgb;\r\n } else {\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.x, this.targetSize.y)\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 }\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":["DEBUG_HIZ_INTERSECT","SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_temporalProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_temporalBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","requireMotionVectorTexture","ctx","camera","ssrTemporal","requireHiZTexture","HiZ","requireSceneNormalTexture","requireSceneRoughnessTexture","setup","s","graph","history","linearDepthHandle","blackboard","get","FrameResources","LinearDepth","noFogHandle","SceneColorNoFog","texDesc","format","sizeMode","width","height","readCommon","builder","read","dep","dependencies","getLinearDepth","rg","getTexture","linearDepthTexture","intersectHandle","addPass","input","out","createTexture","label","fb","createFramebuffer","colorAttachments","depthAttachment","sceneDepthAttachment","ignoreDepthStencil","setExecute","device","pushDeviceStates","setFramebuffer","getFramebuffer","intersect","popDeviceStates","resolveHandle","inputTex","resolve","sceneColorTexture","reflectHandle","ssrBlurScale","ssrBlurKernelSize","middle","middleFB","outFB","intersectTex","blurSizeScale","kernelRadius","Math","max","stdDev","ssrBlurStdDev","depthCutoff","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","getDefaultRenderState","DEPTH_COMPARE_FARTHER","blurPass","blitterV","wantTemporal","motionVectorHandle","MotionVector","historySize","prevReflectHandle","importPreviousIfCompatible","RGHistoryResources","SSR_REFLECT","prevMotionVectorHandle","SSR_MOTION_VECTOR","blurredHandle","temporal","finalReflectHandle","output","createOutput","needDepthAttachment","framebuffer","reflectanceTex","copyTexture","fetchSampler","combine","srgbOutput","queueRetainedCommit","motionVectorTexture","color","blitter","blurSizeTex","blurSizeIndex","srcTex","fbTo","size","Vector2","depthTex","sampler","cameraNearFar","setXY","getNearPlane","getFarPlane","srgbOut","blit","inputColorTexture","program","undefined","_createCombineProgrm","roughnessTexture","SceneRoughnessTexture","createBindGroup","bindGroupLayouts","linearSampler","nearestSampler","setTexture","SceneNormalTexture","getGGXLUT","setValue","ssrMaxRoughness","viewMatrix","Matrix4x4","invert","getProjectionMatrix","Vector4","needFlip","setProgram","setBindGroup","drawFullscreenQuad","sceneDepthTexture","intersectTexture","hasEnvRadiance","env","light","envLight","hasRadiance","hash","getHash","_createResolveProgram","bindGroup","normalTexture","worldMatrix","ShaderHelper","getEnvLightLuminance","specularStrength","updateBindGroup","blur","Number","HiZTexture","ssrCalcThickness","created","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","frameInfo","frameCounter","ssrStride","currentReflectTex","prevReflectTex","prevMotionVectorTex","outFramebuffer","_createTemporalProgram","ssrTemporalWeight","apply","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","getColorAttachments","ssrSceneColorTexture","historyManager","getHistoryResourceManager","prevSSRReflectTex","tryGetPrevious","prevSSRMotionVectorTex","canTemporal","reflectanceSize","motionVectorSize","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","DEPTH_FARTHEST","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","albedoTex","extraTex","normalTex","sampleType","zGGXLut","targetSize","mat4","invProjMatrix","float","ssrStrengthMode","outColor","func","$l","linearDepth","sampleLinearDepth","nonLinearDepth","linearNormalizedToNonLinearDepth","clipSpacePos","sub","deviceDepthToClipZ","clamp","viewPos4","$return","div","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","FssEss","x","reflectance","strength","equal","$elseif","roughAtten","$else","resolveDeferredStrength","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","ssrFrameIndex","viewPosInfo","hitInfo","ssrStepOffset","SSR_interleavedGradientNoise","ssrRayOrigin","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 type { PostEffectSetupContext } 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 {\r\n screenSpaceRayTracing_HiZ,\r\n screenSpaceRayTracing_Linear2D,\r\n SSR_calcJitter,\r\n SSR_interleavedGradientNoise\r\n} from '../shaders/ssr';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_FARTHER, DEPTH_FARTHEST, 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\nimport { FrameResources } from '../render/rendergraph/blackboard';\r\nimport type { RGExecuteContext, RGHandle, RGPassBuilder, RGTextureDesc } from '../render/rendergraph/types';\r\n\r\nconst DEBUG_HIZ_INTERSECT = false;\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 /** {@inheritDoc AbstractPostEffect.requireMotionVectorTexture} */\r\n requireMotionVectorTexture(ctx: DrawContext) {\r\n return !!ctx.camera.ssrTemporal;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireHiZTexture} */\r\n requireHiZTexture(ctx: DrawContext) {\r\n return !!ctx.camera.HiZ;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireSceneNormalTexture} */\r\n requireSceneNormalTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireSceneRoughnessTexture} */\r\n requireSceneRoughnessTexture() {\r\n return true;\r\n }\r\n /**\r\n * Declares SSR's internal steps (intersect, resolve, optional bilateral\r\n * blur, optional temporal resolve, combine) as individual render graph\r\n * passes, mirroring the sequence of {@link SSR.apply}.\r\n */\r\n setup(s: PostEffectSetupContext): RGHandle {\r\n const { graph, ctx, history } = s;\r\n const linearDepthHandle = s.blackboard.get(FrameResources.LinearDepth);\r\n // Reflected geometry must contribute its own radiance, not the fog the camera\r\n // ray picked up on the way to it, which would otherwise be applied twice:\r\n // once inside the reflection and again over the final image. Only published\r\n // when the scene has fog; without it SceneColor is already fog free.\r\n const noFogHandle = s.blackboard.get(FrameResources.SceneColorNoFog);\r\n const texDesc: RGTextureDesc = {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const readCommon = (builder: RGPassBuilder) => {\r\n if (linearDepthHandle) {\r\n builder.read(linearDepthHandle);\r\n }\r\n // Roughness/normal MRT outputs, HiZ and the scene color copy are reached\r\n // through DrawContext fields; the dependency list carries their handles.\r\n for (const dep of s.dependencies) {\r\n builder.read(dep);\r\n }\r\n };\r\n const getLinearDepth = (rg: RGExecuteContext) =>\r\n linearDepthHandle ? rg.getTexture<Texture2D>(linearDepthHandle) : ctx.linearDepthTexture!;\r\n\r\n // 1. Ray march the scene (HiZ or linear 2D) into the intersect texture.\r\n const intersectHandle = graph.addPass('SSR:Intersect', (builder) => {\r\n builder.read(s.input);\r\n readCommon(builder);\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:intersect' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSR:intersectFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(rg.getFramebuffer(fb));\r\n this.intersect(ctx, rg.getTexture<Texture2D>(s.input), getLinearDepth(rg), true, false);\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n\r\n // 2. Resolve reflection color from the intersect result.\r\n const resolveHandle = graph.addPass('SSR:Resolve', (builder) => {\r\n builder.read(s.input);\r\n if (noFogHandle) {\r\n builder.read(noFogHandle);\r\n }\r\n builder.read(intersectHandle);\r\n readCommon(builder);\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:resolve' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSR:resolveFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(rg.getFramebuffer(fb));\r\n const inputTex = rg.getTexture<Texture2D>(s.input);\r\n this.resolve(\r\n ctx,\r\n noFogHandle ? rg.getTexture<Texture2D>(noFogHandle) : (ctx.sceneColorTexture ?? inputTex),\r\n getLinearDepth(rg),\r\n rg.getTexture<Texture2D>(intersectHandle)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n\r\n // 3. Optional bilateral blur (horizontal + vertical), guided by the\r\n // per-pixel blur size stored in the intersect texture.\r\n let reflectHandle = resolveHandle;\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n reflectHandle = graph.addPass('SSR:Blur', (builder) => {\r\n builder.read(resolveHandle);\r\n builder.read(intersectHandle);\r\n readCommon(builder);\r\n const middle = builder.createTexture({ ...texDesc, label: 'SSR:blurH' });\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:blur' });\r\n const middleFB = builder.createFramebuffer({\r\n label: 'SSR:blurHFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: middle,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n const outFB = builder.createFramebuffer({\r\n label: 'SSR:blurFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n const intersectTex = rg.getTexture<Texture2D>(intersectHandle);\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, DEPTH_COMPARE_FARTHER);\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 rg.getTexture<Texture2D>(resolveHandle),\r\n rg.getFramebuffer(middleFB)\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, DEPTH_COMPARE_FARTHER);\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 rg.getTexture<Texture2D>(middle),\r\n rg.getFramebuffer(outFB)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n }\r\n\r\n // 4. Optional temporal resolve against last frame's reflection.\r\n const wantTemporal = !!ctx.camera.ssrTemporal;\r\n const motionVectorHandle = wantTemporal ? s.blackboard.get(FrameResources.MotionVector) : null;\r\n const historySize = { width: s.width, height: s.height };\r\n const prevReflectHandle =\r\n wantTemporal && history && motionVectorHandle\r\n ? history.importPreviousIfCompatible(graph, RGHistoryResources.SSR_REFLECT, texDesc, historySize)\r\n : null;\r\n const prevMotionVectorHandle =\r\n wantTemporal && history && motionVectorHandle\r\n ? history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSR_MOTION_VECTOR,\r\n texDesc,\r\n historySize\r\n )\r\n : null;\r\n if (motionVectorHandle && prevReflectHandle && prevMotionVectorHandle) {\r\n const blurredHandle = reflectHandle;\r\n reflectHandle = graph.addPass('SSR:Temporal', (builder) => {\r\n builder.read(blurredHandle);\r\n builder.read(prevReflectHandle);\r\n builder.read(prevMotionVectorHandle);\r\n builder.read(motionVectorHandle);\r\n readCommon(builder);\r\n const out = builder.createTexture({ ...texDesc, label: 'SSR:temporal' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSR:temporalFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: s.sceneDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n this.temporal(\r\n ctx,\r\n rg.getTexture<Texture2D>(blurredHandle),\r\n getLinearDepth(rg),\r\n rg.getTexture<Texture2D>(prevReflectHandle),\r\n rg.getTexture<Texture2D>(prevMotionVectorHandle),\r\n rg.getFramebuffer(fb)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n }\r\n\r\n // 5. Combine reflections with the scene color and queue history commits.\r\n const finalReflectHandle = reflectHandle;\r\n return graph.addPass('PostEffect:SSR', (builder) => {\r\n builder.read(s.input);\r\n builder.read(finalReflectHandle);\r\n if (motionVectorHandle) {\r\n builder.read(motionVectorHandle);\r\n }\r\n readCommon(builder);\r\n const output = s.createOutput(builder, { needDepthAttachment: true });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(output.framebuffer ? rg.getFramebuffer(output.framebuffer) : null);\r\n const inputTex = rg.getTexture<Texture2D>(s.input);\r\n const reflectanceTex = rg.getTexture<Texture2D>(finalReflectHandle);\r\n copyTexture(\r\n inputTex,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n this.combine(ctx, inputTex, reflectanceTex, output.srgbOutput);\r\n if (wantTemporal && history) {\r\n history.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 { width: reflectanceTex.width, height: reflectanceTex.height },\r\n reflectanceTex\r\n );\r\n if (ctx.motionVectorTexture) {\r\n history.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 { width: ctx.motionVectorTexture.width, height: ctx.motionVectorTexture.height },\r\n ctx.motionVectorTexture\r\n );\r\n }\r\n }\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return output.color;\r\n });\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 srcTex: Texture2D,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(srcTex.width, srcTex.height);\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(srcTex, 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.SceneRoughnessTexture!;\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.SceneNormalTexture!, 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, DEPTH_COMPARE_FARTHER));\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.SceneRoughnessTexture!;\r\n const normalTexture = ctx.SceneNormalTexture!;\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', ShaderHelper.getEnvLightLuminance(ctx));\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, DEPTH_COMPARE_FARTHER));\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.SceneRoughnessTexture!;\r\n const normalTexture = ctx.SceneNormalTexture!;\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (hasEnvRadiance) {\r\n bindGroup.setValue('envLightStrength', ShaderHelper.getEnvLightLuminance(ctx));\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 // Temporal jitter phase for the UE5-style fixed-step HZB march\r\n // (UE View.StateFrameIndexMod8).\r\n bindGroup.setValue('ssrFrameIndex', device.frameInfo.frameCounter % 8);\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, DEPTH_COMPARE_FARTHER));\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, DEPTH_COMPARE_FARTHER));\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, DEPTH_COMPARE_FARTHER);\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].getColorAttachments()[0] as Texture2D,\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, DEPTH_COMPARE_FARTHER);\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].getColorAttachments()[0] as Texture2D,\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, DEPTH_FARTHEST, 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 // Linear depth is r32f/rg32f and is only sampled with nearest\r\n // filtering, so it must use the non-filtering float sample type on\r\n // adapters without float32-filterable.\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').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 = ShaderHelper.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 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, DEPTH_FARTHEST, 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().sampleType('unfilterable-float').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 = ShaderHelper.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 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, DEPTH_FARTHEST, 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, DEPTH_FARTHEST, 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().sampleType('unfilterable-float').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 // Hi-Z is r32f and is sampled with a nearest sampler. Do not\r\n // require the optional float32-filterable feature just to bind it.\r\n this.hizTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n this.ssrFrameIndex = pb.float().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 = ShaderHelper.linearNormalizedToNonLinearDepth(\r\n this,\r\n this.linearDepth,\r\n this.cameraNearFar\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n ShaderHelper.deviceDepthToClipZ(this, pb.clamp(this.nonLinearDepth, 0, 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 // UE5-style temporal jitter of the fixed-step march; the\r\n // temporal resolve pass converges the resulting noise.\r\n this.$l.ssrStepOffset = pb.sub(\r\n SSR_interleavedGradientNoise(this, this.$builtins.fragCoord.xy, this.ssrFrameIndex),\r\n 0.5\r\n );\r\n // Nudge the ray origin off the surface along the normal so the\r\n // grazing-angle march does not self-intersect the reflector's\r\n // quantized depth staircase (regular stripe artifacts). Scales\r\n // with view distance to track depth precision; same idea as the\r\n // SSGI ray-origin bias.\r\n this.$l.ssrRayOrigin = pb.add(\r\n this.viewPos,\r\n pb.mul(pb.normalize(this.viewNormal), pb.max(0.01, pb.mul(pb.neg(this.viewPos.z), 0.002)))\r\n );\r\n this.hitInfo = screenSpaceRayTracing_HiZ(\r\n this,\r\n this.ssrRayOrigin,\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.x,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex,\r\n undefined,\r\n this.roughness,\r\n this.ssrStepOffset\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 if (ctx.HiZTexture && DEBUG_HIZ_INTERSECT) {\r\n this.a = this.hizDebug.a;\r\n this.color = this.hizDebug.rgb;\r\n } else {\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.x, this.targetSize.y)\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 }\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":["DEBUG_HIZ_INTERSECT","SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_temporalProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_temporalBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","requireMotionVectorTexture","ctx","camera","ssrTemporal","requireHiZTexture","HiZ","requireSceneNormalTexture","requireSceneRoughnessTexture","setup","s","graph","history","linearDepthHandle","blackboard","get","FrameResources","LinearDepth","noFogHandle","SceneColorNoFog","texDesc","format","sizeMode","width","height","readCommon","builder","read","dep","dependencies","getLinearDepth","rg","getTexture","linearDepthTexture","intersectHandle","addPass","input","out","createTexture","label","fb","createFramebuffer","colorAttachments","depthAttachment","sceneDepthAttachment","ignoreDepthStencil","setExecute","device","pushDeviceStates","setFramebuffer","getFramebuffer","intersect","popDeviceStates","resolveHandle","inputTex","resolve","sceneColorTexture","reflectHandle","ssrBlurScale","ssrBlurKernelSize","middle","middleFB","outFB","intersectTex","blurSizeScale","kernelRadius","Math","max","stdDev","ssrBlurStdDev","depthCutoff","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","getDefaultRenderState","DEPTH_COMPARE_FARTHER","blurPass","blitterV","wantTemporal","motionVectorHandle","MotionVector","historySize","prevReflectHandle","importPreviousIfCompatible","RGHistoryResources","SSR_REFLECT","prevMotionVectorHandle","SSR_MOTION_VECTOR","blurredHandle","temporal","finalReflectHandle","output","createOutput","needDepthAttachment","framebuffer","reflectanceTex","copyTexture","fetchSampler","combine","srgbOutput","queueRetainedCommit","motionVectorTexture","color","blitter","blurSizeTex","blurSizeIndex","srcTex","fbTo","size","Vector2","depthTex","sampler","cameraNearFar","setXY","getNearPlane","getFarPlane","srgbOut","blit","inputColorTexture","program","undefined","_createCombineProgrm","roughnessTexture","SceneRoughnessTexture","createBindGroup","bindGroupLayouts","linearSampler","nearestSampler","setTexture","SceneNormalTexture","getGGXLUT","setValue","ssrMaxRoughness","viewMatrix","Matrix4x4","invert","getProjectionMatrix","Vector4","needFlip","setProgram","setBindGroup","drawFullscreenQuad","sceneDepthTexture","intersectTexture","hasEnvRadiance","env","light","envLight","hasRadiance","hash","getHash","_createResolveProgram","bindGroup","normalTexture","worldMatrix","ShaderHelper","getEnvLightLuminance","specularStrength","updateBindGroup","blur","Number","HiZTexture","ssrCalcThickness","created","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","frameInfo","frameCounter","ssrStride","currentReflectTex","prevReflectTex","prevMotionVectorTex","outFramebuffer","_createTemporalProgram","ssrTemporalWeight","apply","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","getColorAttachments","ssrSceneColorTexture","historyManager","getHistoryResourceManager","prevSSRReflectTex","tryGetPrevious","prevSSRMotionVectorTex","canTemporal","reflectanceSize","motionVectorSize","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","DEPTH_FARTHEST","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","albedoTex","extraTex","normalTex","sampleType","zGGXLut","targetSize","mat4","invProjMatrix","float","ssrStrengthMode","outColor","func","$l","linearDepth","sampleLinearDepth","nonLinearDepth","linearNormalizedToNonLinearDepth","clipSpacePos","sub","deviceDepthToClipZ","clamp","viewPos4","$return","div","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","FssEss","x","reflectance","strength","equal","$elseif","roughAtten","$else","resolveDeferredStrength","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","ssrFrameIndex","viewPosInfo","hitInfo","ssrStepOffset","SSR_interleavedGradientNoise","ssrRayOrigin","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}