@zephyr3d/scene 0.9.27 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"water_foam.js","sources":["../../src/render/water_foam.ts"],"sourcesContent":["import type { AABB, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D,\r\n Texture2DArray\r\n} from '@zephyr3d/device';\r\nimport { getDevice } from '../app/api';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDefaultFoamTexture, sampleFoamTexture } from '../utility/textures/foam';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * The foam field is stepped as Crest steps its persistent simulations\r\n * (UpdateFoam.compute, Wave Harmonic, MIT): FOAM_FIELD_FREQUENCY steps per\r\n * second, each advecting the field by the water's velocity, fading it and\r\n * adding what the sources make; at most FOAM_FIELD_MAX_STEPS catch up per\r\n * frame.\r\n */\r\nconst FOAM_FIELD_FREQUENCY = 30;\r\nconst FOAM_FIELD_MAX_STEPS = 8;\r\n/** Crest's flow foam: two samples, each slid for up to FOAM_FLOW_PERIOD seconds and faded across. */\r\nconst FOAM_FLOW_PERIOD = 2;\r\n/**\r\n * Levels of the field, laid out as Crest's LODs are: all centred on the view,\r\n * each twice the size of the one before at the same number of cells, each\r\n * stepped on its own, and an advection that would read off a level reading\r\n * the next coarser one instead (UpdateFoam.compute). The material reads the\r\n * finest level holding a point, blended into the next over its edge.\r\n */\r\nconst FOAM_FIELD_LEVELS = 4;\r\n/** Cells along each side of a level. */\r\nconst FOAM_FIELD_CELLS = 256;\r\n/**\r\n * Share of a level, from each edge inwards, over which its coverage falls to\r\n * 0, so the foam with memory hands over to the foam without it with no seam.\r\n */\r\nconst FOAM_FIELD_EDGE_BLEND = 0.15;\r\n/**\r\n * Crest's gain on the foam the waves make (UpdateFoam.compute): foam is added\r\n * at FOAM_WAVE_GAIN times the strength times how squeezed the water is, per\r\n * second.\r\n */\r\nexport const FOAM_WAVE_GAIN = 5;\r\n\r\n/**\r\n * What feeds the foam field and carries it about: the water's velocity and the\r\n * foam made at a point, worked out in the field's step.\r\n * @public\r\n */\r\nexport interface FoamFieldSource {\r\n /** Identifies the step shader the source builds into; equal keys share a program. */\r\n readonly foamSourceKey: string;\r\n /** Declares the uniforms {@link FoamFieldSource.calcFoamStep} reads, in bind group 0. */\r\n setupFoamSourceUniforms(scope: PBGlobalScope): void;\r\n /** Sets the uniforms {@link FoamFieldSource.setupFoamSourceUniforms} declared. */\r\n applyFoamSourceBindGroup(bindGroup: BindGroup): void;\r\n /**\r\n * The water's velocity at an undisplaced XZ and the foam made there this\r\n * step, as vec4(velocity x, velocity z, foam added, wall foam added). Wall\r\n * foam is a layer of its own, carried and faded as the foam is, which the\r\n * water shows whole where it is, by its strength, rather than cutting from\r\n * the foam texture by its density.\r\n * @param dt - Seconds this step covers, 0 for a step that only moves the grid.\r\n * @param fadeRate - The field's fade rate per second, for prewarming.\r\n * @param prewarm - True on the first step, which fills the field as if the\r\n * sources had been running for a while.\r\n * @param state - inout vec4: two floats the field keeps per cell for its\r\n * sources, held in place rather than carried with the foam, in xy, and\r\n * in w the seconds since the source last wrote them, or a negative value\r\n * where they hold nothing yet. What the source leaves in xy is kept at\r\n * the last step of a frame.\r\n * @param shape - inout vec2, (0, 1) on entry: in x a density the foam here\r\n * is raised to at least this step, for foam whose amount the source knows\r\n * outright rather than as a rate; in y the share of the fade rate the foam\r\n * here fades at.\r\n */\r\n calcFoamStep(\r\n scope: PBInsideFunctionScope,\r\n xz: PBShaderExp,\r\n dt: PBShaderExp,\r\n fadeRate: PBShaderExp,\r\n prewarm: PBShaderExp,\r\n state: PBShaderExp,\r\n shape: PBShaderExp\r\n ): PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\ninterface FoamStepProgram {\r\n program: GPUProgram;\r\n bindGroup: BindGroup;\r\n}\r\n\r\n/**\r\n * Foam with memory: a scalar field over the water, carried by the water's\r\n * velocity, fading over time and fed by its sources. FOAM_FIELD_LEVELS levels\r\n * of square grids that the water moves along with the view, each twice the\r\n * size of the one before; a move of a grid is carried over in the next step,\r\n * new cells starting with what the next coarser level holds there, if any.\r\n * @public\r\n */\r\nexport class WaterFoamField extends Disposable {\r\n /** Ping-pong pair of arrays, a layer per level: the foam in r, the wall foam in g, the sources' state in ba. */\r\n private _arrays: Nullable<[Texture2DArray, Texture2DArray]>;\r\n private _framebuffers: Nullable<[FrameBuffer, FrameBuffer]>;\r\n private _current: number;\r\n /** Per level: (origin x, origin z, cell size, cells) as the field holds it; 0 cells before it does. */\r\n private readonly _regions: Vector4[];\r\n /** Per level: where the grid goes this frame. */\r\n private readonly _targets: Vector4[];\r\n private _programs: Map<string, FoamStepProgram>;\r\n private _timeToSimulate: number;\r\n private _lastTime: number;\r\n /** Clock at which the sources last wrote their per-cell state; negative for never. */\r\n private _stateTime: number;\r\n private _prewarm: boolean;\r\n private _fadeRate: number;\r\n private _size: number;\r\n private _baseStrength: number;\r\n private _drift: number;\r\n /** Velocity the foam drifts at on the wind, metres per second. */\r\n private readonly _driftVelocity: Vector2;\r\n private _dummy: Nullable<Texture2DArray>;\r\n /** (dt, fade rate, prewarm, level) */\r\n private readonly _params: Vector4;\r\n /** (seconds since the sources' state was written, whether this step writes it, 0, 0) */\r\n private readonly _stateParams: Vector4;\r\n /** (clock in seconds, 0, 0, 0) */\r\n private readonly _clock: Vector4;\r\n private _version: number;\r\n constructor() {\r\n super();\r\n this._arrays = null;\r\n this._framebuffers = null;\r\n this._current = 0;\r\n this._regions = [];\r\n this._targets = [];\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n this._regions.push(new Vector4());\r\n this._targets.push(new Vector4());\r\n }\r\n this._programs = new Map();\r\n this._timeToSimulate = 0;\r\n this._lastTime = -1;\r\n this._stateTime = -1;\r\n this._prewarm = true;\r\n this._fadeRate = 0.8;\r\n this._size = 128;\r\n this._baseStrength = 1;\r\n this._drift = 0.03;\r\n this._driftVelocity = new Vector2();\r\n this._dummy = null;\r\n this._params = new Vector4();\r\n this._stateParams = new Vector4();\r\n this._clock = new Vector4();\r\n this._version = 0;\r\n }\r\n /** How fast the foam fades, per second (Crest's Foam Fade Rate). */\r\n get fadeRate() {\r\n return this._fadeRate;\r\n }\r\n set fadeRate(val: number) {\r\n this._fadeRate = Math.max(1e-3, val);\r\n }\r\n /**\r\n * Side in metres of the finest level, the square of water around the view\r\n * that keeps its foam in the most detail; each further level doubles it.\r\n */\r\n get size() {\r\n return this._size;\r\n }\r\n set size(val: number) {\r\n this._size = Math.max(8, val);\r\n }\r\n /**\r\n * Scale of the foam the open water's breaking crests leave behind, as\r\n * Crest's Wave Foam Strength: 0 leaves foam only while the crest breaks.\r\n */\r\n get baseStrength() {\r\n return this._baseStrength;\r\n }\r\n set baseStrength(val: number) {\r\n this._baseStrength = Math.max(0, val);\r\n }\r\n /**\r\n * Share of the wind speed the foam drifts at. Floating objects drift at\r\n * about 3% of the wind relative to the water, about sqrt(rho_air /\r\n * rho_water) (Wagner, Dell & Eisenman, \"How Winds and Ocean Currents\r\n * Influence the Drift of Floating Objects\", JPO 52(5), 2022).\r\n */\r\n get drift() {\r\n return this._drift;\r\n }\r\n set drift(val: number) {\r\n this._drift = Math.max(0, val);\r\n }\r\n /** Changes every step, for bind groups that only upload on a change. */\r\n get version() {\r\n return this._version;\r\n }\r\n /**\r\n * Places the levels around a point of the water, each on whole cells of its\r\n * own so that the field is carried over without resampling while the point\r\n * stays put, and steps the field to a clock time there. The time behind is\r\n * caught up in fixed steps of 1 / FOAM_FIELD_FREQUENCY; with no step due, a\r\n * step of no time still carries the field over to where the grids now lie.\r\n * The first step prewarms it.\r\n * @param focusX - World x the levels are centred on.\r\n * @param focusZ - World z the levels are centred on.\r\n * @param time - Clock in seconds.\r\n * @param wind - Wind velocity in metres per second, or null for none.\r\n * @param source - What feeds the field and carries it.\r\n */\r\n stepAround(\r\n focusX: number,\r\n focusZ: number,\r\n time: number,\r\n wind: Nullable<Immutable<Vector2>>,\r\n source: FoamFieldSource\r\n ) {\r\n let moved = false;\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n const size = this._size * (1 << i);\r\n const cell = size / FOAM_FIELD_CELLS;\r\n const half = size * 0.5;\r\n this._targets[i].setXYZW(\r\n Math.floor((focusX - half) / cell) * cell,\r\n Math.floor((focusZ - half) / cell) * cell,\r\n cell,\r\n FOAM_FIELD_CELLS\r\n );\r\n moved = moved || !this._regions[i].equalsTo(this._targets[i]);\r\n }\r\n this._driftVelocity.setXY((wind?.x ?? 0) * this._drift, (wind?.y ?? 0) * this._drift);\r\n const device = getDevice();\r\n this.ensureArrays(device);\r\n const dt = this._lastTime < 0 ? 0 : Math.min(Math.max(time - this._lastTime, 0), 0.25);\r\n this._lastTime = time;\r\n // The clock carries the foam texture along; readers see it every frame\r\n this._clock.x = time;\r\n this._version++;\r\n this._timeToSimulate += dt;\r\n let steps = Math.floor(this._timeToSimulate * FOAM_FIELD_FREQUENCY);\r\n let stepDt = 1 / FOAM_FIELD_FREQUENCY;\r\n if (steps > FOAM_FIELD_MAX_STEPS) {\r\n steps = FOAM_FIELD_MAX_STEPS;\r\n this._timeToSimulate = 0;\r\n } else {\r\n this._timeToSimulate -= steps * stepDt;\r\n }\r\n if (steps === 0) {\r\n if (!moved && !this._prewarm) {\r\n return;\r\n }\r\n steps = 1;\r\n stepDt = 0;\r\n }\r\n const { program, bindGroup } = this.getStepProgram(device, source);\r\n source.applyFoamSourceBindGroup(bindGroup);\r\n bindGroup.setValue('ffDrift', this._driftVelocity);\r\n // The sources' state is of the water as it is this frame, which every step\r\n // of the frame sees alike: it is read as of the last frame that wrote it\r\n // and written at the frame's last step\r\n const sinceState = this._stateTime < 0 ? 0 : Math.max(time - this._stateTime, 0);\r\n const sampler = fetchSampler('clamp_linear_nomip');\r\n device.pushDeviceStates();\r\n for (let step = 0; step < steps; step++) {\r\n const fb = this._framebuffers![1 - this._current];\r\n bindGroup.setTexture('ffSrc', this._arrays![this._current], sampler);\r\n this._stateParams.setXYZW(sinceState, step === steps - 1 ? 1 : 0, 0, 0);\r\n bindGroup.setValue('ffState', this._stateParams);\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n // Only the first step carries the field across a move of the grids\r\n const prev = step === 0 ? this._regions : this._targets;\r\n bindGroup.setValue('ffRegion', this._targets[i]);\r\n bindGroup.setValue('ffPrevRegion', prev[i]);\r\n bindGroup.setValue('ffPrevRegionNext', i + 1 < FOAM_FIELD_LEVELS ? prev[i + 1] : Vector4.zero());\r\n this._params.setXYZW(stepDt, this._fadeRate, this._prewarm ? 1 : 0, i);\r\n bindGroup.setValue('ffParams', this._params);\r\n fb.setColorAttachmentLayer(0, i);\r\n device.setFramebuffer(fb);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n }\r\n this._current = 1 - this._current;\r\n this._prewarm = false;\r\n }\r\n device.popDeviceStates();\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n this._regions[i].set(this._targets[i]);\r\n }\r\n this._stateTime = time;\r\n }\r\n /** Declares the uniforms {@link WaterFoamField.sample} reads. */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.ffTex = pb.tex2DArray().uniform(uniformGroup);\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n // (origin x, origin z, cell size, cells; 0 cells before the level exists)\r\n scope[`ffRegion${i}`] = pb.vec4().uniform(uniformGroup);\r\n }\r\n scope.ffDrift = pb.vec2().uniform(uniformGroup);\r\n scope.ffClock = pb.vec4().uniform(uniformGroup);\r\n }\r\n /** Sets the uniforms {@link WaterFoamField.setupUniforms} declared. */\r\n applyBindGroup(bindGroup: BindGroup) {\r\n bindGroup.setTexture(\r\n 'ffTex',\r\n this._arrays ? this._arrays[this._current] : this.getDummy(),\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n bindGroup.setValue(`ffRegion${i}`, this._arrays ? this._regions[i] : Vector4.zero());\r\n }\r\n bindGroup.setValue('ffDrift', this._driftVelocity);\r\n bindGroup.setValue('ffClock', this._clock);\r\n }\r\n /**\r\n * The field at an undisplaced XZ, as vec3(foam density, coverage, wall\r\n * foam). The finest level holding the point answers, blended into the next\r\n * coarser over the last FOAM_FIELD_EDGE_BLEND of it; coverage falls to 0 over\r\n * that share of the coarsest level and is 0 off it, where the reader falls\r\n * back to foam with no memory.\r\n */\r\n sample(scope: PBInsideFunctionScope, xz: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n pb.func('ffSample', [pb.vec2('xz')], function () {\r\n this.$l.result = pb.vec3(0);\r\n // Share of the answer still to come from coarser levels\r\n this.$l.remaining = pb.float(1);\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n const r = this[`ffRegion${i}`];\r\n this.$l[`uv${i}`] = pb.div(pb.sub(this.xz, r.xy), pb.max(pb.mul(r.z, r.w), 1e-4));\r\n const uv = this[`uv${i}`];\r\n this.$l[`edge${i}`] = pb.min(pb.min(uv.x, uv.y), pb.min(pb.sub(1, uv.x), pb.sub(1, uv.y)));\r\n const edge = this[`edge${i}`];\r\n this.$if(\r\n pb.and(pb.greaterThan(this.remaining, 0), pb.and(pb.greaterThan(r.w, 0), pb.greaterThan(edge, 0))),\r\n function () {\r\n this.$l.w = pb.mul(this.remaining, pb.smoothStep(0, FOAM_FIELD_EDGE_BLEND, edge));\r\n this.$l.texel = pb.textureArraySampleLevel(this.ffTex, uv, i, 0);\r\n this.result = pb.add(this.result, pb.mul(pb.vec3(this.texel.r, 1, this.texel.g), this.w));\r\n this.remaining = pb.sub(this.remaining, this.w);\r\n }\r\n );\r\n }\r\n this.$return(this.result);\r\n });\r\n return scope.ffSample(xz) as PBShaderExp;\r\n }\r\n /**\r\n * The foam texture carried by the water, as Crest's ComputeFoamWithFlow:\r\n * two samples, each slid along the flow for up to FOAM_FLOW_PERIOD seconds\r\n * and then set back, half a period apart, faded across so neither jump\r\n * shows. Returns (value, slope along x, slope along z) as\r\n * {@link sampleFoamTexture} does.\r\n * @param time - Clock in seconds.\r\n * @param flow - Velocity of the water in metres per second.\r\n */\r\n static flowPattern(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uvScale: PBShaderExp,\r\n time: PBShaderExp,\r\n xz: PBShaderExp,\r\n xzGrad: PBShaderExp,\r\n flow: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'ffFlowPattern',\r\n [pb.vec2('xz'), pb.vec4('xzGrad'), pb.vec2('flow'), pb.float('time'), pb.float('uvScale')],\r\n function () {\r\n const half = FOAM_FLOW_PERIOD * 0.5;\r\n this.$l.offset1 = pb.mod(this.time, FOAM_FLOW_PERIOD);\r\n this.$l.weight1 = pb.div(this.offset1, half);\r\n this.weight1 = this.$choice(pb.greaterThan(this.weight1, 1), pb.sub(2, this.weight1), this.weight1);\r\n this.$l.offset2 = pb.mod(pb.add(this.time, half), FOAM_FLOW_PERIOD);\r\n this.$l.s1 = sampleFoamTexture(\r\n this,\r\n tex,\r\n pb.mul(pb.sub(this.xz, pb.mul(this.flow, this.offset1)), this.uvScale),\r\n this.xzGrad,\r\n this.uvScale\r\n );\r\n this.$l.s2 = sampleFoamTexture(\r\n this,\r\n tex,\r\n pb.mul(pb.sub(this.xz, pb.mul(this.flow, this.offset2)), this.uvScale),\r\n this.xzGrad,\r\n this.uvScale\r\n );\r\n this.$return(pb.mix(this.s2, this.s1, this.weight1));\r\n }\r\n );\r\n return scope.ffFlowPattern(xz, xzGrad, flow, time, uvScale) as PBShaderExp;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this.disposeArrays();\r\n for (const p of this._programs.values()) {\r\n p.program.dispose();\r\n p.bindGroup.dispose();\r\n }\r\n this._programs.clear();\r\n this._dummy?.dispose();\r\n this._dummy = null;\r\n }\r\n /** @internal */\r\n private ensureArrays(device: AbstractDevice) {\r\n if (this._arrays) {\r\n return;\r\n }\r\n const createArray = (name: string) => {\r\n const tex = device.createTexture2DArray(\r\n 'rgba16f',\r\n FOAM_FIELD_CELLS,\r\n FOAM_FIELD_CELLS,\r\n FOAM_FIELD_LEVELS,\r\n {\r\n mipmapping: false\r\n }\r\n )!;\r\n tex.name = name;\r\n const fb = device.createFrameBuffer([tex], null);\r\n for (let i = 0; i < FOAM_FIELD_LEVELS; i++) {\r\n fb.setColorAttachmentLayer(0, i);\r\n device.setFramebuffer(fb);\r\n device.clearFrameBuffer(Vector4.zero(), null, null);\r\n }\r\n fb.dispose();\r\n return tex;\r\n };\r\n device.pushDeviceStates();\r\n try {\r\n this._arrays = [createArray('@WaterFoamField0'), createArray('@WaterFoamField1')];\r\n this._current = 0;\r\n for (const r of this._regions) {\r\n r.setXYZW(0, 0, 0, 0);\r\n }\r\n this._prewarm = true;\r\n this._stateTime = -1;\r\n this._framebuffers = [0, 1].map((i) => device.createFrameBuffer([this._arrays![i]], null)) as [\r\n FrameBuffer,\r\n FrameBuffer\r\n ];\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n }\r\n /** @internal */\r\n private getStepProgram(device: AbstractDevice, source: FoamFieldSource) {\r\n const programKey = source.foamSourceKey;\r\n let entry = this._programs.get(programKey);\r\n if (!entry) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n source.setupFoamSourceUniforms(this);\r\n this.ffSrc = pb.tex2DArray().uniform(0);\r\n this.ffRegion = pb.vec4().uniform(0);\r\n // Where this level and the next coarser one lay at the last step; 0 cells for none\r\n this.ffPrevRegion = pb.vec4().uniform(0);\r\n this.ffPrevRegionNext = pb.vec4().uniform(0);\r\n // (dt, fade rate, prewarm, level)\r\n this.ffParams = pb.vec4().uniform(0);\r\n this.ffDrift = pb.vec2().uniform(0);\r\n // (seconds since the sources' state was written, whether this step writes it, 0, 0)\r\n this.ffState = pb.vec4().uniform(0);\r\n // A point of a level as it was: its uv, and whether the level held it\r\n pb.func('ffPrevUV', [pb.vec2('wp'), pb.vec4('region')], function () {\r\n this.$l.uv = pb.div(\r\n pb.sub(this.wp, this.region.xy),\r\n pb.max(pb.mul(this.region.z, this.region.w), 1e-4)\r\n );\r\n this.$l.rMax = pb.sub(0.5, pb.div(1, pb.max(this.region.w, 1)));\r\n this.$l.r = pb.abs(pb.sub(this.uv, pb.vec2(0.5)));\r\n this.$return(\r\n pb.vec3(\r\n this.uv,\r\n this.$choice(\r\n pb.and(\r\n pb.greaterThan(this.region.w, 0),\r\n pb.lessThanEqual(pb.max(this.r.x, this.r.y), this.rMax)\r\n ),\r\n pb.float(1),\r\n pb.float(0)\r\n )\r\n )\r\n );\r\n });\r\n pb.main(function () {\r\n this.$l.dt = this.ffParams.x;\r\n this.$l.fadeRate = this.ffParams.y;\r\n this.$l.prewarm = pb.greaterThan(this.ffParams.z, 0.5);\r\n this.$l.level = pb.int(this.ffParams.w);\r\n // World position of this cell's centre\r\n this.$l.xz = pb.add(this.ffRegion.xy, pb.mul(this.$builtins.fragCoord.xy, this.ffRegion.z));\r\n // The sources' state stays with the cell: from the same place, on\r\n // the grid as it was, where that grid held it\r\n this.$l.stateAt = this.ffPrevUV(this.xz, this.ffPrevRegion);\r\n this.$l.prevState = pb.vec2(0);\r\n this.$l.stateAge = pb.float(-1);\r\n this.$if(pb.greaterThan(this.stateAt.z, 0.5), function () {\r\n this.prevState = pb.textureArraySampleLevel(this.ffSrc, this.stateAt.xy, this.level, 0).ba;\r\n this.$if(pb.and(pb.not(this.prewarm), pb.greaterThan(this.ffState.x, 0)), function () {\r\n this.stateAge = this.ffState.x;\r\n });\r\n });\r\n this.$l.state = pb.vec4(this.prevState, 0, this.stateAge);\r\n this.$l.shape = pb.vec2(0, 1);\r\n this.$l.src = source.calcFoamStep(\r\n this,\r\n this.xz,\r\n this.dt,\r\n this.fadeRate,\r\n this.prewarm,\r\n this.state,\r\n this.shape\r\n );\r\n // Sample from the previous step, upstream of the flow: this level as\r\n // it was, else the next coarser one, nothing where neither held it\r\n this.$l.flowed = pb.sub(this.xz, pb.mul(this.src.xy, this.dt));\r\n this.$l.at = this.ffPrevUV(this.flowed, this.ffPrevRegion);\r\n // (foam, wall foam)\r\n this.$l.foam = pb.vec2(0);\r\n this.$if(pb.greaterThan(this.at.z, 0.5), function () {\r\n this.foam = pb.textureArraySampleLevel(this.ffSrc, this.at.xy, this.level, 0).rg;\r\n }).$else(function () {\r\n this.$l.atNext = this.ffPrevUV(this.flowed, this.ffPrevRegionNext);\r\n this.$if(pb.greaterThan(this.atNext.z, 0.5), function () {\r\n this.foam = pb.textureArraySampleLevel(\r\n this.ffSrc,\r\n this.atNext.xy,\r\n pb.add(this.level, 1),\r\n 0\r\n ).rg;\r\n });\r\n });\r\n // Fade, then what the sources make\r\n this.foam = pb.mul(\r\n this.foam,\r\n pb.max(0, pb.sub(1, pb.mul(this.fadeRate, pb.max(this.shape.y, 0), this.dt)))\r\n );\r\n this.foam = pb.add(this.foam, this.src.zw);\r\n // At least what the source knows is here\r\n this.foam.x = pb.max(this.foam.x, pb.clamp(this.shape.x, 0, 1));\r\n this.$outputs.outColor = pb.vec4(\r\n pb.clamp(this.foam, pb.vec2(0), pb.vec2(1)),\r\n this.$choice(pb.greaterThan(this.ffState.y, 0.5), this.state.xy, this.prevState)\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = `@WaterFoamFieldStep:${programKey}`;\r\n entry = { program, bindGroup: device.createBindGroup(program.bindGroupLayouts[0]) };\r\n this._programs.set(programKey, entry);\r\n }\r\n return entry;\r\n }\r\n /** @internal */\r\n private disposeArrays() {\r\n this._framebuffers?.forEach((fb) => fb.dispose());\r\n this._framebuffers = null;\r\n this._arrays?.forEach((tex) => tex.dispose());\r\n this._arrays = null;\r\n }\r\n /** @internal */\r\n private getDummy() {\r\n if (!this._dummy) {\r\n this._dummy = getDevice().createTexture2DArray('rgba16f', 1, 1, 1, { mipmapping: false })!;\r\n }\r\n return this._dummy;\r\n }\r\n}\r\n\r\n/**\r\n * The open water's share of the foam field: foam left where the wrapped\r\n * generator's crests break, drifting on the wind. Crest feeds its foam\r\n * simulation from the Jacobian of its animated waves the same way\r\n * (UpdateFoam.compute); here the generator's own foam density stands for the\r\n * squeeze, so the field is fed by the same crests the generator shows foam on.\r\n * @internal\r\n */\r\nexport class WaveFoamSource implements FoamFieldSource {\r\n private readonly _generator: Nullable<WaveGenerator>;\r\n private readonly _field: WaterFoamField;\r\n /** (strength, 0, 0, 0) */\r\n private readonly _sourceParams: Vector4;\r\n readonly foamSourceKey: string;\r\n constructor(generator: Nullable<WaveGenerator>, field: WaterFoamField) {\r\n this._generator = generator;\r\n this._field = field;\r\n this._sourceParams = new Vector4();\r\n this.foamSourceKey = `WG:${generator?.getHash() ?? ''}`;\r\n }\r\n setupFoamSourceUniforms(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n if (this._generator) {\r\n this._generator.setupUniforms(scope, 0);\r\n // FBM and Gerstner animate from camera.elapsedTime, which a standalone\r\n // program has to declare itself\r\n ShaderHelper.declareStandaloneCameraTime(scope, 0);\r\n }\r\n scope.wgFoamSource = pb.vec4().uniform(0);\r\n }\r\n applyFoamSourceBindGroup(bindGroup: BindGroup) {\r\n if (this._generator) {\r\n this._generator.applyWaterBindGroup(bindGroup);\r\n ShaderHelper.setStandaloneCameraTime(bindGroup);\r\n }\r\n this._sourceParams.setXYZW(this._field.baseStrength, 0, 0, 0);\r\n bindGroup.setValue('wgFoamSource', this._sourceParams);\r\n }\r\n calcFoamStep(\r\n scope: PBInsideFunctionScope,\r\n xz: PBShaderExp,\r\n dt: PBShaderExp,\r\n fadeRate: PBShaderExp,\r\n prewarm: PBShaderExp,\r\n _state: PBShaderExp,\r\n _shape: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'wgFoamStep',\r\n [pb.vec2('xz'), pb.float('dt'), pb.float('fadeRate'), pb.bool('prewarm')],\r\n function () {\r\n this.$l.strength = this.wgFoamSource.x;\r\n this.$l.density = pb.float(0);\r\n if (that._generator) {\r\n this.density = pb.clamp(\r\n that._generator.calcFragmentNormalAndFoam(this, this.xz, pb.vec3(0, 1, 0)).w,\r\n 0,\r\n 1\r\n );\r\n }\r\n // Crest's prewarm of the wave source\r\n this.$l.waveDt = this.$choice(\r\n this.prewarm,\r\n pb.max(this.dt, pb.div(pb.min(1, pb.sub(this.strength, 1)), this.fadeRate)),\r\n this.dt\r\n );\r\n this.$return(\r\n pb.vec4(this.ffDrift, pb.mul(FOAM_WAVE_GAIN, this.waveDt, this.strength, this.density), 0)\r\n );\r\n }\r\n );\r\n return scope.wgFoamStep(xz, dt, fadeRate, prewarm) as PBShaderExp;\r\n }\r\n}\r\n\r\n/**\r\n * Velocity of the water carrying the foam at an undisplaced XZ in the\r\n * material's shaders, given the drift on the wind: the drift with the source's\r\n * own water added and, where it knows of walls, led along them.\r\n * @public\r\n */\r\nexport interface FoamFlowSource {\r\n calcFoamFlow(scope: PBInsideFunctionScope, xz: PBShaderExp, drift: PBShaderExp): PBShaderExp;\r\n}\r\n\r\n/**\r\n * Settings the foam field reads from the water to draw its foam texture.\r\n * @internal\r\n */\r\nexport interface FoamFieldLook {\r\n getFoamTexture(): Nullable<Texture2D>;\r\n getFoamTextureSize(): number;\r\n}\r\n\r\n/**\r\n * Layers the foam field over the generator it wraps: inside the field the foam\r\n * is the field's, which the generator feeds and so must not add a second\r\n * time, and the foam texture travels with the water; off the field the\r\n * generator's foam shows unchanged. Wraps the base generator, below the\r\n * interaction field and the shore waves, whose foam is composed over it.\r\n * @internal\r\n */\r\nexport class FoamFieldWaveGenerator extends Disposable implements WaveGenerator {\r\n private readonly _base: WaveGenerator;\r\n private readonly _field: WaterFoamField;\r\n private readonly _look: FoamFieldLook;\r\n /** Velocity of the water from the drift, from the shore waves while they are on. */\r\n flowSource: Nullable<FoamFlowSource>;\r\n calcPrevVertexPosition?: WaveGenerator['calcPrevVertexPosition'];\r\n calcSurfaceCoverage?: WaveGenerator['calcSurfaceCoverage'];\r\n calcSheetThickness?: WaveGenerator['calcSheetThickness'];\r\n calcUnresolvedSlopeVariance?: WaveGenerator['calcUnresolvedSlopeVariance'];\r\n constructor(base: WaveGenerator, field: WaterFoamField, look: FoamFieldLook) {\r\n super();\r\n this._base = base;\r\n this._field = field;\r\n this._look = look;\r\n this.flowSource = null;\r\n // Optional parts of the surface pass straight through, present only where\r\n // the base has them\r\n if (base.calcPrevVertexPosition) {\r\n this.calcPrevVertexPosition = base.calcPrevVertexPosition.bind(base);\r\n }\r\n if (base.calcSurfaceCoverage) {\r\n this.calcSurfaceCoverage = base.calcSurfaceCoverage.bind(base);\r\n }\r\n if (base.calcSheetThickness) {\r\n this.calcSheetThickness = base.calcSheetThickness.bind(base);\r\n }\r\n if (base.calcUnresolvedSlopeVariance) {\r\n this.calcUnresolvedSlopeVariance = base.calcUnresolvedSlopeVariance.bind(base);\r\n }\r\n }\r\n /** The generator the field is layered over. */\r\n get base() {\r\n return this._base;\r\n }\r\n /** The foam field. */\r\n get field() {\r\n return this._field;\r\n }\r\n get wind() {\r\n return this._base.wind;\r\n }\r\n clone() {\r\n return new FoamFieldWaveGenerator(this._base.clone(), this._field, this._look) as this;\r\n }\r\n get version() {\r\n return this._base.version + this._field.version;\r\n }\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n this._base.setupUniforms(scope, uniformGroup);\r\n this._field.setupUniforms(scope, uniformGroup);\r\n scope.ffFoamTex = pb.tex2D().uniform(uniformGroup);\r\n scope.ffFoamUVScale = pb.float().uniform(uniformGroup);\r\n }\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp,\r\n vertexSpacing?: PBShaderExp\r\n ) {\r\n this._base.calcVertexPositionAndNormal(scope, inPos, outPos, outNormal, vertexSpacing);\r\n }\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, vertexNormal: PBShaderExp) {\r\n return this._base.calcFragmentNormal(scope, xz, vertexNormal);\r\n }\r\n calcFragmentNormalAndFoam(\r\n scope: PBInsideFunctionScope,\r\n xz: PBShaderExp,\r\n vertexNormal: PBShaderExp,\r\n foamSample?: PBShaderExp,\r\n footprint?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const params = [pb.vec2('xz'), pb.vec3('vn')];\r\n const args = [xz, vertexNormal];\r\n if (foamSample) {\r\n params.push(pb.vec3('fs').inout());\r\n args.push(foamSample);\r\n }\r\n if (footprint) {\r\n params.push(pb.vec4('fp'));\r\n args.push(footprint);\r\n }\r\n const funcName = `ffCalcNormalAndFoam${foamSample ? 'S' : ''}${footprint ? 'F' : ''}`;\r\n pb.func(funcName, params, function () {\r\n // Screen derivatives for the foam texture, here in uniform control flow\r\n if (foamSample) {\r\n this.$l.xzGrad = pb.vec4(pb.dpdx(this.xz), pb.dpdy(this.xz));\r\n }\r\n this.$l.nf = that._base.calcFragmentNormalAndFoam(\r\n this,\r\n this.xz,\r\n this.vn,\r\n foamSample ? this.fs : undefined,\r\n footprint ? this.fp : undefined\r\n );\r\n this.$l.ff = that._field.sample(this, this.xz);\r\n this.$l.ffTotal = pb.clamp(this.ff.x, 0, 1);\r\n if (foamSample) {\r\n // Carried by the water: the texture travels with the field's foam.\r\n // Over the whole field, not only where it holds foam: the flow source\r\n // may show foam the field lacks (the near shore), on this pattern.\r\n this.$if(pb.greaterThan(this.ff.y, 0), function () {\r\n this.$l.flow = that.flowSource\r\n ? that.flowSource.calcFoamFlow(this, this.xz, this.ffDrift)\r\n : this.ffDrift;\r\n this.$l.pattern = WaterFoamField.flowPattern(\r\n this,\r\n this.ffFoamTex,\r\n this.ffFoamUVScale,\r\n this.ffClock.x,\r\n this.xz,\r\n this.xzGrad,\r\n this.flow\r\n );\r\n this.fs = pb.mix(this.fs, this.pattern, this.ff.y);\r\n });\r\n }\r\n this.$return(pb.vec4(this.nf.xyz, pb.mix(pb.clamp(this.nf.w, 0, 1), this.ffTotal, this.ff.y)));\r\n });\r\n return scope[funcName](...args) as PBShaderExp;\r\n }\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n this._base.applyWaterBindGroup(bindGroup);\r\n this._field.applyBindGroup(bindGroup);\r\n bindGroup.setTexture(\r\n 'ffFoamTex',\r\n this._look.getFoamTexture() ?? getDefaultFoamTexture(),\r\n fetchSampler('repeat_linear')\r\n );\r\n bindGroup.setValue('ffFoamUVScale', 1 / Math.max(0.01, this._look.getFoamTextureSize()));\r\n }\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n this._base.calcClipmapTileAABB(minX, maxX, minZ, maxZ, y, outAABB);\r\n }\r\n /** The material steps the base generator and the field; nothing to do here. */\r\n update() {}\r\n getHash() {\r\n return `${this._base.getHash()}:FF`;\r\n }\r\n needUpdate() {\r\n return true;\r\n }\r\n isOk(device: AbstractDevice) {\r\n return this._base.isOk(device);\r\n }\r\n}\r\n"],"names":["FOAM_FIELD_FREQUENCY","FOAM_FIELD_MAX_STEPS","FOAM_FLOW_PERIOD","FOAM_FIELD_LEVELS","FOAM_FIELD_CELLS","FOAM_FIELD_EDGE_BLEND","FOAM_WAVE_GAIN","WaterFoamField","Disposable","_framebuffers","_current","_programs","_timeToSimulate","_lastTime","_prewarm","_fadeRate","_size","_baseStrength","_drift","_dummy","_version","_arrays","_regions","_targets","i","push","Vector4","Map","_stateTime","_driftVelocity","Vector2","_params","_stateParams","_clock","fadeRate","val","Math","max","size","baseStrength","drift","version","stepAround","focusX","focusZ","time","wind","source","moved","cell","half","setXYZW","floor","equalsTo","setXY","x","y","device","getDevice","ensureArrays","dt","min","steps","stepDt","program","bindGroup","getStepProgram","applyFoamSourceBindGroup","setValue","sinceState","sampler","fetchSampler","pushDeviceStates","step","fb","setTexture","prev","zero","setColorAttachmentLayer","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","set","setupUniforms","scope","uniformGroup","pb","$builder","ffTex","tex2DArray","uniform","vec4","ffDrift","vec2","ffClock","applyBindGroup","getDummy","sample","xz","func","$l","result","vec3","remaining","float","r","div","sub","xy","mul","z","w","uv","edge","$if","and","greaterThan","smoothStep","texel","textureArraySampleLevel","add","g","$return","ffSample","flowPattern","tex","uvScale","xzGrad","flow","offset1","mod","weight1","$choice","offset2","s1","sampleFoamTexture","s2","mix","ffFlowPattern","onDispose","disposeArrays","p","values","dispose","clear","createArray","name","createTexture2DArray","mipmapping","createFrameBuffer","clearFrameBuffer","map","programKey","foamSourceKey","entry","get","buildRenderProgram","vertex","$inputs","pos","attrib","main","$builtins","position","fragment","$outputs","outColor","setupFoamSourceUniforms","ffSrc","ffRegion","ffPrevRegion","ffPrevRegionNext","ffParams","ffState","wp","region","rMax","abs","lessThanEqual","prewarm","level","int","fragCoord","stateAt","ffPrevUV","prevState","stateAge","ba","not","state","shape","src","calcFoamStep","flowed","at","foam","rg","$else","atNext","zw","clamp","createBindGroup","bindGroupLayouts","forEach","WaveFoamSource","_generator","_field","generator","field","_sourceParams","getHash","ShaderHelper","declareStandaloneCameraTime","wgFoamSource","applyWaterBindGroup","setStandaloneCameraTime","_state","_shape","that","bool","strength","density","calcFragmentNormalAndFoam","waveDt","wgFoamStep","FoamFieldWaveGenerator","_base","_look","flowSource","calcPrevVertexPosition","calcSurfaceCoverage","calcSheetThickness","calcUnresolvedSlopeVariance","base","look","bind","clone","ffFoamTex","tex2D","ffFoamUVScale","calcVertexPositionAndNormal","inPos","outPos","outNormal","vertexSpacing","calcFragmentNormal","vertexNormal","foamSample","footprint","params","args","inout","funcName","dpdx","dpdy","nf","vn","fs","undefined","fp","ff","ffTotal","calcFoamFlow","pattern","xyz","getFoamTexture","getDefaultFoamTexture","getFoamTextureSize","calcClipmapTileAABB","minX","maxX","minZ","maxZ","outAABB","update","needUpdate","isOk"],"mappings":"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"}