@zephyr3d/scene 0.9.26 → 0.10.0

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 (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ssgi.js","sources":["../../src/posteffect/ssgi.ts"],"sourcesContent":["import { DEPTH_FARTHEST, Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { FrameResources } from '../render/rendergraph/blackboard';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\nimport type { RGHandle, RGPassBuilder, RGTextureDesc } from '../render/rendergraph/types';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D } from '../shaders/ssr';\r\nimport { ShaderHelper } from '../material';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport type { PostEffectSetupContext } from './posteffect';\r\n\r\nconst IRRADIANCE_FORMAT = 'rgba16f' as const;\r\nconst SURFACE_FORMAT = 'rgba16f' as const;\r\nconst MOMENTS_FORMAT = 'rgba16f' as const;\r\n// AO is scalar; r16f is available wherever SSGI runs.\r\nconst AO_FORMAT = 'r16f' as const;\r\nconst HALF_FLOAT_MAX = 65504;\r\n// Keep squared luminance below the rgba16f range.\r\nconst MOMENT_LUMINANCE_MAX = 255;\r\n\r\n/**\r\n * Screen-space diffuse global illumination.\r\n *\r\n * @public\r\n */\r\nexport class SSGI extends AbstractPostEffect {\r\n private static _tracePrograms: Record<string, GPUProgram> = {};\r\n private static _temporalPrograms: Record<string, GPUProgram> = {};\r\n private static _atrousProgram: GPUProgram | null = null;\r\n private static _surfaceProgram: GPUProgram | null = null;\r\n private static _upsampleProgram: GPUProgram | null = null;\r\n private static _compositePrograms: Record<string, GPUProgram> = {};\r\n\r\n private _traceBindGroups: Record<string, BindGroup> = {};\r\n private _temporalBindGroups: Record<string, BindGroup> = {};\r\n private _atrousBindGroups: Record<string, BindGroup> = {};\r\n private _surfaceBindGroups: Record<string, BindGroup> = {};\r\n private _upsampleBindGroups: Record<string, BindGroup> = {};\r\n private _compositeBindGroups: Record<string, BindGroup> = {};\r\n\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI;\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireMotionVectorTexture} */\r\n requireMotionVectorTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI && ctx.device.type !== 'webgl';\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireHiZTexture} */\r\n requireHiZTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI && ctx.device.type !== 'webgl';\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireSceneNormalTexture} */\r\n requireSceneNormalTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI;\r\n }\r\n\r\n /** Build trace, temporal, denoise, upsample, history and pass-through stages. */\r\n setup(s: PostEffectSetupContext): RGHandle {\r\n const { graph, ctx, history, blackboard } = s;\r\n if (!ctx.SSGI || !history) {\r\n return s.input;\r\n }\r\n const linearDepthHandle = blackboard.get(FrameResources.LinearDepth);\r\n const normalHandle = blackboard.get(FrameResources.SceneNormal);\r\n const motionHandle = blackboard.get(FrameResources.MotionVector);\r\n const hiZHandle = blackboard.get(FrameResources.HiZ);\r\n // Traced hits read this as outgoing surface radiance, so it must exclude the\r\n // fog the camera ray accumulated: that fog belongs to a different path than\r\n // the one being integrated, and feeding it back would brighten every bounce.\r\n // Absent when the scene has no fog, in which case SceneColor is already fog\r\n // free. Both the sampled color and the committed history use it, otherwise\r\n // the current and previous frames would disagree and flicker.\r\n const noFogHandle = blackboard.get(FrameResources.SceneColorNoFog);\r\n const sampleColorHandle = noFogHandle ?? s.input;\r\n if (!linearDepthHandle || !normalHandle) {\r\n return s.input;\r\n }\r\n\r\n const settings = ctx.camera.ssgiResolvedSettings;\r\n const traceWidth = settings.halfRes ? Math.max(1, Math.ceil(s.width * 0.5)) : s.width;\r\n const traceHeight = settings.halfRes ? Math.max(1, Math.ceil(s.height * 0.5)) : s.height;\r\n const traceSize = { width: traceWidth, height: traceHeight };\r\n const fullSize = { width: s.width, height: s.height };\r\n const traceDesc: RGTextureDesc = {\r\n format: IRRADIANCE_FORMAT,\r\n sizeMode: 'absolute',\r\n width: traceWidth,\r\n height: traceHeight\r\n };\r\n const fullIrradianceDesc: RGTextureDesc = {\r\n format: IRRADIANCE_FORMAT,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const surfaceDesc: RGTextureDesc = {\r\n format: SURFACE_FORMAT,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const momentsDesc: RGTextureDesc = {\r\n format: MOMENTS_FORMAT,\r\n sizeMode: 'absolute',\r\n width: traceWidth,\r\n height: traceHeight\r\n };\r\n const aoTraceDesc: RGTextureDesc = {\r\n format: AO_FORMAT,\r\n sizeMode: 'absolute',\r\n width: traceWidth,\r\n height: traceHeight\r\n };\r\n const fullAODesc: RGTextureDesc = {\r\n format: AO_FORMAT,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n\r\n const findHistoryRead = (name: string) =>\r\n s.historyReads.find((binding) => binding.name === name)?.handle ?? null;\r\n const previousIrradianceHandle = findHistoryRead(RGHistoryResources.SSGI_IRRADIANCE);\r\n const previousSurfaceHandle = findHistoryRead(RGHistoryResources.SSGI_SURFACE);\r\n const previousMomentsHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_MOMENTS,\r\n momentsDesc,\r\n traceSize\r\n );\r\n // Only this effect's own temporal pass reads the AO history, so it is\r\n // imported directly instead of being routed through the light pass history\r\n // read bindings the way irradiance and surface are.\r\n const previousAOHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_AO,\r\n aoTraceDesc,\r\n traceSize\r\n );\r\n // Reprojecting last frame's colour needs motion vectors, which the WebGL1\r\n // backend does not produce. WebGL2 and WebGPU both do, so both take the\r\n // multi-bounce path.\r\n const previousSceneColorHandle =\r\n ctx.device.type !== 'webgl'\r\n ? history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_SCENE_COLOR,\r\n {\r\n format: s.colorFormat,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n },\r\n fullSize\r\n )\r\n : null;\r\n const canSampleSceneHistory = !!(previousSceneColorHandle && previousSurfaceHandle && motionHandle);\r\n\r\n const readFrameInputs = (builder: RGPassBuilder) => {\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n if (motionHandle) {\r\n builder.read(motionHandle);\r\n }\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n for (const dep of s.dependencies) {\r\n builder.read(dep);\r\n }\r\n };\r\n\r\n // Trace one or two cosine-weighted diffuse rays. A hit prefers the previous\r\n // frame through previousHitUV = hitUV - motion(hitUV) for multi-bounce\r\n // feedback and falls back to the current frame when that reprojection fails.\r\n const traceResult = graph.addPass('SSGI:Trace', (builder) => {\r\n builder.read(sampleColorHandle);\r\n readFrameInputs(builder);\r\n if (canSampleSceneHistory) {\r\n builder.read(previousSceneColorHandle!);\r\n builder.read(previousSurfaceHandle!);\r\n }\r\n const out = builder.createTexture({ ...traceDesc, label: 'SSGI:rawIrradiance' });\r\n const ao = builder.createTexture({ ...aoTraceDesc, label: 'SSGI:rawAO' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:traceFB',\r\n width: traceWidth,\r\n height: traceHeight,\r\n colorAttachments: [out, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.trace(\r\n ctx,\r\n rg.getTexture<Texture2D>(sampleColorHandle),\r\n canSampleSceneHistory ? rg.getTexture<Texture2D>(previousSceneColorHandle!) : null,\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle),\r\n canSampleSceneHistory ? rg.getTexture<Texture2D>(motionHandle!) : null,\r\n canSampleSceneHistory ? rg.getTexture<Texture2D>(previousSurfaceHandle!) : null,\r\n hiZHandle ? rg.getTexture<Texture2D>(hiZHandle) : null,\r\n traceWidth,\r\n traceHeight\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance: out, ao };\r\n });\r\n\r\n // Store the current full-resolution surface independently from irradiance;\r\n // no albedo MRT is needed because the next lighting pass applies the BRDF.\r\n const surfaceHandle = graph.addPass('SSGI:Surface', (builder) => {\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n const out = builder.createTexture({ ...surfaceDesc, label: 'SSGI:surface' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:surfaceFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.writeSurface(\r\n ctx,\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n\r\n const canTemporal = !!(\r\n ctx.device.type !== 'webgl' &&\r\n ctx.camera.ssgiTemporal &&\r\n motionHandle &&\r\n previousIrradianceHandle &&\r\n previousSurfaceHandle &&\r\n previousMomentsHandle &&\r\n previousAOHandle\r\n );\r\n\r\n // Temporal pass always creates moments. On the first frame it simply\r\n // initializes them; with valid history it rejects by depth and normal,\r\n // neighborhood-clamps radiance, and accumulates first/second moments.\r\n const temporalResult = graph.addPass('SSGI:Temporal', (builder) => {\r\n builder.read(traceResult.irradiance);\r\n builder.read(traceResult.ao);\r\n readFrameInputs(builder);\r\n if (canTemporal) {\r\n builder.read(previousIrradianceHandle!);\r\n builder.read(previousSurfaceHandle!);\r\n builder.read(previousMomentsHandle!);\r\n builder.read(previousAOHandle!);\r\n }\r\n const irradiance = builder.createTexture({ ...traceDesc, label: 'SSGI:temporalIrradiance' });\r\n const moments = builder.createTexture({ ...momentsDesc, label: 'SSGI:moments' });\r\n const ao = builder.createTexture({ ...aoTraceDesc, label: 'SSGI:temporalAO' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:temporalFB',\r\n width: traceWidth,\r\n height: traceHeight,\r\n colorAttachments: [irradiance, moments, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.temporal(\r\n ctx,\r\n rg.getTexture<Texture2D>(traceResult.irradiance),\r\n rg.getTexture<Texture2D>(traceResult.ao),\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle),\r\n canTemporal ? rg.getTexture<Texture2D>(motionHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousIrradianceHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousSurfaceHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousMomentsHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousAOHandle!) : null,\r\n traceWidth,\r\n traceHeight\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance, moments, ao };\r\n });\r\n\r\n // Variance-guided, cross-bilateral a-trous filtering. The increasing\r\n // kernel step removes low-frequency Monte Carlo noise while depth/normal\r\n // weights preserve discontinuities.\r\n let filteredHandle = temporalResult.irradiance;\r\n let filteredAOHandle = temporalResult.ao;\r\n for (let pass = 0; pass < settings.denoisePasses; pass++) {\r\n const source = filteredHandle;\r\n const aoSource = filteredAOHandle;\r\n const filtered = graph.addPass(`SSGI:ATrous:${pass}`, (builder) => {\r\n builder.read(source);\r\n builder.read(aoSource);\r\n builder.read(temporalResult.moments);\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n const out = builder.createTexture({ ...traceDesc, label: `SSGI:atrous${pass}` });\r\n const ao = builder.createTexture({ ...aoTraceDesc, label: `SSGI:atrousAO${pass}` });\r\n const fb = builder.createFramebuffer({\r\n label: `SSGI:atrousFB${pass}`,\r\n width: traceWidth,\r\n height: traceHeight,\r\n colorAttachments: [out, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.atrous(\r\n ctx,\r\n rg.getTexture<Texture2D>(source),\r\n rg.getTexture<Texture2D>(aoSource),\r\n rg.getTexture<Texture2D>(temporalResult.moments),\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle),\r\n traceWidth,\r\n traceHeight,\r\n 1 << pass,\r\n canTemporal\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance: out, ao };\r\n });\r\n filteredHandle = filtered.irradiance;\r\n filteredAOHandle = filtered.ao;\r\n }\r\n\r\n // Half-resolution presets use a joint bilateral upsample before history is\r\n // consumed by full-resolution materials on the next frame.\r\n let finalIrradianceHandle = filteredHandle;\r\n let finalAOHandle = filteredAOHandle;\r\n if (settings.halfRes) {\r\n const source = filteredHandle;\r\n const aoSource = filteredAOHandle;\r\n const upsampled = graph.addPass('SSGI:Upsample', (builder) => {\r\n builder.read(source);\r\n builder.read(aoSource);\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n const out = builder.createTexture({ ...fullIrradianceDesc, label: 'SSGI:upsampledIrradiance' });\r\n const ao = builder.createTexture({ ...fullAODesc, label: 'SSGI:upsampledAO' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:upsampleFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: [out, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.upsample(\r\n ctx,\r\n rg.getTexture<Texture2D>(source),\r\n rg.getTexture<Texture2D>(aoSource),\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance: out, ao };\r\n });\r\n finalIrradianceHandle = upsampled.irradiance;\r\n finalAOHandle = upsampled.ao;\r\n }\r\n\r\n // Pinned before the commit closure captures it: the a-trous loop above\r\n // reassigns the handle, and the AO history has to be the trace-resolution\r\n // one regardless of whether an upsample ran.\r\n const traceResolutionAOHandle = filteredAOHandle;\r\n\r\n // SSGI history is independent from TAA/SSR history. Commit the opaque HDR\r\n // SceneColor input (before SSR/transparency/tone-map/AA), irradiance,\r\n // surface and moments, then pass SceneColor through unchanged.\r\n return graph.addPass('SSGI:Commit', (builder) => {\r\n builder.read(s.input);\r\n if (noFogHandle) {\r\n builder.read(noFogHandle);\r\n }\r\n builder.read(finalIrradianceHandle);\r\n builder.read(finalAOHandle);\r\n // The trace-resolution AO is what goes back into history, so it has to be\r\n // read here too even when the upsampled one is what gets composited.\r\n builder.read(traceResolutionAOHandle);\r\n builder.read(surfaceHandle);\r\n builder.read(temporalResult.moments);\r\n const output = s.createOutput(builder);\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 sceneColor = rg.getTexture<Texture2D>(s.input);\r\n const irradiance = rg.getTexture<Texture2D>(finalIrradianceHandle);\r\n const ao = rg.getTexture<Texture2D>(finalAOHandle);\r\n const filteredAO = rg.getTexture<Texture2D>(traceResolutionAOHandle);\r\n const surface = rg.getTexture<Texture2D>(surfaceHandle);\r\n const moments = rg.getTexture<Texture2D>(temporalResult.moments);\r\n if (ctx.camera.ssgiAOIntensity > 0) {\r\n this.compositeAO(ctx, sceneColor, ao, output.srgbOutput);\r\n } else {\r\n this.passThrough(ctx, sceneColor, output.srgbOutput);\r\n }\r\n if (ctx.device.type !== 'webgl') {\r\n // Commit the same fog-free color the trace sampled, so next frame's\r\n // reprojected history is on the same footing as this frame's fallback.\r\n this.commitHistory(\r\n history,\r\n RGHistoryResources.SSGI_SCENE_COLOR,\r\n rg.getTexture<Texture2D>(sampleColorHandle)\r\n );\r\n }\r\n this.commitHistory(history, RGHistoryResources.SSGI_IRRADIANCE, irradiance);\r\n this.commitHistory(history, RGHistoryResources.SSGI_SURFACE, surface);\r\n this.commitHistory(history, RGHistoryResources.SSGI_MOMENTS, moments);\r\n // Committed at trace resolution: the temporal pass that consumes it\r\n // runs before the upsample, so a full-resolution AO would fail the\r\n // descriptor compatibility check and silently disable accumulation.\r\n this.commitHistory(history, RGHistoryResources.SSGI_AO, filteredAO);\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return output.color;\r\n });\r\n }\r\n\r\n /** @internal */\r\n private commitHistory(\r\n history: NonNullable<PostEffectSetupContext['history']>,\r\n name: string,\r\n texture: Texture2D\r\n ) {\r\n history.queueRetainedCommit(\r\n name,\r\n {\r\n format: texture.format,\r\n sizeMode: 'absolute',\r\n width: texture.width,\r\n height: texture.height\r\n },\r\n { width: texture.width, height: texture.height },\r\n texture\r\n );\r\n }\r\n\r\n /** @internal */\r\n private trace(\r\n ctx: DrawContext,\r\n currentColor: Texture2D,\r\n previousColor: Texture2D | null,\r\n depth: Texture2D,\r\n normal: Texture2D,\r\n motion: Texture2D | null,\r\n previousSurface: Texture2D | null,\r\n hiZ: Texture2D | null,\r\n width: number,\r\n height: number\r\n ) {\r\n const sampleHistory = !!(previousColor && motion && previousSurface);\r\n const envHash = ctx.env!.light.getHash();\r\n const historyHash = sampleHistory ? `${previousColor!.uid}:${motion!.uid}:${previousSurface!.uid}` : '';\r\n const hizHash = hiZ ? `${hiZ.uid}` : '';\r\n const programHash = `${sampleHistory ? '1' : '0'}:${hiZ ? '1' : '0'}:${ctx.camera.ssgiResolvedSettings.raysPerPixel}:${envHash}`;\r\n const bindGroupHash = `${currentColor.uid}:${depth.uid}:${normal.uid}:(${historyHash}):(${hizHash}):${ctx.camera.ssgiResolvedSettings.raysPerPixel}:${envHash}`;\r\n let program = SSGI._tracePrograms[programHash];\r\n if (!program) {\r\n program = this.createTraceProgram(ctx, !!hiZ, sampleHistory);\r\n SSGI._tracePrograms[programHash] = program;\r\n }\r\n const colorSampler = fetchSampler(\r\n ctx.device.type === 'webgl' ? 'clamp_nearest_nomip' : 'clamp_linear_nomip'\r\n );\r\n let bindGroup = this._traceBindGroups[bindGroupHash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('currentColorTex', currentColor, colorSampler);\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n if (sampleHistory) {\r\n bindGroup.setTexture('previousColorTex', previousColor!, colorSampler);\r\n bindGroup.setTexture('motionTex', motion!, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('previousSurfaceTex', previousSurface!, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n if (hiZ) {\r\n bindGroup.setTexture('hizTex', hiZ, fetchSampler('clamp_nearest'));\r\n bindGroup.setValue('depthMipLevels', hiZ.mipLevelCount);\r\n }\r\n this._traceBindGroups[bindGroupHash] = bindGroup;\r\n }\r\n if (sampleHistory) {\r\n bindGroup.setValue(\r\n 'historyRejectParams',\r\n new Vector2(ctx.camera.ssgiDepthReject, ctx.camera.ssgiNormalReject)\r\n );\r\n }\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue(\r\n 'traceParams',\r\n new Vector4(\r\n ctx.camera.ssgiMaxDistance,\r\n ctx.camera.ssgiThickness,\r\n ctx.camera.ssgiResolvedSettings.maxSteps,\r\n ctx.camera.ssgiStride\r\n )\r\n );\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(width, height, hiZ?.width ?? depth.width, hiZ?.height ?? depth.height)\r\n );\r\n bindGroup.setValue(\r\n 'radianceParams',\r\n new Vector4(\r\n ctx.camera.ssgiIntensity,\r\n ctx.camera.ssgiMaxRayIntensity,\r\n ShaderHelper.getEnvLightLuminance(ctx),\r\n ctx.device.frameInfo.frameCounter\r\n )\r\n );\r\n bindGroup.setValue('skyOcclusion', ctx.camera.ssgiSkyOcclusion);\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private temporal(\r\n ctx: DrawContext,\r\n current: Texture2D,\r\n currentAO: Texture2D,\r\n depth: Texture2D,\r\n normal: Texture2D,\r\n motion: Texture2D | null,\r\n previousIrradiance: Texture2D | null,\r\n previousSurface: Texture2D | null,\r\n previousMoments: Texture2D | null,\r\n previousAO: Texture2D | null,\r\n width: number,\r\n height: number\r\n ) {\r\n const hasHistory = !!(motion && previousIrradiance && previousSurface && previousMoments && previousAO);\r\n const hash = hasHistory\r\n ? `history:${current.uid}:${currentAO.uid}:${depth.uid}:${normal.uid}:${motion!.uid}:${previousIrradiance!.uid}:${previousSurface.uid}:${previousMoments.uid}:${previousAO!.uid}`\r\n : `initialize:${current.uid}:${currentAO.uid}:${depth.uid}:${normal.uid}`;\r\n let program = SSGI._temporalPrograms[hash];\r\n if (!program) {\r\n program = this.createTemporalProgram(ctx, hasHistory);\r\n SSGI._temporalPrograms[hash] = program;\r\n }\r\n let bindGroup = this._temporalBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('currentTex', current, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('currentAOTex', currentAO, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n if (hasHistory) {\r\n bindGroup.setTexture('motionTex', motion!, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture(\r\n 'previousIrradianceTex',\r\n previousIrradiance!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bindGroup.setTexture('previousSurfaceTex', previousSurface!, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('previousMomentsTex', previousMoments!, fetchSampler('clamp_linear_nomip'));\r\n // Linear is safe here: this branch never runs on WebGL1, and both\r\n // WebGL2 and WebGPU filter r16f unconditionally. The read is at a\r\n // reprojected UV.\r\n bindGroup.setTexture('previousAOTex', previousAO!, fetchSampler('clamp_linear_nomip'));\r\n }\r\n this._temporalBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue('targetSize', new Vector4(width, height, depth.width, depth.height));\r\n bindGroup.setValue(\r\n 'temporalParams',\r\n new Vector4(\r\n ctx.camera.ssgiTemporalWeight,\r\n ctx.camera.ssgiDepthReject,\r\n ctx.camera.ssgiNormalReject,\r\n ctx.camera.getFarPlane()\r\n )\r\n );\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private atrous(\r\n ctx: DrawContext,\r\n source: Texture2D,\r\n aoSource: Texture2D,\r\n moments: Texture2D,\r\n depth: Texture2D,\r\n normal: Texture2D,\r\n width: number,\r\n height: number,\r\n step: number,\r\n hasTemporalHistory: boolean\r\n ) {\r\n let program = SSGI._atrousProgram;\r\n if (!program) {\r\n program = this.createAtrousProgram(ctx);\r\n SSGI._atrousProgram = program;\r\n }\r\n const hash = `atrous:${source.uid}:${aoSource.uid}:${moments.uid}:${depth.uid}:${normal.uid}`;\r\n let bindGroup = this._atrousBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('sourceTex', source, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('aoSourceTex', aoSource, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('momentsTex', moments, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n this._atrousBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue('targetSize', new Vector4(width, height, depth.width, depth.height));\r\n bindGroup.setValue(\r\n 'filterParams',\r\n new Vector4(\r\n step,\r\n Math.max(0.001, ctx.camera.ssgiDepthReject),\r\n Math.max(1, ctx.camera.ssgiNormalReject * 32),\r\n 4\r\n )\r\n );\r\n // Number of accumulated frames a pixel needs before its variance estimate is\r\n // trusted. Zero disables the ramp for paths that never build history, where\r\n // the stored length is pinned at 1 and would read as permanently new.\r\n bindGroup.setValue('denoiseParams', new Vector4(hasTemporalHistory ? 8 : 0, 0, 0, 0));\r\n bindGroup.setValue('cameraFar', ctx.camera.getFarPlane());\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private writeSurface(ctx: DrawContext, depth: Texture2D, normal: Texture2D) {\r\n let program = SSGI._surfaceProgram;\r\n if (!program) {\r\n program = this.createSurfaceProgram(ctx);\r\n SSGI._surfaceProgram = program;\r\n }\r\n const hash = `${depth.uid}:${normal.uid}`;\r\n let bindGroup = this._surfaceBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('targetSize', new Vector2(depth.width, depth.height));\r\n this._surfaceBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue('cameraFar', ctx.camera.getFarPlane());\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private upsample(\r\n ctx: DrawContext,\r\n source: Texture2D,\r\n aoSource: Texture2D,\r\n depth: Texture2D,\r\n normal: Texture2D\r\n ) {\r\n let program = SSGI._upsampleProgram;\r\n if (!program) {\r\n program = this.createUpsampleProgram(ctx);\r\n SSGI._upsampleProgram = program;\r\n }\r\n const hash = `${source.uid}:${aoSource.uid}:${depth.uid}:${normal.uid}`;\r\n let bindGroup = this._upsampleBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('sourceTex', source, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('aoSourceTex', aoSource, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('targetSize', new Vector4(source.width, source.height, depth.width, depth.height));\r\n this._upsampleBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue(\r\n 'guideParams',\r\n new Vector4(\r\n Math.max(0.001, ctx.camera.ssgiDepthReject),\r\n Math.max(1, ctx.camera.ssgiNormalReject * 32),\r\n ctx.camera.getFarPlane(),\r\n 0\r\n )\r\n );\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private createTraceProgram(ctx: DrawContext, useHiZ: boolean, sampleHistory: boolean) {\r\n const raysPerPixel = ctx.camera.ssgiResolvedSettings.raysPerPixel;\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.currentColorTex = pb.tex2D().uniform(0);\r\n // Linear depth is r32f (or rg32f when thickness is enabled). These\r\n // formats are not filterable without the optional float32-filterable\r\n // feature, and all SSGI depth reads use a nearest sampler.\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n if (sampleHistory) {\r\n this.previousColorTex = pb.tex2D().uniform(0);\r\n this.motionTex = pb.tex2D().uniform(0);\r\n this.previousSurfaceTex = pb.tex2D().uniform(0);\r\n this.historyRejectParams = pb.vec2().uniform(0);\r\n }\r\n if (useHiZ) {\r\n // Hi-Z is stored as r32f. It is only read with a nearest sampler,\r\n // so use the unfilterable sample type for adapters without the\r\n // optional float32-filterable feature (notably some AMD iGPUs).\r\n this.hizTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n }\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.traceParams = pb.vec4().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.radianceParams = pb.vec4().uniform(0);\r\n this.skyOcclusion = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n this.$outputs.outColor = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.func('SSGI_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.clipPos = 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.viewPos = pb.mul(this.invProjMatrix, this.clipPos);\r\n this.$return(pb.vec4(pb.div(this.viewPos.xyz, this.viewPos.w), this.linearDepth));\r\n });\r\n pb.func('SSGI_hash22', [pb.vec2('p'), pb.float('seed')], function () {\r\n this.$l.q = pb.vec2(pb.dot(this.p, pb.vec2(127.1, 311.7)), pb.dot(this.p, pb.vec2(269.5, 183.3)));\r\n this.$return(pb.fract(pb.mul(pb.sin(pb.add(this.q, this.seed)), 43758.5453)));\r\n });\r\n pb.func('SSGI_cosineDirection', [pb.vec3('n'), pb.vec2('xi')], function () {\r\n this.$l.up = this.$choice(pb.lessThan(pb.abs(this.n.z), 0.999), pb.vec3(0, 0, 1), pb.vec3(1, 0, 0));\r\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.n));\r\n this.$l.bitangent = pb.cross(this.n, this.tangent);\r\n this.$l.r = pb.sqrt(this.xi.x);\r\n this.$l.phi = pb.mul(2 * Math.PI, this.xi.y);\r\n this.$l.local = pb.vec3(\r\n pb.mul(this.r, pb.cos(this.phi)),\r\n pb.mul(this.r, pb.sin(this.phi)),\r\n pb.sqrt(pb.max(0, pb.sub(1, this.xi.x)))\r\n );\r\n this.$return(\r\n pb.normalize(\r\n pb.add(\r\n pb.mul(this.tangent, this.local.x),\r\n pb.mul(this.bitangent, this.local.y),\r\n pb.mul(this.n, this.local.z)\r\n )\r\n )\r\n );\r\n });\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.pos = this.SSGI_getPosition(this.uv);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$outputs.outColor = pb.vec4(0);\r\n // Sky is unoccluded. Its irradiance validity is zero, so this value\r\n // is never read as a weight, but it must not be a dark texel: the\r\n // a-trous and upsample kernels reach across the silhouette.\r\n this.$outputs.outAO = pb.vec4(1);\r\n }).$else(function () {\r\n this.$l.worldNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n // Use the SH-integrated diffuse IBL as an exact, noise-free\r\n // baseline. Stochastic rays only estimate the screen-space\r\n // replacement relative to the environment in the same direction.\r\n //\r\n // getIrradiance returns the cosine-convolved SH, which already\r\n // carries the 1/PI of the Lambert BRDF: materials consume it as\r\n // k_D * irradiance with no further division, matching punctual\r\n // lights that apply 1/PI explicitly. The published history is mixed\r\n // against that same value in the lighting pass, so this baseline\r\n // must stay in those units and must not be scaled by PI.\r\n this.$l.iblIrradiance = pb.mul(\r\n ctx.env!.light.envLight.getIrradiance(this, this.worldNormal),\r\n this.radianceParams.z\r\n );\r\n this.$l.correctionSum = pb.vec3(0);\r\n // Rays whose outcome the depth buffer cannot resolve (they left the\r\n // screen or ran out of iterations behind geometry) are excluded from\r\n // the average instead of counted as unoccluded sky.\r\n this.$l.determinateSum = pb.float(0);\r\n this.$l.escapedSum = pb.float(0);\r\n // Ambient occlusion reuses the very same visibility measurement the\r\n // sky removal is built on, so the two can never disagree. No extra\r\n // ray march: only this accumulator is new.\r\n this.$l.occludedSum = pb.float(0);\r\n this.$for(pb.float('rayIndex'), 0, raysPerPixel, function () {\r\n this.$l.xi = this.SSGI_hash22(\r\n pb.add(pb.mul(this.uv, this.targetSize.xy), pb.vec2(this.rayIndex, pb.mul(this.rayIndex, 7))),\r\n pb.add(this.radianceParams.w, pb.mul(this.rayIndex, 17))\r\n );\r\n this.$l.worldRay = this.SSGI_cosineDirection(this.worldNormal, this.xi);\r\n this.$l.viewRay = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldRay, 0)).xyz);\r\n this.$l.rayOrigin = pb.add(this.pos.xyz, pb.mul(this.viewNormal, this.traceParams.y, 0.25));\r\n // vec3(occluded, escaped, rawConfidence) - see screenSpaceRayTracing_Linear2D.\r\n this.$l.giTrace = pb.vec3(0);\r\n if (useHiZ) {\r\n // UE5 SSGI: diffuse rays march with RayRoughness = 1 (fast mip\r\n // ramp) and StepOffset = noise - 0.9. A dedicated hash keeps\r\n // the jitter decorrelated from the direction sample.\r\n this.$l.stepOffset = pb.sub(\r\n this.SSGI_hash22(\r\n pb.add(pb.mul(this.uv, this.targetSize.xy), pb.vec2(pb.mul(this.rayIndex, 23), 11)),\r\n pb.add(this.radianceParams.w, pb.mul(this.rayIndex, 29))\r\n ).x,\r\n 0.9\r\n );\r\n this.$l.hit = screenSpaceRayTracing_HiZ(\r\n this,\r\n this.rayOrigin,\r\n this.viewRay,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.traceParams.z,\r\n this.traceParams.x,\r\n this.traceParams.y,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex,\r\n this.giTrace,\r\n 1,\r\n this.stepOffset\r\n );\r\n } else {\r\n this.$l.hit = screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.rayOrigin,\r\n this.viewRay,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.traceParams.x,\r\n this.traceParams.z,\r\n this.traceParams.y,\r\n this.traceParams.w,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n false,\r\n this.giTrace\r\n );\r\n }\r\n // Grazing/projectively degenerate rays can return Inf or NaN.\r\n // A zero weight is not sufficient because NaN * 0 remains NaN and\r\n // the spatial passes then spread it into a dark block.\r\n this.$l.hitFinite = pb.all(pb.lessThan(pb.abs(this.hit), pb.vec4(1e30)));\r\n // Visibility and radiance are kept apart: whether the ray was\r\n // blocked is independent of whether the blocker's outgoing\r\n // radiance can be read back from the screen. Geometric certainty\r\n // gates occlusion so a thin-object false positive cannot darken,\r\n // while the hit's screen colour is always a usable radiance\r\n // estimate because the marcher only ever stops on-screen.\r\n this.$l.occluded = pb.mul(\r\n pb.float(this.hitFinite),\r\n pb.clamp(this.giTrace.x, 0, 1),\r\n pb.clamp(this.giTrace.z, 0, 1)\r\n );\r\n this.$l.escaped = pb.mul(pb.float(this.hitFinite), pb.clamp(this.giTrace.y, 0, 1));\r\n this.$l.hitUV = this.$choice(\r\n pb.greaterThan(this.occluded, 0),\r\n pb.clamp(this.hit.xy, pb.vec2(0), pb.vec2(1)),\r\n this.uv\r\n );\r\n this.$l.rawEnvRadiance = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.worldRay, pb.float(0))!,\r\n this.radianceParams.z\r\n );\r\n this.$l.envRadiance = this.$choice(\r\n pb.all(pb.lessThan(pb.abs(this.rawEnvRadiance), pb.vec3(1e30))),\r\n this.rawEnvRadiance,\r\n pb.vec3(0)\r\n );\r\n this.$l.currentRadiance = pb.textureSampleLevel(this.currentColorTex, this.hitUV, 0).rgb;\r\n if (sampleHistory) {\r\n this.$l.hitMotion = pb.textureSampleLevel(this.motionTex, this.hitUV, 0).xy;\r\n this.$l.previousHitUV = pb.sub(this.hitUV, this.hitMotion);\r\n this.$l.historyValid = pb.and(\r\n pb.all(pb.greaterThanEqual(this.previousHitUV, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.previousHitUV, pb.vec2(1))),\r\n pb.all(pb.lessThan(pb.abs(this.hitMotion), pb.vec2(5e4)))\r\n );\r\n this.$l.historyRadiance = pb.textureSampleLevel(\r\n this.previousColorTex,\r\n pb.clamp(this.previousHitUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rgb;\r\n this.$l.currentHitDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.hitUV, 0),\r\n this.cameraNearFar.y\r\n );\r\n this.$l.currentHitNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.hitUV, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.previousHitSurface = pb.textureSampleLevel(\r\n this.previousSurfaceTex,\r\n pb.clamp(this.previousHitUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.previousHitNormal = pb.normalize(\r\n pb.sub(pb.mul(this.previousHitSurface.rgb, 2), pb.vec3(1))\r\n );\r\n this.historyValid = pb.and(\r\n this.historyValid,\r\n pb.lessThanEqual(\r\n pb.abs(pb.sub(this.previousHitSurface.a, this.currentHitDepth)),\r\n this.historyRejectParams.x\r\n ),\r\n pb.greaterThanEqual(\r\n pb.dot(this.currentHitNormal, this.previousHitNormal),\r\n this.historyRejectParams.y\r\n )\r\n );\r\n // Prefer the reprojected previous frame for multi-bounce\r\n // feedback, but fall back to this frame's already-shaded opaque\r\n // colour rather than dropping the sample. Losing one bounce of\r\n // feedback is a far smaller error than reverting to unoccluded\r\n // IBL, which is what made newly disoccluded regions flash.\r\n this.$l.screenRadiance = this.$choice(\r\n this.historyValid,\r\n this.historyRadiance,\r\n this.currentRadiance\r\n );\r\n } else {\r\n this.$l.screenRadiance = this.currentRadiance;\r\n }\r\n this.$l.screenRadianceFinite = pb.all(pb.lessThan(pb.abs(this.screenRadiance), pb.vec3(1e30)));\r\n this.screenRadiance = this.$choice(\r\n this.screenRadianceFinite,\r\n this.screenRadiance,\r\n this.envRadiance\r\n );\r\n this.$l.maxComponent = pb.max(\r\n pb.max(this.screenRadiance.r, this.screenRadiance.g),\r\n this.screenRadiance.b\r\n );\r\n this.$l.fireflyScale = this.$choice(\r\n pb.greaterThan(this.maxComponent, this.radianceParams.y),\r\n pb.div(this.radianceParams.y, pb.max(this.maxComponent, 1e-5)),\r\n pb.float(1)\r\n );\r\n this.$l.clampedScreenRadiance = pb.mul(this.screenRadiance, this.fireflyScale);\r\n // Split the correction into the bounce the blocker adds and the sky\r\n // it takes away. The bounce is always kept: the hit is on-screen, so\r\n // its colour is a real measurement. Only the removal is scaled by\r\n // skyOcclusion, which lets the sky be dimmed less than physically\r\n // implied without also discarding measured bounce light.\r\n this.$l.bounceGain = pb.max(pb.sub(this.clampedScreenRadiance, this.envRadiance), pb.vec3(0));\r\n this.$l.skyLoss = pb.mul(\r\n pb.max(pb.sub(this.envRadiance, this.clampedScreenRadiance), pb.vec3(0)),\r\n this.skyOcclusion\r\n );\r\n // Cosine-weighted sampling makes the estimator of E/PI - the unit\r\n // the baseline and the lighting pass both use - the plain mean of\r\n // the sampled radiance, so no PI appears here either.\r\n this.$l.correction = pb.mul(\r\n pb.sub(this.bounceGain, this.skyLoss),\r\n this.occluded,\r\n this.radianceParams.x\r\n );\r\n this.correctionSum = pb.add(this.correctionSum, this.correction);\r\n this.determinateSum = pb.add(this.determinateSum, pb.max(this.occluded, this.escaped));\r\n this.escapedSum = pb.add(this.escapedSum, this.escaped);\r\n this.occludedSum = pb.add(this.occludedSum, this.occluded);\r\n });\r\n // Average over resolved rays only. Dividing by raysPerPixel would\r\n // implicitly treat every indeterminate ray as an unoccluded sky\r\n // sample, which is the systematic sky leak this pass has to avoid.\r\n this.$l.determinateCount = pb.max(this.determinateSum, 1);\r\n this.$l.irradiance = pb.add(\r\n this.iblIrradiance,\r\n pb.div(this.correctionSum, this.determinateCount)\r\n );\r\n // radianceParams.x blends the traced estimate over the IBL baseline. A finite-ray\r\n // correction can have much higher variance than the integrated physical sky and must\r\n // not remove more than that blend permits (at the default 0.7, at least 30% remains).\r\n // That reserved share is itself scaled by measured visibility, otherwise no amount of\r\n // occlusion could ever darken an enclosed corner.\r\n this.$l.minimumIrradiance = pb.mul(\r\n this.iblIrradiance,\r\n pb.max(0, pb.sub(1, this.radianceParams.x)),\r\n pb.mix(pb.float(1), pb.div(this.escapedSum, this.determinateCount), this.skyOcclusion)\r\n );\r\n // Clamp before the render-target conversion: a finite value that overflows becomes Inf\r\n // in the texture, and every a-trous pass then expands the contaminated region by its\r\n // kernel radius. Pre-exposed lighting makes this unlikely, but a bright emissive hit\r\n // amplified by a low-probability ray can still reach it.\r\n this.$l.boundedIrradiance = pb.clamp(\r\n pb.max(this.irradiance, this.minimumIrradiance),\r\n pb.vec3(0),\r\n pb.vec3(HALF_FLOAT_MAX)\r\n );\r\n this.$outputs.outColor = pb.vec4(this.boundedIrradiance, 1);\r\n // Cosine-weighted sampling makes the mean of `occluded` over the\r\n // resolved rays an unbiased estimate of cosine-weighted visibility.\r\n // Averaging over the determinate set - not raysPerPixel - is what\r\n // keeps an indeterminate ray from reading as unoccluded, the same\r\n // reasoning the irradiance average uses above.\r\n this.$outputs.outAO = pb.vec4(\r\n pb.clamp(pb.sub(1, pb.div(this.occludedSum, this.determinateCount)), 0, 1)\r\n );\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_Trace';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createTemporalProgram(ctx: DrawContext, hasHistory: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n 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.currentTex = pb.tex2D().uniform(0);\r\n this.currentAOTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n if (hasHistory) {\r\n this.motionTex = pb.tex2D().uniform(0);\r\n this.previousIrradianceTex = pb.tex2D().uniform(0);\r\n this.previousSurfaceTex = pb.tex2D().uniform(0);\r\n this.previousMomentsTex = pb.tex2D().uniform(0);\r\n this.previousAOTex = pb.tex2D().uniform(0);\r\n }\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.temporalParams = pb.vec4().uniform(0);\r\n this.$outputs.outIrradiance = pb.vec4();\r\n this.$outputs.outMoments = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.func('SSGI_luminance', [pb.vec3('c')], function () {\r\n this.$l.boundedLuminance = pb.clamp(\r\n pb.dot(this.c, pb.vec3(0.2126, 0.7152, 0.0722)),\r\n 0,\r\n MOMENT_LUMINANCE_MAX\r\n );\r\n this.$return(this.boundedLuminance);\r\n });\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.current = pb.textureSampleLevel(this.currentTex, this.uv, 0);\r\n this.$l.currentAO = pb.textureSampleLevel(this.currentAOTex, this.uv, 0).r;\r\n this.$l.result = this.current.rgb;\r\n this.$l.resultAO = this.currentAO;\r\n this.$l.luminance = this.SSGI_luminance(this.current.rgb);\r\n this.$l.moment = pb.vec4(this.luminance, pb.mul(this.luminance, this.luminance), 1, 0);\r\n if (hasHistory) {\r\n this.$l.motion = pb.textureSampleLevel(this.motionTex, this.uv, 0).xy;\r\n this.$l.previousUV = pb.sub(this.uv, this.motion);\r\n this.$l.validUV = pb.and(\r\n pb.all(pb.greaterThanEqual(this.previousUV, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.previousUV, pb.vec2(1))),\r\n pb.all(pb.lessThan(pb.abs(this.motion), pb.vec2(5e4)))\r\n );\r\n this.$l.currentDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.temporalParams.w\r\n );\r\n this.$l.currentNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.previousSurface = pb.textureSampleLevel(\r\n this.previousSurfaceTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.previousNormal = pb.normalize(pb.sub(pb.mul(this.previousSurface.rgb, 2), pb.vec3(1)));\r\n this.$l.surfaceValid = pb.and(\r\n pb.lessThanEqual(\r\n pb.abs(pb.sub(this.previousSurface.a, this.currentDepth)),\r\n this.temporalParams.y\r\n ),\r\n pb.greaterThanEqual(pb.dot(this.currentNormal, this.previousNormal), this.temporalParams.z)\r\n );\r\n this.$l.neighborhoodMin = this.current.rgb;\r\n this.$l.neighborhoodMax = this.current.rgb;\r\n this.$l.aoNeighborhoodMin = this.currentAO;\r\n this.$l.aoNeighborhoodMax = this.currentAO;\r\n for (let y = -1; y <= 1; y++) {\r\n for (let x = -1; x <= 1; x++) {\r\n if (x === 0 && y === 0) {\r\n continue;\r\n }\r\n this.$l.neighborUV = pb.add(this.uv, pb.div(pb.vec2(x, y), this.targetSize.xy));\r\n this.$l.neighbor = pb.textureSampleLevel(this.currentTex, this.neighborUV, 0).rgb;\r\n this.neighborhoodMin = pb.min(this.neighborhoodMin, this.neighbor);\r\n this.neighborhoodMax = pb.max(this.neighborhoodMax, this.neighbor);\r\n this.$l.aoNeighbor = pb.textureSampleLevel(this.currentAOTex, this.neighborUV, 0).r;\r\n this.aoNeighborhoodMin = pb.min(this.aoNeighborhoodMin, this.aoNeighbor);\r\n this.aoNeighborhoodMax = pb.max(this.aoNeighborhoodMax, this.aoNeighbor);\r\n }\r\n }\r\n this.$l.previous = pb.textureSampleLevel(\r\n this.previousIrradianceTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.previousClamped = pb.clamp(this.previous.rgb, this.neighborhoodMin, this.neighborhoodMax);\r\n this.$l.previousMoment = pb.textureSampleLevel(\r\n this.previousMomentsTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.validity = pb.mul(\r\n pb.float(pb.and(this.validUV, this.surfaceValid)),\r\n pb.clamp(this.previous.a, 0, 1)\r\n );\r\n // Start new histories as a running average, then cap their weight\r\n // at the configured value once enough samples have accumulated.\r\n this.$l.runningAverageWeight = pb.div(this.previousMoment.z, pb.add(this.previousMoment.z, 1));\r\n this.$l.historyWeight = pb.min(this.temporalParams.x, this.runningAverageWeight);\r\n this.$l.weight = pb.mul(this.historyWeight, this.validity);\r\n this.result = pb.mix(this.current.rgb, this.previousClamped, this.weight);\r\n // AO accumulates on exactly the same validity and weight as the\r\n // irradiance: it was measured by the same rays against the same\r\n // surface, so any disagreement between the two would be an artifact.\r\n this.$l.previousAO = pb.textureSampleLevel(\r\n this.previousAOTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).r;\r\n this.$l.previousAOClamped = pb.clamp(\r\n this.previousAO,\r\n this.aoNeighborhoodMin,\r\n this.aoNeighborhoodMax\r\n );\r\n this.resultAO = pb.mix(this.currentAO, this.previousAOClamped, this.weight);\r\n this.$l.momentXY = pb.mix(this.moment.xy, this.previousMoment.xy, this.weight);\r\n this.$l.historyLength = pb.mix(\r\n pb.float(1),\r\n pb.min(32, pb.add(this.previousMoment.z, 1)),\r\n this.validity\r\n );\r\n this.$l.variance = pb.max(0, pb.sub(this.momentXY.y, pb.mul(this.momentXY.x, this.momentXY.x)));\r\n this.moment = pb.vec4(this.momentXY, this.historyLength, this.variance);\r\n } else {\r\n // The WebGL1 fallback has no motion-vector temporal resolve. Seed\r\n // a-trous with spatial variance so its luminance weighting can\r\n // still remove Monte Carlo noise instead of treating it as an edge.\r\n this.$l.spatialLum = pb.float(0);\r\n this.$l.spatialLum2 = pb.float(0);\r\n for (let y = -1; y <= 1; y++) {\r\n for (let x = -1; x <= 1; x++) {\r\n this.$l.neighborLum = this.SSGI_luminance(\r\n pb.textureSampleLevel(\r\n this.currentTex,\r\n pb.add(this.uv, pb.div(pb.vec2(x, y), this.targetSize.xy)),\r\n 0\r\n ).rgb\r\n );\r\n this.spatialLum = pb.add(this.spatialLum, this.neighborLum);\r\n this.spatialLum2 = pb.add(this.spatialLum2, pb.mul(this.neighborLum, this.neighborLum));\r\n }\r\n }\r\n this.spatialLum = pb.div(this.spatialLum, 9);\r\n this.spatialLum2 = pb.div(this.spatialLum2, 9);\r\n this.$l.spatialVariance = pb.max(\r\n 0,\r\n pb.sub(this.spatialLum2, pb.mul(this.spatialLum, this.spatialLum))\r\n );\r\n this.moment = pb.vec4(this.moment.xyz, this.spatialVariance);\r\n }\r\n this.$outputs.outIrradiance = pb.vec4(this.result, this.current.a);\r\n this.$outputs.outMoments = this.moment;\r\n this.$outputs.outAO = pb.vec4(pb.clamp(this.resultAO, 0, 1));\r\n });\r\n }\r\n })!;\r\n program.name = hasHistory ? '@SSGI_Temporal' : '@SSGI_TemporalInitialize';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createAtrousProgram(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.sourceTex = pb.tex2D().uniform(0);\r\n this.aoSourceTex = pb.tex2D().uniform(0);\r\n this.momentsTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.filterParams = pb.vec4().uniform(0);\r\n this.denoiseParams = pb.vec4().uniform(0);\r\n this.cameraFar = pb.float().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.func('SSGI_luminance', [pb.vec3('c')], function () {\r\n this.$return(pb.max(0, pb.dot(this.c, pb.vec3(0.2126, 0.7152, 0.0722))));\r\n });\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.center = pb.textureSampleLevel(this.sourceTex, this.uv, 0);\r\n this.$l.centerDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.cameraFar\r\n );\r\n this.$l.centerNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.centerLum = this.SSGI_luminance(this.center.rgb);\r\n this.$l.moments = pb.textureSampleLevel(this.momentsTex, this.uv, 0);\r\n // A pixel with little accumulated history has an unreliable variance\r\n // estimate, so the edge-stopping functions would preserve Monte Carlo\r\n // noise as if it were detail. Widen the kernel and relax the luminance\r\n // and normal tests until enough frames have converged, then hand back\r\n // to the sharp weights (standard SVGF history-driven ramp).\r\n //\r\n // A path that never accumulates history (no temporal resolve, so\r\n // moments.z is pinned at 1) is permanently unconverged, not converged:\r\n // it is the noisiest input this filter ever sees. Sending it to the\r\n // relaxed end is the whole point of the ramp - the sharp end would give\r\n // it the narrowest kernel and one eighth the luminance tolerance.\r\n this.$l.historyConfidence = this.$choice(\r\n pb.greaterThan(this.denoiseParams.x, 0),\r\n pb.clamp(pb.div(this.moments.z, this.denoiseParams.x), 0, 1),\r\n pb.float(0)\r\n );\r\n this.$l.stepScale = pb.mix(pb.float(2), pb.float(1), this.historyConfidence);\r\n this.$l.effStep = pb.mul(this.filterParams.x, this.stepScale);\r\n this.$l.normalPower = pb.mix(\r\n pb.max(1, pb.mul(this.filterParams.z, 0.25)),\r\n this.filterParams.z,\r\n this.historyConfidence\r\n );\r\n this.$l.sigmaScale = pb.mix(pb.float(8), pb.float(1), this.historyConfidence);\r\n this.$l.sigma = pb.mul(pb.add(pb.sqrt(pb.max(this.moments.w, 0)), 0.02), this.sigmaScale);\r\n this.$l.centerAO = pb.textureSampleLevel(this.aoSourceTex, this.uv, 0).r;\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.weightSum = pb.float(0);\r\n this.$l.aoSum = pb.float(0);\r\n this.$l.aoWeightSum = pb.float(0);\r\n const kernel = [1, 2 / 3, 1 / 6];\r\n for (let y = -2; y <= 2; y++) {\r\n for (let x = -2; x <= 2; x++) {\r\n const kernelWeight = kernel[Math.abs(x)] * kernel[Math.abs(y)];\r\n this.$l.sampleUV = pb.add(\r\n this.uv,\r\n pb.mul(pb.div(pb.vec2(x, y), this.targetSize.xy), this.effStep)\r\n );\r\n this.$l.sampleValue = pb.textureSampleLevel(this.sourceTex, this.sampleUV, 0);\r\n this.$l.sampleDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.sampleUV, 0),\r\n this.cameraFar\r\n );\r\n this.$l.sampleNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.sampleUV, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.depthWeight = pb.exp(\r\n pb.neg(\r\n pb.div(\r\n pb.abs(pb.sub(this.sampleDepth, this.centerDepth)),\r\n pb.mul(this.filterParams.y, this.effStep)\r\n )\r\n )\r\n );\r\n this.$l.normalWeight = pb.pow(\r\n pb.max(0, pb.dot(this.centerNormal, this.sampleNormal)),\r\n this.normalPower\r\n );\r\n this.$l.colorWeight = pb.exp(\r\n pb.neg(\r\n pb.div(\r\n pb.abs(pb.sub(this.SSGI_luminance(this.sampleValue.rgb), this.centerLum)),\r\n pb.mul(this.sigma, this.filterParams.w)\r\n )\r\n )\r\n );\r\n this.$l.weight = pb.mul(\r\n kernelWeight,\r\n this.depthWeight,\r\n this.normalWeight,\r\n this.colorWeight,\r\n this.sampleValue.a\r\n );\r\n this.sum = pb.add(this.sum, pb.mul(this.sampleValue.rgb, this.weight));\r\n this.weightSum = pb.add(this.weightSum, this.weight);\r\n // AO deliberately drops colorWeight: that term is driven by the\r\n // moments' luminance variance, which describes the irradiance and\r\n // says nothing about AO. Leaving it out is a stronger smoothing,\r\n // which is what a per-ray binary quantity needs - with 1-2 rays per\r\n // pixel, single-frame AO is close to binary.\r\n this.$l.aoWeight = pb.mul(\r\n kernelWeight,\r\n this.depthWeight,\r\n this.normalWeight,\r\n this.sampleValue.a\r\n );\r\n this.$l.sampleAO = pb.textureSampleLevel(this.aoSourceTex, this.sampleUV, 0).r;\r\n this.aoSum = pb.add(this.aoSum, pb.mul(this.sampleAO, this.aoWeight));\r\n this.aoWeightSum = pb.add(this.aoWeightSum, this.aoWeight);\r\n }\r\n }\r\n this.$l.filtered = this.$choice(\r\n pb.greaterThan(this.weightSum, 1e-5),\r\n pb.div(this.sum, this.weightSum),\r\n this.center.rgb\r\n );\r\n this.$l.filteredAO = this.$choice(\r\n pb.greaterThan(this.aoWeightSum, 1e-5),\r\n pb.div(this.aoSum, this.aoWeightSum),\r\n this.centerAO\r\n );\r\n this.$outputs.outColor = pb.vec4(this.filtered, this.center.a);\r\n this.$outputs.outAO = pb.vec4(pb.clamp(this.filteredAO, 0, 1));\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_ATrous';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createSurfaceProgram(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.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec2().uniform(0);\r\n this.cameraFar = pb.float().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize);\r\n this.$l.normal = pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb;\r\n this.$l.depth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.cameraFar\r\n );\r\n this.$outputs.outColor = pb.vec4(this.normal, this.depth);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_Surface';\r\n return program;\r\n }\r\n\r\n /**\r\n * Multiply the traced ambient occlusion into the scene color.\r\n *\r\n * This is the same multiply-into-final-color semantics the standalone SAO post\r\n * effect applies, so enabling both double darkens.\r\n *\r\n * @internal\r\n */\r\n private compositeAO(ctx: DrawContext, sceneColor: Texture2D, ao: Texture2D, srgbOutput: boolean) {\r\n const key = srgbOutput ? 'srgb' : 'linear';\r\n let program = SSGI._compositePrograms[key];\r\n if (!program) {\r\n program = this.createCompositeProgram(ctx, srgbOutput);\r\n SSGI._compositePrograms[key] = program;\r\n }\r\n const hash = `${key}:${sceneColor.uid}:${ao.uid}`;\r\n let bindGroup = this._compositeBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('colorTex', sceneColor, fetchSampler('clamp_nearest_nomip'));\r\n // Nearest, not linear: the AO handed to this pass is already at full\r\n // resolution, so filtering would only add a dependency on the WebGL\r\n // half-float linear filtering cap for no gain.\r\n bindGroup.setTexture('aoTex', ao, fetchSampler('clamp_nearest_nomip'));\r\n this._compositeBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue(\r\n 'aoParams',\r\n new Vector2(ctx.camera.ssgiAOIntensity, Math.max(1e-3, ctx.camera.ssgiAOPower))\r\n );\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private createCompositeProgram(ctx: DrawContext, srgbOutput: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n 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.aoTex = pb.tex2D().uniform(0);\r\n this.aoParams = pb.vec2().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.color = pb.textureSampleLevel(this.colorTex, this.$inputs.uv, 0);\r\n this.$l.ao = pb.clamp(pb.textureSampleLevel(this.aoTex, this.$inputs.uv, 0).r, 0, 1);\r\n // mix() toward 1 rather than a plain multiply: intensity then doubles as\r\n // the fallback for noisy or unresolved texels, which matters most on the\r\n // WebGL1 path where there is no temporal accumulation to converge them.\r\n this.$l.shapedAO = pb.pow(this.ao, this.aoParams.y);\r\n this.$l.finalAO = pb.mix(pb.float(1), this.shapedAO, this.aoParams.x);\r\n this.$l.occludedColor = pb.mul(this.color.rgb, this.finalAO);\r\n this.$outputs.outColor = pb.vec4(\r\n srgbOutput ? linearToGamma(this, this.occludedColor) : this.occludedColor,\r\n this.color.a\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = srgbOutput ? '@SSGI_CompositeAO_sRGB' : '@SSGI_CompositeAO';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createUpsampleProgram(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.sourceTex = pb.tex2D().uniform(0);\r\n this.aoSourceTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.guideParams = pb.vec4().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.zw);\r\n this.$l.centerDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.guideParams.z\r\n );\r\n this.$l.centerNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.weightSum = pb.float(0);\r\n this.$l.aoSum = pb.float(0);\r\n for (let y = -1; y <= 1; y++) {\r\n for (let x = -1; x <= 1; x++) {\r\n this.$l.sampleUV = pb.add(this.uv, pb.div(pb.vec2(x, y), this.targetSize.xy));\r\n this.$l.sampleValue = pb.textureSampleLevel(this.sourceTex, this.sampleUV, 0);\r\n this.$l.sampleAO = pb.textureSampleLevel(this.aoSourceTex, this.sampleUV, 0).r;\r\n this.$l.sampleDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.sampleUV, 0),\r\n this.guideParams.z\r\n );\r\n this.$l.sampleNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.sampleUV, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.depthWeight = pb.exp(\r\n pb.neg(pb.div(pb.abs(pb.sub(this.sampleDepth, this.centerDepth)), this.guideParams.x))\r\n );\r\n this.$l.normalWeight = pb.pow(\r\n pb.max(0, pb.dot(this.centerNormal, this.sampleNormal)),\r\n this.guideParams.y\r\n );\r\n this.$l.weight = pb.mul(this.depthWeight, this.normalWeight, this.sampleValue.a);\r\n this.sum = pb.add(this.sum, pb.mul(this.sampleValue.rgb, this.weight));\r\n this.weightSum = pb.add(this.weightSum, this.weight);\r\n // Same joint bilateral weights as the irradiance, so the upsampled\r\n // AO cannot cross a depth or normal edge the irradiance respects.\r\n this.aoSum = pb.add(this.aoSum, pb.mul(this.sampleAO, this.weight));\r\n }\r\n }\r\n this.$l.result = this.$choice(\r\n pb.greaterThan(this.weightSum, 1e-5),\r\n pb.div(this.sum, this.weightSum),\r\n pb.textureSampleLevel(this.sourceTex, this.uv, 0).rgb\r\n );\r\n this.$l.resultAO = this.$choice(\r\n pb.greaterThan(this.weightSum, 1e-5),\r\n pb.div(this.aoSum, this.weightSum),\r\n pb.textureSampleLevel(this.aoSourceTex, this.uv, 0).r\r\n );\r\n this.$outputs.outColor = pb.vec4(this.result, pb.float(pb.greaterThan(this.weightSum, 1e-5)));\r\n this.$outputs.outAO = pb.vec4(pb.clamp(this.resultAO, 0, 1));\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_Upsample';\r\n return program;\r\n }\r\n}\r\n"],"names":["IRRADIANCE_FORMAT","SURFACE_FORMAT","MOMENTS_FORMAT","AO_FORMAT","HALF_FLOAT_MAX","MOMENT_LUMINANCE_MAX","SSGI","AbstractPostEffect","_tracePrograms","_temporalPrograms","_atrousProgram","_surfaceProgram","_upsampleProgram","_compositePrograms","_traceBindGroups","_temporalBindGroups","_atrousBindGroups","_surfaceBindGroups","_upsampleBindGroups","_compositeBindGroups","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","ctx","requireMotionVectorTexture","device","type","requireHiZTexture","requireSceneNormalTexture","setup","s","graph","history","blackboard","input","linearDepthHandle","get","FrameResources","LinearDepth","normalHandle","SceneNormal","motionHandle","MotionVector","hiZHandle","HiZ","noFogHandle","SceneColorNoFog","sampleColorHandle","settings","camera","ssgiResolvedSettings","traceWidth","halfRes","Math","max","ceil","width","traceHeight","height","traceSize","fullSize","traceDesc","format","sizeMode","fullIrradianceDesc","surfaceDesc","momentsDesc","aoTraceDesc","fullAODesc","findHistoryRead","name","historyReads","find","binding","handle","previousIrradianceHandle","RGHistoryResources","SSGI_IRRADIANCE","previousSurfaceHandle","SSGI_SURFACE","previousMomentsHandle","importPreviousIfCompatible","SSGI_MOMENTS","previousAOHandle","SSGI_AO","previousSceneColorHandle","SSGI_SCENE_COLOR","colorFormat","canSampleSceneHistory","readFrameInputs","builder","read","dep","dependencies","traceResult","addPass","out","createTexture","label","ao","fb","createFramebuffer","colorAttachments","depthAttachment","ignoreDepthStencil","setExecute","rg","pushDeviceStates","setFramebuffer","getFramebuffer","trace","getTexture","popDeviceStates","irradiance","surfaceHandle","writeSurface","canTemporal","ssgiTemporal","temporalResult","moments","temporal","filteredHandle","filteredAOHandle","pass","denoisePasses","source","aoSource","filtered","atrous","finalIrradianceHandle","finalAOHandle","upsampled","upsample","traceResolutionAOHandle","output","createOutput","framebuffer","sceneColor","filteredAO","surface","ssgiAOIntensity","compositeAO","srgbOutput","passThrough","commitHistory","color","texture","queueRetainedCommit","currentColor","previousColor","depth","normal","motion","previousSurface","hiZ","sampleHistory","envHash","env","light","getHash","historyHash","uid","hizHash","programHash","raysPerPixel","bindGroupHash","program","createTraceProgram","colorSampler","fetchSampler","bindGroup","createBindGroup","bindGroupLayouts","setTexture","setValue","mipLevelCount","Vector2","ssgiDepthReject","ssgiNormalReject","getNearPlane","getFarPlane","viewMatrix","worldMatrix","getProjectionMatrix","Matrix4x4","invert","Vector4","ssgiMaxDistance","ssgiThickness","maxSteps","ssgiStride","ssgiIntensity","ssgiMaxRayIntensity","ShaderHelper","getEnvLightLuminance","frameInfo","frameCounter","ssgiSkyOcclusion","needFlip","envLight","updateBindGroup","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","current","currentAO","previousIrradiance","previousMoments","previousAO","hasHistory","hash","createTemporalProgram","ssgiTemporalWeight","step","hasTemporalHistory","createAtrousProgram","createSurfaceProgram","createUpsampleProgram","useHiZ","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","currentColorTex","tex2D","depthTex","sampleType","normalTex","previousColorTex","motionTex","previousSurfaceTex","historyRejectParams","hizTex","depthMipLevels","cameraNearFar","mat4","invViewMatrix","projMatrix","invProjMatrix","traceParams","targetSize","radianceParams","skyOcclusion","float","initShaderBindings","outColor","outAO","func","$l","linearDepth","sampleLinearDepth","nonLinearDepth","linearNormalizedToNonLinearDepth","clipPos","sub","deviceDepthToClipZ","clamp","viewPos","$return","div","xyz","w","q","dot","p","fract","sin","seed","vec3","up","$choice","lessThan","abs","n","z","tangent","normalize","cross","bitangent","r","sqrt","xi","x","phi","PI","local","cos","fragCoord","SSGI_getPosition","greaterThanEqual","$else","worldNormal","textureSampleLevel","rgb","viewNormal","iblIrradiance","getIrradiance","correctionSum","determinateSum","escapedSum","occludedSum","$for","SSGI_hash22","rayIndex","worldRay","SSGI_cosineDirection","viewRay","rayOrigin","giTrace","stepOffset","hit","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","hitFinite","all","occluded","escaped","hitUV","greaterThan","rawEnvRadiance","getRadiance","envRadiance","currentRadiance","hitMotion","previousHitUV","historyValid","and","lessThanEqual","historyRadiance","currentHitDepth","currentHitNormal","previousHitSurface","previousHitNormal","a","screenRadiance","screenRadianceFinite","maxComponent","g","b","fireflyScale","clampedScreenRadiance","bounceGain","skyLoss","correction","determinateCount","minimumIrradiance","mix","boundedIrradiance","currentTex","currentAOTex","previousIrradianceTex","previousMomentsTex","previousAOTex","temporalParams","outIrradiance","outMoments","boundedLuminance","c","result","resultAO","luminance","SSGI_luminance","moment","previousUV","validUV","currentDepth","currentNormal","previousNormal","surfaceValid","neighborhoodMin","neighborhoodMax","aoNeighborhoodMin","aoNeighborhoodMax","neighborUV","neighbor","min","aoNeighbor","previous","previousClamped","previousMoment","validity","runningAverageWeight","historyWeight","weight","previousAOClamped","momentXY","historyLength","variance","spatialLum","spatialLum2","neighborLum","spatialVariance","sourceTex","aoSourceTex","momentsTex","filterParams","denoiseParams","cameraFar","center","centerDepth","centerNormal","centerLum","historyConfidence","stepScale","effStep","normalPower","sigmaScale","sigma","centerAO","sum","weightSum","aoSum","aoWeightSum","kernel","kernelWeight","sampleUV","sampleValue","sampleDepth","sampleNormal","depthWeight","exp","normalWeight","pow","colorWeight","aoWeight","sampleAO","key","createCompositeProgram","ssgiAOPower","colorTex","aoTex","aoParams","shapedAO","finalAO","occludedColor","linearToGamma","guideParams","zw"],"mappings":"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"}
1
+ {"version":3,"file":"ssgi.js","sources":["../../src/posteffect/ssgi.ts"],"sourcesContent":["import { DEPTH_FARTHEST, Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { FrameResources } from '../render/rendergraph/blackboard';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\nimport type { RGHandle, RGPassBuilder, RGTextureDesc } from '../render/rendergraph/types';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D } from '../shaders/ssr';\r\nimport { ShaderHelper } from '../material';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getActiveProbeVolume } from '../render/gi/probe_volume';\r\nimport { declareProbeUniforms, sampleProbeIrradiance } from '../shaders/probes';\r\nimport { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport type { PostEffectSetupContext } from './posteffect';\r\n\r\nconst IRRADIANCE_FORMAT = 'rgba16f' as const;\r\nconst SURFACE_FORMAT = 'rgba16f' as const;\r\nconst MOMENTS_FORMAT = 'rgba16f' as const;\r\n// AO is scalar; r16f is available wherever SSGI runs.\r\nconst AO_FORMAT = 'r16f' as const;\r\nconst HALF_FLOAT_MAX = 65504;\r\n// Keep squared luminance below the rgba16f range.\r\nconst MOMENT_LUMINANCE_MAX = 255;\r\n\r\n/**\r\n * Screen-space diffuse global illumination.\r\n *\r\n * @public\r\n */\r\nexport class SSGI extends AbstractPostEffect {\r\n private static _tracePrograms: Record<string, GPUProgram> = {};\r\n private static _temporalPrograms: Record<string, GPUProgram> = {};\r\n private static _atrousProgram: GPUProgram | null = null;\r\n private static _surfaceProgram: GPUProgram | null = null;\r\n private static _upsampleProgram: GPUProgram | null = null;\r\n private static _compositePrograms: Record<string, GPUProgram> = {};\r\n\r\n private _traceBindGroups: Record<string, BindGroup> = {};\r\n private _temporalBindGroups: Record<string, BindGroup> = {};\r\n private _atrousBindGroups: Record<string, BindGroup> = {};\r\n private _surfaceBindGroups: Record<string, BindGroup> = {};\r\n private _upsampleBindGroups: Record<string, BindGroup> = {};\r\n private _compositeBindGroups: Record<string, BindGroup> = {};\r\n\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI;\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireMotionVectorTexture} */\r\n requireMotionVectorTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI;\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireHiZTexture} */\r\n requireHiZTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI;\r\n }\r\n\r\n /** {@inheritDoc AbstractPostEffect.requireSceneNormalTexture} */\r\n requireSceneNormalTexture(ctx: DrawContext) {\r\n return !!ctx.SSGI;\r\n }\r\n\r\n /** Build trace, temporal, denoise, upsample, history and pass-through stages. */\r\n setup(s: PostEffectSetupContext): RGHandle {\r\n const { graph, ctx, history, blackboard } = s;\r\n if (!ctx.SSGI || !history) {\r\n return s.input;\r\n }\r\n const linearDepthHandle = blackboard.get(FrameResources.LinearDepth);\r\n const normalHandle = blackboard.get(FrameResources.SceneNormal);\r\n const motionHandle = blackboard.get(FrameResources.MotionVector);\r\n const hiZHandle = blackboard.get(FrameResources.HiZ);\r\n // Fog-free scene colour: traced hits read outgoing surface radiance, and camera\r\n // fog would brighten every bounce. Trace and committed history must both use it.\r\n const noFogHandle = blackboard.get(FrameResources.SceneColorNoFog);\r\n const sampleColorHandle = noFogHandle ?? s.input;\r\n if (!linearDepthHandle || !normalHandle) {\r\n return s.input;\r\n }\r\n\r\n const settings = ctx.camera.ssgiResolvedSettings;\r\n const traceWidth = settings.halfRes ? Math.max(1, Math.ceil(s.width * 0.5)) : s.width;\r\n const traceHeight = settings.halfRes ? Math.max(1, Math.ceil(s.height * 0.5)) : s.height;\r\n const traceSize = { width: traceWidth, height: traceHeight };\r\n const fullSize = { width: s.width, height: s.height };\r\n const traceDesc: RGTextureDesc = {\r\n format: IRRADIANCE_FORMAT,\r\n sizeMode: 'absolute',\r\n width: traceWidth,\r\n height: traceHeight\r\n };\r\n const fullIrradianceDesc: RGTextureDesc = {\r\n format: IRRADIANCE_FORMAT,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const surfaceDesc: RGTextureDesc = {\r\n format: SURFACE_FORMAT,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const momentsDesc: RGTextureDesc = {\r\n format: MOMENTS_FORMAT,\r\n sizeMode: 'absolute',\r\n width: traceWidth,\r\n height: traceHeight\r\n };\r\n const aoTraceDesc: RGTextureDesc = {\r\n format: AO_FORMAT,\r\n sizeMode: 'absolute',\r\n width: traceWidth,\r\n height: traceHeight\r\n };\r\n const fullAODesc: RGTextureDesc = {\r\n format: AO_FORMAT,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n\r\n const findHistoryRead = (name: string) =>\r\n s.historyReads.find((binding) => binding.name === name)?.handle ?? null;\r\n const previousIrradianceHandle = findHistoryRead(RGHistoryResources.SSGI_IRRADIANCE);\r\n const previousSurfaceHandle = findHistoryRead(RGHistoryResources.SSGI_SURFACE);\r\n const previousMomentsHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_MOMENTS,\r\n momentsDesc,\r\n traceSize\r\n );\r\n // Only this effect's temporal pass reads the AO history, so it is imported directly.\r\n const previousAOHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_AO,\r\n aoTraceDesc,\r\n traceSize\r\n );\r\n const previousSceneColorHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_SCENE_COLOR,\r\n {\r\n format: s.colorFormat,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n },\r\n fullSize\r\n );\r\n const canSampleSceneHistory = !!(previousSceneColorHandle && previousSurfaceHandle && motionHandle);\r\n\r\n const readFrameInputs = (builder: RGPassBuilder) => {\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n if (motionHandle) {\r\n builder.read(motionHandle);\r\n }\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n for (const dep of s.dependencies) {\r\n builder.read(dep);\r\n }\r\n };\r\n\r\n // Trace one or two cosine-weighted diffuse rays. A hit prefers the previous frame\r\n // (previousHitUV = hitUV - motion(hitUV)) for multi-bounce, else the current frame.\r\n const traceResult = graph.addPass('SSGI:Trace', (builder) => {\r\n builder.read(sampleColorHandle);\r\n readFrameInputs(builder);\r\n if (canSampleSceneHistory) {\r\n builder.read(previousSceneColorHandle!);\r\n builder.read(previousSurfaceHandle!);\r\n }\r\n const out = builder.createTexture({ ...traceDesc, label: 'SSGI:rawIrradiance' });\r\n const ao = builder.createTexture({ ...aoTraceDesc, label: 'SSGI:rawAO' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:traceFB',\r\n width: traceWidth,\r\n height: traceHeight,\r\n colorAttachments: [out, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.trace(\r\n ctx,\r\n rg.getTexture<Texture2D>(sampleColorHandle),\r\n canSampleSceneHistory ? rg.getTexture<Texture2D>(previousSceneColorHandle!) : null,\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle),\r\n canSampleSceneHistory ? rg.getTexture<Texture2D>(motionHandle!) : null,\r\n canSampleSceneHistory ? rg.getTexture<Texture2D>(previousSurfaceHandle!) : null,\r\n hiZHandle ? rg.getTexture<Texture2D>(hiZHandle) : null,\r\n traceWidth,\r\n traceHeight\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance: out, ao };\r\n });\r\n\r\n // Surface stored separately; no albedo MRT, the lighting pass applies the BRDF.\r\n const surfaceHandle = graph.addPass('SSGI:Surface', (builder) => {\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n const out = builder.createTexture({ ...surfaceDesc, label: 'SSGI:surface' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:surfaceFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: out,\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.writeSurface(\r\n ctx,\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return out;\r\n });\r\n\r\n const canTemporal = !!(\r\n ctx.camera.ssgiTemporal &&\r\n motionHandle &&\r\n previousIrradianceHandle &&\r\n previousSurfaceHandle &&\r\n previousMomentsHandle &&\r\n previousAOHandle\r\n );\r\n\r\n // Rejects by depth and normal, neighborhood-clamps radiance, accumulates moments.\r\n const temporalResult = graph.addPass('SSGI:Temporal', (builder) => {\r\n builder.read(traceResult.irradiance);\r\n builder.read(traceResult.ao);\r\n readFrameInputs(builder);\r\n if (canTemporal) {\r\n builder.read(previousIrradianceHandle!);\r\n builder.read(previousSurfaceHandle!);\r\n builder.read(previousMomentsHandle!);\r\n builder.read(previousAOHandle!);\r\n }\r\n const irradiance = builder.createTexture({ ...traceDesc, label: 'SSGI:temporalIrradiance' });\r\n const moments = builder.createTexture({ ...momentsDesc, label: 'SSGI:moments' });\r\n const ao = builder.createTexture({ ...aoTraceDesc, label: 'SSGI:temporalAO' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:temporalFB',\r\n width: traceWidth,\r\n height: traceHeight,\r\n colorAttachments: [irradiance, moments, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.temporal(\r\n ctx,\r\n rg.getTexture<Texture2D>(traceResult.irradiance),\r\n rg.getTexture<Texture2D>(traceResult.ao),\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle),\r\n canTemporal ? rg.getTexture<Texture2D>(motionHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousIrradianceHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousSurfaceHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousMomentsHandle!) : null,\r\n canTemporal ? rg.getTexture<Texture2D>(previousAOHandle!) : null,\r\n traceWidth,\r\n traceHeight\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance, moments, ao };\r\n });\r\n\r\n // Variance-guided cross-bilateral a-trous filtering.\r\n let filteredHandle = temporalResult.irradiance;\r\n let filteredAOHandle = temporalResult.ao;\r\n for (let pass = 0; pass < settings.denoisePasses; pass++) {\r\n const source = filteredHandle;\r\n const aoSource = filteredAOHandle;\r\n const filtered = graph.addPass(`SSGI:ATrous:${pass}`, (builder) => {\r\n builder.read(source);\r\n builder.read(aoSource);\r\n builder.read(temporalResult.moments);\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n const out = builder.createTexture({ ...traceDesc, label: `SSGI:atrous${pass}` });\r\n const ao = builder.createTexture({ ...aoTraceDesc, label: `SSGI:atrousAO${pass}` });\r\n const fb = builder.createFramebuffer({\r\n label: `SSGI:atrousFB${pass}`,\r\n width: traceWidth,\r\n height: traceHeight,\r\n colorAttachments: [out, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.atrous(\r\n ctx,\r\n rg.getTexture<Texture2D>(source),\r\n rg.getTexture<Texture2D>(aoSource),\r\n rg.getTexture<Texture2D>(temporalResult.moments),\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle),\r\n traceWidth,\r\n traceHeight,\r\n 1 << pass,\r\n canTemporal\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance: out, ao };\r\n });\r\n filteredHandle = filtered.irradiance;\r\n filteredAOHandle = filtered.ao;\r\n }\r\n\r\n // Joint bilateral upsample for half-resolution presets.\r\n let finalIrradianceHandle = filteredHandle;\r\n let finalAOHandle = filteredAOHandle;\r\n if (settings.halfRes) {\r\n const source = filteredHandle;\r\n const aoSource = filteredAOHandle;\r\n const upsampled = graph.addPass('SSGI:Upsample', (builder) => {\r\n builder.read(source);\r\n builder.read(aoSource);\r\n builder.read(linearDepthHandle);\r\n builder.read(normalHandle);\r\n const out = builder.createTexture({ ...fullIrradianceDesc, label: 'SSGI:upsampledIrradiance' });\r\n const ao = builder.createTexture({ ...fullAODesc, label: 'SSGI:upsampledAO' });\r\n const fb = builder.createFramebuffer({\r\n label: 'SSGI:upsampleFB',\r\n width: s.width,\r\n height: s.height,\r\n colorAttachments: [out, ao],\r\n depthAttachment: null,\r\n ignoreDepthStencil: true\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.upsample(\r\n ctx,\r\n rg.getTexture<Texture2D>(source),\r\n rg.getTexture<Texture2D>(aoSource),\r\n rg.getTexture<Texture2D>(linearDepthHandle),\r\n rg.getTexture<Texture2D>(normalHandle)\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return { irradiance: out, ao };\r\n });\r\n finalIrradianceHandle = upsampled.irradiance;\r\n finalAOHandle = upsampled.ao;\r\n }\r\n\r\n // Pinned here: the a-trous loop reassigns the handle, and AO history stays at trace resolution.\r\n const traceResolutionAOHandle = filteredAOHandle;\r\n\r\n // Commit opaque HDR SceneColor (pre SSR/transparency/tonemap/AA), irradiance,\r\n // surface and moments; SceneColor passes through unchanged.\r\n return graph.addPass('SSGI:Commit', (builder) => {\r\n builder.read(s.input);\r\n if (noFogHandle) {\r\n builder.read(noFogHandle);\r\n }\r\n builder.read(finalIrradianceHandle);\r\n builder.read(finalAOHandle);\r\n // The trace-resolution AO goes back into history.\r\n builder.read(traceResolutionAOHandle);\r\n builder.read(surfaceHandle);\r\n builder.read(temporalResult.moments);\r\n const output = s.createOutput(builder);\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 sceneColor = rg.getTexture<Texture2D>(s.input);\r\n const irradiance = rg.getTexture<Texture2D>(finalIrradianceHandle);\r\n const ao = rg.getTexture<Texture2D>(finalAOHandle);\r\n const filteredAO = rg.getTexture<Texture2D>(traceResolutionAOHandle);\r\n const surface = rg.getTexture<Texture2D>(surfaceHandle);\r\n const moments = rg.getTexture<Texture2D>(temporalResult.moments);\r\n if (ctx.camera.ssgiAOIntensity > 0) {\r\n this.compositeAO(ctx, sceneColor, ao, output.srgbOutput);\r\n } else {\r\n this.passThrough(ctx, sceneColor, output.srgbOutput);\r\n }\r\n // Same fog-free colour the trace sampled.\r\n this.commitHistory(\r\n history,\r\n RGHistoryResources.SSGI_SCENE_COLOR,\r\n rg.getTexture<Texture2D>(sampleColorHandle)\r\n );\r\n this.commitHistory(history, RGHistoryResources.SSGI_IRRADIANCE, irradiance);\r\n this.commitHistory(history, RGHistoryResources.SSGI_SURFACE, surface);\r\n this.commitHistory(history, RGHistoryResources.SSGI_MOMENTS, moments);\r\n // Trace resolution: the temporal pass runs before the upsample and needs a\r\n // compatible descriptor, else accumulation is silently disabled.\r\n this.commitHistory(history, RGHistoryResources.SSGI_AO, filteredAO);\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return output.color;\r\n });\r\n }\r\n\r\n /** @internal */\r\n private commitHistory(\r\n history: NonNullable<PostEffectSetupContext['history']>,\r\n name: string,\r\n texture: Texture2D\r\n ) {\r\n history.queueRetainedCommit(\r\n name,\r\n {\r\n format: texture.format,\r\n sizeMode: 'absolute',\r\n width: texture.width,\r\n height: texture.height\r\n },\r\n { width: texture.width, height: texture.height },\r\n texture\r\n );\r\n }\r\n\r\n /** @internal */\r\n private trace(\r\n ctx: DrawContext,\r\n currentColor: Texture2D,\r\n previousColor: Texture2D | null,\r\n depth: Texture2D,\r\n normal: Texture2D,\r\n motion: Texture2D | null,\r\n previousSurface: Texture2D | null,\r\n hiZ: Texture2D | null,\r\n width: number,\r\n height: number\r\n ) {\r\n const sampleHistory = !!(previousColor && motion && previousSurface);\r\n const probes = getActiveProbeVolume(ctx.scene);\r\n const envHash = `${ctx.env!.light.getHash()}:probes${probes ? 1 : 0}`;\r\n const historyHash = sampleHistory ? `${previousColor!.uid}:${motion!.uid}:${previousSurface!.uid}` : '';\r\n const hizHash = hiZ ? `${hiZ.uid}` : '';\r\n const programHash = `${sampleHistory ? '1' : '0'}:${hiZ ? '1' : '0'}:${ctx.camera.ssgiResolvedSettings.raysPerPixel}:${envHash}`;\r\n const bindGroupHash = `${currentColor.uid}:${depth.uid}:${normal.uid}:(${historyHash}):(${hizHash}):${ctx.camera.ssgiResolvedSettings.raysPerPixel}:${envHash}`;\r\n let program = SSGI._tracePrograms[programHash];\r\n if (!program) {\r\n program = this.createTraceProgram(ctx, !!hiZ, sampleHistory, !!probes);\r\n SSGI._tracePrograms[programHash] = program;\r\n }\r\n const colorSampler = fetchSampler('clamp_linear_nomip');\r\n let bindGroup = this._traceBindGroups[bindGroupHash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('currentColorTex', currentColor, colorSampler);\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n if (sampleHistory) {\r\n bindGroup.setTexture('previousColorTex', previousColor!, colorSampler);\r\n bindGroup.setTexture('motionTex', motion!, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('previousSurfaceTex', previousSurface!, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n if (hiZ) {\r\n bindGroup.setTexture('hizTex', hiZ, fetchSampler('clamp_nearest'));\r\n bindGroup.setValue('depthMipLevels', hiZ.mipLevelCount);\r\n }\r\n this._traceBindGroups[bindGroupHash] = bindGroup;\r\n }\r\n if (sampleHistory) {\r\n bindGroup.setValue(\r\n 'historyRejectParams',\r\n new Vector2(ctx.camera.ssgiDepthReject, ctx.camera.ssgiNormalReject)\r\n );\r\n }\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue(\r\n 'traceParams',\r\n new Vector4(\r\n ctx.camera.ssgiMaxDistance,\r\n ctx.camera.ssgiThickness,\r\n ctx.camera.ssgiResolvedSettings.maxSteps,\r\n ctx.camera.ssgiStride\r\n )\r\n );\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(width, height, hiZ?.width ?? depth.width, hiZ?.height ?? depth.height)\r\n );\r\n bindGroup.setValue(\r\n 'radianceParams',\r\n new Vector4(\r\n ctx.camera.ssgiIntensity,\r\n ctx.camera.ssgiMaxRayIntensity,\r\n ShaderHelper.getEnvLightLuminance(ctx),\r\n ctx.device.frameInfo.frameCounter\r\n )\r\n );\r\n bindGroup.setValue('skyOcclusion', ctx.camera.ssgiSkyOcclusion);\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n probes?.applyBindGroup(bindGroup);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private temporal(\r\n ctx: DrawContext,\r\n current: Texture2D,\r\n currentAO: Texture2D,\r\n depth: Texture2D,\r\n normal: Texture2D,\r\n motion: Texture2D | null,\r\n previousIrradiance: Texture2D | null,\r\n previousSurface: Texture2D | null,\r\n previousMoments: Texture2D | null,\r\n previousAO: Texture2D | null,\r\n width: number,\r\n height: number\r\n ) {\r\n const hasHistory = !!(motion && previousIrradiance && previousSurface && previousMoments && previousAO);\r\n const hash = hasHistory\r\n ? `history:${current.uid}:${currentAO.uid}:${depth.uid}:${normal.uid}:${motion!.uid}:${previousIrradiance!.uid}:${previousSurface.uid}:${previousMoments.uid}:${previousAO!.uid}`\r\n : `initialize:${current.uid}:${currentAO.uid}:${depth.uid}:${normal.uid}`;\r\n let program = SSGI._temporalPrograms[hash];\r\n if (!program) {\r\n program = this.createTemporalProgram(ctx, hasHistory);\r\n SSGI._temporalPrograms[hash] = program;\r\n }\r\n let bindGroup = this._temporalBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('currentTex', current, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('currentAOTex', currentAO, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n if (hasHistory) {\r\n bindGroup.setTexture('motionTex', motion!, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture(\r\n 'previousIrradianceTex',\r\n previousIrradiance!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bindGroup.setTexture('previousSurfaceTex', previousSurface!, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('previousMomentsTex', previousMoments!, fetchSampler('clamp_linear_nomip'));\r\n // r16f is filterable on WebGL2 and WebGPU.\r\n bindGroup.setTexture('previousAOTex', previousAO!, fetchSampler('clamp_linear_nomip'));\r\n }\r\n this._temporalBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue('targetSize', new Vector4(width, height, depth.width, depth.height));\r\n bindGroup.setValue(\r\n 'temporalParams',\r\n new Vector4(\r\n ctx.camera.ssgiTemporalWeight,\r\n ctx.camera.ssgiDepthReject,\r\n ctx.camera.ssgiNormalReject,\r\n ctx.camera.getFarPlane()\r\n )\r\n );\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private atrous(\r\n ctx: DrawContext,\r\n source: Texture2D,\r\n aoSource: Texture2D,\r\n moments: Texture2D,\r\n depth: Texture2D,\r\n normal: Texture2D,\r\n width: number,\r\n height: number,\r\n step: number,\r\n hasTemporalHistory: boolean\r\n ) {\r\n let program = SSGI._atrousProgram;\r\n if (!program) {\r\n program = this.createAtrousProgram(ctx);\r\n SSGI._atrousProgram = program;\r\n }\r\n const hash = `atrous:${source.uid}:${aoSource.uid}:${moments.uid}:${depth.uid}:${normal.uid}`;\r\n let bindGroup = this._atrousBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('sourceTex', source, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('aoSourceTex', aoSource, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('momentsTex', moments, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n this._atrousBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue('targetSize', new Vector4(width, height, depth.width, depth.height));\r\n bindGroup.setValue(\r\n 'filterParams',\r\n new Vector4(\r\n step,\r\n Math.max(0.001, ctx.camera.ssgiDepthReject),\r\n Math.max(1, ctx.camera.ssgiNormalReject * 32),\r\n 4\r\n )\r\n );\r\n // Accumulated frames before the variance estimate is trusted. Zero disables the\r\n // ramp for paths without history (stored length pinned at 1).\r\n bindGroup.setValue('denoiseParams', new Vector4(hasTemporalHistory ? 8 : 0, 0, 0, 0));\r\n bindGroup.setValue('cameraFar', ctx.camera.getFarPlane());\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private writeSurface(ctx: DrawContext, depth: Texture2D, normal: Texture2D) {\r\n let program = SSGI._surfaceProgram;\r\n if (!program) {\r\n program = this.createSurfaceProgram(ctx);\r\n SSGI._surfaceProgram = program;\r\n }\r\n const hash = `${depth.uid}:${normal.uid}`;\r\n let bindGroup = this._surfaceBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('targetSize', new Vector2(depth.width, depth.height));\r\n this._surfaceBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue('cameraFar', ctx.camera.getFarPlane());\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private upsample(\r\n ctx: DrawContext,\r\n source: Texture2D,\r\n aoSource: Texture2D,\r\n depth: Texture2D,\r\n normal: Texture2D\r\n ) {\r\n let program = SSGI._upsampleProgram;\r\n if (!program) {\r\n program = this.createUpsampleProgram(ctx);\r\n SSGI._upsampleProgram = program;\r\n }\r\n const hash = `${source.uid}:${aoSource.uid}:${depth.uid}:${normal.uid}`;\r\n let bindGroup = this._upsampleBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('sourceTex', source, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('aoSourceTex', aoSource, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('depthTex', depth, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('normalTex', normal, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue('targetSize', new Vector4(source.width, source.height, depth.width, depth.height));\r\n this._upsampleBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue(\r\n 'guideParams',\r\n new Vector4(\r\n Math.max(0.001, ctx.camera.ssgiDepthReject),\r\n Math.max(1, ctx.camera.ssgiNormalReject * 32),\r\n ctx.camera.getFarPlane(),\r\n 0\r\n )\r\n );\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private createTraceProgram(ctx: DrawContext, useHiZ: boolean, sampleHistory: boolean, useProbes: boolean) {\r\n const raysPerPixel = ctx.camera.ssgiResolvedSettings.raysPerPixel;\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.currentColorTex = pb.tex2D().uniform(0);\r\n // Linear depth is r32f/rg32f, not filterable without float32-filterable; nearest only.\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n if (sampleHistory) {\r\n this.previousColorTex = pb.tex2D().uniform(0);\r\n this.motionTex = pb.tex2D().uniform(0);\r\n this.previousSurfaceTex = pb.tex2D().uniform(0);\r\n this.historyRejectParams = pb.vec2().uniform(0);\r\n }\r\n if (useHiZ) {\r\n // Hi-Z is r32f read with nearest; unfilterable sample type for adapters without\r\n // float32-filterable (notably some AMD iGPUs).\r\n this.hizTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n }\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.traceParams = pb.vec4().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.radianceParams = pb.vec4().uniform(0);\r\n this.skyOcclusion = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n if (useProbes) {\r\n declareProbeUniforms(this, 0);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.func('SSGI_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.clipPos = 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.viewPos = pb.mul(this.invProjMatrix, this.clipPos);\r\n this.$return(pb.vec4(pb.div(this.viewPos.xyz, this.viewPos.w), this.linearDepth));\r\n });\r\n pb.func('SSGI_hash22', [pb.vec2('p'), pb.float('seed')], function () {\r\n this.$l.q = pb.vec2(pb.dot(this.p, pb.vec2(127.1, 311.7)), pb.dot(this.p, pb.vec2(269.5, 183.3)));\r\n this.$return(pb.fract(pb.mul(pb.sin(pb.add(this.q, this.seed)), 43758.5453)));\r\n });\r\n pb.func('SSGI_cosineDirection', [pb.vec3('n'), pb.vec2('xi')], function () {\r\n this.$l.up = this.$choice(pb.lessThan(pb.abs(this.n.z), 0.999), pb.vec3(0, 0, 1), pb.vec3(1, 0, 0));\r\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.n));\r\n this.$l.bitangent = pb.cross(this.n, this.tangent);\r\n this.$l.r = pb.sqrt(this.xi.x);\r\n this.$l.phi = pb.mul(2 * Math.PI, this.xi.y);\r\n this.$l.local = pb.vec3(\r\n pb.mul(this.r, pb.cos(this.phi)),\r\n pb.mul(this.r, pb.sin(this.phi)),\r\n pb.sqrt(pb.max(0, pb.sub(1, this.xi.x)))\r\n );\r\n this.$return(\r\n pb.normalize(\r\n pb.add(\r\n pb.mul(this.tangent, this.local.x),\r\n pb.mul(this.bitangent, this.local.y),\r\n pb.mul(this.n, this.local.z)\r\n )\r\n )\r\n );\r\n });\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.pos = this.SSGI_getPosition(this.uv);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$outputs.outColor = pb.vec4(0);\r\n // Sky: validity is zero, but the texel must not be dark since the a-trous and\r\n // upsample kernels reach across the silhouette.\r\n this.$outputs.outAO = pb.vec4(1);\r\n }).$else(function () {\r\n this.$l.worldNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.viewNormal = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz);\r\n // Baseline is the SH diffuse IBL; rays only estimate the screen-space correction.\r\n // getIrradiance already carries the Lambert 1/PI, as does the lighting pass that\r\n // mixes the history, so this must not be scaled by PI.\r\n this.$l.iblIrradiance = pb.mul(\r\n ctx.env!.light.envLight.getIrradiance(this, this.worldNormal),\r\n this.radianceParams.z\r\n );\r\n // With probes the baseline is their irradiance, which already includes occlusion\r\n // and bounces; rays only add on-screen detail.\r\n this.$l.probeValid = pb.float(0);\r\n if (useProbes) {\r\n this.$l.worldPos = pb.mul(this.invViewMatrix, pb.vec4(this.pos.xyz, 1)).xyz;\r\n this.$l.cameraPos = pb.mul(this.invViewMatrix, pb.vec4(0, 0, 0, 1)).xyz;\r\n this.$l.probe = sampleProbeIrradiance(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n pb.sub(this.cameraPos, this.worldPos)\r\n );\r\n this.iblIrradiance = pb.mix(this.iblIrradiance, this.probe.rgb, this.probe.a);\r\n this.probeValid = this.probe.a;\r\n }\r\n this.$l.correctionSum = pb.vec3(0);\r\n // Rays the depth buffer cannot resolve (off-screen or out of iterations) are\r\n // excluded from the average, not counted as sky.\r\n this.$l.determinateSum = pb.float(0);\r\n this.$l.escapedSum = pb.float(0);\r\n // AO reuses the sky-removal visibility measurement, so the two never disagree.\r\n this.$l.occludedSum = pb.float(0);\r\n this.$for(pb.float('rayIndex'), 0, raysPerPixel, function () {\r\n this.$l.xi = this.SSGI_hash22(\r\n pb.add(pb.mul(this.uv, this.targetSize.xy), pb.vec2(this.rayIndex, pb.mul(this.rayIndex, 7))),\r\n pb.add(this.radianceParams.w, pb.mul(this.rayIndex, 17))\r\n );\r\n this.$l.worldRay = this.SSGI_cosineDirection(this.worldNormal, this.xi);\r\n this.$l.viewRay = pb.normalize(pb.mul(this.viewMatrix, pb.vec4(this.worldRay, 0)).xyz);\r\n this.$l.rayOrigin = pb.add(this.pos.xyz, pb.mul(this.viewNormal, this.traceParams.y, 0.25));\r\n // vec3(occluded, escaped, rawConfidence) - see screenSpaceRayTracing_Linear2D.\r\n this.$l.giTrace = pb.vec3(0);\r\n if (useHiZ) {\r\n this.$l.stepOffset = pb.sub(\r\n this.SSGI_hash22(\r\n pb.add(pb.mul(this.uv, this.targetSize.xy), pb.vec2(pb.mul(this.rayIndex, 23), 11)),\r\n pb.add(this.radianceParams.w, pb.mul(this.rayIndex, 29))\r\n ).x,\r\n 0.9\r\n );\r\n this.$l.hit = screenSpaceRayTracing_HiZ(\r\n this,\r\n this.rayOrigin,\r\n this.viewRay,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.traceParams.z,\r\n this.traceParams.x,\r\n this.traceParams.y,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex,\r\n this.giTrace,\r\n 1,\r\n this.stepOffset\r\n );\r\n } else {\r\n this.$l.hit = screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.rayOrigin,\r\n this.viewRay,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.traceParams.x,\r\n this.traceParams.z,\r\n this.traceParams.y,\r\n this.traceParams.w,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n false,\r\n this.giTrace\r\n );\r\n }\r\n // Degenerate rays can return Inf/NaN; a zero weight is not enough (NaN * 0 = NaN).\r\n this.$l.hitFinite = pb.all(pb.lessThan(pb.abs(this.hit), pb.vec4(1e30)));\r\n // Visibility and radiance are separate: geometric certainty gates occlusion so thin\r\n // false positives cannot darken, while the on-screen hit colour is always usable.\r\n this.$l.occluded = pb.mul(\r\n pb.float(this.hitFinite),\r\n pb.clamp(this.giTrace.x, 0, 1),\r\n pb.clamp(this.giTrace.z, 0, 1)\r\n );\r\n this.$l.escaped = pb.mul(pb.float(this.hitFinite), pb.clamp(this.giTrace.y, 0, 1));\r\n this.$l.hitUV = this.$choice(\r\n pb.greaterThan(this.occluded, 0),\r\n pb.clamp(this.hit.xy, pb.vec2(0), pb.vec2(1)),\r\n this.uv\r\n );\r\n this.$l.rawEnvRadiance = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.worldRay, pb.float(0))!,\r\n this.radianceParams.z\r\n );\r\n this.$l.envRadiance = this.$choice(\r\n pb.all(pb.lessThan(pb.abs(this.rawEnvRadiance), pb.vec3(1e30))),\r\n this.rawEnvRadiance,\r\n pb.vec3(0)\r\n );\r\n if (useProbes) {\r\n // A hit is judged against what the probes expect there, not the open sky\r\n this.envRadiance = pb.mix(this.envRadiance, this.iblIrradiance, this.probeValid);\r\n }\r\n this.$l.currentRadiance = pb.textureSampleLevel(this.currentColorTex, this.hitUV, 0).rgb;\r\n if (sampleHistory) {\r\n this.$l.hitMotion = pb.textureSampleLevel(this.motionTex, this.hitUV, 0).xy;\r\n this.$l.previousHitUV = pb.sub(this.hitUV, this.hitMotion);\r\n this.$l.historyValid = pb.and(\r\n pb.all(pb.greaterThanEqual(this.previousHitUV, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.previousHitUV, pb.vec2(1))),\r\n pb.all(pb.lessThan(pb.abs(this.hitMotion), pb.vec2(5e4)))\r\n );\r\n this.$l.historyRadiance = pb.textureSampleLevel(\r\n this.previousColorTex,\r\n pb.clamp(this.previousHitUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).rgb;\r\n this.$l.currentHitDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.hitUV, 0),\r\n this.cameraNearFar.y\r\n );\r\n this.$l.currentHitNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.hitUV, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.previousHitSurface = pb.textureSampleLevel(\r\n this.previousSurfaceTex,\r\n pb.clamp(this.previousHitUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.previousHitNormal = pb.normalize(\r\n pb.sub(pb.mul(this.previousHitSurface.rgb, 2), pb.vec3(1))\r\n );\r\n this.historyValid = pb.and(\r\n this.historyValid,\r\n pb.lessThanEqual(\r\n pb.abs(pb.sub(this.previousHitSurface.a, this.currentHitDepth)),\r\n this.historyRejectParams.x\r\n ),\r\n pb.greaterThanEqual(\r\n pb.dot(this.currentHitNormal, this.previousHitNormal),\r\n this.historyRejectParams.y\r\n )\r\n );\r\n // Prefer the reprojected previous frame for multi-bounce, else this frame's\r\n // shaded colour rather than dropping the sample (avoids disocclusion flashes).\r\n this.$l.screenRadiance = this.$choice(\r\n this.historyValid,\r\n this.historyRadiance,\r\n this.currentRadiance\r\n );\r\n } else {\r\n this.$l.screenRadiance = this.currentRadiance;\r\n }\r\n this.$l.screenRadianceFinite = pb.all(pb.lessThan(pb.abs(this.screenRadiance), pb.vec3(1e30)));\r\n this.screenRadiance = this.$choice(\r\n this.screenRadianceFinite,\r\n this.screenRadiance,\r\n this.envRadiance\r\n );\r\n this.$l.maxComponent = pb.max(\r\n pb.max(this.screenRadiance.r, this.screenRadiance.g),\r\n this.screenRadiance.b\r\n );\r\n this.$l.fireflyScale = this.$choice(\r\n pb.greaterThan(this.maxComponent, this.radianceParams.y),\r\n pb.div(this.radianceParams.y, pb.max(this.maxComponent, 1e-5)),\r\n pb.float(1)\r\n );\r\n this.$l.clampedScreenRadiance = pb.mul(this.screenRadiance, this.fireflyScale);\r\n // Bounce added by the blocker is always kept; only the sky removal is scaled by skyOcclusion.\r\n this.$l.bounceGain = pb.max(pb.sub(this.clampedScreenRadiance, this.envRadiance), pb.vec3(0));\r\n this.$l.skyLoss = pb.mul(\r\n pb.max(pb.sub(this.envRadiance, this.clampedScreenRadiance), pb.vec3(0)),\r\n this.skyOcclusion\r\n );\r\n // Cosine-weighted sampling: the plain mean estimates E/PI, so no PI here.\r\n this.$l.correction = pb.mul(\r\n pb.sub(this.bounceGain, this.skyLoss),\r\n this.occluded,\r\n this.radianceParams.x\r\n );\r\n this.correctionSum = pb.add(this.correctionSum, this.correction);\r\n this.determinateSum = pb.add(this.determinateSum, pb.max(this.occluded, this.escaped));\r\n this.escapedSum = pb.add(this.escapedSum, this.escaped);\r\n this.occludedSum = pb.add(this.occludedSum, this.occluded);\r\n });\r\n // Average over resolved rays only, so indeterminate rays do not leak sky.\r\n this.$l.determinateCount = pb.max(this.determinateSum, 1);\r\n this.$l.irradiance = pb.add(\r\n this.iblIrradiance,\r\n pb.div(this.correctionSum, this.determinateCount)\r\n );\r\n // radianceParams.x blends the traced estimate over the IBL baseline; the reserved\r\n // share (30% at 0.7) is scaled by visibility so corners can still darken.\r\n // With probes the baseline is already occluded, so the floor is not scaled down again\r\n this.$l.minimumIrradiance = pb.mul(\r\n this.iblIrradiance,\r\n pb.max(0, pb.sub(1, this.radianceParams.x)),\r\n pb.mix(\r\n pb.mix(pb.float(1), pb.div(this.escapedSum, this.determinateCount), this.skyOcclusion),\r\n pb.float(1),\r\n this.probeValid\r\n )\r\n );\r\n // Clamp before the RT conversion: overflow becomes Inf and a-trous spreads it.\r\n this.$l.boundedIrradiance = pb.clamp(\r\n pb.max(this.irradiance, this.minimumIrradiance),\r\n pb.vec3(0),\r\n pb.vec3(HALF_FLOAT_MAX)\r\n );\r\n this.$outputs.outColor = pb.vec4(this.boundedIrradiance, 1);\r\n // Mean of `occluded` over resolved rays estimates cosine-weighted visibility.\r\n this.$outputs.outAO = pb.vec4(\r\n pb.clamp(pb.sub(1, pb.div(this.occludedSum, this.determinateCount)), 0, 1)\r\n );\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_Trace';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createTemporalProgram(ctx: DrawContext, hasHistory: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n 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.currentTex = pb.tex2D().uniform(0);\r\n this.currentAOTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n if (hasHistory) {\r\n this.motionTex = pb.tex2D().uniform(0);\r\n this.previousIrradianceTex = pb.tex2D().uniform(0);\r\n this.previousSurfaceTex = pb.tex2D().uniform(0);\r\n this.previousMomentsTex = pb.tex2D().uniform(0);\r\n this.previousAOTex = pb.tex2D().uniform(0);\r\n }\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.temporalParams = pb.vec4().uniform(0);\r\n this.$outputs.outIrradiance = pb.vec4();\r\n this.$outputs.outMoments = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.func('SSGI_luminance', [pb.vec3('c')], function () {\r\n this.$l.boundedLuminance = pb.clamp(\r\n pb.dot(this.c, pb.vec3(0.2126, 0.7152, 0.0722)),\r\n 0,\r\n MOMENT_LUMINANCE_MAX\r\n );\r\n this.$return(this.boundedLuminance);\r\n });\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.current = pb.textureSampleLevel(this.currentTex, this.uv, 0);\r\n this.$l.currentAO = pb.textureSampleLevel(this.currentAOTex, this.uv, 0).r;\r\n this.$l.result = this.current.rgb;\r\n this.$l.resultAO = this.currentAO;\r\n this.$l.luminance = this.SSGI_luminance(this.current.rgb);\r\n this.$l.moment = pb.vec4(this.luminance, pb.mul(this.luminance, this.luminance), 1, 0);\r\n if (hasHistory) {\r\n this.$l.motion = pb.textureSampleLevel(this.motionTex, this.uv, 0).xy;\r\n this.$l.previousUV = pb.sub(this.uv, this.motion);\r\n this.$l.validUV = pb.and(\r\n pb.all(pb.greaterThanEqual(this.previousUV, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.previousUV, pb.vec2(1))),\r\n pb.all(pb.lessThan(pb.abs(this.motion), pb.vec2(5e4)))\r\n );\r\n this.$l.currentDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.temporalParams.w\r\n );\r\n this.$l.currentNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.previousSurface = pb.textureSampleLevel(\r\n this.previousSurfaceTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.previousNormal = pb.normalize(pb.sub(pb.mul(this.previousSurface.rgb, 2), pb.vec3(1)));\r\n this.$l.surfaceValid = pb.and(\r\n pb.lessThanEqual(\r\n pb.abs(pb.sub(this.previousSurface.a, this.currentDepth)),\r\n this.temporalParams.y\r\n ),\r\n pb.greaterThanEqual(pb.dot(this.currentNormal, this.previousNormal), this.temporalParams.z)\r\n );\r\n this.$l.neighborhoodMin = this.current.rgb;\r\n this.$l.neighborhoodMax = this.current.rgb;\r\n this.$l.aoNeighborhoodMin = this.currentAO;\r\n this.$l.aoNeighborhoodMax = this.currentAO;\r\n for (let y = -1; y <= 1; y++) {\r\n for (let x = -1; x <= 1; x++) {\r\n if (x === 0 && y === 0) {\r\n continue;\r\n }\r\n this.$l.neighborUV = pb.add(this.uv, pb.div(pb.vec2(x, y), this.targetSize.xy));\r\n this.$l.neighbor = pb.textureSampleLevel(this.currentTex, this.neighborUV, 0).rgb;\r\n this.neighborhoodMin = pb.min(this.neighborhoodMin, this.neighbor);\r\n this.neighborhoodMax = pb.max(this.neighborhoodMax, this.neighbor);\r\n this.$l.aoNeighbor = pb.textureSampleLevel(this.currentAOTex, this.neighborUV, 0).r;\r\n this.aoNeighborhoodMin = pb.min(this.aoNeighborhoodMin, this.aoNeighbor);\r\n this.aoNeighborhoodMax = pb.max(this.aoNeighborhoodMax, this.aoNeighbor);\r\n }\r\n }\r\n this.$l.previous = pb.textureSampleLevel(\r\n this.previousIrradianceTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.previousClamped = pb.clamp(this.previous.rgb, this.neighborhoodMin, this.neighborhoodMax);\r\n this.$l.previousMoment = pb.textureSampleLevel(\r\n this.previousMomentsTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n );\r\n this.$l.validity = pb.mul(\r\n pb.float(pb.and(this.validUV, this.surfaceValid)),\r\n pb.clamp(this.previous.a, 0, 1)\r\n );\r\n // Running average until the configured history weight cap is reached.\r\n this.$l.runningAverageWeight = pb.div(this.previousMoment.z, pb.add(this.previousMoment.z, 1));\r\n this.$l.historyWeight = pb.min(this.temporalParams.x, this.runningAverageWeight);\r\n this.$l.weight = pb.mul(this.historyWeight, this.validity);\r\n this.result = pb.mix(this.current.rgb, this.previousClamped, this.weight);\r\n // AO accumulates with the same validity and weight as irradiance.\r\n this.$l.previousAO = pb.textureSampleLevel(\r\n this.previousAOTex,\r\n pb.clamp(this.previousUV, pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ).r;\r\n this.$l.previousAOClamped = pb.clamp(\r\n this.previousAO,\r\n this.aoNeighborhoodMin,\r\n this.aoNeighborhoodMax\r\n );\r\n this.resultAO = pb.mix(this.currentAO, this.previousAOClamped, this.weight);\r\n this.$l.momentXY = pb.mix(this.moment.xy, this.previousMoment.xy, this.weight);\r\n this.$l.historyLength = pb.mix(\r\n pb.float(1),\r\n pb.min(32, pb.add(this.previousMoment.z, 1)),\r\n this.validity\r\n );\r\n this.$l.variance = pb.max(0, pb.sub(this.momentXY.y, pb.mul(this.momentXY.x, this.momentXY.x)));\r\n this.moment = pb.vec4(this.momentXY, this.historyLength, this.variance);\r\n } else {\r\n // No temporal history: seed a-trous with spatial variance.\r\n this.$l.spatialLum = pb.float(0);\r\n this.$l.spatialLum2 = pb.float(0);\r\n for (let y = -1; y <= 1; y++) {\r\n for (let x = -1; x <= 1; x++) {\r\n this.$l.neighborLum = this.SSGI_luminance(\r\n pb.textureSampleLevel(\r\n this.currentTex,\r\n pb.add(this.uv, pb.div(pb.vec2(x, y), this.targetSize.xy)),\r\n 0\r\n ).rgb\r\n );\r\n this.spatialLum = pb.add(this.spatialLum, this.neighborLum);\r\n this.spatialLum2 = pb.add(this.spatialLum2, pb.mul(this.neighborLum, this.neighborLum));\r\n }\r\n }\r\n this.spatialLum = pb.div(this.spatialLum, 9);\r\n this.spatialLum2 = pb.div(this.spatialLum2, 9);\r\n this.$l.spatialVariance = pb.max(\r\n 0,\r\n pb.sub(this.spatialLum2, pb.mul(this.spatialLum, this.spatialLum))\r\n );\r\n this.moment = pb.vec4(this.moment.xyz, this.spatialVariance);\r\n }\r\n this.$outputs.outIrradiance = pb.vec4(this.result, this.current.a);\r\n this.$outputs.outMoments = this.moment;\r\n this.$outputs.outAO = pb.vec4(pb.clamp(this.resultAO, 0, 1));\r\n });\r\n }\r\n })!;\r\n program.name = hasHistory ? '@SSGI_Temporal' : '@SSGI_TemporalInitialize';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createAtrousProgram(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.sourceTex = pb.tex2D().uniform(0);\r\n this.aoSourceTex = pb.tex2D().uniform(0);\r\n this.momentsTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.filterParams = pb.vec4().uniform(0);\r\n this.denoiseParams = pb.vec4().uniform(0);\r\n this.cameraFar = pb.float().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.func('SSGI_luminance', [pb.vec3('c')], function () {\r\n this.$return(pb.max(0, pb.dot(this.c, pb.vec3(0.2126, 0.7152, 0.0722))));\r\n });\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.center = pb.textureSampleLevel(this.sourceTex, this.uv, 0);\r\n this.$l.centerDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.cameraFar\r\n );\r\n this.$l.centerNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.centerLum = this.SSGI_luminance(this.center.rgb);\r\n this.$l.moments = pb.textureSampleLevel(this.momentsTex, this.uv, 0);\r\n // SVGF history-driven ramp: low-history pixels get a wider kernel and relaxed\r\n // luminance/normal tests. Paths without history (moments.z pinned at 1) are\r\n // treated as unconverged.\r\n this.$l.historyConfidence = this.$choice(\r\n pb.greaterThan(this.denoiseParams.x, 0),\r\n pb.clamp(pb.div(this.moments.z, this.denoiseParams.x), 0, 1),\r\n pb.float(0)\r\n );\r\n this.$l.stepScale = pb.mix(pb.float(2), pb.float(1), this.historyConfidence);\r\n this.$l.effStep = pb.mul(this.filterParams.x, this.stepScale);\r\n this.$l.normalPower = pb.mix(\r\n pb.max(1, pb.mul(this.filterParams.z, 0.25)),\r\n this.filterParams.z,\r\n this.historyConfidence\r\n );\r\n this.$l.sigmaScale = pb.mix(pb.float(8), pb.float(1), this.historyConfidence);\r\n this.$l.sigma = pb.mul(pb.add(pb.sqrt(pb.max(this.moments.w, 0)), 0.02), this.sigmaScale);\r\n this.$l.centerAO = pb.textureSampleLevel(this.aoSourceTex, this.uv, 0).r;\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.weightSum = pb.float(0);\r\n this.$l.aoSum = pb.float(0);\r\n this.$l.aoWeightSum = pb.float(0);\r\n const kernel = [1, 2 / 3, 1 / 6];\r\n for (let y = -2; y <= 2; y++) {\r\n for (let x = -2; x <= 2; x++) {\r\n const kernelWeight = kernel[Math.abs(x)] * kernel[Math.abs(y)];\r\n this.$l.sampleUV = pb.add(\r\n this.uv,\r\n pb.mul(pb.div(pb.vec2(x, y), this.targetSize.xy), this.effStep)\r\n );\r\n this.$l.sampleValue = pb.textureSampleLevel(this.sourceTex, this.sampleUV, 0);\r\n this.$l.sampleDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.sampleUV, 0),\r\n this.cameraFar\r\n );\r\n this.$l.sampleNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.sampleUV, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.depthWeight = pb.exp(\r\n pb.neg(\r\n pb.div(\r\n pb.abs(pb.sub(this.sampleDepth, this.centerDepth)),\r\n pb.mul(this.filterParams.y, this.effStep)\r\n )\r\n )\r\n );\r\n this.$l.normalWeight = pb.pow(\r\n pb.max(0, pb.dot(this.centerNormal, this.sampleNormal)),\r\n this.normalPower\r\n );\r\n this.$l.colorWeight = pb.exp(\r\n pb.neg(\r\n pb.div(\r\n pb.abs(pb.sub(this.SSGI_luminance(this.sampleValue.rgb), this.centerLum)),\r\n pb.mul(this.sigma, this.filterParams.w)\r\n )\r\n )\r\n );\r\n this.$l.weight = pb.mul(\r\n kernelWeight,\r\n this.depthWeight,\r\n this.normalWeight,\r\n this.colorWeight,\r\n this.sampleValue.a\r\n );\r\n this.sum = pb.add(this.sum, pb.mul(this.sampleValue.rgb, this.weight));\r\n this.weightSum = pb.add(this.weightSum, this.weight);\r\n // AO drops colorWeight (driven by irradiance variance) for stronger smoothing;\r\n // with 1-2 rays per pixel single-frame AO is nearly binary.\r\n this.$l.aoWeight = pb.mul(\r\n kernelWeight,\r\n this.depthWeight,\r\n this.normalWeight,\r\n this.sampleValue.a\r\n );\r\n this.$l.sampleAO = pb.textureSampleLevel(this.aoSourceTex, this.sampleUV, 0).r;\r\n this.aoSum = pb.add(this.aoSum, pb.mul(this.sampleAO, this.aoWeight));\r\n this.aoWeightSum = pb.add(this.aoWeightSum, this.aoWeight);\r\n }\r\n }\r\n this.$l.filtered = this.$choice(\r\n pb.greaterThan(this.weightSum, 1e-5),\r\n pb.div(this.sum, this.weightSum),\r\n this.center.rgb\r\n );\r\n this.$l.filteredAO = this.$choice(\r\n pb.greaterThan(this.aoWeightSum, 1e-5),\r\n pb.div(this.aoSum, this.aoWeightSum),\r\n this.centerAO\r\n );\r\n this.$outputs.outColor = pb.vec4(this.filtered, this.center.a);\r\n this.$outputs.outAO = pb.vec4(pb.clamp(this.filteredAO, 0, 1));\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_ATrous';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createSurfaceProgram(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.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec2().uniform(0);\r\n this.cameraFar = pb.float().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize);\r\n this.$l.normal = pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb;\r\n this.$l.depth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.cameraFar\r\n );\r\n this.$outputs.outColor = pb.vec4(this.normal, this.depth);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_Surface';\r\n return program;\r\n }\r\n\r\n /**\r\n * Multiplies the traced ambient occlusion into the scene color, like the SAO\r\n * effect, so enabling both double darkens.\r\n *\r\n * @internal\r\n */\r\n private compositeAO(ctx: DrawContext, sceneColor: Texture2D, ao: Texture2D, srgbOutput: boolean) {\r\n const key = srgbOutput ? 'srgb' : 'linear';\r\n let program = SSGI._compositePrograms[key];\r\n if (!program) {\r\n program = this.createCompositeProgram(ctx, srgbOutput);\r\n SSGI._compositePrograms[key] = program;\r\n }\r\n const hash = `${key}:${sceneColor.uid}:${ao.uid}`;\r\n let bindGroup = this._compositeBindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n bindGroup.setTexture('colorTex', sceneColor, fetchSampler('clamp_nearest_nomip'));\r\n // Nearest: AO is already full resolution.\r\n bindGroup.setTexture('aoTex', ao, fetchSampler('clamp_nearest_nomip'));\r\n this._compositeBindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setValue(\r\n 'aoParams',\r\n new Vector2(ctx.camera.ssgiAOIntensity, Math.max(1e-3, ctx.camera.ssgiAOPower))\r\n );\r\n bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'always'));\r\n }\r\n\r\n /** @internal */\r\n private createCompositeProgram(ctx: DrawContext, srgbOutput: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n 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.aoTex = pb.tex2D().uniform(0);\r\n this.aoParams = pb.vec2().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.color = pb.textureSampleLevel(this.colorTex, this.$inputs.uv, 0);\r\n this.$l.ao = pb.clamp(pb.textureSampleLevel(this.aoTex, this.$inputs.uv, 0).r, 0, 1);\r\n // mix() toward 1: intensity also tempers noisy or unresolved texels.\r\n this.$l.shapedAO = pb.pow(this.ao, this.aoParams.y);\r\n this.$l.finalAO = pb.mix(pb.float(1), this.shapedAO, this.aoParams.x);\r\n this.$l.occludedColor = pb.mul(this.color.rgb, this.finalAO);\r\n this.$outputs.outColor = pb.vec4(\r\n srgbOutput ? linearToGamma(this, this.occludedColor) : this.occludedColor,\r\n this.color.a\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = srgbOutput ? '@SSGI_CompositeAO_sRGB' : '@SSGI_CompositeAO';\r\n return program;\r\n }\r\n\r\n /** @internal */\r\n private createUpsampleProgram(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.sourceTex = pb.tex2D().uniform(0);\r\n this.aoSourceTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.guideParams = pb.vec4().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n this.$outputs.outAO = pb.vec4();\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.zw);\r\n this.$l.centerDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0),\r\n this.guideParams.z\r\n );\r\n this.$l.centerNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.weightSum = pb.float(0);\r\n this.$l.aoSum = pb.float(0);\r\n for (let y = -1; y <= 1; y++) {\r\n for (let x = -1; x <= 1; x++) {\r\n this.$l.sampleUV = pb.add(this.uv, pb.div(pb.vec2(x, y), this.targetSize.xy));\r\n this.$l.sampleValue = pb.textureSampleLevel(this.sourceTex, this.sampleUV, 0);\r\n this.$l.sampleAO = pb.textureSampleLevel(this.aoSourceTex, this.sampleUV, 0).r;\r\n this.$l.sampleDepth = pb.mul(\r\n ShaderHelper.sampleLinearDepth(this, this.depthTex, this.sampleUV, 0),\r\n this.guideParams.z\r\n );\r\n this.$l.sampleNormal = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSampleLevel(this.normalTex, this.sampleUV, 0).rgb, 2), pb.vec3(1))\r\n );\r\n this.$l.depthWeight = pb.exp(\r\n pb.neg(pb.div(pb.abs(pb.sub(this.sampleDepth, this.centerDepth)), this.guideParams.x))\r\n );\r\n this.$l.normalWeight = pb.pow(\r\n pb.max(0, pb.dot(this.centerNormal, this.sampleNormal)),\r\n this.guideParams.y\r\n );\r\n this.$l.weight = pb.mul(this.depthWeight, this.normalWeight, this.sampleValue.a);\r\n this.sum = pb.add(this.sum, pb.mul(this.sampleValue.rgb, this.weight));\r\n this.weightSum = pb.add(this.weightSum, this.weight);\r\n // Same joint bilateral weights as the irradiance.\r\n this.aoSum = pb.add(this.aoSum, pb.mul(this.sampleAO, this.weight));\r\n }\r\n }\r\n this.$l.result = this.$choice(\r\n pb.greaterThan(this.weightSum, 1e-5),\r\n pb.div(this.sum, this.weightSum),\r\n pb.textureSampleLevel(this.sourceTex, this.uv, 0).rgb\r\n );\r\n this.$l.resultAO = this.$choice(\r\n pb.greaterThan(this.weightSum, 1e-5),\r\n pb.div(this.aoSum, this.weightSum),\r\n pb.textureSampleLevel(this.aoSourceTex, this.uv, 0).r\r\n );\r\n this.$outputs.outColor = pb.vec4(this.result, pb.float(pb.greaterThan(this.weightSum, 1e-5)));\r\n this.$outputs.outAO = pb.vec4(pb.clamp(this.resultAO, 0, 1));\r\n });\r\n }\r\n })!;\r\n program.name = '@SSGI_Upsample';\r\n return program;\r\n }\r\n}\r\n"],"names":["IRRADIANCE_FORMAT","SURFACE_FORMAT","MOMENTS_FORMAT","AO_FORMAT","HALF_FLOAT_MAX","MOMENT_LUMINANCE_MAX","SSGI","AbstractPostEffect","_tracePrograms","_temporalPrograms","_atrousProgram","_surfaceProgram","_upsampleProgram","_compositePrograms","_traceBindGroups","_temporalBindGroups","_atrousBindGroups","_surfaceBindGroups","_upsampleBindGroups","_compositeBindGroups","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","ctx","requireMotionVectorTexture","requireHiZTexture","requireSceneNormalTexture","setup","s","graph","history","blackboard","input","linearDepthHandle","get","FrameResources","LinearDepth","normalHandle","SceneNormal","motionHandle","MotionVector","hiZHandle","HiZ","noFogHandle","SceneColorNoFog","sampleColorHandle","settings","camera","ssgiResolvedSettings","traceWidth","halfRes","Math","max","ceil","width","traceHeight","height","traceSize","fullSize","traceDesc","format","sizeMode","fullIrradianceDesc","surfaceDesc","momentsDesc","aoTraceDesc","fullAODesc","findHistoryRead","name","historyReads","find","binding","handle","previousIrradianceHandle","RGHistoryResources","SSGI_IRRADIANCE","previousSurfaceHandle","SSGI_SURFACE","previousMomentsHandle","importPreviousIfCompatible","SSGI_MOMENTS","previousAOHandle","SSGI_AO","previousSceneColorHandle","SSGI_SCENE_COLOR","colorFormat","canSampleSceneHistory","readFrameInputs","builder","read","dep","dependencies","traceResult","addPass","out","createTexture","label","ao","fb","createFramebuffer","colorAttachments","depthAttachment","ignoreDepthStencil","setExecute","rg","device","pushDeviceStates","setFramebuffer","getFramebuffer","trace","getTexture","popDeviceStates","irradiance","surfaceHandle","writeSurface","canTemporal","ssgiTemporal","temporalResult","moments","temporal","filteredHandle","filteredAOHandle","pass","denoisePasses","source","aoSource","filtered","atrous","finalIrradianceHandle","finalAOHandle","upsampled","upsample","traceResolutionAOHandle","output","createOutput","framebuffer","sceneColor","filteredAO","surface","ssgiAOIntensity","compositeAO","srgbOutput","passThrough","commitHistory","color","texture","queueRetainedCommit","currentColor","previousColor","depth","normal","motion","previousSurface","hiZ","sampleHistory","probes","getActiveProbeVolume","scene","envHash","env","light","getHash","historyHash","uid","hizHash","programHash","raysPerPixel","bindGroupHash","program","createTraceProgram","colorSampler","fetchSampler","bindGroup","createBindGroup","bindGroupLayouts","setTexture","setValue","mipLevelCount","Vector2","ssgiDepthReject","ssgiNormalReject","getNearPlane","getFarPlane","viewMatrix","worldMatrix","getProjectionMatrix","Matrix4x4","invert","Vector4","ssgiMaxDistance","ssgiThickness","maxSteps","ssgiStride","ssgiIntensity","ssgiMaxRayIntensity","ShaderHelper","getEnvLightLuminance","frameInfo","frameCounter","ssgiSkyOcclusion","needFlip","envLight","updateBindGroup","applyBindGroup","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","current","currentAO","previousIrradiance","previousMoments","previousAO","hasHistory","hash","createTemporalProgram","ssgiTemporalWeight","step","hasTemporalHistory","createAtrousProgram","createSurfaceProgram","createUpsampleProgram","useHiZ","useProbes","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","currentColorTex","tex2D","depthTex","sampleType","normalTex","previousColorTex","motionTex","previousSurfaceTex","historyRejectParams","hizTex","depthMipLevels","cameraNearFar","mat4","invViewMatrix","projMatrix","invProjMatrix","traceParams","targetSize","radianceParams","skyOcclusion","float","initShaderBindings","declareProbeUniforms","outColor","outAO","func","$l","linearDepth","sampleLinearDepth","nonLinearDepth","linearNormalizedToNonLinearDepth","clipPos","sub","deviceDepthToClipZ","clamp","viewPos","$return","div","xyz","w","q","dot","p","fract","sin","seed","vec3","up","$choice","lessThan","abs","n","z","tangent","normalize","cross","bitangent","r","sqrt","xi","x","phi","PI","local","cos","fragCoord","SSGI_getPosition","greaterThanEqual","$else","worldNormal","textureSampleLevel","rgb","viewNormal","iblIrradiance","getIrradiance","probeValid","worldPos","cameraPos","probe","sampleProbeIrradiance","mix","a","correctionSum","determinateSum","escapedSum","occludedSum","$for","SSGI_hash22","rayIndex","worldRay","SSGI_cosineDirection","viewRay","rayOrigin","giTrace","stepOffset","hit","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","hitFinite","all","occluded","escaped","hitUV","greaterThan","rawEnvRadiance","getRadiance","envRadiance","currentRadiance","hitMotion","previousHitUV","historyValid","and","lessThanEqual","historyRadiance","currentHitDepth","currentHitNormal","previousHitSurface","previousHitNormal","screenRadiance","screenRadianceFinite","maxComponent","g","b","fireflyScale","clampedScreenRadiance","bounceGain","skyLoss","correction","determinateCount","minimumIrradiance","boundedIrradiance","currentTex","currentAOTex","previousIrradianceTex","previousMomentsTex","previousAOTex","temporalParams","outIrradiance","outMoments","boundedLuminance","c","result","resultAO","luminance","SSGI_luminance","moment","previousUV","validUV","currentDepth","currentNormal","previousNormal","surfaceValid","neighborhoodMin","neighborhoodMax","aoNeighborhoodMin","aoNeighborhoodMax","neighborUV","neighbor","min","aoNeighbor","previous","previousClamped","previousMoment","validity","runningAverageWeight","historyWeight","weight","previousAOClamped","momentXY","historyLength","variance","spatialLum","spatialLum2","neighborLum","spatialVariance","sourceTex","aoSourceTex","momentsTex","filterParams","denoiseParams","cameraFar","center","centerDepth","centerNormal","centerLum","historyConfidence","stepScale","effStep","normalPower","sigmaScale","sigma","centerAO","sum","weightSum","aoSum","aoWeightSum","kernel","kernelWeight","sampleUV","sampleValue","sampleDepth","sampleNormal","depthWeight","exp","normalWeight","pow","colorWeight","aoWeight","sampleAO","key","createCompositeProgram","ssgiAOPower","colorTex","aoTex","aoParams","shapedAO","finalAO","occludedColor","linearToGamma","guideParams","zw"],"mappings":"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"}