@zephyr3d/scene 0.9.27 → 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 (502) 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 +54 -0
  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 +279 -55
  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 +171 -1
  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 +104 -178
  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 +25436 -15990
  109. package/dist/index.js +65 -11
  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/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"envlight.js","sources":["../../src/render/envlight.ts"],"sourcesContent":["import type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, DRef, Matrix4x4, REVERSE_Z, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureCube\r\n} from '@zephyr3d/device';\r\nimport { fetchSampler, getSamplerOptions } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\nimport type { DrawContext } from './drawable';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\n\r\n/**\r\n * Depth-proportional term of the SSGI history rejection tolerance.\r\n *\r\n * The surface history stores `linearDepth * cameraFar` in an `rgba16f` alpha\r\n * channel, so its quantization error grows with depth: fp16 carries ~11 bits of\r\n * mantissa, giving a relative error near 4.9e-4 (~0.49 world units at a depth of\r\n * 1000). A purely absolute tolerance is therefore unusable in the distance -- at\r\n * `ssgiDepthReject`'s 0.5 default, storage quantization alone consumes the whole\r\n * budget and the test degenerates into dithered noise. This factor keeps roughly\r\n * 4x headroom over that error while staying far below the depth step of a real\r\n * disocclusion.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_DEPTH_TOLERANCE_RELATIVE = 2e-3;\r\n\r\n/**\r\n * Multiple of the scaled tolerance at which history is dropped outright.\r\n *\r\n * Inside this gate the depth term contributes a smooth `exp(-d/tol)` weight\r\n * rather than a boolean, so confidence decays continuously instead of flipping.\r\n * At 3x the weight is already down to ~0.05, making the cutoff visually\r\n * continuous -- which is what keeps a rejection boundary from reading as a\r\n * staircase after nearest-neighbour sampling quantizes it to texel steps.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_DEPTH_GATE_SCALE = 3;\r\n\r\n/**\r\n * Clamp distance, in texels, at which history repair reaches its widest radius.\r\n *\r\n * The clamp distance says how far the reprojection had to travel to get back on\r\n * screen, which is a direct measure of how unrelated to this pixel the surviving\r\n * history is. It scales the repair radius rather than gating repair off: the\r\n * lighting pass only ever sees the previous frame, so a pixel rotating in from\r\n * off screen has no fresh data anywhere and both alternatives to spreading the\r\n * taps look worse than the blur does.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_REPAIR_WIDE_CLAMP_TEXELS = 8;\r\n\r\n/**\r\n * Repair tap radius in texels, from an interior hole to a camera-edge one.\r\n *\r\n * The radius is what trades structure against smoothness. At one texel the taps\r\n * of neighbouring pixels barely overlap, so detail survives -- correct for a hole\r\n * in the middle of the screen, where the reprojection landed near its true\r\n * position. Wide taps instead overlap heavily between neighbours, which turns the\r\n * one strip of history that survives at a screen edge into a smooth low-frequency\r\n * estimate of the surface's irradiance rather than a per-column copy of single\r\n * texels, and copying single texels is what draws streaks along the direction of\r\n * travel.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_REPAIR_MIN_RADIUS_TEXELS = 1;\r\nconst SSGI_REPAIR_MAX_RADIUS_TEXELS = 16;\r\n\r\n/**\r\n * Environment light type\r\n * @public\r\n */\r\nexport type EnvLightType = 'ibl' | 'hemisphere' | 'constant' | 'none';\r\n\r\n/**\r\n * Base class for any kind of environment light\r\n * @public\r\n */\r\nexport abstract class EnvironmentLighting extends Disposable {\r\n /**\r\n * The environment light type\r\n */\r\n abstract getType(): EnvLightType;\r\n /**\r\n * Initialize shader bindings\r\n * @param pb - The program builder\r\n */\r\n abstract initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext): void;\r\n /**\r\n * Updates the uniform values\r\n * @param bg - The bind group to be updated\r\n */\r\n abstract updateBindGroup(bg: BindGroup, ctx?: DrawContext): void;\r\n /**\r\n * Get radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Surface roughness\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get Charlie-filtered sheen radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Sheen roughness\r\n *\r\n * @returns The sheen radiance for the fragment\r\n */\r\n abstract getSheenRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get irradiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param normal - surface normal\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext): PBShaderExp;\r\n /**\r\n * Returns whether this environment lighting supports reflective light\r\n */\r\n abstract hasRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports sheen reflective light\r\n */\r\n abstract hasSheenRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports diffuse light\r\n */\r\n abstract hasIrradiance(): boolean;\r\n}\r\n\r\n/**\r\n * IBL with SH based environment lighting\r\n * @public\r\n */\r\nexport class EnvShIBL extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP = 'zIBLRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP = 'zIBLSheenRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD = 'zIBLRadianceMapMaxLOD';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_SH = 'zIBLIrradianceSH';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_WINDOW = 'zIBLIrradianceWindow';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_IRRADIANCE = 'zSSGIPreviousIrradiance';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_SURFACE = 'zSSGIPreviousSurface';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_CURRENT_DEPTH = 'zSSGICurrentDepth';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_MOTION = 'zSSGICurrentMotion';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_TARGET_SIZE = 'zSSGITargetSize';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_REPROJECTION = 'zSSGIReprojection';\r\n /**\r\n * Transforms a current-frame view-space position into previous-frame clip\r\n * space, so the reprojected depth can be compared against the surface history\r\n * in the frame that history was written in. @internal\r\n */\r\n public static readonly UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP = 'zSSGIViewToPrevClip';\r\n /** Unprojects a screen-space sample back into current view space. @internal */\r\n public static readonly UNIFORM_NAME_SSGI_INV_PROJECTION = 'zSSGIInvProjection';\r\n /** Scratch for the view -> previous clip composition. @internal */\r\n private static readonly _viewToPrevClip = new Matrix4x4();\r\n /** @internal */\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _sheenRadianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n /** @internal */\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n /** @internal */\r\n private _irraidanceWindow: Vector3;\r\n /**\r\n * Creates an instance of EnvIBL\r\n * @param radianceMap - The radiance map\r\n * @param irradianceSH - The irradiance SH\r\n */\r\n constructor(\r\n radianceMap?: TextureCube,\r\n irradianceSH?: GPUDataBuffer,\r\n irradianceSHFB?: FrameBuffer,\r\n sheenRadianceMap?: TextureCube\r\n ) {\r\n super();\r\n this._radianceMap = new DRef(radianceMap || null);\r\n this._sheenRadianceMap = new DRef(sheenRadianceMap || null);\r\n this._irradianceSH = new DRef(irradianceSH || null);\r\n this._irradianceSHFB = new DRef(irradianceSHFB || null);\r\n this._irraidanceWindow = new Vector3();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'ibl' as const;\r\n }\r\n /** The radiance map */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n }\r\n /** The Charlie-filtered sheen radiance map */\r\n get sheenRadianceMap() {\r\n return this._sheenRadianceMap.get();\r\n }\r\n set sheenRadianceMap(tex) {\r\n this._sheenRadianceMap.set(tex);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n }\r\n /** The irradiance sh window */\r\n get irradianceWindow() {\r\n return this._irraidanceWindow;\r\n }\r\n set irradianceWindow(val) {\r\n this._irraidanceWindow = val;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext) {\r\n if (pb.shaderKind === 'fragment') {\r\n if (this.radianceMap) {\r\n // Prefiltered radiance cube: mipmap chain indexed by roughness\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP] = pb\r\n .texCube()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD] = pb.float().uniform(0);\r\n }\r\n if (this.sheenRadianceMap) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP] = pb\r\n .texCube()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear'));\r\n }\r\n if (this.irradianceSHFB) {\r\n const tex = pb.tex2D();\r\n const formatInfo = getDevice()\r\n .getDeviceCaps()\r\n .textureCaps.getTextureFormatInfo(this.irradianceSHFB.getColorAttachments()[0].format);\r\n if (formatInfo && !formatInfo.filterable) {\r\n tex.sampleType('unfilterable-float');\r\n }\r\n // SH coefficients are read at texel centers; nearest sampling is exact\r\n tex.withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = tex.uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n } else if (this.irradianceSH) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = pb.vec4[9]().uniformBuffer(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n }\r\n if (EnvShIBL.hasSSGIHistory(ctx)) {\r\n const irradianceSampler =\r\n pb.getDevice().type === 'webgl' ? 'clamp_nearest_nomip' : 'clamp_linear_nomip';\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions(irradianceSampler));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_SURFACE] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_CURRENT_DEPTH] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n if (ctx?.motionVectorTexture) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_MOTION] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n }\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE] = pb.vec2().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_REPROJECTION] = pb.vec4().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP] = pb.mat4().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_INV_PROJECTION] = pb.mat4().uniform(0);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup, ctx?: DrawContext) {\r\n if (this.radianceMap) {\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD, this.radianceMap.mipLevelCount - 1);\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP, this.radianceMap);\r\n }\r\n if (this.sheenRadianceMap) {\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP, this.sheenRadianceMap);\r\n }\r\n if (this.irradianceSHFB) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH,\r\n this.irradianceSHFB.getColorAttachments()[0],\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n } else if (this.irradianceSH) {\r\n bg.setBuffer(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH, this.irradianceSH);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n }\r\n if (EnvShIBL.hasSSGIHistory(ctx)) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE,\r\n ctx!.SSGIIrradianceHistoryTexture!,\r\n fetchSampler(ctx!.device.type === 'webgl' ? 'clamp_nearest_nomip' : 'clamp_linear_nomip')\r\n );\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_SURFACE,\r\n ctx!.SSGISurfaceHistoryTexture!,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_CURRENT_DEPTH,\r\n ctx!.linearDepthTexture!,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n if (ctx!.motionVectorTexture) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_MOTION,\r\n ctx!.motionVectorTexture,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n }\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE, new Vector2(ctx!.renderWidth, ctx!.renderHeight));\r\n bg.setValue(\r\n EnvShIBL.UNIFORM_NAME_SSGI_REPROJECTION,\r\n new Vector4(\r\n ctx!.camera.ssgiDepthReject,\r\n ctx!.camera.ssgiNormalReject,\r\n ctx!.camera.getFarPlane(),\r\n ctx!.camera.getNearPlane()\r\n )\r\n );\r\n // View -> world -> previous clip. `prevVPMatrix` is null on the first frame\r\n // after a history reset; falling back to the current VP makes the expected\r\n // previous depth equal the current one, so the depth term is a no-op until\r\n // a real previous frame exists.\r\n const prevVP = ctx!.camera.prevVPMatrix ?? ctx!.camera.viewProjectionMatrix;\r\n Matrix4x4.multiply(prevVP as Matrix4x4, ctx!.camera.worldMatrix as Matrix4x4, EnvShIBL._viewToPrevClip);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP, EnvShIBL._viewToPrevClip);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_SSGI_INV_PROJECTION, ctx!.camera.getInvProjectionMatrix());\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('Z_sh_Y0', [pb.vec3('v')], function () {\r\n this.$return(0.2820947917);\r\n });\r\n pb.func('Z_sh_Y1', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y2', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.z, 0.4886025119));\r\n });\r\n pb.func('Z_sh_Y3', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y4', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\r\n });\r\n pb.func('Z_sh_Y5', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y6', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\r\n });\r\n pb.func('Z_sh_Y7', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y8', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.x, this.v.x), pb.mul(this.v.y, this.v.y)), 0.5462742153));\r\n });\r\n pb.func('Z_sh_eval', [pb.vec3('v')], function () {\r\n this.$l.window = this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW];\r\n if (that.irradianceSHFB) {\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y1(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y2(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y3(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y4(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y5(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y6(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y7(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y8(this.v),\r\n this.window.z\r\n )\r\n );\r\n } else {\r\n this.$l.c = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][0].xyz,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][1].xyz, this.Z_sh_Y1(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][2].xyz, this.Z_sh_Y2(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][3].xyz, this.Z_sh_Y3(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][4].xyz, this.Z_sh_Y4(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][5].xyz, this.Z_sh_Y5(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][6].xyz, this.Z_sh_Y6(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][7].xyz, this.Z_sh_Y7(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][8].xyz, this.Z_sh_Y8(this.v), this.window.z)\r\n );\r\n }\r\n this.$return(this.c);\r\n });\r\n const iblIrradiance = pb.getGlobalScope().Z_sh_eval(normal) as PBShaderExp;\r\n if (!EnvShIBL.hasSSGIHistory(ctx)) {\r\n return iblIrradiance;\r\n }\r\n const useMotionReprojection = !!ctx?.motionVectorTexture;\r\n pb.func('Z_ssgi_reprojectIrradiance', [pb.vec3('currentNormal'), pb.vec3('ibl')], function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this[EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE]);\r\n if (useMotionReprojection) {\r\n this.$l.motion = pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_SSGI_MOTION], this.uv, 0).xy;\r\n this.$l.previousUV = pb.sub(this.uv, this.motion);\r\n this.$l.motionValid = pb.not(pb.any(pb.greaterThanEqual(pb.abs(this.motion), pb.vec2(5e4))));\r\n } else {\r\n this.$l.previousUV = this.uv;\r\n this.$l.motionValid = pb.bool(true);\r\n }\r\n this.$l.params = this[EnvShIBL.UNIFORM_NAME_SSGI_REPROJECTION];\r\n this.$l.fallback = pb.mul(this.ibl, this.light.envLightStrength);\r\n this.$l.normalizedCurrentNormal = pb.normalize(this.currentNormal);\r\n this.$l.depthTolerance = pb.max(this.params.x, 1e-4);\r\n this.$l.texelSize = pb.div(pb.vec2(1), this[EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE]);\r\n this.$l.halfTexel = pb.mul(this.texelSize, 0.5);\r\n this.$l.maxUV = pb.sub(pb.vec2(1), this.halfTexel);\r\n this.$l.previousUVInBounds = pb.and(\r\n this.motionValid,\r\n pb.all(pb.greaterThanEqual(this.previousUV, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.previousUV, pb.vec2(1)))\r\n );\r\n this.$l.previousSampleUV = pb.clamp(this.previousUV, this.halfTexel, this.maxUV);\r\n this.$l.previousSurface = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_SURFACE],\r\n this.previousSampleUV,\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.currentDepthSample = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_CURRENT_DEPTH],\r\n this.uv,\r\n 0\r\n );\r\n this.$l.currentDepth = pb.mul(\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.currentDepthSample)\r\n : this.currentDepthSample.r,\r\n this.params.z\r\n );\r\n // The surface history holds a Z measured in the *previous* frame's view\r\n // space, so the current Z cannot be compared against it directly: under\r\n // camera rotation a static, correctly reprojected point has\r\n // `dz ~ r * sin(theta) * dphi`, which crosses any fixed threshold at the\r\n // screen edges and drops history in the exact staircase pattern that\r\n // nearest-neighbour sampling of the reprojected UV produces. Rebuild the\r\n // current view-space position and push it through `view -> previous clip`\r\n // instead; `clip.w` is `-view.z`, i.e. the same positive view-space\r\n // distance the history stores.\r\n this.$l.ndc = pb.sub(pb.mul(this.uv, 2), pb.vec2(1));\r\n this.$l.nearPlaneRay = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_INV_PROJECTION],\r\n pb.vec4(this.ndc, REVERSE_Z ? 1 : -1, 1)\r\n );\r\n // Perspective unprojection of the near-plane NDC depth (GL -1, reverse\r\n // ZO 1) lands on the near plane, where view z is exactly -near; scaling\r\n // that ray by depth/near walks it out to the sample without a\r\n // non-linear depth round trip.\r\n this.$l.viewPos = pb.mul(\r\n pb.div(this.nearPlaneRay.xyz, this.nearPlaneRay.w),\r\n pb.div(this.currentDepth, pb.max(this.params.w, 1e-6))\r\n );\r\n this.$l.expectedPreviousDepth = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP],\r\n pb.vec4(this.viewPos, 1)\r\n ).w;\r\n this.$l.depthDelta = pb.abs(pb.sub(this.previousSurface.a, this.expectedPreviousDepth));\r\n // fp16 storage error scales with depth, so the tolerance has to as well.\r\n this.$l.scaledDepthTolerance = pb.add(\r\n this.depthTolerance,\r\n pb.mul(this.currentDepth, SSGI_DEPTH_TOLERANCE_RELATIVE)\r\n );\r\n this.$l.depthWeight = pb.exp(pb.neg(pb.div(this.depthDelta, this.scaledDepthTolerance)));\r\n this.$l.depthValid = pb.lessThanEqual(\r\n this.depthDelta,\r\n pb.mul(this.scaledDepthTolerance, SSGI_DEPTH_GATE_SCALE)\r\n );\r\n this.$l.normalValid = pb.greaterThanEqual(\r\n pb.dot(this.normalizedCurrentNormal, this.previousNormal),\r\n this.params.y\r\n );\r\n this.$l.previousIrradiance = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE],\r\n this.previousSampleUV,\r\n 0\r\n );\r\n this.$l.previousAlpha = pb.clamp(this.previousIrradiance.a, 0, 1);\r\n this.$l.exactHistoryValid = pb.and(\r\n this.previousUVInBounds,\r\n this.depthValid,\r\n this.normalValid,\r\n pb.greaterThan(this.previousAlpha, 1e-4)\r\n );\r\n this.$if(this.exactHistoryValid, function () {\r\n // Weighting confidence by the depth term keeps the gate boundary a ramp\r\n // rather than a step, so residual reprojection error on moving geometry\r\n // and grazing surfaces fades out instead of outlining itself.\r\n this.$l.exactConfidence = pb.mul(this.previousAlpha, this.depthWeight);\r\n this.$if(pb.greaterThan(this.exactConfidence, 1e-4), function () {\r\n this.$return(pb.mix(this.fallback, this.previousIrradiance.rgb, this.exactConfidence));\r\n });\r\n });\r\n\r\n // Repair disoccluded and off-screen history from nearby samples before\r\n // falling back to IBL. Sampling around the clamped reprojected position\r\n // fills camera-edge holes, while current UV provides a conservative\r\n // screen-stationary candidate for invalid motion vectors.\r\n this.$l.repairCenter = this.$choice(\r\n this.motionValid,\r\n this.previousSampleUV,\r\n pb.clamp(this.uv, this.halfTexel, this.maxUV)\r\n );\r\n // How far the reprojection had to be clamped to land back on screen. For a\r\n // hole in the interior this is zero and the taps really are neighbours of\r\n // the reprojected point, but for geometry rotating in from off screen the\r\n // clamp can travel hundreds of pixels -- and the depth and normal terms\r\n // cannot catch that, because the edge texel it lands on is usually the same\r\n // continuous surface (same normal, similar depth) merely sampled somewhere\r\n // spatially unrelated. Its irradiance therefore belongs to a different part\r\n // of the surface, so reading it as a point sample smears into streaks along\r\n // the direction of travel. Drive the tap radius with it instead, trading\r\n // that structure for a blur.\r\n this.$l.repairClampTexels = pb.div(\r\n pb.length(pb.sub(this.previousSampleUV, this.previousUV)),\r\n pb.max(pb.min(this.texelSize.x, this.texelSize.y), 1e-8)\r\n );\r\n // Widen the taps as the clamp travel grows. Only meaningful while the motion\r\n // vector is usable: without one the centre is already the current UV by\r\n // construction, so there is no travel to react to.\r\n this.$l.repairRadius = pb.mix(\r\n pb.float(SSGI_REPAIR_MIN_RADIUS_TEXELS),\r\n pb.float(SSGI_REPAIR_MAX_RADIUS_TEXELS),\r\n this.$choice(\r\n this.motionValid,\r\n pb.smoothStep(0, SSGI_REPAIR_WIDE_CLAMP_TEXELS, this.repairClampTexels),\r\n pb.float(0)\r\n )\r\n );\r\n // Taps this far apart straddle real depth variation across the surface, so a\r\n // gate tuned for immediate neighbours would reject most of them and bring\r\n // the dark band back. Loosen it with the radius and lean on the normal term,\r\n // which stays strict, to keep the average on one surface.\r\n this.$l.repairDepthTolerance = pb.mul(\r\n this.scaledDepthTolerance,\r\n SSGI_DEPTH_GATE_SCALE,\r\n pb.add(1, this.repairRadius)\r\n );\r\n this.$l.repairSum = pb.vec3(0);\r\n this.$l.repairWeight = pb.float(0);\r\n // A full ring rather than a cross: at the wide end four taps are not an\r\n // average but four distant point copies, and their axis alignment paints\r\n // directional artifacts of its own.\r\n const repairSamples = [\r\n { currentUV: false, x: 0, y: 0, kernel: 1 },\r\n { currentUV: false, x: -1, y: 0, kernel: 0.7 },\r\n { currentUV: false, x: 1, y: 0, kernel: 0.7 },\r\n { currentUV: false, x: 0, y: -1, kernel: 0.7 },\r\n { currentUV: false, x: 0, y: 1, kernel: 0.7 },\r\n { currentUV: false, x: -0.7071, y: -0.7071, kernel: 0.5 },\r\n { currentUV: false, x: 0.7071, y: -0.7071, kernel: 0.5 },\r\n { currentUV: false, x: -0.7071, y: 0.7071, kernel: 0.5 },\r\n { currentUV: false, x: 0.7071, y: 0.7071, kernel: 0.5 },\r\n { currentUV: true, x: 0, y: 0, kernel: 0.5 }\r\n ];\r\n for (let i = 0; i < repairSamples.length; i++) {\r\n const sample = repairSamples[i];\r\n const baseUV = sample.currentUV ? this.uv : this.repairCenter;\r\n this.$l[`repairUV${i}`] = pb.add(\r\n baseUV,\r\n pb.mul(this.texelSize, pb.vec2(sample.x, sample.y), this.repairRadius)\r\n );\r\n this.$l[`repairUVValid${i}`] = pb.and(\r\n pb.all(pb.greaterThanEqual(this[`repairUV${i}`], this.halfTexel)),\r\n pb.all(pb.lessThanEqual(this[`repairUV${i}`], this.maxUV))\r\n );\r\n this.$l[`repairSurface${i}`] = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_SURFACE],\r\n pb.clamp(this[`repairUV${i}`], this.halfTexel, this.maxUV),\r\n 0\r\n );\r\n this.$l[`repairNormal${i}`] = pb.normalize(\r\n pb.sub(pb.mul(this[`repairSurface${i}`].rgb, 2), pb.vec3(1))\r\n );\r\n // Compared against the reprojected depth, not the current one: the taps\r\n // are samples of the previous frame's surface, so they live in the same\r\n // space as `expectedPreviousDepth`.\r\n this.$l[`repairDepthDelta${i}`] = pb.abs(\r\n pb.sub(this[`repairSurface${i}`].a, this.expectedPreviousDepth)\r\n );\r\n this.$l[`repairNormalDot${i}`] = pb.dot(this.normalizedCurrentNormal, this[`repairNormal${i}`]);\r\n this.$l[`repairSurfaceValid${i}`] = pb.and(\r\n this[`repairUVValid${i}`],\r\n pb.lessThanEqual(this[`repairDepthDelta${i}`], this.repairDepthTolerance),\r\n pb.greaterThanEqual(this[`repairNormalDot${i}`], this.params.y)\r\n );\r\n this.$l[`repairIrradiance${i}`] = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE],\r\n pb.clamp(this[`repairUV${i}`], this.halfTexel, this.maxUV),\r\n 0\r\n );\r\n // Same widening as the hard gate above: a falloff tuned for immediate\r\n // neighbours decays to nothing across a wide tap and starves the average.\r\n this.$l[`repairDepthWeight${i}`] = pb.exp(\r\n pb.neg(pb.div(this[`repairDepthDelta${i}`], this.repairDepthTolerance))\r\n );\r\n this.$l[`repairNormalWeight${i}`] = pb.pow(pb.max(0, this[`repairNormalDot${i}`]), 8);\r\n this.$l[`repairSampleWeight${i}`] = pb.mul(\r\n pb.float(this[`repairSurfaceValid${i}`]),\r\n pb.clamp(this[`repairIrradiance${i}`].a, 0, 1),\r\n this[`repairDepthWeight${i}`],\r\n this[`repairNormalWeight${i}`],\r\n // The screen-stationary tap only exists to cover unusable motion\r\n // vectors; while motion is valid it is a history read at the wrong world\r\n // point, which survives the depth term on any flat surface and leaves a\r\n // stationary ghost.\r\n sample.currentUV ? pb.float(pb.not(this.motionValid)) : pb.float(1),\r\n sample.kernel\r\n );\r\n this.repairSum = pb.add(\r\n this.repairSum,\r\n pb.mul(this[`repairIrradiance${i}`].rgb, this[`repairSampleWeight${i}`])\r\n );\r\n this.repairWeight = pb.add(this.repairWeight, this[`repairSampleWeight${i}`]);\r\n }\r\n this.$if(pb.greaterThan(this.repairWeight, 1e-4), function () {\r\n this.$l.repairedIrradiance = pb.div(this.repairSum, this.repairWeight);\r\n // Repaired samples are intentionally capped below full confidence so\r\n // newly traced irradiance replaces the extrapolation on following frames.\r\n this.$l.repairConfidence = pb.mul(pb.clamp(this.repairWeight, 0, 1), 0.85);\r\n this.$return(pb.mix(this.fallback, this.repairedIrradiance, this.repairConfidence));\r\n });\r\n this.$return(this.fallback);\r\n });\r\n return scope.Z_ssgi_reprojectIrradiance(normal, iblIrradiance) as PBShaderExp;\r\n }\r\n\r\n /** Whether all textures required by the lighting reprojection are scoped. @internal */\r\n static hasSSGIHistory(ctx?: DrawContext) {\r\n return !!(\r\n ctx?.SSGI &&\r\n ctx.SSGIIrradianceHistoryTexture &&\r\n ctx.SSGISurfaceHistoryTexture &&\r\n (ctx.device.type === 'webgl' || ctx.motionVectorTexture) &&\r\n ctx.linearDepthTexture\r\n );\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return !!this._radianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return !!this._sheenRadianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return !!this._irradianceSH.get() || !!this._irradianceSHFB.get();\r\n }\r\n /**\r\n * Disposes the object and releases all GPU resources\r\n * @override\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._radianceMap.dispose();\r\n this._sheenRadianceMap.dispose();\r\n this._irradianceSH.dispose();\r\n this._irradianceSHFB.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Constant ambient light\r\n * @public\r\n */\r\nexport class EnvConstantAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_CONSTANT_AMBIENT = 'zConstantAmbient';\r\n /** @internal */\r\n private readonly _ambientColor: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientColor - The ambient color\r\n */\r\n constructor(ambientColor?: Vector4) {\r\n super();\r\n this._ambientColor = ambientColor ? new Vector4(ambientColor) : new Vector4(0, 0, 0, 1);\r\n }\r\n /** The ambient color */\r\n get ambientColor(): Immutable<Vector4> {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(ambientColor: Immutable<Vector4>) {\r\n if (ambientColor) {\r\n this._ambientColor.set(ambientColor);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'constant' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT] = pb.vec4().uniform(0);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n bg.setValue(EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT, this._ambientColor);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, _normal: PBShaderExp) {\r\n return scope[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT].rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Hemispheric ambient light\r\n * @public\r\n */\r\nexport class EnvHemisphericAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_UP = 'zHemisphericAmbientUp';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_DOWN = 'zHemisphericAmbientDown';\r\n /** @internal */\r\n private readonly _ambientUp: Vector4;\r\n /** @internal */\r\n private readonly _ambientDown: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientUp - The upside ambient color\r\n * @param ambientDown - The downside ambient color\r\n */\r\n constructor(ambientUp: Vector4, ambientDown: Vector4) {\r\n super();\r\n this._ambientUp = new Vector4(ambientUp);\r\n this._ambientDown = new Vector4(ambientDown);\r\n }\r\n /** The upside ambient color */\r\n get ambientUp(): Immutable<Vector4> {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientUp.set(color);\r\n }\r\n }\r\n /** The downside ambient color */\r\n get ambientDown(): Immutable<Vector4> {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientDown.set(color);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'hemisphere' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP] = pb.vec4().uniform(0);\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN] = pb.vec4().uniform(0);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup) {\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP, this._ambientUp);\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN, this._ambientDown);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, _roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(refl.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n return this.getRadiance(scope, refl, roughness);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(normal.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n"],"names":["SSGI_DEPTH_TOLERANCE_RELATIVE","SSGI_DEPTH_GATE_SCALE","SSGI_REPAIR_WIDE_CLAMP_TEXELS","SSGI_REPAIR_MIN_RADIUS_TEXELS","SSGI_REPAIR_MAX_RADIUS_TEXELS","EnvironmentLighting","Disposable","EnvShIBL","UNIFORM_NAME_IBL_RADIANCE_MAP","UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP","UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD","UNIFORM_NAME_IBL_IRRADIANCE_SH","UNIFORM_NAME_IBL_IRRADIANCE_WINDOW","UNIFORM_NAME_SSGI_IRRADIANCE","UNIFORM_NAME_SSGI_SURFACE","UNIFORM_NAME_SSGI_CURRENT_DEPTH","UNIFORM_NAME_SSGI_MOTION","UNIFORM_NAME_SSGI_TARGET_SIZE","UNIFORM_NAME_SSGI_REPROJECTION","UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP","UNIFORM_NAME_SSGI_INV_PROJECTION","_viewToPrevClip","Matrix4x4","radianceMap","irradianceSH","irradianceSHFB","sheenRadianceMap","_radianceMap","DRef","_sheenRadianceMap","_irradianceSH","_irradianceSHFB","_irraidanceWindow","Vector3","getType","get","tex","set","value","irradianceWindow","val","initShaderBindings","pb","ctx","shaderKind","getGlobalScope","texCube","uniform","withSampler","getSamplerOptions","float","tex2D","formatInfo","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","getColorAttachments","format","filterable","sampleType","vec3","vec4","uniformBuffer","hasSSGIHistory","irradianceSampler","type","motionVectorTexture","vec2","mat4","updateBindGroup","bg","setValue","mipLevelCount","setTexture","fetchSampler","setBuffer","SSGIIrradianceHistoryTexture","device","SSGISurfaceHistoryTexture","linearDepthTexture","Vector2","renderWidth","renderHeight","Vector4","camera","ssgiDepthReject","ssgiNormalReject","getFarPlane","getNearPlane","prevVP","prevVPMatrix","viewProjectionMatrix","multiply","worldMatrix","getInvProjectionMatrix","getRadiance","scope","refl","roughness","$builder","shaderCaps","supportShaderTextureLod","textureSampleLevel","mul","rgb","textureSample","getSheenRadiance","getIrradiance","normal","that","func","$return","v","y","z","x","sub","$l","window","c","Z_sh_Y0","add","Z_sh_Y1","Z_sh_Y2","Z_sh_Y3","Z_sh_Y4","Z_sh_Y5","Z_sh_Y6","Z_sh_Y7","Z_sh_Y8","xyz","iblIrradiance","Z_sh_eval","useMotionReprojection","uv","div","$builtins","fragCoord","xy","motion","previousUV","motionValid","not","any","greaterThanEqual","abs","bool","params","fallback","ibl","light","envLightStrength","normalizedCurrentNormal","normalize","currentNormal","depthTolerance","max","texelSize","halfTexel","maxUV","previousUVInBounds","and","all","lessThanEqual","previousSampleUV","clamp","previousSurface","previousNormal","currentDepthSample","currentDepth","decodeNormalizedFloatFromRGBA","r","ndc","nearPlaneRay","REVERSE_Z","viewPos","w","expectedPreviousDepth","depthDelta","a","scaledDepthTolerance","depthWeight","exp","neg","depthValid","normalValid","dot","previousIrradiance","previousAlpha","exactHistoryValid","greaterThan","$if","exactConfidence","mix","repairCenter","$choice","repairClampTexels","length","min","repairRadius","smoothStep","repairDepthTolerance","repairSum","repairWeight","repairSamples","currentUV","kernel","i","sample","baseUV","pow","repairedIrradiance","repairConfidence","Z_ssgi_reprojectIrradiance","SSGI","hasRadiance","hasSheenRadiance","hasIrradiance","onDispose","dispose","EnvConstantAmbient","UNIFORM_NAME_CONSTANT_AMBIENT","ambientColor","_ambientColor","_scope","_refl","_roughness","_normal","EnvHemisphericAmbient","UNIFORM_NAME_AMBIENT_UP","UNIFORM_NAME_AMBIENT_DOWN","ambientUp","ambientDown","_ambientUp","_ambientDown","color","factor"],"mappings":"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"}
