@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"water.js","sources":["../../src/shaders/water.ts"],"sourcesContent":["// copy from: https://github.com/codeagent/webgl-ocean/\r\n\r\nimport type {\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { WaveGenerator } from '../render/wavegenerator';\r\nimport { getDevice } from '../app/api';\r\n\r\nfunction getFragCoord(scope: PBGlobalScope, useComputeShader: boolean) {\r\n return useComputeShader ? scope.$builtins.globalInvocationId.xy : scope.$builtins.fragCoord.xy;\r\n}\r\n\r\n/** @internal */\r\nexport type WaterVertexFunc = (\r\n this: WaterShaderImpl,\r\n scope: PBInsideFunctionScope,\r\n pos: PBShaderExp,\r\n xz: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n) => void;\r\n\r\n/** @internal */\r\nexport type WaterShadingFunc = (\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp,\r\n discardable: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n) => PBShaderExp;\r\n\r\n/** @internal */\r\nexport type WaterSetupUniformFunc = (this: WaterShaderImpl, scope: PBGlobalScope) => void;\r\n\r\n/** @internal */\r\nexport class WaterShaderImpl {\r\n private readonly _vertexFunc: WaterVertexFunc;\r\n private readonly _shadingFunc: WaterShadingFunc;\r\n private readonly _setupUniformsFunc: WaterSetupUniformFunc;\r\n constructor(\r\n setupUniformsFunc: WaterSetupUniformFunc,\r\n vertexFunc: WaterVertexFunc,\r\n shadingFunc: WaterShadingFunc\r\n ) {\r\n this._vertexFunc = vertexFunc;\r\n this._shadingFunc = shadingFunc;\r\n this._setupUniformsFunc = setupUniformsFunc;\r\n }\r\n setupUniforms(scope: PBGlobalScope) {\r\n this._setupUniformsFunc?.call(this, scope);\r\n }\r\n vertex(scope: PBInsideFunctionScope, pos: PBShaderExp, xz: PBShaderExp, waveGenerator: WaveGenerator) {\r\n this._vertexFunc?.call(this, scope, pos, xz, waveGenerator);\r\n }\r\n getVertexNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, useComputeShader: boolean) {\r\n const pb = scope.$builder;\r\n pb.func('getVertexNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n this.$return(this.normal);\r\n });\r\n return scope.getVertexNormal(xz) as PBShaderExp;\r\n }\r\n shading(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp,\r\n discardable: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n ) {\r\n return this._shadingFunc?.call(\r\n this,\r\n scope,\r\n worldPos,\r\n worldNormal,\r\n foamFactor,\r\n discardable,\r\n waveGenerator\r\n );\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramOcean(waveGenerator: WaveGenerator, shadingImpl: WaterShaderImpl) {\r\n const program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n this.$outputs.outPos = pb.vec3();\r\n this.$outputs.outNormal = pb.vec3();\r\n this.$outputs.outXZ = pb.vec2();\r\n this.flip = pb.int().uniform(0);\r\n this.viewProjMatrix = pb.mat4().uniform(0);\r\n this.worldMatrix = pb.mat4().uniform(1);\r\n this.level = pb.float().uniform(0);\r\n shadingImpl.setupUniforms(this);\r\n waveGenerator.setupUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.xz = pb.mul(this.worldMatrix, pb.vec4(this.$inputs.position, 1)).xy;\r\n /*\r\n this.$l.xz = pb.mul(\r\n pb.add(\r\n this.offset,\r\n pb.mul(pb.mul(this.modelMatrix, pb.vec4(this.$inputs.position, 1)).xy, this.scale)\r\n ),\r\n this.gridScale\r\n );\r\n */\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3();\r\n waveGenerator.calcVertexPositionAndNormal(\r\n this,\r\n pb.vec3(this.xz.x, this.level, this.xz.y),\r\n this.outPos,\r\n this.outNormal\r\n );\r\n this.$outputs.outPos = this.outPos;\r\n this.$outputs.outNormal = this.outNormal;\r\n this.$outputs.outXZ = this.xz;\r\n this.$builtins.position = pb.mul(this.viewProjMatrix, pb.vec4(this.$outputs.outPos, 1));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n shadingImpl.vertex(this, this.$outputs.outPos, this.$outputs.outXZ, waveGenerator);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.pos = pb.vec3().uniform(0);\r\n this.region = pb.vec4().uniform(0);\r\n shadingImpl.setupUniforms(this);\r\n waveGenerator.setupUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(this.$inputs.outXZ, this.region.xy)),\r\n pb.any(pb.greaterThan(this.$inputs.outXZ, this.region.zw))\r\n );\r\n this.$l.n = waveGenerator.calcFragmentNormalAndFoam(this, this.$inputs.outXZ, this.$inputs.outNormal);\r\n this.$outputs.outColor =\r\n shadingImpl.shading(\r\n this,\r\n this.$inputs.outPos,\r\n this.n.xyz,\r\n this.n.w,\r\n this.discardable,\r\n waveGenerator\r\n ) ?? pb.vec4(pb.add(pb.mul(this.n.xyz, 0.5), pb.vec3(0.5)), 1);\r\n });\r\n }\r\n })!;\r\n program.name = '@Ocean_Render';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramPostFFT2(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader: boolean, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.output =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n this.ifft = pb.tex2DArray().uniform(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.vec4();\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.vec4();\r\n this.ifft0 = pb.tex2D().uniform(0);\r\n this.ifft1 = pb.tex2D().uniform(0);\r\n this.ifft2 = pb.tex2D().uniform(0);\r\n this.ifft3 = pb.tex2D().uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.vec4();\r\n this.ifft4 = pb.tex2D().uniform(0);\r\n this.ifft5 = pb.tex2D().uniform(0);\r\n }\r\n }\r\n if (pb.getDevice().type === 'webgl') {\r\n this.ifftTexSize = pb.vec2().uniform(0);\r\n }\r\n pb.main(function () {\r\n this.$l.fragPos = getFragCoord(this, useComputeShader);\r\n this.$l.p = pb.float(pb.add(this.fragPos.x, this.fragPos.y));\r\n // (-1)^(x+y) undoes the spectrum being centred at resolution/2. The\r\n // transform is left unnormalized (see the butterfly passes), so this\r\n // is the only factor applied here.\r\n this.$l.m = pb.sub(pb.mul(pb.sub(1, pb.mod(this.p, 2)), 2), 1);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.uv = pb.div(pb.vec2(this.fragPos), this.ifftTexSize);\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.mul(pb.textureSampleLevel(this.ifft0, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.mul(pb.textureSampleLevel(this.ifft1, this.uv, 0), this.m);\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.mul(pb.textureSampleLevel(this.ifft2, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.mul(pb.textureSampleLevel(this.ifft3, this.uv, 0), this.m);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.mul(pb.textureSampleLevel(this.ifft4, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.mul(pb.textureSampleLevel(this.ifft5, this.uv, 0), this.m);\r\n }\r\n } else if (useComputeShader) {\r\n this.$l.uv = pb.ivec2(this.fragPos);\r\n for (let i = 0; i < 6; i++) {\r\n pb.textureArrayStore(\r\n this.output,\r\n this.$builtins.globalInvocationId.xy,\r\n i,\r\n pb.mul(pb.textureArrayLoad(this.ifft, this.uv, i, 0), this.m)\r\n );\r\n }\r\n } else {\r\n this.$l.uv = pb.ivec2(this.fragPos);\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.mul(pb.textureLoad(this.ifft0, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.mul(pb.textureLoad(this.ifft1, this.uv, 0), this.m);\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.mul(pb.textureLoad(this.ifft2, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.mul(pb.textureLoad(this.ifft3, this.uv, 0), this.m);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.mul(pb.textureLoad(this.ifft4, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.mul(pb.textureLoad(this.ifft5, this.uv, 0), this.m);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_PostFFT2';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramHk(\r\n useComputeShader = false,\r\n threadGroupSize = 8,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader = false, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.spectrum0 = pb.vec4();\r\n this.$outputs.spectrum1 = pb.vec4();\r\n this.$outputs.spectrum2 = pb.vec4();\r\n this.$outputs.spectrum3 = pb.vec4();\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.spectrum4 = pb.vec4();\r\n this.$outputs.spectrum5 = pb.vec4();\r\n }\r\n }\r\n this.resolution = pb.int().uniform(0);\r\n this.sizes = pb.vec4().uniform(0);\r\n this.t = pb.float().uniform(0);\r\n if (useComputeShader) {\r\n this.h0Texture = pb.tex2DArray().uniform(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.h0Texture0 = pb.tex2D().uniform(0);\r\n this.h0Texture1 = pb.tex2D().uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.h0Texture2 = pb.tex2D().uniform(0);\r\n }\r\n }\r\n if (pb.getDevice().type === 'webgl') {\r\n this.h0TexSize = pb.vec2().uniform(0);\r\n }\r\n this.RATIO = pb.float(0.618033989036);\r\n this.g = pb.float(9.81);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n const Spectrum = pb.defineStruct(\r\n [\r\n Complex('dx'),\r\n Complex('hy'),\r\n Complex('dz'),\r\n Complex('sx'),\r\n Complex('sz'),\r\n Complex('dxdx'),\r\n Complex('dxdz'),\r\n Complex('dzdz')\r\n ],\r\n 'Spectrum'\r\n );\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n pb.func('eix', [pb.float('x')], function () {\r\n this.$return(Complex(pb.cos(this.x), pb.sin(this.x)));\r\n });\r\n pb.func('conj', [Complex('a')], function () {\r\n this.$return(Complex(this.a.re, pb.neg(this.a.im)));\r\n });\r\n pb.func('scale', [Complex('a'), pb.float('v')], function () {\r\n this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));\r\n });\r\n pb.func('negate', [Complex('a')], function () {\r\n this.$return(Complex(pb.neg(this.a.re), pb.neg(this.a.im)));\r\n });\r\n for (let x = 0; x <= 2; x++) {\r\n if (x < 2 && limit === 2) {\r\n continue;\r\n }\r\n if (x === 2 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`getSpectrum${x}`, [pb.vec2('x'), pb.float('size'), pb.ivec2('fragCoord')], function () {\r\n this.$l.hy = Complex(0, 0);\r\n this.$l.sx = Complex(0, 0);\r\n this.$l.sz = Complex(0, 0);\r\n this.$l.dx = Complex(0, 0);\r\n this.$l.dz = Complex(0, 0);\r\n this.$l.dxdx = Complex(0, 0);\r\n this.$l.dxdz = Complex(0, 0);\r\n this.$l.dzdz = Complex(0, 0);\r\n this.$if(pb.lessThanEqual(this.size, 1e-3), function () {\r\n this.$return(\r\n Spectrum(this.dx, this.hy, this.dz, this.sx, this.sz, this.dxdx, this.dxdz, this.dzdz)\r\n );\r\n });\r\n this.$l.k = pb.mul(this.x, pb.div(Math.PI * 2, this.size));\r\n this.$l.kLen = pb.length(this.k);\r\n this.$if(pb.greaterThan(this.kLen, 1e-6), function () {\r\n this.$l.w = pb.sqrt(pb.mul(this.kLen, this.g));\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.h0Texel = pb.textureSampleLevel(\r\n this[`h0Texture${x}`],\r\n pb.div(pb.vec2(this.fragCoord), this.h0TexSize),\r\n 0\r\n );\r\n } else if (useComputeShader) {\r\n this.$l.h0Texel = pb.textureArrayLoad(this.h0Texture, this.fragCoord, x, 0);\r\n } else {\r\n this.$l.h0Texel = pb.textureLoad(this[`h0Texture${x}`], this.fragCoord, 0);\r\n }\r\n this.$l.e = this.eix(pb.mul(this.w, this.t));\r\n this.$l.h0 = Complex(this.h0Texel.x, this.h0Texel.y);\r\n this.$l.h0MinConj = Complex(this.h0Texel.z, this.h0Texel.w);\r\n this.hy = this.add(this.mul(this.h0, this.e), this.mul(this.h0MinConj, this.conj(this.e)));\r\n this.$if(pb.notEqual(this.fragCoord.x, 0), function () {\r\n this.sx = this.mul(Complex(0, this.k.x), this.hy);\r\n this.dx = this.mul(Complex(0, pb.div(pb.neg(this.k.x), this.kLen)), this.hy);\r\n this.dxdx = this.scale(this.hy, pb.div(pb.mul(this.k.x, this.k.x), this.kLen));\r\n });\r\n this.$if(pb.notEqual(this.fragCoord.y, 0), function () {\r\n this.sz = this.mul(Complex(0, this.k.y), this.hy);\r\n this.dz = this.mul(Complex(0, pb.div(pb.neg(this.k.y), this.kLen)), this.hy);\r\n this.dzdz = this.scale(this.hy, pb.div(pb.mul(this.k.y, this.k.y), this.kLen));\r\n this.$if(pb.notEqual(this.fragCoord.x, 0), function () {\r\n this.dxdz = this.scale(this.hy, pb.div(pb.mul(this.k.x, this.k.y), this.kLen));\r\n });\r\n });\r\n });\r\n this.$return(\r\n Spectrum(this.dx, this.hy, this.dz, this.sx, this.sz, this.dxdx, this.dxdz, this.dzdz)\r\n );\r\n });\r\n }\r\n pb.func(\r\n 'compressSpectrum',\r\n [Spectrum('spec'), pb.vec4('part0').out(), pb.vec4('part1').out()],\r\n function () {\r\n this.$l.i = Complex(0, 1);\r\n this.$l.dx_hy = this.add(this.spec.dx, this.mul(this.i, this.spec.hy));\r\n this.$l.dz_dxdz = this.add(this.spec.dz, this.mul(this.i, this.spec.dxdz));\r\n this.$l.sx_sz = this.add(this.spec.sx, this.mul(this.i, this.spec.sz));\r\n this.$l.dxdx_dzdz = this.add(this.spec.dxdx, this.mul(this.i, this.spec.dzdz));\r\n this.part0 = pb.vec4(this.dx_hy.re, this.dx_hy.im, this.dz_dxdz.re, this.dz_dxdz.im);\r\n this.part1 = pb.vec4(this.sx_sz.re, this.sx_sz.im, this.dxdx_dzdz.re, this.dxdx_dzdz.im);\r\n }\r\n );\r\n pb.main(function () {\r\n this.fragXY = pb.ivec2(getFragCoord(this, useComputeShader));\r\n this.$l.x = pb.vec2(pb.sub(this.fragXY, pb.ivec2(pb.div(this.resolution, 2))));\r\n if (useComputeShader || !limit || limit === 4) {\r\n this.$l.s0 = pb.vec4();\r\n this.$l.s1 = pb.vec4();\r\n this.$l.s2 = pb.vec4();\r\n this.$l.s3 = pb.vec4();\r\n this.$l.spec0 = this.getSpectrum0(this.x, this.sizes.x, this.fragXY);\r\n this.$l.spec1 = this.getSpectrum1(this.x, this.sizes.y, this.fragXY);\r\n this.compressSpectrum(this.spec0, this.s0, this.s1);\r\n this.compressSpectrum(this.spec1, this.s2, this.s3);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 0, this.s0);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 1, this.s1);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 2, this.s2);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 3, this.s3);\r\n } else {\r\n this.$outputs.spectrum0 = this.s0;\r\n this.$outputs.spectrum1 = this.s1;\r\n this.$outputs.spectrum2 = this.s2;\r\n this.$outputs.spectrum3 = this.s3;\r\n }\r\n }\r\n if (useComputeShader || !limit || limit === 2) {\r\n this.$l.s4 = pb.vec4();\r\n this.$l.s5 = pb.vec4();\r\n this.$l.spec2 = this.getSpectrum2(this.x, this.sizes.z, this.fragXY);\r\n this.compressSpectrum(this.spec2, this.s4, this.s5);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 4, this.s4);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 5, this.s5);\r\n } else {\r\n this.$outputs.spectrum4 = this.s4;\r\n this.$outputs.spectrum5 = this.s5;\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_Hk';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramH0(\r\n useComputeShader = false,\r\n threadGroupSize = 8,\r\n targetFormat: TextureFormat = 'rgba32f'\r\n) {\r\n function getComputeFunc(useComputeShader = false, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n this.$outputs.spectrum0 = pb.vec4();\r\n this.$outputs.spectrum1 = pb.vec4();\r\n this.$outputs.spectrum2 = pb.vec4();\r\n }\r\n this.noise = pb.tex2D().uniform(0);\r\n this.resolution = pb.int().uniform(0);\r\n this.wind = pb.vec2().uniform(0);\r\n this.alignment = pb.float().uniform(0);\r\n this.g = pb.float(9.81);\r\n this.cascade0 = pb.vec4().uniform(0);\r\n this.cascade1 = pb.vec4().uniform(0);\r\n this.cascade2 = pb.vec4().uniform(0);\r\n pb.func('gauss', [pb.ivec2('fragCoord')], function () {\r\n this.$l.uv = pb.div(pb.vec2(this.fragCoord), pb.float(this.resolution));\r\n this.$l.noise0 = pb.textureSampleLevel(this.noise, this.uv, 0).rg;\r\n this.$l.noise1 = pb.textureSampleLevel(this.noise, pb.neg(this.uv), 0).rg;\r\n this.$l.u0 = pb.mul(this.noise0.x, Math.PI * 2);\r\n this.$l.v0 = pb.sqrt(pb.mul(pb.log(this.noise0.y), -2));\r\n this.$l.u1 = pb.mul(this.noise1.x, Math.PI * 2);\r\n this.$l.v1 = pb.sqrt(pb.mul(pb.log(this.noise1.y), -2));\r\n this.$return(\r\n pb.vec4(\r\n pb.mul(this.v0, pb.cos(this.u0)),\r\n pb.mul(this.v0, pb.sin(this.u0)),\r\n pb.mul(this.v1, pb.cos(this.u1)),\r\n pb.mul(pb.neg(this.v1), pb.sin(this.u1))\r\n )\r\n );\r\n });\r\n pb.func('phillips', [pb.vec2('k'), pb.float('A'), pb.float('minK'), pb.float('maxK')], function () {\r\n this.$l.k2 = pb.dot(this.k, this.k);\r\n this.$if(\r\n pb.or(\r\n pb.lessThanEqual(this.k2, pb.mul(this.minK, this.minK)),\r\n pb.greaterThanEqual(this.k2, pb.mul(this.maxK, this.maxK))\r\n ),\r\n function () {\r\n this.$return(pb.vec4(0));\r\n }\r\n );\r\n this.$l.L = pb.div(pb.dot(this.wind, this.wind), this.g);\r\n this.$l.L2 = pb.mul(this.L, this.L);\r\n this.$l.h0k = pb.mul(\r\n pb.div(pb.div(this.A, this.k2), this.k2),\r\n pb.exp(pb.div(-1, pb.mul(this.k2, this.L2))),\r\n 0.5\r\n );\r\n this.$l.h0mk = this.h0k;\r\n this.$if(pb.greaterThan(this.alignment, 0), function () {\r\n this.h0k = pb.mul(\r\n this.h0k,\r\n pb.pow(pb.max(0, pb.dot(pb.normalize(this.wind), pb.normalize(this.k))), this.alignment)\r\n );\r\n this.h0mk = pb.mul(\r\n this.h0mk,\r\n pb.pow(pb.max(0, pb.dot(pb.normalize(this.wind), pb.normalize(pb.neg(this.k)))), this.alignment)\r\n );\r\n });\r\n this.$return(pb.sqrt(pb.vec4(this.h0k, this.h0k, this.h0mk, this.h0mk)));\r\n });\r\n pb.main(function () {\r\n this.$l.x = pb.vec2(\r\n pb.sub(pb.ivec2(getFragCoord(this, useComputeShader)), pb.ivec2(pb.div(this.resolution, 2)))\r\n );\r\n this.$l.k = pb.mul(pb.vec2(Math.PI * 2), this.x);\r\n this.$l.rnd = this.gauss(pb.ivec2(getFragCoord(this, useComputeShader)));\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n pb.mul(\r\n this.phillips(\r\n pb.div(this.k, this.cascade0.x),\r\n this.cascade0.y,\r\n this.cascade0.z,\r\n this.cascade0.w\r\n ),\r\n this.rnd\r\n )\r\n );\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n pb.mul(\r\n this.phillips(\r\n pb.div(this.k, this.cascade1.x),\r\n this.cascade1.y,\r\n this.cascade1.z,\r\n this.cascade1.w\r\n ),\r\n this.rnd\r\n )\r\n );\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n pb.mul(\r\n this.phillips(\r\n pb.div(this.k, this.cascade2.x),\r\n this.cascade2.y,\r\n this.cascade2.z,\r\n this.cascade2.w\r\n ),\r\n this.rnd\r\n )\r\n );\r\n } else {\r\n this.$outputs.spectrum0 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z, this.cascade0.w),\r\n this.rnd\r\n );\r\n this.$outputs.spectrum1 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z, this.cascade1.w),\r\n this.rnd\r\n );\r\n this.$outputs.spectrum2 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z, this.cascade2.w),\r\n this.rnd\r\n );\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_H0';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramFFT2V(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader: boolean, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum = pb.tex2DArray().sampleType('unfilterable-float').uniform(0);\r\n this.ifft =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = pb.vec4();\r\n this.$outputs.ifft1 = pb.vec4();\r\n this.$outputs.ifft2 = pb.vec4();\r\n this.$outputs.ifft3 = pb.vec4();\r\n this.spectrum0 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum1 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum2 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum3 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = pb.vec4();\r\n this.$outputs.ifft5 = pb.vec4();\r\n this.spectrum4 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum5 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n }\r\n this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.texSize = pb.vec4().uniform(0);\r\n }\r\n this.phase = pb.int().uniform(0);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n for (let x = 0; x <= 5; x++) {\r\n if (x < 4 && limit === 2) {\r\n continue;\r\n }\r\n if (x > 3 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`twiddle${x}`, [pb.vec4('texelButt'), pb.int('x')], function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelA = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(pb.float(this.x), this.texelButt.b), this.texSize.xy),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(pb.float(this.x), this.texelButt.a), this.texSize.xy),\r\n 0\r\n );\r\n } else if (useComputeShader) {\r\n this.$l.texelA = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(this.x, pb.int(this.texelButt.b)),\r\n x,\r\n 0\r\n );\r\n this.$l.texelB = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(this.x, pb.int(this.texelButt.a)),\r\n x,\r\n 0\r\n );\r\n } else {\r\n this.$l.texelA = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(this.x, pb.int(this.texelButt.b)),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(this.x, pb.int(this.texelButt.a)),\r\n 0\r\n );\r\n }\r\n this.$l.w = Complex(this.texelButt.r, this.texelButt.g);\r\n this.$l.a1 = Complex(this.texelA.x, this.texelA.y);\r\n this.$l.b1 = Complex(this.texelB.x, this.texelB.y);\r\n // Unnormalized butterfly. Scaling each stage by 0.5 and multiplying\r\n // N^2 back after the transform is a net no-op in exact arithmetic,\r\n // but the intermediate textures are fp16: at N=256 the last stage\r\n // held values 1/65536 of the final ones, which put every slope\r\n // component into the subnormal range and left it 4-6 bits of\r\n // precision (or flushed it to zero). Without the per-stage scale the\r\n // intermediates stay at metre scale, where fp16 is fine.\r\n this.$l.r1 = this.add(this.a1, this.mul(this.b1, this.w));\r\n this.$l.a2 = Complex(this.texelA.z, this.texelA.w);\r\n this.$l.b2 = Complex(this.texelB.z, this.texelB.w);\r\n this.$l.r2 = this.add(this.a2, this.mul(this.b2, this.w));\r\n this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));\r\n });\r\n }\r\n pb.main(function () {\r\n this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);\r\n this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelButt = pb.textureSampleLevel(\r\n this.butterfly,\r\n pb.div(pb.vec2(pb.float(this.phase), pb.float(this.y)), this.texSize.zw),\r\n 0\r\n );\r\n } else {\r\n this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.y), 0);\r\n }\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n this.twiddle0(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n this.twiddle1(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n this.twiddle2(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 3,\r\n this.twiddle3(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 4,\r\n this.twiddle4(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 5,\r\n this.twiddle5(this.texelButt, this.x)\r\n );\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = this.twiddle0(this.texelButt, this.x);\r\n this.$outputs.ifft1 = this.twiddle1(this.texelButt, this.x);\r\n this.$outputs.ifft2 = this.twiddle2(this.texelButt, this.x);\r\n this.$outputs.ifft3 = this.twiddle3(this.texelButt, this.x);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = this.twiddle4(this.texelButt, this.x);\r\n this.$outputs.ifft5 = this.twiddle5(this.texelButt, this.x);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_PreFFT2';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramFFT2H(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader: boolean, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum = pb.tex2DArray().sampleType('unfilterable-float').uniform(0);\r\n this.ifft =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = pb.vec4();\r\n this.$outputs.ifft1 = pb.vec4();\r\n this.$outputs.ifft2 = pb.vec4();\r\n this.$outputs.ifft3 = pb.vec4();\r\n this.spectrum0 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum1 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum2 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum3 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = pb.vec4();\r\n this.$outputs.ifft5 = pb.vec4();\r\n this.spectrum4 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum5 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n }\r\n this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.phase = pb.int().uniform(0);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.texSize = pb.vec4().uniform(0);\r\n }\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n for (let x = 0; x <= 5; x++) {\r\n if (x < 4 && limit === 2) {\r\n continue;\r\n }\r\n if (x > 3 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`twiddle${x}`, [pb.vec4('texelButt'), pb.int('y')], function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelA = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(this.texelButt.b, pb.float(this.y)), this.texSize.xy),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(this.texelButt.a, pb.float(this.y)), this.texSize.xy),\r\n 0\r\n );\r\n } else if (useComputeShader) {\r\n this.$l.texelA = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(pb.int(this.texelButt.b), this.y),\r\n x,\r\n 0\r\n );\r\n this.$l.texelB = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(pb.int(this.texelButt.a), this.y),\r\n x,\r\n 0\r\n );\r\n } else {\r\n this.$l.texelA = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(pb.int(this.texelButt.b), this.y),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(pb.int(this.texelButt.a), this.y),\r\n 0\r\n );\r\n }\r\n this.$l.w = Complex(this.texelButt.r, this.texelButt.g);\r\n this.$l.a1 = Complex(this.texelA.x, this.texelA.y);\r\n this.$l.b1 = Complex(this.texelB.x, this.texelB.y);\r\n // Unnormalized butterfly. Scaling each stage by 0.5 and multiplying\r\n // N^2 back after the transform is a net no-op in exact arithmetic,\r\n // but the intermediate textures are fp16: at N=256 the last stage\r\n // held values 1/65536 of the final ones, which put every slope\r\n // component into the subnormal range and left it 4-6 bits of\r\n // precision (or flushed it to zero). Without the per-stage scale the\r\n // intermediates stay at metre scale, where fp16 is fine.\r\n this.$l.r1 = this.add(this.a1, this.mul(this.b1, this.w));\r\n this.$l.a2 = Complex(this.texelA.z, this.texelA.w);\r\n this.$l.b2 = Complex(this.texelB.z, this.texelB.w);\r\n this.$l.r2 = this.add(this.a2, this.mul(this.b2, this.w));\r\n this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));\r\n });\r\n }\r\n pb.main(function () {\r\n this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);\r\n this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelButt = pb.textureSampleLevel(\r\n this.butterfly,\r\n pb.div(pb.vec2(pb.float(this.phase), pb.float(this.x)), this.texSize.zw),\r\n 0\r\n );\r\n } else {\r\n this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.x), 0);\r\n }\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n this.twiddle0(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n this.twiddle1(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n this.twiddle2(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 3,\r\n this.twiddle3(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 4,\r\n this.twiddle4(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 5,\r\n this.twiddle5(this.texelButt, this.y)\r\n );\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = this.twiddle0(this.texelButt, this.y);\r\n this.$outputs.ifft1 = this.twiddle1(this.texelButt, this.y);\r\n this.$outputs.ifft2 = this.twiddle2(this.texelButt, this.y);\r\n this.$outputs.ifft3 = this.twiddle3(this.texelButt, this.y);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = this.twiddle4(this.texelButt, this.y);\r\n this.$outputs.ifft5 = this.twiddle5(this.texelButt, this.y);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_FFT2H';\r\n return program;\r\n}\r\n"],"names":["getFragCoord","scope","useComputeShader","$builtins","globalInvocationId","xy","fragCoord","WaterShaderImpl","_vertexFunc","_shadingFunc","_setupUniformsFunc","setupUniformsFunc","vertexFunc","shadingFunc","setupUniforms","call","vertex","pos","xz","waveGenerator","getVertexNormal","pb","$builder","func","vec2","$l","uv0","div","sizes","x","uv1","y","uv2","z","_sx_sz_dxdx_dzdz0","textureArraySampleLevel","dataTexture","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","textureSampleLevel","sx_sz_dxdx_dzdz0","sx_sz_dxdx_dzdz1","sx_sz_dxdx_dzdz2","sx","add","sz","dxdx_dzdz","mul","zw","croppinesses","slope","normal","normalize","vec3","neg","$return","shading","worldPos","worldNormal","foamFactor","discardable","createProgramOcean","shadingImpl","program","getDevice","buildRenderProgram","$inputs","position","attrib","$outputs","outPos","outNormal","outXZ","flip","int","uniform","viewProjMatrix","mat4","worldMatrix","level","float","main","vec4","calcVertexPositionAndNormal","$if","notEqual","fragment","outColor","region","or","any","lessThan","greaterThan","n","calcFragmentNormalAndFoam","xyz","w","name","createProgramPostFFT2","threadGroupSize","targetFormat","limit","getComputeFunc","fmt","output","texStorage2DArray","rgba32float","storage","rgba16float","ifft","tex2DArray","dx_hy_dz_dxdz0","dx_hy_dz_dxdz1","ifft0","tex2D","ifft1","ifft2","ifft3","dx_hy_dz_dxdz2","ifft4","ifft5","type","ifftTexSize","fragPos","p","m","sub","mod","uv","ivec2","i","textureArrayStore","textureArrayLoad","textureLoad","buildComputeProgram","workgroupSize","compute","createProgramHk","spectrum","spectrum0","spectrum1","spectrum2","spectrum3","spectrum4","spectrum5","resolution","t","h0Texture","h0Texture0","h0Texture1","h0Texture2","h0TexSize","RATIO","g","Complex","defineStruct","Spectrum","a","re","b","im","cos","sin","v","hy","dx","dz","dxdx","dxdz","dzdz","lessThanEqual","size","k","Math","PI","kLen","length","sqrt","h0Texel","e","eix","h0","h0MinConj","conj","scale","out","dx_hy","spec","dz_dxdz","sx_sz","part0","part1","fragXY","s0","s1","s2","s3","spec0","getSpectrum0","spec1","getSpectrum1","compressSpectrum","s4","s5","spec2","getSpectrum2","createProgramH0","noise","wind","alignment","cascade0","cascade1","cascade2","noise0","rg","noise1","u0","v0","log","u1","v1","k2","dot","minK","greaterThanEqual","maxK","L","L2","h0k","A","exp","h0mk","pow","max","rnd","gauss","phillips","createProgramFFT2V","sampleType","butterfly","texSize","phase","texelA","texelButt","texelB","r","a1","b1","r1","a2","b2","r2","twiddle0","twiddle1","twiddle2","twiddle3","twiddle4","twiddle5","createProgramFFT2H"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"water.js","sources":["../../src/shaders/water.ts"],"sourcesContent":["// copy from: https://github.com/codeagent/webgl-ocean/\r\n\r\nimport type {\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { WaveGenerator } from '../render/wavegenerator';\r\nimport { getDevice } from '../app/api';\r\n\r\nfunction getFragCoord(scope: PBGlobalScope, useComputeShader: boolean) {\r\n return useComputeShader ? scope.$builtins.globalInvocationId.xy : scope.$builtins.fragCoord.xy;\r\n}\r\n\r\n/** @internal */\r\nexport type WaterVertexFunc = (\r\n this: WaterShaderImpl,\r\n scope: PBInsideFunctionScope,\r\n pos: PBShaderExp,\r\n xz: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n) => void;\r\n\r\n/** @internal */\r\nexport type WaterShadingFunc = (\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp,\r\n discardable: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n) => PBShaderExp;\r\n\r\n/** @internal */\r\nexport type WaterSetupUniformFunc = (this: WaterShaderImpl, scope: PBGlobalScope) => void;\r\n\r\n/** @internal */\r\nexport class WaterShaderImpl {\r\n private readonly _vertexFunc: WaterVertexFunc;\r\n private readonly _shadingFunc: WaterShadingFunc;\r\n private readonly _setupUniformsFunc: WaterSetupUniformFunc;\r\n constructor(\r\n setupUniformsFunc: WaterSetupUniformFunc,\r\n vertexFunc: WaterVertexFunc,\r\n shadingFunc: WaterShadingFunc\r\n ) {\r\n this._vertexFunc = vertexFunc;\r\n this._shadingFunc = shadingFunc;\r\n this._setupUniformsFunc = setupUniformsFunc;\r\n }\r\n setupUniforms(scope: PBGlobalScope) {\r\n this._setupUniformsFunc?.call(this, scope);\r\n }\r\n vertex(scope: PBInsideFunctionScope, pos: PBShaderExp, xz: PBShaderExp, waveGenerator: WaveGenerator) {\r\n this._vertexFunc?.call(this, scope, pos, xz, waveGenerator);\r\n }\r\n getVertexNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, useComputeShader: boolean) {\r\n const pb = scope.$builder;\r\n pb.func('getVertexNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n this.$return(this.normal);\r\n });\r\n return scope.getVertexNormal(xz) as PBShaderExp;\r\n }\r\n shading(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp,\r\n discardable: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n ) {\r\n return this._shadingFunc?.call(\r\n this,\r\n scope,\r\n worldPos,\r\n worldNormal,\r\n foamFactor,\r\n discardable,\r\n waveGenerator\r\n );\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramOcean(waveGenerator: WaveGenerator, shadingImpl: WaterShaderImpl) {\r\n const program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n this.$outputs.outPos = pb.vec3();\r\n this.$outputs.outNormal = pb.vec3();\r\n this.$outputs.outXZ = pb.vec2();\r\n this.flip = pb.int().uniform(0);\r\n this.viewProjMatrix = pb.mat4().uniform(0);\r\n this.worldMatrix = pb.mat4().uniform(1);\r\n this.level = pb.float().uniform(0);\r\n shadingImpl.setupUniforms(this);\r\n waveGenerator.setupUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.xz = pb.mul(this.worldMatrix, pb.vec4(this.$inputs.position, 1)).xy;\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3();\r\n waveGenerator.calcVertexPositionAndNormal(\r\n this,\r\n pb.vec3(this.xz.x, this.level, this.xz.y),\r\n this.outPos,\r\n this.outNormal\r\n );\r\n this.$outputs.outPos = this.outPos;\r\n this.$outputs.outNormal = this.outNormal;\r\n this.$outputs.outXZ = this.xz;\r\n this.$builtins.position = pb.mul(this.viewProjMatrix, pb.vec4(this.$outputs.outPos, 1));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n shadingImpl.vertex(this, this.$outputs.outPos, this.$outputs.outXZ, waveGenerator);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.pos = pb.vec3().uniform(0);\r\n this.region = pb.vec4().uniform(0);\r\n shadingImpl.setupUniforms(this);\r\n waveGenerator.setupUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(this.$inputs.outXZ, this.region.xy)),\r\n pb.any(pb.greaterThan(this.$inputs.outXZ, this.region.zw))\r\n );\r\n this.$l.n = waveGenerator.calcFragmentNormalAndFoam(this, this.$inputs.outXZ, this.$inputs.outNormal);\r\n this.$outputs.outColor =\r\n shadingImpl.shading(\r\n this,\r\n this.$inputs.outPos,\r\n this.n.xyz,\r\n this.n.w,\r\n this.discardable,\r\n waveGenerator\r\n ) ?? pb.vec4(pb.add(pb.mul(this.n.xyz, 0.5), pb.vec3(0.5)), 1);\r\n });\r\n }\r\n })!;\r\n program.name = '@Ocean_Render';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramPostFFT2(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader: boolean, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.output =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n this.ifft = pb.tex2DArray().uniform(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.vec4();\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.vec4();\r\n this.ifft0 = pb.tex2D().uniform(0);\r\n this.ifft1 = pb.tex2D().uniform(0);\r\n this.ifft2 = pb.tex2D().uniform(0);\r\n this.ifft3 = pb.tex2D().uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.vec4();\r\n this.ifft4 = pb.tex2D().uniform(0);\r\n this.ifft5 = pb.tex2D().uniform(0);\r\n }\r\n }\r\n pb.main(function () {\r\n this.$l.fragPos = getFragCoord(this, useComputeShader);\r\n this.$l.p = pb.float(pb.add(this.fragPos.x, this.fragPos.y));\r\n // (-1)^(x+y) undoes the spectrum being centred at resolution/2. The\r\n // transform is left unnormalized (see the butterfly passes), so this\r\n // is the only factor applied here.\r\n this.$l.m = pb.sub(pb.mul(pb.sub(1, pb.mod(this.p, 2)), 2), 1);\r\n if (useComputeShader) {\r\n this.$l.uv = pb.ivec2(this.fragPos);\r\n for (let i = 0; i < 6; i++) {\r\n pb.textureArrayStore(\r\n this.output,\r\n this.$builtins.globalInvocationId.xy,\r\n i,\r\n pb.mul(pb.textureArrayLoad(this.ifft, this.uv, i, 0), this.m)\r\n );\r\n }\r\n } else {\r\n this.$l.uv = pb.ivec2(this.fragPos);\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.mul(pb.textureLoad(this.ifft0, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.mul(pb.textureLoad(this.ifft1, this.uv, 0), this.m);\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.mul(pb.textureLoad(this.ifft2, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.mul(pb.textureLoad(this.ifft3, this.uv, 0), this.m);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.mul(pb.textureLoad(this.ifft4, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.mul(pb.textureLoad(this.ifft5, this.uv, 0), this.m);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_PostFFT2';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramHk(\r\n useComputeShader = false,\r\n threadGroupSize = 8,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader = false, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.spectrum0 = pb.vec4();\r\n this.$outputs.spectrum1 = pb.vec4();\r\n this.$outputs.spectrum2 = pb.vec4();\r\n this.$outputs.spectrum3 = pb.vec4();\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.spectrum4 = pb.vec4();\r\n this.$outputs.spectrum5 = pb.vec4();\r\n }\r\n }\r\n this.resolution = pb.int().uniform(0);\r\n this.sizes = pb.vec4().uniform(0);\r\n this.t = pb.float().uniform(0);\r\n if (useComputeShader) {\r\n this.h0Texture = pb.tex2DArray().uniform(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.h0Texture0 = pb.tex2D().uniform(0);\r\n this.h0Texture1 = pb.tex2D().uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.h0Texture2 = pb.tex2D().uniform(0);\r\n }\r\n }\r\n this.RATIO = pb.float(0.618033989036);\r\n this.g = pb.float(9.81);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n const Spectrum = pb.defineStruct(\r\n [\r\n Complex('dx'),\r\n Complex('hy'),\r\n Complex('dz'),\r\n Complex('sx'),\r\n Complex('sz'),\r\n Complex('dxdx'),\r\n Complex('dxdz'),\r\n Complex('dzdz')\r\n ],\r\n 'Spectrum'\r\n );\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n pb.func('eix', [pb.float('x')], function () {\r\n this.$return(Complex(pb.cos(this.x), pb.sin(this.x)));\r\n });\r\n pb.func('conj', [Complex('a')], function () {\r\n this.$return(Complex(this.a.re, pb.neg(this.a.im)));\r\n });\r\n pb.func('scale', [Complex('a'), pb.float('v')], function () {\r\n this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));\r\n });\r\n pb.func('negate', [Complex('a')], function () {\r\n this.$return(Complex(pb.neg(this.a.re), pb.neg(this.a.im)));\r\n });\r\n for (let x = 0; x <= 2; x++) {\r\n if (x < 2 && limit === 2) {\r\n continue;\r\n }\r\n if (x === 2 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`getSpectrum${x}`, [pb.vec2('x'), pb.float('size'), pb.ivec2('fragCoord')], function () {\r\n this.$l.hy = Complex(0, 0);\r\n this.$l.sx = Complex(0, 0);\r\n this.$l.sz = Complex(0, 0);\r\n this.$l.dx = Complex(0, 0);\r\n this.$l.dz = Complex(0, 0);\r\n this.$l.dxdx = Complex(0, 0);\r\n this.$l.dxdz = Complex(0, 0);\r\n this.$l.dzdz = Complex(0, 0);\r\n this.$if(pb.lessThanEqual(this.size, 1e-3), function () {\r\n this.$return(\r\n Spectrum(this.dx, this.hy, this.dz, this.sx, this.sz, this.dxdx, this.dxdz, this.dzdz)\r\n );\r\n });\r\n this.$l.k = pb.mul(this.x, pb.div(Math.PI * 2, this.size));\r\n this.$l.kLen = pb.length(this.k);\r\n this.$if(pb.greaterThan(this.kLen, 1e-6), function () {\r\n this.$l.w = pb.sqrt(pb.mul(this.kLen, this.g));\r\n if (useComputeShader) {\r\n this.$l.h0Texel = pb.textureArrayLoad(this.h0Texture, this.fragCoord, x, 0);\r\n } else {\r\n this.$l.h0Texel = pb.textureLoad(this[`h0Texture${x}`], this.fragCoord, 0);\r\n }\r\n this.$l.e = this.eix(pb.mul(this.w, this.t));\r\n this.$l.h0 = Complex(this.h0Texel.x, this.h0Texel.y);\r\n this.$l.h0MinConj = Complex(this.h0Texel.z, this.h0Texel.w);\r\n this.hy = this.add(this.mul(this.h0, this.e), this.mul(this.h0MinConj, this.conj(this.e)));\r\n this.$if(pb.notEqual(this.fragCoord.x, 0), function () {\r\n this.sx = this.mul(Complex(0, this.k.x), this.hy);\r\n this.dx = this.mul(Complex(0, pb.div(pb.neg(this.k.x), this.kLen)), this.hy);\r\n this.dxdx = this.scale(this.hy, pb.div(pb.mul(this.k.x, this.k.x), this.kLen));\r\n });\r\n this.$if(pb.notEqual(this.fragCoord.y, 0), function () {\r\n this.sz = this.mul(Complex(0, this.k.y), this.hy);\r\n this.dz = this.mul(Complex(0, pb.div(pb.neg(this.k.y), this.kLen)), this.hy);\r\n this.dzdz = this.scale(this.hy, pb.div(pb.mul(this.k.y, this.k.y), this.kLen));\r\n this.$if(pb.notEqual(this.fragCoord.x, 0), function () {\r\n this.dxdz = this.scale(this.hy, pb.div(pb.mul(this.k.x, this.k.y), this.kLen));\r\n });\r\n });\r\n });\r\n this.$return(\r\n Spectrum(this.dx, this.hy, this.dz, this.sx, this.sz, this.dxdx, this.dxdz, this.dzdz)\r\n );\r\n });\r\n }\r\n pb.func(\r\n 'compressSpectrum',\r\n [Spectrum('spec'), pb.vec4('part0').out(), pb.vec4('part1').out()],\r\n function () {\r\n this.$l.i = Complex(0, 1);\r\n this.$l.dx_hy = this.add(this.spec.dx, this.mul(this.i, this.spec.hy));\r\n this.$l.dz_dxdz = this.add(this.spec.dz, this.mul(this.i, this.spec.dxdz));\r\n this.$l.sx_sz = this.add(this.spec.sx, this.mul(this.i, this.spec.sz));\r\n this.$l.dxdx_dzdz = this.add(this.spec.dxdx, this.mul(this.i, this.spec.dzdz));\r\n this.part0 = pb.vec4(this.dx_hy.re, this.dx_hy.im, this.dz_dxdz.re, this.dz_dxdz.im);\r\n this.part1 = pb.vec4(this.sx_sz.re, this.sx_sz.im, this.dxdx_dzdz.re, this.dxdx_dzdz.im);\r\n }\r\n );\r\n pb.main(function () {\r\n this.fragXY = pb.ivec2(getFragCoord(this, useComputeShader));\r\n this.$l.x = pb.vec2(pb.sub(this.fragXY, pb.ivec2(pb.div(this.resolution, 2))));\r\n if (useComputeShader || !limit || limit === 4) {\r\n this.$l.s0 = pb.vec4();\r\n this.$l.s1 = pb.vec4();\r\n this.$l.s2 = pb.vec4();\r\n this.$l.s3 = pb.vec4();\r\n this.$l.spec0 = this.getSpectrum0(this.x, this.sizes.x, this.fragXY);\r\n this.$l.spec1 = this.getSpectrum1(this.x, this.sizes.y, this.fragXY);\r\n this.compressSpectrum(this.spec0, this.s0, this.s1);\r\n this.compressSpectrum(this.spec1, this.s2, this.s3);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 0, this.s0);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 1, this.s1);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 2, this.s2);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 3, this.s3);\r\n } else {\r\n this.$outputs.spectrum0 = this.s0;\r\n this.$outputs.spectrum1 = this.s1;\r\n this.$outputs.spectrum2 = this.s2;\r\n this.$outputs.spectrum3 = this.s3;\r\n }\r\n }\r\n if (useComputeShader || !limit || limit === 2) {\r\n this.$l.s4 = pb.vec4();\r\n this.$l.s5 = pb.vec4();\r\n this.$l.spec2 = this.getSpectrum2(this.x, this.sizes.z, this.fragXY);\r\n this.compressSpectrum(this.spec2, this.s4, this.s5);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 4, this.s4);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 5, this.s5);\r\n } else {\r\n this.$outputs.spectrum4 = this.s4;\r\n this.$outputs.spectrum5 = this.s5;\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_Hk';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramH0(\r\n useComputeShader = false,\r\n threadGroupSize = 8,\r\n targetFormat: TextureFormat = 'rgba32f'\r\n) {\r\n function getComputeFunc(useComputeShader = false, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n this.$outputs.spectrum0 = pb.vec4();\r\n this.$outputs.spectrum1 = pb.vec4();\r\n this.$outputs.spectrum2 = pb.vec4();\r\n }\r\n this.noise = pb.tex2D().uniform(0);\r\n this.resolution = pb.int().uniform(0);\r\n this.wind = pb.vec2().uniform(0);\r\n this.alignment = pb.float().uniform(0);\r\n this.g = pb.float(9.81);\r\n this.cascade0 = pb.vec4().uniform(0);\r\n this.cascade1 = pb.vec4().uniform(0);\r\n this.cascade2 = pb.vec4().uniform(0);\r\n // Gaussian pair for k and -k. `offset` (texels) gives each cascade a noise of\r\n // its own, so the cascades' phases are independent.\r\n pb.func('gauss', [pb.ivec2('fragCoord'), pb.ivec2('offset')], function () {\r\n this.$l.uv = pb.div(pb.vec2(pb.add(this.fragCoord, this.offset)), pb.float(this.resolution));\r\n this.$l.uvNeg = pb.div(pb.vec2(pb.sub(this.offset, this.fragCoord)), pb.float(this.resolution));\r\n this.$l.noise0 = pb.textureSampleLevel(this.noise, this.uv, 0).rg;\r\n this.$l.noise1 = pb.textureSampleLevel(this.noise, this.uvNeg, 0).rg;\r\n this.$l.u0 = pb.mul(this.noise0.x, Math.PI * 2);\r\n this.$l.v0 = pb.sqrt(pb.mul(pb.log(this.noise0.y), -2));\r\n this.$l.u1 = pb.mul(this.noise1.x, Math.PI * 2);\r\n this.$l.v1 = pb.sqrt(pb.mul(pb.log(this.noise1.y), -2));\r\n this.$return(\r\n pb.vec4(\r\n pb.mul(this.v0, pb.cos(this.u0)),\r\n pb.mul(this.v0, pb.sin(this.u0)),\r\n pb.mul(this.v1, pb.cos(this.u1)),\r\n pb.mul(pb.neg(this.v1), pb.sin(this.u1))\r\n )\r\n );\r\n });\r\n // Phillips spectrum over the cascade's band: zero inside the square\r\n // |kx|, |ky| < minK the larger cascades cover.\r\n pb.func('phillips', [pb.vec2('k'), pb.float('A'), pb.float('minK')], function () {\r\n this.$l.k2 = pb.dot(this.k, this.k);\r\n this.$if(pb.all(pb.lessThan(pb.abs(this.k), pb.vec2(this.minK))), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.L = pb.div(pb.dot(this.wind, this.wind), this.g);\r\n this.$l.L2 = pb.mul(this.L, this.L);\r\n this.$l.h0k = pb.mul(\r\n pb.div(pb.div(this.A, this.k2), this.k2),\r\n pb.exp(pb.div(-1, pb.mul(this.k2, this.L2))),\r\n 0.5\r\n );\r\n this.$l.h0mk = this.h0k;\r\n this.$if(pb.greaterThan(this.alignment, 0), function () {\r\n this.h0k = pb.mul(\r\n this.h0k,\r\n pb.pow(pb.max(0, pb.dot(pb.normalize(this.wind), pb.normalize(this.k))), this.alignment)\r\n );\r\n this.h0mk = pb.mul(\r\n this.h0mk,\r\n pb.pow(pb.max(0, pb.dot(pb.normalize(this.wind), pb.normalize(pb.neg(this.k)))), this.alignment)\r\n );\r\n });\r\n this.$return(pb.sqrt(pb.vec4(this.h0k, this.h0k, this.h0mk, this.h0mk)));\r\n });\r\n pb.main(function () {\r\n this.$l.x = pb.vec2(\r\n pb.sub(pb.ivec2(getFragCoord(this, useComputeShader)), pb.ivec2(pb.div(this.resolution, 2)))\r\n );\r\n this.$l.k = pb.mul(pb.vec2(Math.PI * 2), this.x);\r\n this.$l.coord = pb.ivec2(getFragCoord(this, useComputeShader));\r\n this.$l.rnd0 = this.gauss(this.coord, pb.ivec2(0, 0));\r\n this.$l.rnd1 = this.gauss(this.coord, pb.ivec2(73, 151));\r\n this.$l.rnd2 = this.gauss(this.coord, pb.ivec2(157, 41));\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z),\r\n this.rnd0\r\n )\r\n );\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z),\r\n this.rnd1\r\n )\r\n );\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z),\r\n this.rnd2\r\n )\r\n );\r\n } else {\r\n this.$outputs.spectrum0 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z),\r\n this.rnd0\r\n );\r\n this.$outputs.spectrum1 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z),\r\n this.rnd1\r\n );\r\n this.$outputs.spectrum2 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z),\r\n this.rnd2\r\n );\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_H0';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramFFT2V(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader: boolean, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum = pb.tex2DArray().sampleType('unfilterable-float').uniform(0);\r\n this.ifft =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = pb.vec4();\r\n this.$outputs.ifft1 = pb.vec4();\r\n this.$outputs.ifft2 = pb.vec4();\r\n this.$outputs.ifft3 = pb.vec4();\r\n this.spectrum0 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum1 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum2 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum3 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = pb.vec4();\r\n this.$outputs.ifft5 = pb.vec4();\r\n this.spectrum4 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum5 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n }\r\n this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.phase = pb.int().uniform(0);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n for (let x = 0; x <= 5; x++) {\r\n if (x < 4 && limit === 2) {\r\n continue;\r\n }\r\n if (x > 3 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`twiddle${x}`, [pb.vec4('texelButt'), pb.int('x')], function () {\r\n if (useComputeShader) {\r\n this.$l.texelA = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(this.x, pb.int(this.texelButt.b)),\r\n x,\r\n 0\r\n );\r\n this.$l.texelB = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(this.x, pb.int(this.texelButt.a)),\r\n x,\r\n 0\r\n );\r\n } else {\r\n this.$l.texelA = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(this.x, pb.int(this.texelButt.b)),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(this.x, pb.int(this.texelButt.a)),\r\n 0\r\n );\r\n }\r\n this.$l.w = Complex(this.texelButt.r, this.texelButt.g);\r\n this.$l.a1 = Complex(this.texelA.x, this.texelA.y);\r\n this.$l.b1 = Complex(this.texelB.x, this.texelB.y);\r\n // Unnormalized butterfly: per-stage 0.5 scaling would push fp16\r\n // intermediates into the subnormal range; unscaled they stay at metre scale.\r\n this.$l.r1 = this.add(this.a1, this.mul(this.b1, this.w));\r\n this.$l.a2 = Complex(this.texelA.z, this.texelA.w);\r\n this.$l.b2 = Complex(this.texelB.z, this.texelB.w);\r\n this.$l.r2 = this.add(this.a2, this.mul(this.b2, this.w));\r\n this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));\r\n });\r\n }\r\n pb.main(function () {\r\n this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);\r\n this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);\r\n this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.y), 0);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n this.twiddle0(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n this.twiddle1(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n this.twiddle2(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 3,\r\n this.twiddle3(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 4,\r\n this.twiddle4(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 5,\r\n this.twiddle5(this.texelButt, this.x)\r\n );\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = this.twiddle0(this.texelButt, this.x);\r\n this.$outputs.ifft1 = this.twiddle1(this.texelButt, this.x);\r\n this.$outputs.ifft2 = this.twiddle2(this.texelButt, this.x);\r\n this.$outputs.ifft3 = this.twiddle3(this.texelButt, this.x);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = this.twiddle4(this.texelButt, this.x);\r\n this.$outputs.ifft5 = this.twiddle5(this.texelButt, this.x);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_PreFFT2';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramFFT2H(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(useComputeShader: boolean, fmt: TextureFormat) {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum = pb.tex2DArray().sampleType('unfilterable-float').uniform(0);\r\n this.ifft =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = pb.vec4();\r\n this.$outputs.ifft1 = pb.vec4();\r\n this.$outputs.ifft2 = pb.vec4();\r\n this.$outputs.ifft3 = pb.vec4();\r\n this.spectrum0 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum1 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum2 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum3 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = pb.vec4();\r\n this.$outputs.ifft5 = pb.vec4();\r\n this.spectrum4 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum5 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n }\r\n this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.phase = pb.int().uniform(0);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n for (let x = 0; x <= 5; x++) {\r\n if (x < 4 && limit === 2) {\r\n continue;\r\n }\r\n if (x > 3 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`twiddle${x}`, [pb.vec4('texelButt'), pb.int('y')], function () {\r\n if (useComputeShader) {\r\n this.$l.texelA = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(pb.int(this.texelButt.b), this.y),\r\n x,\r\n 0\r\n );\r\n this.$l.texelB = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(pb.int(this.texelButt.a), this.y),\r\n x,\r\n 0\r\n );\r\n } else {\r\n this.$l.texelA = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(pb.int(this.texelButt.b), this.y),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(pb.int(this.texelButt.a), this.y),\r\n 0\r\n );\r\n }\r\n this.$l.w = Complex(this.texelButt.r, this.texelButt.g);\r\n this.$l.a1 = Complex(this.texelA.x, this.texelA.y);\r\n this.$l.b1 = Complex(this.texelB.x, this.texelB.y);\r\n // Unnormalized butterfly: per-stage 0.5 scaling would push fp16\r\n // intermediates into the subnormal range; unscaled they stay at metre scale.\r\n this.$l.r1 = this.add(this.a1, this.mul(this.b1, this.w));\r\n this.$l.a2 = Complex(this.texelA.z, this.texelA.w);\r\n this.$l.b2 = Complex(this.texelB.z, this.texelB.w);\r\n this.$l.r2 = this.add(this.a2, this.mul(this.b2, this.w));\r\n this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));\r\n });\r\n }\r\n pb.main(function () {\r\n this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);\r\n this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);\r\n this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.x), 0);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n this.twiddle0(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n this.twiddle1(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n this.twiddle2(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 3,\r\n this.twiddle3(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 4,\r\n this.twiddle4(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 5,\r\n this.twiddle5(this.texelButt, this.y)\r\n );\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = this.twiddle0(this.texelButt, this.y);\r\n this.$outputs.ifft1 = this.twiddle1(this.texelButt, this.y);\r\n this.$outputs.ifft2 = this.twiddle2(this.texelButt, this.y);\r\n this.$outputs.ifft3 = this.twiddle3(this.texelButt, this.y);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = this.twiddle4(this.texelButt, this.y);\r\n this.$outputs.ifft5 = this.twiddle5(this.texelButt, this.y);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n let program: GPUProgram;\r\n if (useComputeShader) {\r\n program = getDevice().buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n } else {\r\n program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n })!;\r\n }\r\n program.name = '@Water_FFT2H';\r\n return program;\r\n}\r\n"],"names":["getFragCoord","scope","useComputeShader","$builtins","globalInvocationId","xy","fragCoord","WaterShaderImpl","_vertexFunc","_shadingFunc","_setupUniformsFunc","setupUniformsFunc","vertexFunc","shadingFunc","setupUniforms","call","vertex","pos","xz","waveGenerator","getVertexNormal","pb","$builder","func","vec2","$l","uv0","div","sizes","x","uv1","y","uv2","z","_sx_sz_dxdx_dzdz0","textureArraySampleLevel","dataTexture","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","textureSampleLevel","sx_sz_dxdx_dzdz0","sx_sz_dxdx_dzdz1","sx_sz_dxdx_dzdz2","sx","add","sz","dxdx_dzdz","mul","zw","croppinesses","slope","normal","normalize","vec3","neg","$return","shading","worldPos","worldNormal","foamFactor","discardable","createProgramOcean","shadingImpl","program","getDevice","buildRenderProgram","$inputs","position","attrib","$outputs","outPos","outNormal","outXZ","flip","int","uniform","viewProjMatrix","mat4","worldMatrix","level","float","main","vec4","calcVertexPositionAndNormal","$if","notEqual","fragment","outColor","region","or","any","lessThan","greaterThan","n","calcFragmentNormalAndFoam","xyz","w","name","createProgramPostFFT2","threadGroupSize","targetFormat","limit","getComputeFunc","fmt","output","texStorage2DArray","rgba32float","storage","rgba16float","ifft","tex2DArray","dx_hy_dz_dxdz0","dx_hy_dz_dxdz1","ifft0","tex2D","ifft1","ifft2","ifft3","dx_hy_dz_dxdz2","ifft4","ifft5","fragPos","p","m","sub","mod","uv","ivec2","i","textureArrayStore","textureArrayLoad","textureLoad","buildComputeProgram","workgroupSize","compute","createProgramHk","spectrum","spectrum0","spectrum1","spectrum2","spectrum3","spectrum4","spectrum5","resolution","t","h0Texture","h0Texture0","h0Texture1","h0Texture2","RATIO","g","Complex","defineStruct","Spectrum","a","re","b","im","cos","sin","v","hy","dx","dz","dxdx","dxdz","dzdz","lessThanEqual","size","k","Math","PI","kLen","length","sqrt","h0Texel","e","eix","h0","h0MinConj","conj","scale","out","dx_hy","spec","dz_dxdz","sx_sz","part0","part1","fragXY","s0","s1","s2","s3","spec0","getSpectrum0","spec1","getSpectrum1","compressSpectrum","s4","s5","spec2","getSpectrum2","createProgramH0","noise","wind","alignment","cascade0","cascade1","cascade2","offset","uvNeg","noise0","rg","noise1","u0","v0","log","u1","v1","k2","dot","all","abs","minK","L","L2","h0k","A","exp","h0mk","pow","max","coord","rnd0","gauss","rnd1","rnd2","phillips","createProgramFFT2V","sampleType","butterfly","phase","texelA","texelButt","texelB","r","a1","b1","r1","a2","b2","r2","twiddle0","twiddle1","twiddle2","twiddle3","twiddle4","twiddle5","createProgramFFT2H"],"mappings":"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"}
|
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Share of the water's scattering treated as molecular rather than particulate.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* enough suspended matter to shift the balance, but the medium's albedo is
|
|
6
|
-
* already the knob for that, so this stays fixed.
|
|
4
|
+
* Fixed; the medium's albedo is the user-facing control for water colour.
|
|
7
5
|
* @internal
|
|
8
6
|
*/ const MOLECULAR_SCATTER_FRACTION = 0.12;
|
|
9
7
|
/**
|
|
10
8
|
* Phase function of the water body: a molecular lobe and a particulate one.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* above because of molecular scattering, which is near-symmetric.
|
|
17
|
-
*
|
|
18
|
-
* The split is achromatic - the medium's own albedo already carries the author's
|
|
19
|
-
* colour - and only the shape differs. Both lobes are normalized to integrate to
|
|
20
|
-
* 1 over the sphere; the 1/4pi is part of that.
|
|
21
|
-
*
|
|
22
|
-
* Shared by the surface shading and the underwater light shafts, which are two
|
|
23
|
-
* views of one medium: a shaft that scattered by a different law than the water
|
|
24
|
-
* it runs through would not line up with the body colour around it.
|
|
10
|
+
* The near-symmetric molecular (Rayleigh) lobe is what returns light to a camera
|
|
11
|
+
* looking down under a high sun; a forward-peaked HG lobe alone returns almost
|
|
12
|
+
* nothing there. The split is achromatic and both lobes integrate to 1 over the
|
|
13
|
+
* sphere. Shared by the surface shading and the underwater light shafts.
|
|
25
14
|
*
|
|
26
15
|
* @param scope - Current shader scope.
|
|
27
16
|
* @param cosTheta - Cosine between the light's travel and the scattered direction.
|
|
@@ -37,11 +26,8 @@
|
|
|
37
26
|
], function() {
|
|
38
27
|
// Henyey-Greenstein: the particulate lobe, forward-peaked at g > 0.
|
|
39
28
|
this.$l.g2 = pb.mul(this.g, this.g);
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
// the floor because pow(1e-4, 1.5) is about 1e-6 and the reciprocal of that
|
|
43
|
-
// is a phase in the tens of thousands - a caller passing a slightly
|
|
44
|
-
// unnormalised direction gets a dim lobe, not a blown-out one.
|
|
29
|
+
// Clamp the cosine so a slightly unnormalised direction cannot drive the
|
|
30
|
+
// denominator to the floor and blow the phase up.
|
|
45
31
|
this.$l.cosClamped = pb.clamp(this.cosTheta, -1, 1);
|
|
46
32
|
this.$l.denom = pb.add(1, this.g2, pb.mul(-2, this.g, this.cosClamped));
|
|
47
33
|
this.$l.mie = pb.div(pb.sub(1, this.g2), pb.mul(4 * Math.PI, pb.pow(pb.max(this.denom, 1e-4), 1.5)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"water_medium.js","sources":["../../src/shaders/water_medium.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Share of the water's scattering treated as molecular rather than particulate.\r\n *\r\n *
|
|
1
|
+
{"version":3,"file":"water_medium.js","sources":["../../src/shaders/water_medium.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Share of the water's scattering treated as molecular rather than particulate.\r\n *\r\n * Fixed; the medium's albedo is the user-facing control for water colour.\r\n * @internal\r\n */\r\nexport const MOLECULAR_SCATTER_FRACTION = 0.12;\r\n\r\n/**\r\n * Phase function of the water body: a molecular lobe and a particulate one.\r\n *\r\n * The near-symmetric molecular (Rayleigh) lobe is what returns light to a camera\r\n * looking down under a high sun; a forward-peaked HG lobe alone returns almost\r\n * nothing there. The split is achromatic and both lobes integrate to 1 over the\r\n * sphere. Shared by the surface shading and the underwater light shafts.\r\n *\r\n * @param scope - Current shader scope.\r\n * @param cosTheta - Cosine between the light's travel and the scattered direction.\r\n * @param g - Mean cosine of a single particulate scattering event.\r\n * @returns Phase value per steradian.\r\n * @internal\r\n */\r\nexport function waterScatterPhase(\r\n scope: PBInsideFunctionScope,\r\n cosTheta: PBShaderExp,\r\n g: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_waterScatterPhase';\r\n pb.func(funcName, [pb.float('cosTheta'), pb.float('g')], function () {\r\n // Henyey-Greenstein: the particulate lobe, forward-peaked at g > 0.\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n // Clamp the cosine so a slightly unnormalised direction cannot drive the\r\n // denominator to the floor and blow the phase up.\r\n this.$l.cosClamped = pb.clamp(this.cosTheta, -1, 1);\r\n this.$l.denom = pb.add(1, this.g2, pb.mul(-2, this.g, this.cosClamped));\r\n this.$l.mie = pb.div(pb.sub(1, this.g2), pb.mul(4 * Math.PI, pb.pow(pb.max(this.denom, 1e-4), 1.5)));\r\n // Rayleigh: symmetric about 90 degrees. 3/(16 pi) * (1 + cos^2).\r\n this.$l.rayleigh = pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosClamped, this.cosClamped)));\r\n this.$return(\r\n pb.add(\r\n pb.mul(this.rayleigh, MOLECULAR_SCATTER_FRACTION),\r\n pb.mul(this.mie, 1 - MOLECULAR_SCATTER_FRACTION)\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](cosTheta, g) as PBShaderExp;\r\n}\r\n"],"names":["MOLECULAR_SCATTER_FRACTION","waterScatterPhase","scope","cosTheta","g","pb","$builder","funcName","func","float","$l","g2","mul","cosClamped","clamp","denom","add","mie","div","sub","Math","PI","pow","max","rayleigh","$return","getGlobalScope"],"mappings":"AAEA;;;;;IAMaA,MAAAA,0BAAAA,GAA6B;AAE1C;;;;;;;;;;;;;AAaC,IACM,SAASC,iBAAAA,CACdC,KAA4B,EAC5BC,QAAqB,EACrBC,CAAc,EAAA;IAEd,MAAMC,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,qBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGI,KAAK,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;;AAEvD,QAAA,IAAI,CAACC,EAAE,CAACC,EAAE,GAAGN,EAAGO,CAAAA,GAAG,CAAC,IAAI,CAACR,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA;;;AAGlC,QAAA,IAAI,CAACM,EAAE,CAACG,UAAU,GAAGR,EAAAA,CAAGS,KAAK,CAAC,IAAI,CAACX,QAAQ,EAAE,EAAI,EAAA,CAAA,CAAA;QACjD,IAAI,CAACO,EAAE,CAACK,KAAK,GAAGV,GAAGW,GAAG,CAAC,CAAG,EAAA,IAAI,CAACL,EAAE,EAAEN,EAAGO,CAAAA,GAAG,CAAC,EAAI,EAAA,IAAI,CAACR,CAAC,EAAE,IAAI,CAACS,UAAU,CAAA,CAAA;AACrE,QAAA,IAAI,CAACH,EAAE,CAACO,GAAG,GAAGZ,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGc,GAAG,CAAC,CAAG,EAAA,IAAI,CAACR,EAAE,CAAA,EAAGN,EAAGO,CAAAA,GAAG,CAAC,CAAA,GAAIQ,IAAKC,CAAAA,EAAE,EAAEhB,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGkB,GAAG,CAAC,IAAI,CAACR,KAAK,EAAE,IAAO,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA;;AAE9F,QAAA,IAAI,CAACL,EAAE,CAACc,QAAQ,GAAGnB,EAAAA,CAAGO,GAAG,CAAC,CAAK,IAAA,EAAKQ,GAAAA,IAAAA,CAAKC,EAAC,CAAIhB,EAAAA,EAAAA,CAAGW,GAAG,CAAC,CAAGX,EAAAA,EAAAA,CAAGO,GAAG,CAAC,IAAI,CAACC,UAAU,EAAE,IAAI,CAACA,UAAU,CAAA,CAAA,CAAA;QAC/F,IAAI,CAACY,OAAO,CACVpB,EAAAA,CAAGW,GAAG,CACJX,EAAAA,CAAGO,GAAG,CAAC,IAAI,CAACY,QAAQ,EAAExB,6BACtBK,EAAGO,CAAAA,GAAG,CAAC,IAAI,CAACK,GAAG,EAAE,CAAIjB,GAAAA,0BAAAA,CAAAA,CAAAA,CAAAA;AAG3B,KAAA,CAAA;AACA,IAAA,OAAOK,GAAGqB,cAAc,EAAE,CAACnB,QAAAA,CAAS,CAACJ,QAAUC,EAAAA,CAAAA,CAAAA;AACjD;;;;"}
|