@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.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fft_wavegenerator.js","sources":["../../src/render/fft_wavegenerator.ts"],"sourcesContent":["import type { AABB, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, PRNG, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\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 RenderStateSet,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n createProgramFFT2H,\r\n createProgramFFT2V,\r\n createProgramH0,\r\n createProgramHk,\r\n createProgramPostFFT2\r\n} from '../shaders';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype OceanFieldCascade = {\r\n /** The size of simulated patch of field. (in meters) */\r\n size: number;\r\n /** How \"croppy\" this pattern would be */\r\n croppiness: number;\r\n /** Strength factor for this pattern */\r\n strength: number;\r\n /** Min wave length. Kind of spectrum filter. (Waves less that this thresold are not involved in spectrum generation) */\r\n minWave: number;\r\n /** Max wave length. Kind of spectrum filter. */\r\n maxWave: number;\r\n};\r\n\r\ntype OceanFieldBuildParams = {\r\n /** Size of generated texture. Must be power of 2 */\r\n resolution: number;\r\n /** Ocean field sub-pattern options. */\r\n cascades: [OceanFieldCascade, OceanFieldCascade, OceanFieldCascade];\r\n /** Wind vector. Module correspond to wind force. */\r\n wind: Vector2;\r\n /** Parameter for waves motion. 0 means no wave motion */\r\n alignment: number;\r\n /** Foam parameters */\r\n foamParams: Vector2;\r\n /** Seed of random generator */\r\n randomSeed: number;\r\n};\r\n\r\nfunction getDefaultBuildParams(): OceanFieldBuildParams {\r\n return {\r\n cascades: [\r\n {\r\n size: 400.0,\r\n strength: 0.4,\r\n croppiness: -1.5,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 100.0,\r\n strength: 0.4,\r\n croppiness: -1.2,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 15,\r\n strength: 0.2,\r\n croppiness: -0.5,\r\n minWave: 0,\r\n maxWave: 7\r\n }\r\n ],\r\n resolution: 256,\r\n wind: new Vector2(2, 2),\r\n alignment: 1,\r\n foamParams: new Vector2(1.2, 7.2),\r\n randomSeed: 0\r\n };\r\n}\r\n\r\ntype Programs = {\r\n h0Program: GPUProgram;\r\n hkProgram: Nullable<GPUProgram>;\r\n hkProgram2: Nullable<GPUProgram>;\r\n hkProgram4: Nullable<GPUProgram>;\r\n fft2hProgram: Nullable<GPUProgram>;\r\n fft2hProgram2: Nullable<GPUProgram>;\r\n fft2hProgram4: Nullable<GPUProgram>;\r\n fft2vProgram: Nullable<GPUProgram>;\r\n fft2vProgram2: Nullable<GPUProgram>;\r\n fft2vProgram4: Nullable<GPUProgram>;\r\n postfft2Program: Nullable<GPUProgram>;\r\n postfft2Program2: Nullable<GPUProgram>;\r\n postfft2Program4: Nullable<GPUProgram>;\r\n};\r\n\r\ntype Globales = {\r\n programs: Programs;\r\n quad: Primitive;\r\n noiseTextures: Map<number, Texture2D>;\r\n butterflyTextures: Map<number, Texture2D>;\r\n};\r\n\r\ntype WaterInstanceData = {\r\n h0Framebuffer: Nullable<FrameBuffer>;\r\n h0Textures: Texture2D[] | Texture2DArray;\r\n spectrumFramebuffer: Nullable<FrameBuffer>;\r\n spectrumFramebuffer2: Nullable<FrameBuffer>;\r\n spectrumFramebuffer4: Nullable<FrameBuffer>;\r\n spectrumTextures: Texture2D[] | Texture2DArray;\r\n pingpongFramebuffer: Nullable<FrameBuffer>;\r\n pingpongFramebuffer2: Nullable<FrameBuffer>;\r\n pingpongFramebuffer4: Nullable<FrameBuffer>;\r\n pingpongTextures: Texture2D[] | Texture2DArray;\r\n postIfft2Framebuffer: Nullable<FrameBuffer>;\r\n postIfft2Framebuffer2: Nullable<FrameBuffer>;\r\n postIfft2Framebuffer4: Nullable<FrameBuffer>;\r\n dataTextures: Texture2D[] | Texture2DArray;\r\n};\r\n\r\nconst RENDER_NONE = 0;\r\nconst RENDER_NORMAL = 1;\r\nconst RENDER_TWO_PASS = 2;\r\n\r\nconst THREAD_GROUP_SIZE = 16;\r\n\r\n/**\r\n * This class generates a 2D ocean field using the Fast Fourier Transform (FFT) algorithm.\r\n * @public\r\n */\r\nexport class FFTWaveGenerator extends Disposable implements WaveGenerator {\r\n private static _globals: Nullable<Globales> = null;\r\n private readonly _useComputeShader: boolean;\r\n private readonly _h0BindGroup!: BindGroup;\r\n private readonly _hkBindGroup!: Nullable<BindGroup>;\r\n private readonly _hkBindGroup2!: Nullable<BindGroup>;\r\n private readonly _hkBindGroup4!: Nullable<BindGroup>;\r\n private readonly _fft2hBindGroup!: Nullable<BindGroup>;\r\n private readonly _fft2vBindGroup!: Nullable<BindGroup>;\r\n private readonly _fft2hBindGroup2Used!: BindGroup[][];\r\n private readonly _fft2hBindGroup2Free!: BindGroup[][];\r\n private readonly _fft2hBindGroup4Used!: BindGroup[][];\r\n private readonly _fft2hBindGroup4Free!: BindGroup[][];\r\n private readonly _fft2vBindGroup2Used!: BindGroup[][];\r\n private readonly _fft2vBindGroup2Free!: BindGroup[][];\r\n private readonly _fft2vBindGroup4Used!: BindGroup[][];\r\n private readonly _fft2vBindGroup4Free!: BindGroup[][];\r\n private readonly _postfft2BindGroup!: Nullable<BindGroup>;\r\n private readonly _postfft2BindGroup2!: Nullable<BindGroup>;\r\n private readonly _postfft2BindGroup4!: Nullable<BindGroup>;\r\n private readonly _updateRenderStates!: RenderStateSet;\r\n private _sizes!: Vector4;\r\n private _croppinesses!: Vector4;\r\n private readonly _params!: OceanFieldBuildParams;\r\n private _instanceData!: Nullable<WaterInstanceData>;\r\n private _ifftTextures!: Nullable<Texture2D[] | Texture2DArray>;\r\n private readonly _cascades!: Vector4[];\r\n private _paramsChanged!: boolean;\r\n private _version!: number;\r\n private _resolutionChanged!: boolean;\r\n private readonly _textureFormat: TextureFormat;\r\n private readonly _h0TextureFormat: TextureFormat;\r\n private readonly _dataTextureFormat: TextureFormat;\r\n private readonly _renderMode: number;\r\n /**\r\n * Create a new instance of the FFTWaveGenerator class.\r\n * @param params - Ocean field build parameters. If not provided, default parameters will be used.\r\n */\r\n constructor(params?: OceanFieldBuildParams) {\r\n super();\r\n const device = getDevice();\r\n const renderTargetFloat16 = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\r\n const maxDrawBuffers = /*device.type !== 'webgl' && */ renderTargetFloat16\r\n ? device.getDeviceCaps().framebufferCaps.maxDrawBuffers\r\n : 0;\r\n this._textureFormat = 'rgba16f';\r\n this._h0TextureFormat = 'rgba16f';\r\n this._dataTextureFormat = 'rgba16f';\r\n this._useComputeShader = device.type === 'webgpu';\r\n const maxSampleBytes = device.getDeviceCaps().framebufferCaps.maxColorAttachmentBytesPerSample;\r\n if (maxDrawBuffers === 0) {\r\n this._renderMode = RENDER_NONE;\r\n } else if (this._useComputeShader || maxSampleBytes >= 48) {\r\n this._renderMode = RENDER_NORMAL;\r\n } else {\r\n this._renderMode = RENDER_TWO_PASS;\r\n }\r\n if (this._renderMode !== RENDER_NONE) {\r\n FFTWaveGenerator._globals = FFTWaveGenerator._globals ?? {\r\n programs: {\r\n h0Program: createProgramH0(this._useComputeShader, THREAD_GROUP_SIZE, this._h0TextureFormat),\r\n hkProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramHk(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n hkProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, undefined, 2) : null,\r\n hkProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, undefined, 4) : null,\r\n fft2hProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2H(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2hProgram2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, undefined, 2) : null,\r\n fft2hProgram4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, undefined, 4) : null,\r\n fft2vProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2V(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2vProgram2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, undefined, 2) : null,\r\n fft2vProgram4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, undefined, 4) : null,\r\n postfft2Program:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramPostFFT2(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n postfft2Program2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, undefined, 2) : null,\r\n postfft2Program4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, undefined, 4) : null\r\n },\r\n quad: FFTWaveGenerator.createQuad(),\r\n noiseTextures: new Map(),\r\n butterflyTextures: new Map()\r\n };\r\n this._params = params ?? getDefaultBuildParams();\r\n const programs = FFTWaveGenerator._globals.programs;\r\n this._h0BindGroup = device.createBindGroup(programs.h0Program.bindGroupLayouts[0]);\r\n this._hkBindGroup = programs.hkProgram\r\n ? device.createBindGroup(programs.hkProgram.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup2 = programs.hkProgram2\r\n ? device.createBindGroup(programs.hkProgram2.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup4 = programs.hkProgram4\r\n ? device.createBindGroup(programs.hkProgram4.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup = programs.fft2hProgram\r\n ? device.createBindGroup(programs.fft2hProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2vBindGroup = programs.fft2vProgram\r\n ? device.createBindGroup(programs.fft2vProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup2Used = [[], []];\r\n this._fft2hBindGroup2Free = [[], []];\r\n this._fft2hBindGroup4Used = [[], []];\r\n this._fft2hBindGroup4Free = [[], []];\r\n this._fft2vBindGroup2Used = [[], []];\r\n this._fft2vBindGroup2Free = [[], []];\r\n this._fft2vBindGroup4Used = [[], []];\r\n this._fft2vBindGroup4Free = [[], []];\r\n this._postfft2BindGroup = programs.postfft2Program\r\n ? device.createBindGroup(programs.postfft2Program.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup2 = programs.postfft2Program2\r\n ? device.createBindGroup(programs.postfft2Program2.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup4 = programs.postfft2Program4\r\n ? device.createBindGroup(programs.postfft2Program4.bindGroupLayouts[0])\r\n : null;\r\n this._instanceData = null;\r\n this._ifftTextures = null;\r\n this._sizes = new Vector4();\r\n this._croppinesses = new Vector4();\r\n this._cascades = [new Vector4(), new Vector4(), new Vector4(), new Vector4()];\r\n this._updateRenderStates = getDevice().createRenderStateSet();\r\n this._updateRenderStates.useRasterizerState().setCullMode('none');\r\n this._updateRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._version = 0;\r\n this.paramsChanged();\r\n }\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n clone() {\r\n return new FFTWaveGenerator(this._params) as this;\r\n }\r\n /*\r\n get params() {\r\n return this._params;\r\n }\r\n set params(val: OceanFieldBuildParams) {\r\n if (val && val !== this._params) {\r\n this._params = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n */\r\n private paramsChanged() {\r\n this._paramsChanged = true;\r\n this._version++;\r\n }\r\n /** Gets the wave alighment */\r\n get alignment() {\r\n return this._params.alignment;\r\n }\r\n set alignment(val) {\r\n if (this._params.alignment !== val) {\r\n this._params.alignment = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wind vector */\r\n get wind(): Immutable<Vector2> {\r\n return this._params.wind;\r\n }\r\n set wind(val: Immutable<Vector2>) {\r\n if (val !== this._params.wind && (val.x !== this._params.wind.x || val.y !== this._params.wind.y)) {\r\n this._params.wind.x = val.x;\r\n this._params.wind.y = val.y;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam width */\r\n get foamWidth() {\r\n return this._params.foamParams.x;\r\n }\r\n set foamWidth(val) {\r\n if (val !== this._params.foamParams.x) {\r\n this._params.foamParams.x = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam contrast */\r\n get foamContrast() {\r\n return this._params.foamParams.y;\r\n }\r\n set foamContrast(val) {\r\n if (val !== this._params.foamParams.y) {\r\n this._params.foamParams.y = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave length for the specified cascade */\r\n getWaveLength(cascade: number) {\r\n return this._params.cascades[cascade].size;\r\n }\r\n /**\r\n * Sets the wave length for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param length - The new wave length for the specified cascade\r\n */\r\n setWaveLength(cascade: number, length: number) {\r\n if (this._params.cascades[cascade].size !== length) {\r\n this._params.cascades[cascade].size = length;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave strength for the specified cascade */\r\n getWaveStrength(cascade: number) {\r\n return this._params.cascades[cascade].strength;\r\n }\r\n /**\r\n * Sets the wave strength for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param strength - The new wave strength for the specified cascade\r\n */\r\n setWaveStrength(cascade: number, strength: number) {\r\n if (this._params.cascades[cascade].strength !== strength) {\r\n this._params.cascades[cascade].strength = strength;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave croppiness for the specified cascade */\r\n getWaveCroppiness(cascade: number) {\r\n return this._params.cascades[cascade].croppiness;\r\n }\r\n /**\r\n * Sets the wave croppiness for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param croppiness - The new wave croppiness for the specified cascade\r\n */\r\n setWaveCroppiness(cascade: number, croppiness: number) {\r\n if (this._params.cascades[cascade].croppiness !== croppiness) {\r\n this._params.cascades[cascade].croppiness = croppiness;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** @internal */\r\n private static createQuad() {\r\n const vertexData = new Float32Array([\r\n -1, -1, 0, 0.0, 0.0, 1, -1, 0, 1.0, 0.0, 1, 1, 0, 1.0, 1.0, -1, 1, 0, 0.0, 1.0\r\n ]);\r\n const indexData = new Uint32Array([0, 1, 2, 0, 2, 3]);\r\n const prim = new Primitive();\r\n prim.createAndSetVertexBuffer(['position_f32x3', 'tex0_f32x2'], vertexData);\r\n prim.createAndSetIndexBuffer(indexData);\r\n prim.primitiveType = 'triangle-list';\r\n prim.indexStart = 0;\r\n prim.indexCount = indexData.length;\r\n return prim;\r\n }\r\n /** @internal */\r\n private getButterflyTexture(size: number) {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals!.butterflyTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D('rgba32f', Math.log2(size), size, {\r\n mipmapping: false\r\n })!;\r\n tex.name = `butterfly${size}`;\r\n tex.update(this.createButterflyTexture(size), 0, 0, tex.width, tex.height);\r\n FFTWaveGenerator._globals!.butterflyTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private generateInitialSpectrum() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n device.setProgram(FFTWaveGenerator._globals!.programs.h0Program);\r\n device.setBindGroup(0, this._h0BindGroup);\r\n this._h0BindGroup.setTexture(\r\n 'noise',\r\n this.getNoiseTexture(this._params.resolution, this._params.randomSeed),\r\n fetchSampler('repeat_nearest_nomip')\r\n );\r\n this._h0BindGroup.setValue('resolution', this._params.resolution);\r\n this._h0BindGroup.setValue('wind', this._params.wind);\r\n this._h0BindGroup.setValue('alignment', this._params.alignment);\r\n for (let i = 0; i < this._params.cascades.length; i++) {\r\n this._cascades[i].x = this._params.cascades[i].size;\r\n this._cascades[i].y =\r\n (this._params.cascades[i].strength * 0.081) /\r\n (this._params.cascades[i].size * this._params.cascades[i].size);\r\n this._cascades[i].z = (2 * Math.PI) / this._params.cascades[i].maxWave;\r\n this._cascades[i].w = (2 * Math.PI) / this._params.cascades[i].minWave;\r\n }\r\n this._h0BindGroup.setValue('cascade0', this._cascades[0]);\r\n this._h0BindGroup.setValue('cascade1', this._cascades[1]);\r\n this._h0BindGroup.setValue('cascade2', this._cascades[2]);\r\n if (device.type === 'webgpu') {\r\n this._h0BindGroup.setTexture('spectrum', instanceData.h0Textures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.h0Framebuffer);\r\n device.clearFrameBuffer(Vector4.zero(), null, null);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private getNoiseTexture(size: number, randomSeed: number) {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals!.noiseTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rg32f', size, size, {\r\n mipmapping: false\r\n })!;\r\n tex.name = `noiseTex${size}`;\r\n tex.update(this.getNoise2d(size, randomSeed, device.type === 'webgl'), 0, 0, size, size);\r\n FFTWaveGenerator._globals!.noiseTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private getNoise2d(size: number, randomSeed: number, rgba: boolean) {\r\n const rand = new PRNG(randomSeed);\r\n if (rgba) {\r\n const array = new Float32Array(size * size * 4);\r\n for (let i = 0; i < size * size; i++) {\r\n array[i * 4 + 0] = rand.get();\r\n array[i * 4 + 1] = rand.get();\r\n }\r\n return array;\r\n } else {\r\n return Float32Array.from([...Array(size * size * 2)].map(() => rand.get()));\r\n }\r\n }\r\n /** @internal */\r\n private reverseBits(v: number, width: number) {\r\n return parseInt(v.toString(2).padStart(width, '0').split('').reverse().join(''), 2);\r\n }\r\n /** @internal */\r\n private createButterflyTexture(size: number) {\r\n const width = Math.log2(size);\r\n const height = size;\r\n const texture = new Float32Array(width * height * 4);\r\n const w = (2.0 * Math.PI) / size;\r\n const bitReversed = [...Array(size).keys()].map((v) => this.reverseBits(v, width));\r\n\r\n for (let j = 0; j < width; j++) {\r\n for (let i = 0; i < height; i++) {\r\n const k = i * (size >> (j + 1));\r\n const c = Math.cos(k * w);\r\n const s = Math.sin(k * w);\r\n const span = 2 ** j;\r\n const wing = i % 2 ** (j + 1) < span ? 0 : 1; // 0 - top wing, 1 - bottom wing\r\n const texel = new Vector4();\r\n if (j === 0) {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, bitReversed[i], bitReversed[i + 1]);\r\n } else {\r\n texel.setXYZW(c, s, bitReversed[i - 1], bitReversed[i]);\r\n }\r\n } else {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, i, i + span);\r\n } else {\r\n texel.setXYZW(c, s, i - span, i);\r\n }\r\n }\r\n\r\n texture[(width * i + j) * 4] = texel[0];\r\n texture[(width * i + j) * 4 + 1] = texel[1];\r\n texture[(width * i + j) * 4 + 2] = texel[2];\r\n texture[(width * i + j) * 4 + 3] = texel[3];\r\n }\r\n }\r\n return texture;\r\n }\r\n /** @internal */\r\n private getInstanceData() {\r\n if (!this._instanceData) {\r\n const device = getDevice();\r\n const h0Textures = this.createNTextures(\r\n device,\r\n this._h0TextureFormat,\r\n this._params.resolution,\r\n 3,\r\n 'Water-h0',\r\n false\r\n );\r\n const dataTextures = this.createNTextures(\r\n device,\r\n this._dataTextureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-data',\r\n true\r\n );\r\n const spectrumTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-spectrum',\r\n true\r\n );\r\n const pingpongTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-pingpong',\r\n false\r\n );\r\n this._instanceData = {\r\n dataTextures,\r\n h0Textures: h0Textures,\r\n pingpongTextures: pingpongTextures,\r\n spectrumTextures: spectrumTextures,\r\n h0Framebuffer: this._useComputeShader\r\n ? null\r\n : device.createFrameBuffer(h0Textures as Texture2D[], null),\r\n spectrumFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(spectrumTextures as Texture2D[], null)\r\n : null,\r\n spectrumFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n spectrumFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n pingpongFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(pingpongTextures as Texture2D[], null)\r\n : null,\r\n pingpongFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n pingpongFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n postIfft2Framebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(dataTextures as Texture2D[], null)\r\n : null,\r\n postIfft2Framebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n postIfft2Framebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(0, 4), null)\r\n : null\r\n };\r\n }\r\n return this._instanceData;\r\n }\r\n /** @internal */\r\n private createNTextures(\r\n device: AbstractDevice,\r\n format: TextureFormat,\r\n size: number,\r\n num: number,\r\n name: string,\r\n linear: boolean\r\n ) {\r\n const options: TextureCreationOptions = {\r\n samplerOptions: {\r\n minFilter: linear ? 'linear' : 'nearest',\r\n magFilter: linear ? 'linear' : 'nearest',\r\n mipFilter: 'none',\r\n addressU: 'repeat',\r\n addressV: 'repeat'\r\n },\r\n writable: !!this._useComputeShader,\r\n mipmapping: false\r\n };\r\n if (this._useComputeShader) {\r\n const tex = device.createTexture2DArray(format, size, size, num, options)!;\r\n tex.name = name;\r\n return tex;\r\n } else {\r\n return Array.from({ length: num }).map((val, index) => {\r\n const tex = device.createTexture2D(format, size, size, options)!;\r\n tex.name = `${name}-${index}`;\r\n return tex;\r\n });\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update(time: number) {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n device.setRenderStates(this._updateRenderStates);\r\n if (this._resolutionChanged) {\r\n this.disposeInstanceData();\r\n }\r\n if (this._paramsChanged) {\r\n this.generateInitialSpectrum();\r\n }\r\n this._resolutionChanged = false;\r\n this._paramsChanged = false;\r\n for (let i = 0; i < 3; i++) {\r\n this._sizes[i] = this._params.cascades[i].size;\r\n this._croppinesses[i] = this._params.cascades[i].croppiness;\r\n }\r\n if (this._renderMode === RENDER_NORMAL) {\r\n this.generateSpectrum(time);\r\n this.ifft2();\r\n this.postIfft2();\r\n } else {\r\n this.generateSpectrumTwoPass(time);\r\n this.ifft2TwoPass();\r\n this.postIfft2TwoPass();\r\n }\r\n device.popDeviceStates();\r\n }\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return true;\r\n }\r\n /** @internal */\r\n private disposeNTextures(texture: Nullable<Texture2D[] | Texture2DArray>) {\r\n if (Array.isArray(texture)) {\r\n texture.forEach((tex) => tex.dispose());\r\n } else if (texture) {\r\n texture.dispose();\r\n }\r\n }\r\n /** @internal */\r\n private disposeInstanceData() {\r\n if (this._instanceData) {\r\n this.disposeNTextures(this._instanceData.dataTextures);\r\n this.disposeNTextures(this._instanceData.h0Textures);\r\n this.disposeNTextures(this._instanceData.pingpongTextures);\r\n this.disposeNTextures(this._instanceData.spectrumTextures);\r\n this._instanceData.h0Framebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer2?.dispose();\r\n this._instanceData.pingpongFramebuffer4?.dispose();\r\n this._instanceData.spectrumFramebuffer?.dispose();\r\n this._instanceData.spectrumFramebuffer2?.dispose();\r\n this._instanceData.spectrumFramebuffer4?.dispose();\r\n this._instanceData.postIfft2Framebuffer?.dispose();\r\n this._instanceData.postIfft2Framebuffer2?.dispose();\r\n this._instanceData.postIfft2Framebuffer4?.dispose();\r\n this._instanceData = null;\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrum(time: number) {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram);\r\n device.setBindGroup(0, this._hkBindGroup!);\r\n this._hkBindGroup!.setValue('t', time);\r\n this._hkBindGroup!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup!.setValue('sizes', this._sizes);\r\n if (this._useComputeShader) {\r\n this._hkBindGroup!.setTexture('h0Texture', instanceData.h0Textures as Texture2DArray);\r\n this._hkBindGroup!.setTexture('spectrum', instanceData.spectrumTextures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const h0Textures = instanceData.h0Textures as Texture2D[];\r\n this._hkBindGroup!.setTexture('h0Texture0', h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup!.setTexture('h0Texture1', h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup!.setTexture('h0Texture2', h0Textures[2], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup!.setValue('h0TexSize', new Vector2(h0Textures[0].width, h0Textures[0].height));\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrumTwoPass(time: number) {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram4);\r\n device.setBindGroup(0, this._hkBindGroup4!);\r\n const h0Textures = instanceData.h0Textures as Texture2D[];\r\n this._hkBindGroup4!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup4!.setValue('sizes', this._sizes);\r\n this._hkBindGroup4!.setTexture('h0Texture0', h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup4!.setTexture('h0Texture1', h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup4!.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup4!.setValue('h0TexSize', new Vector2(h0Textures[0].width, h0Textures[0].height));\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer4);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram2);\r\n device.setBindGroup(0, this._hkBindGroup2!);\r\n this._hkBindGroup2!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup2!.setValue('sizes', this._sizes);\r\n this._hkBindGroup2!.setTexture('h0Texture2', h0Textures[2], nearestRepeatSampler);\r\n this._hkBindGroup2!.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup2!.setValue('h0TexSize', new Vector2(h0Textures[0].width, h0Textures[0].height));\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer2);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n /** @internal */\r\n private ifft2() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures: [Texture2D[] | Texture2DArray, Texture2D[] | Texture2DArray] = [\r\n instanceData.spectrumTextures,\r\n instanceData.pingpongTextures\r\n ];\r\n const pingPongFramebuffers: [\r\n Nullable<FrameBuffer> | Texture2DArray,\r\n Nullable<FrameBuffer> | Texture2DArray\r\n ] = this._useComputeShader\r\n ? [instanceData.pingpongTextures as Texture2DArray, instanceData.spectrumTextures as Texture2DArray]\r\n : [instanceData.pingpongFramebuffer, instanceData.spectrumFramebuffer];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n let pingPong = 0;\r\n\r\n // horizontal ifft\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram);\r\n device.setBindGroup(0, this._fft2hBindGroup!);\r\n this._fft2hBindGroup!.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2hBindGroup!.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2hBindGroup!.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2hBindGroup!.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const pingPongTexture = pingPongTextures[pingPong] as Texture2D[];\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2hBindGroup!.setTexture('spectrum0', pingPongTexture[0], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum1', pingPongTexture[1], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum2', pingPongTexture[2], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum3', pingPongTexture[3], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum4', pingPongTexture[4], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum5', pingPongTexture[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2hBindGroup!.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTexture[0].width,\r\n pingPongTexture[0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n pingPong = 1 - pingPong; //(pingPong + 1) % 2;\r\n }\r\n // vertical ifft\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram);\r\n device.setBindGroup(0, this._fft2vBindGroup!);\r\n this._fft2vBindGroup!.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2vBindGroup!.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2vBindGroup!.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2vBindGroup!.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const pingPongTexture = pingPongTextures[pingPong] as Texture2D[];\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2vBindGroup!.setTexture('spectrum0', pingPongTexture[0], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum1', pingPongTexture[1], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum2', pingPongTexture[2], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum3', pingPongTexture[3], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum4', pingPongTexture[4], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum5', pingPongTexture[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2vBindGroup!.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTexture[0].width,\r\n pingPongTexture[0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n pingPong = 1 - pingPong;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup2(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2hBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2hProgram2!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup4(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2hBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2hProgram4!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup2(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2vBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2vProgram2!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup4(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2vBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2vProgram4!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private ifft2TwoPass() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures = [\r\n instanceData.spectrumTextures as Texture2D[],\r\n instanceData.pingpongTextures as Texture2D[]\r\n ];\r\n const pingPongFramebuffers4: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer4!,\r\n instanceData.spectrumFramebuffer4!\r\n ];\r\n const pingPongFramebuffers2: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer2!,\r\n instanceData.spectrumFramebuffer2!\r\n ];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n // horizontal ifft\r\n let pingPong = 0;\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram4);\r\n const fft2hBindGroup4 = this.getFFT2hBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup4);\r\n fft2hBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup4.setValue('phase', phase);\r\n fft2hBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram2);\r\n const fft2hBindGroup2 = this.getFFT2hBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup2);\r\n fft2hBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup2.setValue('phase', phase);\r\n fft2hBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2hBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n\r\n // vertical ifft\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram4);\r\n const fft2vBindGroup4 = this.getFFT2vBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup4);\r\n fft2vBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup4.setValue('phase', phase);\r\n fft2vBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram2);\r\n const fft2vBindGroup2 = this.getFFT2vBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup2);\r\n fft2vBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup2.setValue('phase', phase);\r\n fft2vBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2vBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n for (let i = 0; i < 2; i++) {\r\n this._fft2hBindGroup2Used[i].push(...this._fft2hBindGroup2Free[i]);\r\n this._fft2hBindGroup2Free[i].length = 0;\r\n this._fft2hBindGroup4Used[i].push(...this._fft2hBindGroup4Free[i]);\r\n this._fft2hBindGroup4Free[i].length = 0;\r\n this._fft2vBindGroup2Used[i].push(...this._fft2vBindGroup2Free[i]);\r\n this._fft2vBindGroup2Free[i].length = 0;\r\n this._fft2vBindGroup4Used[i].push(...this._fft2vBindGroup4Free[i]);\r\n this._fft2vBindGroup4Free[i].length = 0;\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program);\r\n device.setBindGroup(0, this._postfft2BindGroup!);\r\n this._postfft2BindGroup!.setValue('N2', this._params.resolution * this._params.resolution);\r\n if (this._useComputeShader) {\r\n this._postfft2BindGroup!.setTexture('output', instanceData.dataTextures as Texture2DArray);\r\n this._postfft2BindGroup!.setTexture('ifft', this._ifftTextures as Texture2DArray, nearestRepeatSampler);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const ifftTextures = this._ifftTextures as Texture2D[];\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer);\r\n this._postfft2BindGroup!.setTexture('ifft0', ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft1', ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft2', ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft3', ifftTextures[3], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft4', ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft5', ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup!.setValue(\r\n 'ifftTexSize',\r\n new Vector2(ifftTextures[0].width, ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2TwoPass() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer4);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program4);\r\n device.setBindGroup(0, this._postfft2BindGroup4!);\r\n const ifftTextures = this._ifftTextures as Texture2D[];\r\n this._postfft2BindGroup4!.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup4!.setTexture('ifft0', ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft1', ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft2', ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft3', ifftTextures[3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup4!.setValue(\r\n 'ifftTexSize',\r\n new Vector2(ifftTextures[0].width, ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer2);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program2);\r\n device.setBindGroup(0, this._postfft2BindGroup2!);\r\n this._postfft2BindGroup2!.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup2!.setTexture('ifft4', ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup2!.setTexture('ifft5', ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup2!.setValue(\r\n 'ifftTexSize',\r\n new Vector2(ifftTextures[0].width, ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.sizes = pb.vec4().uniform(uniformGroup);\r\n scope.croppinesses = pb.vec4().uniform(uniformGroup);\r\n if (this._useComputeShader) {\r\n scope.dataTexture = pb.tex2DArray().uniform(uniformGroup);\r\n } else {\r\n scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(uniformGroup);\r\n }\r\n if (pb.shaderKind === 'fragment') {\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.$l.xz = this.inPos.xz;\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l.a = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n } else {\r\n this.$l.a = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n }\r\n this.$l.displacement = pb.add(this.a, this.b, this.c);\r\n this.outPos = pb.add(this.inPos, this.displacement);\r\n this.outNormal = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n this.$return(this.normal);\r\n });\r\n return scope.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('jacobian', [pb.float('dxdx'), pb.float('dxdz'), pb.float('dzdz')], function () {\r\n this.$l.Jxx = pb.add(this.dxdx, 1);\r\n this.$l.Jxz = this.dxdz;\r\n this.$l.Jzz = pb.add(this.dzdz, 1);\r\n this.$return(pb.vec4(this.Jxx, this.Jxz, this.Jxz, this.Jzz));\r\n });\r\n pb.func('det', [pb.vec4('jacobian')], function () {\r\n this.$return(\r\n pb.sub(pb.mul(this.jacobian.x, this.jacobian.w), pb.mul(this.jacobian.y, this.jacobian.z))\r\n );\r\n });\r\n pb.func('calcNormalAndFoam', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n\r\n // foam\r\n this.$l.dxdx_dzdz0 = this._sx_sz_dxdx_dzdz0.zw;\r\n this.$l.dxdx_dzdz1 = this._sx_sz_dxdx_dzdz1.zw;\r\n this.$l.dxdx_dzdz2 = this._sx_sz_dxdx_dzdz2.zw;\r\n if (that._useComputeShader) {\r\n this.$l.dxdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).w;\r\n this.$l.dxdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).w;\r\n this.$l.dxdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).w;\r\n } else {\r\n this.$l.dxdz0 = pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).w;\r\n this.$l.dxdz1 = pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).w;\r\n this.$l.dxdz2 = pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).w;\r\n }\r\n this.$l.dxdz = pb.add(\r\n pb.mul(this.dxdz0, this.croppinesses.x),\r\n pb.mul(this.dxdz1, this.croppinesses.y),\r\n pb.mul(this.dxdz2, this.croppinesses.z)\r\n );\r\n this.$l.val = this.det(this.jacobian(this.dxdx_dzdz.x, this.dxdz, this.dxdx_dzdz.y));\r\n this.$l.foam = pb.abs(\r\n pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y)\r\n );\r\n this.$return(pb.vec4(this.normal, this.foam));\r\n });\r\n return scope.calcNormalAndFoam(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return this._renderMode !== RENDER_NONE;\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n const instanceData = this.getInstanceData();\r\n const linearRepeatSampler = fetchSampler('repeat_linear_nomip');\r\n if (this._useComputeShader) {\r\n bindGroup.setTexture('dataTexture', instanceData.dataTextures as Texture2DArray, linearRepeatSampler);\r\n } else {\r\n const dataTextures = instanceData.dataTextures as Texture2D[];\r\n bindGroup.setTexture('dx_hy_dz_dxdz0', dataTextures[0], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz0', dataTextures[1], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz1', dataTextures[2], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz1', dataTextures[3], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz2', dataTextures[4], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz2', dataTextures[5], linearRepeatSampler);\r\n }\r\n bindGroup.setValue('foamParams', this._params.foamParams);\r\n bindGroup.setValue('sizes', this._sizes);\r\n bindGroup.setValue('croppinesses', this._croppinesses);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const disturb = Math.max(Math.abs(this.wind.x), Math.abs(this.wind.y), 2);\r\n outAABB.minPoint.setXYZ(minX - 8 * disturb, y - 8 * disturb, minZ - 8 * disturb);\r\n outAABB.maxPoint.setXYZ(maxX + 8 * disturb, y + 8 * disturb, maxZ + 8 * disturb);\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'FFTWaveGenerator';\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this.disposeInstanceData();\r\n }\r\n}\r\n"],"names":["getDefaultBuildParams","cascades","size","strength","croppiness","minWave","maxWave","resolution","wind","Vector2","alignment","foamParams","randomSeed","RENDER_NONE","RENDER_NORMAL","RENDER_TWO_PASS","THREAD_GROUP_SIZE","FFTWaveGenerator","Disposable","_globals","_useComputeShader","_h0BindGroup","_hkBindGroup","_hkBindGroup2","_hkBindGroup4","_fft2hBindGroup","_fft2vBindGroup","_fft2hBindGroup2Used","_fft2hBindGroup2Free","_fft2hBindGroup4Used","_fft2hBindGroup4Free","_fft2vBindGroup2Used","_fft2vBindGroup2Free","_fft2vBindGroup4Used","_fft2vBindGroup4Free","_postfft2BindGroup","_postfft2BindGroup2","_postfft2BindGroup4","_updateRenderStates","_sizes","_croppinesses","_params","_instanceData","_ifftTextures","_cascades","_paramsChanged","_version","_resolutionChanged","_textureFormat","_h0TextureFormat","_dataTextureFormat","_renderMode","params","device","getDevice","renderTargetFloat16","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","maxDrawBuffers","framebufferCaps","type","maxSampleBytes","maxColorAttachmentBytesPerSample","programs","h0Program","createProgramH0","hkProgram","createProgramHk","hkProgram2","undefined","hkProgram4","fft2hProgram","createProgramFFT2H","fft2hProgram2","fft2hProgram4","fft2vProgram","createProgramFFT2V","fft2vProgram2","fft2vProgram4","postfft2Program","createProgramPostFFT2","postfft2Program2","postfft2Program4","quad","createQuad","noiseTextures","Map","butterflyTextures","createBindGroup","bindGroupLayouts","Vector4","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","paramsChanged","version","clone","val","x","y","foamWidth","foamContrast","getWaveLength","cascade","setWaveLength","length","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","vertexData","Float32Array","indexData","Uint32Array","prim","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","indexStart","indexCount","getButterflyTexture","tex","get","createTexture2D","Math","log2","mipmapping","name","update","createButterflyTexture","width","height","set","instanceData","getInstanceData","setProgram","setBindGroup","setTexture","getNoiseTexture","fetchSampler","setValue","i","z","PI","w","h0Textures","compute","setFramebuffer","h0Framebuffer","clearFrameBuffer","zero","draw","getNoise2d","rgba","rand","PRNG","array","from","Array","map","reverseBits","v","parseInt","toString","padStart","split","reverse","join","texture","bitReversed","keys","j","k","c","cos","s","sin","span","wing","texel","setXYZW","createNTextures","dataTextures","spectrumTextures","pingpongTextures","createFrameBuffer","spectrumFramebuffer","spectrumFramebuffer2","slice","spectrumFramebuffer4","pingpongFramebuffer","pingpongFramebuffer2","pingpongFramebuffer4","postIfft2Framebuffer","postIfft2Framebuffer2","postIfft2Framebuffer4","format","num","linear","options","samplerOptions","minFilter","magFilter","mipFilter","addressU","addressV","writable","createTexture2DArray","index","time","pushDeviceStates","setRenderStates","disposeInstanceData","generateInitialSpectrum","generateSpectrum","ifft2","postIfft2","generateSpectrumTwoPass","ifft2TwoPass","postIfft2TwoPass","popDeviceStates","needUpdate","disposeNTextures","isArray","forEach","dispose","nearestRepeatSampler","phases","pingPongTextures","pingPongFramebuffers","butterflyTex","pingPong","phase","pingPongTexture","getFFT2hBindGroup2","pingpong","bindGroup","pop","push","getFFT2hBindGroup4","getFFT2vBindGroup2","getFFT2vBindGroup4","pingPongFramebuffers4","pingPongFramebuffers2","fft2hBindGroup4","fft2hBindGroup2","fft2vBindGroup4","fft2vBindGroup2","ifftTextures","setupUniforms","scope","uniformGroup","pb","$builder","sizes","vec4","uniform","croppinesses","dataTexture","tex2DArray","dx_hy_dz_dxdz0","tex2D","sx_sz_dxdx_dzdz0","dx_hy_dz_dxdz1","sx_sz_dxdx_dzdz1","dx_hy_dz_dxdz2","sx_sz_dxdx_dzdz2","shaderKind","vec2","calcVertexPositionAndNormal","inPos","outPos","outNormal","that","func","vec3","out","$l","xz","uv0","div","uv1","uv2","a","mul","textureArraySampleLevel","rgb","b","textureSampleLevel","displacement","add","calcPositionAndNormal","calcFragmentNormal","_vertexNormal","_sx_sz_dxdx_dzdz0","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","sx","sz","dxdx_dzdz","zw","slope","normal","normalize","neg","$return","calcFragmentNormalAndFoam","float","Jxx","dxdx","Jxz","dxdz","Jzz","dzdz","sub","jacobian","dxdx_dzdz0","dxdx_dzdz1","dxdx_dzdz2","dxdz0","dxdz1","dxdz2","det","foam","abs","pow","min","calcNormalAndFoam","isOk","applyWaterBindGroup","linearRepeatSampler","calcClipmapTileAABB","minX","maxX","minZ","maxZ","outAABB","disturb","max","minPoint","setXYZ","maxPoint","getHash","onDispose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fft_wavegenerator.js","sources":["../../src/render/fft_wavegenerator.ts"],"sourcesContent":["import type { AABB, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, PRNG, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\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 RenderStateSet,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n TextureFormat,\r\n TextureSampler\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n createProgramFFT2H,\r\n createProgramFFT2V,\r\n createProgramH0,\r\n createProgramHk,\r\n createProgramPostFFT2\r\n} from '../shaders';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype OceanFieldCascade = {\r\n /** How \"croppy\" this pattern would be */\r\n croppiness: number;\r\n /** Strength factor for this pattern */\r\n strength: number;\r\n};\r\n\r\ntype OceanFieldBuildParams = {\r\n /** Size of generated texture. Must be power of 2 */\r\n resolution: number;\r\n /** Ocean field sub-pattern options. */\r\n cascades: [OceanFieldCascade, OceanFieldCascade, OceanFieldCascade];\r\n /** Wind vector. Module correspond to wind force. */\r\n wind: Vector2;\r\n /** Parameter for waves motion. 0 means no wave motion */\r\n alignment: number;\r\n /** Foam parameters */\r\n foamParams: Vector2;\r\n /** Seed of random generator */\r\n randomSeed: number;\r\n};\r\n\r\n/**\r\n * Size of the largest cascade over the peak wavelength of the spectrum,\r\n * 2 pi sqrt(2) U^2 / g for the Phillips spectrum at wind speed U: the peak\r\n * repeats some 14 times across it, and the band below it, where no wave\r\n * height is left, stays out of every cascade.\r\n */\r\nconst CASCADE_PEAK_SPAN = 14;\r\n/**\r\n * Size of a cascade over that of the next smaller one. Each covers the\r\n * wavelengths between the next larger one's Nyquist and its own, about three\r\n * octaves at this ratio; not an integer, so the tiles of the cascades do not\r\n * repeat in step.\r\n */\r\nconst CASCADE_RATIO = 7.5;\r\n/** Sizes of the largest cascade are kept within, in meters. */\r\nconst CASCADE_MIN_SIZE = 16;\r\nconst CASCADE_MAX_SIZE = 16384;\r\n\r\nfunction getDefaultBuildParams(): OceanFieldBuildParams {\r\n return {\r\n cascades: [\r\n {\r\n strength: 0.4,\r\n croppiness: -1.5\r\n },\r\n {\r\n strength: 0.4,\r\n croppiness: -1.2\r\n },\r\n {\r\n strength: 0.4,\r\n croppiness: -0.5\r\n }\r\n ],\r\n resolution: 256,\r\n wind: new Vector2(2, 2),\r\n alignment: 1,\r\n foamParams: new Vector2(1.2, 7.2),\r\n randomSeed: 0\r\n };\r\n}\r\n\r\ntype Programs = {\r\n h0Program: GPUProgram;\r\n hkProgram: Nullable<GPUProgram>;\r\n hkProgram2: Nullable<GPUProgram>;\r\n hkProgram4: Nullable<GPUProgram>;\r\n fft2hProgram: Nullable<GPUProgram>;\r\n fft2hProgram2: Nullable<GPUProgram>;\r\n fft2hProgram4: Nullable<GPUProgram>;\r\n fft2vProgram: Nullable<GPUProgram>;\r\n fft2vProgram2: Nullable<GPUProgram>;\r\n fft2vProgram4: Nullable<GPUProgram>;\r\n postfft2Program: Nullable<GPUProgram>;\r\n postfft2Program2: Nullable<GPUProgram>;\r\n postfft2Program4: Nullable<GPUProgram>;\r\n};\r\n\r\ntype Globales = {\r\n programs: Programs;\r\n quad: Primitive;\r\n /** Keyed `${size}:${randomSeed}`, since both select the contents. */\r\n noiseTextures: Map<string, Texture2D>;\r\n butterflyTextures: Map<number, Texture2D>;\r\n slopeSampler?: TextureSampler;\r\n};\r\n\r\ntype WaterInstanceData = {\r\n h0Framebuffer: Nullable<FrameBuffer>;\r\n h0Textures: Texture2D[] | Texture2DArray;\r\n spectrumFramebuffer: Nullable<FrameBuffer>;\r\n spectrumFramebuffer2: Nullable<FrameBuffer>;\r\n spectrumFramebuffer4: Nullable<FrameBuffer>;\r\n spectrumTextures: Texture2D[] | Texture2DArray;\r\n pingpongFramebuffer: Nullable<FrameBuffer>;\r\n pingpongFramebuffer2: Nullable<FrameBuffer>;\r\n pingpongFramebuffer4: Nullable<FrameBuffer>;\r\n pingpongTextures: Texture2D[] | Texture2DArray;\r\n postIfft2Framebuffer: Nullable<FrameBuffer>;\r\n postIfft2Framebuffer2: Nullable<FrameBuffer>;\r\n postIfft2Framebuffer4: Nullable<FrameBuffer>;\r\n dataTextures: Texture2D[] | Texture2DArray;\r\n};\r\n\r\nconst RENDER_NONE = 0;\r\nconst RENDER_NORMAL = 1;\r\nconst RENDER_TWO_PASS = 2;\r\n\r\nconst THREAD_GROUP_SIZE = 16;\r\n\r\n/**\r\n * Mip levels of a cascade over which the share of its slope variance kept is\r\n * tabulated (levels 1 to this); level 0 keeps it all, the level past the table\r\n * none.\r\n */\r\nconst SLOPE_LOD_LEVELS = 8;\r\n/**\r\n * Anisotropy of the slope sampling. At 1 the mip level follows the pixel's\r\n * long axis: soft at grazing views, but the finest near the camera. Higher\r\n * picks it from the short axis, and the few taps the hardware takes along the\r\n * long one leave the shortest waves to alias into speckle close by.\r\n */\r\nconst SLOPE_MAX_ANISOTROPY = 1;\r\n/**\r\n * Scale of the screen derivatives the slopes are filtered by, log2 of it a bias\r\n * of the mip level. Above 1 hides the speckle of a higher anisotropy, but\r\n * softens the near waves by as much.\r\n */\r\nconst SLOPE_FILTER_SCALE = 1;\r\n\r\n/**\r\n * This class generates a 2D ocean field using the Fast Fourier Transform (FFT) algorithm.\r\n * @public\r\n */\r\nexport class FFTWaveGenerator extends Disposable implements WaveGenerator {\r\n private static _globals: Nullable<Globales> = null;\r\n private readonly _useComputeShader: boolean;\r\n private readonly _h0BindGroup!: BindGroup;\r\n private readonly _hkBindGroup!: Nullable<BindGroup>;\r\n private readonly _hkBindGroup2!: Nullable<BindGroup>;\r\n private readonly _hkBindGroup4!: Nullable<BindGroup>;\r\n private readonly _fft2hBindGroup!: Nullable<BindGroup>;\r\n private readonly _fft2vBindGroup!: Nullable<BindGroup>;\r\n private readonly _fft2hBindGroup2Used!: BindGroup[][];\r\n private readonly _fft2hBindGroup2Free!: BindGroup[][];\r\n private readonly _fft2hBindGroup4Used!: BindGroup[][];\r\n private readonly _fft2hBindGroup4Free!: BindGroup[][];\r\n private readonly _fft2vBindGroup2Used!: BindGroup[][];\r\n private readonly _fft2vBindGroup2Free!: BindGroup[][];\r\n private readonly _fft2vBindGroup4Used!: BindGroup[][];\r\n private readonly _fft2vBindGroup4Free!: BindGroup[][];\r\n private readonly _postfft2BindGroup!: Nullable<BindGroup>;\r\n private readonly _postfft2BindGroup2!: Nullable<BindGroup>;\r\n private readonly _postfft2BindGroup4!: Nullable<BindGroup>;\r\n private readonly _updateRenderStates!: RenderStateSet;\r\n private _sizes!: Vector4;\r\n private _croppinesses!: Vector4;\r\n private readonly _params!: OceanFieldBuildParams;\r\n private _instanceData!: Nullable<WaterInstanceData>;\r\n private _ifftTextures!: Nullable<Texture2D[] | Texture2DArray>;\r\n private readonly _cascades!: Vector4[];\r\n /** Per cascade: slope (var x, var z, cov xz) in world units, and its texel size */\r\n private readonly _slopeVariances!: Vector4[];\r\n /** Per cascade, two each: share of its slope variance mip levels 1-4 and 5-8 keep */\r\n private readonly _slopeRetained!: Float32Array<ArrayBuffer>;\r\n private _paramsChanged!: boolean;\r\n private _version!: number;\r\n private _resolutionChanged!: boolean;\r\n private readonly _textureFormat: TextureFormat;\r\n private readonly _h0TextureFormat: TextureFormat;\r\n private readonly _dataTextureFormat: TextureFormat;\r\n private readonly _renderMode: number;\r\n /**\r\n * Create a new instance of the FFTWaveGenerator class.\r\n * @param params - Ocean field build parameters. If not provided, default parameters will be used.\r\n */\r\n constructor(params?: OceanFieldBuildParams) {\r\n super();\r\n const device = getDevice();\r\n const renderTargetFloat16 = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\r\n const maxDrawBuffers = renderTargetFloat16 ? device.getDeviceCaps().framebufferCaps.maxDrawBuffers : 0;\r\n this._textureFormat = 'rgba16f';\r\n this._h0TextureFormat = 'rgba16f';\r\n this._dataTextureFormat = 'rgba16f';\r\n this._useComputeShader = device.type === 'webgpu';\r\n const maxSampleBytes = device.getDeviceCaps().framebufferCaps.maxColorAttachmentBytesPerSample;\r\n if (maxDrawBuffers === 0) {\r\n this._renderMode = RENDER_NONE;\r\n } else if (this._useComputeShader || maxSampleBytes >= 48) {\r\n this._renderMode = RENDER_NORMAL;\r\n } else {\r\n this._renderMode = RENDER_TWO_PASS;\r\n }\r\n if (this._renderMode !== RENDER_NONE) {\r\n FFTWaveGenerator._globals = FFTWaveGenerator._globals ?? {\r\n programs: {\r\n h0Program: createProgramH0(this._useComputeShader, THREAD_GROUP_SIZE, this._h0TextureFormat),\r\n hkProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramHk(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n hkProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, undefined, 2) : null,\r\n hkProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, undefined, 4) : null,\r\n fft2hProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2H(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2hProgram2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, undefined, 2) : null,\r\n fft2hProgram4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, undefined, 4) : null,\r\n fft2vProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2V(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2vProgram2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, undefined, 2) : null,\r\n fft2vProgram4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, undefined, 4) : null,\r\n postfft2Program:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramPostFFT2(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n postfft2Program2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, undefined, 2) : null,\r\n postfft2Program4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, undefined, 4) : null\r\n },\r\n quad: FFTWaveGenerator.createQuad(),\r\n noiseTextures: new Map(),\r\n butterflyTextures: new Map()\r\n };\r\n this._params = params ?? getDefaultBuildParams();\r\n const programs = FFTWaveGenerator._globals.programs;\r\n this._h0BindGroup = device.createBindGroup(programs.h0Program.bindGroupLayouts[0]);\r\n this._hkBindGroup = programs.hkProgram\r\n ? device.createBindGroup(programs.hkProgram.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup2 = programs.hkProgram2\r\n ? device.createBindGroup(programs.hkProgram2.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup4 = programs.hkProgram4\r\n ? device.createBindGroup(programs.hkProgram4.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup = programs.fft2hProgram\r\n ? device.createBindGroup(programs.fft2hProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2vBindGroup = programs.fft2vProgram\r\n ? device.createBindGroup(programs.fft2vProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup2Used = [[], []];\r\n this._fft2hBindGroup2Free = [[], []];\r\n this._fft2hBindGroup4Used = [[], []];\r\n this._fft2hBindGroup4Free = [[], []];\r\n this._fft2vBindGroup2Used = [[], []];\r\n this._fft2vBindGroup2Free = [[], []];\r\n this._fft2vBindGroup4Used = [[], []];\r\n this._fft2vBindGroup4Free = [[], []];\r\n this._postfft2BindGroup = programs.postfft2Program\r\n ? device.createBindGroup(programs.postfft2Program.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup2 = programs.postfft2Program2\r\n ? device.createBindGroup(programs.postfft2Program2.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup4 = programs.postfft2Program4\r\n ? device.createBindGroup(programs.postfft2Program4.bindGroupLayouts[0])\r\n : null;\r\n this._instanceData = null;\r\n this._ifftTextures = null;\r\n this._sizes = new Vector4();\r\n this._croppinesses = new Vector4();\r\n this._cascades = [new Vector4(), new Vector4(), new Vector4(), new Vector4()];\r\n this._slopeVariances = [new Vector4(), new Vector4(), new Vector4()];\r\n this._slopeRetained = new Float32Array(6 * 4);\r\n this._updateRenderStates = getDevice().createRenderStateSet();\r\n this._updateRenderStates.useRasterizerState().setCullMode('none');\r\n this._updateRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._version = 0;\r\n this.paramsChanged();\r\n }\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n clone() {\r\n return new FFTWaveGenerator(this._params) as this;\r\n }\r\n private paramsChanged() {\r\n this._paramsChanged = true;\r\n this._version++;\r\n }\r\n /** Gets the wave alighment */\r\n get alignment() {\r\n return this._params.alignment;\r\n }\r\n set alignment(val) {\r\n if (this._params.alignment !== val) {\r\n this._params.alignment = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wind vector */\r\n get wind(): Immutable<Vector2> {\r\n return this._params.wind;\r\n }\r\n set wind(val: Immutable<Vector2>) {\r\n if (val !== this._params.wind && (val.x !== this._params.wind.x || val.y !== this._params.wind.y)) {\r\n this._params.wind.x = val.x;\r\n this._params.wind.y = val.y;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam width */\r\n get foamWidth() {\r\n return this._params.foamParams.x;\r\n }\r\n set foamWidth(val) {\r\n if (val !== this._params.foamParams.x) {\r\n this._params.foamParams.x = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam contrast */\r\n get foamContrast() {\r\n return this._params.foamParams.y;\r\n }\r\n set foamContrast(val) {\r\n if (val !== this._params.foamParams.y) {\r\n this._params.foamParams.y = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /**\r\n * Gets the size of the patch the specified cascade simulates, in meters.\r\n *\r\n * The sizes follow the wind: the largest cascade spans the peak wavelength of\r\n * the spectrum some times over, and each next one is a fixed fraction of it,\r\n * so the three cover the waves that carry height and slope at any wind speed.\r\n * @param cascade - The cascade index\r\n */\r\n getWaveLength(cascade: number) {\r\n const windSpeed = Math.hypot(this._params.wind.x, this._params.wind.y);\r\n const peak = (2 * Math.PI * Math.SQRT2 * windSpeed * windSpeed) / 9.81;\r\n const largest = Math.min(Math.max(peak * CASCADE_PEAK_SPAN, CASCADE_MIN_SIZE), CASCADE_MAX_SIZE);\r\n return largest / Math.pow(CASCADE_RATIO, cascade);\r\n }\r\n /** Gets the wave strength for the specified cascade */\r\n getWaveStrength(cascade: number) {\r\n return this._params.cascades[cascade].strength;\r\n }\r\n /**\r\n * Sets the wave strength for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param strength - The new wave strength for the specified cascade\r\n */\r\n setWaveStrength(cascade: number, strength: number) {\r\n if (this._params.cascades[cascade].strength !== strength) {\r\n this._params.cascades[cascade].strength = strength;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave croppiness for the specified cascade */\r\n getWaveCroppiness(cascade: number) {\r\n return this._params.cascades[cascade].croppiness;\r\n }\r\n /**\r\n * Sets the wave croppiness for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param croppiness - The new wave croppiness for the specified cascade\r\n */\r\n setWaveCroppiness(cascade: number, croppiness: number) {\r\n if (this._params.cascades[cascade].croppiness !== croppiness) {\r\n this._params.cascades[cascade].croppiness = croppiness;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** @internal */\r\n private static createQuad() {\r\n const vertexData = new Float32Array([\r\n -1, -1, 0, 0.0, 0.0, 1, -1, 0, 1.0, 0.0, 1, 1, 0, 1.0, 1.0, -1, 1, 0, 0.0, 1.0\r\n ]);\r\n const indexData = new Uint32Array([0, 1, 2, 0, 2, 3]);\r\n const prim = new Primitive();\r\n prim.createAndSetVertexBuffer(['position_f32x3', 'tex0_f32x2'], vertexData);\r\n prim.createAndSetIndexBuffer(indexData);\r\n prim.primitiveType = 'triangle-list';\r\n prim.indexStart = 0;\r\n prim.indexCount = indexData.length;\r\n return prim;\r\n }\r\n /** @internal */\r\n private getButterflyTexture(size: number) {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals!.butterflyTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D('rgba32f', Math.log2(size), size, {\r\n mipmapping: false\r\n })!;\r\n tex.name = `butterfly${size}`;\r\n tex.update(this.createButterflyTexture(size), 0, 0, tex.width, tex.height);\r\n FFTWaveGenerator._globals!.butterflyTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private generateInitialSpectrum() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n device.setProgram(FFTWaveGenerator._globals!.programs.h0Program);\r\n device.setBindGroup(0, this._h0BindGroup);\r\n this._h0BindGroup.setTexture(\r\n 'noise',\r\n this.getNoiseTexture(this._params.resolution, this._params.randomSeed),\r\n fetchSampler('repeat_nearest_nomip')\r\n );\r\n this._h0BindGroup.setValue('resolution', this._params.resolution);\r\n this._h0BindGroup.setValue('wind', this._params.wind);\r\n this._h0BindGroup.setValue('alignment', this._params.alignment);\r\n // Bands split as in Bruneton's ocean demo (and Ceto, its Unity port): each\r\n // cascade keeps the wave numbers outside the square |kx|, |ky| < kMin, kMin the\r\n // Nyquist pi N / L of the next larger cascade (pi / L for the largest), and\r\n // stops at its own Nyquist, so the cascades share no wave number.\r\n const cascades = this._params.cascades;\r\n for (let i = 0; i < cascades.length; i++) {\r\n const size = this.getWaveLength(i);\r\n this._cascades[i].x = size;\r\n this._cascades[i].y = (cascades[i].strength * 0.081) / (size * size);\r\n this._cascades[i].z =\r\n i === 0 ? Math.PI / size : (Math.PI * this._params.resolution) / this.getWaveLength(i - 1);\r\n this._cascades[i].w = 0;\r\n }\r\n this.computeSlopeVariances();\r\n this._h0BindGroup.setValue('cascade0', this._cascades[0]);\r\n this._h0BindGroup.setValue('cascade1', this._cascades[1]);\r\n this._h0BindGroup.setValue('cascade2', this._cascades[2]);\r\n if (device.type === 'webgpu') {\r\n this._h0BindGroup.setTexture('spectrum', instanceData.h0Textures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.h0Framebuffer);\r\n device.clearFrameBuffer(Vector4.zero(), null, null);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /**\r\n * Expected slope covariance of each cascade, summed over the same spectrum the\r\n * h0 and hk programs build: E|h(k)|^2 = 2 P(k) (a(k) + a(-k)), P the Phillips\r\n * spectrum halved as h0 takes it, a the wind alignment, and the slopes i k h(k)\r\n * with the Nyquist row and column zeroed. The inverse FFT is unnormalized, so\r\n * a field's variance is the plain sum over the grid.\r\n *\r\n * Also how much of it each mip level of the cascade keeps: a level halving the\r\n * texels keeps the wave numbers below its Nyquist along both axes.\r\n * @internal\r\n */\r\n private computeSlopeVariances() {\r\n const N = this._params.resolution;\r\n const wind = this._params.wind;\r\n const windLen = Math.hypot(wind.x, wind.y);\r\n const wx = windLen > 0 ? wind.x / windLen : 1;\r\n const wz = windLen > 0 ? wind.y / windLen : 0;\r\n const L = (windLen * windLen) / 9.81;\r\n const L2 = L * L;\r\n const alignment = this._params.alignment;\r\n for (let i = 0; i < 3; i++) {\r\n const size = this._cascades[i].x;\r\n const A = this._cascades[i].y;\r\n const minK = this._cascades[i].z;\r\n let xx = 0;\r\n let zz = 0;\r\n let xz = 0;\r\n // Variance whose wave numbers are cut first at level 1 + n\r\n const cut = new Array<number>(SLOPE_LOD_LEVELS + 1).fill(0);\r\n const nyquist = (Math.PI * N) / size;\r\n if (size > 1e-3 && L2 > 0) {\r\n const dk = (Math.PI * 2) / size;\r\n for (let cy = 1; cy < N; cy++) {\r\n const kz = (cy - N / 2) * dk;\r\n for (let cx = 1; cx < N; cx++) {\r\n const kx = (cx - N / 2) * dk;\r\n if (Math.abs(kx) < minK && Math.abs(kz) < minK) {\r\n continue;\r\n }\r\n const k2 = kx * kx + kz * kz;\r\n let e = (A / (k2 * k2)) * Math.exp(-1 / (k2 * L2));\r\n if (alignment > 0) {\r\n const c = (kx * wx + kz * wz) / Math.sqrt(k2);\r\n e *= Math.pow(Math.max(0, c), alignment) + Math.pow(Math.max(0, -c), alignment);\r\n } else {\r\n e *= 2;\r\n }\r\n xx += kx * kx * e;\r\n zz += kz * kz * e;\r\n xz += kx * kz * e;\r\n // Kept up to the level whose Nyquist nyquist / 2^level it still lies below\r\n const kept = Math.log2(nyquist / Math.max(Math.abs(kx), Math.abs(kz)));\r\n cut[Math.min(Math.max(Math.ceil(kept), 1), SLOPE_LOD_LEVELS + 1) - 1] += k2 * e;\r\n }\r\n }\r\n }\r\n this._slopeVariances[i].setXYZW(xx, zz, xz, size / N);\r\n const total = xx + zz;\r\n let kept = total;\r\n for (let level = 1; level <= SLOPE_LOD_LEVELS; level++) {\r\n kept -= cut[level - 1];\r\n this._slopeRetained[i * SLOPE_LOD_LEVELS + level - 1] = total > 0 ? Math.max(kept / total, 0) : 0;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private getNoiseTexture(size: number, randomSeed: number) {\r\n const device = getDevice();\r\n // Keyed on the seed as well as the size: both select the noise.\r\n const key = `${size}:${randomSeed}`;\r\n let tex = FFTWaveGenerator._globals!.noiseTextures.get(key);\r\n if (!tex) {\r\n tex = device.createTexture2D('rg32f', size, size, {\r\n mipmapping: false\r\n })!;\r\n tex.name = `noiseTex${size}_${randomSeed}`;\r\n tex.update(this.getNoise2d(size, randomSeed), 0, 0, size, size);\r\n FFTWaveGenerator._globals!.noiseTextures.set(key, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private getNoise2d(size: number, randomSeed: number) {\r\n const rand = new PRNG(randomSeed);\r\n return Float32Array.from([...Array(size * size * 2)].map(() => rand.get()));\r\n }\r\n /** @internal */\r\n private reverseBits(v: number, width: number) {\r\n return parseInt(v.toString(2).padStart(width, '0').split('').reverse().join(''), 2);\r\n }\r\n /** @internal */\r\n private createButterflyTexture(size: number) {\r\n const width = Math.log2(size);\r\n const height = size;\r\n const texture = new Float32Array(width * height * 4);\r\n const w = (2.0 * Math.PI) / size;\r\n const bitReversed = [...Array(size).keys()].map((v) => this.reverseBits(v, width));\r\n\r\n for (let j = 0; j < width; j++) {\r\n for (let i = 0; i < height; i++) {\r\n const k = i * (size >> (j + 1));\r\n const c = Math.cos(k * w);\r\n const s = Math.sin(k * w);\r\n const span = 2 ** j;\r\n const wing = i % 2 ** (j + 1) < span ? 0 : 1; // 0 - top wing, 1 - bottom wing\r\n const texel = new Vector4();\r\n if (j === 0) {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, bitReversed[i], bitReversed[i + 1]);\r\n } else {\r\n texel.setXYZW(c, s, bitReversed[i - 1], bitReversed[i]);\r\n }\r\n } else {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, i, i + span);\r\n } else {\r\n texel.setXYZW(c, s, i - span, i);\r\n }\r\n }\r\n\r\n texture[(width * i + j) * 4] = texel[0];\r\n texture[(width * i + j) * 4 + 1] = texel[1];\r\n texture[(width * i + j) * 4 + 2] = texel[2];\r\n texture[(width * i + j) * 4 + 3] = texel[3];\r\n }\r\n }\r\n return texture;\r\n }\r\n /** @internal */\r\n private getInstanceData() {\r\n if (!this._instanceData) {\r\n const device = getDevice();\r\n const h0Textures = this.createNTextures(\r\n device,\r\n this._h0TextureFormat,\r\n this._params.resolution,\r\n 3,\r\n 'Water-h0',\r\n false\r\n );\r\n const dataTextures = this.createNTextures(\r\n device,\r\n this._dataTextureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-data',\r\n true,\r\n true\r\n );\r\n const spectrumTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-spectrum',\r\n true\r\n );\r\n const pingpongTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-pingpong',\r\n false\r\n );\r\n this._instanceData = {\r\n dataTextures,\r\n h0Textures: h0Textures,\r\n pingpongTextures: pingpongTextures,\r\n spectrumTextures: spectrumTextures,\r\n h0Framebuffer: this._useComputeShader\r\n ? null\r\n : device.createFrameBuffer(h0Textures as Texture2D[], null),\r\n spectrumFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(spectrumTextures as Texture2D[], null)\r\n : null,\r\n spectrumFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n spectrumFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n pingpongFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(pingpongTextures as Texture2D[], null)\r\n : null,\r\n pingpongFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n pingpongFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n postIfft2Framebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(dataTextures as Texture2D[], null)\r\n : null,\r\n postIfft2Framebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n postIfft2Framebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(0, 4), null)\r\n : null\r\n };\r\n }\r\n return this._instanceData;\r\n }\r\n /** @internal */\r\n private createNTextures(\r\n device: AbstractDevice,\r\n format: TextureFormat,\r\n size: number,\r\n num: number,\r\n name: string,\r\n linear: boolean,\r\n mipmapping = false\r\n ) {\r\n const options: TextureCreationOptions = {\r\n samplerOptions: {\r\n minFilter: linear ? 'linear' : 'nearest',\r\n magFilter: linear ? 'linear' : 'nearest',\r\n mipFilter: mipmapping ? 'linear' : 'none',\r\n addressU: 'repeat',\r\n addressV: 'repeat'\r\n },\r\n writable: !!this._useComputeShader,\r\n mipmapping\r\n };\r\n if (this._useComputeShader) {\r\n const tex = device.createTexture2DArray(format, size, size, num, options)!;\r\n tex.name = name;\r\n return tex;\r\n } else {\r\n return Array.from({ length: num }).map((val, index) => {\r\n const tex = device.createTexture2D(format, size, size, options)!;\r\n tex.name = `${name}-${index}`;\r\n return tex;\r\n });\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update(time: number) {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n device.setRenderStates(this._updateRenderStates);\r\n if (this._resolutionChanged) {\r\n this.disposeInstanceData();\r\n }\r\n if (this._paramsChanged) {\r\n this.generateInitialSpectrum();\r\n }\r\n this._resolutionChanged = false;\r\n this._paramsChanged = false;\r\n for (let i = 0; i < 3; i++) {\r\n this._sizes[i] = this._cascades[i].x;\r\n this._croppinesses[i] = this._params.cascades[i].croppiness;\r\n }\r\n if (this._renderMode === RENDER_NORMAL) {\r\n this.generateSpectrum(time);\r\n this.ifft2();\r\n this.postIfft2();\r\n } else {\r\n this.generateSpectrumTwoPass(time);\r\n this.ifft2TwoPass();\r\n this.postIfft2TwoPass();\r\n }\r\n // The fragment normal reads the slopes filtered to the pixel\r\n const dataTextures = this.getInstanceData().dataTextures;\r\n if (Array.isArray(dataTextures)) {\r\n dataTextures.forEach((tex) => tex.generateMipmaps());\r\n } else {\r\n dataTextures.generateMipmaps();\r\n }\r\n device.popDeviceStates();\r\n }\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return true;\r\n }\r\n /** @internal */\r\n private disposeNTextures(texture: Nullable<Texture2D[] | Texture2DArray>) {\r\n if (Array.isArray(texture)) {\r\n texture.forEach((tex) => tex.dispose());\r\n } else if (texture) {\r\n texture.dispose();\r\n }\r\n }\r\n /** @internal */\r\n private disposeInstanceData() {\r\n if (this._instanceData) {\r\n this.disposeNTextures(this._instanceData.dataTextures);\r\n this.disposeNTextures(this._instanceData.h0Textures);\r\n this.disposeNTextures(this._instanceData.pingpongTextures);\r\n this.disposeNTextures(this._instanceData.spectrumTextures);\r\n this._instanceData.h0Framebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer2?.dispose();\r\n this._instanceData.pingpongFramebuffer4?.dispose();\r\n this._instanceData.spectrumFramebuffer?.dispose();\r\n this._instanceData.spectrumFramebuffer2?.dispose();\r\n this._instanceData.spectrumFramebuffer4?.dispose();\r\n this._instanceData.postIfft2Framebuffer?.dispose();\r\n this._instanceData.postIfft2Framebuffer2?.dispose();\r\n this._instanceData.postIfft2Framebuffer4?.dispose();\r\n this._instanceData = null;\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrum(time: number) {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram);\r\n device.setBindGroup(0, this._hkBindGroup!);\r\n this._hkBindGroup!.setValue('t', time);\r\n this._hkBindGroup!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup!.setValue('sizes', this._sizes);\r\n if (this._useComputeShader) {\r\n this._hkBindGroup!.setTexture('h0Texture', instanceData.h0Textures as Texture2DArray);\r\n this._hkBindGroup!.setTexture('spectrum', instanceData.spectrumTextures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const h0Textures = instanceData.h0Textures as Texture2D[];\r\n this._hkBindGroup!.setTexture('h0Texture0', h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup!.setTexture('h0Texture1', h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup!.setTexture('h0Texture2', h0Textures[2], nearestRepeatSampler);\r\n device.setFramebuffer(instanceData.spectrumFramebuffer);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrumTwoPass(time: number) {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram4);\r\n device.setBindGroup(0, this._hkBindGroup4!);\r\n const h0Textures = instanceData.h0Textures as Texture2D[];\r\n this._hkBindGroup4!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup4!.setValue('sizes', this._sizes);\r\n this._hkBindGroup4!.setTexture('h0Texture0', h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup4!.setTexture('h0Texture1', h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup4!.setValue('t', time);\r\n device.setFramebuffer(instanceData.spectrumFramebuffer4);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram2);\r\n device.setBindGroup(0, this._hkBindGroup2!);\r\n this._hkBindGroup2!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup2!.setValue('sizes', this._sizes);\r\n this._hkBindGroup2!.setTexture('h0Texture2', h0Textures[2], nearestRepeatSampler);\r\n this._hkBindGroup2!.setValue('t', time);\r\n device.setFramebuffer(instanceData.spectrumFramebuffer2);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n /** @internal */\r\n private ifft2() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures: [Texture2D[] | Texture2DArray, Texture2D[] | Texture2DArray] = [\r\n instanceData.spectrumTextures,\r\n instanceData.pingpongTextures\r\n ];\r\n const pingPongFramebuffers: [\r\n Nullable<FrameBuffer> | Texture2DArray,\r\n Nullable<FrameBuffer> | Texture2DArray\r\n ] = this._useComputeShader\r\n ? [instanceData.pingpongTextures as Texture2DArray, instanceData.spectrumTextures as Texture2DArray]\r\n : [instanceData.pingpongFramebuffer, instanceData.spectrumFramebuffer];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n let pingPong = 0;\r\n\r\n // horizontal ifft\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram);\r\n device.setBindGroup(0, this._fft2hBindGroup!);\r\n this._fft2hBindGroup!.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2hBindGroup!.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2hBindGroup!.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2hBindGroup!.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const pingPongTexture = pingPongTextures[pingPong] as Texture2D[];\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2hBindGroup!.setTexture('spectrum0', pingPongTexture[0], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum1', pingPongTexture[1], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum2', pingPongTexture[2], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum3', pingPongTexture[3], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum4', pingPongTexture[4], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum5', pingPongTexture[5], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n pingPong = 1 - pingPong; //(pingPong + 1) % 2;\r\n }\r\n // vertical ifft\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram);\r\n device.setBindGroup(0, this._fft2vBindGroup!);\r\n this._fft2vBindGroup!.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2vBindGroup!.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2vBindGroup!.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2vBindGroup!.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const pingPongTexture = pingPongTextures[pingPong] as Texture2D[];\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2vBindGroup!.setTexture('spectrum0', pingPongTexture[0], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum1', pingPongTexture[1], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum2', pingPongTexture[2], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum3', pingPongTexture[3], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum4', pingPongTexture[4], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum5', pingPongTexture[5], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n pingPong = 1 - pingPong;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup2(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2hBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2hProgram2!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup4(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2hBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2hProgram4!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup2(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2vBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2vProgram2!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup4(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2vBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2vProgram4!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private ifft2TwoPass() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures = [\r\n instanceData.spectrumTextures as Texture2D[],\r\n instanceData.pingpongTextures as Texture2D[]\r\n ];\r\n const pingPongFramebuffers4: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer4!,\r\n instanceData.spectrumFramebuffer4!\r\n ];\r\n const pingPongFramebuffers2: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer2!,\r\n instanceData.spectrumFramebuffer2!\r\n ];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n // horizontal ifft\r\n let pingPong = 0;\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram4);\r\n const fft2hBindGroup4 = this.getFFT2hBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup4);\r\n fft2hBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup4.setValue('phase', phase);\r\n fft2hBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram2);\r\n const fft2hBindGroup2 = this.getFFT2hBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup2);\r\n fft2hBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup2.setValue('phase', phase);\r\n fft2hBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2hBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n\r\n // vertical ifft\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram4);\r\n const fft2vBindGroup4 = this.getFFT2vBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup4);\r\n fft2vBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup4.setValue('phase', phase);\r\n fft2vBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram2);\r\n const fft2vBindGroup2 = this.getFFT2vBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup2);\r\n fft2vBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup2.setValue('phase', phase);\r\n fft2vBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2vBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n for (let i = 0; i < 2; i++) {\r\n this._fft2hBindGroup2Used[i].push(...this._fft2hBindGroup2Free[i]);\r\n this._fft2hBindGroup2Free[i].length = 0;\r\n this._fft2hBindGroup4Used[i].push(...this._fft2hBindGroup4Free[i]);\r\n this._fft2hBindGroup4Free[i].length = 0;\r\n this._fft2vBindGroup2Used[i].push(...this._fft2vBindGroup2Free[i]);\r\n this._fft2vBindGroup2Free[i].length = 0;\r\n this._fft2vBindGroup4Used[i].push(...this._fft2vBindGroup4Free[i]);\r\n this._fft2vBindGroup4Free[i].length = 0;\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program);\r\n device.setBindGroup(0, this._postfft2BindGroup!);\r\n if (this._useComputeShader) {\r\n this._postfft2BindGroup!.setTexture('output', instanceData.dataTextures as Texture2DArray);\r\n this._postfft2BindGroup!.setTexture('ifft', this._ifftTextures as Texture2DArray, nearestRepeatSampler);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const ifftTextures = this._ifftTextures as Texture2D[];\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer);\r\n this._postfft2BindGroup!.setTexture('ifft0', ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft1', ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft2', ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft3', ifftTextures[3], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft4', ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft5', ifftTextures[5], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2TwoPass() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer4);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program4);\r\n device.setBindGroup(0, this._postfft2BindGroup4!);\r\n const ifftTextures = this._ifftTextures as Texture2D[];\r\n this._postfft2BindGroup4!.setTexture('ifft0', ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft1', ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft2', ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft3', ifftTextures[3], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer2);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program2);\r\n device.setBindGroup(0, this._postfft2BindGroup2!);\r\n this._postfft2BindGroup2!.setTexture('ifft4', ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup2!.setTexture('ifft5', ifftTextures[5], nearestRepeatSampler);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.sizes = pb.vec4().uniform(uniformGroup);\r\n scope.croppinesses = pb.vec4().uniform(uniformGroup);\r\n if (this._useComputeShader) {\r\n scope.dataTexture = pb.tex2DArray().uniform(uniformGroup);\r\n } else {\r\n scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(uniformGroup);\r\n }\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n scope.slopeVar0 = pb.vec4().uniform(uniformGroup);\r\n scope.slopeVar1 = pb.vec4().uniform(uniformGroup);\r\n scope.slopeVar2 = pb.vec4().uniform(uniformGroup);\r\n scope.slopeRetained = pb.vec4[6]().uniform(uniformGroup);\r\n }\r\n /**\r\n * Mip level each cascade is read at by a pixel with screen derivatives\r\n * `xzGrad` of its xz, as anisotropic filtering picks it: from the shorter\r\n * axis of the pixel, or the longer over the anisotropy where that is more.\r\n * @internal\r\n */\r\n private cascadeLods(scope: PBInsideFunctionScope, xzGrad: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('fftCascadeLods', [pb.vec4('xzGrad')], function () {\r\n this.$l.lx = pb.mul(pb.length(this.xzGrad.xy), SLOPE_FILTER_SCALE);\r\n this.$l.ly = pb.mul(pb.length(this.xzGrad.zw), SLOPE_FILTER_SCALE);\r\n this.$l.fp = pb.max(\r\n pb.max(pb.min(this.lx, this.ly), pb.div(pb.max(this.lx, this.ly), SLOPE_MAX_ANISOTROPY)),\r\n 1e-6\r\n );\r\n this.$l.texel = pb.vec3(this.slopeVar0.w, this.slopeVar1.w, this.slopeVar2.w);\r\n this.$return(pb.max(pb.log2(pb.div(pb.vec3(this.fp), this.texel)), pb.vec3(0)));\r\n });\r\n return scope.fftCascadeLods(xzGrad) as PBShaderExp;\r\n }\r\n /** Trilinear, anisotropic sampler of the slope mips. @internal */\r\n private static getSlopeSampler() {\r\n const globals = FFTWaveGenerator._globals!;\r\n if (!globals.slopeSampler) {\r\n globals.slopeSampler = getDevice().createSampler({\r\n addressU: 'repeat',\r\n addressV: 'repeat',\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'linear',\r\n maxAnisotropy: SLOPE_MAX_ANISOTROPY\r\n });\r\n }\r\n return globals.slopeSampler;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcUnresolvedSlopeVariance} */\r\n calcUnresolvedSlopeVariance(scope: PBInsideFunctionScope, xzGrad: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n // Share of a cascade's slope variance its mip level keeps, linear between levels\r\n pb.func('fftSlopeRetained', [pb.float('lod'), pb.vec4('lo'), pb.vec4('hi')], function () {\r\n this.$l.hatLo = pb.max(\r\n pb.sub(pb.vec4(1), pb.abs(pb.sub(pb.vec4(this.lod), pb.vec4(1, 2, 3, 4)))),\r\n pb.vec4(0)\r\n );\r\n this.$l.hatHi = pb.max(\r\n pb.sub(pb.vec4(1), pb.abs(pb.sub(pb.vec4(this.lod), pb.vec4(5, 6, 7, 8)))),\r\n pb.vec4(0)\r\n );\r\n this.$return(\r\n pb.add(\r\n pb.max(pb.sub(1, this.lod), 0),\r\n pb.dot(this.hatLo, this.lo),\r\n pb.mul(pb.dot(this.hatHi, this.hi), pb.clamp(pb.sub(SLOPE_LOD_LEVELS + 1, this.lod), 0, 1))\r\n )\r\n );\r\n });\r\n pb.func('fftUnresolvedSlopeVariance', [pb.vec4('xzGrad')], function () {\r\n this.$l.lod = that.cascadeLods(this, this.xzGrad);\r\n this.$l.lost = pb.sub(\r\n pb.vec3(1),\r\n pb.vec3(\r\n this.fftSlopeRetained(this.lod.x, this.slopeRetained.at(0), this.slopeRetained.at(1)),\r\n this.fftSlopeRetained(this.lod.y, this.slopeRetained.at(2), this.slopeRetained.at(3)),\r\n this.fftSlopeRetained(this.lod.z, this.slopeRetained.at(4), this.slopeRetained.at(5))\r\n )\r\n );\r\n this.$return(\r\n pb.add(\r\n pb.mul(this.slopeVar0.xyz, this.lost.x),\r\n pb.mul(this.slopeVar1.xyz, this.lost.y),\r\n pb.mul(this.slopeVar2.xyz, this.lost.z)\r\n )\r\n );\r\n });\r\n return scope.fftUnresolvedSlopeVariance(xzGrad) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.$l.xz = this.inPos.xz;\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l.a = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n } else {\r\n this.$l.a = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n }\r\n this.$l.displacement = pb.add(this.a, this.b, this.c);\r\n this.outPos = pb.add(this.inPos, this.displacement);\r\n this.outNormal = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n // Normal of the displaced surface. With the Jacobian of the horizontal\r\n // displacement [[A, C], [C, F]], A = 1 + croppiness*d2x, F = 1 + croppiness*d2z,\r\n // C = croppiness*dxdz and J = A*F - C*C, the tangents' cross product is\r\n //\r\n // N ~ ( -sx * F, J, -sz * A )\r\n //\r\n // J must stay off the horizontal components, or the normal flips with\r\n // sign(J). The y component takes |J|: where the sheet folds (J < 0, the\r\n // foam band) the true normal points down, which the shading cannot light.\r\n let dxdzSamples: PBShaderExp;\r\n if (that._useComputeShader) {\r\n dxdzSamples = pb.vec3(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).w,\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).w,\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).w\r\n );\r\n } else {\r\n dxdzSamples = pb.vec3(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).w,\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).w,\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).w\r\n );\r\n }\r\n this.$l.dxdz = pb.add(\r\n pb.mul(dxdzSamples.x, this.croppinesses.x),\r\n pb.mul(dxdzSamples.y, this.croppinesses.y),\r\n pb.mul(dxdzSamples.z, this.croppinesses.z)\r\n );\r\n this.$l.jA = pb.add(1.0, this.dxdx_dzdz.x);\r\n this.$l.jF = pb.add(1.0, this.dxdx_dzdz.y);\r\n this.$l.jdet = pb.sub(pb.mul(this.jA, this.jF), pb.mul(this.dxdz, this.dxdz));\r\n this.$l.normal = pb.normalize(\r\n pb.vec3(pb.neg(pb.mul(this.sx, this.jF)), pb.abs(this.jdet), pb.neg(pb.mul(this.sz, this.jA)))\r\n );\r\n this.$return(this.normal);\r\n });\r\n return scope.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(\r\n scope: PBInsideFunctionScope,\r\n xz: PBShaderExp,\r\n _vertexNormal?: PBShaderExp,\r\n _foamSample?: PBShaderExp,\r\n xzGrad?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('jacobian', [pb.float('dxdx'), pb.float('dxdz'), pb.float('dzdz')], function () {\r\n this.$l.Jxx = pb.add(this.dxdx, 1);\r\n this.$l.Jxz = this.dxdz;\r\n this.$l.Jzz = pb.add(this.dzdz, 1);\r\n this.$return(pb.vec4(this.Jxx, this.Jxz, this.Jxz, this.Jzz));\r\n });\r\n pb.func('det', [pb.vec4('jacobian')], function () {\r\n this.$return(\r\n pb.sub(pb.mul(this.jacobian.x, this.jacobian.w), pb.mul(this.jacobian.y, this.jacobian.z))\r\n );\r\n });\r\n const params = xzGrad ? [pb.vec2('xz'), pb.vec4('xzGrad')] : [pb.vec2('xz')];\r\n const funcName = xzGrad ? 'calcNormalAndFoamF' : 'calcNormalAndFoam';\r\n pb.func(funcName, params, function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n // Slopes and Jacobian filtered down to the pixel: each cascade read with\r\n // the screen derivatives of its texture coordinates, trilinear and\r\n // anisotropic, so the waves too short for the pixel average out rather\r\n // than alias into speckle\r\n const sample = (tex: string, layer: number, uv: string, size: string) => {\r\n if (!xzGrad) {\r\n return that._useComputeShader\r\n ? pb.textureArraySampleLevel(this.dataTexture, this[uv], layer, 0)\r\n : pb.textureSampleLevel(this[tex], this[uv], 0);\r\n }\r\n const ddx = pb.mul(this.xzGrad.xy, pb.div(SLOPE_FILTER_SCALE, this.sizes[size]));\r\n const ddy = pb.mul(this.xzGrad.zw, pb.div(SLOPE_FILTER_SCALE, this.sizes[size]));\r\n return that._useComputeShader\r\n ? pb.textureArraySampleGrad(this.dataTexture, this[uv], layer, ddx, ddy)\r\n : pb.textureSampleGrad(this[tex], this[uv], ddx, ddy);\r\n };\r\n this.$l._sx_sz_dxdx_dzdz0 = sample('sx_sz_dxdx_dzdz0', 1, 'uv0', 'x');\r\n this.$l._sx_sz_dxdx_dzdz1 = sample('sx_sz_dxdx_dzdz1', 3, 'uv1', 'y');\r\n this.$l._sx_sz_dxdx_dzdz2 = sample('sx_sz_dxdx_dzdz2', 5, 'uv2', 'z');\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.dxdz0 = sample('dx_hy_dz_dxdz0', 0, 'uv0', 'x').w;\r\n this.$l.dxdz1 = sample('dx_hy_dz_dxdz1', 2, 'uv1', 'y').w;\r\n this.$l.dxdz2 = sample('dx_hy_dz_dxdz2', 4, 'uv2', 'z').w;\r\n this.$l.dxdz = pb.add(\r\n pb.mul(this.dxdz0, this.croppinesses.x),\r\n pb.mul(this.dxdz1, this.croppinesses.y),\r\n pb.mul(this.dxdz2, this.croppinesses.z)\r\n );\r\n this.$l.jacobian4 = this.jacobian(this.dxdx_dzdz.x, this.dxdz, this.dxdx_dzdz.y);\r\n this.$l.val = this.det(this.jacobian4);\r\n // Same Jacobian as the foam reads: N ~ (-sx*F, |J|, -sz*A), with A and F\r\n // packed into x and w. See calcFragmentNormal.\r\n this.$l.normal = pb.normalize(\r\n pb.vec3(\r\n pb.neg(pb.mul(this.sx, this.jacobian4.w)),\r\n pb.abs(this.val),\r\n pb.neg(pb.mul(this.sz, this.jacobian4.x))\r\n )\r\n );\r\n this.$l.foam = pb.abs(\r\n pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y)\r\n );\r\n this.$return(pb.vec4(this.normal, this.foam));\r\n });\r\n return (xzGrad ? scope[funcName](xz, xzGrad) : scope[funcName](xz)) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return this._renderMode !== RENDER_NONE;\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n const instanceData = this.getInstanceData();\r\n const linearRepeatSampler = FFTWaveGenerator.getSlopeSampler();\r\n if (this._useComputeShader) {\r\n bindGroup.setTexture('dataTexture', instanceData.dataTextures as Texture2DArray, linearRepeatSampler);\r\n } else {\r\n const dataTextures = instanceData.dataTextures as Texture2D[];\r\n bindGroup.setTexture('dx_hy_dz_dxdz0', dataTextures[0], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz0', dataTextures[1], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz1', dataTextures[2], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz1', dataTextures[3], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz2', dataTextures[4], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz2', dataTextures[5], linearRepeatSampler);\r\n }\r\n bindGroup.setValue('foamParams', this._params.foamParams);\r\n bindGroup.setValue('sizes', this._sizes);\r\n bindGroup.setValue('croppinesses', this._croppinesses);\r\n bindGroup.setValue('slopeVar0', this._slopeVariances[0]);\r\n bindGroup.setValue('slopeVar1', this._slopeVariances[1]);\r\n bindGroup.setValue('slopeVar2', this._slopeVariances[2]);\r\n bindGroup.setValue('slopeRetained', this._slopeRetained);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const disturb = Math.max(Math.abs(this.wind.x), Math.abs(this.wind.y), 2);\r\n outAABB.minPoint.setXYZ(minX - 8 * disturb, y - 8 * disturb, minZ - 8 * disturb);\r\n outAABB.maxPoint.setXYZ(maxX + 8 * disturb, y + 8 * disturb, maxZ + 8 * disturb);\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'FFTWaveGenerator';\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this.disposeInstanceData();\r\n }\r\n}\r\n"],"names":["CASCADE_PEAK_SPAN","CASCADE_RATIO","CASCADE_MIN_SIZE","CASCADE_MAX_SIZE","getDefaultBuildParams","cascades","strength","croppiness","resolution","wind","Vector2","alignment","foamParams","randomSeed","RENDER_NONE","RENDER_NORMAL","RENDER_TWO_PASS","THREAD_GROUP_SIZE","SLOPE_LOD_LEVELS","SLOPE_MAX_ANISOTROPY","SLOPE_FILTER_SCALE","FFTWaveGenerator","Disposable","_globals","_useComputeShader","_h0BindGroup","_hkBindGroup","_hkBindGroup2","_hkBindGroup4","_fft2hBindGroup","_fft2vBindGroup","_fft2hBindGroup2Used","_fft2hBindGroup2Free","_fft2hBindGroup4Used","_fft2hBindGroup4Free","_fft2vBindGroup2Used","_fft2vBindGroup2Free","_fft2vBindGroup4Used","_fft2vBindGroup4Free","_postfft2BindGroup","_postfft2BindGroup2","_postfft2BindGroup4","_updateRenderStates","_sizes","_croppinesses","_params","_instanceData","_ifftTextures","_cascades","_paramsChanged","_version","_resolutionChanged","_textureFormat","_h0TextureFormat","_dataTextureFormat","_renderMode","params","device","getDevice","renderTargetFloat16","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","maxDrawBuffers","framebufferCaps","type","maxSampleBytes","maxColorAttachmentBytesPerSample","programs","h0Program","createProgramH0","hkProgram","createProgramHk","hkProgram2","undefined","hkProgram4","fft2hProgram","createProgramFFT2H","fft2hProgram2","fft2hProgram4","fft2vProgram","createProgramFFT2V","fft2vProgram2","fft2vProgram4","postfft2Program","createProgramPostFFT2","postfft2Program2","postfft2Program4","quad","createQuad","noiseTextures","Map","butterflyTextures","createBindGroup","bindGroupLayouts","Vector4","_slopeVariances","_slopeRetained","Float32Array","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","paramsChanged","version","clone","val","x","y","foamWidth","foamContrast","getWaveLength","cascade","windSpeed","Math","hypot","peak","PI","SQRT2","largest","min","max","pow","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","vertexData","indexData","Uint32Array","prim","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","indexStart","indexCount","length","getButterflyTexture","size","tex","get","createTexture2D","log2","mipmapping","name","update","createButterflyTexture","width","height","set","instanceData","getInstanceData","setProgram","setBindGroup","setTexture","getNoiseTexture","fetchSampler","setValue","i","z","w","computeSlopeVariances","h0Textures","compute","setFramebuffer","h0Framebuffer","clearFrameBuffer","zero","draw","N","windLen","wx","wz","L","L2","A","minK","xx","zz","xz","cut","Array","fill","nyquist","dk","cy","kz","cx","kx","abs","k2","e","exp","c","sqrt","kept","ceil","setXYZW","total","level","key","getNoise2d","rand","PRNG","from","map","reverseBits","v","parseInt","toString","padStart","split","reverse","join","texture","bitReversed","keys","j","k","cos","s","sin","span","wing","texel","createNTextures","dataTextures","spectrumTextures","pingpongTextures","createFrameBuffer","spectrumFramebuffer","spectrumFramebuffer2","slice","spectrumFramebuffer4","pingpongFramebuffer","pingpongFramebuffer2","pingpongFramebuffer4","postIfft2Framebuffer","postIfft2Framebuffer2","postIfft2Framebuffer4","format","num","linear","options","samplerOptions","minFilter","magFilter","mipFilter","addressU","addressV","writable","createTexture2DArray","index","time","pushDeviceStates","setRenderStates","disposeInstanceData","generateInitialSpectrum","generateSpectrum","ifft2","postIfft2","generateSpectrumTwoPass","ifft2TwoPass","postIfft2TwoPass","isArray","forEach","generateMipmaps","popDeviceStates","needUpdate","disposeNTextures","dispose","nearestRepeatSampler","phases","pingPongTextures","pingPongFramebuffers","butterflyTex","pingPong","phase","pingPongTexture","getFFT2hBindGroup2","pingpong","bindGroup","pop","push","getFFT2hBindGroup4","getFFT2vBindGroup2","getFFT2vBindGroup4","pingPongFramebuffers4","pingPongFramebuffers2","fft2hBindGroup4","fft2hBindGroup2","fft2vBindGroup4","fft2vBindGroup2","ifftTextures","setupUniforms","scope","uniformGroup","pb","$builder","sizes","vec4","uniform","croppinesses","dataTexture","tex2DArray","dx_hy_dz_dxdz0","tex2D","sx_sz_dxdx_dzdz0","dx_hy_dz_dxdz1","sx_sz_dxdx_dzdz1","dx_hy_dz_dxdz2","sx_sz_dxdx_dzdz2","vec2","slopeVar0","slopeVar1","slopeVar2","slopeRetained","cascadeLods","xzGrad","func","$l","lx","mul","xy","ly","zw","fp","div","vec3","$return","fftCascadeLods","getSlopeSampler","globals","slopeSampler","createSampler","maxAnisotropy","calcUnresolvedSlopeVariance","that","float","hatLo","sub","lod","hatHi","add","dot","lo","hi","clamp","lost","fftSlopeRetained","at","xyz","fftUnresolvedSlopeVariance","calcVertexPositionAndNormal","inPos","outPos","outNormal","out","uv0","uv1","uv2","a","textureArraySampleLevel","rgb","b","textureSampleLevel","displacement","calcPositionAndNormal","calcFragmentNormal","_vertexNormal","_sx_sz_dxdx_dzdz0","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","sx","sz","dxdx_dzdz","dxdzSamples","dxdz","jA","jF","jdet","normal","normalize","neg","calcFragmentNormalAndFoam","_foamSample","Jxx","dxdx","Jxz","Jzz","dzdz","jacobian","funcName","sample","layer","uv","ddx","ddy","textureArraySampleGrad","textureSampleGrad","dxdz0","dxdz1","dxdz2","jacobian4","det","foam","isOk","applyWaterBindGroup","linearRepeatSampler","calcClipmapTileAABB","minX","maxX","minZ","maxZ","outAABB","disturb","minPoint","setXYZ","maxPoint","getHash","onDispose"],"mappings":"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"}
|