1
+ {"version":3,"file":"envlight.js","sources":["../../src/render/envlight.ts"],"sourcesContent":["import type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, DRef, Matrix4x4, REVERSE_Z, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureCube\r\n} from '@zephyr3d/device';\r\nimport { fetchSampler, getSamplerOptions } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\nimport type { DrawContext } from './drawable';\r\nimport { getProbeVolumeForDraw } from './gi/probe_volume';\r\nimport { declareProbeUniforms, sampleProbeIrradiance } from '../shaders/probes';\r\n\r\n/**\r\n * Depth-proportional term of the SSGI history rejection tolerance. fp16 storage of\r\n * `linearDepth * cameraFar` has ~4.9e-4 relative error; this keeps ~4x headroom\r\n * while staying far below a real disocclusion's depth step.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_DEPTH_TOLERANCE_RELATIVE = 2e-3;\r\n\r\n/**\r\n * Multiple of the scaled tolerance at which history is dropped outright. Inside it\r\n * the depth term is a smooth `exp(-d/tol)` weight (~0.05 at 3x), so the cutoff\r\n * does not staircase.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_DEPTH_GATE_SCALE = 3;\r\n\r\n/**\r\n * Clamp distance, in texels, at which history repair reaches its widest radius.\r\n * Clamp travel measures how unrelated the surviving history is, so it scales the\r\n * repair radius rather than gating repair off.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_REPAIR_WIDE_CLAMP_TEXELS = 8;\r\n\r\n/**\r\n * Repair tap radius in texels, from an interior hole to a camera-edge one. Narrow\r\n * taps keep detail; wide taps average the surviving edge strip into a smooth\r\n * estimate instead of copying single texels into streaks.\r\n *\r\n * @internal\r\n */\r\nconst SSGI_REPAIR_MIN_RADIUS_TEXELS = 1;\r\nconst SSGI_REPAIR_MAX_RADIUS_TEXELS = 16;\r\n\r\n/**\r\n * Environment light type\r\n * @public\r\n */\r\nexport type EnvLightType = 'ibl' | 'hemisphere' | 'constant' | 'none';\r\n\r\n/**\r\n * Base class for any kind of environment light\r\n * @public\r\n */\r\nexport abstract class EnvironmentLighting extends Disposable {\r\n /**\r\n * The environment light type\r\n */\r\n abstract getType(): EnvLightType;\r\n /**\r\n * Initialize shader bindings\r\n * @param pb - The program builder\r\n */\r\n abstract initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext): void;\r\n /**\r\n * Updates the uniform values\r\n * @param bg - The bind group to be updated\r\n */\r\n abstract updateBindGroup(bg: BindGroup, ctx?: DrawContext): void;\r\n /**\r\n * Get radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Surface roughness\r\n *\r\n * @returns The radiance for the fragment\r\n */\r\n abstract getRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get Charlie-filtered sheen radiance for a fragment\r\n *\r\n * @param scope - The shader scope\r\n * @param refl - Reflection vector\r\n * @param roughness - Sheen roughness\r\n *\r\n * @returns The sheen radiance for the fragment\r\n */\r\n abstract getSheenRadiance(\r\n scope: PBInsideFunctionScope,\r\n refl: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): Nullable<PBShaderExp>;\r\n /**\r\n * Get irradiance for a fragment\r\n *\r\n * @remarks\r\n * With a draw context: the final diffuse environment lighting (sky irradiance times\r\n * the environment strength, replaced by probe GI where covered and refined by SSGI\r\n * history); callers must not scale it again. Without one: raw unscaled sky irradiance.\r\n *\r\n * @param scope - The shader scope\r\n * @param normal - surface normal\r\n * @param ctx - Draw context of the material shading the fragment, if any\r\n *\r\n * @returns The irradiance for the fragment\r\n */\r\n abstract getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext): PBShaderExp;\r\n /**\r\n * Returns whether this environment lighting supports reflective light\r\n */\r\n abstract hasRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports sheen reflective light\r\n */\r\n abstract hasSheenRadiance(): boolean;\r\n /**\r\n * Returns whether this environment lighting supports diffuse light\r\n */\r\n abstract hasIrradiance(): boolean;\r\n /**\r\n * Declares the scene's probe volume where the draw reads it (see\r\n * {@link getProbeVolumeForDraw}); call from `initShaderBindings` in the fragment stage.\r\n * @internal\r\n */\r\n protected initProbeBindings(pb: ProgramBuilder, ctx?: DrawContext) {\r\n if (pb.shaderKind === 'fragment' && getProbeVolumeForDraw(ctx)) {\r\n declareProbeUniforms(pb.getGlobalScope(), 0);\r\n }\r\n }\r\n /** Binds what {@link EnvironmentLighting.initProbeBindings} declared. @internal */\r\n protected updateProbeBindGroup(bg: BindGroup, ctx?: DrawContext) {\r\n getProbeVolumeForDraw(ctx)?.applyBindGroup(bg);\r\n }\r\n /**\r\n * Specular occlusion from the probe volume's sky visibility. 1 where probes\r\n * do not cover the fragment or without a `worldPos` varying.\r\n * @internal\r\n */\r\n getSkySpecularOcclusion(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n NoV: PBShaderExp,\r\n roughness: PBShaderExp,\r\n ctx?: DrawContext\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!getProbeVolumeForDraw(ctx)) {\r\n return pb.float(1);\r\n }\r\n const global = pb.getGlobalScope();\r\n const worldPos = global.$inputs.worldPos as PBShaderExp | undefined;\r\n if (!worldPos) {\r\n return pb.float(1);\r\n }\r\n const funcName = 'Z_envSkySpecularOcclusion';\r\n pb.func(funcName, [pb.vec3('n'), pb.vec3('p'), pb.float('NoV'), pb.float('roughness')], function () {\r\n this.$l.sky = sampleProbeIrradiance(\r\n this,\r\n this.p,\r\n this.n,\r\n pb.sub(this.camera.position.xyz, this.p),\r\n 'sky'\r\n );\r\n this.$l.vis = pb.mix(pb.float(1), this.sky.r, this.sky.a);\r\n this.$l.r2 = pb.mul(this.roughness, this.roughness);\r\n this.$return(pb.clamp(pb.add(pb.sub(pb.pow(pb.add(this.NoV, this.vis), this.r2), 1), this.vis), 0, 1));\r\n });\r\n return global[funcName](normal, worldPos, NoV, roughness) as PBShaderExp;\r\n }\r\n /**\r\n * Turns raw sky irradiance into material shading irradiance: scaled by the environment\r\n * strength, then replaced by probe GI where covered (probes are not scaled again).\r\n * Needs the `worldPos` varying; returns the raw irradiance without a draw context.\r\n * @internal\r\n */\r\n protected applyProbes(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n ctx: Nullable<DrawContext>,\r\n irradiance: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n if (!ctx) {\r\n return irradiance;\r\n }\r\n // The light uniforms of the material's light pass; see ShaderHelper.getEnvLightStrength\r\n const sky = pb.mul(irradiance, scope.light.envLightStrength) as PBShaderExp;\r\n if (!getProbeVolumeForDraw(ctx)) {\r\n return sky;\r\n }\r\n const global = pb.getGlobalScope();\r\n const worldPos = global.$inputs.worldPos as PBShaderExp | undefined;\r\n if (!worldPos) {\r\n return sky;\r\n }\r\n const funcName = 'Z_envIrradianceWithProbes';\r\n pb.func(funcName, [pb.vec3('n'), pb.vec3('p'), pb.vec3('env')], function () {\r\n this.$l.probe = sampleProbeIrradiance(this, this.p, this.n, pb.sub(this.camera.position.xyz, this.p));\r\n this.$return(pb.mix(this.env, this.probe.rgb, this.probe.a));\r\n });\r\n return global[funcName](normal, worldPos, sky) as PBShaderExp;\r\n }\r\n}\r\n\r\n/**\r\n * IBL with SH based environment lighting\r\n * @public\r\n */\r\nexport class EnvShIBL extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP = 'zIBLRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP = 'zIBLSheenRadianceMap';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD = 'zIBLRadianceMapMaxLOD';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_SH = 'zIBLIrradianceSH';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_IBL_IRRADIANCE_WINDOW = 'zIBLIrradianceWindow';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_IRRADIANCE = 'zSSGIPreviousIrradiance';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_SURFACE = 'zSSGIPreviousSurface';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_CURRENT_DEPTH = 'zSSGICurrentDepth';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_MOTION = 'zSSGICurrentMotion';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_TARGET_SIZE = 'zSSGITargetSize';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_SSGI_REPROJECTION = 'zSSGIReprojection';\r\n /**\r\n * Current view space -> previous-frame clip space. @internal\r\n */\r\n public static readonly UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP = 'zSSGIViewToPrevClip';\r\n /** Unprojects a screen-space sample back into current view space. @internal */\r\n public static readonly UNIFORM_NAME_SSGI_INV_PROJECTION = 'zSSGIInvProjection';\r\n /** Scratch for the view -> previous clip composition. @internal */\r\n private static readonly _viewToPrevClip = new Matrix4x4();\r\n /** @internal */\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _sheenRadianceMap: DRef<TextureCube>;\r\n /** @internal */\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n /** @internal */\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n /** @internal */\r\n private _irraidanceWindow: Vector3;\r\n /**\r\n * Creates an instance of EnvIBL\r\n * @param radianceMap - The radiance map\r\n * @param irradianceSH - The irradiance SH\r\n */\r\n constructor(\r\n radianceMap?: TextureCube,\r\n irradianceSH?: GPUDataBuffer,\r\n irradianceSHFB?: FrameBuffer,\r\n sheenRadianceMap?: TextureCube\r\n ) {\r\n super();\r\n this._radianceMap = new DRef(radianceMap || null);\r\n this._sheenRadianceMap = new DRef(sheenRadianceMap || null);\r\n this._irradianceSH = new DRef(irradianceSH || null);\r\n this._irradianceSHFB = new DRef(irradianceSHFB || null);\r\n this._irraidanceWindow = new Vector3();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'ibl' as const;\r\n }\r\n /** The radiance map */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n }\r\n /** The Charlie-filtered sheen radiance map */\r\n get sheenRadianceMap() {\r\n return this._sheenRadianceMap.get();\r\n }\r\n set sheenRadianceMap(tex) {\r\n this._sheenRadianceMap.set(tex);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n }\r\n /** The irradiance sh coeffecients */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n }\r\n /** The irradiance sh window */\r\n get irradianceWindow() {\r\n return this._irraidanceWindow;\r\n }\r\n set irradianceWindow(val) {\r\n this._irraidanceWindow = val;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext) {\r\n if (pb.shaderKind === 'fragment') {\r\n if (this.radianceMap) {\r\n // Prefiltered radiance cube: mipmap chain indexed by roughness\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP] = pb\r\n .texCube()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD] = pb.float().uniform(0);\r\n }\r\n if (this.sheenRadianceMap) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP] = pb\r\n .texCube()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear'));\r\n }\r\n if (this.irradianceSHFB) {\r\n const tex = pb.tex2D();\r\n const formatInfo = getDevice()\r\n .getDeviceCaps()\r\n .textureCaps.getTextureFormatInfo(this.irradianceSHFB.getColorAttachments()[0].format);\r\n if (formatInfo && !formatInfo.filterable) {\r\n tex.sampleType('unfilterable-float');\r\n }\r\n // SH coefficients are read at texel centers; nearest sampling is exact\r\n tex.withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = tex.uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n } else if (this.irradianceSH) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH] = pb.vec4[9]().uniformBuffer(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW] = pb.vec3().uniform(0);\r\n }\r\n if (EnvShIBL.hasSSGIHistory(ctx)) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_SURFACE] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_CURRENT_DEPTH] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n if (ctx?.motionVectorTexture) {\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_MOTION] = pb\r\n .tex2D()\r\n .uniform(0)\r\n .withSampler(getSamplerOptions('clamp_nearest_nomip'));\r\n }\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE] = pb.vec2().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_REPROJECTION] = pb.vec4().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP] = pb.mat4().uniform(0);\r\n pb.getGlobalScope()[EnvShIBL.UNIFORM_NAME_SSGI_INV_PROJECTION] = pb.mat4().uniform(0);\r\n }\r\n this.initProbeBindings(pb, ctx);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup, ctx?: DrawContext) {\r\n if (this.radianceMap) {\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD, this.radianceMap.mipLevelCount - 1);\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP, this.radianceMap);\r\n }\r\n if (this.sheenRadianceMap) {\r\n bg.setTexture(EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP, this.sheenRadianceMap);\r\n }\r\n if (this.irradianceSHFB) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH,\r\n this.irradianceSHFB.getColorAttachments()[0],\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n } else if (this.irradianceSH) {\r\n bg.setBuffer(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH, this.irradianceSH);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW, this.irradianceWindow);\r\n }\r\n if (EnvShIBL.hasSSGIHistory(ctx)) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE,\r\n ctx!.SSGIIrradianceHistoryTexture!,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_SURFACE,\r\n ctx!.SSGISurfaceHistoryTexture!,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_CURRENT_DEPTH,\r\n ctx!.linearDepthTexture!,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n if (ctx!.motionVectorTexture) {\r\n bg.setTexture(\r\n EnvShIBL.UNIFORM_NAME_SSGI_MOTION,\r\n ctx!.motionVectorTexture,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n }\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE, new Vector2(ctx!.renderWidth, ctx!.renderHeight));\r\n bg.setValue(\r\n EnvShIBL.UNIFORM_NAME_SSGI_REPROJECTION,\r\n new Vector4(\r\n ctx!.camera.ssgiDepthReject,\r\n ctx!.camera.ssgiNormalReject,\r\n ctx!.camera.getFarPlane(),\r\n ctx!.camera.getNearPlane()\r\n )\r\n );\r\n // View -> world -> previous clip; without a previous VP the current one makes the depth term a no-op.\r\n const prevVP = ctx!.camera.prevVPMatrix ?? ctx!.camera.viewProjectionMatrix;\r\n Matrix4x4.multiply(prevVP as Matrix4x4, ctx!.camera.worldMatrix as Matrix4x4, EnvShIBL._viewToPrevClip);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP, EnvShIBL._viewToPrevClip);\r\n bg.setValue(EnvShIBL.UNIFORM_NAME_SSGI_INV_PROJECTION, ctx!.camera.getInvProjectionMatrix());\r\n }\r\n this.updateProbeBindGroup(bg, ctx);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? (pb.textureSampleLevel(\r\n scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP],\r\n refl,\r\n pb.mul(roughness, scope[EnvShIBL.UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD])\r\n ).rgb as PBShaderExp)\r\n : (pb.textureSample(scope[EnvShIBL.UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP], refl).rgb as PBShaderExp);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('Z_sh_Y0', [pb.vec3('v')], function () {\r\n this.$return(0.2820947917);\r\n });\r\n pb.func('Z_sh_Y1', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y2', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.z, 0.4886025119));\r\n });\r\n pb.func('Z_sh_Y3', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, -0.4886025119));\r\n });\r\n pb.func('Z_sh_Y4', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\r\n });\r\n pb.func('Z_sh_Y5', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y6', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\r\n });\r\n pb.func('Z_sh_Y7', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Z_sh_Y8', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.x, this.v.x), pb.mul(this.v.y, this.v.y)), 0.5462742153));\r\n });\r\n pb.func('Z_sh_eval', [pb.vec3('v')], function () {\r\n this.$l.window = this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_WINDOW];\r\n if (that.irradianceSHFB) {\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y1(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 0.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y2(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y3(this.v),\r\n this.window.y\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y4(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 1.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y5(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(0.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y6(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(1.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y7(this.v),\r\n this.window.z\r\n )\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(\r\n pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH], pb.vec2(2.5 / 3, 2.5 / 3), 0)\r\n .rgb,\r\n this.Z_sh_Y8(this.v),\r\n this.window.z\r\n )\r\n );\r\n } else {\r\n this.$l.c = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][0].xyz,\r\n this.Z_sh_Y0(this.v),\r\n this.window.x\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][1].xyz, this.Z_sh_Y1(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][2].xyz, this.Z_sh_Y2(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][3].xyz, this.Z_sh_Y3(this.v), this.window.y)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][4].xyz, this.Z_sh_Y4(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][5].xyz, this.Z_sh_Y5(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][6].xyz, this.Z_sh_Y6(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][7].xyz, this.Z_sh_Y7(this.v), this.window.z)\r\n );\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this[EnvShIBL.UNIFORM_NAME_IBL_IRRADIANCE_SH][8].xyz, this.Z_sh_Y8(this.v), this.window.z)\r\n );\r\n }\r\n this.$return(this.c);\r\n });\r\n const iblIrradiance = this.applyProbes(\r\n scope,\r\n normal,\r\n ctx ?? null,\r\n pb.getGlobalScope().Z_sh_eval(normal) as PBShaderExp\r\n );\r\n if (!EnvShIBL.hasSSGIHistory(ctx)) {\r\n return iblIrradiance;\r\n }\r\n const useMotionReprojection = !!ctx?.motionVectorTexture;\r\n pb.func('Z_ssgi_reprojectIrradiance', [pb.vec3('currentNormal'), pb.vec3('ibl')], function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this[EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE]);\r\n if (useMotionReprojection) {\r\n this.$l.motion = pb.textureSampleLevel(this[EnvShIBL.UNIFORM_NAME_SSGI_MOTION], this.uv, 0).xy;\r\n this.$l.previousUV = pb.sub(this.uv, this.motion);\r\n this.$l.motionValid = pb.not(pb.any(pb.greaterThanEqual(pb.abs(this.motion), pb.vec2(5e4))));\r\n } else {\r\n this.$l.previousUV = this.uv;\r\n this.$l.motionValid = pb.bool(true);\r\n }\r\n this.$l.params = this[EnvShIBL.UNIFORM_NAME_SSGI_REPROJECTION];\r\n // Already in the history's units: scaled by the environment strength, probes in place\r\n this.$l.fallback = this.ibl;\r\n this.$l.normalizedCurrentNormal = pb.normalize(this.currentNormal);\r\n this.$l.depthTolerance = pb.max(this.params.x, 1e-4);\r\n this.$l.texelSize = pb.div(pb.vec2(1), this[EnvShIBL.UNIFORM_NAME_SSGI_TARGET_SIZE]);\r\n this.$l.halfTexel = pb.mul(this.texelSize, 0.5);\r\n this.$l.maxUV = pb.sub(pb.vec2(1), this.halfTexel);\r\n this.$l.previousUVInBounds = pb.and(\r\n this.motionValid,\r\n pb.all(pb.greaterThanEqual(this.previousUV, pb.vec2(0))),\r\n pb.all(pb.lessThanEqual(this.previousUV, pb.vec2(1)))\r\n );\r\n this.$l.previousSampleUV = pb.clamp(this.previousUV, this.halfTexel, this.maxUV);\r\n this.$l.previousSurface = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_SURFACE],\r\n this.previousSampleUV,\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.currentDepthSample = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_CURRENT_DEPTH],\r\n this.uv,\r\n 0\r\n );\r\n this.$l.currentDepth = pb.mul(this.currentDepthSample.r, this.params.z);\r\n // History Z is in the previous frame's view space; compare via view -> previous\r\n // clip (`clip.w` = positive view distance) to avoid edge staircases under rotation.\r\n this.$l.ndc = pb.sub(pb.mul(this.uv, 2), pb.vec2(1));\r\n this.$l.nearPlaneRay = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_INV_PROJECTION],\r\n pb.vec4(this.ndc, REVERSE_Z ? 1 : -1, 1)\r\n );\r\n // Unprojecting near-plane NDC depth lands at view z = -near; scale by depth/near.\r\n this.$l.viewPos = pb.mul(\r\n pb.div(this.nearPlaneRay.xyz, this.nearPlaneRay.w),\r\n pb.div(this.currentDepth, pb.max(this.params.w, 1e-6))\r\n );\r\n this.$l.expectedPreviousDepth = pb.mul(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP],\r\n pb.vec4(this.viewPos, 1)\r\n ).w;\r\n this.$l.depthDelta = pb.abs(pb.sub(this.previousSurface.a, this.expectedPreviousDepth));\r\n // fp16 storage error scales with depth, so the tolerance has to as well.\r\n this.$l.scaledDepthTolerance = pb.add(\r\n this.depthTolerance,\r\n pb.mul(this.currentDepth, SSGI_DEPTH_TOLERANCE_RELATIVE)\r\n );\r\n this.$l.depthWeight = pb.exp(pb.neg(pb.div(this.depthDelta, this.scaledDepthTolerance)));\r\n this.$l.depthValid = pb.lessThanEqual(\r\n this.depthDelta,\r\n pb.mul(this.scaledDepthTolerance, SSGI_DEPTH_GATE_SCALE)\r\n );\r\n this.$l.normalValid = pb.greaterThanEqual(\r\n pb.dot(this.normalizedCurrentNormal, this.previousNormal),\r\n this.params.y\r\n );\r\n this.$l.previousIrradiance = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE],\r\n this.previousSampleUV,\r\n 0\r\n );\r\n this.$l.previousAlpha = pb.clamp(this.previousIrradiance.a, 0, 1);\r\n this.$l.exactHistoryValid = pb.and(\r\n this.previousUVInBounds,\r\n this.depthValid,\r\n this.normalValid,\r\n pb.greaterThan(this.previousAlpha, 1e-4)\r\n );\r\n this.$if(this.exactHistoryValid, function () {\r\n // Depth-weighted confidence ramps the gate boundary instead of stepping it.\r\n this.$l.exactConfidence = pb.mul(this.previousAlpha, this.depthWeight);\r\n this.$if(pb.greaterThan(this.exactConfidence, 1e-4), function () {\r\n this.$return(pb.mix(this.fallback, this.previousIrradiance.rgb, this.exactConfidence));\r\n });\r\n });\r\n\r\n // Repair disoccluded/off-screen history from nearby samples before falling back to\r\n // IBL: taps around the clamped reprojection, plus current UV for invalid motion.\r\n this.$l.repairCenter = this.$choice(\r\n this.motionValid,\r\n this.previousSampleUV,\r\n pb.clamp(this.uv, this.halfTexel, this.maxUV)\r\n );\r\n // Clamp travel back onto the screen: zero for interior holes, large for geometry\r\n // rotating in, where the edge texel is the same surface but unrelated irradiance.\r\n // It drives the tap radius, trading streaks for blur.\r\n this.$l.repairClampTexels = pb.div(\r\n pb.length(pb.sub(this.previousSampleUV, this.previousUV)),\r\n pb.max(pb.min(this.texelSize.x, this.texelSize.y), 1e-8)\r\n );\r\n // Widen taps with clamp travel; only while motion vectors are usable.\r\n this.$l.repairRadius = pb.mix(\r\n pb.float(SSGI_REPAIR_MIN_RADIUS_TEXELS),\r\n pb.float(SSGI_REPAIR_MAX_RADIUS_TEXELS),\r\n this.$choice(\r\n this.motionValid,\r\n pb.smoothStep(0, SSGI_REPAIR_WIDE_CLAMP_TEXELS, this.repairClampTexels),\r\n pb.float(0)\r\n )\r\n );\r\n // Wide taps straddle real depth variation: loosen the depth gate with the radius\r\n // and rely on the strict normal term.\r\n this.$l.repairDepthTolerance = pb.mul(\r\n this.scaledDepthTolerance,\r\n SSGI_DEPTH_GATE_SCALE,\r\n pb.add(1, this.repairRadius)\r\n );\r\n this.$l.repairSum = pb.vec3(0);\r\n this.$l.repairWeight = pb.float(0);\r\n // Full ring: four wide axis-aligned taps paint directional artifacts.\r\n const repairSamples = [\r\n { currentUV: false, x: 0, y: 0, kernel: 1 },\r\n { currentUV: false, x: -1, y: 0, kernel: 0.7 },\r\n { currentUV: false, x: 1, y: 0, kernel: 0.7 },\r\n { currentUV: false, x: 0, y: -1, kernel: 0.7 },\r\n { currentUV: false, x: 0, y: 1, kernel: 0.7 },\r\n { currentUV: false, x: -0.7071, y: -0.7071, kernel: 0.5 },\r\n { currentUV: false, x: 0.7071, y: -0.7071, kernel: 0.5 },\r\n { currentUV: false, x: -0.7071, y: 0.7071, kernel: 0.5 },\r\n { currentUV: false, x: 0.7071, y: 0.7071, kernel: 0.5 },\r\n { currentUV: true, x: 0, y: 0, kernel: 0.5 }\r\n ];\r\n for (let i = 0; i < repairSamples.length; i++) {\r\n const sample = repairSamples[i];\r\n const baseUV = sample.currentUV ? this.uv : this.repairCenter;\r\n this.$l[`repairUV${i}`] = pb.add(\r\n baseUV,\r\n pb.mul(this.texelSize, pb.vec2(sample.x, sample.y), this.repairRadius)\r\n );\r\n this.$l[`repairUVValid${i}`] = pb.and(\r\n pb.all(pb.greaterThanEqual(this[`repairUV${i}`], this.halfTexel)),\r\n pb.all(pb.lessThanEqual(this[`repairUV${i}`], this.maxUV))\r\n );\r\n this.$l[`repairSurface${i}`] = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_SURFACE],\r\n pb.clamp(this[`repairUV${i}`], this.halfTexel, this.maxUV),\r\n 0\r\n );\r\n this.$l[`repairNormal${i}`] = pb.normalize(\r\n pb.sub(pb.mul(this[`repairSurface${i}`].rgb, 2), pb.vec3(1))\r\n );\r\n // Compared against the reprojected depth: taps sample the previous frame's surface.\r\n this.$l[`repairDepthDelta${i}`] = pb.abs(\r\n pb.sub(this[`repairSurface${i}`].a, this.expectedPreviousDepth)\r\n );\r\n this.$l[`repairNormalDot${i}`] = pb.dot(this.normalizedCurrentNormal, this[`repairNormal${i}`]);\r\n this.$l[`repairSurfaceValid${i}`] = pb.and(\r\n this[`repairUVValid${i}`],\r\n pb.lessThanEqual(this[`repairDepthDelta${i}`], this.repairDepthTolerance),\r\n pb.greaterThanEqual(this[`repairNormalDot${i}`], this.params.y)\r\n );\r\n this.$l[`repairIrradiance${i}`] = pb.textureSampleLevel(\r\n this[EnvShIBL.UNIFORM_NAME_SSGI_IRRADIANCE],\r\n pb.clamp(this[`repairUV${i}`], this.halfTexel, this.maxUV),\r\n 0\r\n );\r\n // Same widening as the hard gate above.\r\n this.$l[`repairDepthWeight${i}`] = pb.exp(\r\n pb.neg(pb.div(this[`repairDepthDelta${i}`], this.repairDepthTolerance))\r\n );\r\n this.$l[`repairNormalWeight${i}`] = pb.pow(pb.max(0, this[`repairNormalDot${i}`]), 8);\r\n this.$l[`repairSampleWeight${i}`] = pb.mul(\r\n pb.float(this[`repairSurfaceValid${i}`]),\r\n pb.clamp(this[`repairIrradiance${i}`].a, 0, 1),\r\n this[`repairDepthWeight${i}`],\r\n this[`repairNormalWeight${i}`],\r\n // The screen-stationary tap only covers unusable motion vectors; otherwise it\r\n // leaves a stationary ghost.\r\n sample.currentUV ? pb.float(pb.not(this.motionValid)) : pb.float(1),\r\n sample.kernel\r\n );\r\n this.repairSum = pb.add(\r\n this.repairSum,\r\n pb.mul(this[`repairIrradiance${i}`].rgb, this[`repairSampleWeight${i}`])\r\n );\r\n this.repairWeight = pb.add(this.repairWeight, this[`repairSampleWeight${i}`]);\r\n }\r\n this.$if(pb.greaterThan(this.repairWeight, 1e-4), function () {\r\n this.$l.repairedIrradiance = pb.div(this.repairSum, this.repairWeight);\r\n // Repaired samples are intentionally capped below full confidence so\r\n // newly traced irradiance replaces the extrapolation on following frames.\r\n this.$l.repairConfidence = pb.mul(pb.clamp(this.repairWeight, 0, 1), 0.85);\r\n this.$return(pb.mix(this.fallback, this.repairedIrradiance, this.repairConfidence));\r\n });\r\n this.$return(this.fallback);\r\n });\r\n return scope.Z_ssgi_reprojectIrradiance(normal, iblIrradiance) as PBShaderExp;\r\n }\r\n\r\n /** Whether all textures required by the lighting reprojection are scoped. @internal */\r\n static hasSSGIHistory(ctx?: DrawContext) {\r\n return !!(\r\n ctx?.SSGI &&\r\n ctx.SSGIIrradianceHistoryTexture &&\r\n ctx.SSGISurfaceHistoryTexture &&\r\n ctx.motionVectorTexture &&\r\n ctx.linearDepthTexture\r\n );\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return !!this._radianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return !!this._sheenRadianceMap.get();\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return !!this._irradianceSH.get() || !!this._irradianceSHFB.get();\r\n }\r\n /**\r\n * Disposes the object and releases all GPU resources\r\n * @override\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._radianceMap.dispose();\r\n this._sheenRadianceMap.dispose();\r\n this._irradianceSH.dispose();\r\n this._irradianceSHFB.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Constant ambient light\r\n * @public\r\n */\r\nexport class EnvConstantAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_CONSTANT_AMBIENT = 'zConstantAmbient';\r\n /** @internal */\r\n private readonly _ambientColor: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientColor - The ambient color\r\n */\r\n constructor(ambientColor?: Vector4) {\r\n super();\r\n this._ambientColor = ambientColor ? new Vector4(ambientColor) : new Vector4(0, 0, 0, 1);\r\n }\r\n /** The ambient color */\r\n get ambientColor(): Immutable<Vector4> {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(ambientColor: Immutable<Vector4>) {\r\n if (ambientColor) {\r\n this._ambientColor.set(ambientColor);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'constant' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT] = pb.vec4().uniform(0);\r\n this.initProbeBindings(pb, ctx);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup, ctx?: DrawContext) {\r\n bg.setValue(EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT, this._ambientColor);\r\n this.updateProbeBindGroup(bg, ctx);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n *\r\n * @remarks\r\n * A uniform environment prefilters to itself, so radiance is the ambient color. It\r\n * must be present: at grazing angles specular takes the diffuse energy, else silhouettes go black.\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return scope[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT].rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n return this.getRadiance(scope, refl, roughness);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext) {\r\n return this.applyProbes(\r\n scope,\r\n normal,\r\n ctx ?? null,\r\n scope[EnvConstantAmbient.UNIFORM_NAME_CONSTANT_AMBIENT].rgb as PBShaderExp\r\n );\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Hemispheric ambient light\r\n * @public\r\n */\r\nexport class EnvHemisphericAmbient extends EnvironmentLighting {\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_UP = 'zHemisphericAmbientUp';\r\n /** @internal */\r\n public static readonly UNIFORM_NAME_AMBIENT_DOWN = 'zHemisphericAmbientDown';\r\n /** @internal */\r\n private readonly _ambientUp: Vector4;\r\n /** @internal */\r\n private readonly _ambientDown: Vector4;\r\n /**\r\n * Creates an instance of EnvConstantAmbient\r\n * @param ambientUp - The upside ambient color\r\n * @param ambientDown - The downside ambient color\r\n */\r\n constructor(ambientUp: Vector4, ambientDown: Vector4) {\r\n super();\r\n this._ambientUp = new Vector4(ambientUp);\r\n this._ambientDown = new Vector4(ambientDown);\r\n }\r\n /** The upside ambient color */\r\n get ambientUp(): Immutable<Vector4> {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientUp.set(color);\r\n }\r\n }\r\n /** The downside ambient color */\r\n get ambientDown(): Immutable<Vector4> {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(color: Immutable<Vector4>) {\r\n if (color) {\r\n this._ambientDown.set(color);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'hemisphere' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext) {\r\n if (pb.shaderKind === 'fragment') {\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP] = pb.vec4().uniform(0);\r\n pb.getGlobalScope()[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN] = pb.vec4().uniform(0);\r\n this.initProbeBindings(pb, ctx);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup, ctx?: DrawContext) {\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP, this._ambientUp);\r\n bg.setValue(EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN, this._ambientDown);\r\n this.updateProbeBindGroup(bg, ctx);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, _roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(refl.y, 0.5), 0.5);\r\n return pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp) {\r\n return this.getRadiance(scope, refl, roughness);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext) {\r\n const pb = scope.$builder;\r\n const factor = pb.add(pb.mul(normal.y, 0.5), 0.5);\r\n return this.applyProbes(\r\n scope,\r\n normal,\r\n ctx ?? null,\r\n pb.mix(\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_DOWN],\r\n scope[EnvHemisphericAmbient.UNIFORM_NAME_AMBIENT_UP],\r\n factor\r\n ).rgb as PBShaderExp\r\n );\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Environment lighting for type `none`: no sky, only probe-volume GI over black,\r\n * since bounced scene light does not depend on the environment. Used only while\r\n * the probe volume is ready.\r\n * @internal\r\n */\r\nexport class EnvProbesOnly extends EnvironmentLighting {\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getType}\r\n * @override\r\n */\r\n getType() {\r\n return 'none' as const;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.initShaderBindings}\r\n * @override\r\n */\r\n initShaderBindings(pb: ProgramBuilder, ctx?: DrawContext) {\r\n this.initProbeBindings(pb, ctx);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.updateBindGroup}\r\n * @override\r\n */\r\n updateBindGroup(bg: BindGroup, ctx?: DrawContext) {\r\n this.updateProbeBindGroup(bg, ctx);\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getRadiance}\r\n * @override\r\n */\r\n getRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getSheenRadiance}\r\n * @override\r\n */\r\n getSheenRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp) {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.getIrradiance}\r\n * @override\r\n */\r\n getIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp, ctx?: DrawContext) {\r\n return this.applyProbes(scope, normal, ctx ?? null, scope.$builder.vec3(0));\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasRadiance}\r\n * @override\r\n */\r\n hasRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasSheenRadiance}\r\n * @override\r\n */\r\n hasSheenRadiance() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc EnvironmentLighting.hasIrradiance}\r\n * @override\r\n */\r\n hasIrradiance() {\r\n return true;\r\n }\r\n}\r\n"],"names":["SSGI_DEPTH_TOLERANCE_RELATIVE","SSGI_DEPTH_GATE_SCALE","SSGI_REPAIR_WIDE_CLAMP_TEXELS","SSGI_REPAIR_MIN_RADIUS_TEXELS","SSGI_REPAIR_MAX_RADIUS_TEXELS","EnvironmentLighting","Disposable","initProbeBindings","pb","ctx","shaderKind","getProbeVolumeForDraw","declareProbeUniforms","getGlobalScope","updateProbeBindGroup","bg","applyBindGroup","getSkySpecularOcclusion","scope","normal","NoV","roughness","$builder","float","global","worldPos","$inputs","funcName","func","vec3","$l","sky","sampleProbeIrradiance","p","n","sub","camera","position","xyz","vis","mix","r","a","r2","mul","$return","clamp","add","pow","applyProbes","irradiance","light","envLightStrength","probe","env","rgb","EnvShIBL","UNIFORM_NAME_IBL_RADIANCE_MAP","UNIFORM_NAME_IBL_SHEEN_RADIANCE_MAP","UNIFORM_NAME_IBL_RADIANCE_MAP_MAX_LOD","UNIFORM_NAME_IBL_IRRADIANCE_SH","UNIFORM_NAME_IBL_IRRADIANCE_WINDOW","UNIFORM_NAME_SSGI_IRRADIANCE","UNIFORM_NAME_SSGI_SURFACE","UNIFORM_NAME_SSGI_CURRENT_DEPTH","UNIFORM_NAME_SSGI_MOTION","UNIFORM_NAME_SSGI_TARGET_SIZE","UNIFORM_NAME_SSGI_REPROJECTION","UNIFORM_NAME_SSGI_VIEW_TO_PREV_CLIP","UNIFORM_NAME_SSGI_INV_PROJECTION","_viewToPrevClip","Matrix4x4","radianceMap","irradianceSH","irradianceSHFB","sheenRadianceMap","_radianceMap","DRef","_sheenRadianceMap","_irradianceSH","_irradianceSHFB","_irraidanceWindow","Vector3","getType","get","tex","set","value","irradianceWindow","val","initShaderBindings","texCube","uniform","withSampler","getSamplerOptions","tex2D","formatInfo","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","getColorAttachments","format","filterable","sampleType","vec4","uniformBuffer","hasSSGIHistory","motionVectorTexture","vec2","mat4","updateBindGroup","setValue","mipLevelCount","setTexture","fetchSampler","setBuffer","SSGIIrradianceHistoryTexture","SSGISurfaceHistoryTexture","linearDepthTexture","Vector2","renderWidth","renderHeight","Vector4","ssgiDepthReject","ssgiNormalReject","getFarPlane","getNearPlane","prevVP","prevVPMatrix","viewProjectionMatrix","multiply","worldMatrix","getInvProjectionMatrix","getRadiance","refl","shaderCaps","supportShaderTextureLod","textureSampleLevel","textureSample","getSheenRadiance","getIrradiance","that","v","y","z","x","window","c","Z_sh_Y0","Z_sh_Y1","Z_sh_Y2","Z_sh_Y3","Z_sh_Y4","Z_sh_Y5","Z_sh_Y6","Z_sh_Y7","Z_sh_Y8","iblIrradiance","Z_sh_eval","useMotionReprojection","uv","div","$builtins","fragCoord","xy","motion","previousUV","motionValid","not","any","greaterThanEqual","abs","bool","params","fallback","ibl","normalizedCurrentNormal","normalize","currentNormal","depthTolerance","max","texelSize","halfTexel","maxUV","previousUVInBounds","and","all","lessThanEqual","previousSampleUV","previousSurface","previousNormal","currentDepthSample","currentDepth","ndc","nearPlaneRay","REVERSE_Z","viewPos","w","expectedPreviousDepth","depthDelta","scaledDepthTolerance","depthWeight","exp","neg","depthValid","normalValid","dot","previousIrradiance","previousAlpha","exactHistoryValid","greaterThan","$if","exactConfidence","repairCenter","$choice","repairClampTexels","length","min","repairRadius","smoothStep","repairDepthTolerance","repairSum","repairWeight","repairSamples","currentUV","kernel","i","sample","baseUV","repairedIrradiance","repairConfidence","Z_ssgi_reprojectIrradiance","SSGI","hasRadiance","hasSheenRadiance","hasIrradiance","onDispose","dispose","EnvConstantAmbient","UNIFORM_NAME_CONSTANT_AMBIENT","ambientColor","_ambientColor","_refl","_roughness","EnvHemisphericAmbient","UNIFORM_NAME_AMBIENT_UP","UNIFORM_NAME_AMBIENT_DOWN","ambientUp","ambientDown","_ambientUp","_ambientDown","color","factor","EnvProbesOnly","_scope"],"mappings":"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"}
@@ -6,12 +6,13 @@ import { ShaderHelper } from '../material/shader/helper.js';
6
6
  import '../material/lambert.js';
