@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,15 +1,16 @@
|
|
|
1
|
-
import { Disposable } from '@zephyr3d/base';
|
|
1
|
+
import { Disposable, PRNG } from '@zephyr3d/base';
|
|
2
2
|
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';
|
|
@@ -29,26 +30,34 @@ import '../utility/blueprint/material/texture.js';
|
|
|
29
30
|
_version;
|
|
30
31
|
_waveParams;
|
|
31
32
|
_numWaves;
|
|
33
|
+
_rand;
|
|
34
|
+
_foamParams;
|
|
32
35
|
/**
|
|
33
36
|
* Creates a new Gerstner wave generator.
|
|
34
|
-
*/ constructor(){
|
|
37
|
+
*/ constructor(randomSeed = 0){
|
|
35
38
|
super();
|
|
36
39
|
this._waveParams = new Float32Array(8 * MAX_GERSTNER_WAVE_COUNT);
|
|
40
|
+
this._rand = new PRNG(randomSeed);
|
|
37
41
|
this.randomWave(0);
|
|
38
42
|
this.randomWave(1);
|
|
39
43
|
this.randomWave(2);
|
|
40
44
|
this.randomWave(3);
|
|
41
45
|
this._numWaves = 4;
|
|
42
46
|
this._version = 0;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
// Same defaults as the FFT generator.
|
|
48
|
+
this._foamParams = new Float32Array([
|
|
49
|
+
1.2,
|
|
50
|
+
7.2
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
/** @internal */ static randomWaveData(rand, array, offset) {
|
|
54
|
+
array[offset + 0] = rand.get() * Math.PI * 2;
|
|
55
|
+
array[offset + 1] = rand.get() * 0.5 + 0.5;
|
|
56
|
+
array[offset + 2] = rand.get() * 0.1;
|
|
57
|
+
array[offset + 3] = rand.get() * 10;
|
|
58
|
+
array[offset + 4] = rand.get() * 100 - 50;
|
|
50
59
|
array[offset + 5] = 0;
|
|
51
|
-
array[offset + 6] =
|
|
60
|
+
array[offset + 6] = rand.get() * 100 - 50;
|
|
52
61
|
array[offset + 7] = 0;
|
|
53
62
|
}
|
|
54
63
|
/** @internal */ setRaw(data, index) {
|
|
@@ -58,8 +67,12 @@ import '../utility/blueprint/material/texture.js';
|
|
|
58
67
|
const other = new GerstnerWaveGenerator();
|
|
59
68
|
other.numWaves = this.numWaves;
|
|
60
69
|
other._waveParams.set(this._waveParams);
|
|
70
|
+
other._foamParams.set(this._foamParams);
|
|
61
71
|
return other;
|
|
62
72
|
}
|
|
73
|
+
get rand() {
|
|
74
|
+
return this._rand;
|
|
75
|
+
}
|
|
63
76
|
get version() {
|
|
64
77
|
return this._version;
|
|
65
78
|
}
|
|
@@ -80,20 +93,33 @@ import '../utility/blueprint/material/texture.js';
|
|
|
80
93
|
}
|
|
81
94
|
}
|
|
82
95
|
/** Delete wave at index */ deleteWave(index) {
|
|
96
|
+
if (index < 0 || index >= this._numWaves) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
83
99
|
for(let i = index; i < this._numWaves - 1; i++){
|
|
84
100
|
for(let j = 0; j < 8; j++){
|
|
85
101
|
this._waveParams[i * 8 + j] = this._waveParams[(i + 1) * 8 + j];
|
|
86
102
|
}
|
|
87
103
|
}
|
|
88
104
|
this._numWaves--;
|
|
105
|
+
this._version++;
|
|
89
106
|
}
|
|
90
|
-
/**
|
|
91
|
-
|
|
107
|
+
/** Insert a wave slot at index, shifting the subsequent waves up */ insertWave(index) {
|
|
108
|
+
// Bounded by the parameter buffer; the shader reads this many slots.
|
|
109
|
+
if (this._numWaves >= MAX_GERSTNER_WAVE_COUNT) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
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.
|
|
115
|
+
for(let i = this._numWaves - 1; i >= index; i--){
|
|
92
116
|
for(let j = 0; j < 8; j++){
|
|
93
117
|
this._waveParams[(i + 1) * 8 + j] = this._waveParams[i * 8 + j];
|
|
94
118
|
}
|
|
95
119
|
}
|
|
120
|
+
this.randomWave(index);
|
|
96
121
|
this._numWaves++;
|
|
122
|
+
this._version++;
|
|
97
123
|
}
|
|
98
124
|
/**
|
|
99
125
|
* Sets the angle of the wave direction in radians.
|
|
@@ -180,6 +206,24 @@ import '../utility/blueprint/material/texture.js';
|
|
|
180
206
|
this._version++;
|
|
181
207
|
}
|
|
182
208
|
}
|
|
209
|
+
/** Gets the foam width. */ get foamWidth() {
|
|
210
|
+
return this._foamParams[0];
|
|
211
|
+
}
|
|
212
|
+
set foamWidth(val) {
|
|
213
|
+
if (val !== this._foamParams[0]) {
|
|
214
|
+
this._foamParams[0] = val;
|
|
215
|
+
this._version++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/** Gets the foam contrast. */ get foamContrast() {
|
|
219
|
+
return this._foamParams[1];
|
|
220
|
+
}
|
|
221
|
+
set foamContrast(val) {
|
|
222
|
+
if (val !== this._foamParams[1]) {
|
|
223
|
+
this._foamParams[1] = val;
|
|
224
|
+
this._version++;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
183
227
|
/**
|
|
184
228
|
* Gets the X coordinate of the wave origin if it is an omni-directional wave.
|
|
185
229
|
* @param waveIndex - index of the wave to set.
|
|
@@ -207,7 +251,7 @@ import '../utility/blueprint/material/texture.js';
|
|
|
207
251
|
}
|
|
208
252
|
}
|
|
209
253
|
/** @internal */ randomWave(i) {
|
|
210
|
-
GerstnerWaveGenerator.randomWaveData(this._waveParams, i * 8);
|
|
254
|
+
GerstnerWaveGenerator.randomWaveData(this._rand, this._waveParams, i * 8);
|
|
211
255
|
}
|
|
212
256
|
/** {@inheritDoc WaveGenerator.update} */ update() {}
|
|
213
257
|
/** {@inheritDoc WaveGenerator.needUpdate} */ needUpdate() {
|
|
@@ -224,7 +268,7 @@ import '../utility/blueprint/material/texture.js';
|
|
|
224
268
|
outAABB.minPoint.setXYZ(minX, y, minZ);
|
|
225
269
|
outAABB.maxPoint.setXYZ(maxX, y + maxHeight, maxZ);
|
|
226
270
|
}
|
|
227
|
-
/** {@inheritDoc WaveGenerator.calcFragmentNormal} */ calcFragmentNormal(scope, xz) {
|
|
271
|
+
/** {@inheritDoc WaveGenerator.calcFragmentNormal} */ calcFragmentNormal(scope, xz, _vertexNormal) {
|
|
228
272
|
const pb = scope.$builder;
|
|
229
273
|
const that = this;
|
|
230
274
|
pb.func('calcFragmentNormal', [
|
|
@@ -238,21 +282,56 @@ import '../utility/blueprint/material/texture.js';
|
|
|
238
282
|
});
|
|
239
283
|
return scope.calcFragmentNormal(xz);
|
|
240
284
|
}
|
|
241
|
-
/** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */ calcFragmentNormalAndFoam(scope, xz) {
|
|
242
|
-
|
|
285
|
+
/** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */ calcFragmentNormalAndFoam(scope, xz, _vertexNormal) {
|
|
286
|
+
const pb = scope.$builder;
|
|
287
|
+
const that = this;
|
|
288
|
+
pb.func('calcNormalAndFoam', [
|
|
289
|
+
pb.vec2('xz')
|
|
290
|
+
], function() {
|
|
291
|
+
this.$l.inPos = pb.vec3(this.xz.x, 0, this.xz.y);
|
|
292
|
+
this.$l.outPos = pb.vec3();
|
|
293
|
+
this.$l.outNormal = pb.vec3(0);
|
|
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).
|
|
296
|
+
this.$l.dxdx = pb.float(0);
|
|
297
|
+
this.$l.dzdz = pb.float(0);
|
|
298
|
+
this.$l.dxdz = pb.float(0);
|
|
299
|
+
this.$for(pb.float('i'), 0, this.numWaves, function() {
|
|
300
|
+
this.$l.waveNormal = pb.vec3();
|
|
301
|
+
this.$l.waveDxdx = pb.float();
|
|
302
|
+
this.$l.waveDzdz = pb.float();
|
|
303
|
+
this.$l.waveDxdz = pb.float();
|
|
304
|
+
this.$l.wavePos = that.gerstnerWave(this, this.waveParams.at(pb.mul(this.i, 2)), this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)), this.inPos, this.waveNormal, this.waveDxdx, this.waveDzdz, this.waveDxdz);
|
|
305
|
+
this.outPos = pb.add(this.outPos, this.wavePos);
|
|
306
|
+
this.outNormal = pb.add(this.outNormal, this.waveNormal);
|
|
307
|
+
this.dxdx = pb.add(this.dxdx, this.waveDxdx);
|
|
308
|
+
this.dzdz = pb.add(this.dzdz, this.waveDzdz);
|
|
309
|
+
this.dxdz = pb.add(this.dxdz, this.waveDxdz);
|
|
310
|
+
});
|
|
311
|
+
// Jacobian determinant of the horizontal displacement, det(I + J); below
|
|
312
|
+
// the foamParams.x threshold the surface folds and foam ramps in.
|
|
313
|
+
this.$l.val = pb.sub(pb.mul(pb.add(1, this.dxdx), pb.add(1, this.dzdz)), pb.mul(this.dxdz, this.dxdz));
|
|
314
|
+
this.$l.foam = pb.abs(pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y));
|
|
315
|
+
this.$return(pb.vec4(this.outNormal, this.foam));
|
|
316
|
+
});
|
|
317
|
+
return scope.calcNormalAndFoam(xz);
|
|
243
318
|
}
|
|
244
319
|
/** {@inheritDoc WaveGenerator.setupUniforms} */ setupUniforms(scope, uniformGroup) {
|
|
245
320
|
const pb = scope.$builder;
|
|
246
321
|
scope.numWaves = pb.float().uniform(uniformGroup);
|
|
247
322
|
scope.waveParams = pb.vec4[MAX_GERSTNER_WAVE_COUNT * 2]().uniform(uniformGroup);
|
|
323
|
+
scope.foamParams = pb.vec2().uniform(uniformGroup);
|
|
248
324
|
}
|
|
249
|
-
/** @internal */ gerstnerWave(scope, waveParam, omniParam, inPos, outNormal) {
|
|
325
|
+
/** @internal */ gerstnerWave(scope, waveParam, omniParam, inPos, outNormal, outDxdx, outDzdz, outDxdz) {
|
|
250
326
|
const pb = scope.$builder;
|
|
251
327
|
pb.func('gerstnerWave', [
|
|
252
328
|
pb.vec4('waveParam'),
|
|
253
329
|
pb.vec4('omniParam'),
|
|
254
330
|
pb.vec3('inPos'),
|
|
255
|
-
pb.vec3('outNormal').out()
|
|
331
|
+
pb.vec3('outNormal').out(),
|
|
332
|
+
pb.float('outDxdx').out(),
|
|
333
|
+
pb.float('outDzdz').out(),
|
|
334
|
+
pb.float('outDxdz').out()
|
|
256
335
|
], function() {
|
|
257
336
|
this.$l.amplitude = pb.max(this.waveParam.z, 0.01);
|
|
258
337
|
this.$l.wavelength = this.waveParam.w;
|
|
@@ -276,9 +355,16 @@ import '../utility/blueprint/material/texture.js';
|
|
|
276
355
|
this.$l.wa = pb.mul(this.w, this.amplitude);
|
|
277
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)));
|
|
278
357
|
this.outNormal = pb.div(this.n.xzy, this.numWaves);
|
|
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.
|
|
361
|
+
this.$l.jac = pb.neg(pb.mul(this.qi, this.wa, this.sinCalc));
|
|
362
|
+
this.outDxdx = pb.mul(this.jac, this.windDir.x, this.windDir.x);
|
|
363
|
+
this.outDzdz = pb.mul(this.jac, this.windDir.y, this.windDir.y);
|
|
364
|
+
this.outDxdz = pb.mul(this.jac, this.windDir.x, this.windDir.y);
|
|
279
365
|
this.$return(pb.mul(this.wave, pb.clamp(pb.mul(this.amplitude, 10000), 0, 1)));
|
|
280
366
|
});
|
|
281
|
-
return scope.gerstnerWave(waveParam, omniParam, inPos, outNormal);
|
|
367
|
+
return scope.gerstnerWave(waveParam, omniParam, inPos, outNormal, outDxdx, outDzdz, outDxdz);
|
|
282
368
|
}
|
|
283
369
|
/** @internal */ calcNormalAndPos(scope, inPos, outPos, outNormal) {
|
|
284
370
|
const pb = scope.$builder;
|
|
@@ -290,14 +376,12 @@ import '../utility/blueprint/material/texture.js';
|
|
|
290
376
|
], function() {
|
|
291
377
|
this.outPos = this.inPos;
|
|
292
378
|
this.outNormal = pb.vec3(0);
|
|
293
|
-
this.$for(pb.float('i'), 0,
|
|
294
|
-
if (pb.getDevice().type === 'webgl') {
|
|
295
|
-
this.$if(pb.greaterThanEqual(this.i, this.numWaves), function() {
|
|
296
|
-
this.$break();
|
|
297
|
-
});
|
|
298
|
-
}
|
|
379
|
+
this.$for(pb.float('i'), 0, this.numWaves, function() {
|
|
299
380
|
this.$l.waveNormal = pb.vec3();
|
|
300
|
-
this.$l.
|
|
381
|
+
this.$l.waveDxdx = pb.float();
|
|
382
|
+
this.$l.waveDzdz = pb.float();
|
|
383
|
+
this.$l.waveDxdz = pb.float();
|
|
384
|
+
this.$l.wavePos = that.gerstnerWave(this, this.waveParams.at(pb.mul(this.i, 2)), this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)), this.inPos, this.waveNormal, this.waveDxdx, this.waveDzdz, this.waveDxdz);
|
|
301
385
|
this.outPos = pb.add(this.outPos, this.wavePos);
|
|
302
386
|
this.outNormal = pb.add(this.outNormal, this.waveNormal);
|
|
303
387
|
});
|
|
@@ -310,6 +394,7 @@ import '../utility/blueprint/material/texture.js';
|
|
|
310
394
|
/** {@inheritDoc WaveGenerator.applyWaterBindGroup} */ applyWaterBindGroup(bindGroup) {
|
|
311
395
|
bindGroup.setValue('numWaves', this._numWaves);
|
|
312
396
|
bindGroup.setValue('waveParams', this._waveParams);
|
|
397
|
+
bindGroup.setValue('foamParams', this._foamParams);
|
|
313
398
|
}
|
|
314
399
|
/** {@inheritDoc WaveGenerator.isOk} */ isOk() {
|
|
315
400
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gerstner_wavegenerator.js","sources":["../../src/render/gerstner_wavegenerator.ts"],"sourcesContent":["import { Disposable, 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 /**\r\n * Creates a new Gerstner wave generator.\r\n */\r\n constructor() {\r\n super();\r\n this._waveParams = new Float32Array(8 * MAX_GERSTNER_WAVE_COUNT);\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 }\r\n /** @internal */\r\n static randomWaveData(array: Float32Array, offset: number) {\r\n array[offset + 0] = Math.random() * Math.PI * 2;\r\n array[offset + 1] = Math.random() * 0.5 + 0.5;\r\n array[offset + 2] = Math.random() * 0.1;\r\n array[offset + 3] = Math.random() * 10;\r\n array[offset + 4] = Math.random() * 100 - 50;\r\n array[offset + 5] = 0;\r\n array[offset + 6] = Math.random() * 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 return other as this;\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 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 }\r\n /** Delete wave at index */\r\n insertWave(index: number) {\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 + 1) * 8 + j] = this._waveParams[i * 8 + j];\r\n }\r\n }\r\n this._numWaves++;\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 /**\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._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) {\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) {\r\n return scope.$builder.vec4(this.calcFragmentNormal(scope, xz), 0);\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 }\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 ) {\r\n const pb = scope.$builder;\r\n pb.func(\r\n 'gerstnerWave',\r\n [pb.vec4('waveParam'), pb.vec4('omniParam'), pb.vec3('inPos'), pb.vec3('outNormal').out()],\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 this.$return(pb.mul(this.wave, pb.clamp(pb.mul(this.amplitude, 10000), 0, 1)));\r\n }\r\n );\r\n return scope.gerstnerWave(waveParam, omniParam, inPos, outNormal) 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.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 );\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 }\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","Float32Array","MAX_GERSTNER_WAVE_COUNT","randomWave","randomWaveData","array","offset","Math","random","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","getOriginX","getOriginZ","setOrigin","x","z","update","needUpdate","calcClipmapTileAABB","minX","maxX","minZ","maxZ","y","outAABB","maxHeight","h","minPoint","setXYZ","maxPoint","calcFragmentNormal","scope","xz","pb","$builder","that","func","vec2","$l","inPos","vec3","outPos","outNormal","calcNormalAndPos","$return","calcFragmentNormalAndFoam","vec4","setupUniforms","uniformGroup","float","uniform","waveParams","gerstnerWave","waveParam","omniParam","out","amplitude","max","wavelength","w","omniPos","omni","direction","sin","cos","div","wSpeed","sqrt","mul","peak","qi","dirWaveInput","sub","omniWaveInput","windDir","normalize","add","dir","dot","calc","ShaderHelper","getElapsedTime","cosCalc","sinCalc","waveXZ","xy","waveY","wave","wa","n","neg","xzy","clamp","$for","getDevice","type","$if","greaterThanEqual","$break","waveNormal","wavePos","at","calcPositionAndNormal","calcVertexPositionAndNormal","applyWaterBindGroup","bindGroup","setValue","isOk","getHash"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;IAIO,MAAMA,qBAA8BC,SAAAA,UAAAA,CAAAA;IACjCC,QAAiB;IACjBC,WAAuC;IACvCC,SAAkB;AAC1B;;AAEC,MACD,WAAc,EAAA;QACZ,KAAK,EAAA;AACL,QAAA,IAAI,CAACD,WAAW,GAAG,IAAIE,aAAa,CAAIC,GAAAA,uBAAAA,CAAAA;QACxC,IAAI,CAACC,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,CAACH,SAAS,GAAG,CAAA;QACjB,IAAI,CAACF,QAAQ,GAAG,CAAA;AAClB;AACA,qBACA,OAAOM,cAAAA,CAAeC,KAAmB,EAAEC,MAAc,EAAE;QACzDD,KAAK,CAACC,SAAS,CAAE,CAAA,GAAGC,KAAKC,MAAM,EAAA,GAAKD,IAAKE,CAAAA,EAAE,GAAG,CAAA;AAC9CJ,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGC,IAAKC,CAAAA,MAAM,KAAK,GAAM,GAAA,GAAA;AAC1CH,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGC,IAAAA,CAAKC,MAAM,EAAK,GAAA,GAAA;AACpCH,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGC,IAAAA,CAAKC,MAAM,EAAK,GAAA,EAAA;AACpCH,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGC,IAAKC,CAAAA,MAAM,KAAK,GAAM,GAAA,EAAA;QAC1CH,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAG,CAAA;AACpBD,QAAAA,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAGC,IAAKC,CAAAA,MAAM,KAAK,GAAM,GAAA,EAAA;QAC1CH,KAAK,CAACC,MAAS,GAAA,CAAA,CAAE,GAAG,CAAA;AACtB;AACA,qBACAI,MAAAA,CAAOC,IAAkB,EAAEC,KAAa,EAAE;AACxC,QAAA,IAAI,CAACb,WAAW,CAACc,GAAG,CAACF,MAAMC,KAAQ,GAAA,CAAA,CAAA;AACrC;IACAE,KAAQ,GAAA;AACN,QAAA,MAAMC,QAAQ,IAAInB,qBAAAA,EAAAA;AAClBmB,QAAAA,KAAAA,CAAMC,QAAQ,GAAG,IAAI,CAACA,QAAQ;AAC9BD,QAAAA,KAAAA,CAAMhB,WAAW,CAACc,GAAG,CAAC,IAAI,CAACd,WAAW,CAAA;QACtC,OAAOgB,KAAAA;AACT;AACA,IAAA,IAAIE,OAAU,GAAA;QACZ,OAAO,IAAI,CAACnB,QAAQ;AACtB;qCAEA,IAAIkB,QAAW,GAAA;QACb,OAAO,IAAI,CAAChB,SAAS;AACvB;IACA,IAAIgB,QAAAA,CAASE,GAAG,EAAE;QAChB,IAAI,CAACC,OAAOC,SAAS,CAACF,QAAQA,GAAO,IAAA,CAAA,IAAKA,MAAMhB,uBAAyB,EAAA;AACvEmB,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,qBAAqB,EAAEJ,GAAK,CAAA,CAAA,CAAA;AAC3C,YAAA;AACF;AACA,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAAClB,SAAS,EAAE;YAC1B,IAAK,IAAIuB,IAAI,IAAI,CAACvB,SAAS,EAAEuB,CAAAA,GAAIL,KAAKK,CAAK,EAAA,CAAA;gBACzC,IAAI,CAACpB,UAAU,CAACoB,CAAAA,CAAAA;AAClB;YACA,IAAI,CAACvB,SAAS,GAAGkB,GAAAA;AACjB,YAAA,IAAI,CAACpB,QAAQ,EAAA;AACf;AACF;gCAEA0B,UAAWZ,CAAAA,KAAa,EAAE;QACxB,IAAK,IAAIW,IAAIX,KAAOW,EAAAA,CAAAA,GAAI,IAAI,CAACvB,SAAS,GAAG,CAAA,EAAGuB,CAAK,EAAA,CAAA;AAC/C,YAAA,IAAK,IAAIE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,IAAI,CAAC1B,WAAW,CAACwB,CAAI,GAAA,CAAA,GAAIE,EAAE,GAAG,IAAI,CAAC1B,WAAW,CAAC,CAACwB,IAAI,CAAA,IAAK,IAAIE,CAAE,CAAA;AACjE;AACF;AACA,QAAA,IAAI,CAACzB,SAAS,EAAA;AAChB;gCAEA0B,UAAWd,CAAAA,KAAa,EAAE;QACxB,IAAK,IAAIW,IAAIX,KAAOW,EAAAA,CAAAA,GAAI,IAAI,CAACvB,SAAS,GAAG,CAAA,EAAGuB,CAAK,EAAA,CAAA;AAC/C,YAAA,IAAK,IAAIE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,IAAI,CAAC1B,WAAW,CAAC,CAACwB,IAAI,CAAA,IAAK,CAAIE,GAAAA,CAAAA,CAAE,GAAG,IAAI,CAAC1B,WAAW,CAACwB,CAAAA,GAAI,IAAIE,CAAE,CAAA;AACjE;AACF;AACA,QAAA,IAAI,CAACzB,SAAS,EAAA;AAChB;AACA;;;;AAIC,MACD2B,gBAAiBC,CAAAA,SAAiB,EAAEC,KAAa,EAAE;AACjD,QAAA,IAAID,YAAY1B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACH,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGC,KAAAA;AACtC,YAAA,IAAI,CAAC/B,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAgC,gBAAAA,CAAiBF,SAAiB,EAAE;QAClC,OAAOA,SAAAA,GAAY1B,0BAA0B,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;AAIC,MACDG,gBAAiBH,CAAAA,SAAiB,EAAEI,SAAiB,EAAE;AACrD,QAAA,IAAIJ,YAAY1B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACH,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGI,SAAAA;AACtC,YAAA,IAAI,CAAClC,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAmC,gBAAAA,CAAiBL,SAAiB,EAAE;QAClC,OAAOA,SAAAA,GAAY1B,0BAA0B,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;AAIC,MACDM,gBAAiBN,CAAAA,SAAiB,EAAEV,GAAW,EAAE;AAC/C,QAAA,IAAIU,YAAY1B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACH,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGV,GAAAA;AACtC,YAAA,IAAI,CAACpB,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAqC,gBAAAA,CAAiBP,SAAiB,EAAE;QAClC,OAAOA,SAAAA,GAAY1B,0BAA0B,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;AAIC,MACDQ,aAAcR,CAAAA,SAAiB,EAAEV,GAAW,EAAE;AAC5C,QAAA,IAAIU,YAAY1B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACH,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGV,GAAAA;AACtC,YAAA,IAAI,CAACpB,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKAuC,aAAAA,CAAcT,SAAiB,EAAE;QAC/B,OAAOA,SAAAA,GAAY1B,0BAA0B,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;MAKAU,UAAAA,CAAWV,SAAiB,EAAE;QAC5B,OAAOA,SAAAA,GAAY1B,uBAA0B,GAAA,IAAI,CAACH,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,CAAE,CAAA,KAAK,CAAI,GAAA,KAAA;AAC3F;AACA;;;;AAIC,MACDW,WAAYX,CAAAA,SAAiB,EAAEY,MAAe,EAAE;AAC9C,QAAA,IAAIZ,YAAY1B,uBAAyB,EAAA;YACvC,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,IAAI,CAAE,CAAA,GAAGY,SAAS,CAAI,GAAA,CAAA;AACnD,YAAA,IAAI,CAAC1C,QAAQ,EAAA;AACf;AACF;AACA;;;;MAKA2C,UAAAA,CAAWb,SAAiB,EAAE;QAC5B,OAAOA,SAAAA,GAAY1B,0BAA0B,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;MAKAc,UAAAA,CAAWd,SAAiB,EAAE;QAC5B,OAAOA,SAAAA,GAAY1B,0BAA0B,IAAI,CAACH,WAAW,CAAC6B,SAAAA,GAAY,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACrF;AACA;;;;;AAKC,MACDe,UAAUf,SAAiB,EAAEgB,CAAS,EAAEC,CAAS,EAAE;AACjD,QAAA,IAAIjB,YAAY1B,uBAAyB,EAAA;AACvC,YAAA,IAAI,CAACH,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGgB,CAAAA;AACtC,YAAA,IAAI,CAAC7C,WAAW,CAAC6B,SAAY,GAAA,CAAA,GAAI,EAAE,GAAGiB,CAAAA;AACtC,YAAA,IAAI,CAAC/C,QAAQ,EAAA;AACf;AACF;qBAEAK,UAAWoB,CAAAA,CAAS,EAAE;AACpB3B,QAAAA,qBAAAA,CAAsBQ,cAAc,CAAC,IAAI,CAACL,WAAW,EAAEwB,CAAI,GAAA,CAAA,CAAA;AAC7D;8CAEAuB,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,IAAIhC,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAACvB,SAAS,EAAEuB,CAAK,EAAA,CAAA;AACvC,YAAA,MAAMiC,IAAI,IAAI,CAACzD,WAAW,CAACwB,CAAAA,GAAI,IAAI,CAAE,CAAA;AACrC,YAAA,IAAIiC,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,kBAAAA,CAAmBC,KAA4B,EAAEC,EAAe,EAAE;QAChE,MAAMC,EAAAA,GAAKF,MAAMG,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,CAACR,EAAE,CAAClB,CAAC,EAAE,CAAA,EAAG,IAAI,CAACkB,EAAE,CAACT,CAAC,CAAA;AAC/C,YAAA,IAAI,CAACe,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,OAAOX,KAAAA,CAAMD,kBAAkB,CAACE,EAAAA,CAAAA;AAClC;AACA,iEACAa,yBAAAA,CAA0Bd,KAA4B,EAAEC,EAAe,EAAE;QACvE,OAAOD,KAAAA,CAAMG,QAAQ,CAACY,IAAI,CAAC,IAAI,CAAChB,kBAAkB,CAACC,KAAAA,EAAOC,EAAK,CAAA,EAAA,CAAA,CAAA;AACjE;AACA,qDACAe,aAAAA,CAAchB,KAAoB,EAAEiB,YAAoB,EAAE;QACxD,MAAMf,EAAAA,GAAKF,MAAMG,QAAQ;AACzBH,QAAAA,KAAAA,CAAM7C,QAAQ,GAAG+C,EAAAA,CAAGgB,KAAK,EAAA,CAAGC,OAAO,CAACF,YAAAA,CAAAA;QACpCjB,KAAMoB,CAAAA,UAAU,GAAGlB,EAAGa,CAAAA,IAAI,CAAC1E,uBAA0B,GAAA,CAAA,CAAE,EAAG8E,CAAAA,OAAO,CAACF,YAAAA,CAAAA;AACpE;AACA,qBACQI,YACNrB,CAAAA,KAA4B,EAC5BsB,SAAsB,EACtBC,SAAsB,EACtBf,KAAkB,EAClBG,SAAsB,EACtB;QACA,MAAMT,EAAAA,GAAKF,MAAMG,QAAQ;QACzBD,EAAGG,CAAAA,IAAI,CACL,cACA,EAAA;AAACH,YAAAA,EAAAA,CAAGa,IAAI,CAAC,WAAA,CAAA;AAAcb,YAAAA,EAAAA,CAAGa,IAAI,CAAC,WAAA,CAAA;AAAcb,YAAAA,EAAAA,CAAGO,IAAI,CAAC,OAAA,CAAA;YAAUP,EAAGO,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAae,GAAG;SAAG,EAC1F,WAAA;AACE,YAAA,IAAI,CAACjB,EAAE,CAACkB,SAAS,GAAGvB,EAAAA,CAAGwB,GAAG,CAAC,IAAI,CAACJ,SAAS,CAACtC,CAAC,EAAE,IAAA,CAAA;YAC7C,IAAI,CAACuB,EAAE,CAACoB,UAAU,GAAG,IAAI,CAACL,SAAS,CAACM,CAAC;YACrC,IAAI,CAACrB,EAAE,CAACsB,OAAO,GAAG,IAAI,CAACN,SAAS,CAACtB,EAAE;YACnC,IAAI,CAACM,EAAE,CAACuB,IAAI,GAAG,IAAI,CAACP,SAAS,CAACK,CAAC;YAC/B,IAAI,CAACrB,EAAE,CAACwB,SAAS,GAAG7B,GAAGI,IAAI,CAACJ,EAAG8B,CAAAA,GAAG,CAAC,IAAI,CAACV,SAAS,CAACvC,CAAC,CAAA,EAAGmB,EAAG+B,CAAAA,GAAG,CAAC,IAAI,CAACX,SAAS,CAACvC,CAAC,CAAA,CAAA;AAC7E,YAAA,IAAI,CAACwB,EAAE,CAACqB,CAAC,GAAG1B,EAAAA,CAAGwB,GAAG,CAAC,KAAA,EAAOxB,EAAGgC,CAAAA,GAAG,CAACxF,IAAKE,CAAAA,EAAE,GAAG,CAAG,EAAA,IAAI,CAAC+E,UAAU,CAAA,CAAA;AAC7D,YAAA,IAAI,CAACpB,EAAE,CAAC4B,MAAM,GAAGjC,EAAGkC,CAAAA,IAAI,CAAClC,EAAAA,CAAGmC,GAAG,CAAC,GAAK,EAAA,IAAI,CAACT,CAAC,CAAA,CAAA;YAC3C,IAAI,CAACrB,EAAE,CAAC+B,IAAI,GAAG,IAAI,CAAChB,SAAS,CAAC9B,CAAC;YAC/B,IAAI,CAACe,EAAE,CAACgC,EAAE,GAAGrC,GAAGgC,GAAG,CAAC,IAAI,CAACI,IAAI,EAAEpC,GAAGmC,GAAG,CAAC,IAAI,CAACZ,SAAS,EAAE,IAAI,CAACG,CAAC,EAAE,IAAI,CAACzE,QAAQ,CAAA,CAAA;AAC3E,YAAA,IAAI,CAACoD,EAAE,CAACiC,YAAY,GAAGtC,EAAAA,CAAGmC,GAAG,CAAC,IAAI,CAACN,SAAS,EAAE7B,EAAGuC,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAACX,IAAI,CAAA,CAAA;YACjE,IAAI,CAACvB,EAAE,CAACmC,aAAa,GAAGxC,EAAGmC,CAAAA,GAAG,CAACnC,EAAAA,CAAGuC,GAAG,CAAC,IAAI,CAACjC,KAAK,CAACP,EAAE,EAAE,IAAI,CAAC4B,OAAO,CAAA,EAAG,IAAI,CAACC,IAAI,CAAA;AAC7E,YAAA,IAAI,CAACvB,EAAE,CAACoC,OAAO,GAAGzC,GAAG0C,SAAS,CAAC1C,EAAG2C,CAAAA,GAAG,CAAC,IAAI,CAACL,YAAY,EAAE,IAAI,CAACE,aAAa,CAAA,CAAA;AAC3E,YAAA,IAAI,CAACnC,EAAE,CAACuC,GAAG,GAAG5C,EAAAA,CAAG6C,GAAG,CAAC,IAAI,CAACJ,OAAO,EAAEzC,GAAGuC,GAAG,CAAC,IAAI,CAACjC,KAAK,CAACP,EAAE,EAAEC,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACR,OAAO,EAAE,IAAI,CAACC,IAAI,CAAA,CAAA,CAAA;AACvF,YAAA,IAAI,CAACvB,EAAE,CAACyC,IAAI,GAAG9C,EAAAA,CAAGuC,GAAG,CACnBvC,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACS,GAAG,EAAE,IAAI,CAAClB,CAAC,CACvB1B,EAAAA,EAAAA,CAAGmC,GAAG,CAAC,IAAI,CAACF,MAAM,EAAEc,YAAaC,CAAAA,cAAc,CAAC,IAAI,CAAA,CAAA,CAAA;YAEtD,IAAI,CAAC3C,EAAE,CAAC4C,OAAO,GAAGjD,GAAG+B,GAAG,CAAC,IAAI,CAACe,IAAI,CAAA;YAClC,IAAI,CAACzC,EAAE,CAAC6C,OAAO,GAAGlD,GAAG8B,GAAG,CAAC,IAAI,CAACgB,IAAI,CAAA;YAClC,IAAI,CAACzC,EAAE,CAAC8C,MAAM,GAAGnD,GAAGmC,GAAG,CAAC,IAAI,CAACM,OAAO,CAACW,EAAE,EAAE,IAAI,CAACf,EAAE,EAAE,IAAI,CAACd,SAAS,EAAE,IAAI,CAAC0B,OAAO,CAAA;YAC9E,IAAI,CAAC5C,EAAE,CAACgD,KAAK,GAAGrD,EAAGgC,CAAAA,GAAG,CAAChC,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACe,OAAO,EAAE,IAAI,CAAC3B,SAAS,CAAA,EAAG,IAAI,CAACtE,QAAQ,CAAA;YAC1E,IAAI,CAACoD,EAAE,CAACiD,IAAI,GAAGtD,EAAGO,CAAAA,IAAI,CAAC,IAAI,CAAC4C,MAAM,CAACtE,CAAC,EAAE,IAAI,CAACwE,KAAK,EAAE,IAAI,CAACF,MAAM,CAAC7D,CAAC,CAAA;AAC/D,YAAA,IAAI,CAACe,EAAE,CAACkD,EAAE,GAAGvD,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,IAAI,CAACH,SAAS,CAAA;YAC1C,IAAI,CAAClB,EAAE,CAACmD,CAAC,GAAGxD,EAAGO,CAAAA,IAAI,CACjBP,EAAGyD,CAAAA,GAAG,CAACzD,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACM,OAAO,CAACW,EAAE,EAAE,IAAI,CAACG,EAAE,EAAE,IAAI,CAACN,OAAO,CAAA,CAAA,EACpDjD,GAAGuC,GAAG,CAAC,GAAGvC,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAACE,EAAE,EAAE,IAAI,CAACkB,EAAE,EAAE,IAAI,CAACL,OAAO,CAAA,CAAA,CAAA;AAEjD,YAAA,IAAI,CAACzC,SAAS,GAAGT,EAAAA,CAAGgC,GAAG,CAAC,IAAI,CAACwB,CAAC,CAACE,GAAG,EAAE,IAAI,CAACzG,QAAQ,CAAA;YACjD,IAAI,CAAC0D,OAAO,CAACX,EAAAA,CAAGmC,GAAG,CAAC,IAAI,CAACmB,IAAI,EAAEtD,GAAG2D,KAAK,CAAC3D,GAAGmC,GAAG,CAAC,IAAI,CAACZ,SAAS,EAAE,KAAA,CAAA,EAAQ,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5E,SAAA,CAAA;AAEF,QAAA,OAAOzB,KAAMqB,CAAAA,YAAY,CAACC,SAAAA,EAAWC,WAAWf,KAAOG,EAAAA,SAAAA,CAAAA;AACzD;qBAEA,gBAAQC,CACNZ,KAA4B,EAC5BQ,KAAkB,EAClBE,MAAmB,EACnBC,SAAsB,EACtB;QACA,MAAMT,EAAAA,GAAKF,MAAMG,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,CAAUe,GAAG,EAAA;YAAItB,EAAGO,CAAAA,IAAI,CAAC,WAAA,CAAA,CAAae,GAAG;SAAG,EACvE,WAAA;AACE,YAAA,IAAI,CAACd,MAAM,GAAG,IAAI,CAACF,KAAK;AACxB,YAAA,IAAI,CAACG,SAAS,GAAGT,EAAAA,CAAGO,IAAI,CAAC,CAAA,CAAA;AACzB,YAAA,IAAI,CAACqD,IAAI,CACP5D,GAAGgB,KAAK,CAAC,MACT,CACAhB,EAAAA,EAAAA,CAAG6D,SAAS,EAAA,CAAGC,IAAI,KAAK,OAAA,GAAU3H,0BAA0B,IAAI,CAACc,QAAQ,EACzE,WAAA;AACE,gBAAA,IAAI+C,EAAG6D,CAAAA,SAAS,EAAGC,CAAAA,IAAI,KAAK,OAAS,EAAA;AACnC,oBAAA,IAAI,CAACC,GAAG,CAAC/D,EAAAA,CAAGgE,gBAAgB,CAAC,IAAI,CAACxG,CAAC,EAAE,IAAI,CAACP,QAAQ,CAAG,EAAA,WAAA;AACnD,wBAAA,IAAI,CAACgH,MAAM,EAAA;AACb,qBAAA,CAAA;AACF;AACA,gBAAA,IAAI,CAAC5D,EAAE,CAAC6D,UAAU,GAAGlE,GAAGO,IAAI,EAAA;gBAC5B,IAAI,CAACF,EAAE,CAAC8D,OAAO,GAAGjE,IAAKiB,CAAAA,YAAY,CACjC,IAAI,EACJ,IAAI,CAACD,UAAU,CAACkD,EAAE,CAACpE,EAAAA,CAAGmC,GAAG,CAAC,IAAI,CAAC3E,CAAC,EAAE,CAAA,CAAA,CAAA,EAClC,IAAI,CAAC0D,UAAU,CAACkD,EAAE,CAACpE,GAAG2C,GAAG,CAAC3C,EAAGmC,CAAAA,GAAG,CAAC,IAAI,CAAC3E,CAAC,EAAE,IAAI,CAC7C,CAAA,CAAA,EAAA,IAAI,CAAC8C,KAAK,EACV,IAAI,CAAC4D,UAAU,CAAA;AAEjB,gBAAA,IAAI,CAAC1D,MAAM,GAAGR,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAACnC,MAAM,EAAE,IAAI,CAAC2D,OAAO,CAAA;AAC9C,gBAAA,IAAI,CAAC1D,SAAS,GAAGT,EAAAA,CAAG2C,GAAG,CAAC,IAAI,CAAClC,SAAS,EAAE,IAAI,CAACyD,UAAU,CAAA;AACzD,aAAA,CAAA;AAEJ,SAAA,CAAA;QAEFpE,KAAMuE,CAAAA,qBAAqB,CAAC/D,KAAAA,EAAOE,MAAQC,EAAAA,SAAAA,CAAAA;AAC7C;mEAEA6D,4BACExE,KAA4B,EAC5BQ,KAAkB,EAClBE,MAAmB,EACnBC,SAAsB,EACtB;AACA,QAAA,IAAI,CAACC,gBAAgB,CAACZ,KAAAA,EAAOQ,OAAOE,MAAQC,EAAAA,SAAAA,CAAAA;AAC9C;2DAEA8D,mBAAoBC,CAAAA,SAAoB,EAAE;AACxCA,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,UAAY,EAAA,IAAI,CAACxI,SAAS,CAAA;AAC7CuI,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,YAAc,EAAA,IAAI,CAACzI,WAAW,CAAA;AACnD;AACA,4CACA0I,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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"}
|