@zephyr3d/scene 0.9.27 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +54 -0
- 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 +279 -55
- 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 +171 -1
- 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 +104 -178
- 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 +25436 -15990
- package/dist/index.js +65 -11
- 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/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +66 -4
- 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 +191 -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 +333 -191
- 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 +1261 -1438
- 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 +106 -106
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +2 -6
- 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 +4 -13
- 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 +3 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +179 -64
- 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 +25 -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 +5 -5
- 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 +5 -10
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +247 -157
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +16 -38
- 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/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +19 -8
- 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/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 +162 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +10 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +14 -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 +272 -55
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +41 -0
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
- 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 +58 -158
- package/dist/render/underwater.js.map +1 -1
- 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 +134 -319
- package/dist/render/water_caustics.js.map +1 -1
- 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 +3 -3
- 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 +633 -268
- 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/ssgi.js +63 -0
- package/dist/shaders/ssgi.js.map +1 -0
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.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 +32 -82
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +7 -21
- package/dist/shaders/water_medium.js.map +1 -1
- 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 +40 -2
- 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 +34 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +46 -5
- 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 +87 -254
- 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 +1543 -264
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +10 -22
- 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
- package/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
|
@@ -3,13 +3,14 @@ import { ShaderHelper } from '../material/shader/helper.js';
|
|
|
3
3
|
import '../material/lambert.js';
|
|
4
4
|
import '../material/blinn.js';
|
|
5
5
|
import '../material/unlit.js';
|
|
6
|
+
import '../material/meshmaterial.js';
|
|
6
7
|
import '../material/particle.js';
|
|
7
8
|
import '../material/subsurfaceprofile.js';
|
|
8
|
-
import '../material/
|
|
9
|
+
import '../material/sssprofile.js';
|
|
10
|
+
import '../material/sss.js';
|
|
9
11
|
import '../material/eye.js';
|
|
10
12
|
import '@zephyr3d/device';
|
|
11
13
|
import { MAX_GERSTNER_WAVE_COUNT } from '../values.js';
|
|
12
|
-
import '../material/meshmaterial.js';
|
|
13
14
|
import '../material/hair.js';
|
|
14
15
|
import '../material/hairstrand.js';
|
|
15
16
|
import '../material/grassmaterial.js';
|
|
@@ -43,8 +44,7 @@ import '../utility/blueprint/material/texture.js';
|
|
|
43
44
|
this.randomWave(3);
|
|
44
45
|
this._numWaves = 4;
|
|
45
46
|
this._version = 0;
|
|
46
|
-
// Same defaults as the FFT generator
|
|
47
|
-
// change the foam response out of the box.
|
|
47
|
+
// Same defaults as the FFT generator.
|
|
48
48
|
this._foamParams = new Float32Array([
|
|
49
49
|
1.2,
|
|
50
50
|
7.2
|
|
@@ -109,13 +109,9 @@ import '../utility/blueprint/material/texture.js';
|
|
|
109
109
|
if (this._numWaves >= MAX_GERSTNER_WAVE_COUNT) {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
|
-
// Shift from the tail backwards so the gap opens at `index
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
// them up. The new slot is filled with a random wave rather than left at
|
|
116
|
-
// zero: a zero wavelength makes `w = 2*PI / length` infinite and drives the
|
|
117
|
-
// vertex shader into NaN, which collapses the whole surface, so the slot
|
|
118
|
-
// has to be a valid wave even before the caller writes its parameters.
|
|
112
|
+
// Shift from the tail backwards so the gap opens at `index`. The new slot
|
|
113
|
+
// gets a random valid wave: a zero wavelength makes `w = 2*PI / length`
|
|
114
|
+
// infinite and drives the vertex shader into NaN.
|
|
119
115
|
for(let i = this._numWaves - 1; i >= index; i--){
|
|
120
116
|
for(let j = 0; j < 8; j++){
|
|
121
117
|
this._waveParams[(i + 1) * 8 + j] = this._waveParams[i * 8 + j];
|
|
@@ -295,19 +291,12 @@ import '../utility/blueprint/material/texture.js';
|
|
|
295
291
|
this.$l.inPos = pb.vec3(this.xz.x, 0, this.xz.y);
|
|
296
292
|
this.$l.outPos = pb.vec3();
|
|
297
293
|
this.$l.outNormal = pb.vec3(0);
|
|
298
|
-
// Horizontal-gradient terms
|
|
299
|
-
//
|
|
300
|
-
// the fold signal the foam is derived from - the same Jacobian the FFT
|
|
301
|
-
// generator uses, so both generators key foam off the same physics.
|
|
294
|
+
// Horizontal-gradient terms summed over the waves, for det(I + J), the
|
|
295
|
+
// fold signal the foam is derived from (same as the FFT generator).
|
|
302
296
|
this.$l.dxdx = pb.float(0);
|
|
303
297
|
this.$l.dzdz = pb.float(0);
|
|
304
298
|
this.$l.dxdz = pb.float(0);
|
|
305
|
-
this.$for(pb.float('i'), 0,
|
|
306
|
-
if (pb.getDevice().type === 'webgl') {
|
|
307
|
-
this.$if(pb.greaterThanEqual(this.i, this.numWaves), function() {
|
|
308
|
-
this.$break();
|
|
309
|
-
});
|
|
310
|
-
}
|
|
299
|
+
this.$for(pb.float('i'), 0, this.numWaves, function() {
|
|
311
300
|
this.$l.waveNormal = pb.vec3();
|
|
312
301
|
this.$l.waveDxdx = pb.float();
|
|
313
302
|
this.$l.waveDzdz = pb.float();
|
|
@@ -319,9 +308,8 @@ import '../utility/blueprint/material/texture.js';
|
|
|
319
308
|
this.dzdz = pb.add(this.dzdz, this.waveDzdz);
|
|
320
309
|
this.dxdz = pb.add(this.dxdz, this.waveDxdz);
|
|
321
310
|
});
|
|
322
|
-
// Jacobian determinant of the horizontal displacement, det(I + J)
|
|
323
|
-
//
|
|
324
|
-
// and the coverage ramps in. Mirrors the FFT generator's foam.
|
|
311
|
+
// Jacobian determinant of the horizontal displacement, det(I + J); below
|
|
312
|
+
// the foamParams.x threshold the surface folds and foam ramps in.
|
|
325
313
|
this.$l.val = pb.sub(pb.mul(pb.add(1, this.dxdx), pb.add(1, this.dzdz)), pb.mul(this.dxdz, this.dxdz));
|
|
326
314
|
this.$l.foam = pb.abs(pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y));
|
|
327
315
|
this.$return(pb.vec4(this.outNormal, this.foam));
|
|
@@ -367,14 +355,9 @@ import '../utility/blueprint/material/texture.js';
|
|
|
367
355
|
this.$l.wa = pb.mul(this.w, this.amplitude);
|
|
368
356
|
this.$l.n = pb.vec3(pb.neg(pb.mul(this.windDir.xy, this.wa, this.cosCalc)), pb.sub(1, pb.mul(this.qi, this.wa, this.sinCalc)));
|
|
369
357
|
this.outNormal = pb.div(this.n.xzy, this.numWaves);
|
|
370
|
-
// Horizontal
|
|
371
|
-
// windDir.xy
|
|
372
|
-
//
|
|
373
|
-
// `windDir.xy` with itself scaled by `-qi * wa * sin`. The sign matters:
|
|
374
|
-
// at a crest (sin positive, cal near PI/2) the surface is compressed
|
|
375
|
-
// horizontally, which is what pushes `det(I + J)` down and fires the
|
|
376
|
-
// fold signal. Summed over waves and run through det(I + J), this is the
|
|
377
|
-
// same Jacobian criterion the FFT generator uses.
|
|
358
|
+
// Horizontal gradient of the displacement `windDir.xy * qi * amp * cos`:
|
|
359
|
+
// the outer product of `windDir.xy` with itself scaled by `-qi * wa * sin`.
|
|
360
|
+
// At a crest the surface is compressed, pushing det(I + J) down.
|
|
378
361
|
this.$l.jac = pb.neg(pb.mul(this.qi, this.wa, this.sinCalc));
|
|
379
362
|
this.outDxdx = pb.mul(this.jac, this.windDir.x, this.windDir.x);
|
|
380
363
|
this.outDzdz = pb.mul(this.jac, this.windDir.y, this.windDir.y);
|
|
@@ -393,12 +376,7 @@ import '../utility/blueprint/material/texture.js';
|
|
|
393
376
|
], function() {
|
|
394
377
|
this.outPos = this.inPos;
|
|
395
378
|
this.outNormal = pb.vec3(0);
|
|
396
|
-
this.$for(pb.float('i'), 0,
|
|
397
|
-
if (pb.getDevice().type === 'webgl') {
|
|
398
|
-
this.$if(pb.greaterThanEqual(this.i, this.numWaves), function() {
|
|
399
|
-
this.$break();
|
|
400
|
-
});
|
|
401
|
-
}
|
|
379
|
+
this.$for(pb.float('i'), 0, this.numWaves, function() {
|
|
402
380
|
this.$l.waveNormal = pb.vec3();
|
|
403
381
|
this.$l.waveDxdx = pb.float();
|
|
404
382
|
this.$l.waveDzdz = pb.float();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gerstner_wavegenerator.js","sources":["../../src/render/gerstner_wavegenerator.ts"],"sourcesContent":["import { Disposable, PRNG, type AABB } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type { BindGroup, PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShaderHelper } from '../material';\r\nimport { MAX_GERSTNER_WAVE_COUNT } from '../values';\r\n\r\n/**\r\n * Gerstner wave generator.\r\n * @public\r\n */\r\nexport class GerstnerWaveGenerator extends Disposable implements WaveGenerator {\r\n private _version: number;\r\n private _waveParams: Float32Array<ArrayBuffer>;\r\n private _numWaves: number;\r\n private _rand: PRNG;\r\n private readonly _foamParams: Float32Array<ArrayBuffer>;\r\n /**\r\n * Creates a new Gerstner wave generator.\r\n */\r\n constructor(randomSeed = 0) {\r\n super();\r\n this._waveParams = new Float32Array(8 * MAX_GERSTNER_WAVE_COUNT);\r\n this._rand = new PRNG(randomSeed);\r\n this.randomWave(0);\r\n this.randomWave(1);\r\n this.randomWave(2);\r\n this.randomWave(3);\r\n this._numWaves = 4;\r\n this._version = 0;\r\n // Same defaults as the FFT generator, so switching between the two does not\r\n // change the foam response out of the box.\r\n this._foamParams = new Float32Array([1.2, 7.2]);\r\n }\r\n /** @internal */\r\n static randomWaveData(rand: PRNG, array: Float32Array, offset: number) {\r\n array[offset + 0] = rand.get() * Math.PI * 2;\r\n array[offset + 1] = rand.get() * 0.5 + 0.5;\r\n array[offset + 2] = rand.get() * 0.1;\r\n array[offset + 3] = rand.get() * 10;\r\n array[offset + 4] = rand.get() * 100 - 50;\r\n array[offset + 5] = 0;\r\n array[offset + 6] = rand.get() * 100 - 50;\r\n array[offset + 7] = 0;\r\n }\r\n /** @internal */\r\n setRaw(data: Float32Array, index: number) {\r\n this._waveParams.set(data, index * 8);\r\n }\r\n clone() {\r\n const other = new GerstnerWaveGenerator();\r\n other.numWaves = this.numWaves;\r\n other._waveParams.set(this._waveParams);\r\n other._foamParams.set(this._foamParams);\r\n return other as this;\r\n }\r\n get rand() {\r\n return this._rand;\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n /** Gets the number of waves. */\r\n get numWaves() {\r\n return this._numWaves;\r\n }\r\n set numWaves(val) {\r\n if (!Number.isInteger(val) || val <= 0 || val > MAX_GERSTNER_WAVE_COUNT) {\r\n console.error(`Invalid wave number: ${val}`);\r\n return;\r\n }\r\n if (val !== this._numWaves) {\r\n for (let i = this._numWaves; i < val; i++) {\r\n this.randomWave(i);\r\n }\r\n this._numWaves = val;\r\n this._version++;\r\n }\r\n }\r\n /** Delete wave at index */\r\n deleteWave(index: number) {\r\n if (index < 0 || index >= this._numWaves) {\r\n return;\r\n }\r\n for (let i = index; i < this._numWaves - 1; i++) {\r\n for (let j = 0; j < 8; j++) {\r\n this._waveParams[i * 8 + j] = this._waveParams[(i + 1) * 8 + j];\r\n }\r\n }\r\n this._numWaves--;\r\n this._version++;\r\n }\r\n /** Insert a wave slot at index, shifting the subsequent waves up */\r\n insertWave(index: number) {\r\n // Bounded by the parameter buffer; the shader reads this many slots.\r\n if (this._numWaves >= MAX_GERSTNER_WAVE_COUNT) {\r\n return;\r\n }\r\n // Shift from the tail backwards so the gap opens at `index` without\r\n // overwriting the slot that is about to move. Copying forward here would\r\n // duplicate `waveParams[index]` into every later slot instead of moving\r\n // them up. The new slot is filled with a random wave rather than left at\r\n // zero: a zero wavelength makes `w = 2*PI / length` infinite and drives the\r\n // vertex shader into NaN, which collapses the whole surface, so the slot\r\n // has to be a valid wave even before the caller writes its parameters.\r\n for (let i = this._numWaves - 1; i >= index; i--) {\r\n for (let j = 0; j < 8; j++) {\r\n this._waveParams[(i + 1) * 8 + j] = this._waveParams[i * 8 + j];\r\n }\r\n }\r\n this.randomWave(index);\r\n this._numWaves++;\r\n this._version++;\r\n }\r\n /**\r\n * Sets the angle of the wave direction in radians.\r\n * @param waveIndex - index of the wave to set.\r\n * @param angle - angle of the wave direction in radians.\r\n */\r\n setWaveDirection(waveIndex: number, angle: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 0] = angle;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the angle of the wave direction in radians.\r\n * @param waveIndex - index of the wave to get.\r\n * @returns Angle of the wave direction in radians.\r\n */\r\n getWaveDirection(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 0] : 0;\r\n }\r\n /**\r\n * Sets the steepness of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param steepness - Steepness of the wave.\r\n */\r\n setWaveSteepness(waveIndex: number, steepness: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 1] = steepness;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the steepness of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Steepness of the wave.\r\n */\r\n getWaveSteepness(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 1] : 0;\r\n }\r\n /**\r\n * Sets the amplitude of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param val - Amplitude of the wave.\r\n */\r\n setWaveAmplitude(waveIndex: number, val: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 2] = val;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the amplitude of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Amplitude of the wave.\r\n */\r\n getWaveAmplitude(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 2] : 0;\r\n }\r\n /**\r\n * Sets the length of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param val - Length of the wave.\r\n */\r\n setWaveLength(waveIndex: number, val: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 3] = val;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the length of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Length of the wave.\r\n */\r\n getWaveLength(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 3] : 0;\r\n }\r\n /**\r\n * Query if the wave is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns true if the wave is an omni-directional wave, false otherwise.\r\n */\r\n isOmniWave(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 7] !== 0 : false;\r\n }\r\n /**\r\n * Sets whether the wave is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param isOmni - true if the wave is an omni-directional wave, false otherwise.\r\n */\r\n setOmniWave(waveIndex: number, isOmni: boolean) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 7] = isOmni ? 1 : 0;\r\n this._version++;\r\n }\r\n }\r\n /** Gets the foam width. */\r\n get foamWidth() {\r\n return this._foamParams[0];\r\n }\r\n set foamWidth(val) {\r\n if (val !== this._foamParams[0]) {\r\n this._foamParams[0] = val;\r\n this._version++;\r\n }\r\n }\r\n /** Gets the foam contrast. */\r\n get foamContrast() {\r\n return this._foamParams[1];\r\n }\r\n set foamContrast(val) {\r\n if (val !== this._foamParams[1]) {\r\n this._foamParams[1] = val;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the X coordinate of the wave origin if it is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns X coordinate of the wave origin if it is an omni-directional wave, 0 otherwise.\r\n */\r\n getOriginX(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 4] : 0;\r\n }\r\n /**\r\n * Gets the Z coordinate of the wave origin if it is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Z coordinate of the wave origin if it is an omni-directional wave, 0 otherwise.\r\n */\r\n getOriginZ(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 6] : 0;\r\n }\r\n /**\r\n * Sets the X and Z coordinates of the wave origin if it is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param x - X coordinate of the wave origin\r\n * @param z - Z coordinate of the wave origin\r\n */\r\n setOrigin(waveIndex: number, x: number, z: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 4] = x;\r\n this._waveParams[waveIndex * 8 + 6] = z;\r\n this._version++;\r\n }\r\n }\r\n /** @internal */\r\n randomWave(i: number) {\r\n GerstnerWaveGenerator.randomWaveData(this._rand, this._waveParams, i * 8);\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update() {}\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return false;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n let maxHeight = 0;\r\n for (let i = 0; i < this._numWaves; i++) {\r\n const h = this._waveParams[i * 8 + 2];\r\n if (h > maxHeight) {\r\n maxHeight = h;\r\n }\r\n }\r\n outAABB.minPoint.setXYZ(minX, y, minZ);\r\n outAABB.maxPoint.setXYZ(maxX, y + maxHeight, maxZ);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.inPos = pb.vec3(this.xz.x, 0, this.xz.y);\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3();\r\n that.calcNormalAndPos(this, this.inPos, this.outPos, this.outNormal);\r\n this.$return(this.outNormal);\r\n });\r\n return scope.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcNormalAndFoam', [pb.vec2('xz')], function () {\r\n this.$l.inPos = pb.vec3(this.xz.x, 0, this.xz.y);\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3(0);\r\n // Horizontal-gradient terms accumulated over the waves. The displacement\r\n // derivative terms come out of gerstnerWave; summed, they feed det(I + J),\r\n // the fold signal the foam is derived from - the same Jacobian the FFT\r\n // generator uses, so both generators key foam off the same physics.\r\n this.$l.dxdx = pb.float(0);\r\n this.$l.dzdz = pb.float(0);\r\n this.$l.dxdz = pb.float(0);\r\n this.$for(\r\n pb.float('i'),\r\n 0,\r\n pb.getDevice().type === 'webgl' ? MAX_GERSTNER_WAVE_COUNT : this.numWaves,\r\n function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$if(pb.greaterThanEqual(this.i, this.numWaves), function () {\r\n this.$break();\r\n });\r\n }\r\n this.$l.waveNormal = pb.vec3();\r\n this.$l.waveDxdx = pb.float();\r\n this.$l.waveDzdz = pb.float();\r\n this.$l.waveDxdz = pb.float();\r\n this.$l.wavePos = that.gerstnerWave(\r\n this,\r\n this.waveParams.at(pb.mul(this.i, 2)),\r\n this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)),\r\n this.inPos,\r\n this.waveNormal,\r\n this.waveDxdx,\r\n this.waveDzdz,\r\n this.waveDxdz\r\n );\r\n this.outPos = pb.add(this.outPos, this.wavePos);\r\n this.outNormal = pb.add(this.outNormal, this.waveNormal);\r\n this.dxdx = pb.add(this.dxdx, this.waveDxdx);\r\n this.dzdz = pb.add(this.dzdz, this.waveDzdz);\r\n this.dxdz = pb.add(this.dxdz, this.waveDxdz);\r\n }\r\n );\r\n // Jacobian determinant of the horizontal displacement, det(I + J). When the\r\n // surface folds over the determinant drops below the foamParams.x threshold\r\n // and the coverage ramps in. Mirrors the FFT generator's foam.\r\n this.$l.val = pb.sub(pb.mul(pb.add(1, this.dxdx), pb.add(1, this.dzdz)), pb.mul(this.dxdz, this.dxdz));\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.outNormal, this.foam));\r\n });\r\n return scope.calcNormalAndFoam(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.numWaves = pb.float().uniform(uniformGroup);\r\n scope.waveParams = pb.vec4[MAX_GERSTNER_WAVE_COUNT * 2]().uniform(uniformGroup);\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n }\r\n /** @internal */\r\n private gerstnerWave(\r\n scope: PBInsideFunctionScope,\r\n waveParam: PBShaderExp,\r\n omniParam: PBShaderExp,\r\n inPos: PBShaderExp,\r\n outNormal: PBShaderExp,\r\n outDxdx: PBShaderExp,\r\n outDzdz: PBShaderExp,\r\n outDxdz: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'gerstnerWave',\r\n [\r\n pb.vec4('waveParam'),\r\n pb.vec4('omniParam'),\r\n pb.vec3('inPos'),\r\n pb.vec3('outNormal').out(),\r\n pb.float('outDxdx').out(),\r\n pb.float('outDzdz').out(),\r\n pb.float('outDxdz').out()\r\n ],\r\n function () {\r\n this.$l.amplitude = pb.max(this.waveParam.z, 0.01);\r\n this.$l.wavelength = this.waveParam.w;\r\n this.$l.omniPos = this.omniParam.xz;\r\n this.$l.omni = this.omniParam.w;\r\n this.$l.direction = pb.vec2(pb.sin(this.waveParam.x), pb.cos(this.waveParam.x));\r\n this.$l.w = pb.max(0.001, pb.div(Math.PI * 2, this.wavelength));\r\n this.$l.wSpeed = pb.sqrt(pb.mul(9.8, this.w));\r\n this.$l.peak = this.waveParam.y;\r\n this.$l.qi = pb.div(this.peak, pb.mul(this.amplitude, this.w, this.numWaves));\r\n this.$l.dirWaveInput = pb.mul(this.direction, pb.sub(1, this.omni));\r\n this.$l.omniWaveInput = pb.mul(pb.sub(this.inPos.xz, this.omniPos), this.omni);\r\n this.$l.windDir = pb.normalize(pb.add(this.dirWaveInput, this.omniWaveInput));\r\n this.$l.dir = pb.dot(this.windDir, pb.sub(this.inPos.xz, pb.mul(this.omniPos, this.omni)));\r\n this.$l.calc = pb.sub(\r\n pb.mul(this.dir, this.w),\r\n pb.mul(this.wSpeed, ShaderHelper.getElapsedTime(this))\r\n );\r\n this.$l.cosCalc = pb.cos(this.calc);\r\n this.$l.sinCalc = pb.sin(this.calc);\r\n this.$l.waveXZ = pb.mul(this.windDir.xy, this.qi, this.amplitude, this.cosCalc);\r\n this.$l.waveY = pb.div(pb.mul(this.sinCalc, this.amplitude), this.numWaves);\r\n this.$l.wave = pb.vec3(this.waveXZ.x, this.waveY, this.waveXZ.y);\r\n this.$l.wa = pb.mul(this.w, this.amplitude);\r\n this.$l.n = pb.vec3(\r\n pb.neg(pb.mul(this.windDir.xy, this.wa, this.cosCalc)),\r\n pb.sub(1, pb.mul(this.qi, this.wa, this.sinCalc))\r\n );\r\n this.outNormal = pb.div(this.n.xzy, this.numWaves);\r\n // Horizontal-gradient of the displacement, per wave. `waveXZ =\r\n // windDir.xy * qi * amp * cos`, and the derivative of `cos(calc)` w.r.t.\r\n // xz is `-w * sin(calc)`, so the gradient is the outer product of\r\n // `windDir.xy` with itself scaled by `-qi * wa * sin`. The sign matters:\r\n // at a crest (sin positive, cal near PI/2) the surface is compressed\r\n // horizontally, which is what pushes `det(I + J)` down and fires the\r\n // fold signal. Summed over waves and run through det(I + J), this is the\r\n // same Jacobian criterion the FFT generator uses.\r\n this.$l.jac = pb.neg(pb.mul(this.qi, this.wa, this.sinCalc));\r\n this.outDxdx = pb.mul(this.jac, this.windDir.x, this.windDir.x);\r\n this.outDzdz = pb.mul(this.jac, this.windDir.y, this.windDir.y);\r\n this.outDxdz = pb.mul(this.jac, this.windDir.x, this.windDir.y);\r\n this.$return(pb.mul(this.wave, pb.clamp(pb.mul(this.amplitude, 10000), 0, 1)));\r\n }\r\n );\r\n return scope.gerstnerWave(\r\n waveParam,\r\n omniParam,\r\n inPos,\r\n outNormal,\r\n outDxdx,\r\n outDzdz,\r\n outDxdz\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private calcNormalAndPos(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.outPos = this.inPos;\r\n this.outNormal = pb.vec3(0);\r\n this.$for(\r\n pb.float('i'),\r\n 0,\r\n pb.getDevice().type === 'webgl' ? MAX_GERSTNER_WAVE_COUNT : this.numWaves,\r\n function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$if(pb.greaterThanEqual(this.i, this.numWaves), function () {\r\n this.$break();\r\n });\r\n }\r\n this.$l.waveNormal = pb.vec3();\r\n this.$l.waveDxdx = pb.float();\r\n this.$l.waveDzdz = pb.float();\r\n this.$l.waveDxdz = pb.float();\r\n this.$l.wavePos = that.gerstnerWave(\r\n this,\r\n this.waveParams.at(pb.mul(this.i, 2)),\r\n this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)),\r\n this.inPos,\r\n this.waveNormal,\r\n this.waveDxdx,\r\n this.waveDzdz,\r\n this.waveDxdz\r\n );\r\n this.outPos = pb.add(this.outPos, this.wavePos);\r\n this.outNormal = pb.add(this.outNormal, this.waveNormal);\r\n }\r\n );\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n this.calcNormalAndPos(scope, inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n bindGroup.setValue('numWaves', this._numWaves);\r\n bindGroup.setValue('waveParams', this._waveParams);\r\n bindGroup.setValue('foamParams', this._foamParams);\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return true;\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'GerstnerWaveGenerator';\r\n }\r\n}\r\n"],"names":["GerstnerWaveGenerator","Disposable","_version","_waveParams","_numWaves","_rand","_foamParams","randomSeed","Float32Array","MAX_GERSTNER_WAVE_COUNT","PRNG","randomWave","randomWaveData","rand","array","offset","get","Math","PI","setRaw","data","index","set","clone","other","numWaves","version","val","Number","isInteger","console","error","i","deleteWave","j","insertWave","setWaveDirection","waveIndex","angle","getWaveDirection","setWaveSteepness","steepness","getWaveSteepness","setWaveAmplitude","getWaveAmplitude","setWaveLength","getWaveLength","isOmniWave","setOmniWave","isOmni","foamWidth","foamContrast","getOriginX","getOriginZ","setOrigin","x","z","update","needUpdate","calcClipmapTileAABB","minX","maxX","minZ","maxZ","y","outAABB","maxHeight","h","minPoint","setXYZ","maxPoint","calcFragmentNormal","scope","xz","_vertexNormal","pb","$builder","that","func","vec2","$l","inPos","vec3","outPos","outNormal","calcNormalAndPos","$return","calcFragmentNormalAndFoam","dxdx","float","dzdz","dxdz","$for","getDevice","type","$if","greaterThanEqual","$break","waveNormal","waveDxdx","waveDzdz","waveDxdz","wavePos","gerstnerWave","waveParams","at","mul","add","sub","foam","abs","pow","neg","min","foamParams","vec4","calcNormalAndFoam","setupUniforms","uniformGroup","uniform","waveParam","omniParam","outDxdx","outDzdz","outDxdz","out","amplitude","max","wavelength","w","omniPos","omni","direction","sin","cos","div","wSpeed","sqrt","peak","qi","dirWaveInput","omniWaveInput","windDir","normalize","dir","dot","calc","ShaderHelper","getElapsedTime","cosCalc","sinCalc","waveXZ","xy","waveY","wave","wa","n","xzy","jac","clamp","calcPositionAndNormal","calcVertexPositionAndNormal","applyWaterBindGroup","bindGroup","setValue","isOk","getHash"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;IAIO,MAAMA,qBAA8BC,SAAAA,UAAAA,CAAAA;IACjCC,QAAiB;IACjBC,WAAuC;IACvCC,SAAkB;IAClBC,KAAY;IACHC,WAAuC;AACxD;;MAGA,WAAA,CAAYC,UAAa,GAAA,CAAC,CAAE;QAC1B,KAAK,EAAA;AACL,QAAA,IAAI,CAACJ,WAAW,GAAG,IAAIK,aAAa,CAAIC,GAAAA,uBAAAA,CAAAA;AACxC,QAAA,IAAI,CAACJ,KAAK,GAAG,IAAIK,IAAKH,CAAAA,UAAAA,CAAAA;QACtB,IAAI,CAACI,UAAU,CAAC,CAAA,CAAA;QAChB,IAAI,CAACA,UAAU,CAAC,CAAA,CAAA;QAChB,IAAI,CAACA,UAAU,CAAC,CAAA,CAAA;QAChB,IAAI,CAACA,UAAU,CAAC,CAAA,CAAA;QAChB,IAAI,CAACP,SAAS,GAAG,CAAA;QACjB,IAAI,CAACF,QAAQ,GAAG,CAAA;;;AAGhB,QAAA,IAAI,CAACI,WAAW,GAAG,IAAIE,YAAa,CAAA;AAAC,YAAA,GAAA;AAAK,YAAA;AAAI,SAAA,CAAA;AAChD;qBAEA,OAAOI,cAAeC,CAAAA,IAAU,EAAEC,KAAmB,EAAEC,MAAc,EAAE;QACrED,KAAK,CAACC,SAAS,CAAE,CAAA,GAAGF,KAAKG,GAAG,EAAA,GAAKC,IAAKC,CAAAA,EAAE,GAAG,CAAA;AAC3CJ,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGF,IAAKG,CAAAA,GAAG,KAAK,GAAM,GAAA,GAAA;AACvCF,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGF,IAAAA,CAAKG,GAAG,EAAK,GAAA,GAAA;AACjCF,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGF,IAAAA,CAAKG,GAAG,EAAK,GAAA,EAAA;AACjCF,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGF,IAAKG,CAAAA,GAAG,KAAK,GAAM,GAAA,EAAA;QACvCF,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAG,CAAA;AACpBD,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGF,IAAKG,CAAAA,GAAG,KAAK,GAAM,GAAA,EAAA;QACvCF,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAG,CAAA;AACtB;AACA,qBACAI,MAAAA,CAAOC,IAAkB,EAAEC,KAAa,EAAE;AACxC,QAAA,IAAI,CAAClB,WAAW,CAACmB,GAAG,CAACF,MAAMC,KAAQ,GAAA,CAAA,CAAA;AACrC;IACAE,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAIxB,qBAAAA,EAAAA;AAClBwB,QAAAA,KAAAA,CAAMC,QAAQ,GAAG,IAAI,CAACA,QAAQ;AAC9BD,QAAAA,KAAAA,CAAMrB,WAAW,CAACmB,GAAG,CAAC,IAAI,CAACnB,WAAW,CAAA;AACtCqB,QAAAA,KAAAA,CAAMlB,WAAW,CAACgB,GAAG,CAAC,IAAI,CAAChB,WAAW,CAAA;QACtC,OAAOkB,KAAAA;AACT;AACA,IAAA,IAAIX,IAAO,GAAA;QACT,OAAO,IAAI,CAACR,KAAK;AACnB;AACA,IAAA,IAAIqB,OAAU,GAAA;QACZ,OAAO,IAAI,CAACxB,QAAQ;AACtB;qCAEA,IAAIuB,QAAW,GAAA;QACb,OAAO,IAAI,CAACrB,SAAS;AACvB;IACA,IAAIqB,QAAAA,CAASE,GAAG,EAAE;QAChB,IAAI,CAACC,OAAOC,SAAS,CAACF,QAAQA,GAAO,IAAA,CAAA,IAAKA,MAAMlB,uBAAyB,EAAA;AACvEqB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,qBAAqB,EAAEJ,GAAK,CAAA,CAAA,CAAA;AAC3C,YAAA;AACF;AACA,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACvB,SAAS,EAAE;YAC1B,IAAK,IAAI4B,IAAI,IAAI,CAAC5B,SAAS,EAAE4B,CAAAA,GAAIL,KAAKK,CAAK,EAAA,CAAA;gBACzC,IAAI,CAACrB,UAAU,CAACqB,CAAAA,CAAAA;AAClB;YACA,IAAI,CAAC5B,SAAS,GAAGuB,GAAAA;AACjB,YAAA,IAAI,CAACzB,QAAQ,EAAA;AACf;AACF;gCAEA+B,UAAWZ,CAAAA,KAAa,EAAE;AACxB,QAAA,IAAIA,QAAQ,CAAKA,IAAAA,KAAAA,IAAS,IAAI,CAACjB,SAAS,EAAE;AACxC,YAAA;AACF;QACA,IAAK,IAAI4B,IAAIX,KAAOW,EAAAA,CAAAA,GAAI,IAAI,CAAC5B,SAAS,GAAG,CAAA,EAAG4B,CAAK,EAAA,CAAA;AAC/C,YAAA,IAAK,IAAIE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,IAAI,CAAC/B,WAAW,CAAC6B,CAAI,GAAA,CAAA,GAAIE,EAAE,GAAG,IAAI,CAAC/B,WAAW,CAAC,CAAC6B,IAAI,CAAA,IAAK,IAAIE,CAAE,CAAA;AACjE;AACF;AACA,QAAA,IAAI,CAAC9B,SAAS,EAAA;AACd,QAAA,IAAI,CAACF,QAAQ,EAAA;AACf;yEAEAiC,UAAWd,CAAAA,KAAa,EAAE;;AAExB,QAAA,IAAI,IAAI,CAACjB,SAAS,IAAIK,uBAAyB,EAAA;AAC7C,YAAA;AACF;;;;;;;;QAQA,IAAK,IAAIuB,IAAI,IAAI,CAAC5B,SAAS,GAAG,CAAA,EAAG4B,CAAKX,IAAAA,KAAAA,EAAOW,CAAK,EAAA,CAAA;AAChD,YAAA,IAAK,IAAIE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,IAAI,CAAC/B,WAAW,CAAC,CAAC6B,IAAI,CAAA,IAAK,CAAIE,GAAAA,CAAAA,CAAE,GAAG,IAAI,CAAC/B,WAAW,CAAC6B,CAAAA,GAAI,IAAIE,CAAE,CAAA;AACjE;AACF;QACA,IAAI,CAACvB,UAAU,CAACU,KAAAA,CAAAA;AAChB,QAAA,IAAI,CAACjB,SAAS,EAAA;AACd,QAAA,IAAI,CAACF,QAAQ,EAAA;AACf;AACA;;;;AAIC,MACDkC,gBAAiBC,CAAAA,SAAiB,EAAEC,KAAa,EAAE;AACjD,QAAA,IAAID,YAAY5B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACN,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGC,KAAAA;AACtC,YAAA,IAAI,CAACpC,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAqC,gBAAAA,CAAiBF,SAAiB,EAAE;QAClC,OAAOA,SAAAA,GAAY5B,0BAA0B,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;AAIC,MACDG,gBAAiBH,CAAAA,SAAiB,EAAEI,SAAiB,EAAE;AACrD,QAAA,IAAIJ,YAAY5B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACN,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGI,SAAAA;AACtC,YAAA,IAAI,CAACvC,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAwC,gBAAAA,CAAiBL,SAAiB,EAAE;QAClC,OAAOA,SAAAA,GAAY5B,0BAA0B,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;AAIC,MACDM,gBAAiBN,CAAAA,SAAiB,EAAEV,GAAW,EAAE;AAC/C,QAAA,IAAIU,YAAY5B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACN,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGV,GAAAA;AACtC,YAAA,IAAI,CAACzB,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKA0C,gBAAAA,CAAiBP,SAAiB,EAAE;QAClC,OAAOA,SAAAA,GAAY5B,0BAA0B,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;AAIC,MACDQ,aAAcR,CAAAA,SAAiB,EAAEV,GAAW,EAAE;AAC5C,QAAA,IAAIU,YAAY5B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACN,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGV,GAAAA;AACtC,YAAA,IAAI,CAACzB,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKA4C,aAAAA,CAAcT,SAAiB,EAAE;QAC/B,OAAOA,SAAAA,GAAY5B,0BAA0B,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;MAKAU,UAAAA,CAAWV,SAAiB,EAAE;QAC5B,OAAOA,SAAAA,GAAY5B,uBAA0B,GAAA,IAAI,CAACN,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,CAAE,CAAA,KAAK,CAAI,GAAA,KAAA;AAC3F;AACA;;;;AAIC,MACDW,WAAYX,CAAAA,SAAiB,EAAEY,MAAe,EAAE;AAC9C,QAAA,IAAIZ,YAAY5B,uBAAyB,EAAA;YACvC,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,IAAI,CAAE,CAAA,GAAGY,SAAS,CAAI,GAAA,CAAA;AACnD,YAAA,IAAI,CAAC/C,QAAQ,EAAA;AACf;AACF;gCAEA,IAAIgD,SAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC5C,WAAW,CAAC,CAAE,CAAA;AAC5B;IACA,IAAI4C,SAAAA,CAAUvB,GAAG,EAAE;AACjB,QAAA,IAAIA,QAAQ,IAAI,CAACrB,WAAW,CAAC,EAAE,EAAE;AAC/B,YAAA,IAAI,CAACA,WAAW,CAAC,CAAA,CAAE,GAAGqB,GAAAA;AACtB,YAAA,IAAI,CAACzB,QAAQ,EAAA;AACf;AACF;mCAEA,IAAIiD,YAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC7C,WAAW,CAAC,CAAE,CAAA;AAC5B;IACA,IAAI6C,YAAAA,CAAaxB,GAAG,EAAE;AACpB,QAAA,IAAIA,QAAQ,IAAI,CAACrB,WAAW,CAAC,EAAE,EAAE;AAC/B,YAAA,IAAI,CAACA,WAAW,CAAC,CAAA,CAAE,GAAGqB,GAAAA;AACtB,YAAA,IAAI,CAACzB,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAkD,UAAAA,CAAWf,SAAiB,EAAE;QAC5B,OAAOA,SAAAA,GAAY5B,0BAA0B,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;MAKAgB,UAAAA,CAAWhB,SAAiB,EAAE;QAC5B,OAAOA,SAAAA,GAAY5B,0BAA0B,IAAI,CAACN,WAAW,CAACkC,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;;AAKC,MACDiB,UAAUjB,SAAiB,EAAEkB,CAAS,EAAEC,CAAS,EAAE;AACjD,QAAA,IAAInB,YAAY5B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACN,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGkB,CAAAA;AACtC,YAAA,IAAI,CAACpD,WAAW,CAACkC,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGmB,CAAAA;AACtC,YAAA,IAAI,CAACtD,QAAQ,EAAA;AACf;AACF;qBAEAS,UAAWqB,CAAAA,CAAS,EAAE;QACpBhC,qBAAsBY,CAAAA,cAAc,CAAC,IAAI,CAACP,KAAK,EAAE,IAAI,CAACF,WAAW,EAAE6B,CAAI,GAAA,CAAA,CAAA;AACzE;8CAEAyB,SAAS;AACT,kDACAC,UAAa,GAAA;QACX,OAAO,KAAA;AACT;AACA,2DACAC,mBAAAA,CAAoBC,IAAY,EAAEC,IAAY,EAAEC,IAAY,EAAEC,IAAY,EAAEC,CAAS,EAAEC,OAAa,EAAE;AACpG,QAAA,IAAIC,SAAY,GAAA,CAAA;QAChB,IAAK,IAAIlC,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAAC5B,SAAS,EAAE4B,CAAK,EAAA,CAAA;AACvC,YAAA,MAAMmC,IAAI,IAAI,CAAChE,WAAW,CAAC6B,CAAAA,GAAI,IAAI,CAAE,CAAA;AACrC,YAAA,IAAImC,IAAID,SAAW,EAAA;gBACjBA,SAAYC,GAAAA,CAAAA;AACd;AACF;AACAF,QAAAA,OAAAA,CAAQG,QAAQ,CAACC,MAAM,CAACT,MAAMI,CAAGF,EAAAA,IAAAA,CAAAA;AACjCG,QAAAA,OAAAA,CAAQK,QAAQ,CAACD,MAAM,CAACR,IAAAA,EAAMG,IAAIE,SAAWH,EAAAA,IAAAA,CAAAA;AAC/C;AACA,0DACAQ,kBAAmBC,CAAAA,KAA4B,EAAEC,EAAe,EAAEC,aAA0B,EAAE;QAC5F,MAAMC,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CAAC,oBAAsB,EAAA;AAACH,YAAAA,EAAAA,CAAGI,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AAC7C,YAAA,IAAI,CAACC,EAAE,CAACC,KAAK,GAAGN,EAAAA,CAAGO,IAAI,CAAC,IAAI,CAACT,EAAE,CAAClB,CAAC,EAAE,CAAA,EAAG,IAAI,CAACkB,EAAE,CAACT,CAAC,CAAA;AAC/C,YAAA,IAAI,CAACgB,EAAE,CAACG,MAAM,GAAGR,GAAGO,IAAI,EAAA;AACxB,YAAA,IAAI,CAACF,EAAE,CAACI,SAAS,GAAGT,GAAGO,IAAI,EAAA;AAC3BL,YAAAA,IAAAA,CAAKQ,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAACJ,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACC,SAAS,CAAA;AACnE,YAAA,IAAI,CAACE,OAAO,CAAC,IAAI,CAACF,SAAS,CAAA;AAC7B,SAAA,CAAA;QACA,OAAOZ,KAAAA,CAAMD,kBAAkB,CAACE,EAAAA,CAAAA;AAClC;AACA,iEACAc,yBAA0Bf,CAAAA,KAA4B,EAAEC,EAAe,EAAEC,aAA0B,EAAE;QACnG,MAAMC,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CAAC,mBAAqB,EAAA;AAACH,YAAAA,EAAAA,CAAGI,IAAI,CAAC,IAAA;SAAM,EAAE,WAAA;AAC5C,YAAA,IAAI,CAACC,EAAE,CAACC,KAAK,GAAGN,EAAAA,CAAGO,IAAI,CAAC,IAAI,CAACT,EAAE,CAAClB,CAAC,EAAE,CAAA,EAAG,IAAI,CAACkB,EAAE,CAACT,CAAC,CAAA;AAC/C,YAAA,IAAI,CAACgB,EAAE,CAACG,MAAM,GAAGR,GAAGO,IAAI,EAAA;AACxB,YAAA,IAAI,CAACF,EAAE,CAACI,SAAS,GAAGT,EAAAA,CAAGO,IAAI,CAAC,CAAA,CAAA;;;;;AAK5B,YAAA,IAAI,CAACF,EAAE,CAACQ,IAAI,GAAGb,EAAAA,CAAGc,KAAK,CAAC,CAAA,CAAA;AACxB,YAAA,IAAI,CAACT,EAAE,CAACU,IAAI,GAAGf,EAAAA,CAAGc,KAAK,CAAC,CAAA,CAAA;AACxB,YAAA,IAAI,CAACT,EAAE,CAACW,IAAI,GAAGhB,EAAAA,CAAGc,KAAK,CAAC,CAAA,CAAA;AACxB,YAAA,IAAI,CAACG,IAAI,CACPjB,GAAGc,KAAK,CAAC,MACT,CACAd,EAAAA,EAAAA,CAAGkB,SAAS,EAAA,CAAGC,IAAI,KAAK,OAAA,GAAUrF,0BAA0B,IAAI,CAACgB,QAAQ,EACzE,WAAA;AACE,gBAAA,IAAIkD,EAAGkB,CAAAA,SAAS,EAAGC,CAAAA,IAAI,KAAK,OAAS,EAAA;AACnC,oBAAA,IAAI,CAACC,GAAG,CAACpB,EAAAA,CAAGqB,gBAAgB,CAAC,IAAI,CAAChE,CAAC,EAAE,IAAI,CAACP,QAAQ,CAAG,EAAA,WAAA;AACnD,wBAAA,IAAI,CAACwE,MAAM,EAAA;AACb,qBAAA,CAAA;AACF;AACA,gBAAA,IAAI,CAACjB,EAAE,CAACkB,UAAU,GAAGvB,GAAGO,IAAI,EAAA;AAC5B,gBAAA,IAAI,CAACF,EAAE,CAACmB,QAAQ,GAAGxB,GAAGc,KAAK,EAAA;AAC3B,gBAAA,IAAI,CAACT,EAAE,CAACoB,QAAQ,GAAGzB,GAAGc,KAAK,EAAA;AAC3B,gBAAA,IAAI,CAACT,EAAE,CAACqB,QAAQ,GAAG1B,GAAGc,KAAK,EAAA;AAC3B,gBAAA,IAAI,CAACT,EAAE,CAACsB,OAAO,GAAGzB,IAAAA,CAAK0B,YAAY,CACjC,IAAI,EACJ,IAAI,CAACC,UAAU,CAACC,EAAE,CAAC9B,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAAC1E,CAAC,EAAE,CAAA,CAAA,CAAA,EAClC,IAAI,CAACwE,UAAU,CAACC,EAAE,CAAC9B,EAAGgC,CAAAA,GAAG,CAAChC,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAAC1E,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,EAC7C,IAAI,CAACiD,KAAK,EACV,IAAI,CAACiB,UAAU,EACf,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,QAAQ,CAAA;AAEf,gBAAA,IAAI,CAAClB,MAAM,GAAGR,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACxB,MAAM,EAAE,IAAI,CAACmB,OAAO,CAAA;AAC9C,gBAAA,IAAI,CAAClB,SAAS,GAAGT,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACvB,SAAS,EAAE,IAAI,CAACc,UAAU,CAAA;AACvD,gBAAA,IAAI,CAACV,IAAI,GAAGb,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACnB,IAAI,EAAE,IAAI,CAACW,QAAQ,CAAA;AAC3C,gBAAA,IAAI,CAACT,IAAI,GAAGf,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACjB,IAAI,EAAE,IAAI,CAACU,QAAQ,CAAA;AAC3C,gBAAA,IAAI,CAACT,IAAI,GAAGhB,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAAChB,IAAI,EAAE,IAAI,CAACU,QAAQ,CAAA;AAC7C,aAAA,CAAA;;;;AAKF,YAAA,IAAI,CAACrB,EAAE,CAACrD,GAAG,GAAGgD,GAAGiC,GAAG,CAACjC,EAAG+B,CAAAA,GAAG,CAAC/B,EAAGgC,CAAAA,GAAG,CAAC,CAAA,EAAG,IAAI,CAACnB,IAAI,CAAGb,EAAAA,EAAAA,CAAGgC,GAAG,CAAC,CAAA,EAAG,IAAI,CAACjB,IAAI,CAAIf,CAAAA,EAAAA,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAACf,IAAI,EAAE,IAAI,CAACA,IAAI,CAAA,CAAA;AACpG,YAAA,IAAI,CAACX,EAAE,CAAC6B,IAAI,GAAGlC,EAAGmC,CAAAA,GAAG,CACnBnC,EAAAA,CAAGoC,GAAG,CAACpC,EAAAA,CAAGqC,GAAG,CAACrC,GAAGsC,GAAG,CAAC,CAAGtC,EAAAA,EAAAA,CAAGiC,GAAG,CAAC,IAAI,CAACjF,GAAG,EAAE,IAAI,CAACuF,UAAU,CAAC3D,CAAC,CAAK,CAAA,CAAA,EAAA,IAAI,CAAC2D,UAAU,CAAClD,CAAC,CAAA,CAAA;AAElF,YAAA,IAAI,CAACsB,OAAO,CAACX,EAAAA,CAAGwC,IAAI,CAAC,IAAI,CAAC/B,SAAS,EAAE,IAAI,CAACyB,IAAI,CAAA,CAAA;AAChD,SAAA,CAAA;QACA,OAAOrC,KAAAA,CAAM4C,iBAAiB,CAAC3C,EAAAA,CAAAA;AACjC;AACA,qDACA4C,aAAAA,CAAc7C,KAAoB,EAAE8C,YAAoB,EAAE;QACxD,MAAM3C,EAAAA,GAAKH,MAAMI,QAAQ;AACzBJ,QAAAA,KAAAA,CAAM/C,QAAQ,GAAGkD,EAAAA,CAAGc,KAAK,EAAA,CAAG8B,OAAO,CAACD,YAAAA,CAAAA;QACpC9C,KAAMgC,CAAAA,UAAU,GAAG7B,EAAGwC,CAAAA,IAAI,CAAC1G,uBAA0B,GAAA,CAAA,CAAE,EAAG8G,CAAAA,OAAO,CAACD,YAAAA,CAAAA;AAClE9C,QAAAA,KAAAA,CAAM0C,UAAU,GAAGvC,EAAAA,CAAGI,IAAI,EAAA,CAAGwC,OAAO,CAACD,YAAAA,CAAAA;AACvC;AACA,qBACA,YAAQf,CACN/B,KAA4B,EAC5BgD,SAAsB,EACtBC,SAAsB,EACtBxC,KAAkB,EAClBG,SAAsB,EACtBsC,OAAoB,EACpBC,OAAoB,EACpBC,OAAoB,EACpB;QACA,MAAMjD,EAAAA,GAAKH,MAAMI,QAAQ;QACzBD,EAAGG,CAAAA,IAAI,CACL,cACA,EAAA;AACEH,YAAAA,EAAAA,CAAGwC,IAAI,CAAC,WAAA,CAAA;AACRxC,YAAAA,EAAAA,CAAGwC,IAAI,CAAC,WAAA,CAAA;AACRxC,YAAAA,EAAAA,CAAGO,IAAI,CAAC,OAAA,CAAA;YACRP,EAAGO,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAa2C,GAAG,EAAA;YACxBlD,EAAGc,CAAAA,KAAK,CAAC,SAAA,CAAA,CAAWoC,GAAG,EAAA;YACvBlD,EAAGc,CAAAA,KAAK,CAAC,SAAA,CAAA,CAAWoC,GAAG,EAAA;YACvBlD,EAAGc,CAAAA,KAAK,CAAC,SAAA,CAAA,CAAWoC,GAAG;SACxB,EACD,WAAA;AACE,YAAA,IAAI,CAAC7C,EAAE,CAAC8C,SAAS,GAAGnD,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACP,SAAS,CAAChE,CAAC,EAAE,IAAA,CAAA;YAC7C,IAAI,CAACwB,EAAE,CAACgD,UAAU,GAAG,IAAI,CAACR,SAAS,CAACS,CAAC;YACrC,IAAI,CAACjD,EAAE,CAACkD,OAAO,GAAG,IAAI,CAACT,SAAS,CAAChD,EAAE;YACnC,IAAI,CAACO,EAAE,CAACmD,IAAI,GAAG,IAAI,CAACV,SAAS,CAACQ,CAAC;YAC/B,IAAI,CAACjD,EAAE,CAACoD,SAAS,GAAGzD,GAAGI,IAAI,CAACJ,EAAG0D,CAAAA,GAAG,CAAC,IAAI,CAACb,SAAS,CAACjE,CAAC,CAAA,EAAGoB,EAAG2D,CAAAA,GAAG,CAAC,IAAI,CAACd,SAAS,CAACjE,CAAC,CAAA,CAAA;AAC7E,YAAA,IAAI,CAACyB,EAAE,CAACiD,CAAC,GAAGtD,EAAAA,CAAGoD,GAAG,CAAC,KAAA,EAAOpD,EAAG4D,CAAAA,GAAG,CAACtH,IAAKC,CAAAA,EAAE,GAAG,CAAG,EAAA,IAAI,CAAC8G,UAAU,CAAA,CAAA;AAC7D,YAAA,IAAI,CAAChD,EAAE,CAACwD,MAAM,GAAG7D,EAAG8D,CAAAA,IAAI,CAAC9D,EAAAA,CAAG+B,GAAG,CAAC,GAAK,EAAA,IAAI,CAACuB,CAAC,CAAA,CAAA;YAC3C,IAAI,CAACjD,EAAE,CAAC0D,IAAI,GAAG,IAAI,CAAClB,SAAS,CAACxD,CAAC;YAC/B,IAAI,CAACgB,EAAE,CAAC2D,EAAE,GAAGhE,GAAG4D,GAAG,CAAC,IAAI,CAACG,IAAI,EAAE/D,GAAG+B,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACG,CAAC,EAAE,IAAI,CAACxG,QAAQ,CAAA,CAAA;AAC3E,YAAA,IAAI,CAACuD,EAAE,CAAC4D,YAAY,GAAGjE,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAAC0B,SAAS,EAAEzD,EAAGiC,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAACuB,IAAI,CAAA,CAAA;YACjE,IAAI,CAACnD,EAAE,CAAC6D,aAAa,GAAGlE,EAAG+B,CAAAA,GAAG,CAAC/B,EAAAA,CAAGiC,GAAG,CAAC,IAAI,CAAC3B,KAAK,CAACR,EAAE,EAAE,IAAI,CAACyD,OAAO,CAAA,EAAG,IAAI,CAACC,IAAI,CAAA;AAC7E,YAAA,IAAI,CAACnD,EAAE,CAAC8D,OAAO,GAAGnE,GAAGoE,SAAS,CAACpE,EAAGgC,CAAAA,GAAG,CAAC,IAAI,CAACiC,YAAY,EAAE,IAAI,CAACC,aAAa,CAAA,CAAA;AAC3E,YAAA,IAAI,CAAC7D,EAAE,CAACgE,GAAG,GAAGrE,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACH,OAAO,EAAEnE,GAAGiC,GAAG,CAAC,IAAI,CAAC3B,KAAK,CAACR,EAAE,EAAEE,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACwB,OAAO,EAAE,IAAI,CAACC,IAAI,CAAA,CAAA,CAAA;AACvF,YAAA,IAAI,CAACnD,EAAE,CAACkE,IAAI,GAAGvE,EAAAA,CAAGiC,GAAG,CACnBjC,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACsC,GAAG,EAAE,IAAI,CAACf,CAAC,CACvBtD,EAAAA,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAAC8B,MAAM,EAAEW,YAAaC,CAAAA,cAAc,CAAC,IAAI,CAAA,CAAA,CAAA;YAEtD,IAAI,CAACpE,EAAE,CAACqE,OAAO,GAAG1E,GAAG2D,GAAG,CAAC,IAAI,CAACY,IAAI,CAAA;YAClC,IAAI,CAAClE,EAAE,CAACsE,OAAO,GAAG3E,GAAG0D,GAAG,CAAC,IAAI,CAACa,IAAI,CAAA;YAClC,IAAI,CAAClE,EAAE,CAACuE,MAAM,GAAG5E,GAAG+B,GAAG,CAAC,IAAI,CAACoC,OAAO,CAACU,EAAE,EAAE,IAAI,CAACb,EAAE,EAAE,IAAI,CAACb,SAAS,EAAE,IAAI,CAACuB,OAAO,CAAA;YAC9E,IAAI,CAACrE,EAAE,CAACyE,KAAK,GAAG9E,EAAG4D,CAAAA,GAAG,CAAC5D,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAAC4C,OAAO,EAAE,IAAI,CAACxB,SAAS,CAAA,EAAG,IAAI,CAACrG,QAAQ,CAAA;YAC1E,IAAI,CAACuD,EAAE,CAAC0E,IAAI,GAAG/E,EAAGO,CAAAA,IAAI,CAAC,IAAI,CAACqE,MAAM,CAAChG,CAAC,EAAE,IAAI,CAACkG,KAAK,EAAE,IAAI,CAACF,MAAM,CAACvF,CAAC,CAAA;AAC/D,YAAA,IAAI,CAACgB,EAAE,CAAC2E,EAAE,GAAGhF,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACuB,CAAC,EAAE,IAAI,CAACH,SAAS,CAAA;YAC1C,IAAI,CAAC9C,EAAE,CAAC4E,CAAC,GAAGjF,EAAGO,CAAAA,IAAI,CACjBP,EAAGqC,CAAAA,GAAG,CAACrC,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACoC,OAAO,CAACU,EAAE,EAAE,IAAI,CAACG,EAAE,EAAE,IAAI,CAACN,OAAO,CAAA,CAAA,EACpD1E,GAAGiC,GAAG,CAAC,GAAGjC,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACiC,EAAE,EAAE,IAAI,CAACgB,EAAE,EAAE,IAAI,CAACL,OAAO,CAAA,CAAA,CAAA;AAEjD,YAAA,IAAI,CAAClE,SAAS,GAAGT,EAAAA,CAAG4D,GAAG,CAAC,IAAI,CAACqB,CAAC,CAACC,GAAG,EAAE,IAAI,CAACpI,QAAQ,CAAA;;;;;;;;;YASjD,IAAI,CAACuD,EAAE,CAAC8E,GAAG,GAAGnF,EAAGqC,CAAAA,GAAG,CAACrC,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACiC,EAAE,EAAE,IAAI,CAACgB,EAAE,EAAE,IAAI,CAACL,OAAO,CAAA,CAAA;YAC1D,IAAI,CAAC5B,OAAO,GAAG/C,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAACoD,GAAG,EAAE,IAAI,CAAChB,OAAO,CAACvF,CAAC,EAAE,IAAI,CAACuF,OAAO,CAACvF,CAAC,CAAA;YAC9D,IAAI,CAACoE,OAAO,GAAGhD,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAACoD,GAAG,EAAE,IAAI,CAAChB,OAAO,CAAC9E,CAAC,EAAE,IAAI,CAAC8E,OAAO,CAAC9E,CAAC,CAAA;YAC9D,IAAI,CAAC4D,OAAO,GAAGjD,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAACoD,GAAG,EAAE,IAAI,CAAChB,OAAO,CAACvF,CAAC,EAAE,IAAI,CAACuF,OAAO,CAAC9E,CAAC,CAAA;YAC9D,IAAI,CAACsB,OAAO,CAACX,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAACgD,IAAI,EAAE/E,GAAGoF,KAAK,CAACpF,GAAG+B,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,KAAA,CAAA,EAAQ,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5E,SAAA,CAAA;QAEF,OAAOtD,KAAAA,CAAM+B,YAAY,CACvBiB,SAAAA,EACAC,WACAxC,KACAG,EAAAA,SAAAA,EACAsC,SACAC,OACAC,EAAAA,OAAAA,CAAAA;AAEJ;qBAEA,gBAAQvC,CACNb,KAA4B,EAC5BS,KAAkB,EAClBE,MAAmB,EACnBC,SAAsB,EACtB;QACA,MAAMT,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,QAAA,MAAMC,OAAO,IAAI;QACjBF,EAAGG,CAAAA,IAAI,CACL,uBACA,EAAA;AAACH,YAAAA,EAAAA,CAAGO,IAAI,CAAC,OAAA,CAAA;YAAUP,EAAGO,CAAAA,IAAI,CAAC,QAAA,CAAA,CAAU2C,GAAG,EAAA;YAAIlD,EAAGO,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAa2C,GAAG;SAAG,EACvE,WAAA;AACE,YAAA,IAAI,CAAC1C,MAAM,GAAG,IAAI,CAACF,KAAK;AACxB,YAAA,IAAI,CAACG,SAAS,GAAGT,EAAAA,CAAGO,IAAI,CAAC,CAAA,CAAA;AACzB,YAAA,IAAI,CAACU,IAAI,CACPjB,GAAGc,KAAK,CAAC,MACT,CACAd,EAAAA,EAAAA,CAAGkB,SAAS,EAAA,CAAGC,IAAI,KAAK,OAAA,GAAUrF,0BAA0B,IAAI,CAACgB,QAAQ,EACzE,WAAA;AACE,gBAAA,IAAIkD,EAAGkB,CAAAA,SAAS,EAAGC,CAAAA,IAAI,KAAK,OAAS,EAAA;AACnC,oBAAA,IAAI,CAACC,GAAG,CAACpB,EAAAA,CAAGqB,gBAAgB,CAAC,IAAI,CAAChE,CAAC,EAAE,IAAI,CAACP,QAAQ,CAAG,EAAA,WAAA;AACnD,wBAAA,IAAI,CAACwE,MAAM,EAAA;AACb,qBAAA,CAAA;AACF;AACA,gBAAA,IAAI,CAACjB,EAAE,CAACkB,UAAU,GAAGvB,GAAGO,IAAI,EAAA;AAC5B,gBAAA,IAAI,CAACF,EAAE,CAACmB,QAAQ,GAAGxB,GAAGc,KAAK,EAAA;AAC3B,gBAAA,IAAI,CAACT,EAAE,CAACoB,QAAQ,GAAGzB,GAAGc,KAAK,EAAA;AAC3B,gBAAA,IAAI,CAACT,EAAE,CAACqB,QAAQ,GAAG1B,GAAGc,KAAK,EAAA;AAC3B,gBAAA,IAAI,CAACT,EAAE,CAACsB,OAAO,GAAGzB,IAAAA,CAAK0B,YAAY,CACjC,IAAI,EACJ,IAAI,CAACC,UAAU,CAACC,EAAE,CAAC9B,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAAC1E,CAAC,EAAE,CAAA,CAAA,CAAA,EAClC,IAAI,CAACwE,UAAU,CAACC,EAAE,CAAC9B,EAAGgC,CAAAA,GAAG,CAAChC,EAAAA,CAAG+B,GAAG,CAAC,IAAI,CAAC1E,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,EAC7C,IAAI,CAACiD,KAAK,EACV,IAAI,CAACiB,UAAU,EACf,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,QAAQ,EACb,IAAI,CAACC,QAAQ,CAAA;AAEf,gBAAA,IAAI,CAAClB,MAAM,GAAGR,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACxB,MAAM,EAAE,IAAI,CAACmB,OAAO,CAAA;AAC9C,gBAAA,IAAI,CAAClB,SAAS,GAAGT,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACvB,SAAS,EAAE,IAAI,CAACc,UAAU,CAAA;AACzD,aAAA,CAAA;AAEJ,SAAA,CAAA;QAEF1B,KAAMwF,CAAAA,qBAAqB,CAAC/E,KAAAA,EAAOE,MAAQC,EAAAA,SAAAA,CAAAA;AAC7C;mEAEA6E,4BACEzF,KAA4B,EAC5BS,KAAkB,EAClBE,MAAmB,EACnBC,SAAsB,EACtB;AACA,QAAA,IAAI,CAACC,gBAAgB,CAACb,KAAAA,EAAOS,OAAOE,MAAQC,EAAAA,SAAAA,CAAAA;AAC9C;2DAEA8E,mBAAoBC,CAAAA,SAAoB,EAAE;AACxCA,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,UAAY,EAAA,IAAI,CAAChK,SAAS,CAAA;AAC7C+J,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,YAAc,EAAA,IAAI,CAACjK,WAAW,CAAA;AACjDgK,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,YAAc,EAAA,IAAI,CAAC9J,WAAW,CAAA;AACnD;AACA,4CACA+J,IAAO,GAAA;QACL,OAAO,IAAA;AACT;AACA,+CACAC,OAAU,GAAA;QACR,OAAO,uBAAA;AACT;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"gerstner_wavegenerator.js","sources":["../../src/render/gerstner_wavegenerator.ts"],"sourcesContent":["import { Disposable, PRNG, type AABB } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type { BindGroup, PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShaderHelper } from '../material';\r\nimport { MAX_GERSTNER_WAVE_COUNT } from '../values';\r\n\r\n/**\r\n * Gerstner wave generator.\r\n * @public\r\n */\r\nexport class GerstnerWaveGenerator extends Disposable implements WaveGenerator {\r\n private _version: number;\r\n private _waveParams: Float32Array<ArrayBuffer>;\r\n private _numWaves: number;\r\n private _rand: PRNG;\r\n private readonly _foamParams: Float32Array<ArrayBuffer>;\r\n /**\r\n * Creates a new Gerstner wave generator.\r\n */\r\n constructor(randomSeed = 0) {\r\n super();\r\n this._waveParams = new Float32Array(8 * MAX_GERSTNER_WAVE_COUNT);\r\n this._rand = new PRNG(randomSeed);\r\n this.randomWave(0);\r\n this.randomWave(1);\r\n this.randomWave(2);\r\n this.randomWave(3);\r\n this._numWaves = 4;\r\n this._version = 0;\r\n // Same defaults as the FFT generator.\r\n this._foamParams = new Float32Array([1.2, 7.2]);\r\n }\r\n /** @internal */\r\n static randomWaveData(rand: PRNG, array: Float32Array, offset: number) {\r\n array[offset + 0] = rand.get() * Math.PI * 2;\r\n array[offset + 1] = rand.get() * 0.5 + 0.5;\r\n array[offset + 2] = rand.get() * 0.1;\r\n array[offset + 3] = rand.get() * 10;\r\n array[offset + 4] = rand.get() * 100 - 50;\r\n array[offset + 5] = 0;\r\n array[offset + 6] = rand.get() * 100 - 50;\r\n array[offset + 7] = 0;\r\n }\r\n /** @internal */\r\n setRaw(data: Float32Array, index: number) {\r\n this._waveParams.set(data, index * 8);\r\n }\r\n clone() {\r\n const other = new GerstnerWaveGenerator();\r\n other.numWaves = this.numWaves;\r\n other._waveParams.set(this._waveParams);\r\n other._foamParams.set(this._foamParams);\r\n return other as this;\r\n }\r\n get rand() {\r\n return this._rand;\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n /** Gets the number of waves. */\r\n get numWaves() {\r\n return this._numWaves;\r\n }\r\n set numWaves(val) {\r\n if (!Number.isInteger(val) || val <= 0 || val > MAX_GERSTNER_WAVE_COUNT) {\r\n console.error(`Invalid wave number: ${val}`);\r\n return;\r\n }\r\n if (val !== this._numWaves) {\r\n for (let i = this._numWaves; i < val; i++) {\r\n this.randomWave(i);\r\n }\r\n this._numWaves = val;\r\n this._version++;\r\n }\r\n }\r\n /** Delete wave at index */\r\n deleteWave(index: number) {\r\n if (index < 0 || index >= this._numWaves) {\r\n return;\r\n }\r\n for (let i = index; i < this._numWaves - 1; i++) {\r\n for (let j = 0; j < 8; j++) {\r\n this._waveParams[i * 8 + j] = this._waveParams[(i + 1) * 8 + j];\r\n }\r\n }\r\n this._numWaves--;\r\n this._version++;\r\n }\r\n /** Insert a wave slot at index, shifting the subsequent waves up */\r\n insertWave(index: number) {\r\n // Bounded by the parameter buffer; the shader reads this many slots.\r\n if (this._numWaves >= MAX_GERSTNER_WAVE_COUNT) {\r\n return;\r\n }\r\n // Shift from the tail backwards so the gap opens at `index`. The new slot\r\n // gets a random valid wave: a zero wavelength makes `w = 2*PI / length`\r\n // infinite and drives the vertex shader into NaN.\r\n for (let i = this._numWaves - 1; i >= index; i--) {\r\n for (let j = 0; j < 8; j++) {\r\n this._waveParams[(i + 1) * 8 + j] = this._waveParams[i * 8 + j];\r\n }\r\n }\r\n this.randomWave(index);\r\n this._numWaves++;\r\n this._version++;\r\n }\r\n /**\r\n * Sets the angle of the wave direction in radians.\r\n * @param waveIndex - index of the wave to set.\r\n * @param angle - angle of the wave direction in radians.\r\n */\r\n setWaveDirection(waveIndex: number, angle: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 0] = angle;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the angle of the wave direction in radians.\r\n * @param waveIndex - index of the wave to get.\r\n * @returns Angle of the wave direction in radians.\r\n */\r\n getWaveDirection(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 0] : 0;\r\n }\r\n /**\r\n * Sets the steepness of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param steepness - Steepness of the wave.\r\n */\r\n setWaveSteepness(waveIndex: number, steepness: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 1] = steepness;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the steepness of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Steepness of the wave.\r\n */\r\n getWaveSteepness(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 1] : 0;\r\n }\r\n /**\r\n * Sets the amplitude of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param val - Amplitude of the wave.\r\n */\r\n setWaveAmplitude(waveIndex: number, val: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 2] = val;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the amplitude of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Amplitude of the wave.\r\n */\r\n getWaveAmplitude(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 2] : 0;\r\n }\r\n /**\r\n * Sets the length of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param val - Length of the wave.\r\n */\r\n setWaveLength(waveIndex: number, val: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 3] = val;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the length of the wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Length of the wave.\r\n */\r\n getWaveLength(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 3] : 0;\r\n }\r\n /**\r\n * Query if the wave is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns true if the wave is an omni-directional wave, false otherwise.\r\n */\r\n isOmniWave(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 7] !== 0 : false;\r\n }\r\n /**\r\n * Sets whether the wave is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param isOmni - true if the wave is an omni-directional wave, false otherwise.\r\n */\r\n setOmniWave(waveIndex: number, isOmni: boolean) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 7] = isOmni ? 1 : 0;\r\n this._version++;\r\n }\r\n }\r\n /** Gets the foam width. */\r\n get foamWidth() {\r\n return this._foamParams[0];\r\n }\r\n set foamWidth(val) {\r\n if (val !== this._foamParams[0]) {\r\n this._foamParams[0] = val;\r\n this._version++;\r\n }\r\n }\r\n /** Gets the foam contrast. */\r\n get foamContrast() {\r\n return this._foamParams[1];\r\n }\r\n set foamContrast(val) {\r\n if (val !== this._foamParams[1]) {\r\n this._foamParams[1] = val;\r\n this._version++;\r\n }\r\n }\r\n /**\r\n * Gets the X coordinate of the wave origin if it is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns X coordinate of the wave origin if it is an omni-directional wave, 0 otherwise.\r\n */\r\n getOriginX(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 4] : 0;\r\n }\r\n /**\r\n * Gets the Z coordinate of the wave origin if it is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @returns Z coordinate of the wave origin if it is an omni-directional wave, 0 otherwise.\r\n */\r\n getOriginZ(waveIndex: number) {\r\n return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 6] : 0;\r\n }\r\n /**\r\n * Sets the X and Z coordinates of the wave origin if it is an omni-directional wave.\r\n * @param waveIndex - index of the wave to set.\r\n * @param x - X coordinate of the wave origin\r\n * @param z - Z coordinate of the wave origin\r\n */\r\n setOrigin(waveIndex: number, x: number, z: number) {\r\n if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {\r\n this._waveParams[waveIndex * 8 + 4] = x;\r\n this._waveParams[waveIndex * 8 + 6] = z;\r\n this._version++;\r\n }\r\n }\r\n /** @internal */\r\n randomWave(i: number) {\r\n GerstnerWaveGenerator.randomWaveData(this._rand, this._waveParams, i * 8);\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update() {}\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return false;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n let maxHeight = 0;\r\n for (let i = 0; i < this._numWaves; i++) {\r\n const h = this._waveParams[i * 8 + 2];\r\n if (h > maxHeight) {\r\n maxHeight = h;\r\n }\r\n }\r\n outAABB.minPoint.setXYZ(minX, y, minZ);\r\n outAABB.maxPoint.setXYZ(maxX, y + maxHeight, maxZ);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.inPos = pb.vec3(this.xz.x, 0, this.xz.y);\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3();\r\n that.calcNormalAndPos(this, this.inPos, this.outPos, this.outNormal);\r\n this.$return(this.outNormal);\r\n });\r\n return scope.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcNormalAndFoam', [pb.vec2('xz')], function () {\r\n this.$l.inPos = pb.vec3(this.xz.x, 0, this.xz.y);\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3(0);\r\n // Horizontal-gradient terms summed over the waves, for det(I + J), the\r\n // fold signal the foam is derived from (same as the FFT generator).\r\n this.$l.dxdx = pb.float(0);\r\n this.$l.dzdz = pb.float(0);\r\n this.$l.dxdz = pb.float(0);\r\n this.$for(pb.float('i'), 0, this.numWaves, function () {\r\n this.$l.waveNormal = pb.vec3();\r\n this.$l.waveDxdx = pb.float();\r\n this.$l.waveDzdz = pb.float();\r\n this.$l.waveDxdz = pb.float();\r\n this.$l.wavePos = that.gerstnerWave(\r\n this,\r\n this.waveParams.at(pb.mul(this.i, 2)),\r\n this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)),\r\n this.inPos,\r\n this.waveNormal,\r\n this.waveDxdx,\r\n this.waveDzdz,\r\n this.waveDxdz\r\n );\r\n this.outPos = pb.add(this.outPos, this.wavePos);\r\n this.outNormal = pb.add(this.outNormal, this.waveNormal);\r\n this.dxdx = pb.add(this.dxdx, this.waveDxdx);\r\n this.dzdz = pb.add(this.dzdz, this.waveDzdz);\r\n this.dxdz = pb.add(this.dxdz, this.waveDxdz);\r\n });\r\n // Jacobian determinant of the horizontal displacement, det(I + J); below\r\n // the foamParams.x threshold the surface folds and foam ramps in.\r\n this.$l.val = pb.sub(pb.mul(pb.add(1, this.dxdx), pb.add(1, this.dzdz)), pb.mul(this.dxdz, this.dxdz));\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.outNormal, this.foam));\r\n });\r\n return scope.calcNormalAndFoam(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.numWaves = pb.float().uniform(uniformGroup);\r\n scope.waveParams = pb.vec4[MAX_GERSTNER_WAVE_COUNT * 2]().uniform(uniformGroup);\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n }\r\n /** @internal */\r\n private gerstnerWave(\r\n scope: PBInsideFunctionScope,\r\n waveParam: PBShaderExp,\r\n omniParam: PBShaderExp,\r\n inPos: PBShaderExp,\r\n outNormal: PBShaderExp,\r\n outDxdx: PBShaderExp,\r\n outDzdz: PBShaderExp,\r\n outDxdz: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'gerstnerWave',\r\n [\r\n pb.vec4('waveParam'),\r\n pb.vec4('omniParam'),\r\n pb.vec3('inPos'),\r\n pb.vec3('outNormal').out(),\r\n pb.float('outDxdx').out(),\r\n pb.float('outDzdz').out(),\r\n pb.float('outDxdz').out()\r\n ],\r\n function () {\r\n this.$l.amplitude = pb.max(this.waveParam.z, 0.01);\r\n this.$l.wavelength = this.waveParam.w;\r\n this.$l.omniPos = this.omniParam.xz;\r\n this.$l.omni = this.omniParam.w;\r\n this.$l.direction = pb.vec2(pb.sin(this.waveParam.x), pb.cos(this.waveParam.x));\r\n this.$l.w = pb.max(0.001, pb.div(Math.PI * 2, this.wavelength));\r\n this.$l.wSpeed = pb.sqrt(pb.mul(9.8, this.w));\r\n this.$l.peak = this.waveParam.y;\r\n this.$l.qi = pb.div(this.peak, pb.mul(this.amplitude, this.w, this.numWaves));\r\n this.$l.dirWaveInput = pb.mul(this.direction, pb.sub(1, this.omni));\r\n this.$l.omniWaveInput = pb.mul(pb.sub(this.inPos.xz, this.omniPos), this.omni);\r\n this.$l.windDir = pb.normalize(pb.add(this.dirWaveInput, this.omniWaveInput));\r\n this.$l.dir = pb.dot(this.windDir, pb.sub(this.inPos.xz, pb.mul(this.omniPos, this.omni)));\r\n this.$l.calc = pb.sub(\r\n pb.mul(this.dir, this.w),\r\n pb.mul(this.wSpeed, ShaderHelper.getElapsedTime(this))\r\n );\r\n this.$l.cosCalc = pb.cos(this.calc);\r\n this.$l.sinCalc = pb.sin(this.calc);\r\n this.$l.waveXZ = pb.mul(this.windDir.xy, this.qi, this.amplitude, this.cosCalc);\r\n this.$l.waveY = pb.div(pb.mul(this.sinCalc, this.amplitude), this.numWaves);\r\n this.$l.wave = pb.vec3(this.waveXZ.x, this.waveY, this.waveXZ.y);\r\n this.$l.wa = pb.mul(this.w, this.amplitude);\r\n this.$l.n = pb.vec3(\r\n pb.neg(pb.mul(this.windDir.xy, this.wa, this.cosCalc)),\r\n pb.sub(1, pb.mul(this.qi, this.wa, this.sinCalc))\r\n );\r\n this.outNormal = pb.div(this.n.xzy, this.numWaves);\r\n // Horizontal gradient of the displacement `windDir.xy * qi * amp * cos`:\r\n // the outer product of `windDir.xy` with itself scaled by `-qi * wa * sin`.\r\n // At a crest the surface is compressed, pushing det(I + J) down.\r\n this.$l.jac = pb.neg(pb.mul(this.qi, this.wa, this.sinCalc));\r\n this.outDxdx = pb.mul(this.jac, this.windDir.x, this.windDir.x);\r\n this.outDzdz = pb.mul(this.jac, this.windDir.y, this.windDir.y);\r\n this.outDxdz = pb.mul(this.jac, this.windDir.x, this.windDir.y);\r\n this.$return(pb.mul(this.wave, pb.clamp(pb.mul(this.amplitude, 10000), 0, 1)));\r\n }\r\n );\r\n return scope.gerstnerWave(\r\n waveParam,\r\n omniParam,\r\n inPos,\r\n outNormal,\r\n outDxdx,\r\n outDzdz,\r\n outDxdz\r\n ) as PBShaderExp;\r\n }\r\n /** @internal */\r\n private calcNormalAndPos(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.outPos = this.inPos;\r\n this.outNormal = pb.vec3(0);\r\n this.$for(pb.float('i'), 0, this.numWaves, function () {\r\n this.$l.waveNormal = pb.vec3();\r\n this.$l.waveDxdx = pb.float();\r\n this.$l.waveDzdz = pb.float();\r\n this.$l.waveDxdz = pb.float();\r\n this.$l.wavePos = that.gerstnerWave(\r\n this,\r\n this.waveParams.at(pb.mul(this.i, 2)),\r\n this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)),\r\n this.inPos,\r\n this.waveNormal,\r\n this.waveDxdx,\r\n this.waveDzdz,\r\n this.waveDxdz\r\n );\r\n this.outPos = pb.add(this.outPos, this.wavePos);\r\n this.outNormal = pb.add(this.outNormal, this.waveNormal);\r\n });\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n this.calcNormalAndPos(scope, inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n bindGroup.setValue('numWaves', this._numWaves);\r\n bindGroup.setValue('waveParams', this._waveParams);\r\n bindGroup.setValue('foamParams', this._foamParams);\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return true;\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'GerstnerWaveGenerator';\r\n }\r\n}\r\n"],"names":["GerstnerWaveGenerator","Disposable","_version","_waveParams","_numWaves","_rand","_foamParams","randomSeed","Float32Array","MAX_GERSTNER_WAVE_COUNT","PRNG","randomWave","randomWaveData","rand","array","offset","get","Math","PI","setRaw","data","index","set","clone","other","numWaves","version","val","Number","isInteger","console","error","i","deleteWave","j","insertWave","setWaveDirection","waveIndex","angle","getWaveDirection","setWaveSteepness","steepness","getWaveSteepness","setWaveAmplitude","getWaveAmplitude","setWaveLength","getWaveLength","isOmniWave","setOmniWave","isOmni","foamWidth","foamContrast","getOriginX","getOriginZ","setOrigin","x","z","update","needUpdate","calcClipmapTileAABB","minX","maxX","minZ","maxZ","y","outAABB","maxHeight","h","minPoint","setXYZ","maxPoint","calcFragmentNormal","scope","xz","_vertexNormal","pb","$builder","that","func","vec2","$l","inPos","vec3","outPos","outNormal","calcNormalAndPos","$return","calcFragmentNormalAndFoam","dxdx","float","dzdz","dxdz","$for","waveNormal","waveDxdx","waveDzdz","waveDxdz","wavePos","gerstnerWave","waveParams","at","mul","add","sub","foam","abs","pow","neg","min","foamParams","vec4","calcNormalAndFoam","setupUniforms","uniformGroup","uniform","waveParam","omniParam","outDxdx","outDzdz","outDxdz","out","amplitude","max","wavelength","w","omniPos","omni","direction","sin","cos","div","wSpeed","sqrt","peak","qi","dirWaveInput","omniWaveInput","windDir","normalize","dir","dot","calc","ShaderHelper","getElapsedTime","cosCalc","sinCalc","waveXZ","xy","waveY","wave","wa","n","xzy","jac","clamp","calcPositionAndNormal","calcVertexPositionAndNormal","applyWaterBindGroup","bindGroup","setValue","isOk","getHash"],"mappings":"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"}
|