@zephyr3d/scene 0.9.26 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"water.js","sources":["../../src/material/water.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport type { DrawContext, WaveGenerator } from '../render';\r\nimport { MaterialVaryingFlags } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DRef, DWeakRef, Interpolator, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D } from '../shaders/ssr';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { mixinLight } from './mixins/lit';\r\nimport { distributionGGX, fresnelSchlick, visGGX } from '../shaders/pbr';\r\nimport { getDevice } from '../app/api';\r\n\r\nexport class WaterMaterial extends applyMaterialMixins(MeshMaterial, mixinLight) {\r\n private static readonly _absorptionGrad = new Interpolator(\r\n 'linear',\r\n 'vec3',\r\n new Float32Array([0, 0.082, 0.318, 0.665, 1]),\r\n new Float32Array([1, 1, 1, 0.22, 0.87, 0.87, 0, 0.47, 0.49, 0, 0.275, 0.44, 0, 0, 0])\r\n );\r\n private static readonly _scatterGrad = new Interpolator(\r\n 'linear',\r\n 'vec3',\r\n new Float32Array([0, 0.15, 0.42, 1]),\r\n new Float32Array([0, 0, 0, 0.08, 0.41, 0.34, 0.13, 0.4, 0.45, 0.21, 0.5, 0.6])\r\n );\r\n private static readonly _defaultScatterRampTexture: DWeakRef<Texture2D> = new DWeakRef();\r\n private static readonly _defaultAbsorptionRampTexture: DWeakRef<Texture2D> = new DWeakRef();\r\n private static readonly _waveUpdateState: WeakMap<WaveGenerator, number> = new WeakMap();\r\n private readonly _region: Vector4;\r\n private _displace: number;\r\n private _depthMulti: number;\r\n private _refractionStrength: number;\r\n private readonly _scatterRampTexture: DRef<Texture2D>;\r\n private readonly _absorptionRampTexture: DRef<Texture2D>;\r\n private readonly _waveGenerator: DRef<WaveGenerator>;\r\n private _waveVersion: number;\r\n private readonly _clipmapInfo: Vector4;\r\n private readonly _clipmapGridInfo: Vector4;\r\n private readonly _ssrParams: Vector4;\r\n constructor() {\r\n super();\r\n this._region = new Vector4(-99999, -99999, 99999, 99999);\r\n this._clipmapInfo = new Vector4();\r\n this._clipmapGridInfo = new Vector4();\r\n this._waveGenerator = new DRef();\r\n this._waveVersion = -1;\r\n this._ssrParams = new Vector4(1000, 160, 0.5, 2);\r\n this._scatterRampTexture = new DRef();\r\n this._absorptionRampTexture = new DRef();\r\n this._displace = 16;\r\n this._depthMulti = 0.1;\r\n this._refractionStrength = 0;\r\n this.cullMode = 'none';\r\n //this.TAADisabled = true;\r\n }\r\n /** {@inheritDoc Material.onDispose} */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._waveGenerator.dispose();\r\n this._scatterRampTexture.dispose();\r\n this._absorptionRampTexture.dispose();\r\n }\r\n /** @internal */\r\n get region() {\r\n return this._region;\r\n }\r\n /** @internal */\r\n set region(val: Vector4) {\r\n if (!val.equalsTo(this._region)) {\r\n this._region.set(val);\r\n this.uniformChanged();\r\n }\r\n }\r\n get waveGenerator() {\r\n return this._waveGenerator.get();\r\n }\r\n set waveGenerator(waveGenerator: Nullable<WaveGenerator>) {\r\n if (this._waveGenerator.get() !== waveGenerator) {\r\n this._waveGenerator.set(waveGenerator);\r\n this._waveVersion = -1;\r\n this.optionChanged(true);\r\n }\r\n }\r\n get scatterRampTexture() {\r\n const tex = this._getScatterRampTexture(getDevice());\r\n return tex === WaterMaterial._defaultScatterRampTexture.get() ? null : tex;\r\n }\r\n set scatterRampTexture(tex) {\r\n if (tex !== this.scatterRampTexture) {\r\n this._scatterRampTexture.set(tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n get absorptionRampTexture() {\r\n const tex = this._getAbsorptionRampTexture(getDevice());\r\n return tex === WaterMaterial._defaultAbsorptionRampTexture.get() ? null : tex;\r\n }\r\n set absorptionRampTexture(tex) {\r\n if (tex !== this.absorptionRampTexture) {\r\n this._absorptionRampTexture.set(tex);\r\n this.uniformChanged();\r\n }\r\n }\r\n get depthMulti() {\r\n return this._depthMulti;\r\n }\r\n set depthMulti(val) {\r\n if (val !== this._depthMulti) {\r\n this._depthMulti = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get displace() {\r\n return this._displace;\r\n }\r\n set displace(val) {\r\n if (val !== this._displace) {\r\n this._displace = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get refractionStrength() {\r\n return this._refractionStrength;\r\n }\r\n set refractionStrength(val) {\r\n if (val !== this._refractionStrength) {\r\n this._refractionStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n needSceneColor() {\r\n return true;\r\n }\r\n needSceneDepth() {\r\n return true;\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this.waveGenerator?.getHash() ?? ''}`;\r\n }\r\n setClipmapInfo(rotation: number, scale: number, offsetX: number, offsetY: number) {\r\n this._clipmapInfo.setXYZW(rotation, scale, offsetX, offsetY);\r\n this.uniformChanged();\r\n }\r\n setClipmapGridInfo(gridScale: number, gridOffsetX: number, gridOffsetY: number) {\r\n if (\r\n this._clipmapGridInfo.x !== gridScale ||\r\n this._clipmapGridInfo.y !== gridOffsetX ||\r\n this._clipmapGridInfo.z !== gridOffsetY\r\n ) {\r\n this._clipmapGridInfo.setXYZW(gridScale, gridOffsetX, gridOffsetY, 0);\r\n this.uniformChanged();\r\n }\r\n }\r\n supportInstancing() {\r\n return false;\r\n }\r\n supportLighting() {\r\n return true;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n this.waveGenerator?.setupUniforms(scope, 2);\r\n scope.$inputs.position = pb.vec3().attrib('position');\r\n scope.$inputs.clipmapInfo = pb.vec4().attrib('texCoord0');\r\n scope.clipmapGridInfo = pb.vec4().uniform(2);\r\n\r\n scope.$l.s = pb.sin(scope.$inputs.clipmapInfo.x);\r\n scope.$l.c = pb.cos(scope.$inputs.clipmapInfo.x);\r\n scope.$l.scale2 = pb.mul(scope.$inputs.clipmapInfo.y, scope.clipmapGridInfo.x);\r\n scope.$l.clipmapMatrix = pb.mat4(\r\n pb.mul(scope.c, scope.scale2),\r\n pb.mul(scope.s, scope.scale2),\r\n 0,\r\n 0,\r\n pb.neg(pb.mul(scope.s, scope.scale2)),\r\n pb.mul(scope.c, scope.scale2),\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n 0,\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.z, scope.clipmapGridInfo.x), scope.clipmapGridInfo.y),\r\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.w, scope.clipmapGridInfo.x), scope.clipmapGridInfo.z),\r\n 0,\r\n 1\r\n );\r\n\r\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.$inputs.position, 1)).xy;\r\n //scope.$l.level = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(0, 0, 0, 1)).y;\r\n scope.clipmapWorldPos = pb.mul(\r\n ShaderHelper.getWorldMatrix(scope),\r\n pb.vec4(scope.clipmapPos.x, 0, scope.clipmapPos.y, 1)\r\n ).xyz; // pb.vec3(scope.clipmapPos.x, scope.level, scope.clipmapPos.y);\r\n scope.worldNormal = pb.vec3(0, 1, 0);\r\n scope.worldPos = scope.clipmapWorldPos;\r\n this.waveGenerator?.calcVertexPositionAndNormal(\r\n scope,\r\n scope.clipmapWorldPos,\r\n scope.worldPos,\r\n scope.worldNormal\r\n );\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.clipmapPos = scope.clipmapWorldPos;\r\n scope.$outputs.worldNormal = scope.worldNormal;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.$outputs.worldPos);\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n this.waveGenerator?.setupUniforms(scope, 2);\r\n scope.region = pb.vec4().uniform(2);\r\n if (this.needFragmentColor()) {\r\n scope.displace = pb.float().uniform(2);\r\n scope.depthMulti = pb.float().uniform(2);\r\n scope.refractionStrength = pb.float().uniform(2);\r\n scope.ssrParams = pb.vec4().uniform(2);\r\n scope.scatterRampTex = pb.tex2D().uniform(2);\r\n scope.absorptionRampTex = pb.tex2D().uniform(2);\r\n }\r\n scope.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(scope.$inputs.worldPos.xz, scope.region.xy)),\r\n pb.any(pb.greaterThan(scope.$inputs.worldPos.xz, scope.region.zw))\r\n );\r\n scope.$if(scope.discardable, function () {\r\n pb.discard();\r\n });\r\n if (this.needFragmentColor()) {\r\n scope.$l.normal = this.waveGenerator\r\n ? this.waveGenerator.calcFragmentNormalAndFoam(\r\n scope,\r\n scope.$inputs.clipmapPos.xz,\r\n scope.$inputs.worldNormal\r\n )\r\n : pb.vec4(scope.$inputs.worldNormal, 0);\r\n scope.$l.outColor = pb.vec4(\r\n this.waterShading(scope, scope.$inputs.worldPos, scope.normal.xyz, scope.normal.w),\r\n 1\r\n );\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4(1, 1, 1, 0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n scope.outRoughness,\r\n scope.outColor\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n waterShading(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('getAbsorption', [pb.float('depth')], function () {\r\n this.$l.c = pb.textureSampleLevel(\r\n this.absorptionRampTex,\r\n pb.vec2(pb.mul(this.depth, this.depthMulti), 0.5),\r\n 0\r\n ).rgb;\r\n this.$return(pb.mul(this.c, this.c));\r\n });\r\n pb.func('getScattering', [pb.float('depth')], function () {\r\n this.$l.c = pb.textureSampleLevel(\r\n this.scatterRampTex,\r\n pb.vec2(pb.mul(this.depth, this.depthMulti), 0.5),\r\n 0\r\n ).rgb;\r\n this.$return(pb.mul(this.c, this.c));\r\n });\r\n pb.func('fresnel', [pb.vec3('normal'), pb.vec3('eyeVec')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.sub(pb.pow(pb.sub(1, pb.dot(this.normal, this.eyeVec)), 5), this.refractionStrength),\r\n 0,\r\n 1\r\n )\r\n );\r\n });\r\n pb.func(\r\n 'lightSpecular',\r\n [pb.vec3('lightDir'), pb.vec3('eyeVecNorm'), pb.vec3('normal'), pb.vec3('lightColor')],\r\n function () {\r\n this.$l.roughness = pb.float(0.04);\r\n this.$l.f0 = pb.vec3(0.02);\r\n this.$l.f90 = pb.vec3(1);\r\n this.$l.L = this.lightDir;\r\n this.$l.V = pb.neg(this.eyeVecNorm);\r\n this.$l.halfVec = pb.normalize(pb.add(this.L, this.V));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);\r\n this.$l.specular = pb.vec3(0);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.VoH = pb.clamp(pb.dot(this.V, this.halfVec), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.V), 0, 1);\r\n this.$l.F = fresnelSchlick(this, this.VoH, this.f0, this.f90);\r\n this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);\r\n this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.VIS = visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.specular = pb.mul(this.D, this.VIS, this.F, this.lightColor);\r\n });\r\n this.$return(this.specular);\r\n }\r\n );\r\n pb.func(\r\n 'waterShading',\r\n [pb.vec3('worldPos'), pb.vec3('worldNormal'), pb.float('foamFactor')],\r\n function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));\r\n this.$l.dist = pb.length(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this)));\r\n this.$l.normalScale = pb.clamp(pb.div(100, this.dist), 0, 1);\r\n this.$l.normal = pb.normalize(\r\n pb.mul(this.worldNormal, pb.vec3(this.normalScale, 1, this.normalScale))\r\n );\r\n this.$l.displacedTexCoord = pb.add(this.screenUV, pb.mul(this.normal.xz, this.displace));\r\n this.$l.wPos = ShaderHelper.samplePositionFromDepth(\r\n this,\r\n ShaderHelper.getLinearDepthTexture(this),\r\n this.screenUV,\r\n ShaderHelper.getInvViewProjectionMatrix(this),\r\n ShaderHelper.getCameraParams(this).xy\r\n );\r\n this.$l.eyeVec = pb.sub(this.worldPos.xyz, ShaderHelper.getCameraPosition(this));\r\n this.$l.eyeVecNorm = pb.normalize(this.eyeVec);\r\n this.$l.depth = pb.length(pb.sub(this.wPos.xyz, this.worldPos));\r\n this.$l.viewPos = pb.mul(ShaderHelper.getViewMatrix(this), pb.vec4(this.worldPos, 1)).xyz;\r\n this.incidentVec = pb.normalize(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this)));\r\n this.reflectVecW = pb.reflect(this.incidentVec, this.normal);\r\n this.$l.reflectance = pb.vec3();\r\n this.$l.hitInfo = pb.vec4(0);\r\n this.$if(pb.greaterThan(this.reflectVecW.y, 0), function () {\r\n this.reflectVec = pb.mul(ShaderHelper.getViewMatrix(this), pb.vec4(this.reflectVecW, 0)).xyz;\r\n this.hitInfo = ShaderHelper.getHiZDepthTexture(this)\r\n ? screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n ShaderHelper.getViewMatrix(this),\r\n ShaderHelper.getProjectionMatrix(this),\r\n ShaderHelper.getInvProjectionMatrix(this),\r\n ShaderHelper.getCameraParams(this).xy,\r\n pb.int(ShaderHelper.getHiZDepthTextureMipLevelCount(this)),\r\n this.ssrParams.y,\r\n this.ssrParams.x,\r\n this.ssrParams.z,\r\n pb.vec4(ShaderHelper.getRenderSize(this), ShaderHelper.getHiZDepthTextureSize(this)),\r\n ShaderHelper.getHiZDepthTexture(this)\r\n )\r\n : screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n ShaderHelper.getViewMatrix(this),\r\n ShaderHelper.getProjectionMatrix(this),\r\n ShaderHelper.getInvProjectionMatrix(this),\r\n ShaderHelper.getCameraParams(this).xy,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrParams.w,\r\n pb.vec4(ShaderHelper.getRenderSize(this), ShaderHelper.getLinearDepthTextureSize(this)),\r\n ShaderHelper.getLinearDepthTexture(this)\r\n );\r\n });\r\n this.$l.refl = pb.reflect(\r\n pb.normalize(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this))),\r\n this.normal\r\n );\r\n this.refl.y = pb.max(this.refl.y, 0.1);\r\n this.reflectance = pb.mix(\r\n // Blended against the pre-exposed scene color, so the exposure-independent sky bake has\r\n // to be lifted into the same space.\r\n ShaderHelper.sampleBakedSkyPreExposed(this, this.refl),\r\n pb.textureSampleLevel(ShaderHelper.getSceneColorTexture(this), this.hitInfo.xy, 0).rgb,\r\n this.hitInfo.w\r\n );\r\n this.$l.refractUV = this.displacedTexCoord;\r\n this.$l.displacedPos = ShaderHelper.samplePositionFromDepth(\r\n this,\r\n ShaderHelper.getLinearDepthTexture(this),\r\n this.refractUV,\r\n ShaderHelper.getInvProjectionMatrix(this),\r\n ShaderHelper.getCameraParams(this).xy\r\n );\r\n this.$if(\r\n pb.or(\r\n pb.greaterThanEqual(this.displacedPos.w, 0.99999),\r\n pb.greaterThan(this.displacedPos.z, this.viewPos.z)\r\n ),\r\n function () {\r\n this.refractUV = this.screenUV;\r\n }\r\n ).$else(function () {\r\n this.depth = pb.length(pb.sub(this.displacedPos.xyz, this.viewPos));\r\n });\r\n this.$l.refraction = pb.textureSampleLevel(\r\n ShaderHelper.getSceneColorTexture(this),\r\n this.refractUV,\r\n 0\r\n ).rgb;\r\n this.refraction = pb.mul(this.refraction, this.getAbsorption(this.depth));\r\n this.$l.fresnelTerm = this.fresnel(this.normal, pb.neg(this.eyeVecNorm));\r\n this.$l.finalColor = pb.mix(\r\n pb.mix(this.refraction, this.reflectance, this.fresnelTerm),\r\n pb.vec3(1),\r\n this.foamFactor\r\n );\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightContrib = this.lightSpecular(\r\n this.lightDir,\r\n this.eyeVecNorm,\r\n this.normal,\r\n pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten)\r\n );\r\n if (shadow) {\r\n // Water is a horizontal clipmap, so +Y is the geometric normal. The\r\n // wave normal would jitter the shadow lookup per-pixel.\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, pb.vec3(0, 1, 0), this.NoL));\r\n this.lightContrib = pb.mul(this.lightContrib, this.shadow);\r\n }\r\n this.finalColor = pb.add(this.finalColor, this.lightContrib);\r\n });\r\n if (that.needCalculateEnvLight()) {\r\n this.$l.irradiance = that.getEnvLightIrradiance(this, this.normal);\r\n this.$l.sss = pb.mul(this.getScattering(this.depth), this.irradiance, 1 / Math.PI);\r\n this.finalColor = pb.add(this.finalColor, this.sss);\r\n }\r\n this.$return(this.finalColor);\r\n }\r\n );\r\n return scope.waterShading(worldPos, worldNormal, foamFactor);\r\n }\r\n applyUniforms(bindGroup: BindGroup, ctx: DrawContext, needUpdate: boolean, pass: number) {\r\n super.applyUniforms(bindGroup, ctx, needUpdate, pass);\r\n const waveGenerator = this._waveGenerator.get();\r\n if (waveGenerator && this._waveVersion !== waveGenerator.version) {\r\n waveGenerator.applyWaterBindGroup(bindGroup);\r\n this._waveVersion = waveGenerator.version;\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n bindGroup.setValue('clipmapGridInfo', this._clipmapGridInfo);\r\n bindGroup.setValue('region', this._region);\r\n if (this.needFragmentColor(ctx)) {\r\n bindGroup.setValue('displace', this._displace / ctx.renderWidth);\r\n bindGroup.setValue('depthMulti', this._depthMulti);\r\n bindGroup.setValue('refractionStrength', this._refractionStrength);\r\n bindGroup.setValue('ssrParams', this._ssrParams);\r\n bindGroup.setTexture(\r\n 'scatterRampTex',\r\n this._getScatterRampTexture(ctx.device),\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n bindGroup.setTexture(\r\n 'absorptionRampTex',\r\n this._getAbsorptionRampTexture(ctx.device),\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n }\r\n if (this.waveGenerator) {\r\n this.waveGenerator.applyWaterBindGroup(bindGroup);\r\n }\r\n }\r\n needUpdate() {\r\n return !!this._waveGenerator.get()?.needUpdate();\r\n }\r\n update(frameId: number, elapsed: number) {\r\n const waveGenerator = this._waveGenerator.get();\r\n if (waveGenerator) {\r\n const updateFrameId = WaterMaterial._waveUpdateState.get(waveGenerator);\r\n if (updateFrameId !== frameId) {\r\n waveGenerator.update(elapsed);\r\n WaterMaterial._waveUpdateState.set(waveGenerator, frameId);\r\n }\r\n }\r\n }\r\n private _getRampTexture(device: AbstractDevice, grad: Interpolator) {\r\n const width = 128;\r\n const height = 1;\r\n const texture = device.createTexture2D('rgba8unorm', width, height, {\r\n mipmapping: false\r\n })!;\r\n const numTexels = width * height;\r\n const data = new Uint8Array(numTexels * 4);\r\n const tmpcolor = new Vector3();\r\n for (let i = 0; i < numTexels; i++) {\r\n grad.interpolate((i % width) / width, tmpcolor);\r\n data[i * 4 + 0] = (tmpcolor.x * 255) >> 0;\r\n data[i * 4 + 1] = (tmpcolor.y * 255) >> 0;\r\n data[i * 4 + 2] = (tmpcolor.z * 255) >> 0;\r\n data[i * 4 + 3] = 255;\r\n }\r\n texture.update(data, 0, 0, width, height);\r\n return texture;\r\n }\r\n private _getScatterRampTexture(device: AbstractDevice) {\r\n if (!this._scatterRampTexture.get()) {\r\n if (!WaterMaterial._defaultScatterRampTexture.get()) {\r\n WaterMaterial._defaultScatterRampTexture.set(\r\n this._getRampTexture(device, WaterMaterial._scatterGrad)\r\n );\r\n }\r\n this._scatterRampTexture.set(WaterMaterial._defaultScatterRampTexture.get());\r\n }\r\n return this._scatterRampTexture.get()!;\r\n }\r\n private _getAbsorptionRampTexture(device: AbstractDevice) {\r\n if (!this._absorptionRampTexture.get()) {\r\n if (!WaterMaterial._defaultAbsorptionRampTexture.get()) {\r\n WaterMaterial._defaultAbsorptionRampTexture.set(\r\n this._getRampTexture(device, WaterMaterial._absorptionGrad)\r\n );\r\n }\r\n this._absorptionRampTexture.set(WaterMaterial._defaultAbsorptionRampTexture.get());\r\n }\r\n return this._absorptionRampTexture.get()!;\r\n }\r\n}\r\n"],"names":["WaterMaterial","applyMaterialMixins","MeshMaterial","mixinLight","_absorptionGrad","Interpolator","Float32Array","_scatterGrad","_defaultScatterRampTexture","DWeakRef","_defaultAbsorptionRampTexture","_waveUpdateState","WeakMap","_region","_displace","_depthMulti","_refractionStrength","_scatterRampTexture","_absorptionRampTexture","_waveGenerator","_waveVersion","_clipmapInfo","_clipmapGridInfo","_ssrParams","Vector4","DRef","cullMode","onDispose","dispose","region","val","equalsTo","set","uniformChanged","waveGenerator","get","optionChanged","scatterRampTexture","tex","_getScatterRampTexture","getDevice","absorptionRampTexture","_getAbsorptionRampTexture","depthMulti","displace","refractionStrength","needSceneColor","needSceneDepth","_createHash","getHash","setClipmapInfo","rotation","scale","offsetX","offsetY","setXYZW","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","x","y","z","supportInstancing","supportLighting","vertexShader","scope","pb","$builder","setupUniforms","$inputs","position","vec3","attrib","clipmapInfo","vec4","clipmapGridInfo","uniform","$l","s","sin","c","cos","scale2","mul","clipmapMatrix","mat4","neg","sub","w","clipmapPos","xy","clipmapWorldPos","ShaderHelper","getWorldMatrix","xyz","worldNormal","worldPos","calcVertexPositionAndNormal","$outputs","setClipSpacePosition","getViewProjectionMatrix","resolveMotionVector","fragmentShader","needFragmentColor","float","ssrParams","scatterRampTex","tex2D","absorptionRampTex","discardable","or","any","lessThan","xz","greaterThan","zw","$if","discard","normal","calcFragmentNormalAndFoam","outColor","waterShading","drawContext","materialFlags","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","outputFragmentColor","foamFactor","that","func","textureSampleLevel","vec2","depth","rgb","$return","clamp","pow","dot","eyeVec","roughness","f0","f90","L","lightDir","V","eyeVecNorm","halfVec","normalize","add","NoH","NoL","specular","VoH","NoV","F","fresnelSchlick","alphaRoughness","D","distributionGGX","VIS","visGGX","lightColor","screenUV","div","$builtins","fragCoord","getRenderSize","dist","length","getCameraPosition","normalScale","displacedTexCoord","wPos","samplePositionFromDepth","getLinearDepthTexture","getInvViewProjectionMatrix","getCameraParams","viewPos","getViewMatrix","incidentVec","reflectVecW","reflect","reflectance","hitInfo","reflectVec","getHiZDepthTexture","screenSpaceRayTracing_HiZ","getProjectionMatrix","getInvProjectionMatrix","int","getHiZDepthTextureMipLevelCount","getHiZDepthTextureSize","screenSpaceRayTracing_Linear2D","getLinearDepthTextureSize","refl","max","mix","sampleBakedSkyPreExposed","getSceneColorTexture","refractUV","displacedPos","greaterThanEqual","$else","refraction","getAbsorption","fresnelTerm","fresnel","finalColor","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","lightAtten","calculateLightAttenuation","calculateLightDirection","lightContrib","lightSpecular","a","calculateShadow","needCalculateEnvLight","irradiance","getEnvLightIrradiance","sss","getScattering","Math","PI","applyUniforms","bindGroup","ctx","needUpdate","pass","version","applyWaterBindGroup","applyUniformValues","setValue","renderWidth","setTexture","device","fetchSampler","update","frameId","elapsed","updateFrameId","_getRampTexture","grad","width","height","texture","createTexture2D","mipmapping","numTexels","data","Uint8Array","tmpcolor","Vector3","i","interpolate"],"mappings":"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"}
1
+ {"version":3,"file":"water.js","sources":["../../src/material/water.ts"],"sourcesContent":["import type {\n BindGroup,\n PBFunctionScope,\n PBInsideFunctionScope,\n PBShaderExp,\n Texture2D,\n Texture2DArray\n} from '@zephyr3d/device';\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\nimport type { DrawContext, WaveGenerator } from '../render';\nimport type { WaterInteraction } from '../render/water_interaction';\nimport { InteractiveWaveGenerator } from '../render/water_interaction';\nimport { ShoreWaveGenerator } from '../render/shore_wave_generator';\nimport type { ShoreWaveSettings } from '../render/shore_wave_generator';\nimport { FoamFieldWaveGenerator, WaterFoamField, WaveFoamSource } from '../render/water_foam';\nimport type { FoamFieldSource } from '../render/water_foam';\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_RECT, MaterialVaryingFlags } from '../values';\nimport { ShaderHelper } from './shader/helper';\nimport type { Nullable } from '@zephyr3d/base';\nimport { DRef, Vector3, Vector4 } from '@zephyr3d/base';\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D } from '../shaders/ssr';\nimport { fetchSampler } from '../utility/misc';\nimport { PHYSICAL_BAKE_EXPOSURE } from '../utility/physical';\nimport { mixinLight } from './mixins/lit';\nimport { distributionGGX, fresnelSchlick, visGGX } from '../shaders/pbr';\nimport { waterScatterPhase } from '../shaders/water_medium';\nimport { evaluateLTCRectLightTerms } from '../shaders/ltc_rect';\nimport { getLTCAmpLUT, getLTCMatLUT } from '../utility/textures/ltclut';\nimport { foamTexelSize, getDefaultFoamTexture, sampleFoamTexture } from '../utility/textures/foam';\nimport { RenderGraphExecutor } from '../render/rendergraph/executor';\n\n/**\n * How the refracted view sample is located.\n *\n * - `march`: walk the refracted ray against the scene depth buffer and sample at\n * the first crossing, at the cost of {@link REFRACT_MARCH_STEPS} depth fetches\n * per water pixel.\n * - `offset`: displace the screen UV by the refraction of the wave normal alone,\n * with no search. Much cheaper, but the sample does not land where the ray\n * actually goes and the medium tint uses the straight-line distance.\n *\n * The two agree on calm water viewed from above and diverge with wave steepness\n * and view angle.\n *\n * @public\n */\nexport type WaterRefractionMode = 'march' | 'offset';\n\n/**\n * Debug view of the water shading, replacing the final colour with one of its\n * intermediate terms.\n *\n * - `none`: normal shading.\n * - `normal`: wave normal, remapped to [0,1].\n * - `foam`: foam coverage after the amount/falloff ramp, as grey.\n * - `waterDepth`: height of the surface above the scene point behind it, in\n * metres / 10, as grey.\n * - `fresnel`: reflection weight after foam suppression, as grey.\n * - `reflection`: what the surface reflects (SSR blended over the sky).\n * - `refraction`: the scene sample behind the water, before the medium tint.\n * - `absorption`: medium transmittance over the refracted path.\n * - `scattering`: ambient in-scattering from the water body.\n * - `sunScattering`: directional in-scattering from the lights.\n * - `subsurface`: the backlit-crest translucency term.\n * - `subsurfaceThickness`: the crest gate that term is scaled by, bright on\n * crests and absorbed in troughs. Independent of the lights.\n * - `shadow`: the lights' shadow factor on the surface, as grey; white with\n * no shadowed light.\n * - `specular`: the lights' mirror highlights, shadowed, with nothing else.\n * - `depth`: refracted path length through the medium, metres / 10.\n * - `interaction`: the {@link WaterInteraction} field on its own, mid grey at\n * rest and reaching black and white at its amplitude clamp; dimmed outside\n * the field's window.\n * - `foamField`: the foam field on its own, its density as grey, black with no\n * foam; mid grey off the field, where foam does not linger.\n * - `shoreRegions`: raw carrier geometry, without wet-edge clipping or ground\n * projection. Blue is the base water, cyan the offshore shore-wave region,\n * orange the wet inland swash and magenta its dry support. Smooth colour\n * transitions show the shore-wave envelope, not separate meshes.\n * - `shoreLevels`: which level of the shore field answers, red, green, blue\n * and yellow from the finest, blended where levels hand over and darkening\n * towards the edge of the coarsest; bands every 2 metres of the distance to\n * the waterline, which should run on unbroken across the handovers. Dark grey\n * off the field.\n * - `swashHandover`: red is carrier wet coverage, green is reconstructed\n * ground wet coverage and blue is the ground-foam replacement weight.\n * Magenta identifies wet carrier pixels being replaced by dry ground.\n * - `swashFoamSources`: red is carrier foam density, green is wet ground\n * field density and blue is the surf's foam on the wet ground, before\n * texture cutting.\n * - `swashFoamCuts`: red is surface foam opacity, green is ground foam\n * opacity and blue is the ground replacement weight, after texture cutting.\n * - `swashVisibility`: reveals discarded beach fragments in red and fragments\n * whose selected depth lies behind the opaque surface in green. Blue is the\n * projected ground foam density. Bypasses wet clipping and uses ground depth on\n * valid beach pixels so otherwise invisible fragments can be inspected.\n *\n * - `swashGroundSupport`: red is the beach-bed mask, green the foam-field\n * coverage and blue the wet ground coverage. Like `swashVisibility`, reveals\n * clipped fragments at the ground depth to inspect the handover's support.\n *\n * Each value is a separate shader variant; the `none` variant carries no trace\n * of the others.\n *\n * @public\n */\nexport type WaterDebugOutput =\n | 'none'\n | 'normal'\n | 'foam'\n | 'waterDepth'\n | 'fresnel'\n | 'reflection'\n | 'refraction'\n | 'absorption'\n | 'scattering'\n | 'sunScattering'\n | 'subsurface'\n | 'subsurfaceThickness'\n | 'shadow'\n | 'specular'\n | 'depth'\n | 'interaction'\n | 'foamField'\n | 'shoreRegions'\n | 'shoreLevels'\n | 'swashHandover'\n | 'swashFoamSources'\n | 'swashFoamCuts'\n | 'swashVisibility'\n | 'swashGroundSupport';\n\n/** Label/value pairs for {@link WaterDebugOutput}, for editor enumerations. */\nexport const WATER_DEBUG_OUTPUTS = [\n { label: 'None', value: 'none' },\n { label: 'Normal', value: 'normal' },\n { label: 'Foam', value: 'foam' },\n { label: 'Water depth', value: 'waterDepth' },\n { label: 'Fresnel', value: 'fresnel' },\n { label: 'Reflection', value: 'reflection' },\n { label: 'Refraction', value: 'refraction' },\n { label: 'Absorption', value: 'absorption' },\n { label: 'Scattering', value: 'scattering' },\n { label: 'Sun scattering', value: 'sunScattering' },\n { label: 'Shadow', value: 'shadow' },\n { label: 'Subsurface', value: 'subsurface' },\n { label: 'Subsurface thickness', value: 'subsurfaceThickness' },\n { label: 'Specular', value: 'specular' },\n { label: 'Depth', value: 'depth' },\n { label: 'Interaction', value: 'interaction' },\n { label: 'Foam field', value: 'foamField' },\n { label: 'Shore regions (geometry)', value: 'shoreRegions' },\n { label: 'Shore field levels', value: 'shoreLevels' },\n { label: 'Swash handover (RGB)', value: 'swashHandover' },\n { label: 'Swash foam sources (RGB)', value: 'swashFoamSources' },\n { label: 'Swash foam cuts (RGB)', value: 'swashFoamCuts' },\n { label: 'Swash visibility (RGB)', value: 'swashVisibility' },\n { label: 'Swash ground support (RGB)', value: 'swashGroundSupport' }\n] as const;\n\n/** Fresnel reflectance of water at normal incidence, n = 1.333. */\nconst WATER_F0 = 0.02;\n/** Specular roughness with the waves resolved. */\nconst WATER_BASE_ROUGHNESS = 0.04;\n/** Specular roughness once distance has flattened the wave normals. */\nconst WATER_DISTANT_ROUGHNESS = 0.35;\n/**\n * Slope variance of a wind-driven sea for the mean Fresnel of the slopes\n * distance flattens out of the normals, from the clean-surface fit of Cox &\n * Munk, \"Measurement of the roughness of the sea surface from photographs of\n * the sun's glitter\" (JOSA 44(11), 1954): upwind sigma_u^2 = 3.16e-3 U and\n * crosswind sigma_c^2 = 0.003 + 1.92e-3 U, U the wind speed in m/s.\n */\nconst COX_MUNK_UPWIND = 3.16e-3;\nconst COX_MUNK_CROSSWIND_BASE = 0.003;\nconst COX_MUNK_CROSSWIND = 1.92e-3;\n/**\n * Roughness over which the sky reflection hands over from the sharp baked sky\n * to the environment's GGX-prefiltered radiance map, as Crest picks its\n * reflection mip by roughness.\n */\nconst SKY_PREFILTER_START = 0.06;\nconst SKY_PREFILTER_FULL = 0.15;\n/** Wrap of the foam's diffuse lighting, `(N.L + w) / (1 + w)`. At 0 a lee slope is unlit. */\nconst FOAM_LIGHT_WRAP = 0.5;\n/**\n * Share of the edge fade width over which the foam on a thin sheet fades: the\n * foam outlasts the water it floats on, down to the last centimetre or so.\n */\nconst FOAM_EDGE_FADE_SHARE = 0.2;\n/** Index of refraction of water. Must match the caustics pass. */\nconst WATER_IOR = 1.333;\nconst AIR_TO_WATER_ETA = 1 / WATER_IOR;\nconst WATER_TO_AIR_ETA = WATER_IOR;\n/** Cap on the refracted path, as a multiple of the straight-line distance. */\nconst REFRACT_MAX_PATH_RATIO = 4;\n/** Steps of the refracted-ray march over {@link REFRACT_MAX_PATH_RATIO}. */\nconst REFRACT_MARCH_STEPS = 24;\n/** Depth tolerance, in meters, for a march step to count as a hit. */\nconst REFRACT_MARCH_THICKNESS = 0.05;\n/**\n * Fraction of the far plane an infinite surface is pulled in to. Must stay\n * below 1: the cleared depth value is tested for by equality.\n */\nconst INFINITE_DEPTH_PULLIN = 0.99;\n/** Minimum reflection y for the sky bake lookup; its lower hemisphere is black. */\nconst HORIZON_REFLECT_BIAS = 0.08;\n/** UV width of the band the refraction offset fades over at the screen border. */\nconst REFRACT_EDGE_FADE = 0.06;\n/** Normalized depth at or above which the scene behind the water is sky. */\nconst SCENE_SKY_DEPTH01 = 0.999;\n/** Medium path, in meters, through water with only sky behind it: deep enough to absorb everything. */\nconst SKY_MEDIUM_PATH = 1e4;\n/** Floor on the subsurface term's sun-alignment factor. */\nconst SSS_SUN_ALIGN_FLOOR = 0.15;\n/** Floor on the subsurface term's grazing-view factor. */\nconst SSS_GRAZING_FLOOR = 0.1;\n/** Softplus width of the crest gate, as a fraction of the crest height. */\nconst SSS_HEIGHT_SOFTNESS = 0.6;\n/** Least crest height the gate is worked out over, in metres. See {@link WaterMaterial.subsurfaceCrestHeight}. */\nconst SSS_CREST_HEIGHT_MIN = 0.05;\n/** Floor on the crest gate's path length. */\nconst SSS_CREST_PATH_FLOOR = 0.2;\n/** Extinction multiplier of the crest gate over a unit path. */\nconst SSS_ABSORPTION_SCALE = 3;\n/**\n * Mean cosine of one scattering event. Real sea water is near 0.9, at which\n * almost nothing returns to a camera looking down.\n */\nexport const DEFAULT_SCATTER_ANISOTROPY = 0.7;\n/** Floor on the refracted sun ray's descent; only reached by a sun below the horizon. */\nconst MIN_SUN_SLOPE = 0.05;\n/** Refraction blur per meter of path from geometry alone, in mip widths. */\nconst REFRACT_BLUR_GEOMETRIC = 0.02;\n/** Maps the scattering coefficient (1/m) onto refraction blur mip widths per meter. */\nconst REFRACT_BLUR_DENSITY = 1.5;\n/** Cap on the refraction blur LOD. */\nexport const REFRACT_BLUR_MAX_LOD = 6;\n/**\n * The foam's look follows Crest's OceanFoam.hlsl (Wave Harmonic, MIT): a\n * white foam layer cut from the foam texture by the foam density with a\n * feathered black point, lit through a normal taken from the slope of that\n * cut over a step of a quarter texel per metre of view depth, with a narrow\n * glint; and beneath it bubbles, the same texture blurred three mips and\n * shifted by parallax as if under the surface, tinted and lit by the sky.\n * The texture drifts at FOAM_DRIFT metres per second along x and z, Crest's\n * time / 10.\n */\nconst FOAM_DRIFT = 0.1;\nconst FOAM_BUBBLE_MIP_SCALE = 8;\nconst FOAM_SPECULAR_POWER = 293;\nconst FOAM_SPECULAR_BOOST = 0.15;\n\nexport class WaterMaterial extends applyMaterialMixins(MeshMaterial, mixinLight) {\n private static readonly FEATURE_REFRACTION_MODE = this.defineFeature();\n private static readonly FEATURE_INFINITE = this.defineFeature();\n private static readonly FEATURE_DEBUG_OUTPUT = this.defineFeature();\n private static readonly _waveUpdateState: WeakMap<WaveGenerator, number> = new WeakMap();\n private static readonly _interactionUpdateState: WeakMap<WaterInteraction, number> = new WeakMap();\n private readonly _region: Vector4;\n private _refractionScale: number;\n private _reflectionStrength: number;\n private readonly _waveGenerator: DRef<WaveGenerator>;\n private readonly _interaction: DRef<WaterInteraction>;\n /**\n * The generator the shaders and every other consumer of the surface use: the\n * base generator wrapped with the interaction field while one is attached,\n * the base generator itself otherwise.\n */\n private _effectiveWaveGenerator: Nullable<WaveGenerator>;\n /** Settings of the shore waves, shared by reference with their generator. */\n private readonly _shoreWaves: ShoreWaveSettings = {\n height: 0,\n wavelength: 8,\n period: 6,\n zone: 20,\n sharpness: 0.7,\n lean: 0.5,\n irregularity: 0.6,\n waveFoamStrength: 1,\n waveFoamCoverage: 0.55,\n shorelineFoamMaxDepth: 0.65,\n shorelineFoamStrength: 2,\n wallFoamStrength: 1,\n wallFoamMinSpeed: 0.2,\n wallFoamMaxSpeed: 1.5,\n wallFoamDrift: 0.3,\n surfFoamDuration: 1.5,\n foamSettleDepth: 0.02,\n foamDriftDepth: 0.3,\n settledFoamFade: 0.25\n };\n /** The shore wave layer of the effective generator, while the waves are on. */\n private _shoreWaveGenerator: Nullable<ShoreWaveGenerator> = null;\n /** Foam with memory, carried by the water; kept across rebuilds of the generators. */\n private readonly _foamField = new WaterFoamField();\n /** The foam field layered over the base generator, innermost in the effective generator. */\n private _foamFieldGenerator: Nullable<FoamFieldWaveGenerator> = null;\n /**\n * The interaction layer of the effective generator while a field is attached,\n * wherever it sits in the chain (the shore waves wrap it when they are on).\n */\n private _interactiveWaveGenerator: Nullable<InteractiveWaveGenerator> = null;\n /** What feeds the foam field: the shore waves while they are on, else the open water. */\n private _foamSource: Nullable<FoamFieldSource> = null;\n /** Frame the foam field was last stepped in. */\n private _foamFrameId = -1;\n /** Frame of the last update. */\n private _frameId = 0;\n private _edgeFadeWidth = 0.05;\n /**\n * Thickness in metres over which a thin sheet of water fades in from the\n * ground under it, so swash running up the sand shows the sand through it.\n * 0 disables it.\n */\n get edgeFadeWidth() {\n return this._edgeFadeWidth;\n }\n set edgeFadeWidth(val: number) {\n val = Math.max(0, val);\n if (val !== this._edgeFadeWidth) {\n this._edgeFadeWidth = val;\n this.uniformChanged();\n }\n }\n /** Seconds of water clock at the last update, for the shore waves. */\n private _waveClock = 0;\n /** Wave uniform version last written, per bind group. */\n private _waveVersionByBindGroup: WeakMap<BindGroup, number>;\n private readonly _clipmapInfo: Vector4;\n private readonly _clipmapGridInfo: Vector4;\n private _skirtDistance: number;\n private readonly _ssrParams: Vector4;\n /** (wind direction x, z, Cox-Munk upwind slope variance, crosswind slope variance) */\n private readonly _unresolvedSlope: Vector4;\n /** sigma_a, 1/m, per RGB channel. */\n private readonly _absorption: Vector3;\n /** sigma_s, 1/m, per RGB channel. */\n private readonly _scattering: Vector3;\n /** sigma_t = sigma_a + sigma_s. */\n private readonly _extinction: Vector3;\n /** sigma_s / sigma_t. */\n private readonly _scatterAlbedo: Vector3;\n private _absorptionScale: number;\n private _scatteringScale: number;\n private _causticsEnabled: boolean;\n private _causticsIntensity: number;\n private _causticsDepth: number;\n private _causticsRange: number;\n private _causticsFadeDistance: number;\n private _causticsWarp: number;\n private _causticsMinDepth: number;\n private _causticsSceneDepth: boolean;\n private _causticsDefocus: number;\n private _causticsResolution: number;\n private _causticsPhotonResolution: number;\n private _causticsBlurPasses: number;\n private _causticsTemporalStrength: number;\n private _underwaterEnabled: boolean;\n private _underwaterAmbientIntensity: number;\n private _underwaterGodRays: boolean;\n private _underwaterGodRayIntensity: number;\n private _underwaterGodRaySteps: number;\n private _underwaterGodRayShadow: boolean;\n private _underwaterHysteresis: number;\n private _subsurfaceIntensity: number;\n private _subsurfaceCrestHeight: number;\n private readonly _subsurfaceTint: Vector3;\n private readonly _subsurfaceParams: Vector4;\n private _sunScatteringIntensity: number;\n private _scatterAnisotropy: number;\n private readonly _sunScatterParams: Vector4;\n private _refractionBlur: number;\n private _cheapRefractionDepth: number;\n private _foamAmount: number;\n private _foamFalloff: number;\n private readonly _foamColor: Vector3;\n private readonly _foamParams: Vector4;\n private _foamFeather: number;\n private _foamNormalStrength: number;\n private readonly _foamBubbleColor: Vector3;\n private _foamBubbleCoverage: number;\n private _foamBubbleDepth: number;\n private readonly _foamLookParams: Vector4;\n private readonly _foamTexture: DRef<Texture2D>;\n private _foamTextureSize = 4;\n constructor() {\n super();\n this._region = new Vector4(-99999, -99999, 99999, 99999);\n this._absorption = new Vector3(1.0, 0.25, 0.15);\n this._scattering = new Vector3(0.05, 0.12, 0.18);\n this._extinction = new Vector3();\n this._scatterAlbedo = new Vector3();\n this._absorptionScale = 1;\n this._scatteringScale = 1;\n this._updateMediumCoefficients();\n this._clipmapInfo = new Vector4();\n this._clipmapGridInfo = new Vector4();\n this._skirtDistance = 0;\n this._waveGenerator = new DRef();\n this._interaction = new DRef();\n this._effectiveWaveGenerator = null;\n this._waveVersionByBindGroup = new WeakMap();\n this._ssrParams = new Vector4(1000, 160, 0.5, 2);\n this._unresolvedSlope = new Vector4();\n this._refractionScale = 1;\n this._reflectionStrength = 1;\n this._causticsEnabled = true;\n this._causticsIntensity = 1;\n this._causticsDepth = 4;\n this._causticsRange = 60;\n this._causticsFadeDistance = 0;\n this._causticsWarp = 1.5;\n this._causticsMinDepth = 0.15;\n this._causticsSceneDepth = true;\n this._causticsDefocus = 0.12;\n this._causticsResolution = 1024;\n this._causticsPhotonResolution = 0;\n this._causticsBlurPasses = 2;\n this._causticsTemporalStrength = 0.85;\n this._underwaterEnabled = true;\n this._underwaterAmbientIntensity = 1;\n this._underwaterGodRays = true;\n this._underwaterGodRayIntensity = 1;\n this._underwaterGodRaySteps = 24;\n this._underwaterGodRayShadow = false;\n this._underwaterHysteresis = 0.05;\n this._subsurfaceIntensity = 0.5;\n this._subsurfaceCrestHeight = 1.5;\n this._subsurfaceTint = new Vector3(0.86, 0.98, 0.71);\n this._subsurfaceParams = new Vector4();\n this._sunScatteringIntensity = 1;\n this._scatterAnisotropy = DEFAULT_SCATTER_ANISOTROPY;\n this._sunScatterParams = new Vector4();\n this._refractionBlur = 1;\n this._cheapRefractionDepth = 1;\n this._foamAmount = 1;\n this._foamFalloff = 1.5;\n this._foamColor = new Vector3(0.92, 0.95, 0.97);\n this._foamParams = new Vector4();\n // Crest's defaults\n this._foamFeather = 0.4;\n this._foamNormalStrength = 3.5;\n this._foamBubbleColor = new Vector3(0.64, 0.83, 0.82);\n this._foamBubbleCoverage = 1.68;\n this._foamBubbleDepth = 0.14;\n this._foamLookParams = new Vector4();\n this._foamTexture = new DRef();\n this.cullMode = 'none';\n this.useFeature(WaterMaterial.FEATURE_REFRACTION_MODE, 'march' as WaterRefractionMode);\n this.useFeature(WaterMaterial.FEATURE_INFINITE, false);\n this.useFeature(WaterMaterial.FEATURE_DEBUG_OUTPUT, 'none' as WaterDebugOutput);\n }\n /** {@inheritDoc Material.onDispose} */\n protected onDispose() {\n super.onDispose();\n this._waveGenerator.dispose();\n this._interaction.dispose();\n this._shoreWaveGenerator?.dispose();\n this._shoreWaveGenerator = null;\n this._foamFieldGenerator?.dispose();\n this._foamFieldGenerator = null;\n this._foamSource = null;\n this._interactiveWaveGenerator = null;\n this._foamField.dispose();\n this._effectiveWaveGenerator = null;\n this._foamTexture.dispose();\n }\n /** @internal */\n get region() {\n return this._region;\n }\n /** @internal */\n set region(val: Vector4) {\n if (!val.equalsTo(this._region)) {\n this._region.set(val);\n this.uniformChanged();\n }\n }\n /**\n * The wave generator the surface is evaluated with.\n *\n * While an {@link interaction} is attached this is a wrapper that layers the\n * interaction field over {@link baseWaveGenerator}; every consumer of the\n * surface (the shaders, the surface-point query, the caustics) goes through\n * it and sees one displaced surface. Setting it sets the base generator.\n */\n get waveGenerator() {\n return this._effectiveWaveGenerator;\n }\n set waveGenerator(waveGenerator: Nullable<WaveGenerator>) {\n if (this._waveGenerator.get() !== waveGenerator) {\n this._waveGenerator.set(waveGenerator);\n this._rebuildEffectiveWaveGenerator();\n }\n }\n /** The generator supplying the ambient surface, without any interaction field. */\n get baseWaveGenerator() {\n return this._waveGenerator.get();\n }\n /**\n * Dynamic height field layered over the surface, or null for none. See\n * {@link WaterInteraction}.\n *\n * Ignored, with the base generator used on its own, on a device that cannot\n * host the field.\n */\n get interaction() {\n return this._interaction.get();\n }\n set interaction(val: Nullable<WaterInteraction>) {\n if (this._interaction.get() !== val) {\n this._interaction.set(val);\n this._rebuildEffectiveWaveGenerator();\n }\n }\n /** @internal */\n private _rebuildEffectiveWaveGenerator() {\n const base = this._waveGenerator.get();\n const interaction = this._interaction.get();\n this._shoreWaveGenerator?.dispose();\n this._shoreWaveGenerator = null;\n this._foamFieldGenerator?.dispose();\n this._foamFieldGenerator = null;\n this._foamSource = null;\n // A field left behind must not hold on to the generators disposed here\n this._interactiveWaveGenerator?.interaction.setAmbientSurface(null);\n this._interactiveWaveGenerator = null;\n let effective: Nullable<WaveGenerator> = null;\n if (base) {\n // Innermost the foam field, whose foam the shore waves and the\n // interaction field compose theirs over\n const that = this;\n this._foamFieldGenerator = new FoamFieldWaveGenerator(base, this._foamField, {\n getFoamTexture: () => that.foamTexture,\n getFoamTextureSize: () => that._foamTextureSize\n });\n effective = this._foamFieldGenerator;\n this._foamSource = new WaveFoamSource(base, this._foamField);\n }\n if (effective && this._shoreWaves.height > 0) {\n this._shoreWaveGenerator = new ShoreWaveGenerator(effective, this._shoreWaves, this._foamSource!);\n this._foamFieldGenerator!.flowSource = this._shoreWaveGenerator;\n this._foamSource = this._shoreWaveGenerator;\n effective = this._shoreWaveGenerator;\n }\n // Outermost the interaction field: its ripples ride the shore waves rather\n // than being faded with the open water's chop near the shore, and a query\n // of the surface without the disturbers finds it on top to rebuild\n if (effective && interaction && interaction.isOk()) {\n // The field reads the surface beneath it under each disturber, so a hull\n // riding the waves is measured against the water it floats on\n interaction.setAmbientSurface(effective);\n effective = new InteractiveWaveGenerator(effective, interaction);\n this._interactiveWaveGenerator = effective as InteractiveWaveGenerator;\n interaction.ensureResources();\n }\n this._effectiveWaveGenerator = effective;\n // Bind groups are pooled; a stale version must not suppress the upload.\n this._waveVersionByBindGroup = new WeakMap();\n this.optionChanged(true);\n }\n /** How the refracted view sample is located. Defaults to `march`. Compile-time feature. */\n get refractionMode(): WaterRefractionMode {\n return this.featureUsed<WaterRefractionMode>(WaterMaterial.FEATURE_REFRACTION_MODE) ?? 'march';\n }\n set refractionMode(val: WaterRefractionMode) {\n if (val !== this.refractionMode) {\n this.useFeature(WaterMaterial.FEATURE_REFRACTION_MODE, val);\n }\n }\n /**\n * Which intermediate shading term to display instead of the final colour.\n * Defaults to `none`. See {@link WaterDebugOutput}.\n */\n get debugOutput(): WaterDebugOutput {\n return this.featureUsed<WaterDebugOutput>(WaterMaterial.FEATURE_DEBUG_OUTPUT) ?? 'none';\n }\n set debugOutput(val: WaterDebugOutput) {\n if (val !== this.debugOutput) {\n this.useFeature(WaterMaterial.FEATURE_DEBUG_OUTPUT, val);\n }\n }\n /**\n * Whether the surface reaches the horizon rather than ending at {@link region}.\n * Off by default. The clipmap's outermost ring becomes a horizon skirt.\n */\n get infinite(): boolean {\n return this.featureUsed<boolean>(WaterMaterial.FEATURE_INFINITE) ?? false;\n }\n set infinite(val: boolean) {\n if (!!val !== this.infinite) {\n this.useFeature(WaterMaterial.FEATURE_INFINITE, !!val);\n }\n }\n /** Absorption coefficient sigma_a in 1/m, per RGB channel. */\n get absorption() {\n return this._absorption;\n }\n set absorption(val: Vector3) {\n if (!val.equalsTo(this._absorption)) {\n this._absorption.set(val);\n this._updateMediumCoefficients();\n this.uniformChanged();\n }\n }\n /** Scale for the absorption coefficient. */\n get absorptionScale() {\n return this._absorptionScale;\n }\n set absorptionScale(val: number) {\n if (val !== this._absorptionScale) {\n this._absorptionScale = val;\n this._updateMediumCoefficients();\n this.uniformChanged();\n }\n }\n /** Scattering coefficient sigma_s in 1/m, per RGB channel. */\n get scattering() {\n return this._scattering;\n }\n set scattering(val: Vector3) {\n if (!val.equalsTo(this._scattering)) {\n this._scattering.set(val);\n this._updateMediumCoefficients();\n this.uniformChanged();\n }\n }\n /** Scale for the scattering coefficient. */\n get scatteringScale() {\n return this._scatteringScale;\n }\n set scatteringScale(val: number) {\n if (val !== this._scatteringScale) {\n this._scatteringScale = val;\n this._updateMediumCoefficients();\n this.uniformChanged();\n }\n }\n /** sigma_t = sigma_a + sigma_s in 1/m. Shared with the caustics pass. Do not mutate. */\n get extinction() {\n return this._extinction;\n }\n /** Single-scattering albedo sigma_s / sigma_t. Do not mutate. */\n get scatterAlbedo() {\n return this._scatterAlbedo;\n }\n /**\n * Whether a camera inside this body of water sees the medium applied to the\n * whole scene. Uses the same coefficients as the surface shading.\n */\n get underwaterEnabled() {\n return this._underwaterEnabled;\n }\n set underwaterEnabled(val: boolean) {\n this._underwaterEnabled = !!val;\n }\n /** Scale on the downwelling sky radiance lighting the column from inside, 1 for physical. */\n get underwaterAmbientIntensity() {\n return this._underwaterAmbientIntensity;\n }\n set underwaterAmbientIntensity(val: number) {\n this._underwaterAmbientIntensity = Math.max(0, val);\n }\n /**\n * Whether sunlight shafts are marched through the water column. Reads the\n * caustic map, so it is off wherever that is unavailable.\n */\n get underwaterGodRays() {\n return this._underwaterGodRays;\n }\n set underwaterGodRays(val: boolean) {\n this._underwaterGodRays = !!val;\n }\n /** Strength of the light shafts, 1 for the value the medium implies. */\n get underwaterGodRayIntensity() {\n return this._underwaterGodRayIntensity;\n }\n set underwaterGodRayIntensity(val: number) {\n this._underwaterGodRayIntensity = Math.max(0, val);\n }\n /** Samples per view ray for the light shafts. Dithered; below about 8 reads as noise. */\n get underwaterGodRaySteps() {\n return this._underwaterGodRaySteps;\n }\n set underwaterGodRaySteps(val: number) {\n this._underwaterGodRaySteps = Math.max(1, Math.floor(val));\n }\n /**\n * Whether geometry in the water breaks the light shafts. Off by default; one\n * shadow map lookup per march step, roughly doubling the shafts' cost.\n */\n get underwaterGodRayShadow() {\n return this._underwaterGodRayShadow;\n }\n set underwaterGodRayShadow(val: boolean) {\n this._underwaterGodRayShadow = !!val;\n }\n /**\n * Half-width in meters of the dead band the submerged test uses around the\n * rest plane, so a camera at water level does not flip state every frame.\n */\n get underwaterHysteresis() {\n return this._underwaterHysteresis;\n }\n set underwaterHysteresis(val: number) {\n this._underwaterHysteresis = Math.max(0, val);\n }\n /**\n * Whether this water projects caustics onto the geometry below it. Requires a\n * shadow-casting directional light.\n */\n get causticsEnabled() {\n return this._causticsEnabled;\n }\n set causticsEnabled(val: boolean) {\n this._causticsEnabled = !!val;\n }\n /** Strength of the caustic contrast. 0 leaves the light unmodulated. */\n get causticsIntensity() {\n return this._causticsIntensity;\n }\n set causticsIntensity(val: number) {\n this._causticsIntensity = val;\n }\n /** Depth in meters below the surface where the caustics are in focus. */\n get causticsDepth() {\n return this._causticsDepth;\n }\n set causticsDepth(val: number) {\n this._causticsDepth = Math.max(0.01, val);\n }\n /** Furthest distance in meters from the camera the caustic map reaches. */\n get causticsRange() {\n return this._causticsRange;\n }\n set causticsRange(val: number) {\n this._causticsRange = Math.max(1, val);\n }\n /**\n * Width in meters of the fade band at the edge of the caustic map, or 0 to\n * derive it from {@link causticsRange}. Capped at 90% of the range.\n */\n get causticsFadeDistance() {\n return this._causticsFadeDistance;\n }\n set causticsFadeDistance(val: number) {\n this._causticsFadeDistance = Math.max(0, val);\n }\n /**\n * Whether photons land on the scene (via the sun's shadow cascade) instead of\n * on a plane at {@link causticsDepth}. On by default.\n */\n get causticsSceneDepth() {\n return this._causticsSceneDepth;\n }\n set causticsSceneDepth(val: boolean) {\n this._causticsSceneDepth = !!val;\n }\n /**\n * How strongly caustic map texels are concentrated near the camera, 0 for\n * uniform. Density is `1 + warp` times uniform at the centre and\n * `1 / (1 + warp)` at the border. Ignored while the map fits the water.\n */\n get causticsWarp() {\n return this._causticsWarp;\n }\n set causticsWarp(val: number) {\n this._causticsWarp = Math.max(0, Math.min(8, val));\n }\n /**\n * Water depth in metres below which no caustics show, faded in over half\n * of it either side; 0 shows them right up to the water's edge.\n */\n get causticsMinDepth() {\n return this._causticsMinDepth;\n }\n set causticsMinDepth(val: number) {\n this._causticsMinDepth = Math.max(0, val);\n }\n /** Caustic contrast falloff per meter away from {@link causticsDepth}. */\n get causticsDefocus() {\n return this._causticsDefocus;\n }\n set causticsDefocus(val: number) {\n this._causticsDefocus = Math.max(0, val);\n }\n /** Edge length of the square caustic map. */\n get causticsResolution() {\n return this._causticsResolution;\n }\n set causticsResolution(val: number) {\n this._causticsResolution = Math.max(16, Math.min(2048, val | 0));\n }\n /** Edge length of the photon grid, or 0 to size it from the map. Cost is quadratic. */\n get causticsPhotonResolution() {\n return this._causticsPhotonResolution;\n }\n set causticsPhotonResolution(val: number) {\n const n = val | 0;\n this._causticsPhotonResolution = n <= 0 ? 0 : Math.max(16, Math.min(4096, n));\n }\n /** Number of 2x2 blur iterations on the caustic map. Rounded up to even. */\n get causticsBlurPasses() {\n return this._causticsBlurPasses;\n }\n set causticsBlurPasses(val: number) {\n const clamped = Math.max(0, Math.min(4, val | 0));\n this._causticsBlurPasses = clamped + (clamped & 1);\n }\n /** Weight of the previous frame's caustic map in the current one, 0 to disable. */\n get causticsTemporalStrength() {\n return this._causticsTemporalStrength;\n }\n set causticsTemporalStrength(val: number) {\n this._causticsTemporalStrength = Math.max(0, Math.min(0.95, val));\n }\n /**\n * Strength of the glow of a backlit wave crest, 0 to disable. Authored, not\n * scaled by the light's intensity; {@link subsurfaceTint} supplies the hue.\n */\n get subsurfaceIntensity() {\n return this._subsurfaceIntensity;\n }\n set subsurfaceIntensity(val: number) {\n if (val !== this._subsurfaceIntensity) {\n this._subsurfaceIntensity = Math.max(0, val);\n this.uniformChanged();\n }\n }\n /**\n * Height above the still-water level, in meters, over which the lit wall of\n * a crest thins by a factor of `e`. Lower for a calm sea, higher so only the\n * tallest crests glow.\n */\n get subsurfaceCrestHeight() {\n return this._subsurfaceCrestHeight;\n }\n set subsurfaceCrestHeight(val: number) {\n // The gate softens over SSS_HEIGHT_SOFTNESS of this; too small a height\n // makes it a hard step at the still-water level.\n const clamped = Math.max(SSS_CREST_HEIGHT_MIN, val);\n if (clamped !== this._subsurfaceCrestHeight) {\n this._subsurfaceCrestHeight = clamped;\n this.uniformChanged();\n }\n }\n /** Colour of the crest glow, before the crest gate tints it with the medium's extinction. */\n get subsurfaceTint() {\n return this._subsurfaceTint;\n }\n set subsurfaceTint(val: Vector3) {\n if (!val.equalsTo(this._subsurfaceTint)) {\n this._subsurfaceTint.set(val);\n this.uniformChanged();\n }\n }\n /**\n * Strength of the sunlight scattered out of the water column towards the eye,\n * 1 for the physical value. 0 disables the term.\n */\n get sunScatteringIntensity() {\n return this._sunScatteringIntensity;\n }\n set sunScatteringIntensity(val: number) {\n const clamped = Math.max(0, val);\n if (clamped !== this._sunScatteringIntensity) {\n this._sunScatteringIntensity = clamped;\n this.uniformChanged();\n }\n }\n /**\n * Fixed depth in meters the `offset` refraction mode steps along the refracted\n * ray. Ignored by `march`. Deliberately not the scene distance, which would\n * double submerged objects across their silhouette.\n */\n get cheapRefractionDepth() {\n return this._cheapRefractionDepth;\n }\n set cheapRefractionDepth(val: number) {\n const clamped = Math.max(0, val);\n if (clamped !== this._cheapRefractionDepth) {\n this._cheapRefractionDepth = clamped;\n this.uniformChanged();\n }\n }\n /** Scale on the medium's refraction blur. 0 is sharp, 1 is what the medium implies. */\n get refractionBlur() {\n return this._refractionBlur;\n }\n set refractionBlur(val: number) {\n const clamped = Math.max(0, val);\n if (clamped !== this._refractionBlur) {\n this._refractionBlur = clamped;\n this.uniformChanged();\n }\n }\n /** Mean cosine of a single scattering event, in `[0, 0.95]`. 0 is isotropic. */\n get scatterAnisotropy() {\n return this._scatterAnisotropy;\n }\n set scatterAnisotropy(val: number) {\n const clamped = Math.max(0, Math.min(0.95, val));\n if (clamped !== this._scatterAnisotropy) {\n this._scatterAnisotropy = clamped;\n this.uniformChanged();\n }\n }\n /** Scale from the generator's fold measure to foam coverage, 0 to disable. */\n get foamAmount() {\n return this._foamAmount;\n }\n set foamAmount(val: number) {\n if (val !== this._foamAmount) {\n this._foamAmount = Math.max(0, val);\n this.uniformChanged();\n }\n }\n /** Power applied to foam coverage before scaling. Above 1 restricts foam to broken crests. */\n get foamFalloff() {\n return this._foamFalloff;\n }\n set foamFalloff(val: number) {\n if (val !== this._foamFalloff) {\n this._foamFalloff = Math.max(0.01, val);\n this.uniformChanged();\n }\n }\n /** Diffuse albedo of the foam. */\n get foamColor() {\n return this._foamColor;\n }\n set foamColor(val: Vector3) {\n if (!val.equalsTo(this._foamColor)) {\n this._foamColor.set(val);\n this.uniformChanged();\n }\n }\n /**\n * How gradually the white foam fades out at its edges, from a crisp cut\n * (near 0) to a soft blend into the bubbles beneath (1).\n */\n get foamFeather() {\n return this._foamFeather;\n }\n set foamFeather(val: number) {\n const clamped = Math.min(Math.max(val, 0.001), 1);\n if (clamped !== this._foamFeather) {\n this._foamFeather = clamped;\n this.uniformChanged();\n }\n }\n /** How much the white foam is lit as a lumpy relief rather than a flat sheet, 0 for flat. */\n get foamNormalStrength() {\n return this._foamNormalStrength;\n }\n set foamNormalStrength(val: number) {\n const clamped = Math.max(0, val);\n if (clamped !== this._foamNormalStrength) {\n this._foamNormalStrength = clamped;\n this.uniformChanged();\n }\n }\n /** Tint of the bubbles under the white foam, lit by the sky. */\n get foamBubbleColor() {\n return this._foamBubbleColor;\n }\n set foamBubbleColor(val: Vector3) {\n if (!val.equalsTo(this._foamBubbleColor)) {\n this._foamBubbleColor.set(val);\n this.uniformChanged();\n }\n }\n /** How far the bubbles spread around the white foam and how strongly they show, 0 for none. */\n get foamBubbleCoverage() {\n return this._foamBubbleCoverage;\n }\n set foamBubbleCoverage(val: number) {\n const clamped = Math.max(0, val);\n if (clamped !== this._foamBubbleCoverage) {\n this._foamBubbleCoverage = clamped;\n this.uniformChanged();\n }\n }\n /**\n * Texture the foam is cut from, its value in the red channel: the foam\n * density uncovers it from its brightest parts down, so bright clumps show\n * first and dark holes last. Null for the built-in bubble pattern (see\n * getDefaultFoamTexture), which reads as a texture of one's own would.\n * Tiles every {@link foamTextureSize} metres.\n */\n get foamTexture(): Nullable<Texture2D> {\n return this._foamTexture.get() ?? null;\n }\n set foamTexture(tex: Nullable<Texture2D>) {\n if (tex !== this.foamTexture) {\n this._foamTexture.set(tex);\n this.uniformChanged();\n }\n }\n /** Metres of water one repeat of the {@link foamTexture} covers. */\n get foamTextureSize() {\n return this._foamTextureSize;\n }\n set foamTextureSize(val: number) {\n const clamped = Math.max(0.01, val);\n if (clamped !== this._foamTextureSize) {\n this._foamTextureSize = clamped;\n this.uniformChanged();\n }\n }\n /** How deep under the surface the bubbles seem to float, in metres; they shift against the foam as the view moves. */\n get foamBubbleDepth() {\n return this._foamBubbleDepth;\n }\n set foamBubbleDepth(val: number) {\n const clamped = Math.max(0, val);\n if (clamped !== this._foamBubbleDepth) {\n this._foamBubbleDepth = clamped;\n this.uniformChanged();\n }\n }\n /** @internal */\n private _updateMediumCoefficients() {\n this._extinction.setXYZ(\n this._absorption.x * this._absorptionScale + this._scattering.x * this._scatteringScale,\n this._absorption.y * this._absorptionScale + this._scattering.y * this._scatteringScale,\n this._absorption.z * this._absorptionScale + this._scattering.z * this._scatteringScale\n );\n this._scatterAlbedo.setXYZ(\n this._extinction.x > 0 ? (this._scattering.x * this._scatteringScale) / this._extinction.x : 0,\n this._extinction.y > 0 ? (this._scattering.y * this._scatteringScale) / this._extinction.y : 0,\n this._extinction.z > 0 ? (this._scattering.z * this._scatteringScale) / this._extinction.z : 0\n );\n }\n /** Artistic scale on the refracted view offset. 1 is physical, 0 disables it. */\n get refractionScale() {\n return this._refractionScale;\n }\n set refractionScale(val) {\n const clamped = Math.max(0, val);\n if (clamped !== this._refractionScale) {\n this._refractionScale = clamped;\n this.uniformChanged();\n }\n }\n /** Scale on the Fresnel reflectance, 1 for physical. Scales F0 too, so 0 kills specular. */\n get reflectionStrength() {\n return this._reflectionStrength;\n }\n set reflectionStrength(val) {\n const clamped = Math.max(0, Math.min(1, val));\n if (clamped !== this._reflectionStrength) {\n this._reflectionStrength = clamped;\n this.uniformChanged();\n }\n }\n needSceneColor() {\n return true;\n }\n needSceneDepth() {\n return true;\n }\n protected _createHash() {\n return `${super._createHash()}:${this.waveGenerator?.getHash() ?? ''}`;\n }\n setClipmapInfo(rotation: number, scale: number, offsetX: number, offsetY: number) {\n this._clipmapInfo.setXYZW(rotation, scale, offsetX, offsetY);\n this.uniformChanged();\n }\n /**\n * @param tileResolution - Cells along a clipmap tile, for the spacing of the\n * mesh vertices the wave generator band-limits to; 0 for no limit.\n */\n setClipmapGridInfo(gridScale: number, gridOffsetX: number, gridOffsetY: number, tileResolution = 0) {\n if (\n this._clipmapGridInfo.x !== gridScale ||\n this._clipmapGridInfo.y !== gridOffsetX ||\n this._clipmapGridInfo.z !== gridOffsetY ||\n this._clipmapGridInfo.w !== tileResolution\n ) {\n this._clipmapGridInfo.setXYZW(gridScale, gridOffsetX, gridOffsetY, tileResolution);\n this.uniformChanged();\n }\n }\n /** Distance from the camera to the horizon skirt's outer edge. Only read while {@link infinite}. */\n setSkirtDistance(distance: number) {\n if (this._skirtDistance !== distance) {\n this._skirtDistance = distance;\n this.uniformChanged();\n }\n }\n supportInstancing() {\n return false;\n }\n supportLighting() {\n return true;\n }\n /**\n * {@inheritDoc IMixinLight.receivesWaterCaustics}\n *\n * Always false: the submersion test would read a water fragment as submerged\n * wherever the surface up-sun of it rides a crest.\n */\n receivesWaterCaustics(): boolean {\n return false;\n }\n vertexShader(scope: PBFunctionScope) {\n super.vertexShader(scope);\n const pb = scope.$builder;\n this.waveGenerator?.setupUniforms(scope, 2);\n scope.$inputs.position = pb.vec3().attrib('position');\n scope.$inputs.clipmapInfo = pb.vec4().attrib('texCoord0');\n scope.clipmapGridInfo = pb.vec4().uniform(2);\n if (this.infinite) {\n scope.skirtDistance = pb.float().uniform(2);\n }\n\n scope.$l.s = pb.sin(scope.$inputs.clipmapInfo.x);\n scope.$l.c = pb.cos(scope.$inputs.clipmapInfo.x);\n scope.$l.scale2 = pb.mul(scope.$inputs.clipmapInfo.y, scope.clipmapGridInfo.x);\n scope.$l.clipmapMatrix = pb.mat4(\n pb.mul(scope.c, scope.scale2),\n pb.mul(scope.s, scope.scale2),\n 0,\n 0,\n pb.neg(pb.mul(scope.s, scope.scale2)),\n pb.mul(scope.c, scope.scale2),\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.z, scope.clipmapGridInfo.x), scope.clipmapGridInfo.y),\n pb.sub(pb.mul(scope.$inputs.clipmapInfo.w, scope.clipmapGridInfo.x), scope.clipmapGridInfo.z),\n 0,\n 1\n );\n\n scope.$l.clipmapPos = pb.mul(scope.clipmapMatrix, pb.vec4(scope.$inputs.position, 1)).xy;\n scope.clipmapWorldPos = pb.mul(\n ShaderHelper.getWorldMatrix(scope),\n pb.vec4(scope.clipmapPos.x, 0, scope.clipmapPos.y, 1)\n ).xyz;\n scope.worldNormal = pb.vec3(0, 1, 0);\n scope.worldPos = scope.clipmapWorldPos;\n // Mesh vertex spacing: clipmap level L spans Chebyshev distances T 2^L to\n // 2T 2^L cells with cells 2^L across, so distance / T bounds it. Taken from\n // the distance, not the level, so both sides of a seam agree.\n scope.$l.camOffset = pb.abs(pb.sub(scope.clipmapWorldPos.xz, ShaderHelper.getCameraPosition(scope).xz));\n scope.$l.vertexSpacing = pb.mul(\n pb.max(\n scope.clipmapGridInfo.x,\n pb.div(pb.max(scope.camOffset.x, scope.camOffset.y), pb.max(scope.clipmapGridInfo.w, 1))\n ),\n pb.step(0.5, scope.clipmapGridInfo.w)\n );\n if (this.infinite) {\n const that = this;\n // position.z is 1 on the skirt ring's outer edge, 0 everywhere else.\n scope.$l.skirt = pb.step(0.5, scope.$inputs.position.z);\n scope\n .$if(pb.greaterThan(scope.skirt, 0), function () {\n // Pushed radially out from the camera, undisplaced, at the still-water level.\n this.$l.camXZ = ShaderHelper.getCameraPosition(this).xz;\n this.$l.outDir = pb.normalize(pb.sub(this.clipmapWorldPos.xz, this.camXZ));\n this.$l.outXZ = pb.add(this.camXZ, pb.mul(this.outDir, this.skirtDistance));\n this.worldPos = pb.vec3(this.outXZ.x, this.clipmapWorldPos.y, this.outXZ.y);\n })\n .$else(function () {\n that.waveGenerator?.calcVertexPositionAndNormal(\n this,\n this.clipmapWorldPos,\n this.worldPos,\n this.worldNormal,\n this.vertexSpacing\n );\n });\n scope.$outputs.skirt = scope.skirt;\n } else {\n this.waveGenerator?.calcVertexPositionAndNormal(\n scope,\n scope.clipmapWorldPos,\n scope.worldPos,\n scope.worldNormal,\n scope.vertexSpacing\n );\n }\n scope.$outputs.worldPos = scope.worldPos;\n scope.$outputs.clipmapPos = scope.clipmapWorldPos;\n scope.$outputs.worldNormal = scope.worldNormal;\n if (this.infinite) {\n // Vertices past the far plane are pulled in along their own view ray:\n // screen position is unchanged, only the written depth moves. Shading\n // keeps the true world position.\n scope.$l.camPos = ShaderHelper.getCameraPosition(scope).xyz;\n scope.$l.viewVec = pb.sub(scope.$outputs.worldPos, scope.camPos);\n scope.$l.viewDist = pb.max(pb.length(scope.viewVec), 1e-6);\n scope.$l.maxDist = pb.mul(ShaderHelper.getCameraParams(scope).y, INFINITE_DEPTH_PULLIN);\n scope.$l.pullIn = pb.min(pb.div(scope.maxDist, scope.viewDist), 1);\n scope.$l.projPos = pb.add(scope.camPos, pb.mul(scope.viewVec, scope.pullIn));\n ShaderHelper.setClipSpacePosition(\n scope,\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.projPos, 1))\n );\n } else {\n ShaderHelper.setClipSpacePosition(\n scope,\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\n );\n }\n const gen = this.waveGenerator;\n if (gen?.calcPrevVertexPosition && ShaderHelper.getPrevUnjitteredViewProjectionMatrix(scope)) {\n scope.$l.prevWorldPos = pb.vec3();\n gen.calcPrevVertexPosition(scope, scope.clipmapWorldPos, scope.prevWorldPos, scope.vertexSpacing);\n if (this.infinite) {\n // The skirt does not move\n scope.prevWorldPos = pb.mix(scope.prevWorldPos, scope.$outputs.worldPos, scope.skirt);\n }\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.prevWorldPos);\n } else {\n ShaderHelper.resolveMotionVector(scope, scope.$outputs.worldPos, scope.$outputs.worldPos);\n }\n }\n fragmentShader(scope: PBFunctionScope) {\n super.fragmentShader(scope);\n const pb = scope.$builder;\n this.waveGenerator?.setupUniforms(scope, 2);\n if (!this.infinite) {\n scope.region = pb.vec4().uniform(2);\n }\n if (this.needFragmentColor()) {\n scope.refractionScale = pb.float().uniform(2);\n if (this.refractionMode === 'offset') {\n scope.cheapRefractionDepth = pb.float().uniform(2);\n }\n scope.reflectionStrength = pb.float().uniform(2);\n // (wind direction x, z, upwind slope variance, crosswind slope variance)\n scope.unresolvedSlope = pb.vec4().uniform(2);\n // Sky bake to the live pre-exposed space, as the visible sky is drawn\n scope.skyReflectScale = pb.float().uniform(2);\n scope.ssrParams = pb.vec4().uniform(2);\n // Eye vs. rest plane from the CPU submersion test: 1 above, -1 below,\n // 0 unknown (compare in the shader).\n scope.eyeSide = pb.float().uniform(2);\n // (intensity, crest absorption height in m, 0, 0)\n scope.subsurfaceParams = pb.vec4().uniform(2);\n scope.subsurfaceTint = pb.vec3().uniform(2);\n // (coverage scale, coverage falloff, 0, 0)\n scope.foamShadingParams = pb.vec4().uniform(2);\n scope.foamColor = pb.vec3().uniform(2);\n // (white foam feather, foam normal strength, bubble coverage, bubble depth in m)\n scope.foamLookParams = pb.vec4().uniform(2);\n scope.foamBubbleColor = pb.vec3().uniform(2);\n scope.foamTex = pb.tex2D().uniform(2);\n // uv of the foam texture per metre\n scope.foamUVScale = pb.float().uniform(2);\n // Thickness in metres a sheet of water fades in over, 0 for none\n scope.edgeFadeWidth = pb.float().uniform(2);\n // (intensity, anisotropy, 0, 0)\n scope.sunScatterParams = pb.vec4().uniform(2);\n // Mip widths per meter of path; one scalar LOD for all three channels.\n scope.refractBlurDensity = pb.float().uniform(2);\n scope.mediumAlbedo = pb.vec3().uniform(2);\n scope.mediumExtinction = pb.vec3().uniform(2);\n // Rect light specular (evaluateLTCRectLightTerms).\n scope.zLTCMatLut = pb.tex2D().uniform(2);\n scope.zLTCAmpLut = pb.tex2D().uniform(2);\n }\n if (!this.infinite) {\n scope.$l.discardable = pb.or(\n pb.any(pb.lessThan(scope.$inputs.worldPos.xz, scope.region.xy)),\n pb.any(pb.greaterThan(scope.$inputs.worldPos.xz, scope.region.zw))\n );\n scope.$if(scope.discardable, function () {\n pb.discard();\n });\n }\n if (this.debugOutput === 'shoreRegions' || this.debugOutput === 'shoreLevels') {\n // Show the actual displaced carrier in every pass. Wet-edge discard and\n // ground-depth projection would otherwise conceal its geometry or create\n // an apparent boundary unrelated to rasterized mesh coverage.\n if (this.needFragmentColor()) {\n if (this.debugOutput === 'shoreLevels') {\n scope.$l.outColor = pb.vec4(\n this._shoreWaveGenerator\n ? this._shoreWaveGenerator.calcDebugLevels(scope, scope.$inputs.clipmapPos.xz)\n : pb.vec3(0.1),\n 1\n );\n } else {\n scope.$l.shoreRegion = this._shoreWaveGenerator\n ? this._shoreWaveGenerator.calcDebugRegion(scope, scope.$inputs.clipmapPos.xz)\n : pb.vec3(0, 0, 1);\n scope.$l.shoreColor = scope.$choice(\n pb.greaterThan(scope.shoreRegion.y, 0.5),\n scope.$choice(\n pb.greaterThan(scope.shoreRegion.z, 1e-3),\n pb.vec3(1, 0.3, 0.02),\n pb.vec3(0.85, 0.02, 0.8)\n ),\n pb.vec3(0, 0.85, 1)\n );\n scope.$l.outColor = pb.vec4(\n pb.mix(pb.vec3(0.02, 0.12, 0.9), scope.shoreColor, scope.shoreRegion.x),\n 1\n );\n }\n if (\n this.drawContext.materialFlags &\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\n ) {\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor, pb.vec4(0), scope.outColor);\n } else {\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\n }\n } else {\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\n }\n return;\n }\n if (this.needFragmentColor()) {\n // Screen derivatives of the undisplaced position, taken here in uniform\n // control flow; the foam textures are sampled with them under branches.\n scope.$l.restXZGrad = pb.vec4(\n pb.dpdx(scope.$inputs.clipmapPos.xz),\n pb.dpdy(scope.$inputs.clipmapPos.xz)\n );\n // The foam texture here, drifting; a generator carrying foam of its own\n // blends in where its foam is\n scope.$l.foamSample = sampleFoamTexture(\n scope,\n scope.foamTex,\n pb.mul(\n pb.add(\n scope.$inputs.clipmapPos.xz,\n pb.vec2(pb.mul(ShaderHelper.getElapsedTime(scope), FOAM_DRIFT))\n ),\n scope.foamUVScale\n ),\n scope.restXZGrad,\n scope.foamUVScale\n );\n scope.$l.normal = this.waveGenerator\n ? this.waveGenerator.calcFragmentNormalAndFoam(\n scope,\n scope.$inputs.clipmapPos.xz,\n scope.$inputs.worldNormal,\n scope.foamSample,\n this.waveGenerator.calcUnresolvedSlopeVariance ? scope.restXZGrad : undefined\n )\n : pb.vec4(scope.$inputs.worldNormal, 0);\n if (this.infinite) {\n // Flat and foamless on the skirt: waves evaluated at kilometres per\n // pixel alias into speckle.\n scope.normal = pb.mix(scope.normal, pb.vec4(0, 1, 0, 0), scope.$inputs.skirt);\n }\n // Vertical wave displacement, interpolated from the vertices. Zero on the skirt.\n scope.$l.crestHeight = pb.sub(scope.$inputs.worldPos.y, scope.$inputs.clipmapPos.y);\n const surfaceCoverage = this.waveGenerator?.calcSurfaceCoverage;\n scope.$l.surfaceCoverage = surfaceCoverage\n ? surfaceCoverage.call(this.waveGenerator, scope, scope.$inputs.clipmapPos.xz)\n : pb.float(1);\n const sheetThickness = this.waveGenerator?.calcSheetThickness;\n scope.$l.sheetThickness = sheetThickness\n ? sheetThickness.call(this.waveGenerator, scope, scope.$inputs.clipmapPos.xz)\n : pb.float(-1);\n if (this._shoreWaveGenerator) {\n // Near the shore the foam is at least the near-shore density, joining\n // the breaking waves' foam to the beach's (see nearShore).\n scope.normal.w = this._shoreWaveGenerator.calcNearShoreFoam(\n scope,\n scope.$inputs.clipmapPos.xz,\n scope.normal.w\n );\n }\n // Reconstruct the opaque surface before the swash's discard. Deposited\n // foam is projected onto this ground, independently of the raised mesh.\n scope.$l.scenePos = ShaderHelper.samplePositionFromDepth(\n scope,\n ShaderHelper.getLinearDepthTexture(scope),\n pb.div(scope.$builtins.fragCoord.xy, ShaderHelper.getRenderSize(scope)),\n ShaderHelper.getJitteredInvVPMatrix(scope),\n ShaderHelper.getCameraParams(scope).xy\n );\n scope.$l.groundFoamDensity = pb.float(0);\n scope.$l.groundFoamSample = pb.vec3(0);\n scope.$l.groundFoamWeight = pb.float(0);\n scope.$l.groundNormal = pb.vec3(0, 1, 0);\n if (this.debugOutput === 'swashVisibility') {\n scope.$l.visibilityDepthFail = pb.float(0);\n }\n if (this.debugOutput === 'swashGroundSupport') {\n scope.$l.groundFieldCoverage = pb.float(0);\n scope.$l.groundWetCoverage = pb.float(0);\n } else if (this.debugOutput === 'swashHandover') {\n scope.$l.groundWetCoverage = pb.float(0);\n } else if (this.debugOutput === 'swashFoamSources') {\n scope.$l.groundFieldDensity = pb.float(0);\n scope.$l.groundSurfDensity = pb.float(0);\n }\n if (this._shoreWaveGenerator && this._foamFieldGenerator) {\n // Derivatives precede all coverage branches; pattern coordinates stay\n // fixed to the sand even while the water and camera move.\n scope.$l.groundGrad = pb.vec4(pb.dpdx(scope.scenePos.xz), pb.dpdy(scope.scenePos.xz));\n scope.$l.groundCross = pb.cross(pb.dpdx(scope.scenePos.xyz), pb.dpdy(scope.scenePos.xyz));\n scope.groundNormal = pb.normalize(\n pb.add(pb.mul(scope.groundCross, pb.sign(scope.groundCross.y)), pb.vec3(0, 1e-8, 0))\n );\n scope.$l.groundMask = this._shoreWaveGenerator.calcFoamGroundMask(scope, scope.scenePos.xyz);\n const field = this._foamField;\n const shore = this._shoreWaveGenerator;\n const debugOutput = this.debugOutput;\n scope.$if(\n pb.and(pb.lessThan(scope.scenePos.w, SCENE_SKY_DEPTH01), pb.greaterThan(scope.groundMask, 0)),\n function () {\n // The field's foam at the actual ground position: on a thin sheet and\n // on the sand it drained from alike, the field holding it there\n // (FOAM_SETTLE of the shore waves)\n this.$l.groundMobile = field.sample(this, this.scenePos.xz);\n this.$l.groundWet = shore.calcSurfaceCoverage(this, this.scenePos.xz);\n this.$l.groundThickness = shore.calcSheetThickness(this, this.scenePos.xz);\n // Coverage and handover describe the same carrier point. Using the\n // ground point's thickness here leaves a gap at grazing angles:\n // the carrier can be dry while its projected ground is still wet.\n this.$l.groundHandoverThickness = this.$choice(\n pb.greaterThanEqual(this.sheetThickness, 0),\n this.sheetThickness,\n this.groundThickness\n );\n if (debugOutput === 'swashGroundSupport') {\n this.groundWetCoverage = this.groundWet;\n this.groundFieldCoverage = this.groundMobile.y;\n } else if (debugOutput === 'swashHandover') {\n this.groundWetCoverage = this.groundWet;\n } else if (debugOutput === 'swashFoamSources') {\n this.groundFieldDensity = this.groundMobile.x;\n this.groundSurfDensity = pb.mul(\n shore.calcNearShoreFoam(this, this.scenePos.xz, pb.float(0)),\n this.groundWet\n );\n }\n this.groundFoamWeight = pb.mul(\n this.groundMask,\n this.groundMobile.y,\n // Unknown thickness must retain the water surface. In particular,\n // a valid sand bed outside the shore-wave zone is not a dry sheet.\n this.$choice(\n pb.greaterThanEqual(this.groundHandoverThickness, 0),\n pb.sub(1, pb.smoothStep(0.01, 0.06, this.groundHandoverThickness)),\n pb.float(0)\n )\n );\n // The surf's foam only where the sheet now is; the field's wherever it holds it\n this.groundFoamDensity = pb.clamp(\n pb.max(\n this.groundMobile.x,\n pb.mul(shore.calcNearShoreFoam(this, this.scenePos.xz, pb.float(0)), this.groundWet)\n ),\n 0,\n 1\n );\n this.$if(pb.greaterThan(this.groundFoamDensity, 1e-3), function () {\n // The water's foam pattern at the ground: it stands still near\n // the shore (see nearShore), so the beach's foam and the water's\n // are one pattern through the handover.\n this.groundFoamSample = WaterFoamField.flowPattern(\n this,\n this.ffFoamTex,\n this.ffFoamUVScale,\n this.ffClock.x,\n this.scenePos.xz,\n this.groundGrad,\n shore.calcFoamFlow(this, this.scenePos.xz, this.ffDrift)\n );\n });\n }\n );\n // The thin-film foam and its depth use the same ground transition.\n // Otherwise a wet carrier can still clip the projected foam against\n // the terrain right where the two layers meet.\n scope.$builtins.fragDepth = pb.mix(\n scope.$builtins.fragCoord.z,\n ShaderHelper.linearNormalizedToNonLinearDepth(\n scope,\n pb.max(pb.sub(scope.scenePos.w, pb.div(0.001, ShaderHelper.getCameraParams(scope).y)), 0),\n ShaderHelper.getCameraParams(scope).xy\n ),\n scope.$choice(pb.lessThanEqual(scope.surfaceCoverage, 1e-3), pb.float(1), scope.groundFoamWeight)\n );\n }\n const revealSwash =\n this.debugOutput === 'foamField' ||\n this.debugOutput === 'swashVisibility' ||\n this.debugOutput === 'swashGroundSupport';\n if (revealSwash && this._shoreWaveGenerator && this._foamFieldGenerator) {\n if (this.debugOutput === 'swashVisibility') {\n scope.visibilityDepthFail = scope.$choice(\n pb.greaterThan(\n pb.mul(\n pb.sub(\n ShaderHelper.nonLinearDepthToLinearNormalized(\n scope,\n scope.$builtins.fragDepth as PBShaderExp\n ),\n scope.scenePos.w\n ),\n ShaderHelper.getCameraParams(scope).y\n ),\n 0.0001\n ),\n pb.float(1),\n pb.float(0)\n );\n }\n scope.$if(\n pb.and(pb.lessThan(scope.scenePos.w, SCENE_SKY_DEPTH01), pb.greaterThan(scope.groundMask, 0)),\n function () {\n this.$builtins.fragDepth = ShaderHelper.linearNormalizedToNonLinearDepth(\n this,\n pb.max(pb.sub(this.scenePos.w, pb.div(0.001, ShaderHelper.getCameraParams(this).y)), 0),\n ShaderHelper.getCameraParams(this).xy\n );\n }\n );\n }\n scope.$l.swashDiscard = pb.and(\n pb.lessThanEqual(scope.surfaceCoverage, 1e-3),\n pb.lessThanEqual(pb.mul(scope.groundFoamDensity, scope.groundFoamWeight), 1e-3)\n );\n // Past the wet edge, only the foam actually left on the ground draws.\n if (surfaceCoverage && !revealSwash) {\n scope.$if(scope.swashDiscard, function () {\n pb.discard();\n });\n }\n if (this.debugOutput === 'swashGroundSupport') {\n scope.$l.outColor = pb.vec4(\n this._shoreWaveGenerator && this._foamFieldGenerator ? scope.groundMask : pb.float(0),\n scope.groundFieldCoverage,\n scope.groundWetCoverage,\n 1\n );\n } else if (this.debugOutput === 'swashVisibility') {\n scope.$l.outColor = pb.vec4(\n scope.$choice(scope.swashDiscard, pb.float(1), pb.float(0)),\n scope.visibilityDepthFail,\n scope.groundFoamDensity,\n 1\n );\n } else if (this.debugOutput === 'swashHandover') {\n scope.$l.outColor = pb.vec4(\n scope.surfaceCoverage,\n scope.groundWetCoverage,\n scope.groundFoamWeight,\n 1\n );\n } else if (this.debugOutput === 'swashFoamSources') {\n scope.$l.outColor = pb.vec4(scope.normal.w, scope.groundFieldDensity, scope.groundSurfDensity, 1);\n } else if (this.debugOutput === 'interaction') {\n // The field on its own, grey at rest, scaled so its amplitude clamp\n // reaches black and white; dimmed outside the window so its reach shows.\n if (this._interactiveWaveGenerator) {\n const interaction = this._interactiveWaveGenerator.interaction;\n scope.$l.wiDebugHeight = pb.div(\n interaction.sampleHeight(scope, scope.$inputs.clipmapPos.xz),\n scope.wiParams2.y\n );\n scope.$l.wiDebugMask = pb.mix(\n pb.float(0.55),\n pb.float(1),\n interaction.windowMask(scope, scope.$inputs.clipmapPos.xz)\n );\n } else {\n scope.$l.wiDebugHeight = pb.float(0);\n scope.$l.wiDebugMask = pb.float(1);\n }\n scope.$l.outColor = pb.vec4(\n pb.vec3(pb.mul(pb.add(0.5, pb.mul(scope.wiDebugHeight, 0.5)), scope.wiDebugMask)),\n 1\n );\n } else if (this.debugOutput === 'foamField') {\n // The field's density; mid grey off the field, where coverage is 0\n if (this._foamFieldGenerator) {\n scope.$l.ffDebug = this._foamField.sample(scope, scope.$inputs.clipmapPos.xz);\n } else {\n scope.$l.ffDebug = pb.vec3(0);\n }\n scope.$l.outColor = pb.vec4(\n pb.vec3(pb.mix(pb.float(0.5), pb.max(scope.ffDebug.x, scope.ffDebug.z), scope.ffDebug.y)),\n 1\n );\n } else {\n // The foam field's wall foam layer, see FOAM_WALL\n scope.$l.wallFoam = this._foamFieldGenerator\n ? pb.mul(\n this._foamField.sample(scope, scope.$inputs.clipmapPos.xz).z,\n this.infinite ? pb.sub(1, scope.$inputs.skirt) : pb.float(1)\n )\n : pb.float(0);\n scope.$l.outColor = pb.vec4(\n this.waterShading(\n scope,\n scope.$inputs.worldPos,\n scope.normal.xyz,\n scope.normal.w,\n scope.crestHeight,\n scope.$inputs.clipmapPos.xz,\n scope.restXZGrad,\n scope.foamSample,\n scope.surfaceCoverage,\n scope.sheetThickness,\n scope.wallFoam,\n scope.scenePos,\n scope.groundFoamDensity,\n scope.groundFoamSample,\n scope.groundNormal,\n scope.groundFoamWeight\n ),\n 1\n );\n }\n if (\n this.drawContext.materialFlags &\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\n ) {\n scope.$l.outRoughness = pb.vec4(\n pb.vec3(this.waterRoughness(scope, scope.$inputs.worldPos, scope.restXZGrad)),\n 0\n );\n this.outputFragmentColor(\n scope,\n scope.$inputs.worldPos,\n scope.outColor,\n scope.outRoughness,\n scope.outColor\n );\n } else {\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.outColor);\n }\n } else {\n // The support mesh over dry sand is only a carrier for the colour pass.\n // It must not replace terrain depth or its motion vectors in other passes.\n const coverage = this.waveGenerator?.calcSurfaceCoverage;\n if (coverage) {\n scope.$l.surfaceCoverage = coverage.call(this.waveGenerator, scope, scope.$inputs.clipmapPos.xz);\n scope.$if(pb.lessThanEqual(scope.surfaceCoverage, 1e-3), function () {\n pb.discard();\n });\n }\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\n }\n }\n /**\n * Covariance (x, z, xz) of the wave slopes the shading normal no longer shows\n * at this pixel, or null when the wave generator cannot tell.\n */\n unresolvedSlopeVariance(scope: PBInsideFunctionScope, restXZGrad: PBShaderExp): Nullable<PBShaderExp> {\n const gen = this.waveGenerator;\n return gen?.calcUnresolvedSlopeVariance ? gen.calcUnresolvedSlopeVariance(scope, restXZGrad) : null;\n }\n /**\n * Specular roughness at a world position. The slopes too fine for the pixel\n * leave the normal and are handed to the lobe, GGX alpha^2 taking their\n * variance (Beckmann m^2 = 2 sigma^2 per axis). Without the generator's\n * account of them, distance flattens the normals and the lobe widens with it.\n * Also written to the scene roughness buffer.\n */\n waterRoughness(scope: PBInsideFunctionScope, worldPos: PBShaderExp, restXZGrad: PBShaderExp) {\n const pb = scope.$builder;\n const that = this;\n pb.func('waterRoughness', [pb.vec3('worldPos'), pb.vec4('restXZGrad')], function () {\n const slopeVar = that.unresolvedSlopeVariance(this, this.restXZGrad);\n if (slopeVar) {\n this.$l.slopeVar = slopeVar;\n this.$l.alpha2 = pb.add(\n WATER_BASE_ROUGHNESS ** 4,\n pb.max(pb.add(this.slopeVar.x, this.slopeVar.y), 0)\n );\n this.$return(pb.sqrt(pb.sqrt(this.alpha2)));\n } else {\n this.$l.dist = pb.length(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this)));\n this.$l.normalScale = pb.clamp(pb.div(100, this.dist), 0, 1);\n this.$return(pb.mix(WATER_DISTANT_ROUGHNESS, WATER_BASE_ROUGHNESS, this.normalScale));\n }\n });\n return scope.waterRoughness(worldPos, restXZGrad) as PBShaderExp;\n }\n /**\n * Where to sample the scene behind the water, and the medium path length to it.\n *\n * Refracts the view ray by Snell's law and marches it against the scene depth.\n * Depth-convention independent: projection only reads `clip.xy / clip.w` and\n * all depth comparisons are in view space.\n *\n * @param scope - Current shader scope\n * @param worldPos - Surface point being shaded\n * @param normal - Wave normal at that point, pointing up out of the water\n * @param eyeVecNorm - Normalized direction from the camera to the surface\n * @param screenUV - Screen UV of the surface point\n * @param surfaceViewZ - View-space z of the surface point\n * @param straightDepth01 - Normalized linear depth of the scene behind it\n * @param straightWorldPos - Unrefracted scene world position behind the surface\n * @param straightDist - Straight-line distance from the surface to that scene\n * @param underwater - Whether the eye is below the surface\n * @returns `vec3(uv, pathLength)` - where to sample, and the medium path in meters,\n * {@link BOTTOMLESS_PATH} with only sky behind the surface\n */\n waterRefraction(\n scope: PBInsideFunctionScope,\n worldPos: PBShaderExp,\n normal: PBShaderExp,\n eyeVecNorm: PBShaderExp,\n screenUV: PBShaderExp,\n surfaceViewZ: PBShaderExp,\n straightDepth01: PBShaderExp,\n straightWorldPos: PBShaderExp,\n straightDist: PBShaderExp,\n underwater: PBShaderExp\n ) {\n const pb = scope.$builder;\n const march = this.refractionMode === 'march';\n // Only ever used as a difference of two UVs, so TAA jitter and clip-space Y\n // orientation cancel. Inverse of ShaderHelper.samplePositionFromDepth's mapping.\n pb.func('waterRefractProjectUV', [pb.vec3('worldPos')], function () {\n this.$l.h = pb.mul(ShaderHelper.getViewProjectionMatrix(this), pb.vec4(this.worldPos, 1));\n this.$return(pb.add(pb.mul(pb.div(this.h.xy, pb.max(this.h.w, 1e-6)), 0.5), pb.vec2(0.5)));\n });\n // Sample UV for a refracted ray ending at `hitPos`, faded to the straight\n // sample at the screen border.\n pb.func(\n 'waterRefractUV',\n [pb.vec2('screenUV'), pb.vec2('uvBase'), pb.vec3('hitPos'), pb.float('scale')],\n function () {\n this.$l.uv = pb.add(\n this.screenUV,\n pb.mul(pb.sub(this.waterRefractProjectUV(this.hitPos), this.uvBase), this.scale)\n );\n this.$l.edge = pb.min(\n pb.min(this.uv.x, pb.sub(1, this.uv.x)),\n pb.min(this.uv.y, pb.sub(1, this.uv.y))\n );\n this.$return(pb.mix(this.screenUV, this.uv, pb.clamp(pb.div(this.edge, REFRACT_EDGE_FADE), 0, 1)));\n }\n );\n // Declared only in `march` mode: a dead function still forces the depth\n // texture and projection matrices into the bind group.\n if (march) {\n // Returns (uv, rayViewZ - sceneViewZ) at `t` meters along the ray.\n // Positive: ray still in front of the scene. Negative: passed through it.\n pb.func(\n 'waterRefractStep',\n [\n pb.vec3('worldPos'),\n pb.vec3('refractDir'),\n pb.vec2('screenUV'),\n pb.vec2('uvBase'),\n pb.float('rayViewZ'),\n pb.float('cameraFar'),\n pb.float('t')\n ],\n function () {\n this.$l.uv = this.waterRefractUV(\n this.screenUV,\n this.uvBase,\n pb.add(this.worldPos, pb.mul(this.refractDir, this.t)),\n this.refractionScale\n );\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(\n this,\n ShaderHelper.getLinearDepthTexture(this),\n this.uv,\n 0\n );\n this.$l.sceneViewZ = pb.mul(pb.neg(this.linearDepth), this.cameraFar);\n this.$return(pb.vec3(this.uv, pb.sub(this.rayViewZ, this.sceneViewZ)));\n }\n );\n // First crossing of the refracted ray with the depth buffer. A hit is a\n // step inside the thickness band or a sign change of the gap; an object\n // poking out of the water is negative from the first step and never hits.\n pb.func(\n 'waterRefractMarch',\n [\n pb.vec3('worldPos'),\n pb.vec3('refractDir'),\n pb.vec2('screenUV'),\n pb.vec2('uvBase'),\n pb.float('surfaceViewZ'),\n pb.float('refractStepZ'),\n pb.float('cameraFar'),\n pb.float('maxPath'),\n pb.float('basePath')\n ],\n function () {\n this.$l.step = pb.div(pb.sub(this.maxPath, 0.05), pb.float(REFRACT_MARCH_STEPS));\n this.$l.tPrev = pb.float(0.05);\n this.$l.gapPrev = pb.float(1);\n this.$l.hitUV = this.screenUV;\n this.$l.hitPath = this.basePath;\n this.$for(pb.float('i'), 0, REFRACT_MARCH_STEPS, function () {\n this.$l.t = pb.add(this.tPrev, this.step);\n this.$l.rayViewZ = pb.add(this.surfaceViewZ, pb.mul(this.refractStepZ, this.t));\n this.$l.s = this.waterRefractStep(\n this.worldPos,\n this.refractDir,\n this.screenUV,\n this.uvBase,\n this.rayViewZ,\n this.cameraFar,\n this.t\n );\n this.$l.gap = this.s.z;\n this.$if(\n pb.or(\n pb.lessThan(pb.abs(this.gap), REFRACT_MARCH_THICKNESS),\n pb.lessThan(pb.mul(this.gapPrev, this.gap), 0)\n ),\n function () {\n // Interpolate to the exact crossing.\n this.$l.k = pb.div(this.gapPrev, pb.sub(this.gapPrev, this.gap));\n this.hitUV = this.s.xy;\n this.hitPath = pb.mix(this.tPrev, this.t, this.k);\n this.$break();\n }\n ).$else(function () {\n this.tPrev = this.t;\n this.gapPrev = this.gap;\n });\n });\n this.$return(pb.vec3(this.hitUV, this.hitPath));\n }\n );\n }\n pb.func(\n 'waterRefraction',\n [\n pb.vec3('worldPos'),\n pb.vec3('normal'),\n pb.vec3('eyeVecNorm'),\n pb.vec2('screenUV'),\n pb.float('surfaceViewZ'),\n pb.float('straightDepth01'),\n pb.vec3('straightWorldPos'),\n pb.float('straightDist'),\n pb.bool('underwater')\n ],\n function () {\n this.$l.faceNormal = this.$choice(this.underwater, pb.neg(this.normal), this.normal);\n this.$l.eta = this.$choice(this.underwater, pb.float(WATER_TO_AIR_ETA), pb.float(AIR_TO_WATER_ETA));\n this.$l.uvBase = this.waterRefractProjectUV(this.worldPos);\n // Sky behind the water has no bottom. Its point lies on the far plane,\n // so the straight distance falls to 0 where the surface crosses that\n // plane and the water there would show the sky unabsorbed.\n this.$if(pb.greaterThanEqual(this.straightDepth01, SCENE_SKY_DEPTH01), function () {\n this.$return(pb.vec3(this.screenUV, SKY_MEDIUM_PATH));\n });\n this.$l.waterCrossDir = pb.normalize(pb.sub(this.straightWorldPos, this.worldPos));\n // refractDir = view line + (refract by wave normal - refract by flat\n // normal), so calm water samples exactly the straight hit. The flat\n // normal carries the same facing flip so the two cancel from either side.\n this.$l.refractWave = pb.refract(this.eyeVecNorm, this.faceNormal, this.eta);\n this.$l.refractFlatNormal = pb.vec3(0, pb.sign(this.faceNormal.y), 0);\n this.$l.refractFlat = pb.refract(this.eyeVecNorm, this.refractFlatNormal, this.eta);\n // Total internal reflection makes refract return zero.\n this.$l.refractDir = pb.add(this.waterCrossDir, pb.sub(this.refractWave, this.refractFlat));\n this.$if(pb.lessThan(pb.length(pb.sub(this.refractWave, this.refractFlat)), 1e-4), function () {\n this.refractDir = this.waterCrossDir;\n });\n this.$if(pb.lessThan(pb.dot(this.refractDir, this.refractDir), 1e-6), function () {\n this.refractDir = this.waterCrossDir;\n });\n this.refractDir = pb.normalize(this.refractDir);\n this.$l.refractUV = this.screenUV;\n this.$l.refractPath = this.straightDist;\n if (!march) {\n // Fixed step, not the scene distance: that jumps across silhouettes\n // and paints a second copy of the object.\n this.refractUV = this.waterRefractUV(\n this.screenUV,\n this.uvBase,\n pb.add(this.worldPos, pb.mul(this.refractDir, this.cheapRefractionDepth)),\n this.refractionScale\n );\n this.$return(pb.vec3(this.refractUV, this.refractPath));\n } else {\n this.$l.refractDirView = pb.mul(ShaderHelper.getViewMatrix(this), pb.vec4(this.refractDir, 0)).xyz;\n this.$l.refractStepZ = pb.min(this.refractDirView.z, -1e-4);\n this.$l.maxPath = pb.mul(this.straightDist, REFRACT_MAX_PATH_RATIO);\n this.$l.marchResult = this.waterRefractMarch(\n this.worldPos,\n this.refractDir,\n this.screenUV,\n this.uvBase,\n this.surfaceViewZ,\n this.refractStepZ,\n ShaderHelper.getCameraParams(this).y,\n this.maxPath,\n this.straightDist\n );\n this.refractUV = this.marchResult.xy;\n this.refractPath = pb.clamp(this.marchResult.z, 0, this.maxPath);\n // A finite scene point above the surface at the refracted UV is an\n // object poking through: fall back to the straight sample.\n this.$l.sceneHit = ShaderHelper.samplePositionFromDepth(\n this,\n ShaderHelper.getLinearDepthTexture(this),\n this.refractUV,\n ShaderHelper.getJitteredInvVPMatrix(this),\n ShaderHelper.getCameraParams(this).xy\n );\n this.$if(\n pb.and(pb.lessThan(this.sceneHit.w, 0.999), pb.greaterThan(this.sceneHit.y, this.worldPos.y)),\n function () {\n this.refractUV = this.screenUV;\n this.refractPath = this.straightDist;\n }\n );\n this.$return(pb.vec3(this.refractUV, this.refractPath));\n }\n }\n );\n return scope.waterRefraction(\n worldPos,\n normal,\n eyeVecNorm,\n screenUV,\n surfaceViewZ,\n straightDepth01,\n straightWorldPos,\n straightDist,\n underwater\n ) as PBShaderExp;\n }\n /**\n * Sunlight scattered out of the water column towards the eye. Closed-form\n * single scattering in a homogeneous medium.\n *\n * With `t` the distance along the refracted view ray, `d` its length in the\n * water, `vy`/`sy` the descent rates of the view and sun rays, and\n * `r = vy / sy`:\n *\n * ```\n * S = integral(0..d) sigma_s * p * E * exp(-sigma_t * t * (1 + r)) dt\n * = albedo * p * E * (1 - exp(-sigma_t * (1 + r) * d)) / (1 + r)\n * ```\n *\n * No `NoL` factor: that geometry is already in `r`. Only the entry Fresnel is\n * applied; the exit transmission is applied once by the caller. Assumes the\n * eye is above the surface.\n *\n * @param scope - Current shader scope.\n * @param lightEnergy - Sun irradiance perpendicular to the beam, after shadowing.\n * @param lightDir - Unit vector from the surface towards the light.\n * @param eyeVecNorm - Unit vector from the camera towards the surface.\n * @param NoL - Cosine of the sun's incidence on the wave normal.\n * @param depth - Refracted path length through the medium, in meters.\n * @returns Radiance scattered towards the eye, before the exit Fresnel.\n */\n waterSunScattering(\n scope: PBInsideFunctionScope,\n lightEnergy: PBShaderExp,\n lightDir: PBShaderExp,\n eyeVecNorm: PBShaderExp,\n NoL: PBShaderExp,\n depth: PBShaderExp,\n foam: PBShaderExp\n ) {\n const pb = scope.$builder;\n pb.func(\n 'waterSunScattering',\n [\n pb.vec3('lightEnergy'),\n pb.vec3('lightDir'),\n pb.vec3('eyeVecNorm'),\n pb.float('NoL'),\n pb.float('depth'),\n pb.float('foam')\n ],\n function () {\n this.$l.up = pb.vec3(0, 1, 0);\n // Directions inside the water. The sun travels opposite to `lightDir`.\n this.$l.Lw = pb.refract(pb.neg(this.lightDir), this.up, AIR_TO_WATER_ETA);\n this.$l.Vw = pb.refract(this.eyeVecNorm, this.up, AIR_TO_WATER_ETA);\n this.$l.sy = pb.max(pb.neg(this.Lw.y), MIN_SUN_SLOPE);\n this.$l.vy = pb.max(pb.neg(this.Vw.y), 1e-3);\n this.$l.r = pb.div(this.vy, this.sy);\n this.$l.rr = pb.add(1, this.r);\n this.$l.cosTheta = pb.neg(pb.dot(this.Lw, this.Vw));\n this.$l.hg = waterScatterPhase(this, this.cosTheta, this.sunScatterParams.y);\n // Blend towards isotropic with optical thickness (multiple scattering).\n // Luminance-weighted: the phase is wavelength independent.\n this.$l.lumWeights = pb.vec3(0.2126, 0.7152, 0.0722);\n this.$l.extLum = pb.dot(this.mediumExtinction, this.lumWeights);\n this.$l.albedoLum = pb.dot(this.mediumAlbedo, this.lumWeights);\n this.$l.thickness = pb.mul(\n this.albedoLum,\n pb.sub(1, pb.exp(pb.neg(pb.mul(this.extLum, this.depth))))\n );\n this.$l.phase = pb.mix(\n this.hg,\n 1 / (4 * Math.PI),\n pb.smoothStep(0, 0.5, pb.clamp(this.thickness, 0, 1))\n );\n this.$l.k = pb.mul(this.mediumExtinction, this.rr);\n this.$l.integral = pb.div(pb.sub(pb.vec3(1), pb.exp(pb.neg(pb.mul(this.k, this.depth)))), this.rr);\n // Entry Fresnel. Zero at NoL <= 0, where the subsurface term takes over.\n // Foam is a mass of bubbles, not a mirror, so it blends towards full\n // transmission.\n this.$l.entry = pb.sub(1, pb.add(WATER_F0, pb.mul(1 - WATER_F0, pb.pow(pb.sub(1, this.NoL), 5))));\n this.$l.entry = pb.mix(this.entry, pb.float(1), this.foam);\n this.$return(\n pb.mul(\n this.mediumAlbedo,\n this.lightEnergy,\n this.integral,\n pb.mul(this.phase, this.entry, this.sunScatterParams.x)\n )\n );\n }\n );\n return scope.waterSunScattering(lightEnergy, lightDir, eyeVecNorm, NoL, depth, foam) as PBShaderExp;\n }\n waterShading(\n scope: PBInsideFunctionScope,\n worldPos: PBShaderExp,\n worldNormal: PBShaderExp,\n foamFactor: PBShaderExp,\n crestHeight: PBShaderExp,\n restXZ: PBShaderExp,\n restXZGrad: PBShaderExp,\n foamSample: PBShaderExp,\n coverage: PBShaderExp,\n sheetThickness: PBShaderExp,\n wallFoam: PBShaderExp,\n scenePos: PBShaderExp,\n groundFoamDensity: PBShaderExp,\n groundFoamSample: PBShaderExp,\n groundNormal: PBShaderExp,\n groundFoamWeight: PBShaderExp\n ) {\n const pb = scope.$builder;\n const that = this;\n const debugOutput = this.debugOutput;\n const hasGroundFoam = !!(this._shoreWaveGenerator && this._foamFieldGenerator);\n // The environment's prefiltered radiance, for the distant sky reflection\n const envLight = this.needCalculateEnvLight() ? (this.drawContext.env?.light.envLight ?? null) : null;\n // Transmittance over `depth` meters of path.\n pb.func('getAbsorption', [pb.float('depth')], function () {\n this.$return(pb.exp(pb.neg(pb.mul(this.mediumExtinction, this.depth))));\n });\n // Fraction of incident irradiance scattered back over `depth` meters of path.\n pb.func('getScattering', [pb.float('depth')], function () {\n this.$return(\n pb.mul(\n this.mediumAlbedo,\n pb.sub(pb.vec3(1), pb.exp(pb.neg(pb.mul(this.mediumExtinction, this.depth))))\n )\n );\n });\n // Mean Fresnel over a Gaussian distribution of unresolved slopes of standard\n // deviation `sigmaV` along the view direction, Bruneton, Neyret & Holzschuch,\n // \"Real-time Realistic Ocean Lighting using Seamless Transitions from Geometry\n // to BRDF\" (Eurographics 2010), as their ocean demo fits it:\n // (1 - cos)^(5 exp(-2.69 sigma)) / (1 + 22.7 sigma^1.5), Schlick at sigma = 0.\n pb.func('meanFresnel', [pb.float('cosThetaV'), pb.float('sigmaV')], function () {\n this.$return(\n pb.div(\n pb.pow(pb.sub(1, this.cosThetaV), pb.mul(5, pb.exp(pb.mul(-2.69, this.sigmaV)))),\n pb.add(1, pb.mul(22.7, pb.pow(this.sigmaV, 1.5)))\n )\n );\n });\n pb.func(\n 'fresnel',\n [pb.vec3('normal'), pb.vec3('eyeVec'), pb.bool('underwater'), pb.float('sigmaV')],\n function () {\n // abs, not clamp: a folded crest flips the sign inside one wave, and a\n // clamp would drop to F0 exactly at the most grazing geometry.\n this.$l.NoV = pb.clamp(pb.abs(pb.dot(this.normal, this.eyeVec)), 0, 1);\n this.$if(this.underwater, function () {\n this.$l.sinT2 = pb.mul(WATER_TO_AIR_ETA * WATER_TO_AIR_ETA, pb.sub(1, pb.mul(this.NoV, this.NoV)));\n // Total internal reflection outside the Snell window. Not scaled by\n // reflectionStrength: there is no transmitted ray to reveal.\n this.$l.f = pb.float(1);\n this.$if(pb.lessThan(this.sinT2, 1), function () {\n // Schlick takes the cosine on the less dense side. F0 is symmetric.\n this.$l.cosT = pb.sqrt(pb.max(pb.sub(1, this.sinT2), 0));\n this.f = pb.clamp(\n pb.mul(\n pb.add(WATER_F0, pb.mul(1 - WATER_F0, pb.pow(pb.sub(1, this.cosT), 5))),\n this.reflectionStrength\n ),\n 0,\n 1\n );\n });\n this.$return(this.f);\n });\n this.$l.f = pb.add(WATER_F0, pb.mul(1 - WATER_F0, this.meanFresnel(this.NoV, this.sigmaV)));\n this.$return(pb.clamp(pb.mul(this.f, this.reflectionStrength), 0, 1));\n }\n );\n pb.func(\n 'lightSpecular',\n [\n pb.vec3('lightDir'),\n pb.vec3('eyeVecNorm'),\n pb.vec3('normal'),\n pb.vec3('lightColor'),\n pb.float('roughness')\n ],\n function () {\n this.$l.f0 = pb.vec3(WATER_F0);\n this.$l.f90 = pb.vec3(1);\n this.$l.L = this.lightDir;\n this.$l.V = pb.neg(this.eyeVecNorm);\n this.$l.halfVec = pb.normalize(pb.add(this.L, this.V));\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.L), 0, 1);\n this.$l.specular = pb.vec3(0);\n this.$if(pb.greaterThan(this.NoL, 0), function () {\n this.$l.VoH = pb.clamp(pb.dot(this.V, this.halfVec), 0, 1);\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.V), 0, 1);\n this.$l.F = fresnelSchlick(this, this.VoH, this.f0, this.f90);\n this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);\n this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);\n this.$l.VIS = visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\n this.specular = pb.mul(this.D, this.VIS, this.F, this.lightColor);\n });\n this.$return(this.specular);\n }\n );\n // White foam revealed from a foam texture sample (value, slopes along x\n // and z) by a density, Crest's feathered black point; as (white foam, its\n // slope along x, along z).\n pb.func('waterWhiteFoam', [pb.float('density'), pb.vec3('tex'), pb.float('feather')], function () {\n this.$l.t = pb.clamp(\n pb.div(pb.sub(this.tex.x, pb.sub(1, pb.clamp(this.density, 0, 1))), this.feather),\n 0,\n 1\n );\n this.$return(\n pb.vec3(\n pb.mul(this.t, this.t, pb.sub(3, pb.mul(this.t, 2))),\n pb.mul(this.tex.yz, pb.div(pb.mul(6, this.t, pb.sub(1, this.t)), this.feather))\n )\n );\n });\n pb.func(\n 'waterShading',\n [\n pb.vec3('worldPos'),\n pb.vec3('worldNormal'),\n pb.float('foamFactor'),\n pb.float('crestHeight'),\n pb.vec2('restXZ'),\n pb.vec4('restXZGrad'),\n pb.vec3('foamSample'),\n pb.float('coverage'),\n pb.float('sheetThickness'),\n pb.float('wallFoam'),\n pb.vec4('scenePos'),\n pb.float('groundFoamDensity'),\n pb.vec3('groundFoamSample'),\n pb.vec3('groundNormal'),\n pb.float('groundFoamWeight')\n ],\n function () {\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));\n this.$l.dist = pb.length(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this)));\n const slopeVar = that.unresolvedSlopeVariance(this, this.restXZGrad);\n if (slopeVar) {\n // The generator has already faded the slopes too fine for the pixel\n this.$l.slopeVar = slopeVar;\n this.$l.normal = pb.normalize(this.worldNormal);\n } else {\n this.$l.normalScale = pb.clamp(pb.div(100, this.dist), 0, 1);\n this.$l.normal = pb.normalize(\n pb.mul(this.worldNormal, pb.vec3(this.normalScale, 1, this.normalScale))\n );\n }\n this.$l.roughness = that.waterRoughness(this, this.worldPos, this.restXZGrad);\n this.$l.wPos = this.scenePos;\n this.$l.eyeVec = pb.sub(this.worldPos.xyz, ShaderHelper.getCameraPosition(this));\n this.$l.eyeVecNorm = pb.normalize(this.eyeVec);\n // Mirror-term normal, turned towards the eye on a folded underside.\n // Flipped on the cosine, not on `frontFacing`, which is discontinuous\n // along the fold's triangle edge. `eyeVecNorm` points camera -> surface,\n // so the flip case is the positive dot.\n this.$l.shadingNormal = this.$choice(\n pb.greaterThan(pb.dot(this.normal, this.eyeVecNorm), 0),\n pb.neg(this.normal),\n this.normal\n );\n // Diffuse-term normal, from the unflipped wave normal (the eye-facing\n // flip would point it into the lower hemisphere on any steep back\n // slope), mixed towards up as normal.y falls.\n this.$l.diffuseWeight = pb.smoothStep(0, 0.5, this.normal.y);\n this.$l.diffuseNormal = pb.normalize(pb.mix(pb.vec3(0, 1, 0), this.normal, this.diffuseWeight));\n // Eye below the rest plane, not `!frontFacing`: a choppy fold (J < 0)\n // flips the winding and would read as seen from below.\n this.$l.restLevel = pb.sub(this.worldPos.y, this.crestHeight);\n this.$l.underwaterEye = pb.or(\n pb.lessThan(this.eyeSide, 0),\n pb.and(\n pb.equal(this.eyeSide, 0),\n pb.lessThan(ShaderHelper.getCameraPosition(this).y, this.restLevel)\n )\n );\n this.$l.depth = pb.length(pb.sub(this.wPos.xyz, this.worldPos));\n this.$l.viewPos = pb.mul(ShaderHelper.getViewMatrix(this), pb.vec4(this.worldPos, 1)).xyz;\n this.incidentVec = pb.normalize(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this)));\n this.reflectVecW = pb.reflect(this.incidentVec, this.shadingNormal);\n this.$l.reflectance = pb.vec3();\n this.$l.hitInfo = pb.vec4(0);\n // Trace only rays leaving the surface: up from above, down from below.\n this.$if(\n this.$choice(\n this.underwaterEye,\n pb.lessThan(this.reflectVecW.y, 0),\n pb.greaterThan(this.reflectVecW.y, 0)\n ),\n function () {\n this.reflectVec = pb.mul(ShaderHelper.getViewMatrix(this), pb.vec4(this.reflectVecW, 0)).xyz;\n this.hitInfo = ShaderHelper.getHiZDepthTexture(this)\n ? screenSpaceRayTracing_HiZ(\n this,\n this.viewPos,\n this.reflectVec,\n ShaderHelper.getViewMatrix(this),\n ShaderHelper.getProjectionMatrix(this),\n ShaderHelper.getInvProjectionMatrix(this),\n ShaderHelper.getCameraParams(this).xy,\n pb.int(ShaderHelper.getHiZDepthTextureMipLevelCount(this)),\n this.ssrParams.y,\n this.ssrParams.x,\n this.ssrParams.z,\n pb.vec4(ShaderHelper.getRenderSize(this), ShaderHelper.getHiZDepthTextureSize(this)),\n ShaderHelper.getHiZDepthTexture(this)\n )\n : screenSpaceRayTracing_Linear2D(\n this,\n this.viewPos,\n this.reflectVec,\n ShaderHelper.getViewMatrix(this),\n ShaderHelper.getProjectionMatrix(this),\n ShaderHelper.getInvProjectionMatrix(this),\n ShaderHelper.getCameraParams(this).xy,\n this.ssrParams.x,\n this.ssrParams.y,\n this.ssrParams.z,\n this.ssrParams.w,\n pb.vec4(ShaderHelper.getRenderSize(this), ShaderHelper.getLinearDepthTextureSize(this)),\n ShaderHelper.getLinearDepthTexture(this)\n );\n }\n );\n this.$l.refl = pb.reflect(\n pb.normalize(pb.sub(this.worldPos, ShaderHelper.getCameraPosition(this))),\n this.shadingNormal\n );\n // Fallback where the trace misses. From above: the sky, with the\n // reflection y floored so grazing rays do not read the bake's black\n // lower hemisphere. From below: the medium's asymptotic colour\n // albedo * ambient, the d -> inf limit of the underwater pass.\n this.$l.reflMiss = pb.vec3();\n this.$if(this.underwaterEye, function () {\n this.$l.downwelling = ShaderHelper.sampleBakedSkyPreExposed(this, pb.vec3(0, 1, 0));\n this.reflMiss = pb.mul(this.mediumAlbedo, this.downwelling);\n }).$else(function () {\n this.refl.y = pb.max(this.refl.y, HORIZON_REFLECT_BIAS);\n this.refl = pb.normalize(this.refl);\n // The mirror image of the visible sky, at its on-screen scale: the bake\n // brought to the live exposure without the environment light's\n // strength, which dims the IBL and not the sky itself.\n this.reflMiss = pb.mul(\n pb.textureSampleLevel(ShaderHelper.getBakedSkyTexture(this), this.refl, 0).rgb,\n this.skyReflectScale\n );\n if (envLight?.hasRadiance()) {\n // Blurred as the distant normals are: the prefiltered radiance at\n // the surface's roughness, in the same pre-exposed space\n this.$l.skyBlur = pb.smoothStep(SKY_PREFILTER_START, SKY_PREFILTER_FULL, this.roughness);\n this.$if(pb.greaterThan(this.skyBlur, 0), function () {\n this.reflMiss = pb.mix(\n this.reflMiss,\n pb.mul(envLight.getRadiance(this, this.refl, this.roughness)!.rgb, this.skyReflectScale),\n this.skyBlur\n );\n });\n }\n });\n // The traced reflection blurred by roughness as Uludag's cone-traced\n // reflections blur it (\"Hi-Z Screen-Space Cone-Traced Reflections\",\n // GPU Pro 5, 2014): the lobe as a cone of half angle\n // acos(0.244^(1 / (n + 1))) for a Phong power n, here\n // n = 2 / alpha^2 - 2 for the GGX alpha (Walter et al., \"Microfacet\n // Models for Refraction through Rough Surfaces\", EGSR 2007); its\n // footprint where the ray hits the radius of the circle inscribed in\n // the isosceles triangle of the cone over the screen-space ray, in\n // pixels; and the scene colour read at the level of that radius\n this.$l.alpha = pb.mul(this.roughness, this.roughness);\n this.$l.phongPower = pb.max(pb.sub(pb.div(2, pb.max(pb.mul(this.alpha, this.alpha), 1e-6)), 2), 0);\n this.$l.coneCos = pb.pow(0.244, pb.div(1, pb.add(this.phongPower, 1)));\n this.$l.coneTan = pb.div(\n pb.sqrt(pb.max(pb.sub(1, pb.mul(this.coneCos, this.coneCos)), 0)),\n pb.max(this.coneCos, 1e-4)\n );\n this.$l.coneBase = pb.mul(2, this.coneTan, this.hitInfo.z);\n this.$l.coneRadius = pb.div(\n pb.mul(\n this.coneBase,\n pb.sub(\n pb.sqrt(\n pb.add(pb.mul(this.coneBase, this.coneBase), pb.mul(4, this.hitInfo.z, this.hitInfo.z))\n ),\n this.coneBase\n )\n ),\n pb.max(pb.mul(4, this.hitInfo.z), 1e-4)\n );\n this.$l.reflectLod = pb.clamp(pb.log2(pb.max(this.coneRadius, 1)), 0, REFRACT_BLUR_MAX_LOD);\n this.reflectance = pb.mix(\n this.reflMiss,\n pb.textureSampleLevel(ShaderHelper.getSceneColorTexture(this), this.hitInfo.xy, this.reflectLod)\n .rgb,\n this.hitInfo.w\n );\n this.$l.refractInfo = that.waterRefraction(\n this,\n this.worldPos,\n this.normal,\n this.eyeVecNorm,\n this.screenUV,\n this.viewPos.z,\n this.wPos.w,\n this.wPos.xyz,\n this.depth,\n this.underwaterEye\n );\n this.$l.refractUV = this.refractInfo.xy;\n // Medium path is the refracted length, not the straight line.\n this.depth = this.refractInfo.z;\n // Zero from below: the column the eye is inside belongs to the\n // Underwater pass, and charging it twice smears the Snell window.\n this.$l.mediumPath = this.$choice(this.underwaterEye, pb.float(0), this.depth);\n // Blur LOD: log2 in path length (each mip doubles the width), driven by\n // scattering rather than extinction (absorption darkens without blurring).\n this.$l.refractBlur = pb.log2(\n pb.add(1, pb.mul(this.mediumPath, pb.add(REFRACT_BLUR_GEOMETRIC, this.refractBlurDensity)))\n );\n this.$l.refraction = pb.textureSampleLevel(\n ShaderHelper.getSceneColorTexture(this),\n this.refractUV,\n pb.clamp(this.refractBlur, 0, REFRACT_BLUR_MAX_LOD)\n ).rgb;\n this.$l.refractionRaw = this.refraction;\n this.$l.absorption = this.getAbsorption(this.mediumPath);\n this.refraction = pb.mul(this.refraction, this.absorption);\n this.$l.viewXZ = pb.neg(this.eyeVecNorm.xz);\n if (slopeVar) {\n // Variance of the slopes the normal no longer shows along the view\n // direction, as Bruneton's MeanFresnel takes it\n this.$l.sigmaV = pb.sqrt(\n pb.max(\n pb.div(\n pb.add(\n pb.mul(this.viewXZ.x, this.viewXZ.x, this.slopeVar.x),\n pb.mul(this.viewXZ.y, this.viewXZ.y, this.slopeVar.y),\n pb.mul(this.viewXZ.x, this.viewXZ.y, this.slopeVar.z, 2)\n ),\n pb.max(pb.dot(this.viewXZ, this.viewXZ), 1e-6)\n ),\n 0\n )\n );\n } else {\n // Variance of the slopes the flattened normal no longer shows, (1 - k^2)\n // of the sea's for a slope scaled by k, along the view direction in wind\n // space as Bruneton's MeanFresnel takes it\n this.$l.viewWind = pb.vec2(\n pb.dot(this.viewXZ, this.unresolvedSlope.xy),\n pb.dot(this.viewXZ, pb.vec2(pb.neg(this.unresolvedSlope.y), this.unresolvedSlope.x))\n );\n this.$l.viewWindT = pb.div(\n pb.mul(this.viewWind, this.viewWind),\n pb.max(pb.dot(this.viewXZ, this.viewXZ), 1e-6)\n );\n this.$l.sigmaV = pb.sqrt(\n pb.mul(\n pb.dot(this.viewWindT, this.unresolvedSlope.zw),\n pb.sub(1, pb.mul(this.normalScale, this.normalScale))\n )\n );\n }\n this.$l.fresnelTerm = this.fresnel(\n this.shadingNormal,\n pb.neg(this.eyeVecNorm),\n this.underwaterEye,\n this.sigmaV\n );\n // Foam density from the wave generator: crests, wakes, breaking shore waves\n this.$l.crestDensity = pb.clamp(\n pb.mul(pb.pow(pb.clamp(this.foamFactor, 0, 1), this.foamShadingParams.y), this.foamShadingParams.x),\n 0,\n 1\n );\n this.$l.crestWhite = this.waterWhiteFoam(this.crestDensity, this.foamSample, this.foamLookParams.x);\n // Wall foam, cut from the same texture by its own density: whole against\n // the wall, fraying as it thins. Its strength scales opacity after the cut.\n this.$l.wallDensity = pb.clamp(this.wallFoam, 0, 1);\n this.$l.wallCut = this.waterWhiteFoam(this.wallDensity, this.foamSample, this.foamLookParams.x);\n this.$l.wallWhite = pb.mul(this.wallCut.x, this.foamShadingParams.z);\n // The two layers combine as independent covers.\n this.$l.foam = pb.sub(1, pb.mul(pb.sub(1, this.crestWhite.x), pb.sub(1, this.wallWhite)));\n this.$l.foamGrad = pb.add(\n pb.mul(this.crestWhite.yz, pb.sub(1, this.wallWhite)),\n pb.mul(this.wallCut.yz, this.foamShadingParams.z, pb.sub(1, this.crestWhite.x))\n );\n this.$l.bubbleDensity = pb.sub(\n 1,\n pb.mul(pb.sub(1, this.crestDensity), pb.sub(1, pb.mul(this.wallDensity, this.foamShadingParams.z)))\n );\n // Normal of the white foam's relief: Crest differences the cut over a\n // quarter texel per metre of view depth, which keeps the relief at a\n // distance; the slope times that step here\n this.$l.foamStep = pb.mul(this.dist, 0.25, foamTexelSize(this, this.foamTex, this.foamUVScale));\n this.$l.foamNormal = pb.normalize(\n pb.add(\n this.diffuseNormal,\n pb.mul(\n pb.vec3(pb.neg(this.foamGrad.x), 0, pb.neg(this.foamGrad.y)),\n this.foamLookParams.y,\n this.foamStep\n )\n )\n );\n // The white foam covers the water, its mirror and what is seen through\n // it alike, as Crest lays it over the finished water colour\n // (lerp(col, whiteFoam, a)): both only on the share without foam.\n // `bodyWeight`, the exit transmission on that share, weighs the\n // refraction and every body term below.\n this.$l.waterShare = pb.sub(1, this.foam);\n this.$l.bodyWeight = pb.mul(pb.sub(1, this.fresnelTerm), this.waterShare);\n this.fresnelTerm = pb.mul(this.fresnelTerm, this.waterShare);\n this.$l.finalColor = pb.add(\n pb.mul(this.refraction, this.bodyWeight),\n pb.mul(this.reflectance, this.fresnelTerm)\n );\n // Prefer the wave generator's own ground for the thickness of thin swash.\n this.$l.edgeThickness = this.$choice(\n pb.greaterThanEqual(this.sheetThickness, 0),\n this.sheetThickness,\n // Sky reconstructs to the far plane, which can lie above an infinite\n // surface. With no bottom there, keep the water and foam fully visible.\n this.$choice(\n pb.greaterThanEqual(this.wPos.w, SCENE_SKY_DEPTH01),\n pb.max(this.edgeFadeWidth, 1e-4),\n pb.sub(this.worldPos.y, this.wPos.y)\n )\n );\n this.$l.foamFade = pb.mul(\n this.$choice(\n pb.greaterThanEqual(this.sheetThickness, 0),\n pb.float(1),\n this.$choice(\n pb.greaterThan(this.edgeFadeWidth, 0),\n pb.smoothStep(\n 0,\n pb.max(pb.mul(this.edgeFadeWidth, FOAM_EDGE_FADE_SHARE), 1e-4),\n this.edgeThickness\n ),\n pb.float(1)\n )\n ),\n this.coverage\n );\n // Light the foam sends back, kept apart so the edge fade below can keep\n // the foam on a sheet too thin to show the water\n this.$l.foamRadiance = pb.vec3(0);\n this.$l.groundFoamOpacity = pb.float(0);\n this.$l.groundFoamRadiance = pb.vec3(0);\n if (hasGroundFoam) {\n this.$if(pb.greaterThan(this.groundFoamDensity, 1e-3), function () {\n this.$l.groundFoamWhite = this.waterWhiteFoam(\n pb.clamp(\n pb.mul(pb.pow(this.groundFoamDensity, this.foamShadingParams.y), this.foamShadingParams.x),\n 0,\n 1\n ),\n this.groundFoamSample,\n this.foamLookParams.x\n );\n this.groundFoamOpacity = this.groundFoamWhite.x;\n });\n // The carrier P can still foam while its projected ground Q is dry.\n // Keep that visible cover through the handoff; once P drains, only\n // the ground foam remains. Set opacity before lighting both covers.\n this.groundFoamOpacity = pb.max(this.groundFoamOpacity, pb.mul(this.foam, this.foamFade));\n }\n // Debug accumulators. Dead in the `none` variant.\n this.$l.dbgSubsurface = pb.vec3(0);\n this.$l.dbgSunScatter = pb.vec3(0);\n this.$l.dbgShadow = pb.vec3(1);\n this.$l.dbgSpecular = pb.vec3(0);\n // Subsurface crest gate, after Ceto: the lit wall thins with height,\n // path = max(floor, exp(-softplus(h / H))), gate = exp(-sigma_t *\n // scale * path). On the vertex displacement, not the normal tilt,\n // which is zero at the crest and carries every ripple.\n this.$l.sssT = pb.div(this.crestHeight, this.subsurfaceParams.y);\n // softplus in the overflow-safe form max(t,0) + w*log(1+exp(-|t|/w)).\n this.$l.sssRise = pb.add(\n pb.max(this.sssT, 0),\n pb.mul(\n SSS_HEIGHT_SOFTNESS,\n pb.log(pb.add(1, pb.exp(pb.div(pb.neg(pb.abs(this.sssT)), SSS_HEIGHT_SOFTNESS))))\n )\n );\n this.$l.sssPath = pb.max(pb.exp(pb.neg(this.sssRise)), SSS_CREST_PATH_FLOOR);\n this.$l.sssThickness = pb.exp(\n pb.neg(pb.mul(this.mediumExtinction, pb.mul(this.sssPath, SSS_ABSORPTION_SCALE)))\n );\n // For the debug views that rebuild the sun terms outside the loop.\n this.dbgLightDir = pb.vec3(0, 1, 0);\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\n this.$l.lightAtten = that.calculateLightAttenuation(\n this,\n type,\n this.worldPos,\n posRange,\n dirCutoff,\n extra\n );\n this.$l.lightDir = that.calculateLightDirection(\n this,\n type,\n this.worldPos,\n posRange,\n dirCutoff,\n extra\n );\n this.dbgLightDir = this.lightDir;\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\n this.$l.NoLdiffuse = pb.clamp(pb.dot(this.diffuseNormal, this.lightDir), 0, 1);\n // From the raw cosine, so a lee slope below zero still wraps up.\n this.$l.NoLfoam = pb.clamp(\n pb.div(pb.add(pb.dot(this.foamNormal, this.lightDir), FOAM_LIGHT_WRAP), 1 + FOAM_LIGHT_WRAP),\n 0,\n 1\n );\n this.$l.lightEnergy = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\n this.$l.specularTerm = pb.vec3(0);\n // A rect light's mirror image is the rect itself: integrate the GGX\n // lobe over it with LTC, as the PBR materials do. One direction would\n // shrink it to a point highlight on a surface this smooth.\n this.$if(pb.equal(type, LIGHT_TYPE_RECT), function () {\n this.$l.rectTerms = evaluateLTCRectLightTerms(\n this,\n this.worldPos,\n this.shadingNormal,\n pb.neg(this.eyeVecNorm),\n this.roughness,\n posRange,\n dirCutoff.xyz,\n extra.xyz\n );\n this.specularTerm = pb.mul(\n colorIntensity.rgb,\n colorIntensity.a,\n this.rectTerms.x,\n pb.add(pb.mul(this.rectTerms.y, WATER_F0), pb.mul(this.rectTerms.z, 1 - WATER_F0))\n );\n }).$else(function () {\n this.specularTerm = this.lightSpecular(\n this.lightDir,\n this.eyeVecNorm,\n this.shadingNormal,\n this.lightEnergy,\n this.roughness\n );\n });\n this.$l.lightContrib = this.specularTerm;\n // Backlit-crest subsurface, after Ceto: grazing^2 * (view ray mirrored\n // in the rest plane, against the sun)^4 * sun-above-horizon fade.\n // Both cosines are floored.\n this.$l.sssToEye = pb.neg(this.eyeVecNorm);\n this.$l.sssGrazing = pb.sub(1, pb.clamp(this.sssToEye.y, 0, 1));\n this.sssGrazing = pb.mix(SSS_GRAZING_FLOOR, 1, pb.mul(this.sssGrazing, this.sssGrazing));\n this.$l.sssMirror = pb.reflect(this.sssToEye, pb.vec3(0, 1, 0));\n this.$l.sssAlign = pb.clamp(pb.dot(pb.neg(this.sssMirror), this.lightDir), 0, 1);\n this.sssAlign = pb.mul(this.sssAlign, this.sssAlign);\n this.sssAlign = pb.mix(SSS_SUN_ALIGN_FLOOR, 1, pb.mul(this.sssAlign, this.sssAlign));\n this.$l.sssSunUp = pb.smoothStep(0, 0.1, this.lightDir.y);\n this.$l.sssFacing = pb.mul(this.sssGrazing, this.sssAlign, this.sssSunUp);\n // Scaled by the light colour as in Crest, and by 1 / pi like the other\n // diffuse terms. Directional lights only; carries `bodyWeight`.\n this.$l.subsurfaceTerm = pb.vec3(0);\n this.$if(pb.equal(type, LIGHT_TYPE_DIRECTIONAL), function () {\n this.subsurfaceTerm = pb.mul(\n this.subsurfaceTint,\n this.lightEnergy,\n pb.mul(this.sssFacing, this.sssThickness, this.subsurfaceParams.x, 1 / Math.PI),\n this.bodyWeight\n );\n this.lightContrib = pb.add(this.lightContrib, this.subsurfaceTerm);\n });\n // Directional only (the integral assumes a parallel beam) and from\n // above only.\n this.$l.sunScatterTerm = pb.vec3(0);\n this.$if(pb.and(pb.equal(type, LIGHT_TYPE_DIRECTIONAL), pb.not(this.underwaterEye)), function () {\n this.sunScatterTerm = pb.mul(\n that.waterSunScattering(\n this,\n this.lightEnergy,\n this.lightDir,\n this.eyeVecNorm,\n this.NoLdiffuse,\n this.depth,\n this.foam\n ),\n this.bodyWeight\n );\n this.lightContrib = pb.add(this.lightContrib, this.sunScatterTerm);\n });\n // Foam as a matte layer, with Crest's narrow glint off its relief.\n this.$l.foamGlint = pb.mul(\n pb.pow(\n pb.max(pb.dot(pb.reflect(this.eyeVecNorm, this.foamNormal), this.lightDir), 0),\n FOAM_SPECULAR_POWER\n ),\n FOAM_SPECULAR_BOOST\n );\n this.$l.foamLight = pb.mul(\n this.lightEnergy,\n this.foam,\n pb.add(pb.mul(this.foamColor, this.NoLfoam, 1 / Math.PI), pb.vec3(this.foamGlint))\n );\n this.lightContrib = pb.add(this.lightContrib, this.foamLight);\n this.$l.shadow = pb.vec3(1);\n if (shadow) {\n // +Y, not the wave normal, which would jitter the lookup per pixel.\n this.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, pb.vec3(0, 1, 0), this.NoL));\n this.lightContrib = pb.mul(this.lightContrib, this.shadow);\n }\n this.foamRadiance = pb.add(this.foamRadiance, pb.mul(this.foamLight, this.shadow));\n if (hasGroundFoam) {\n this.$if(pb.greaterThan(this.groundFoamOpacity, 0), function () {\n this.$l.groundNoL = pb.clamp(\n pb.div(\n pb.add(pb.dot(this.groundNormal, this.lightDir), FOAM_LIGHT_WRAP),\n 1 + FOAM_LIGHT_WRAP\n ),\n 0,\n 1\n );\n this.$l.groundShadow = pb.vec3(1);\n if (shadow) {\n this.groundShadow = pb.vec3(\n that.calculateShadow(this, this.wPos.xyz, this.groundNormal, this.groundNoL)\n );\n }\n this.groundFoamRadiance = pb.add(\n this.groundFoamRadiance,\n pb.mul(\n this.lightEnergy,\n this.foamColor,\n this.groundNoL,\n this.groundShadow,\n this.groundFoamOpacity,\n 1 / Math.PI\n )\n );\n });\n }\n this.finalColor = pb.add(this.finalColor, this.lightContrib);\n this.dbgSubsurface = pb.add(this.dbgSubsurface, pb.mul(this.subsurfaceTerm, this.shadow));\n this.dbgSunScatter = pb.add(this.dbgSunScatter, pb.mul(this.sunScatterTerm, this.shadow));\n this.dbgShadow = pb.min(this.dbgShadow, this.shadow);\n this.dbgSpecular = pb.add(this.dbgSpecular, pb.mul(this.specularTerm, this.shadow));\n });\n if (that.needCalculateEnvLight()) {\n this.$l.irradiance = that.getEnvLightIrradiance(this, this.diffuseNormal);\n // On `mediumPath`, so zero from below. The foam term is unconditional.\n this.$l.sss = pb.mul(\n this.getScattering(this.mediumPath),\n this.irradiance,\n this.bodyWeight,\n 1 / Math.PI\n );\n this.finalColor = pb.add(this.finalColor, this.sss);\n this.$l.foamAmbient = pb.mul(this.irradiance, this.foamColor, this.foam, 1 / Math.PI);\n this.finalColor = pb.add(this.finalColor, this.foamAmbient);\n this.foamRadiance = pb.add(this.foamRadiance, this.foamAmbient);\n if (hasGroundFoam) {\n this.groundFoamRadiance = pb.add(\n this.groundFoamRadiance,\n pb.mul(\n that.getEnvLightIrradiance(this, this.groundNormal),\n this.foamColor,\n this.groundFoamOpacity,\n 1 / Math.PI\n )\n );\n }\n // Bubbles under the white foam, part of the water body as in Crest,\n // so under the white foam and the mirror: the foam texture blurred and\n // shifted by parallax, as seen at a depth under the surface\n this.$if(pb.greaterThan(this.bubbleDensity, 0), function () {\n this.$l.toEye = pb.neg(this.eyeVecNorm);\n this.$l.bubbleShift = pb.div(\n pb.mul(this.toEye.xz, pb.neg(this.foamLookParams.w)),\n pb.max(pb.dot(this.diffuseNormal, this.toEye), 0.1)\n );\n this.$l.bubbleTex = sampleFoamTexture(\n this,\n this.foamTex,\n pb.mul(\n pb.add(\n this.restXZ,\n this.bubbleShift,\n pb.vec2(pb.mul(ShaderHelper.getElapsedTime(this), FOAM_DRIFT))\n ),\n this.foamUVScale\n ),\n this.restXZGrad,\n this.foamUVScale,\n FOAM_BUBBLE_MIP_SCALE,\n false\n ).x;\n this.finalColor = pb.add(\n this.finalColor,\n pb.mul(\n this.irradiance,\n this.foamBubbleColor,\n this.bubbleTex,\n pb.clamp(pb.mul(this.bubbleDensity, this.foamLookParams.z), 0, 1),\n this.bodyWeight,\n 1 / Math.PI\n )\n );\n });\n }\n // A thin sheet fades into the scene behind it. Where the generator\n // knows the wet edge, its coverage keeps foam visible on even a\n // millimetre-thick sheet; elsewhere foam fades by the measured depth.\n this.$if(pb.not(this.underwaterEye), function () {\n this.$l.edgeFade = pb.mul(\n this.$choice(\n pb.greaterThan(this.edgeFadeWidth, 0),\n pb.smoothStep(0, pb.max(this.edgeFadeWidth, 1e-4), this.edgeThickness),\n pb.float(1)\n ),\n this.coverage\n );\n this.$if(pb.lessThan(this.edgeFade, 1), function () {\n this.$l.behind = pb.textureSampleLevel(\n ShaderHelper.getSceneColorTexture(this),\n this.screenUV,\n 0\n ).rgb;\n // finalColor = water (on the share without foam) + foam light: the\n // water fades into what is behind, under the foam\n this.finalColor = pb.add(\n pb.mix(\n pb.mul(this.behind, pb.sub(1, pb.mul(this.foam, this.foamFade))),\n pb.sub(this.finalColor, this.foamRadiance),\n this.edgeFade\n ),\n pb.mul(this.foamRadiance, this.foamFade)\n );\n });\n if (hasGroundFoam) {\n this.$if(pb.greaterThan(this.groundFoamWeight, 0), function () {\n this.$l.groundBehind = pb.textureSampleLevel(\n ShaderHelper.getSceneColorTexture(this),\n this.screenUV,\n 0\n ).rgb;\n // One crossfade between complete covers. Attenuating the mobile\n // foam before overlaying ground foam applies this weight twice\n // and exposes sand in the middle even if both covers are white.\n this.$l.groundColor = pb.add(\n pb.mul(this.groundBehind, pb.sub(1, this.groundFoamOpacity)),\n this.groundFoamRadiance\n );\n this.finalColor = pb.mix(this.finalColor, this.groundColor, this.groundFoamWeight);\n });\n }\n });\n switch (debugOutput) {\n case 'normal':\n this.$if(pb.lessThan(this.diffuseNormal.y, 0.01), function () {\n this.$return(pb.vec3(1, 0, 0));\n }).$else(function () {\n this.$return(pb.add(pb.mul(this.diffuseNormal, 0.5), pb.vec3(0.5)));\n });\n break;\n case 'foam':\n this.$return(pb.vec3(pb.mix(this.foam, this.groundFoamOpacity, this.groundFoamWeight)));\n break;\n case 'swashFoamCuts':\n this.$return(pb.vec3(this.foam, this.groundFoamOpacity, this.groundFoamWeight));\n break;\n case 'waterDepth':\n this.$return(pb.vec3(pb.mul(pb.max(pb.sub(this.worldPos.y, this.wPos.y), 0), 0.1)));\n break;\n case 'fresnel':\n this.$return(pb.vec3(this.fresnelTerm));\n break;\n case 'reflection':\n this.$return(this.reflectance);\n break;\n case 'refraction':\n this.$return(this.refractionRaw);\n break;\n case 'absorption':\n this.$return(this.absorption);\n break;\n case 'scattering':\n this.$return(this.sss);\n break;\n case 'sunScattering':\n this.$return(this.dbgSunScatter);\n break;\n case 'subsurface':\n this.$return(this.dbgSubsurface);\n break;\n case 'subsurfaceThickness':\n this.$return(pb.vec3(this.sssThickness));\n break;\n case 'shadow':\n this.$return(this.dbgShadow);\n break;\n case 'specular':\n this.$return(this.dbgSpecular);\n break;\n case 'depth':\n this.$return(pb.vec3(pb.mul(this.depth, 0.1)));\n break;\n default:\n this.$return(this.finalColor);\n }\n }\n );\n return scope.waterShading(\n worldPos,\n worldNormal,\n foamFactor,\n crestHeight,\n restXZ,\n restXZGrad,\n foamSample,\n coverage,\n sheetThickness,\n wallFoam,\n scenePos,\n groundFoamDensity,\n groundFoamSample,\n groundNormal,\n groundFoamWeight\n );\n }\n applyUniforms(bindGroup: BindGroup, ctx: DrawContext, needUpdate: boolean, pass: number) {\n super.applyUniforms(bindGroup, ctx, needUpdate, pass);\n const waveGenerator = this._effectiveWaveGenerator;\n // Per bind group: the material owns one per pass/variant hash.\n const lastWritten = this._waveVersionByBindGroup.get(bindGroup) ?? -1;\n if (waveGenerator && lastWritten !== waveGenerator.version) {\n waveGenerator.applyWaterBindGroup(bindGroup);\n this._waveVersionByBindGroup.set(bindGroup, waveGenerator.version);\n }\n }\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\n super.applyUniformValues(bindGroup, ctx, pass);\n bindGroup.setValue('clipmapGridInfo', this._clipmapGridInfo);\n if (this.infinite) {\n bindGroup.setValue('skirtDistance', this._skirtDistance);\n } else {\n bindGroup.setValue('region', this._region);\n }\n if (this.needFragmentColor(ctx)) {\n bindGroup.setValue('refractionScale', this._refractionScale);\n if (this.refractionMode === 'offset') {\n bindGroup.setValue('cheapRefractionDepth', this._cheapRefractionDepth);\n }\n bindGroup.setValue('reflectionStrength', this._reflectionStrength);\n const wind = this._waveGenerator.get()?.wind;\n const windSpeed = wind ? Math.hypot(wind.x, wind.y) : 0;\n this._unresolvedSlope.setXYZW(\n windSpeed > 0 ? wind!.x / windSpeed : 1,\n windSpeed > 0 ? wind!.y / windSpeed : 0,\n COX_MUNK_UPWIND * windSpeed,\n COX_MUNK_CROSSWIND_BASE + COX_MUNK_CROSSWIND * windSpeed\n );\n bindGroup.setValue('unresolvedSlope', this._unresolvedSlope);\n bindGroup.setValue(\n 'skyReflectScale',\n ctx.scene.lightingMode === 'physical' ? ShaderHelper.getPreExposure(ctx) / PHYSICAL_BAKE_EXPOSURE : 1\n );\n bindGroup.setValue('ssrParams', this._ssrParams);\n const eyeUnder = ctx.underwater;\n bindGroup.setValue('eyeSide', eyeUnder ? (eyeUnder.material === this ? -1 : 0) : 1);\n this._subsurfaceParams.setXYZW(this._subsurfaceIntensity, this._subsurfaceCrestHeight, 0, 0);\n bindGroup.setValue('subsurfaceParams', this._subsurfaceParams);\n bindGroup.setValue('subsurfaceTint', this._subsurfaceTint);\n this._foamParams.setXYZW(\n this._foamAmount,\n this._foamFalloff,\n this._shoreWaves.height > 0 ? this._shoreWaves.wallFoamStrength! : 0,\n 0\n );\n bindGroup.setValue('foamShadingParams', this._foamParams);\n bindGroup.setValue('foamColor', this._foamColor);\n this._foamLookParams.setXYZW(\n this._foamFeather,\n this._foamNormalStrength,\n this._foamBubbleCoverage,\n this._foamBubbleDepth\n );\n bindGroup.setValue('foamLookParams', this._foamLookParams);\n bindGroup.setValue('foamBubbleColor', this._foamBubbleColor);\n bindGroup.setTexture(\n 'foamTex',\n this.foamTexture ?? getDefaultFoamTexture(),\n fetchSampler('repeat_linear')\n );\n bindGroup.setValue('foamUVScale', 1 / this._foamTextureSize);\n bindGroup.setValue('edgeFadeWidth', this._edgeFadeWidth);\n bindGroup.setValue('mediumAlbedo', this._scatterAlbedo);\n bindGroup.setValue('mediumExtinction', this._extinction);\n bindGroup.setTexture('zLTCMatLut', getLTCMatLUT());\n bindGroup.setTexture('zLTCAmpLut', getLTCAmpLUT());\n this._sunScatterParams.setXYZW(this._sunScatteringIntensity, this._scatterAnisotropy, 0, 0);\n bindGroup.setValue('sunScatterParams', this._sunScatterParams);\n // Luminance-weighted scalar: one blur LOD serves all three channels.\n bindGroup.setValue(\n 'refractBlurDensity',\n (0.2126 * this._scattering.x + 0.7152 * this._scattering.y + 0.0722 * this._scattering.z) *\n this._scatteringScale *\n REFRACT_BLUR_DENSITY *\n this._refractionBlur\n );\n }\n if (this.waveGenerator) {\n this.waveGenerator.applyWaterBindGroup(bindGroup);\n }\n }\n needUpdate() {\n return (\n !!this._waveGenerator.get()?.needUpdate() || !!this._interaction.get() || !!this._shoreWaveGenerator\n );\n }\n /**\n * Crest to trough height in metres of the waves rolling in to the shore and\n * running up the beach, 0 for none. See {@link ShoreWaveGenerator}. Needs\n * the scene signed distance field (WebGPU); without it the waves are off.\n */\n get shoreWaveHeight() {\n return this._shoreWaves.height;\n }\n set shoreWaveHeight(val: number) {\n val = Math.max(0, val);\n const wasOn = this._shoreWaves.height > 0;\n this._shoreWaves.height = val;\n if (wasOn !== val > 0) {\n this._rebuildEffectiveWaveGenerator();\n }\n }\n /** Distance in metres between shore wave crests at the outer edge of their zone; they bunch up towards the shore. */\n get shoreWaveLength() {\n return this._shoreWaves.wavelength;\n }\n set shoreWaveLength(val: number) {\n this._shoreWaves.wavelength = Math.max(0.5, val);\n }\n /** Seconds between successive shore waves. */\n get shoreWavePeriod() {\n return this._shoreWaves.period;\n }\n set shoreWavePeriod(val: number) {\n this._shoreWaves.period = Math.max(0.5, val);\n }\n /** How far out from the waterline the shore waves rise, in metres. */\n get shoreWaveZone() {\n return this._shoreWaves.zone;\n }\n set shoreWaveZone(val: number) {\n this._shoreWaves.zone = Math.max(1, val);\n }\n /** How sharp the shore wave crests become at the shore, 0 for a sine and towards 1 for a cusp. */\n get shoreWaveSharpness() {\n return this._shoreWaves.sharpness;\n }\n set shoreWaveSharpness(val: number) {\n this._shoreWaves.sharpness = Math.min(Math.max(val, 0), 0.95);\n }\n /** How far the shore wave crests lean towards the shore there, 0 for upright, 1 for a steep front face. */\n get shoreWaveLean() {\n return this._shoreWaves.lean;\n }\n set shoreWaveLean(val: number) {\n this._shoreWaves.lean = Math.min(Math.max(val, 0), 1);\n }\n /** How irregular the shore waves are, 0..1: 0 for parallel crests a fixed wavelength apart, higher for each wave with a period and a bend of its own. */\n get shoreWaveIrregularity() {\n return this._shoreWaves.irregularity!;\n }\n set shoreWaveIrregularity(val: number) {\n this._shoreWaves.irregularity = Math.min(Math.max(val, 0), 1);\n }\n /** How fast the foam fades, per second (Crest's Foam Fade Rate): lower leaves longer trails behind breaking waves. */\n get foamFadeRate() {\n return this._foamField.fadeRate;\n }\n set foamFadeRate(val: number) {\n this._foamField.fadeRate = val;\n }\n /** How much foam the open water's breaking crests leave behind to drift and fade; 0 keeps foam only while a crest breaks. */\n get foamTrailStrength() {\n return this._foamField.baseStrength;\n }\n set foamTrailStrength(val: number) {\n this._foamField.baseStrength = val;\n }\n /** Share of the wind speed the foam drifts at, about 0.03 in nature. */\n get foamDrift() {\n return this._foamField.drift;\n }\n set foamDrift(val: number) {\n this._foamField.drift = val;\n }\n /** Side in metres of the finest square of water around the view whose foam lingers, in the most detail; coarser squares reach eight times as far, beyond which foam shows only while crests break. */\n get foamFieldSize() {\n return this._foamField.size;\n }\n set foamFieldSize(val: number) {\n this._foamField.size = val;\n }\n /** How much foam the breaking shore waves make (Crest's Wave Foam Strength). */\n get shoreWaveFoamStrength() {\n return this._shoreWaves.waveFoamStrength!;\n }\n set shoreWaveFoamStrength(val: number) {\n this._shoreWaves.waveFoamStrength = Math.max(0, val);\n }\n /** How much of the shore waves makes foam, 0..1, higher for more (Crest's Wave Foam Coverage). */\n get shoreWaveFoamCoverage() {\n return this._shoreWaves.waveFoamCoverage!;\n }\n set shoreWaveFoamCoverage(val: number) {\n this._shoreWaves.waveFoamCoverage = Math.min(Math.max(val, 0), 1);\n }\n /** Water shallower than this many metres makes foam (Crest's Shoreline Foam Max Depth). */\n get shoreWaveShallowFoamDepth() {\n return this._shoreWaves.shorelineFoamMaxDepth!;\n }\n set shoreWaveShallowFoamDepth(val: number) {\n this._shoreWaves.shorelineFoamMaxDepth = Math.max(0.01, val);\n }\n /** How much foam shallow water makes (Crest's Shoreline Foam Strength). */\n get shoreWaveShallowFoamStrength() {\n return this._shoreWaves.shorelineFoamStrength!;\n }\n set shoreWaveShallowFoamStrength(val: number) {\n this._shoreWaves.shorelineFoamStrength = Math.max(0, val);\n }\n /** How opaque the foam is that the water makes against walls, rocks and piers standing in it, 0..1; it always rings them whole. */\n get wallFoamStrength() {\n return this._shoreWaves.wallFoamStrength!;\n }\n set wallFoamStrength(val: number) {\n this._shoreWaves.wallFoamStrength = Math.min(Math.max(val, 0), 1);\n this.uniformChanged();\n }\n /** Speed in metres per second the water has to hit a wall at before it makes any foam there. */\n get wallFoamMinSpeed() {\n return this._shoreWaves.wallFoamMinSpeed!;\n }\n set wallFoamMinSpeed(val: number) {\n this._shoreWaves.wallFoamMinSpeed = Math.max(0, val);\n }\n /** Speed in metres per second at which water hitting a wall makes the most foam. */\n get wallFoamMaxSpeed() {\n return this._shoreWaves.wallFoamMaxSpeed!;\n }\n set wallFoamMaxSpeed(val: number) {\n this._shoreWaves.wallFoamMaxSpeed = Math.max(0.01, val);\n }\n /** Speed in metres per second the foam drifts out from walls, rocks and piers at: higher for a wider ring of foam around them. */\n get wallFoamDrift() {\n return this._shoreWaves.wallFoamDrift!;\n }\n set wallFoamDrift(val: number) {\n this._shoreWaves.wallFoamDrift = Math.max(0, val);\n }\n /**\n * Seconds the foam each breaking wave brings in lasts: higher for longer\n * white trails behind the crests and foam that stays on the swash all the\n * way up the beach, lower for brief flashes of white at the crests.\n */\n get surfFoamDuration() {\n return this._shoreWaves.surfFoamDuration!;\n }\n set surfFoamDuration(val: number) {\n this._shoreWaves.surfFoamDuration = Math.max(0.05, val);\n }\n /**\n * Water depth in metres at and below which foam stops drifting and stays\n * where it is: higher to leave foam lying over a wider band of the shallows\n * and the beach, lower to let it drift until the water is almost gone.\n */\n get foamSettleDepth() {\n return this._shoreWaves.foamSettleDepth!;\n }\n set foamSettleDepth(val: number) {\n this._shoreWaves.foamSettleDepth = Math.max(0, val);\n }\n /**\n * Water depth in metres at and beyond which foam drifts freely: higher to\n * slow the foam over a wider band of shallow water, lower to keep it moving\n * until close in.\n */\n get foamDriftDepth() {\n return this._shoreWaves.foamDriftDepth!;\n }\n set foamDriftDepth(val: number) {\n this._shoreWaves.foamDriftDepth = Math.max(0, val);\n }\n /**\n * How fast foam that has settled in shallow water and on the sand fades, as\n * a share of the foam's fade: lower to leave it lying on the beach longer\n * after the wave has drained, 1 to fade it as fast as foam on open water.\n */\n get settledFoamFade() {\n return this._shoreWaves.settledFoamFade!;\n }\n set settledFoamFade(val: number) {\n this._shoreWaves.settledFoamFade = Math.min(Math.max(val, 0.01), 1);\n }\n /**\n * Hands the shore waves this frame's waterline fields: the shore field in\n * levels, null when there is none, which turns them off; and the wall field,\n * null for no foam against walls. Called by the water every frame.\n * @internal\n */\n setShoreWaveFrame(\n shore: Nullable<Texture2DArray>,\n shoreRegions: readonly Vector4[],\n wall: Nullable<Texture2DArray>,\n wallRegion: Vector4,\n level: number\n ) {\n this._shoreWaveGenerator?.setFrame(shore, shoreRegions, wall, wallRegion, level, this._waveClock);\n }\n /**\n * Steps the foam field around the water the view looks at, once a frame\n * however many views there are. Called by the water after\n * {@link setShoreWaveFrame}, which its sources read.\n * @param focusX - World x the field is centred on.\n * @param focusZ - World z the field is centred on.\n * @internal\n */\n updateFoamField(focusX: number, focusZ: number) {\n if (!this._foamSource || this._foamFrameId === this._frameId) {\n return;\n }\n this._foamFrameId = this._frameId;\n this._foamField.stepAround(\n focusX,\n focusZ,\n this._waveClock,\n this._waveGenerator.get()?.wind ?? null,\n this._foamSource\n );\n }\n update(frameId: number, elapsed: number) {\n this._frameId = frameId;\n this._waveClock = elapsed;\n // The base generator and the field are stepped separately, each guarded by\n // its own per-frame mark, so a generator shared between two bodies of water\n // is still stepped once even when each body wraps it with its own field.\n const waveGenerator = this._waveGenerator.get();\n if (waveGenerator) {\n const updateFrameId = WaterMaterial._waveUpdateState.get(waveGenerator);\n if (updateFrameId !== frameId) {\n RenderGraphExecutor.profileScope('WaterWaves', () => waveGenerator.update(elapsed));\n WaterMaterial._waveUpdateState.set(waveGenerator, frameId);\n }\n }\n const interaction = this._interaction.get();\n if (interaction && this._interactiveWaveGenerator) {\n const updateFrameId = WaterMaterial._interactionUpdateState.get(interaction);\n if (updateFrameId !== frameId) {\n RenderGraphExecutor.profileScope('WaterInteraction', () => interaction.update(elapsed));\n WaterMaterial._interactionUpdateState.set(interaction, frameId);\n }\n }\n }\n}\n"],"names":["WATER_DEBUG_OUTPUTS","label","value","WATER_F0","WATER_BASE_ROUGHNESS","WATER_DISTANT_ROUGHNESS","COX_MUNK_UPWIND","COX_MUNK_CROSSWIND_BASE","COX_MUNK_CROSSWIND","SKY_PREFILTER_START","SKY_PREFILTER_FULL","FOAM_LIGHT_WRAP","FOAM_EDGE_FADE_SHARE","WATER_IOR","AIR_TO_WATER_ETA","WATER_TO_AIR_ETA","REFRACT_MAX_PATH_RATIO","REFRACT_MARCH_STEPS","REFRACT_MARCH_THICKNESS","INFINITE_DEPTH_PULLIN","HORIZON_REFLECT_BIAS","REFRACT_EDGE_FADE","SCENE_SKY_DEPTH01","SKY_MEDIUM_PATH","SSS_SUN_ALIGN_FLOOR","SSS_GRAZING_FLOOR","SSS_HEIGHT_SOFTNESS","SSS_CREST_HEIGHT_MIN","SSS_CREST_PATH_FLOOR","SSS_ABSORPTION_SCALE","DEFAULT_SCATTER_ANISOTROPY","MIN_SUN_SLOPE","REFRACT_BLUR_GEOMETRIC","REFRACT_BLUR_DENSITY","REFRACT_BLUR_MAX_LOD","FOAM_DRIFT","FOAM_BUBBLE_MIP_SCALE","FOAM_SPECULAR_POWER","FOAM_SPECULAR_BOOST","WaterMaterial","applyMaterialMixins","MeshMaterial","mixinLight","FEATURE_REFRACTION_MODE","defineFeature","FEATURE_INFINITE","FEATURE_DEBUG_OUTPUT","_waveUpdateState","WeakMap","_interactionUpdateState","_region","_refractionScale","_reflectionStrength","_waveGenerator","_interaction","height","wavelength","period","zone","sharpness","lean","irregularity","waveFoamStrength","waveFoamCoverage","shorelineFoamMaxDepth","shorelineFoamStrength","wallFoamStrength","wallFoamMinSpeed","wallFoamMaxSpeed","wallFoamDrift","surfFoamDuration","foamSettleDepth","foamDriftDepth","settledFoamFade","_shoreWaveGenerator","_foamField","WaterFoamField","_foamFieldGenerator","_interactiveWaveGenerator","_foamSource","_foamFrameId","_frameId","_edgeFadeWidth","edgeFadeWidth","val","Math","max","uniformChanged","_waveClock","_clipmapInfo","_clipmapGridInfo","_skirtDistance","_ssrParams","_absorptionScale","_scatteringScale","_causticsEnabled","_causticsIntensity","_causticsDepth","_causticsRange","_causticsFadeDistance","_causticsWarp","_causticsMinDepth","_causticsSceneDepth","_causticsDefocus","_causticsResolution","_causticsPhotonResolution","_causticsBlurPasses","_causticsTemporalStrength","_underwaterEnabled","_underwaterAmbientIntensity","_underwaterGodRays","_underwaterGodRayIntensity","_underwaterGodRaySteps","_underwaterGodRayShadow","_underwaterHysteresis","_subsurfaceIntensity","_subsurfaceCrestHeight","_subsurfaceTint","_subsurfaceParams","_sunScatteringIntensity","_scatterAnisotropy","_sunScatterParams","_refractionBlur","_cheapRefractionDepth","_foamAmount","_foamFalloff","_foamColor","_foamParams","_foamFeather","_foamNormalStrength","_foamBubbleColor","_foamBubbleCoverage","_foamBubbleDepth","_foamLookParams","_foamTexture","_foamTextureSize","Vector4","_absorption","Vector3","_scattering","_extinction","_scatterAlbedo","_updateMediumCoefficients","DRef","_effectiveWaveGenerator","_waveVersionByBindGroup","_unresolvedSlope","cullMode","useFeature","onDispose","dispose","region","equalsTo","set","waveGenerator","get","_rebuildEffectiveWaveGenerator","baseWaveGenerator","interaction","base","setAmbientSurface","effective","that","FoamFieldWaveGenerator","getFoamTexture","foamTexture","getFoamTextureSize","WaveFoamSource","_shoreWaves","ShoreWaveGenerator","flowSource","isOk","InteractiveWaveGenerator","ensureResources","optionChanged","refractionMode","featureUsed","debugOutput","infinite","absorption","absorptionScale","scattering","scatteringScale","extinction","scatterAlbedo","underwaterEnabled","underwaterAmbientIntensity","underwaterGodRays","underwaterGodRayIntensity","underwaterGodRaySteps","floor","underwaterGodRayShadow","underwaterHysteresis","causticsEnabled","causticsIntensity","causticsDepth","causticsRange","causticsFadeDistance","causticsSceneDepth","causticsWarp","min","causticsMinDepth","causticsDefocus","causticsResolution","causticsPhotonResolution","n","causticsBlurPasses","clamped","causticsTemporalStrength","subsurfaceIntensity","subsurfaceCrestHeight","subsurfaceTint","sunScatteringIntensity","cheapRefractionDepth","refractionBlur","scatterAnisotropy","foamAmount","foamFalloff","foamColor","foamFeather","foamNormalStrength","foamBubbleColor","foamBubbleCoverage","tex","foamTextureSize","foamBubbleDepth","setXYZ","x","y","z","refractionScale","reflectionStrength","needSceneColor","needSceneDepth","_createHash","getHash","setClipmapInfo","rotation","scale","offsetX","offsetY","setXYZW","setClipmapGridInfo","gridScale","gridOffsetX","gridOffsetY","tileResolution","w","setSkirtDistance","distance","supportInstancing","supportLighting","receivesWaterCaustics","vertexShader","scope","pb","$builder","setupUniforms","$inputs","position","vec3","attrib","clipmapInfo","vec4","clipmapGridInfo","uniform","skirtDistance","float","$l","s","sin","c","cos","scale2","mul","clipmapMatrix","mat4","neg","sub","clipmapPos","xy","clipmapWorldPos","ShaderHelper","getWorldMatrix","xyz","worldNormal","worldPos","camOffset","abs","xz","getCameraPosition","vertexSpacing","div","step","skirt","$if","greaterThan","camXZ","outDir","normalize","outXZ","add","$else","calcVertexPositionAndNormal","$outputs","camPos","viewVec","viewDist","length","maxDist","getCameraParams","pullIn","projPos","setClipSpacePosition","getViewProjectionMatrix","gen","calcPrevVertexPosition","getPrevUnjitteredViewProjectionMatrix","prevWorldPos","mix","resolveMotionVector","fragmentShader","needFragmentColor","unresolvedSlope","skyReflectScale","ssrParams","eyeSide","subsurfaceParams","foamShadingParams","foamLookParams","foamTex","tex2D","foamUVScale","sunScatterParams","refractBlurDensity","mediumAlbedo","mediumExtinction","zLTCMatLut","zLTCAmpLut","discardable","or","any","lessThan","zw","discard","outColor","calcDebugLevels","shoreRegion","calcDebugRegion","shoreColor","$choice","drawContext","materialFlags","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outputFragmentColor","restXZGrad","dpdx","dpdy","foamSample","sampleFoamTexture","vec2","getElapsedTime","normal","calcFragmentNormalAndFoam","calcUnresolvedSlopeVariance","undefined","crestHeight","surfaceCoverage","calcSurfaceCoverage","call","sheetThickness","calcSheetThickness","calcNearShoreFoam","scenePos","samplePositionFromDepth","getLinearDepthTexture","$builtins","fragCoord","getRenderSize","getJitteredInvVPMatrix","groundFoamDensity","groundFoamSample","groundFoamWeight","groundNormal","visibilityDepthFail","groundFieldCoverage","groundWetCoverage","groundFieldDensity","groundSurfDensity","groundGrad","groundCross","cross","sign","groundMask","calcFoamGroundMask","field","shore","and","groundMobile","sample","groundWet","groundThickness","groundHandoverThickness","greaterThanEqual","smoothStep","clamp","flowPattern","ffFoamTex","ffFoamUVScale","ffClock","calcFoamFlow","ffDrift","fragDepth","linearNormalizedToNonLinearDepth","lessThanEqual","revealSwash","nonLinearDepthToLinearNormalized","swashDiscard","wiDebugHeight","sampleHeight","wiParams2","wiDebugMask","windowMask","ffDebug","wallFoam","waterShading","outRoughness","waterRoughness","coverage","unresolvedSlopeVariance","func","slopeVar","alpha2","$return","sqrt","dist","normalScale","waterRefraction","eyeVecNorm","screenUV","surfaceViewZ","straightDepth01","straightWorldPos","straightDist","underwater","march","h","uv","waterRefractProjectUV","hitPos","uvBase","edge","waterRefractUV","refractDir","t","linearDepth","sampleLinearDepth","sceneViewZ","cameraFar","rayViewZ","maxPath","tPrev","gapPrev","hitUV","hitPath","basePath","$for","refractStepZ","waterRefractStep","gap","k","$break","bool","faceNormal","eta","waterCrossDir","refractWave","refract","refractFlatNormal","refractFlat","dot","refractUV","refractPath","refractDirView","getViewMatrix","marchResult","waterRefractMarch","sceneHit","waterSunScattering","lightEnergy","lightDir","NoL","depth","foam","up","Lw","Vw","sy","vy","r","rr","cosTheta","hg","waterScatterPhase","lumWeights","extLum","albedoLum","thickness","exp","phase","PI","integral","entry","pow","foamFactor","restXZ","hasGroundFoam","envLight","needCalculateEnvLight","env","light","cosThetaV","sigmaV","NoV","eyeVec","sinT2","f","cosT","meanFresnel","f0","f90","L","V","halfVec","NoH","specular","VoH","F","fresnelSchlick","alphaRoughness","roughness","D","distributionGGX","VIS","visGGX","lightColor","density","feather","yz","wPos","shadingNormal","diffuseWeight","diffuseNormal","restLevel","underwaterEye","equal","viewPos","incidentVec","reflectVecW","reflect","reflectance","hitInfo","reflectVec","getHiZDepthTexture","screenSpaceRayTracing_HiZ","getProjectionMatrix","getInvProjectionMatrix","int","getHiZDepthTextureMipLevelCount","getHiZDepthTextureSize","screenSpaceRayTracing_Linear2D","getLinearDepthTextureSize","refl","reflMiss","downwelling","sampleBakedSkyPreExposed","textureSampleLevel","getBakedSkyTexture","rgb","hasRadiance","skyBlur","getRadiance","alpha","phongPower","coneCos","coneTan","coneBase","coneRadius","reflectLod","log2","getSceneColorTexture","refractInfo","mediumPath","refractBlur","refraction","refractionRaw","getAbsorption","viewXZ","viewWind","viewWindT","fresnelTerm","fresnel","crestDensity","crestWhite","waterWhiteFoam","wallDensity","wallCut","wallWhite","foamGrad","bubbleDensity","foamStep","foamTexelSize","foamNormal","waterShare","bodyWeight","finalColor","edgeThickness","foamFade","foamRadiance","groundFoamOpacity","groundFoamRadiance","groundFoamWhite","dbgSubsurface","dbgSunScatter","dbgShadow","dbgSpecular","sssT","sssRise","log","sssPath","sssThickness","dbgLightDir","forEachLight","type","posRange","dirCutoff","colorIntensity","extra","shadow","lightAtten","calculateLightAttenuation","calculateLightDirection","NoLdiffuse","NoLfoam","a","specularTerm","LIGHT_TYPE_RECT","rectTerms","evaluateLTCRectLightTerms","lightSpecular","lightContrib","sssToEye","sssGrazing","sssMirror","sssAlign","sssSunUp","sssFacing","subsurfaceTerm","LIGHT_TYPE_DIRECTIONAL","sunScatterTerm","not","foamGlint","foamLight","calculateShadow","groundNoL","groundShadow","irradiance","getEnvLightIrradiance","sss","getScattering","foamAmbient","toEye","bubbleShift","bubbleTex","edgeFade","behind","groundBehind","groundColor","applyUniforms","bindGroup","ctx","needUpdate","pass","lastWritten","version","applyWaterBindGroup","applyUniformValues","setValue","wind","windSpeed","hypot","scene","lightingMode","getPreExposure","PHYSICAL_BAKE_EXPOSURE","eyeUnder","material","setTexture","getDefaultFoamTexture","fetchSampler","getLTCMatLUT","getLTCAmpLUT","shoreWaveHeight","wasOn","shoreWaveLength","shoreWavePeriod","shoreWaveZone","shoreWaveSharpness","shoreWaveLean","shoreWaveIrregularity","foamFadeRate","fadeRate","foamTrailStrength","baseStrength","foamDrift","drift","foamFieldSize","size","shoreWaveFoamStrength","shoreWaveFoamCoverage","shoreWaveShallowFoamDepth","shoreWaveShallowFoamStrength","setShoreWaveFrame","shoreRegions","wall","wallRegion","level","setFrame","updateFoamField","focusX","focusZ","stepAround","update","frameId","elapsed","updateFrameId","RenderGraphExecutor","profileScope"],"mappings":"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"}