7
7
  import '../material/blinn.js';
8
8
  import '../material/unlit.js';
9
+ import '../material/meshmaterial.js';
9
10
  import '../material/particle.js';
10
11
  import '../material/subsurfaceprofile.js';
11
- import '../material/skin.js';
12
+ import '../material/sssprofile.js';
13
+ import '../material/sss.js';
12
14
  import '../material/eye.js';
13
15
  import '../values.js';
14
- import '../material/meshmaterial.js';
15
16
  import '../material/hair.js';
16
17
  import '../material/hairstrand.js';
17
18
  import '../material/grassmaterial.js';
@@ -24,7 +25,6 @@ import '../material/sprite.js';
24
25
  import '../material/sprite_std.js';
25
26
  import '../utility/blueprint/material/texture.js';
26
27
 
27
- const MAX_NUM_OCTAVES = 16;
28
28
  /**
29
29
  * FBM wave generator.
30
30
  * @public
@@ -37,7 +37,7 @@ const MAX_NUM_OCTAVES = 16;
37
37
  _lacunarity;
38
38
  _gain;
39
39
  /**
40
- * Creates a new Gerstner wave generator.
40
+ * Creates a new FBM wave generator.
41
41
  */ constructor(){
42
42
  super();
43
43
  this._version = 0;
@@ -157,12 +157,7 @@ const MAX_NUM_OCTAVES = 16;
157
157
  this.$l.a = pb.float(0);
158
158
  this.$l.b = pb.float(1);
159
159
  this.$l.c = pb.float(0);
160
- this.$for(pb.int('i'), 0, pb.getDevice().type === 'webgl' ? MAX_NUM_OCTAVES : this.numOctaves, function() {
161
- if (pb.getDevice().type === 'webgl') {
162
- this.$if(pb.greaterThanEqual(this.i, this.numOctaves), function() {
163
- this.$break();
164
- });
165
- }
160
+ this.$for(pb.int('i'), 0, this.numOctaves, function() {
166
161
  this.$l.n = pb.sub(valueNoise(this, this.p), 0.5);
167
162
  this.a = pb.add(this.a, pb.mul(this.n, this.b));
168
163
  this.c = pb.add(this.c, this.b);
@@ -1 +1 @@
1
- {"version":3,"file":"fbm_wavegenerator.js","sources":["../../src/render/fbm_wavegenerator.ts"],"sourcesContent":["import type { AABB, Immutable } from '@zephyr3d/base';\r\nimport { Disposable, Vector2 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type { BindGroup, PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { valueNoise } from '../shaders';\r\nimport { ShaderHelper } from '../material';\r\n\r\nconst MAX_NUM_OCTAVES = 16;\r\n\r\n/**\r\n * FBM wave generator.\r\n * @public\r\n */\r\nexport class FBMWaveGenerator extends Disposable implements WaveGenerator {\r\n private _version: number;\r\n private readonly _windVelocity: Vector2;\r\n private _numOctaves: number;\r\n private _amplitude: number;\r\n private _frequency: number;\r\n private readonly _lacunarity: number;\r\n private readonly _gain: number;\r\n /**\r\n * Creates a new Gerstner wave generator.\r\n */\r\n constructor() {\r\n super();\r\n this._version = 0;\r\n this._numOctaves = 4;\r\n this._windVelocity = new Vector2(0.1, 0);\r\n this._amplitude = 0.3;\r\n this._frequency = 3;\r\n this._lacunarity = 1.83;\r\n this._gain = 0.57;\r\n }\r\n clone() {\r\n const other = new FBMWaveGenerator();\r\n other.numOctaves = this.numOctaves;\r\n other.wind = this.wind;\r\n other.amplitude = this.amplitude;\r\n other.frequency = this.frequency;\r\n return other as this;\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n /** Number of octaves */\r\n get numOctaves() {\r\n return this._numOctaves;\r\n }\r\n set numOctaves(val) {\r\n if (val !== this.numOctaves) {\r\n this._numOctaves = val;\r\n this._version++;\r\n }\r\n }\r\n /** Wave amplitude */\r\n get amplitude() {\r\n return this._amplitude;\r\n }\r\n set amplitude(val) {\r\n if (val !== this._amplitude) {\r\n this._amplitude = val;\r\n this._version++;\r\n }\r\n }\r\n /** Wave frequency */\r\n get frequency() {\r\n return this._frequency;\r\n }\r\n set frequency(val) {\r\n if (val !== this._frequency) {\r\n this._frequency = val;\r\n this._version++;\r\n }\r\n }\r\n /** Wind velocity */\r\n get wind(): Immutable<Vector2> {\r\n return this._windVelocity;\r\n }\r\n set wind(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._windVelocity)) {\r\n this._windVelocity.set(val);\r\n this._version++;\r\n }\r\n }\r\n /** @internal */\r\n private calcWaveNormal(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n time: PBShaderExp,\r\n windVelocity: PBShaderExp,\r\n amplitude: PBShaderExp,\r\n frequency: PBShaderExp,\r\n gain: PBShaderExp,\r\n lacunarity: PBShaderExp,\r\n numOctaves: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'calcWaveNormal';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('worldPos'),\r\n pb.float('time'),\r\n pb.vec2('windVelocity'),\r\n pb.float('amplitude'),\r\n pb.float('frequency'),\r\n pb.float('gain'),\r\n pb.float('lacunarity'),\r\n pb.int('numOctaves')\r\n ],\r\n function () {\r\n this.$l.epsilon = pb.float(0.1);\r\n this.$l.hr = that.calcWaveHeight(\r\n this,\r\n pb.add(this.worldPos, pb.vec2(this.epsilon, 0)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.hl = that.calcWaveHeight(\r\n this,\r\n pb.sub(this.worldPos, pb.vec2(this.epsilon, 0)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.hu = that.calcWaveHeight(\r\n this,\r\n pb.add(this.worldPos, pb.vec2(0, this.epsilon)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.hd = that.calcWaveHeight(\r\n this,\r\n pb.sub(this.worldPos, pb.vec2(0, this.epsilon)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.dHdx = pb.div(pb.sub(this.hr, this.hl), pb.mul(this.epsilon, 2));\r\n this.$l.dHdz = pb.div(pb.sub(this.hu, this.hd), pb.mul(this.epsilon, 2));\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.dHdx), 1, pb.neg(this.dHdz)));\r\n this.$return(this.normal);\r\n }\r\n );\r\n return scope[funcName](\r\n worldPos,\r\n time,\r\n windVelocity,\r\n amplitude,\r\n frequency,\r\n gain,\r\n lacunarity,\r\n numOctaves\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private calcWaveHeight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n windVelocity: PBShaderExp,\r\n amplitude: PBShaderExp,\r\n frequency: PBShaderExp,\r\n gain: PBShaderExp,\r\n lacunarity: PBShaderExp,\r\n numOctaves: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'calcWaveHeight';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('worldPos'),\r\n pb.vec2('windVelocity'),\r\n pb.float('amplitude'),\r\n pb.float('frequency'),\r\n pb.float('gain'),\r\n pb.float('lacunarity'),\r\n pb.int('numOctaves')\r\n ],\r\n function () {\r\n this.$l.windOffset = pb.mul(this.windVelocity, ShaderHelper.getElapsedTime(this));\r\n this.$l.height = that.fbm(\r\n this,\r\n pb.add(pb.mul(this.worldPos, 0.01), this.windOffset),\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.height = pb.add(\r\n this.height,\r\n pb.mul(\r\n 0.3,\r\n that.fbm(\r\n this,\r\n pb.add(pb.mul(this.worldPos, 0.05), pb.mul(this.windOffset, 1.5)),\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n )\r\n )\r\n );\r\n this.height = pb.add(\r\n this.height,\r\n pb.mul(\r\n 0.1,\r\n that.fbm(\r\n this,\r\n pb.add(pb.mul(this.worldPos, 0.1), pb.mul(this.windOffset, 2)),\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n )\r\n )\r\n );\r\n this.$return(pb.mul(this.height, this.amplitude));\r\n }\r\n );\r\n return scope[funcName](\r\n worldPos,\r\n windVelocity,\r\n amplitude,\r\n frequency,\r\n gain,\r\n lacunarity,\r\n numOctaves\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private fbm(\r\n scope: PBInsideFunctionScope,\r\n st: PBShaderExp,\r\n frequency: PBShaderExp,\r\n gain: PBShaderExp,\r\n lacunarity: PBShaderExp,\r\n numOctaves: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'FBM';\r\n pb.func(\r\n funcName,\r\n [pb.vec2('st'), pb.float('frequency'), pb.float('gain'), pb.float('lacunarity'), pb.int('numOctaves')],\r\n function () {\r\n this.$l.m2 = pb.mat2(0.8, 0.6, -0.6, 0.8);\r\n this.$l.p = this.st; //pb.mul(this.st, 0.05);\r\n this.$l.a = pb.float(0);\r\n this.$l.b = pb.float(1);\r\n this.$l.c = pb.float(0);\r\n this.$for(\r\n pb.int('i'),\r\n 0,\r\n pb.getDevice().type === 'webgl' ? MAX_NUM_OCTAVES : this.numOctaves,\r\n function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$if(pb.greaterThanEqual(this.i, this.numOctaves), function () {\r\n this.$break();\r\n });\r\n }\r\n this.$l.n = pb.sub(valueNoise(this, this.p), 0.5);\r\n this.a = pb.add(this.a, pb.mul(this.n, this.b));\r\n this.c = pb.add(this.c, this.b);\r\n this.b = pb.mul(this.b, this.gain);\r\n this.p = pb.mul(this.m2, this.p, this.frequency);\r\n }\r\n );\r\n this.$return(pb.div(this.a, this.c));\r\n }\r\n );\r\n return scope[funcName](st, frequency, gain, lacunarity, numOctaves) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update() {}\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return false;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const maxHeight = 1.5 * this._amplitude;\r\n outAABB.minPoint.setXYZ(minX, y - maxHeight, minZ);\r\n outAABB.maxPoint.setXYZ(maxX, y + maxHeight, maxZ);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.normal = that.calcWaveNormal(\r\n this,\r\n this.xz,\r\n ShaderHelper.getElapsedTime(this),\r\n this.windVelocity,\r\n this.waveAmplitude,\r\n this.waveFrequency,\r\n this.waveGain,\r\n this.waveLacunarity,\r\n this.numOctaves\r\n );\r\n this.$return(this.normal);\r\n });\r\n return scope.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n return scope.$builder.vec4(this.calcFragmentNormal(scope, xz, _vertexNormal), 0);\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.numOctaves = pb.int().uniform(uniformGroup);\r\n scope.windVelocity = pb.vec2().uniform(uniformGroup);\r\n scope.waveAmplitude = pb.float().uniform(uniformGroup);\r\n scope.waveFrequency = pb.float().uniform(uniformGroup);\r\n scope.waveGain = pb.float().uniform(uniformGroup);\r\n scope.waveLacunarity = pb.float().uniform(uniformGroup);\r\n }\r\n /** @internal */\r\n private calcNormalAndPos(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.outNormal = that.calcWaveNormal(\r\n this,\r\n this.inPos.xz,\r\n ShaderHelper.getElapsedTime(this),\r\n this.windVelocity,\r\n this.waveAmplitude,\r\n this.waveFrequency,\r\n this.waveGain,\r\n this.waveLacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.h = that.calcWaveHeight(\r\n this,\r\n this.inPos.xz,\r\n this.windVelocity,\r\n this.waveAmplitude,\r\n this.waveFrequency,\r\n this.waveGain,\r\n this.waveLacunarity,\r\n this.numOctaves\r\n );\r\n this.outPos = pb.add(this.inPos, pb.vec3(0, this.h, 0));\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n this.calcNormalAndPos(scope, inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n bindGroup.setValue('numOctaves', this._numOctaves);\r\n bindGroup.setValue('windVelocity', this._windVelocity);\r\n bindGroup.setValue('waveAmplitude', this._amplitude);\r\n bindGroup.setValue('waveFrequency', this._frequency);\r\n bindGroup.setValue('waveGain', this._gain);\r\n bindGroup.setValue('waveLacunarity', this._lacunarity);\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return true;\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'FBMWaveGenerator';\r\n }\r\n}\r\n"],"names":["MAX_NUM_OCTAVES","FBMWaveGenerator","Disposable","_version","_windVelocity","_numOctaves","_amplitude","_frequency","_lacunarity","_gain","Vector2","clone","other","numOctaves","wind","amplitude","frequency","version","val","equalsTo","set","scope","worldPos","time","windVelocity","gain","lacunarity","pb","$builder","funcName","that","func","vec2","float","int","$l","epsilon","hr","calcWaveHeight","add","hl","sub","hu","hd","dHdx","div","mul","dHdz","normal","normalize","vec3","neg","$return","windOffset","ShaderHelper","getElapsedTime","height","fbm","st","m2","mat2","p","a","b","c","$for","getDevice","type","$if","greaterThanEqual","i","$break","n","valueNoise","update","needUpdate","calcClipmapTileAABB","minX","maxX","minZ","maxZ","y","outAABB","maxHeight","minPoint","setXYZ","maxPoint","calcFragmentNormal","xz","_vertexNormal","calcWaveNormal","waveAmplitude","waveFrequency","waveGain","waveLacunarity","calcFragmentNormalAndFoam","vec4","setupUniforms","uniformGroup","uniform","calcNormalAndPos","inPos","outPos","outNormal","out","h","calcPositionAndNormal","calcVertexPositionAndNormal","applyWaterBindGroup","bindGroup","setValue","isOk","getHash"],"mappings":"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"}
1
+ {"version":3,"file":"fbm_wavegenerator.js","sources":["../../src/render/fbm_wavegenerator.ts"],"sourcesContent":["import type { AABB, Immutable } from '@zephyr3d/base';\r\nimport { Disposable, Vector2 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type { BindGroup, PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { valueNoise } from '../shaders';\r\nimport { ShaderHelper } from '../material';\r\n\r\n/**\r\n * FBM wave generator.\r\n * @public\r\n */\r\nexport class FBMWaveGenerator extends Disposable implements WaveGenerator {\r\n private _version: number;\r\n private readonly _windVelocity: Vector2;\r\n private _numOctaves: number;\r\n private _amplitude: number;\r\n private _frequency: number;\r\n private readonly _lacunarity: number;\r\n private readonly _gain: number;\r\n /**\r\n * Creates a new FBM wave generator.\r\n */\r\n constructor() {\r\n super();\r\n this._version = 0;\r\n this._numOctaves = 4;\r\n this._windVelocity = new Vector2(0.1, 0);\r\n this._amplitude = 0.3;\r\n this._frequency = 3;\r\n this._lacunarity = 1.83;\r\n this._gain = 0.57;\r\n }\r\n clone() {\r\n const other = new FBMWaveGenerator();\r\n other.numOctaves = this.numOctaves;\r\n other.wind = this.wind;\r\n other.amplitude = this.amplitude;\r\n other.frequency = this.frequency;\r\n return other as this;\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n /** Number of octaves */\r\n get numOctaves() {\r\n return this._numOctaves;\r\n }\r\n set numOctaves(val) {\r\n if (val !== this.numOctaves) {\r\n this._numOctaves = val;\r\n this._version++;\r\n }\r\n }\r\n /** Wave amplitude */\r\n get amplitude() {\r\n return this._amplitude;\r\n }\r\n set amplitude(val) {\r\n if (val !== this._amplitude) {\r\n this._amplitude = val;\r\n this._version++;\r\n }\r\n }\r\n /** Wave frequency */\r\n get frequency() {\r\n return this._frequency;\r\n }\r\n set frequency(val) {\r\n if (val !== this._frequency) {\r\n this._frequency = val;\r\n this._version++;\r\n }\r\n }\r\n /** Wind velocity */\r\n get wind(): Immutable<Vector2> {\r\n return this._windVelocity;\r\n }\r\n set wind(val: Immutable<Vector2>) {\r\n if (!val.equalsTo(this._windVelocity)) {\r\n this._windVelocity.set(val);\r\n this._version++;\r\n }\r\n }\r\n /** @internal */\r\n private calcWaveNormal(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n time: PBShaderExp,\r\n windVelocity: PBShaderExp,\r\n amplitude: PBShaderExp,\r\n frequency: PBShaderExp,\r\n gain: PBShaderExp,\r\n lacunarity: PBShaderExp,\r\n numOctaves: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'calcWaveNormal';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('worldPos'),\r\n pb.float('time'),\r\n pb.vec2('windVelocity'),\r\n pb.float('amplitude'),\r\n pb.float('frequency'),\r\n pb.float('gain'),\r\n pb.float('lacunarity'),\r\n pb.int('numOctaves')\r\n ],\r\n function () {\r\n this.$l.epsilon = pb.float(0.1);\r\n this.$l.hr = that.calcWaveHeight(\r\n this,\r\n pb.add(this.worldPos, pb.vec2(this.epsilon, 0)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.hl = that.calcWaveHeight(\r\n this,\r\n pb.sub(this.worldPos, pb.vec2(this.epsilon, 0)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.hu = that.calcWaveHeight(\r\n this,\r\n pb.add(this.worldPos, pb.vec2(0, this.epsilon)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.hd = that.calcWaveHeight(\r\n this,\r\n pb.sub(this.worldPos, pb.vec2(0, this.epsilon)),\r\n this.windVelocity,\r\n this.amplitude,\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.dHdx = pb.div(pb.sub(this.hr, this.hl), pb.mul(this.epsilon, 2));\r\n this.$l.dHdz = pb.div(pb.sub(this.hu, this.hd), pb.mul(this.epsilon, 2));\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.dHdx), 1, pb.neg(this.dHdz)));\r\n this.$return(this.normal);\r\n }\r\n );\r\n return scope[funcName](\r\n worldPos,\r\n time,\r\n windVelocity,\r\n amplitude,\r\n frequency,\r\n gain,\r\n lacunarity,\r\n numOctaves\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private calcWaveHeight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n windVelocity: PBShaderExp,\r\n amplitude: PBShaderExp,\r\n frequency: PBShaderExp,\r\n gain: PBShaderExp,\r\n lacunarity: PBShaderExp,\r\n numOctaves: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'calcWaveHeight';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('worldPos'),\r\n pb.vec2('windVelocity'),\r\n pb.float('amplitude'),\r\n pb.float('frequency'),\r\n pb.float('gain'),\r\n pb.float('lacunarity'),\r\n pb.int('numOctaves')\r\n ],\r\n function () {\r\n this.$l.windOffset = pb.mul(this.windVelocity, ShaderHelper.getElapsedTime(this));\r\n this.$l.height = that.fbm(\r\n this,\r\n pb.add(pb.mul(this.worldPos, 0.01), this.windOffset),\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n );\r\n this.height = pb.add(\r\n this.height,\r\n pb.mul(\r\n 0.3,\r\n that.fbm(\r\n this,\r\n pb.add(pb.mul(this.worldPos, 0.05), pb.mul(this.windOffset, 1.5)),\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n )\r\n )\r\n );\r\n this.height = pb.add(\r\n this.height,\r\n pb.mul(\r\n 0.1,\r\n that.fbm(\r\n this,\r\n pb.add(pb.mul(this.worldPos, 0.1), pb.mul(this.windOffset, 2)),\r\n this.frequency,\r\n this.gain,\r\n this.lacunarity,\r\n this.numOctaves\r\n )\r\n )\r\n );\r\n this.$return(pb.mul(this.height, this.amplitude));\r\n }\r\n );\r\n return scope[funcName](\r\n worldPos,\r\n windVelocity,\r\n amplitude,\r\n frequency,\r\n gain,\r\n lacunarity,\r\n numOctaves\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private fbm(\r\n scope: PBInsideFunctionScope,\r\n st: PBShaderExp,\r\n frequency: PBShaderExp,\r\n gain: PBShaderExp,\r\n lacunarity: PBShaderExp,\r\n numOctaves: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'FBM';\r\n pb.func(\r\n funcName,\r\n [pb.vec2('st'), pb.float('frequency'), pb.float('gain'), pb.float('lacunarity'), pb.int('numOctaves')],\r\n function () {\r\n this.$l.m2 = pb.mat2(0.8, 0.6, -0.6, 0.8);\r\n this.$l.p = this.st; //pb.mul(this.st, 0.05);\r\n this.$l.a = pb.float(0);\r\n this.$l.b = pb.float(1);\r\n this.$l.c = pb.float(0);\r\n this.$for(pb.int('i'), 0, this.numOctaves, function () {\r\n this.$l.n = pb.sub(valueNoise(this, this.p), 0.5);\r\n this.a = pb.add(this.a, pb.mul(this.n, this.b));\r\n this.c = pb.add(this.c, this.b);\r\n this.b = pb.mul(this.b, this.gain);\r\n this.p = pb.mul(this.m2, this.p, this.frequency);\r\n });\r\n this.$return(pb.div(this.a, this.c));\r\n }\r\n );\r\n return scope[funcName](st, frequency, gain, lacunarity, numOctaves) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update() {}\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return false;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const maxHeight = 1.5 * this._amplitude;\r\n outAABB.minPoint.setXYZ(minX, y - maxHeight, minZ);\r\n outAABB.maxPoint.setXYZ(maxX, y + maxHeight, maxZ);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.normal = that.calcWaveNormal(\r\n this,\r\n this.xz,\r\n ShaderHelper.getElapsedTime(this),\r\n this.windVelocity,\r\n this.waveAmplitude,\r\n this.waveFrequency,\r\n this.waveGain,\r\n this.waveLacunarity,\r\n this.numOctaves\r\n );\r\n this.$return(this.normal);\r\n });\r\n return scope.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n return scope.$builder.vec4(this.calcFragmentNormal(scope, xz, _vertexNormal), 0);\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.numOctaves = pb.int().uniform(uniformGroup);\r\n scope.windVelocity = pb.vec2().uniform(uniformGroup);\r\n scope.waveAmplitude = pb.float().uniform(uniformGroup);\r\n scope.waveFrequency = pb.float().uniform(uniformGroup);\r\n scope.waveGain = pb.float().uniform(uniformGroup);\r\n scope.waveLacunarity = pb.float().uniform(uniformGroup);\r\n }\r\n /** @internal */\r\n private calcNormalAndPos(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.outNormal = that.calcWaveNormal(\r\n this,\r\n this.inPos.xz,\r\n ShaderHelper.getElapsedTime(this),\r\n this.windVelocity,\r\n this.waveAmplitude,\r\n this.waveFrequency,\r\n this.waveGain,\r\n this.waveLacunarity,\r\n this.numOctaves\r\n );\r\n this.$l.h = that.calcWaveHeight(\r\n this,\r\n this.inPos.xz,\r\n this.windVelocity,\r\n this.waveAmplitude,\r\n this.waveFrequency,\r\n this.waveGain,\r\n this.waveLacunarity,\r\n this.numOctaves\r\n );\r\n this.outPos = pb.add(this.inPos, pb.vec3(0, this.h, 0));\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n this.calcNormalAndPos(scope, inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n bindGroup.setValue('numOctaves', this._numOctaves);\r\n bindGroup.setValue('windVelocity', this._windVelocity);\r\n bindGroup.setValue('waveAmplitude', this._amplitude);\r\n bindGroup.setValue('waveFrequency', this._frequency);\r\n bindGroup.setValue('waveGain', this._gain);\r\n bindGroup.setValue('waveLacunarity', this._lacunarity);\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return true;\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'FBMWaveGenerator';\r\n }\r\n}\r\n"],"names":["FBMWaveGenerator","Disposable","_version","_windVelocity","_numOctaves","_amplitude","_frequency","_lacunarity","_gain","Vector2","clone","other","numOctaves","wind","amplitude","frequency","version","val","equalsTo","set","scope","worldPos","time","windVelocity","gain","lacunarity","pb","$builder","funcName","that","func","vec2","float","int","$l","epsilon","hr","calcWaveHeight","add","hl","sub","hu","hd","dHdx","div","mul","dHdz","normal","normalize","vec3","neg","$return","windOffset","ShaderHelper","getElapsedTime","height","fbm","st","m2","mat2","p","a","b","c","$for","n","valueNoise","update","needUpdate","calcClipmapTileAABB","minX","maxX","minZ","maxZ","y","outAABB","maxHeight","minPoint","setXYZ","maxPoint","calcFragmentNormal","xz","_vertexNormal","calcWaveNormal","waveAmplitude","waveFrequency","waveGain","waveLacunarity","calcFragmentNormalAndFoam","vec4","setupUniforms","uniformGroup","uniform","calcNormalAndPos","inPos","outPos","outNormal","out","h","calcPositionAndNormal","calcVertexPositionAndNormal","applyWaterBindGroup","bindGroup","setValue","isOk","getHash"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA;;;IAIO,MAAMA,gBAAyBC,SAAAA,UAAAA,CAAAA;IAC5BC,QAAiB;IACRC,aAAuB;IAChCC,WAAoB;IACpBC,UAAmB;IACnBC,UAAmB;IACVC,WAAoB;IACpBC,KAAc;AAC/B;;AAEC,MACD,WAAc,EAAA;QACZ,KAAK,EAAA;QACL,IAAI,CAACN,QAAQ,GAAG,CAAA;QAChB,IAAI,CAACE,WAAW,GAAG,CAAA;AACnB,QAAA,IAAI,CAACD,aAAa,GAAG,IAAIM,QAAQ,GAAK,EAAA,CAAA,CAAA;QACtC,IAAI,CAACJ,UAAU,GAAG,GAAA;QAClB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,KAAK,GAAG,IAAA;AACf;IACAE,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAIX,gBAAAA,EAAAA;AAClBW,QAAAA,KAAAA,CAAMC,UAAU,GAAG,IAAI,CAACA,UAAU;AAClCD,QAAAA,KAAAA,CAAME,IAAI,GAAG,IAAI,CAACA,IAAI;AACtBF,QAAAA,KAAAA,CAAMG,SAAS,GAAG,IAAI,CAACA,SAAS;AAChCH,QAAAA,KAAAA,CAAMI,SAAS,GAAG,IAAI,CAACA,SAAS;QAChC,OAAOJ,KAAAA;AACT;AACA,IAAA,IAAIK,OAAU,GAAA;QACZ,OAAO,IAAI,CAACd,QAAQ;AACtB;6BAEA,IAAIU,UAAa,GAAA;QACf,OAAO,IAAI,CAACR,WAAW;AACzB;IACA,IAAIQ,UAAAA,CAAWK,GAAG,EAAE;AAClB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACL,UAAU,EAAE;YAC3B,IAAI,CAACR,WAAW,GAAGa,GAAAA;AACnB,YAAA,IAAI,CAACf,QAAQ,EAAA;AACf;AACF;0BAEA,IAAIY,SAAY,GAAA;QACd,OAAO,IAAI,CAACT,UAAU;AACxB;IACA,IAAIS,SAAAA,CAAUG,GAAG,EAAE;AACjB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACZ,UAAU,EAAE;YAC3B,IAAI,CAACA,UAAU,GAAGY,GAAAA;AAClB,YAAA,IAAI,CAACf,QAAQ,EAAA;AACf;AACF;0BAEA,IAAIa,SAAY,GAAA;QACd,OAAO,IAAI,CAACT,UAAU;AACxB;IACA,IAAIS,SAAAA,CAAUE,GAAG,EAAE;AACjB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACX,UAAU,EAAE;YAC3B,IAAI,CAACA,UAAU,GAAGW,GAAAA;AAClB,YAAA,IAAI,CAACf,QAAQ,EAAA;AACf;AACF;yBAEA,IAAIW,IAA2B,GAAA;QAC7B,OAAO,IAAI,CAACV,aAAa;AAC3B;IACA,IAAIU,IAAAA,CAAKI,GAAuB,EAAE;AAChC,QAAA,IAAI,CAACA,GAAIC,CAAAA,QAAQ,CAAC,IAAI,CAACf,aAAa,CAAG,EAAA;AACrC,YAAA,IAAI,CAACA,aAAa,CAACgB,GAAG,CAACF,GAAAA,CAAAA;AACvB,YAAA,IAAI,CAACf,QAAQ,EAAA;AACf;AACF;qBAEA,cACEkB,CAAAA,KAA4B,EAC5BC,QAAqB,EACrBC,IAAiB,EACjBC,YAAyB,EACzBT,SAAsB,EACtBC,SAAsB,EACtBS,IAAiB,EACjBC,UAAuB,EACvBb,UAAuB,EACvB;QACA,MAAMc,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAMC,QAAW,GAAA,gBAAA;AACjB,QAAA,MAAMC,OAAO,IAAI;QACjBH,EAAGI,CAAAA,IAAI,CACLF,QACA,EAAA;AACEF,YAAAA,EAAAA,CAAGK,IAAI,CAAC,UAAA,CAAA;AACRL,YAAAA,EAAAA,CAAGM,KAAK,CAAC,MAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGK,IAAI,CAAC,cAAA,CAAA;AACRL,YAAAA,EAAAA,CAAGM,KAAK,CAAC,WAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,WAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,MAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,YAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGO,GAAG,CAAC,YAAA;SACR,EACD,WAAA;AACE,YAAA,IAAI,CAACC,EAAE,CAACC,OAAO,GAAGT,EAAAA,CAAGM,KAAK,CAAC,GAAA,CAAA;YAC3B,IAAI,CAACE,EAAE,CAACE,EAAE,GAAGP,IAAKQ,CAAAA,cAAc,CAC9B,IAAI,EACJX,GAAGY,GAAG,CAAC,IAAI,CAACjB,QAAQ,EAAEK,EAAGK,CAAAA,IAAI,CAAC,IAAI,CAACI,OAAO,EAAE,CAC5C,CAAA,CAAA,EAAA,IAAI,CAACZ,YAAY,EACjB,IAAI,CAACT,SAAS,EACd,IAAI,CAACC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA;YAEjB,IAAI,CAACsB,EAAE,CAACK,EAAE,GAAGV,IAAKQ,CAAAA,cAAc,CAC9B,IAAI,EACJX,GAAGc,GAAG,CAAC,IAAI,CAACnB,QAAQ,EAAEK,EAAGK,CAAAA,IAAI,CAAC,IAAI,CAACI,OAAO,EAAE,CAC5C,CAAA,CAAA,EAAA,IAAI,CAACZ,YAAY,EACjB,IAAI,CAACT,SAAS,EACd,IAAI,CAACC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA;YAEjB,IAAI,CAACsB,EAAE,CAACO,EAAE,GAAGZ,IAAKQ,CAAAA,cAAc,CAC9B,IAAI,EACJX,GAAGY,GAAG,CAAC,IAAI,CAACjB,QAAQ,EAAEK,EAAGK,CAAAA,IAAI,CAAC,CAAA,EAAG,IAAI,CAACI,OAAO,CAC7C,CAAA,EAAA,IAAI,CAACZ,YAAY,EACjB,IAAI,CAACT,SAAS,EACd,IAAI,CAACC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA;YAEjB,IAAI,CAACsB,EAAE,CAACQ,EAAE,GAAGb,IAAKQ,CAAAA,cAAc,CAC9B,IAAI,EACJX,GAAGc,GAAG,CAAC,IAAI,CAACnB,QAAQ,EAAEK,EAAGK,CAAAA,IAAI,CAAC,CAAA,EAAG,IAAI,CAACI,OAAO,CAC7C,CAAA,EAAA,IAAI,CAACZ,YAAY,EACjB,IAAI,CAACT,SAAS,EACd,IAAI,CAACC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA;YAEjB,IAAI,CAACsB,EAAE,CAACS,IAAI,GAAGjB,GAAGkB,GAAG,CAAClB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACJ,EAAE,EAAE,IAAI,CAACG,EAAE,CAAA,EAAGb,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACV,OAAO,EAAE,CAAA,CAAA,CAAA;YACrE,IAAI,CAACD,EAAE,CAACY,IAAI,GAAGpB,GAAGkB,GAAG,CAAClB,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACC,EAAE,EAAE,IAAI,CAACC,EAAE,CAAA,EAAGhB,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACV,OAAO,EAAE,CAAA,CAAA,CAAA;YACrE,IAAI,CAACD,EAAE,CAACa,MAAM,GAAGrB,GAAGsB,SAAS,CAACtB,EAAGuB,CAAAA,IAAI,CAACvB,EAAAA,CAAGwB,GAAG,CAAC,IAAI,CAACP,IAAI,CAAG,EAAA,CAAA,EAAGjB,GAAGwB,GAAG,CAAC,IAAI,CAACJ,IAAI,CAAA,CAAA,CAAA;AAC5E,YAAA,IAAI,CAACK,OAAO,CAAC,IAAI,CAACJ,MAAM,CAAA;AAC1B,SAAA,CAAA;QAEF,OAAO3B,KAAK,CAACQ,QAAAA,CAAS,CACpBP,QAAAA,EACAC,MACAC,YACAT,EAAAA,SAAAA,EACAC,SACAS,EAAAA,IAAAA,EACAC,UACAb,EAAAA,UAAAA,CAAAA;AAEJ;AACA,qBACA,cAAQyB,CACNjB,KAA4B,EAC5BC,QAAqB,EACrBE,YAAyB,EACzBT,SAAsB,EACtBC,SAAsB,EACtBS,IAAiB,EACjBC,UAAuB,EACvBb,UAAuB,EACvB;QACA,MAAMc,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAMC,QAAW,GAAA,gBAAA;AACjB,QAAA,MAAMC,OAAO,IAAI;QACjBH,EAAGI,CAAAA,IAAI,CACLF,QACA,EAAA;AACEF,YAAAA,EAAAA,CAAGK,IAAI,CAAC,UAAA,CAAA;AACRL,YAAAA,EAAAA,CAAGK,IAAI,CAAC,cAAA,CAAA;AACRL,YAAAA,EAAAA,CAAGM,KAAK,CAAC,WAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,WAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,MAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,YAAA,CAAA;AACTN,YAAAA,EAAAA,CAAGO,GAAG,CAAC,YAAA;SACR,EACD,WAAA;AACE,YAAA,IAAI,CAACC,EAAE,CAACkB,UAAU,GAAG1B,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACtB,YAAY,EAAE8B,YAAaC,CAAAA,cAAc,CAAC,IAAI,CAAA,CAAA;AAC/E,YAAA,IAAI,CAACpB,EAAE,CAACqB,MAAM,GAAG1B,KAAK2B,GAAG,CACvB,IAAI,EACJ9B,GAAGY,GAAG,CAACZ,GAAGmB,GAAG,CAAC,IAAI,CAACxB,QAAQ,EAAE,IAAA,CAAA,EAAO,IAAI,CAAC+B,UAAU,GACnD,IAAI,CAACrC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA;YAEjB,IAAI,CAAC2C,MAAM,GAAG7B,EAAGY,CAAAA,GAAG,CAClB,IAAI,CAACiB,MAAM,EACX7B,EAAGmB,CAAAA,GAAG,CACJ,GACAhB,EAAAA,IAAAA,CAAK2B,GAAG,CACN,IAAI,EACJ9B,GAAGY,GAAG,CAACZ,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACxB,QAAQ,EAAE,IAAOK,CAAAA,EAAAA,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACO,UAAU,EAAE,GAAA,CAAA,CAAA,EAC5D,IAAI,CAACrC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA,CAAA,CAAA;YAIrB,IAAI,CAAC2C,MAAM,GAAG7B,EAAGY,CAAAA,GAAG,CAClB,IAAI,CAACiB,MAAM,EACX7B,EAAGmB,CAAAA,GAAG,CACJ,GACAhB,EAAAA,IAAAA,CAAK2B,GAAG,CACN,IAAI,EACJ9B,GAAGY,GAAG,CAACZ,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACxB,QAAQ,EAAE,GAAMK,CAAAA,EAAAA,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACO,UAAU,EAAE,CAAA,CAAA,CAAA,EAC3D,IAAI,CAACrC,SAAS,EACd,IAAI,CAACS,IAAI,EACT,IAAI,CAACC,UAAU,EACf,IAAI,CAACb,UAAU,CAAA,CAAA,CAAA;AAIrB,YAAA,IAAI,CAACuC,OAAO,CAACzB,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACU,MAAM,EAAE,IAAI,CAACzC,SAAS,CAAA,CAAA;AACjD,SAAA,CAAA;QAEF,OAAOM,KAAK,CAACQ,QAAS,CAAA,CACpBP,UACAE,YACAT,EAAAA,SAAAA,EACAC,SACAS,EAAAA,IAAAA,EACAC,UACAb,EAAAA,UAAAA,CAAAA;AAEJ;AACA,qBACQ4C,GACNpC,CAAAA,KAA4B,EAC5BqC,EAAe,EACf1C,SAAsB,EACtBS,IAAiB,EACjBC,UAAuB,EACvBb,UAAuB,EACvB;QACA,MAAMc,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAMC,QAAW,GAAA,KAAA;QACjBF,EAAGI,CAAAA,IAAI,CACLF,QACA,EAAA;AAACF,YAAAA,EAAAA,CAAGK,IAAI,CAAC,IAAA,CAAA;AAAOL,YAAAA,EAAAA,CAAGM,KAAK,CAAC,WAAA,CAAA;AAAcN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,MAAA,CAAA;AAASN,YAAAA,EAAAA,CAAGM,KAAK,CAAC,YAAA,CAAA;AAAeN,YAAAA,EAAAA,CAAGO,GAAG,CAAC,YAAA;SAAc,EACtG,WAAA;YACE,IAAI,CAACC,EAAE,CAACwB,EAAE,GAAGhC,EAAGiC,CAAAA,IAAI,CAAC,GAAA,EAAK,GAAK,EAAA,IAAM,EAAA,GAAA,CAAA;YACrC,IAAI,CAACzB,EAAE,CAAC0B,CAAC,GAAG,IAAI,CAACH,EAAE,CAAA;AACnB,YAAA,IAAI,CAACvB,EAAE,CAAC2B,CAAC,GAAGnC,EAAAA,CAAGM,KAAK,CAAC,CAAA,CAAA;AACrB,YAAA,IAAI,CAACE,EAAE,CAAC4B,CAAC,GAAGpC,EAAAA,CAAGM,KAAK,CAAC,CAAA,CAAA;AACrB,YAAA,IAAI,CAACE,EAAE,CAAC6B,CAAC,GAAGrC,EAAAA,CAAGM,KAAK,CAAC,CAAA,CAAA;YACrB,IAAI,CAACgC,IAAI,CAACtC,EAAGO,CAAAA,GAAG,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAACrB,UAAU,EAAE,WAAA;AACzC,gBAAA,IAAI,CAACsB,EAAE,CAAC+B,CAAC,GAAGvC,EAAGc,CAAAA,GAAG,CAAC0B,UAAAA,CAAW,IAAI,EAAE,IAAI,CAACN,CAAC,CAAG,EAAA,GAAA,CAAA;AAC7C,gBAAA,IAAI,CAACC,CAAC,GAAGnC,GAAGY,GAAG,CAAC,IAAI,CAACuB,CAAC,EAAEnC,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACoB,CAAC,EAAE,IAAI,CAACH,CAAC,CAAA,CAAA;AAC7C,gBAAA,IAAI,CAACC,CAAC,GAAGrC,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAACyB,CAAC,EAAE,IAAI,CAACD,CAAC,CAAA;AAC9B,gBAAA,IAAI,CAACA,CAAC,GAAGpC,EAAAA,CAAGmB,GAAG,CAAC,IAAI,CAACiB,CAAC,EAAE,IAAI,CAACtC,IAAI,CAAA;AACjC,gBAAA,IAAI,CAACoC,CAAC,GAAGlC,EAAGmB,CAAAA,GAAG,CAAC,IAAI,CAACa,EAAE,EAAE,IAAI,CAACE,CAAC,EAAE,IAAI,CAAC7C,SAAS,CAAA;AACjD,aAAA,CAAA;AACA,YAAA,IAAI,CAACoC,OAAO,CAACzB,EAAAA,CAAGkB,GAAG,CAAC,IAAI,CAACiB,CAAC,EAAE,IAAI,CAACE,CAAC,CAAA,CAAA;AACpC,SAAA,CAAA;AAEF,QAAA,OAAO3C,KAAK,CAACQ,QAAAA,CAAS,CAAC6B,EAAI1C,EAAAA,SAAAA,EAAWS,MAAMC,UAAYb,EAAAA,UAAAA,CAAAA;AAC1D;8CAEAuD,SAAS;AACT,kDACAC,UAAa,GAAA;QACX,OAAO,KAAA;AACT;AACA,2DACAC,mBAAAA,CAAoBC,IAAY,EAAEC,IAAY,EAAEC,IAAY,EAAEC,IAAY,EAAEC,CAAS,EAAEC,OAAa,EAAE;AACpG,QAAA,MAAMC,SAAY,GAAA,GAAA,GAAM,IAAI,CAACvE,UAAU;AACvCsE,QAAAA,OAAAA,CAAQE,QAAQ,CAACC,MAAM,CAACR,IAAAA,EAAMI,IAAIE,SAAWJ,EAAAA,IAAAA,CAAAA;AAC7CG,QAAAA,OAAAA,CAAQI,QAAQ,CAACD,MAAM,CAACP,IAAAA,EAAMG,IAAIE,SAAWH,EAAAA,IAAAA,CAAAA;AAC/C;AACA,0DACAO,kBAAmB5D,CAAAA,KAA4B,EAAE6D,EAAe,EAAEC,aAA0B,EAAE;QAC5F,MAAMxD,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAME,OAAO,IAAI;QACjBH,EAAGI,CAAAA,IAAI,CAAC,oBAAsB,EAAA;AAACJ,YAAAA,EAAAA,CAAGK,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AAC7C,YAAA,IAAI,CAACG,EAAE,CAACa,MAAM,GAAGlB,IAAAA,CAAKsD,cAAc,CAClC,IAAI,EACJ,IAAI,CAACF,EAAE,EACP5B,aAAaC,cAAc,CAAC,IAAI,CAChC,EAAA,IAAI,CAAC/B,YAAY,EACjB,IAAI,CAAC6D,aAAa,EAClB,IAAI,CAACC,aAAa,EAClB,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,cAAc,EACnB,IAAI,CAAC3E,UAAU,CAAA;AAEjB,YAAA,IAAI,CAACuC,OAAO,CAAC,IAAI,CAACJ,MAAM,CAAA;AAC1B,SAAA,CAAA;QACA,OAAO3B,KAAAA,CAAM4D,kBAAkB,CAACC,EAAAA,CAAAA;AAClC;AACA,iEACAO,yBAA0BpE,CAAAA,KAA4B,EAAE6D,EAAe,EAAEC,aAA0B,EAAE;QACnG,OAAO9D,KAAAA,CAAMO,QAAQ,CAAC8D,IAAI,CAAC,IAAI,CAACT,kBAAkB,CAAC5D,KAAO6D,EAAAA,EAAAA,EAAIC,aAAgB,CAAA,EAAA,CAAA,CAAA;AAChF;AACA,qDACAQ,aAAAA,CAActE,KAAoB,EAAEuE,YAAoB,EAAE;QACxD,MAAMjE,EAAAA,GAAKN,MAAMO,QAAQ;AACzBP,QAAAA,KAAAA,CAAMR,UAAU,GAAGc,EAAAA,CAAGO,GAAG,EAAA,CAAG2D,OAAO,CAACD,YAAAA,CAAAA;AACpCvE,QAAAA,KAAAA,CAAMG,YAAY,GAAGG,EAAAA,CAAGK,IAAI,EAAA,CAAG6D,OAAO,CAACD,YAAAA,CAAAA;AACvCvE,QAAAA,KAAAA,CAAMgE,aAAa,GAAG1D,EAAAA,CAAGM,KAAK,EAAA,CAAG4D,OAAO,CAACD,YAAAA,CAAAA;AACzCvE,QAAAA,KAAAA,CAAMiE,aAAa,GAAG3D,EAAAA,CAAGM,KAAK,EAAA,CAAG4D,OAAO,CAACD,YAAAA,CAAAA;AACzCvE,QAAAA,KAAAA,CAAMkE,QAAQ,GAAG5D,EAAAA,CAAGM,KAAK,EAAA,CAAG4D,OAAO,CAACD,YAAAA,CAAAA;AACpCvE,QAAAA,KAAAA,CAAMmE,cAAc,GAAG7D,EAAAA,CAAGM,KAAK,EAAA,CAAG4D,OAAO,CAACD,YAAAA,CAAAA;AAC5C;qBAEA,gBAAQE,CACNzE,KAA4B,EAC5B0E,KAAkB,EAClBC,MAAmB,EACnBC,SAAsB,EACtB;QACA,MAAMtE,EAAAA,GAAKN,MAAMO,QAAQ;AACzB,QAAA,MAAME,OAAO,IAAI;QACjBH,EAAGI,CAAAA,IAAI,CACL,uBACA,EAAA;AAACJ,YAAAA,EAAAA,CAAGuB,IAAI,CAAC,OAAA,CAAA;YAAUvB,EAAGuB,CAAAA,IAAI,CAAC,QAAA,CAAA,CAAUgD,GAAG,EAAA;YAAIvE,EAAGuB,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAagD,GAAG;SAAG,EACvE,WAAA;AACE,YAAA,IAAI,CAACD,SAAS,GAAGnE,KAAKsD,cAAc,CAClC,IAAI,EACJ,IAAI,CAACW,KAAK,CAACb,EAAE,EACb5B,aAAaC,cAAc,CAAC,IAAI,CAChC,EAAA,IAAI,CAAC/B,YAAY,EACjB,IAAI,CAAC6D,aAAa,EAClB,IAAI,CAACC,aAAa,EAClB,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,cAAc,EACnB,IAAI,CAAC3E,UAAU,CAAA;AAEjB,YAAA,IAAI,CAACsB,EAAE,CAACgE,CAAC,GAAGrE,KAAKQ,cAAc,CAC7B,IAAI,EACJ,IAAI,CAACyD,KAAK,CAACb,EAAE,EACb,IAAI,CAAC1D,YAAY,EACjB,IAAI,CAAC6D,aAAa,EAClB,IAAI,CAACC,aAAa,EAClB,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,cAAc,EACnB,IAAI,CAAC3E,UAAU,CAAA;AAEjB,YAAA,IAAI,CAACmF,MAAM,GAAGrE,EAAGY,CAAAA,GAAG,CAAC,IAAI,CAACwD,KAAK,EAAEpE,GAAGuB,IAAI,CAAC,GAAG,IAAI,CAACiD,CAAC,EAAE,CAAA,CAAA,CAAA;AACtD,SAAA,CAAA;QAEF9E,KAAM+E,CAAAA,qBAAqB,CAACL,KAAAA,EAAOC,MAAQC,EAAAA,SAAAA,CAAAA;AAC7C;mEAEAI,4BACEhF,KAA4B,EAC5B0E,KAAkB,EAClBC,MAAmB,EACnBC,SAAsB,EACtB;AACA,QAAA,IAAI,CAACH,gBAAgB,CAACzE,KAAAA,EAAO0E,OAAOC,MAAQC,EAAAA,SAAAA,CAAAA;AAC9C;2DAEAK,mBAAoBC,CAAAA,SAAoB,EAAE;AACxCA,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,YAAc,EAAA,IAAI,CAACnG,WAAW,CAAA;AACjDkG,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,cAAgB,EAAA,IAAI,CAACpG,aAAa,CAAA;AACrDmG,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAAClG,UAAU,CAAA;AACnDiG,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,eAAiB,EAAA,IAAI,CAACjG,UAAU,CAAA;AACnDgG,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,UAAY,EAAA,IAAI,CAAC/F,KAAK,CAAA;AACzC8F,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,gBAAkB,EAAA,IAAI,CAAChG,WAAW,CAAA;AACvD;AACA,4CACAiG,IAAO,GAAA;QACL,OAAO,IAAA;AACT;AACA,+CACAC,OAAU,GAAA;QACR,OAAO,kBAAA;AACT;AACF;;;;"}