@zephyr3d/scene 0.9.26 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noise.js","sources":["../../src/shaders/noise.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Generate random float value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash11(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash11';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.x = pb.fract(pb.mul(this.p, 0.1031));\r\n this.x = pb.mul(this.x, pb.add(this.x, 33.33));\r\n this.x = pb.mul(this.x, pb.add(this.x, this.x));\r\n this.$return(pb.fract(this.x));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash21(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash21';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash31(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash31';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.zyx, pb.vec3(31.32))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash12(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash12';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash22(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash22';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash32(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash32';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash13(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash13';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash23(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash23';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p.xyx));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash33(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash33';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate uniform distributed white noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function whiteNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_whiteNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$return(pb.fract(pb.mul(pb.sin(pb.dot(this.p, pb.vec2(12.9898, 78.233))), 43758.5453)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate value noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function valueNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_valueNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.i = pb.floor(this.p);\r\n this.$l.f = pb.fract(this.p);\r\n this.f = pb.mul(this.f, this.f, pb.sub(pb.vec2(3), pb.mul(this.f, 2)));\r\n this.$l.c0 = this.i;\r\n this.$l.c1 = pb.add(this.i, pb.vec2(1, 0));\r\n this.$l.c2 = pb.add(this.i, pb.vec2(0, 1));\r\n this.$l.c3 = pb.add(this.i, pb.vec2(1));\r\n this.$l.r0 = whiteNoise(this, this.c0);\r\n this.$l.r1 = whiteNoise(this, this.c1);\r\n this.$l.r2 = whiteNoise(this, this.c2);\r\n this.$l.r3 = whiteNoise(this, this.c3);\r\n this.$return(pb.mix(pb.mix(this.r0, this.r1, this.f.x), pb.mix(this.r2, this.r3, this.f.x), this.f.y));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function gradient(scope: PBInsideFunctionScope, p: PBShaderExp, t: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gradient2f';\r\n pb.func(funcName, [pb.vec2('p'), pb.float('t')], function () {\r\n this.$l.rand = hash21(this, this.p);\r\n this.$l.angle = pb.mul(pb.add(this.t, Math.PI * 2), this.rand);\r\n this.$return(pb.vec2(pb.cos(this.angle), pb.sin(this.angle)));\r\n });\r\n return scope[funcName](p, t) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 2d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise2D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n return perlinNoise3D(scope, scope.$builder.vec3(p, 0));\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 3d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcNameNoise = 'Z_perlinNoise3D';\r\n pb.func(funcNameNoise, [pb.vec3('p')], function () {\r\n this.i = pb.floor(this.p.xy);\r\n this.f = pb.sub(this.p.xy, this.i);\r\n this.u = pb.mul(this.f, this.f, pb.sub(3, pb.mul(this.f, 2)));\r\n this.h1 = gradient(this, this.i, this.p.z);\r\n this.h2 = gradient(this, pb.add(this.i, pb.vec2(1, 0)), this.p.z);\r\n this.h3 = gradient(this, pb.add(this.i, pb.vec2(0, 1)), this.p.z);\r\n this.h4 = gradient(this, pb.add(this.i, pb.vec2(1, 1)), this.p.z);\r\n this.$l.tl = pb.dot(this.h1, this.f);\r\n this.$l.tr = pb.dot(this.h2, pb.sub(this.f, pb.vec2(1, 0)));\r\n this.$l.bl = pb.dot(this.h3, pb.sub(this.f, pb.vec2(0, 1)));\r\n this.$l.br = pb.dot(this.h4, pb.sub(this.f, pb.vec2(1, 1)));\r\n this.$l.noise = pb.mix(pb.mix(this.tl, this.tr, this.u.x), pb.mix(this.bl, this.br, this.u.x), this.u.y);\r\n this.noise = pb.add(pb.mul(this.noise, 0.5), 0.5);\r\n this.$return(this.noise);\r\n });\r\n return scope[funcNameNoise](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * worley 3d noise\r\n *\r\n * @param scope - current shader scope\r\n * @param uv - uv coordinate\r\n * @param freq - frequency\r\n *\r\n * @returns worley noise value\r\n *\r\n * @public\r\n */\r\nexport function worleyNoise(scope: PBInsideFunctionScope, uv: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcNameHash = 'Z_worleyHash';\r\n // https://www.shadertoy.com/view/4sc3z2\r\n pb.func(funcNameHash, [pb.vec3('p')], function () {\r\n if (1) {\r\n this.$l.mod3 = pb.vec3(0.1031, 0.11369, 0.13787);\r\n this.$l.p3 = pb.fract(pb.mul(this.p, this.mod3));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yxz, pb.vec3(19.19))));\r\n this.$return(\r\n pb.sub(\r\n pb.mul(\r\n pb.fract(\r\n pb.vec3(\r\n pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z),\r\n pb.mul(pb.add(this.p3.x, this.p3.z), this.p3.y),\r\n pb.mul(pb.add(this.p3.y, this.p3.z), this.p3.x)\r\n )\r\n ),\r\n 2\r\n ),\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.UI0 = pb.uint(1597334673);\r\n this.$l.UI1 = pb.uint(3812015801);\r\n this.$l.UI2 = pb.uvec2(this.UI0, this.UI1);\r\n this.$l.UI3 = pb.uvec3(this.UI0, this.UI1, pb.uint(2798796415));\r\n this.$l.UIF = pb.div(1, pb.float(pb.uint(0xffffffff)));\r\n this.$l.q = pb.mul(pb.uvec3(pb.ivec3(this.p)), this.UI3);\r\n this.q = pb.mul(pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z), this.UI3);\r\n this.$return(pb.sub(pb.mul(pb.vec3(this.q), this.UIF, 2), pb.vec3(1)));\r\n }\r\n });\r\n const funcNameNoise = 'Z_worleyNoise';\r\n pb.func(funcNameNoise, [pb.vec3('uv'), pb.float('freq')], function () {\r\n this.$l.id = pb.floor(this.uv);\r\n this.$l.p = pb.fract(this.uv);\r\n this.$l.minDist = pb.float(10000);\r\n this.$for(pb.int('x'), -1, 2, function () {\r\n this.$for(pb.int('y'), -1, 2, function () {\r\n this.$for(pb.int('z'), -1, 2, function () {\r\n this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));\r\n\r\n if (1 /* tilable */) {\r\n this.$l.h = pb.add(\r\n pb.mul(this[funcNameHash](pb.mod(pb.add(this.id, this.offset), pb.vec3(this.freq))), 0.4),\r\n pb.vec3(0.3)\r\n );\r\n } else {\r\n this.$l.h = pb.add(pb.mul(this[funcNameHash](pb.add(this.id, this.offset)), 0.4), pb.vec3(0.3));\r\n }\r\n this.h = pb.add(this.h, this.offset);\r\n this.$l.d = pb.sub(this.p, this.h);\r\n this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));\r\n });\r\n });\r\n });\r\n this.$return(pb.sub(1, this.minDist));\r\n });\r\n return pb.getGlobalScope()[funcNameNoise](uv, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate worley FBM\r\n *\r\n * @param scope - current shader scope\r\n * @param p - noise coordinate\r\n * @param freq - frequency\r\n * @returns worley FBM value\r\n *\r\n * @public\r\n */\r\nexport function worleyFBM(scope: PBInsideFunctionScope, p: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_worleyFBM';\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq')], function () {\r\n this.$l.n1 = worleyNoise(this, pb.mul(this.p, this.freq), this.freq);\r\n this.$l.n2 = worleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2));\r\n this.$l.n3 = worleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4));\r\n this.$l.fbm = pb.add(pb.mul(this.n1, 0.625), pb.mul(this.n2, 0.25), pb.mul(this.n3, 0.125));\r\n this.$return(pb.max(pb.sub(pb.mul(this.fbm, 1.1), pb.vec3(0.1)), pb.vec3(0)));\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function noise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_noise3d';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.$l.p3 = pb.add(this.p3, pb.vec3(pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33)))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate smooth 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function smoothNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_smoothNoise3D';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.cell = pb.floor(this.p);\r\n this.$l.local = pb.fract(this.p);\r\n this.$l.local = pb.mul(this.local, pb.mul(this.local, pb.sub(pb.vec3(3), pb.mul(this.local, 2))));\r\n this.$l.ldb = noise3D(this, this.cell);\r\n this.$l.rdb = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 0)));\r\n this.$l.ldf = noise3D(this, pb.add(this.cell, pb.vec3(0, 0, 1)));\r\n this.$l.rdf = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 1)));\r\n this.$l.lub = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 0)));\r\n this.$l.rub = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 0)));\r\n this.$l.luf = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 1)));\r\n this.$l.ruf = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 1)));\r\n this.$return(\r\n pb.mix(\r\n pb.mix(\r\n pb.mix(this.ldb, this.rdb, this.local.x),\r\n pb.mix(this.ldf, this.rdf, this.local.x),\r\n this.local.z\r\n ),\r\n pb.mix(\r\n pb.mix(this.lub, this.rub, this.local.x),\r\n pb.mix(this.luf, this.ruf, this.local.x),\r\n this.local.z\r\n ),\r\n this.local.y\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Calculate interleaved gradient noise\r\n *\r\n * @param scope - current shader scope\r\n * @param c - 2d position at where to calculate noise\r\n * @returns noise value\r\n *\r\n * @public\r\n */\r\nexport function interleavedGradientNoise(scope: PBInsideFunctionScope, c: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const x = 0.06711056;\r\n const y = 0.00583715;\r\n const z = 52.9829189;\r\n return pb.fract(pb.mul(z, pb.fract(pb.dot(c, pb.vec2(x, y))))) as PBShaderExp;\r\n}\r\n"],"names":["hash11","scope","p","pb","$builder","funcName","func","float","$l","x","fract","mul","add","$return","hash21","vec2","p3","xyx","dot","yzx","vec3","y","z","hash31","zyx","hash12","xx","yz","zy","hash22","hash32","hash13","xxy","yzz","hash23","hash33","whiteNoise","sin","valueNoise","i","floor","f","sub","c0","c1","c2","c3","r0","r1","r2","r3","mix","gradient","t","rand","angle","Math","PI","cos","perlinNoise2D","perlinNoise3D","funcNameNoise","xy","u","h1","h2","h3","h4","tl","tr","bl","br","noise","worleyNoise","uv","freq","funcNameHash","mod3","yxz","id","minDist","$for","int","offset","h","mod","d","min","getGlobalScope","worleyFBM","n1","n2","n3","fbm","max","noise3D","smoothNoise3D","cell","local","ldb","rdb","ldf","rdf","lub","rub","luf","ruf","interleavedGradientNoise","c"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"noise.js","sources":["../../src/shaders/noise.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Generate random float value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash11(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash11';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.x = pb.fract(pb.mul(this.p, 0.1031));\r\n this.x = pb.mul(this.x, pb.add(this.x, 33.33));\r\n this.x = pb.mul(this.x, pb.add(this.x, this.x));\r\n this.$return(pb.fract(this.x));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash21(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash21';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function hash31(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash31';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.zyx, pb.vec3(31.32))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash12(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash12';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash22(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash22';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p.xyx, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec2 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec2 value\r\n *\r\n * @public\r\n */\r\nexport function hash32(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash32';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, pb.vec3(0.1031, 0.103, 0.0973)));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xx, this.p3.yz), this.p3.zy)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a float\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash13(scope: PBInsideFunctionScope, p: number | PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash13';\r\n pb.func(funcName, [pb.float('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash23(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash23';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p.xyx));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random vec3 value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random vec3 value\r\n *\r\n * @public\r\n */\r\nexport function hash33(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_hash33';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(pb.vec3(0.1031, 0.103, 0.0973), this.p));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.xxy, this.p3.yzz), this.p3.zyx)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate uniform distributed white noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function whiteNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_whiteNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$return(pb.fract(pb.mul(pb.sin(pb.dot(this.p, pb.vec2(12.9898, 78.233))), 43758.5453)));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate value noise from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function valueNoise(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_valueNoise';\r\n pb.func(funcName, [pb.vec2('p')], function () {\r\n this.$l.i = pb.floor(this.p);\r\n this.$l.f = pb.fract(this.p);\r\n this.f = pb.mul(this.f, this.f, pb.sub(pb.vec2(3), pb.mul(this.f, 2)));\r\n this.$l.c0 = this.i;\r\n this.$l.c1 = pb.add(this.i, pb.vec2(1, 0));\r\n this.$l.c2 = pb.add(this.i, pb.vec2(0, 1));\r\n this.$l.c3 = pb.add(this.i, pb.vec2(1));\r\n this.$l.r0 = whiteNoise(this, this.c0);\r\n this.$l.r1 = whiteNoise(this, this.c1);\r\n this.$l.r2 = whiteNoise(this, this.c2);\r\n this.$l.r3 = whiteNoise(this, this.c3);\r\n this.$return(pb.mix(pb.mix(this.r0, this.r1, this.f.x), pb.mix(this.r2, this.r3, this.f.x), this.f.y));\r\n });\r\n return scope[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate random float value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - random seed\r\n * @returns random float value\r\n *\r\n * @public\r\n */\r\nexport function gradient(scope: PBInsideFunctionScope, p: PBShaderExp, t: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gradient2f';\r\n pb.func(funcName, [pb.vec2('p'), pb.float('t')], function () {\r\n this.$l.rand = hash21(this, this.p);\r\n this.$l.angle = pb.mul(pb.add(this.t, Math.PI * 2), this.rand);\r\n this.$return(pb.vec2(pb.cos(this.angle), pb.sin(this.angle)));\r\n });\r\n return scope[funcName](p, t) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec2\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 2d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise2D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n return perlinNoise3D(scope, scope.$builder.vec3(p, 0));\r\n}\r\n\r\n/**\r\n * Generate a float perlin noise value from a vec3\r\n *\r\n * @param scope - Current shader scope\r\n * @param p - 3d vector\r\n * @returns a float noise value\r\n *\r\n * @public\r\n */\r\nexport function perlinNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcNameNoise = 'Z_perlinNoise3D';\r\n pb.func(funcNameNoise, [pb.vec3('p')], function () {\r\n this.i = pb.floor(this.p.xy);\r\n this.f = pb.sub(this.p.xy, this.i);\r\n this.u = pb.mul(this.f, this.f, pb.sub(3, pb.mul(this.f, 2)));\r\n this.h1 = gradient(this, this.i, this.p.z);\r\n this.h2 = gradient(this, pb.add(this.i, pb.vec2(1, 0)), this.p.z);\r\n this.h3 = gradient(this, pb.add(this.i, pb.vec2(0, 1)), this.p.z);\r\n this.h4 = gradient(this, pb.add(this.i, pb.vec2(1, 1)), this.p.z);\r\n this.$l.tl = pb.dot(this.h1, this.f);\r\n this.$l.tr = pb.dot(this.h2, pb.sub(this.f, pb.vec2(1, 0)));\r\n this.$l.bl = pb.dot(this.h3, pb.sub(this.f, pb.vec2(0, 1)));\r\n this.$l.br = pb.dot(this.h4, pb.sub(this.f, pb.vec2(1, 1)));\r\n this.$l.noise = pb.mix(pb.mix(this.tl, this.tr, this.u.x), pb.mix(this.bl, this.br, this.u.x), this.u.y);\r\n this.noise = pb.add(pb.mul(this.noise, 0.5), 0.5);\r\n this.$return(this.noise);\r\n });\r\n return scope[funcNameNoise](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * worley 3d noise\r\n *\r\n * @param scope - current shader scope\r\n * @param uv - uv coordinate\r\n * @param freq - frequency\r\n *\r\n * @returns worley noise value\r\n *\r\n * @public\r\n */\r\nexport function worleyNoise(scope: PBInsideFunctionScope, uv: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcNameHash = 'Z_worleyHash';\r\n // https://www.shadertoy.com/view/4sc3z2\r\n pb.func(funcNameHash, [pb.vec3('p')], function () {\r\n if (1) {\r\n this.$l.mod3 = pb.vec3(0.1031, 0.11369, 0.13787);\r\n this.$l.p3 = pb.fract(pb.mul(this.p, this.mod3));\r\n this.p3 = pb.add(this.p3, pb.dot(this.p3, pb.add(this.p3.yxz, pb.vec3(19.19))));\r\n this.$return(\r\n pb.sub(\r\n pb.mul(\r\n pb.fract(\r\n pb.vec3(\r\n pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z),\r\n pb.mul(pb.add(this.p3.x, this.p3.z), this.p3.y),\r\n pb.mul(pb.add(this.p3.y, this.p3.z), this.p3.x)\r\n )\r\n ),\r\n 2\r\n ),\r\n 1\r\n )\r\n );\r\n } else {\r\n this.$l.UI0 = pb.uint(1597334673);\r\n this.$l.UI1 = pb.uint(3812015801);\r\n this.$l.UI2 = pb.uvec2(this.UI0, this.UI1);\r\n this.$l.UI3 = pb.uvec3(this.UI0, this.UI1, pb.uint(2798796415));\r\n this.$l.UIF = pb.div(1, pb.float(pb.uint(0xffffffff)));\r\n this.$l.q = pb.mul(pb.uvec3(pb.ivec3(this.p)), this.UI3);\r\n this.q = pb.mul(pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z), this.UI3);\r\n this.$return(pb.sub(pb.mul(pb.vec3(this.q), this.UIF, 2), pb.vec3(1)));\r\n }\r\n });\r\n const funcNameNoise = 'Z_worleyNoise';\r\n pb.func(funcNameNoise, [pb.vec3('uv'), pb.float('freq')], function () {\r\n this.$l.id = pb.floor(this.uv);\r\n this.$l.p = pb.fract(this.uv);\r\n this.$l.minDist = pb.float(10000);\r\n this.$for(pb.int('x'), -1, 2, function () {\r\n this.$for(pb.int('y'), -1, 2, function () {\r\n this.$for(pb.int('z'), -1, 2, function () {\r\n this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));\r\n\r\n if (1 /* tilable */) {\r\n // Floored wrap: pb.mod is WGSL's truncated `%` on WebGPU, which leaves the neighbour\r\n // cell -1 at -1 instead of freq - 1 and breaks the tiling\r\n this.$l.cell = pb.add(this.id, this.offset);\r\n this.cell = pb.sub(\r\n this.cell,\r\n pb.mul(pb.vec3(this.freq), pb.floor(pb.div(this.cell, pb.vec3(this.freq))))\r\n );\r\n this.$l.h = pb.add(pb.mul(this[funcNameHash](this.cell), 0.4), pb.vec3(0.3));\r\n } else {\r\n this.$l.h = pb.add(pb.mul(this[funcNameHash](pb.add(this.id, this.offset)), 0.4), pb.vec3(0.3));\r\n }\r\n this.h = pb.add(this.h, this.offset);\r\n this.$l.d = pb.sub(this.p, this.h);\r\n this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));\r\n });\r\n });\r\n });\r\n this.$return(pb.sub(1, this.minDist));\r\n });\r\n return pb.getGlobalScope()[funcNameNoise](uv, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate worley FBM\r\n *\r\n * @param scope - current shader scope\r\n * @param p - noise coordinate\r\n * @param freq - frequency\r\n * @returns worley FBM value\r\n *\r\n * @public\r\n */\r\nexport function worleyFBM(scope: PBInsideFunctionScope, p: PBShaderExp, freq: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_worleyFBM';\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq')], function () {\r\n this.$l.n1 = worleyNoise(this, pb.mul(this.p, this.freq), this.freq);\r\n this.$l.n2 = worleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2));\r\n this.$l.n3 = worleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4));\r\n this.$l.fbm = pb.add(pb.mul(this.n1, 0.625), pb.mul(this.n2, 0.25), pb.mul(this.n3, 0.125));\r\n this.$return(pb.max(pb.sub(pb.mul(this.fbm, 1.1), pb.vec3(0.1)), pb.vec3(0)));\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function noise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_noise3d';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.p3 = pb.fract(pb.mul(this.p, 0.1031));\r\n this.$l.p3 = pb.add(this.p3, pb.vec3(pb.dot(this.p3, pb.add(this.p3.yzx, pb.vec3(33.33)))));\r\n this.$return(pb.fract(pb.mul(pb.add(this.p3.x, this.p3.y), this.p3.z)));\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n/**\r\n * Calculate smooth 3d noise by a 3d position\r\n *\r\n * @param scope - current shader scope\r\n * @param p - 3d position at where to calculate noise\r\n * @returns noise value between 0 and 1\r\n *\r\n * @public\r\n */\r\nexport function smoothNoise3D(scope: PBInsideFunctionScope, p: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_smoothNoise3D';\r\n pb.func(funcName, [pb.vec3('p')], function () {\r\n this.$l.cell = pb.floor(this.p);\r\n this.$l.local = pb.fract(this.p);\r\n this.$l.local = pb.mul(this.local, pb.mul(this.local, pb.sub(pb.vec3(3), pb.mul(this.local, 2))));\r\n this.$l.ldb = noise3D(this, this.cell);\r\n this.$l.rdb = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 0)));\r\n this.$l.ldf = noise3D(this, pb.add(this.cell, pb.vec3(0, 0, 1)));\r\n this.$l.rdf = noise3D(this, pb.add(this.cell, pb.vec3(1, 0, 1)));\r\n this.$l.lub = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 0)));\r\n this.$l.rub = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 0)));\r\n this.$l.luf = noise3D(this, pb.add(this.cell, pb.vec3(0, 1, 1)));\r\n this.$l.ruf = noise3D(this, pb.add(this.cell, pb.vec3(1, 1, 1)));\r\n this.$return(\r\n pb.mix(\r\n pb.mix(\r\n pb.mix(this.ldb, this.rdb, this.local.x),\r\n pb.mix(this.ldf, this.rdf, this.local.x),\r\n this.local.z\r\n ),\r\n pb.mix(\r\n pb.mix(this.lub, this.rub, this.local.x),\r\n pb.mix(this.luf, this.ruf, this.local.x),\r\n this.local.z\r\n ),\r\n this.local.y\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Calculate interleaved gradient noise\r\n *\r\n * @param scope - current shader scope\r\n * @param c - 2d position at where to calculate noise\r\n * @returns noise value\r\n *\r\n * @public\r\n */\r\nexport function interleavedGradientNoise(scope: PBInsideFunctionScope, c: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const x = 0.06711056;\r\n const y = 0.00583715;\r\n const z = 52.9829189;\r\n return pb.fract(pb.mul(z, pb.fract(pb.dot(c, pb.vec2(x, y))))) as PBShaderExp;\r\n}\r\n"],"names":["hash11","scope","p","pb","$builder","funcName","func","float","$l","x","fract","mul","add","$return","hash21","vec2","p3","xyx","dot","yzx","vec3","y","z","hash31","zyx","hash12","xx","yz","zy","hash22","hash32","hash13","xxy","yzz","hash23","hash33","whiteNoise","sin","valueNoise","i","floor","f","sub","c0","c1","c2","c3","r0","r1","r2","r3","mix","gradient","t","rand","angle","Math","PI","cos","perlinNoise2D","perlinNoise3D","funcNameNoise","xy","u","h1","h2","h3","h4","tl","tr","bl","br","noise","worleyNoise","uv","freq","funcNameHash","mod3","yxz","id","minDist","$for","int","offset","cell","div","h","d","min","getGlobalScope","worleyFBM","n1","n2","n3","fbm","max","noise3D","smoothNoise3D","local","ldb","rdb","ldf","rdf","lub","rub","luf","ruf","interleavedGradientNoise","c"],"mappings":"AAEA;;;;;;;;AAQC,IACM,SAASA,MAAOC,CAAAA,KAA4B,EAAEC,CAAuB,EAAA;IAC1E,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGI,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;AACjC,QAAA,IAAI,CAACC,EAAE,CAACC,CAAC,GAAGN,EAAGO,CAAAA,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,MAAA,CAAA,CAAA;AACpC,QAAA,IAAI,CAACO,CAAC,GAAGN,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACF,CAAC,EAAEN,GAAGS,GAAG,CAAC,IAAI,CAACH,CAAC,EAAE,KAAA,CAAA,CAAA;AACvC,QAAA,IAAI,CAACA,CAAC,GAAGN,GAAGQ,GAAG,CAAC,IAAI,CAACF,CAAC,EAAEN,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACH,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA,CAAA;QAC7C,IAAI,CAACI,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAAC,IAAI,CAACD,CAAC,CAAA,CAAA;AAC9B,KAAA,CAAA;IACA,OAAOR,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASY,MAAOb,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACjE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGY,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAChC,QAAA,IAAI,CAACP,EAAE,CAACQ,EAAE,GAAGb,GAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACT,CAAC,CAACe,GAAG,EAAE,MAAA,CAAA,CAAA;AACzC,QAAA,IAAI,CAACD,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACP,CAAC,EAAE,IAAI,CAACO,EAAE,CAACK,CAAC,CAAA,EAAG,IAAI,CAACL,EAAE,CAACM,CAAC,CAAA,CAAA,CAAA;AACtE,KAAA,CAAA;IACA,OAAOrB,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASqB,MAAOtB,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACjE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAChC,QAAA,IAAI,CAACZ,EAAE,CAACQ,EAAE,GAAGb,EAAGO,CAAAA,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,MAAA,CAAA,CAAA;AACrC,QAAA,IAAI,CAACc,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACQ,GAAG,EAAErB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACP,CAAC,EAAE,IAAI,CAACO,EAAE,CAACK,CAAC,CAAA,EAAG,IAAI,CAACL,EAAE,CAACM,CAAC,CAAA,CAAA,CAAA;AACtE,KAAA,CAAA;IACA,OAAOrB,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASuB,MAAOxB,CAAAA,KAA4B,EAAEC,CAAuB,EAAA;IAC1E,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGI,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;AACjC,QAAA,IAAI,CAACC,EAAE,CAACQ,EAAE,GAAGb,EAAAA,CAAGO,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAACR,EAAAA,CAAGiB,IAAI,CAAC,MAAA,EAAQ,OAAO,MAAS,CAAA,EAAA,IAAI,CAAClB,CAAC,CAAA,CAAA;AACnE,QAAA,IAAI,CAACc,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACU,EAAE,EAAE,IAAI,CAACV,EAAE,CAACW,EAAE,CAAA,EAAG,IAAI,CAACX,EAAE,CAACY,EAAE,CAAA,CAAA,CAAA;AACzE,KAAA,CAAA;IACA,OAAO3B,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAAS2B,MAAO5B,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACjE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGY,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAChC,IAAI,CAACP,EAAE,CAACQ,EAAE,GAAGb,EAAGO,CAAAA,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACT,CAAC,CAACe,GAAG,EAAEd,EAAGiB,CAAAA,IAAI,CAAC,MAAA,EAAQ,KAAO,EAAA,MAAA,CAAA,CAAA,CAAA;AAChE,QAAA,IAAI,CAACJ,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACU,EAAE,EAAE,IAAI,CAACV,EAAE,CAACW,EAAE,CAAA,EAAG,IAAI,CAACX,EAAE,CAACY,EAAE,CAAA,CAAA,CAAA;AACzE,KAAA,CAAA;IACA,OAAO3B,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAAS4B,MAAO7B,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACjE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAChC,QAAA,IAAI,CAACZ,EAAE,CAACQ,EAAE,GAAGb,EAAAA,CAAGO,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACT,CAAC,EAAEC,GAAGiB,IAAI,CAAC,QAAQ,KAAO,EAAA,MAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACJ,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACU,EAAE,EAAE,IAAI,CAACV,EAAE,CAACW,EAAE,CAAA,EAAG,IAAI,CAACX,EAAE,CAACY,EAAE,CAAA,CAAA,CAAA;AACzE,KAAA,CAAA;IACA,OAAO3B,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAAS6B,MAAO9B,CAAAA,KAA4B,EAAEC,CAAuB,EAAA;IAC1E,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGI,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;AACjC,QAAA,IAAI,CAACC,EAAE,CAACQ,EAAE,GAAGb,EAAAA,CAAGO,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAACR,EAAAA,CAAGiB,IAAI,CAAC,MAAA,EAAQ,OAAO,MAAS,CAAA,EAAA,IAAI,CAAClB,CAAC,CAAA,CAAA;AACnE,QAAA,IAAI,CAACc,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACgB,GAAG,EAAE,IAAI,CAAChB,EAAE,CAACiB,GAAG,CAAA,EAAG,IAAI,CAACjB,EAAE,CAACQ,GAAG,CAAA,CAAA,CAAA;AAC5E,KAAA,CAAA;IACA,OAAOvB,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASgC,MAAOjC,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACjE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGY,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAChC,IAAI,CAACP,EAAE,CAACQ,EAAE,GAAGb,EAAGO,CAAAA,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAGiB,CAAAA,IAAI,CAAC,MAAQ,EAAA,KAAA,EAAO,SAAS,IAAI,CAAClB,CAAC,CAACe,GAAG,CAAA,CAAA;AACvE,QAAA,IAAI,CAACD,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACgB,GAAG,EAAE,IAAI,CAAChB,EAAE,CAACiB,GAAG,CAAA,EAAG,IAAI,CAACjB,EAAE,CAACQ,GAAG,CAAA,CAAA,CAAA;AAC5E,KAAA,CAAA;IACA,OAAOvB,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASiC,MAAOlC,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACjE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAChC,QAAA,IAAI,CAACZ,EAAE,CAACQ,EAAE,GAAGb,EAAAA,CAAGO,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAACR,EAAAA,CAAGiB,IAAI,CAAC,MAAA,EAAQ,OAAO,MAAS,CAAA,EAAA,IAAI,CAAClB,CAAC,CAAA,CAAA;AACnE,QAAA,IAAI,CAACc,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACgB,GAAG,EAAE,IAAI,CAAChB,EAAE,CAACiB,GAAG,CAAA,EAAG,IAAI,CAACjB,EAAE,CAACQ,GAAG,CAAA,CAAA,CAAA;AAC5E,KAAA,CAAA;IACA,OAAOvB,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASkC,UAAWnC,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACrE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGY,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAChC,IAAI,CAACF,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAACR,EAAGkC,CAAAA,GAAG,CAAClC,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAAChB,CAAC,EAAEC,EAAGY,CAAAA,IAAI,CAAC,OAAA,EAAS,MAAW,CAAA,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA,CAAA;AACjF,KAAA,CAAA;IACA,OAAOd,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASoC,UAAWrC,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACrE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGY,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAChC,IAAI,CAACP,EAAE,CAAC+B,CAAC,GAAGpC,GAAGqC,KAAK,CAAC,IAAI,CAACtC,CAAC,CAAA;QAC3B,IAAI,CAACM,EAAE,CAACiC,CAAC,GAAGtC,GAAGO,KAAK,CAAC,IAAI,CAACR,CAAC,CAAA;QAC3B,IAAI,CAACuC,CAAC,GAAGtC,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAAC8B,CAAC,EAAE,IAAI,CAACA,CAAC,EAAEtC,EAAAA,CAAGuC,GAAG,CAACvC,EAAGY,CAAAA,IAAI,CAAC,CAAA,CAAA,EAAIZ,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAAC8B,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA;AAClE,QAAA,IAAI,CAACjC,EAAE,CAACmC,EAAE,GAAG,IAAI,CAACJ,CAAC;AACnB,QAAA,IAAI,CAAC/B,EAAE,CAACoC,EAAE,GAAGzC,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC2B,CAAC,EAAEpC,EAAGY,CAAAA,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;AACvC,QAAA,IAAI,CAACP,EAAE,CAACqC,EAAE,GAAG1C,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC2B,CAAC,EAAEpC,EAAGY,CAAAA,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;AACvC,QAAA,IAAI,CAACP,EAAE,CAACsC,EAAE,GAAG3C,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC2B,CAAC,EAAEpC,EAAAA,CAAGY,IAAI,CAAC,CAAA,CAAA,CAAA;QACpC,IAAI,CAACP,EAAE,CAACuC,EAAE,GAAGX,WAAW,IAAI,EAAE,IAAI,CAACO,EAAE,CAAA;QACrC,IAAI,CAACnC,EAAE,CAACwC,EAAE,GAAGZ,WAAW,IAAI,EAAE,IAAI,CAACQ,EAAE,CAAA;QACrC,IAAI,CAACpC,EAAE,CAACyC,EAAE,GAAGb,WAAW,IAAI,EAAE,IAAI,CAACS,EAAE,CAAA;QACrC,IAAI,CAACrC,EAAE,CAAC0C,EAAE,GAAGd,WAAW,IAAI,EAAE,IAAI,CAACU,EAAE,CAAA;QACrC,IAAI,CAACjC,OAAO,CAACV,EAAAA,CAAGgD,GAAG,CAAChD,EAAAA,CAAGgD,GAAG,CAAC,IAAI,CAACJ,EAAE,EAAE,IAAI,CAACC,EAAE,EAAE,IAAI,CAACP,CAAC,CAAChC,CAAC,GAAGN,EAAGgD,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAE,IAAI,CAACC,EAAE,EAAE,IAAI,CAACT,CAAC,CAAChC,CAAC,CAAA,EAAG,IAAI,CAACgC,CAAC,CAACpB,CAAC,CAAA,CAAA;AACtG,KAAA,CAAA;IACA,OAAOpB,KAAK,CAACI,QAAAA,CAAS,CAACH,CAAAA,CAAAA;AACzB;AAEA;;;;;;;;AAQC,IACM,SAASkD,QAAAA,CAASnD,KAA4B,EAAEC,CAAc,EAAEmD,CAAuB,EAAA;IAC5F,MAAMlD,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGY,IAAI,CAAC,GAAA,CAAA;AAAMZ,QAAAA,EAAAA,CAAGI,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAC/C,IAAI,CAACC,EAAE,CAAC8C,IAAI,GAAGxC,OAAO,IAAI,EAAE,IAAI,CAACZ,CAAC,CAAA;QAClC,IAAI,CAACM,EAAE,CAAC+C,KAAK,GAAGpD,EAAGQ,CAAAA,GAAG,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACyC,CAAC,EAAEG,IAAAA,CAAKC,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAACH,IAAI,CAAA;AAC7D,QAAA,IAAI,CAACzC,OAAO,CAACV,GAAGY,IAAI,CAACZ,GAAGuD,GAAG,CAAC,IAAI,CAACH,KAAK,CAAGpD,EAAAA,EAAAA,CAAGkC,GAAG,CAAC,IAAI,CAACkB,KAAK,CAAA,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOtD,KAAK,CAACI,QAAS,CAAA,CAACH,CAAGmD,EAAAA,CAAAA,CAAAA;AAC5B;AAEA;;;;;;;;AAQC,IACM,SAASM,aAAc1D,CAAAA,KAA4B,EAAEC,CAAc,EAAA;AACxE,IAAA,OAAO0D,cAAc3D,KAAOA,EAAAA,KAAAA,CAAMG,QAAQ,CAACgB,IAAI,CAAClB,CAAG,EAAA,CAAA,CAAA,CAAA;AACrD;AAEA;;;;;;;;AAQC,IACM,SAAS0D,aAAc3D,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACxE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMyD,aAAgB,GAAA,iBAAA;IACtB1D,EAAGG,CAAAA,IAAI,CAACuD,aAAe,EAAA;AAAC1D,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QACrC,IAAI,CAACmB,CAAC,GAAGpC,EAAGqC,CAAAA,KAAK,CAAC,IAAI,CAACtC,CAAC,CAAC4D,EAAE,CAAA;AAC3B,QAAA,IAAI,CAACrB,CAAC,GAAGtC,EAAAA,CAAGuC,GAAG,CAAC,IAAI,CAACxC,CAAC,CAAC4D,EAAE,EAAE,IAAI,CAACvB,CAAC,CAAA;QACjC,IAAI,CAACwB,CAAC,GAAG5D,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAAC8B,CAAC,EAAE,IAAI,CAACA,CAAC,EAAEtC,EAAAA,CAAGuC,GAAG,CAAC,CAAGvC,EAAAA,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAAC8B,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA;AACzD,QAAA,IAAI,CAACuB,EAAE,GAAGZ,QAAAA,CAAS,IAAI,EAAE,IAAI,CAACb,CAAC,EAAE,IAAI,CAACrC,CAAC,CAACoB,CAAC,CAAA;QACzC,IAAI,CAAC2C,EAAE,GAAGb,QAAAA,CAAS,IAAI,EAAEjD,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC2B,CAAC,EAAEpC,EAAAA,CAAGY,IAAI,CAAC,CAAA,EAAG,KAAK,IAAI,CAACb,CAAC,CAACoB,CAAC,CAAA;QAChE,IAAI,CAAC4C,EAAE,GAAGd,QAAAA,CAAS,IAAI,EAAEjD,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC2B,CAAC,EAAEpC,EAAAA,CAAGY,IAAI,CAAC,CAAA,EAAG,KAAK,IAAI,CAACb,CAAC,CAACoB,CAAC,CAAA;QAChE,IAAI,CAAC6C,EAAE,GAAGf,QAAAA,CAAS,IAAI,EAAEjD,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC2B,CAAC,EAAEpC,EAAAA,CAAGY,IAAI,CAAC,CAAA,EAAG,KAAK,IAAI,CAACb,CAAC,CAACoB,CAAC,CAAA;AAChE,QAAA,IAAI,CAACd,EAAE,CAAC4D,EAAE,GAAGjE,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAAC8C,EAAE,EAAE,IAAI,CAACvB,CAAC,CAAA;QACnC,IAAI,CAACjC,EAAE,CAAC6D,EAAE,GAAGlE,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAAC+C,EAAE,EAAE9D,EAAGuC,CAAAA,GAAG,CAAC,IAAI,CAACD,CAAC,EAAEtC,EAAAA,CAAGY,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;QACvD,IAAI,CAACP,EAAE,CAAC8D,EAAE,GAAGnE,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACgD,EAAE,EAAE/D,EAAGuC,CAAAA,GAAG,CAAC,IAAI,CAACD,CAAC,EAAEtC,EAAAA,CAAGY,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;QACvD,IAAI,CAACP,EAAE,CAAC+D,EAAE,GAAGpE,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACiD,EAAE,EAAEhE,EAAGuC,CAAAA,GAAG,CAAC,IAAI,CAACD,CAAC,EAAEtC,EAAAA,CAAGY,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;QACvD,IAAI,CAACP,EAAE,CAACgE,KAAK,GAAGrE,EAAGgD,CAAAA,GAAG,CAAChD,EAAGgD,CAAAA,GAAG,CAAC,IAAI,CAACiB,EAAE,EAAE,IAAI,CAACC,EAAE,EAAE,IAAI,CAACN,CAAC,CAACtD,CAAC,CAAGN,EAAAA,EAAAA,CAAGgD,GAAG,CAAC,IAAI,CAACmB,EAAE,EAAE,IAAI,CAACC,EAAE,EAAE,IAAI,CAACR,CAAC,CAACtD,CAAC,GAAG,IAAI,CAACsD,CAAC,CAAC1C,CAAC,CAAA;AACvG,QAAA,IAAI,CAACmD,KAAK,GAAGrE,EAAAA,CAAGS,GAAG,CAACT,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAAC6D,KAAK,EAAE,GAAM,CAAA,EAAA,GAAA,CAAA;AAC7C,QAAA,IAAI,CAAC3D,OAAO,CAAC,IAAI,CAAC2D,KAAK,CAAA;AACzB,KAAA,CAAA;IACA,OAAOvE,KAAK,CAAC4D,aAAAA,CAAc,CAAC3D,CAAAA,CAAAA;AAC9B;AAEA;;;;;;;;;;AAUC,IACM,SAASuE,WAAAA,CAAYxE,KAA4B,EAAEyE,EAAe,EAAEC,IAA0B,EAAA;IACnG,MAAMxE,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMwE,YAAe,GAAA,cAAA;;IAErBzE,EAAGG,CAAAA,IAAI,CAACsE,YAAc,EAAA;AAACzE,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AACpC,QAAO;YACL,IAAI,CAACZ,EAAE,CAACqE,IAAI,GAAG1E,EAAGiB,CAAAA,IAAI,CAAC,MAAA,EAAQ,OAAS,EAAA,OAAA,CAAA;AACxC,YAAA,IAAI,CAACZ,EAAE,CAACQ,EAAE,GAAGb,GAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,IAAI,CAAC2E,IAAI,CAAA,CAAA;AAC9C,YAAA,IAAI,CAAC7D,EAAE,GAAGb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAAC8D,GAAG,EAAE3E,EAAGiB,CAAAA,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA;AACtE,YAAA,IAAI,CAACP,OAAO,CACVV,GAAGuC,GAAG,CACJvC,GAAGQ,GAAG,CACJR,EAAGO,CAAAA,KAAK,CACNP,EAAGiB,CAAAA,IAAI,CACLjB,EAAGQ,CAAAA,GAAG,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACI,EAAE,CAACP,CAAC,EAAE,IAAI,CAACO,EAAE,CAACK,CAAC,CAAG,EAAA,IAAI,CAACL,EAAE,CAACM,CAAC,CAC9CnB,EAAAA,EAAAA,CAAGQ,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACP,CAAC,EAAE,IAAI,CAACO,EAAE,CAACM,CAAC,CAAA,EAAG,IAAI,CAACN,EAAE,CAACK,CAAC,CAAA,EAC9ClB,GAAGQ,GAAG,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACI,EAAE,CAACK,CAAC,EAAE,IAAI,CAACL,EAAE,CAACM,CAAC,GAAG,IAAI,CAACN,EAAE,CAACP,CAAC,KAGlD,CAEF,CAAA,EAAA,CAAA,CAAA,CAAA;;AAaR,KAAA,CAAA;AACA,IAAA,MAAMoD,aAAgB,GAAA,eAAA;IACtB1D,EAAGG,CAAAA,IAAI,CAACuD,aAAe,EAAA;AAAC1D,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,IAAA,CAAA;AAAOjB,QAAAA,EAAAA,CAAGI,KAAK,CAAC,MAAA;KAAQ,EAAE,WAAA;QACxD,IAAI,CAACC,EAAE,CAACuE,EAAE,GAAG5E,GAAGqC,KAAK,CAAC,IAAI,CAACkC,EAAE,CAAA;QAC7B,IAAI,CAAClE,EAAE,CAACN,CAAC,GAAGC,GAAGO,KAAK,CAAC,IAAI,CAACgE,EAAE,CAAA;AAC5B,QAAA,IAAI,CAAClE,EAAE,CAACwE,OAAO,GAAG7E,EAAAA,CAAGI,KAAK,CAAC,KAAA,CAAA;QAC3B,IAAI,CAAC0E,IAAI,CAAC9E,EAAAA,CAAG+E,GAAG,CAAC,GAAA,CAAA,EAAM,EAAC,EAAG,CAAG,EAAA,WAAA;YAC5B,IAAI,CAACD,IAAI,CAAC9E,EAAAA,CAAG+E,GAAG,CAAC,GAAA,CAAA,EAAM,EAAC,EAAG,CAAG,EAAA,WAAA;gBAC5B,IAAI,CAACD,IAAI,CAAC9E,EAAAA,CAAG+E,GAAG,CAAC,GAAA,CAAA,EAAM,EAAC,EAAG,CAAG,EAAA,WAAA;oBAC5B,IAAI,CAAC1E,EAAE,CAAC2E,MAAM,GAAGhF,EAAGiB,CAAAA,IAAI,CAACjB,EAAAA,CAAGI,KAAK,CAAC,IAAI,CAACE,CAAC,CAAA,EAAGN,EAAGI,CAAAA,KAAK,CAAC,IAAI,CAACc,CAAC,CAAGlB,EAAAA,EAAAA,CAAGI,KAAK,CAAC,IAAI,CAACe,CAAC,CAAA,CAAA;oBAEvD;;;AAGnB,wBAAA,IAAI,CAACd,EAAE,CAAC4E,IAAI,GAAGjF,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACmE,EAAE,EAAE,IAAI,CAACI,MAAM,CAAA;AAC1C,wBAAA,IAAI,CAACC,IAAI,GAAGjF,EAAAA,CAAGuC,GAAG,CAChB,IAAI,CAAC0C,IAAI,EACTjF,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGiB,IAAI,CAAC,IAAI,CAACuD,IAAI,GAAGxE,EAAGqC,CAAAA,KAAK,CAACrC,EAAAA,CAAGkF,GAAG,CAAC,IAAI,CAACD,IAAI,EAAEjF,EAAGiB,CAAAA,IAAI,CAAC,IAAI,CAACuD,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA;wBAEzE,IAAI,CAACnE,EAAE,CAAC8E,CAAC,GAAGnF,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACiE,YAAAA,CAAa,CAAC,IAAI,CAACQ,IAAI,CAAG,EAAA,GAAA,CAAA,EAAMjF,EAAGiB,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;;AAIzE,oBAAA,IAAI,CAACkE,CAAC,GAAGnF,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC0E,CAAC,EAAE,IAAI,CAACH,MAAM,CAAA;AACnC,oBAAA,IAAI,CAAC3E,EAAE,CAAC+E,CAAC,GAAGpF,EAAGuC,CAAAA,GAAG,CAAC,IAAI,CAACxC,CAAC,EAAE,IAAI,CAACoF,CAAC,CAAA;AACjC,oBAAA,IAAI,CAACN,OAAO,GAAG7E,GAAGqF,GAAG,CAAC,IAAI,CAACR,OAAO,EAAE7E,EAAGe,CAAAA,GAAG,CAAC,IAAI,CAACqE,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA,CAAA;AAC3D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA,CAAA;QACA,IAAI,CAAC1E,OAAO,CAACV,EAAAA,CAAGuC,GAAG,CAAC,CAAA,EAAG,IAAI,CAACsC,OAAO,CAAA,CAAA;AACrC,KAAA,CAAA;AACA,IAAA,OAAO7E,GAAGsF,cAAc,EAAE,CAAC5B,aAAAA,CAAc,CAACa,EAAIC,EAAAA,IAAAA,CAAAA;AAChD;AACA;;;;;;;;;AASC,IACM,SAASe,SAAAA,CAAUzF,KAA4B,EAAEC,CAAc,EAAEyE,IAA0B,EAAA;IAChG,MAAMxE,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,aAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA,CAAA;AAAMjB,QAAAA,EAAAA,CAAGI,KAAK,CAAC,MAAA;KAAQ,EAAE,WAAA;QAClD,IAAI,CAACC,EAAE,CAACmF,EAAE,GAAGlB,WAAY,CAAA,IAAI,EAAEtE,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,IAAI,CAACyE,IAAI,CAAA,EAAG,IAAI,CAACA,IAAI,CAAA;QACnE,IAAI,CAACnE,EAAE,CAACoF,EAAE,GAAGnB,WAAY,CAAA,IAAI,EAAEtE,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,IAAI,CAACyE,IAAI,EAAE,CAAA,CAAA,EAAIxE,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACgE,IAAI,EAAE,CAAA,CAAA,CAAA;QAC/E,IAAI,CAACnE,EAAE,CAACqF,EAAE,GAAGpB,WAAY,CAAA,IAAI,EAAEtE,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,IAAI,CAACyE,IAAI,EAAE,CAAA,CAAA,EAAIxE,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACgE,IAAI,EAAE,CAAA,CAAA,CAAA;AAC/E,QAAA,IAAI,CAACnE,EAAE,CAACsF,GAAG,GAAG3F,EAAAA,CAAGS,GAAG,CAACT,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACgF,EAAE,EAAE,KAAQxF,CAAAA,EAAAA,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACiF,EAAE,EAAE,IAAOzF,CAAAA,EAAAA,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACkF,EAAE,EAAE,KAAA,CAAA,CAAA;QACpF,IAAI,CAAChF,OAAO,CAACV,EAAAA,CAAG4F,GAAG,CAAC5F,EAAAA,CAAGuC,GAAG,CAACvC,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACmF,GAAG,EAAE,GAAM3F,CAAAA,EAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA,CAAA,CAAA,EAAOjB,EAAGiB,CAAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;AAC3E,KAAA,CAAA;AACA,IAAA,OAAOjB,GAAGsF,cAAc,EAAE,CAACpF,QAAAA,CAAS,CAACH,CAAGyE,EAAAA,IAAAA,CAAAA;AAC1C;AACA;;;;;;;;AAQC,IACM,SAASqB,OAAQ/F,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IAClE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,WAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAChC,QAAA,IAAI,CAACZ,EAAE,CAACQ,EAAE,GAAGb,EAAGO,CAAAA,KAAK,CAACP,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACT,CAAC,EAAE,MAAA,CAAA,CAAA;AACrC,QAAA,IAAI,CAACM,EAAE,CAACQ,EAAE,GAAGb,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACI,EAAE,EAAEb,EAAAA,CAAGiB,IAAI,CAACjB,EAAAA,CAAGe,GAAG,CAAC,IAAI,CAACF,EAAE,EAAEb,GAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACG,GAAG,EAAEhB,EAAAA,CAAGiB,IAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACjF,QAAA,IAAI,CAACP,OAAO,CAACV,EAAAA,CAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACI,EAAE,CAACP,CAAC,EAAE,IAAI,CAACO,EAAE,CAACK,CAAC,CAAA,EAAG,IAAI,CAACL,EAAE,CAACM,CAAC,CAAA,CAAA,CAAA;AACtE,KAAA,CAAA;AACA,IAAA,OAAOnB,EAAGsF,CAAAA,cAAc,EAAE,CAACpF,SAAS,CAACH,CAAAA,CAAAA;AACvC;AACA;;;;;;;;AAQC,IACM,SAAS+F,aAAchG,CAAAA,KAA4B,EAAEC,CAAc,EAAA;IACxE,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGiB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAChC,IAAI,CAACZ,EAAE,CAAC4E,IAAI,GAAGjF,GAAGqC,KAAK,CAAC,IAAI,CAACtC,CAAC,CAAA;QAC9B,IAAI,CAACM,EAAE,CAAC0F,KAAK,GAAG/F,GAAGO,KAAK,CAAC,IAAI,CAACR,CAAC,CAAA;AAC/B,QAAA,IAAI,CAACM,EAAE,CAAC0F,KAAK,GAAG/F,EAAGQ,CAAAA,GAAG,CAAC,IAAI,CAACuF,KAAK,EAAE/F,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACuF,KAAK,EAAE/F,EAAAA,CAAGuC,GAAG,CAACvC,GAAGiB,IAAI,CAAC,CAAIjB,CAAAA,EAAAA,EAAAA,CAAGQ,GAAG,CAAC,IAAI,CAACuF,KAAK,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA;QAC5F,IAAI,CAAC1F,EAAE,CAAC2F,GAAG,GAAGH,QAAQ,IAAI,EAAE,IAAI,CAACZ,IAAI,CAAA;AACrC,QAAA,IAAI,CAAC5E,EAAE,CAAC4F,GAAG,GAAGJ,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACZ,EAAE,CAAC6F,GAAG,GAAGL,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACZ,EAAE,CAAC8F,GAAG,GAAGN,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACZ,EAAE,CAAC+F,GAAG,GAAGP,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACZ,EAAE,CAACgG,GAAG,GAAGR,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACZ,EAAE,CAACiG,GAAG,GAAGT,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACZ,EAAE,CAACkG,GAAG,GAAGV,OAAAA,CAAQ,IAAI,EAAE7F,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwE,IAAI,EAAEjF,GAAGiB,IAAI,CAAC,GAAG,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;QAC5D,IAAI,CAACP,OAAO,CACVV,EAAAA,CAAGgD,GAAG,CACJhD,EAAAA,CAAGgD,GAAG,CACJhD,EAAAA,CAAGgD,GAAG,CAAC,IAAI,CAACgD,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACF,KAAK,CAACzF,CAAC,CAAA,EACvCN,GAAGgD,GAAG,CAAC,IAAI,CAACkD,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACJ,KAAK,CAACzF,CAAC,CACvC,EAAA,IAAI,CAACyF,KAAK,CAAC5E,CAAC,GAEdnB,EAAGgD,CAAAA,GAAG,CACJhD,EAAGgD,CAAAA,GAAG,CAAC,IAAI,CAACoD,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACN,KAAK,CAACzF,CAAC,CAAA,EACvCN,EAAGgD,CAAAA,GAAG,CAAC,IAAI,CAACsD,GAAG,EAAE,IAAI,CAACC,GAAG,EAAE,IAAI,CAACR,KAAK,CAACzF,CAAC,GACvC,IAAI,CAACyF,KAAK,CAAC5E,CAAC,GAEd,IAAI,CAAC4E,KAAK,CAAC7E,CAAC,CAAA,CAAA;AAGlB,KAAA,CAAA;AACA,IAAA,OAAOlB,EAAGsF,CAAAA,cAAc,EAAE,CAACpF,SAAS,CAACH,CAAAA,CAAAA;AACvC;AAEA;;;;;;;;AAQC,IACM,SAASyG,wBAAyB1G,CAAAA,KAA4B,EAAE2G,CAAc,EAAA;IACnF,MAAMzG,EAAAA,GAAKF,MAAMG,QAAQ;AACzB,IAAA,MAAMK,CAAI,GAAA,UAAA;AACV,IAAA,MAAMY,CAAI,GAAA,UAAA;AACV,IAAA,MAAMC,CAAI,GAAA,UAAA;AACV,IAAA,OAAOnB,GAAGO,KAAK,CAACP,EAAGQ,CAAAA,GAAG,CAACW,CAAGnB,EAAAA,EAAAA,CAAGO,KAAK,CAACP,GAAGe,GAAG,CAAC0F,GAAGzG,EAAGY,CAAAA,IAAI,CAACN,CAAGY,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAC1D;;;;"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { getSamplerOptions } from '../utility/misc.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Uniform names of the probe volume, see {@link declareProbeUniforms}.
|
|
5
|
+
* @internal
|
|
6
|
+
*/ const PROBE_IRRADIANCE = 'zProbeIrradiance';
|
|
7
|
+
/** @internal */ const PROBE_VISIBILITY = 'zProbeVisibility';
|
|
8
|
+
/** @internal */ const PROBE_DATA = 'zProbeData';
|
|
9
|
+
/** @internal */ const PROBE_PARAMS = 'zProbeParams';
|
|
10
|
+
/** Most clipmap levels of a probe volume. @internal */ const PROBE_MAX_LEVELS = 4;
|
|
11
|
+
/** vec4s of {@link PROBE_PARAMS}. @internal */ const PROBE_PARAM_VEC4S = 3 + 2 * PROBE_MAX_LEVELS;
|
|
12
|
+
/**
|
|
13
|
+
* Declares the probe volume uniforms.
|
|
14
|
+
*
|
|
15
|
+
* - irradiance: rgba16f atlas of octahedral tiles, `irrTexels`² each with a one-texel border;
|
|
16
|
+
* rgb E/π at the fixed cache exposure (getGICacheExposure), a = cosine-weighted sky visibility.
|
|
17
|
+
* - visibility: rgba16f atlas of `visTexels`² tiles, (mean distance, mean squared distance).
|
|
18
|
+
* - data: storage buffer, one vec4 per probe (relocation offset, state); writable when `writable`.
|
|
19
|
+
* - params[0]: (levels, tiles per atlas row, irrTexels, visTexels),
|
|
20
|
+
* params[1]: (irradiance atlas size, visibility atlas size),
|
|
21
|
+
* params[2]: (read scale = GI intensity, normal bias, view bias, max ray distance),
|
|
22
|
+
* params[3 + 2l]: (world index of level l's first probe, spacing),
|
|
23
|
+
* params[4 + 2l]: (probes per axis of level l, first tile).
|
|
24
|
+
*
|
|
25
|
+
* Levels are camera-centred clipmap windows addressed toroidally by world index; tile index
|
|
26
|
+
* (also indexing `data`) = first tile + `x + nx (y + ny z)` of the texel.
|
|
27
|
+
* @internal
|
|
28
|
+
*/ function declareProbeUniforms(scope, group, writable = false) {
|
|
29
|
+
const pb = scope.$builder;
|
|
30
|
+
// Static sampler so both share one sampler binding on WebGPU (texture-heavy materials
|
|
31
|
+
// such as water are near the 16-sampler limit)
|
|
32
|
+
scope[PROBE_IRRADIANCE] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));
|
|
33
|
+
scope[PROBE_VISIBILITY] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));
|
|
34
|
+
scope[PROBE_DATA] = writable ? pb.vec4[0]().storageBuffer(group) : pb.vec4[0]().storageBufferReadonly(group);
|
|
35
|
+
scope[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(group);
|
|
36
|
+
}
|
|
37
|
+
/** (world index of the level's first probe, spacing). @internal */ function probeLevelOrigin(scope, level) {
|
|
38
|
+
const pb = scope.$builder;
|
|
39
|
+
return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 3));
|
|
40
|
+
}
|
|
41
|
+
/** (probes per axis, first tile) of a level. @internal */ function probeLevelGrid(scope, level) {
|
|
42
|
+
const pb = scope.$builder;
|
|
43
|
+
return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 4));
|
|
44
|
+
}
|
|
45
|
+
/** Octahedral encoding of a unit vector to [-1, 1]² (Cigolle et al. 2014). @internal */ function octEncode(scope, v) {
|
|
46
|
+
const pb = scope.$builder;
|
|
47
|
+
const funcName = 'Z_octEncode';
|
|
48
|
+
pb.func(funcName, [
|
|
49
|
+
pb.vec3('v')
|
|
50
|
+
], function() {
|
|
51
|
+
this.$l.l1 = pb.add(pb.abs(this.v.x), pb.abs(this.v.y), pb.abs(this.v.z));
|
|
52
|
+
this.$l.p = pb.div(this.v.xy, pb.max(this.l1, 1e-6));
|
|
53
|
+
this.$l.sgn = pb.vec2(this.$choice(pb.greaterThanEqual(this.p.x, 0), pb.float(1), pb.float(-1)), this.$choice(pb.greaterThanEqual(this.p.y, 0), pb.float(1), pb.float(-1)));
|
|
54
|
+
this.$return(this.$choice(pb.lessThan(this.v.z, 0), pb.mul(pb.sub(pb.vec2(1), pb.abs(this.p.yx)), this.sgn), this.p));
|
|
55
|
+
});
|
|
56
|
+
return scope[funcName](v);
|
|
57
|
+
}
|
|
58
|
+
/** Inverse of {@link octEncode}. @internal */ function octDecode(scope, uv) {
|
|
59
|
+
const pb = scope.$builder;
|
|
60
|
+
const funcName = 'Z_octDecode';
|
|
61
|
+
pb.func(funcName, [
|
|
62
|
+
pb.vec2('uv')
|
|
63
|
+
], function() {
|
|
64
|
+
this.$l.v = pb.vec3(this.uv.x, this.uv.y, pb.sub(pb.sub(1, pb.abs(this.uv.x)), pb.abs(this.uv.y)));
|
|
65
|
+
this.$l.sgn = pb.vec2(this.$choice(pb.greaterThanEqual(this.v.x, 0), pb.float(1), pb.float(-1)), this.$choice(pb.greaterThanEqual(this.v.y, 0), pb.float(1), pb.float(-1)));
|
|
66
|
+
this.$if(pb.lessThan(this.v.z, 0), function() {
|
|
67
|
+
this.v = pb.vec3(pb.mul(pb.sub(pb.vec2(1), pb.abs(this.v.yx)), this.sgn), this.v.z);
|
|
68
|
+
});
|
|
69
|
+
this.$return(pb.normalize(this.v));
|
|
70
|
+
});
|
|
71
|
+
return scope[funcName](uv);
|
|
72
|
+
}
|
|
73
|
+
/** The i-th of n directions of a spherical Fibonacci set. @internal */ function sphericalFibonacci(scope, i, n) {
|
|
74
|
+
const pb = scope.$builder;
|
|
75
|
+
const funcName = 'Z_sphericalFibonacci';
|
|
76
|
+
pb.func(funcName, [
|
|
77
|
+
pb.float('i'),
|
|
78
|
+
pb.float('n')
|
|
79
|
+
], function() {
|
|
80
|
+
this.$l.phi = pb.mul(pb.fract(pb.mul(this.i, 0.6180339887498949)), 2 * Math.PI);
|
|
81
|
+
this.$l.z = pb.sub(1, pb.div(pb.add(pb.mul(this.i, 2), 1), this.n));
|
|
82
|
+
this.$l.r = pb.sqrt(pb.max(pb.sub(1, pb.mul(this.z, this.z)), 0));
|
|
83
|
+
this.$return(pb.vec3(pb.mul(pb.cos(this.phi), this.r), pb.mul(pb.sin(this.phi), this.r), this.z));
|
|
84
|
+
});
|
|
85
|
+
return scope[funcName](i, n);
|
|
86
|
+
}
|
|
87
|
+
/** Rotates a vector by a unit quaternion (xyz, w). @internal */ function quatRotate(scope, q, v) {
|
|
88
|
+
const pb = scope.$builder;
|
|
89
|
+
const funcName = 'Z_quatRotate';
|
|
90
|
+
pb.func(funcName, [
|
|
91
|
+
pb.vec4('q'),
|
|
92
|
+
pb.vec3('v')
|
|
93
|
+
], function() {
|
|
94
|
+
this.$l.t = pb.mul(pb.cross(this.q.xyz, this.v), 2);
|
|
95
|
+
this.$return(pb.add(this.v, pb.mul(this.t, this.q.w), pb.cross(this.q.xyz, this.t)));
|
|
96
|
+
});
|
|
97
|
+
return scope[funcName](q, v);
|
|
98
|
+
}
|
|
99
|
+
/** Tile index of a probe from its level and texel. @internal */ function probeTileIndex(scope, level, texel) {
|
|
100
|
+
const pb = scope.$builder;
|
|
101
|
+
const funcName = 'Z_probeTileIndex';
|
|
102
|
+
pb.func(funcName, [
|
|
103
|
+
pb.int('level'),
|
|
104
|
+
pb.ivec3('t')
|
|
105
|
+
], function() {
|
|
106
|
+
this.$l.g = probeLevelGrid(this, this.level);
|
|
107
|
+
this.$return(pb.add(pb.int(this.g.w), this.t.x, pb.mul(pb.int(this.g.x), pb.add(this.t.y, pb.mul(pb.int(this.g.y), this.t.z)))));
|
|
108
|
+
});
|
|
109
|
+
return scope[funcName](level, texel);
|
|
110
|
+
}
|
|
111
|
+
/** Texel of a probe from its level and tile index. @internal */ function probeTexelFromIndex(scope, level, index) {
|
|
112
|
+
const pb = scope.$builder;
|
|
113
|
+
const funcName = 'Z_probeTexelFromIndex';
|
|
114
|
+
pb.func(funcName, [
|
|
115
|
+
pb.int('level'),
|
|
116
|
+
pb.int('i')
|
|
117
|
+
], function() {
|
|
118
|
+
this.$l.g = probeLevelGrid(this, this.level);
|
|
119
|
+
this.$l.nx = pb.int(this.g.x);
|
|
120
|
+
this.$l.ny = pb.int(this.g.y);
|
|
121
|
+
this.$l.local = pb.sub(this.i, pb.int(this.g.w));
|
|
122
|
+
this.$l.x = pb.mod(this.local, this.nx);
|
|
123
|
+
this.$l.yz = pb.div(this.local, this.nx);
|
|
124
|
+
this.$return(pb.ivec3(this.x, pb.mod(this.yz, this.ny), pb.div(this.yz, this.ny)));
|
|
125
|
+
});
|
|
126
|
+
return scope[funcName](level, index);
|
|
127
|
+
}
|
|
128
|
+
/** World index of the probe at a toroidal texel of a level. @internal */ function probeWorldFromTexel(scope, level, texel) {
|
|
129
|
+
const pb = scope.$builder;
|
|
130
|
+
const funcName = 'Z_probeWorldFromTexel';
|
|
131
|
+
pb.func(funcName, [
|
|
132
|
+
pb.int('level'),
|
|
133
|
+
pb.ivec3('t')
|
|
134
|
+
], function() {
|
|
135
|
+
this.$l.o = pb.ivec3(probeLevelOrigin(this, this.level).xyz);
|
|
136
|
+
this.$l.n = pb.ivec3(probeLevelGrid(this, this.level).xyz);
|
|
137
|
+
this.$return(pb.add(this.o, pb.mod(pb.add(pb.mod(pb.sub(this.t, this.o), this.n), this.n), this.n)));
|
|
138
|
+
});
|
|
139
|
+
return scope[funcName](level, texel);
|
|
140
|
+
}
|
|
141
|
+
/** Texel of the probe of a level at a world index. @internal */ function probeTexelFromWorld(scope, level, world) {
|
|
142
|
+
const pb = scope.$builder;
|
|
143
|
+
const n = pb.ivec3(probeLevelGrid(scope, level).xyz);
|
|
144
|
+
return pb.mod(pb.add(pb.mod(world, n), n), n);
|
|
145
|
+
}
|
|
146
|
+
/** World position of a probe: world index times level spacing plus relocation offset. @internal */ function probePosition(scope, level, world, data) {
|
|
147
|
+
const pb = scope.$builder;
|
|
148
|
+
return pb.add(pb.mul(pb.vec3(world), probeLevelOrigin(scope, level).w), data.xyz);
|
|
149
|
+
}
|
|
150
|
+
/** Texel origin of a probe's tile in an atlas of `texels`² tiles. @internal */ function probeTileOrigin(scope, index, texels) {
|
|
151
|
+
const pb = scope.$builder;
|
|
152
|
+
const cols = pb.int(scope[PROBE_PARAMS].at(0).y);
|
|
153
|
+
return pb.mul(pb.ivec2(pb.mod(index, cols), pb.div(index, cols)), pb.int(texels));
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Bilinear sample of a probe's tile in a direction; border texels make the filter wrap.
|
|
157
|
+
* @internal
|
|
158
|
+
*/ function sampleProbeTile(scope, tex, index, texels, texSize, dir) {
|
|
159
|
+
const pb = scope.$builder;
|
|
160
|
+
const funcName = `Z_sampleProbeTile_${tex.$str}`;
|
|
161
|
+
pb.func(funcName, [
|
|
162
|
+
pb.int('index'),
|
|
163
|
+
pb.float('texels'),
|
|
164
|
+
pb.vec2('texSize'),
|
|
165
|
+
pb.vec3('dir')
|
|
166
|
+
], function() {
|
|
167
|
+
this.$l.origin = pb.vec2(probeTileOrigin(this, this.index, this.texels));
|
|
168
|
+
this.$l.oct = pb.add(pb.mul(octEncode(this, this.dir), 0.5), pb.vec2(0.5));
|
|
169
|
+
this.$l.uv = pb.div(pb.add(this.origin, pb.vec2(1), pb.mul(this.oct, pb.sub(this.texels, 2))), this.texSize);
|
|
170
|
+
this.$return(pb.textureSampleLevel(tex, this.uv, 0));
|
|
171
|
+
});
|
|
172
|
+
return scope[funcName](index, texels, texSize, dir);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Probe state in data.w: 0 = no data (never updated or just reactivated), 1 = updated,
|
|
176
|
+
* {@link PROBE_STATE_INACTIVE} = buried in geometry.
|
|
177
|
+
* @internal
|
|
178
|
+
*/ const PROBE_STATE_INACTIVE = 2;
|
|
179
|
+
/** True for a probe whose maps a surface may read. @internal */ function probeActive(scope, data) {
|
|
180
|
+
const pb = scope.$builder;
|
|
181
|
+
return pb.and(pb.greaterThan(data.w, 0.5), pb.lessThan(data.w, PROBE_STATE_INACTIVE - 0.5));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Irradiance from one volume level: the eight surrounding probes weighted by trilinear,
|
|
185
|
+
* wrap-facing and Chebyshev visibility (DDGI). Returns (irradiance, weight sum); sum 0 when
|
|
186
|
+
* outside the window or no probe is active.
|
|
187
|
+
* @internal
|
|
188
|
+
*/ function sampleProbeLevel(scope, level, p, biased, n, sky) {
|
|
189
|
+
const pb = scope.$builder;
|
|
190
|
+
const funcName = sky ? 'Z_sampleProbeLevelSky' : 'Z_sampleProbeLevel';
|
|
191
|
+
pb.func(funcName, [
|
|
192
|
+
pb.int('level'),
|
|
193
|
+
pb.vec3('p'),
|
|
194
|
+
pb.vec3('biased'),
|
|
195
|
+
pb.vec3('n')
|
|
196
|
+
], function() {
|
|
197
|
+
this.$l.p0 = this[PROBE_PARAMS].at(0);
|
|
198
|
+
this.$l.p1 = this[PROBE_PARAMS].at(1);
|
|
199
|
+
this.$l.lo = probeLevelOrigin(this, this.level);
|
|
200
|
+
this.$l.lg = probeLevelGrid(this, this.level);
|
|
201
|
+
this.$l.spacing = this.lo.w;
|
|
202
|
+
this.$l.origin = pb.ivec3(this.lo.xyz);
|
|
203
|
+
this.$l.n3 = pb.ivec3(this.lg.xyz);
|
|
204
|
+
this.$l.g = pb.sub(pb.div(this.biased, this.spacing), pb.vec3(this.origin));
|
|
205
|
+
this.$l.sum = pb.vec3(0);
|
|
206
|
+
this.$l.wsum = pb.float(0);
|
|
207
|
+
this.$l.inside = pb.and(pb.all(pb.greaterThanEqual(this.g, pb.vec3(0))), pb.all(pb.lessThanEqual(this.g, pb.sub(pb.vec3(this.n3), pb.vec3(1)))));
|
|
208
|
+
this.$if(this.inside, function() {
|
|
209
|
+
this.$l.base = pb.ivec3(pb.clamp(pb.floor(this.g), pb.vec3(0), pb.sub(pb.vec3(this.n3), pb.vec3(2))));
|
|
210
|
+
this.$l.alpha = pb.clamp(pb.sub(this.g, pb.vec3(this.base)), pb.vec3(0), pb.vec3(1));
|
|
211
|
+
for(let i = 0; i < 8; i++){
|
|
212
|
+
const off = [
|
|
213
|
+
i & 1,
|
|
214
|
+
i >> 1 & 1,
|
|
215
|
+
i >> 2 & 1
|
|
216
|
+
];
|
|
217
|
+
this.$l[`w${i}`] = pb.add(this.origin, this.base, pb.ivec3(off[0], off[1], off[2]));
|
|
218
|
+
this.$l[`t${i}`] = probeTexelFromWorld(this, this.level, this[`w${i}`]);
|
|
219
|
+
this.$l[`i${i}`] = probeTileIndex(this, this.level, this[`t${i}`]);
|
|
220
|
+
this.$l[`d${i}`] = this[PROBE_DATA].at(this[`i${i}`]);
|
|
221
|
+
// Skip inactive (buried) probes (Majercik et al. 2021, probe classification)
|
|
222
|
+
this.$if(probeActive(this, this[`d${i}`]), function() {
|
|
223
|
+
this.$l.pp = probePosition(this, this.level, this[`w${i}`], this[`d${i}`]);
|
|
224
|
+
this.$l.tri = pb.mul(off[0] ? this.alpha.x : pb.sub(1, this.alpha.x), off[1] ? this.alpha.y : pb.sub(1, this.alpha.y), off[2] ? this.alpha.z : pb.sub(1, this.alpha.z));
|
|
225
|
+
this.$l.dirToProbe = pb.normalize(pb.sub(this.pp, this.p));
|
|
226
|
+
// Wrap shading: a probe behind the surface still contributes a little
|
|
227
|
+
this.$l.wrap = pb.mul(pb.add(pb.dot(this.dirToProbe, this.n), 1), 0.5);
|
|
228
|
+
this.$l.w = pb.add(pb.mul(this.wrap, this.wrap), 0.2);
|
|
229
|
+
// Chebyshev visibility of the point as the probe sees the surface
|
|
230
|
+
this.$l.toBiased = pb.sub(this.biased, this.pp);
|
|
231
|
+
this.$l.dist = pb.length(this.toBiased);
|
|
232
|
+
this.$l.vis = sampleProbeTile(this, this[PROBE_VISIBILITY], this[`i${i}`], this.p0.w, this.p1.zw, pb.div(this.toBiased, pb.max(this.dist, 1e-6)));
|
|
233
|
+
this.$l.mean = this.vis.x;
|
|
234
|
+
this.$l.variance = pb.abs(pb.sub(pb.mul(this.mean, this.mean), this.vis.y));
|
|
235
|
+
this.$if(pb.greaterThan(this.dist, this.mean), function() {
|
|
236
|
+
this.$l.dd = pb.sub(this.dist, this.mean);
|
|
237
|
+
this.$l.cheb = pb.div(this.variance, pb.add(this.variance, pb.mul(this.dd, this.dd)));
|
|
238
|
+
this.w = pb.mul(this.w, pb.max(pb.mul(this.cheb, this.cheb, this.cheb), 0.05));
|
|
239
|
+
});
|
|
240
|
+
// Crush tiny weights to avoid noise from a nearly-blocked probe
|
|
241
|
+
this.$if(pb.lessThan(this.w, 0.2), function() {
|
|
242
|
+
this.w = pb.mul(this.w, pb.div(pb.mul(this.w, this.w), 0.04));
|
|
243
|
+
});
|
|
244
|
+
this.w = pb.mul(this.w, this.tri);
|
|
245
|
+
this.$l.irr = sampleProbeTile(this, this[PROBE_IRRADIANCE], this[`i${i}`], this.p0.z, this.p1.xy, this.n);
|
|
246
|
+
this.sum = pb.add(this.sum, pb.mul(sky ? pb.vec3(this.irr.a) : this.irr.rgb, this.w));
|
|
247
|
+
this.wsum = pb.add(this.wsum, this.w);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
this.$return(pb.vec4(pb.div(this.sum, pb.max(this.wsum, 1e-5)), this.wsum));
|
|
252
|
+
});
|
|
253
|
+
return scope[funcName](level, p, biased, n);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Probe volume irradiance (E/π, rgb) at a surface; `a` = 1 if any probe answered. The finest
|
|
257
|
+
* level holding the point answers, fading to the next over the outer 0.5-2.5 probe spacings of
|
|
258
|
+
* its window. DDGI (Majercik et al., JCGT 2019, §4);
|
|
259
|
+
*
|
|
260
|
+
* Normal/view biases of params[2] are in probe spacings, scaled per level; the view bias fades
|
|
261
|
+
* out within one spacing of the viewer. `toViewer` runs from point to viewer; feedback mode
|
|
262
|
+
* applies the full view bias.
|
|
263
|
+
*
|
|
264
|
+
* Modes: `surface` applies the read scale; `feedback` returns the stored value for the next
|
|
265
|
+
* voxel bounce; `sky` interpolates sky visibility (0..1) with the same weights.
|
|
266
|
+
* @internal
|
|
267
|
+
*/ function sampleProbeIrradiance(scope, worldPos, normal, toViewer, mode = 'surface') {
|
|
268
|
+
const pb = scope.$builder;
|
|
269
|
+
const funcName = mode === 'surface' ? 'Z_sampleProbeIrradiance' : mode === 'feedback' ? 'Z_sampleProbeIrradianceFeedback' : 'Z_sampleProbeSkyVisibility';
|
|
270
|
+
pb.func(funcName, [
|
|
271
|
+
pb.vec3('p'),
|
|
272
|
+
pb.vec3('n'),
|
|
273
|
+
pb.vec3('toViewer')
|
|
274
|
+
], function() {
|
|
275
|
+
this.$l.p0 = this[PROBE_PARAMS].at(0);
|
|
276
|
+
this.$l.p2 = this[PROBE_PARAMS].at(2);
|
|
277
|
+
this.$l.levels = pb.int(this.p0.x);
|
|
278
|
+
this.$l.viewDist = pb.length(this.toViewer);
|
|
279
|
+
this.$l.v = pb.div(this.toViewer, pb.max(this.viewDist, 1e-6));
|
|
280
|
+
this.$l.acc = pb.vec3(0);
|
|
281
|
+
this.$l.accW = pb.float(0);
|
|
282
|
+
this.$for(pb.int('l'), 0, PROBE_MAX_LEVELS, function() {
|
|
283
|
+
this.$if(pb.or(pb.greaterThanEqual(this.l, this.levels), pb.greaterThanEqual(this.accW, 0.999)), function() {
|
|
284
|
+
this.$break();
|
|
285
|
+
});
|
|
286
|
+
this.$l.lo = probeLevelOrigin(this, this.l);
|
|
287
|
+
this.$l.viewFade = mode === 'feedback' ? pb.float(1) : pb.clamp(pb.div(this.viewDist, this.lo.w), 0, 1);
|
|
288
|
+
this.$l.biased = pb.add(this.p, pb.mul(pb.add(pb.mul(this.n, this.p2.y), pb.mul(this.v, this.p2.z, this.viewFade)), this.lo.w));
|
|
289
|
+
this.$l.s = sampleProbeLevel(this, this.l, this.p, this.biased, this.n, mode === 'sky');
|
|
290
|
+
this.$if(pb.greaterThan(this.s.a, 1e-5), function() {
|
|
291
|
+
// Distance in probes to the window edge
|
|
292
|
+
this.$l.lg = probeLevelGrid(this, this.l);
|
|
293
|
+
this.$l.g = pb.sub(pb.div(this.biased, this.lo.w), this.lo.xyz);
|
|
294
|
+
this.$l.edge = pb.min(this.g, pb.sub(pb.sub(this.lg.xyz, pb.vec3(1)), this.g));
|
|
295
|
+
this.$l.t = pb.smoothStep(0.5, 2.5, pb.min(pb.min(this.edge.x, this.edge.y), this.edge.z));
|
|
296
|
+
this.$l.share = pb.mul(this.t, pb.sub(1, this.accW));
|
|
297
|
+
this.acc = pb.add(this.acc, pb.mul(this.s.rgb, this.share));
|
|
298
|
+
this.accW = pb.add(this.accW, this.share);
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
this.$l.valid = this.$choice(pb.greaterThan(this.accW, 1e-4), pb.float(1), pb.float(0));
|
|
302
|
+
this.$l.e = pb.div(this.acc, pb.max(this.accW, 1e-4));
|
|
303
|
+
this.$return(pb.vec4(mode === 'surface' ? pb.mul(this.e, this.p2.x) : this.e, this.valid));
|
|
304
|
+
});
|
|
305
|
+
return scope[funcName](worldPos, normal, toViewer);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export { PROBE_DATA, PROBE_IRRADIANCE, PROBE_MAX_LEVELS, PROBE_PARAMS, PROBE_PARAM_VEC4S, PROBE_STATE_INACTIVE, PROBE_VISIBILITY, declareProbeUniforms, octDecode, octEncode, probeActive, probeLevelGrid, probeLevelOrigin, probePosition, probeTexelFromIndex, probeTexelFromWorld, probeTileIndex, probeTileOrigin, probeWorldFromTexel, quatRotate, sampleProbeIrradiance, sampleProbeTile, sphericalFibonacci };
|
|
309
|
+
//# sourceMappingURL=probes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probes.js","sources":["../../src/shaders/probes.ts"],"sourcesContent":["import type { PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { getSamplerOptions } from '../utility/misc';\r\n\r\n/**\r\n * Uniform names of the probe volume, see {@link declareProbeUniforms}.\r\n * @internal\r\n */\r\nexport const PROBE_IRRADIANCE = 'zProbeIrradiance';\r\n/** @internal */\r\nexport const PROBE_VISIBILITY = 'zProbeVisibility';\r\n/** @internal */\r\nexport const PROBE_DATA = 'zProbeData';\r\n/** @internal */\r\nexport const PROBE_PARAMS = 'zProbeParams';\r\n/** Most clipmap levels of a probe volume. @internal */\r\nexport const PROBE_MAX_LEVELS = 4;\r\n/** vec4s of {@link PROBE_PARAMS}. @internal */\r\nexport const PROBE_PARAM_VEC4S = 3 + 2 * PROBE_MAX_LEVELS;\r\n\r\n/**\r\n * Declares the probe volume uniforms.\r\n *\r\n * - irradiance: rgba16f atlas of octahedral tiles, `irrTexels`² each with a one-texel border;\r\n * rgb E/π at the fixed cache exposure (getGICacheExposure), a = cosine-weighted sky visibility.\r\n * - visibility: rgba16f atlas of `visTexels`² tiles, (mean distance, mean squared distance).\r\n * - data: storage buffer, one vec4 per probe (relocation offset, state); writable when `writable`.\r\n * - params[0]: (levels, tiles per atlas row, irrTexels, visTexels),\r\n * params[1]: (irradiance atlas size, visibility atlas size),\r\n * params[2]: (read scale = GI intensity, normal bias, view bias, max ray distance),\r\n * params[3 + 2l]: (world index of level l's first probe, spacing),\r\n * params[4 + 2l]: (probes per axis of level l, first tile).\r\n *\r\n * Levels are camera-centred clipmap windows addressed toroidally by world index; tile index\r\n * (also indexing `data`) = first tile + `x + nx (y + ny z)` of the texel.\r\n * @internal\r\n */\r\nexport function declareProbeUniforms(scope: PBGlobalScope, group: number, writable = false) {\r\n const pb = scope.$builder;\r\n // Static sampler so both share one sampler binding on WebGPU (texture-heavy materials\r\n // such as water are near the 16-sampler limit)\r\n scope[PROBE_IRRADIANCE] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[PROBE_VISIBILITY] = pb.tex2D().uniform(group).withSampler(getSamplerOptions('clamp_linear_nomip'));\r\n scope[PROBE_DATA] = writable\r\n ? pb.vec4[0]().storageBuffer(group)\r\n : pb.vec4[0]().storageBufferReadonly(group);\r\n scope[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(group);\r\n}\r\n\r\n/** (world index of the level's first probe, spacing). @internal */\r\nexport function probeLevelOrigin(scope: PBInsideFunctionScope, level: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 3)) as PBShaderExp;\r\n}\r\n\r\n/** (probes per axis, first tile) of a level. @internal */\r\nexport function probeLevelGrid(scope: PBInsideFunctionScope, level: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n return scope[PROBE_PARAMS].at(pb.add(pb.mul(pb.int(level), 2), 4)) as PBShaderExp;\r\n}\r\n\r\n/** Octahedral encoding of a unit vector to [-1, 1]² (Cigolle et al. 2014). @internal */\r\nexport function octEncode(scope: PBInsideFunctionScope, v: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_octEncode';\r\n pb.func(funcName, [pb.vec3('v')], function () {\r\n this.$l.l1 = pb.add(pb.abs(this.v.x), pb.abs(this.v.y), pb.abs(this.v.z));\r\n this.$l.p = pb.div(this.v.xy, pb.max(this.l1, 1e-6));\r\n this.$l.sgn = pb.vec2(\r\n this.$choice(pb.greaterThanEqual(this.p.x, 0), pb.float(1), pb.float(-1)),\r\n this.$choice(pb.greaterThanEqual(this.p.y, 0), pb.float(1), pb.float(-1))\r\n );\r\n this.$return(\r\n this.$choice(pb.lessThan(this.v.z, 0), pb.mul(pb.sub(pb.vec2(1), pb.abs(this.p.yx)), this.sgn), this.p)\r\n );\r\n });\r\n return scope[funcName](v) as PBShaderExp;\r\n}\r\n\r\n/** Inverse of {@link octEncode}. @internal */\r\nexport function octDecode(scope: PBInsideFunctionScope, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_octDecode';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.v = pb.vec3(this.uv.x, this.uv.y, pb.sub(pb.sub(1, pb.abs(this.uv.x)), pb.abs(this.uv.y)));\r\n this.$l.sgn = pb.vec2(\r\n this.$choice(pb.greaterThanEqual(this.v.x, 0), pb.float(1), pb.float(-1)),\r\n this.$choice(pb.greaterThanEqual(this.v.y, 0), pb.float(1), pb.float(-1))\r\n );\r\n this.$if(pb.lessThan(this.v.z, 0), function () {\r\n this.v = pb.vec3(pb.mul(pb.sub(pb.vec2(1), pb.abs(this.v.yx)), this.sgn), this.v.z);\r\n });\r\n this.$return(pb.normalize(this.v));\r\n });\r\n return scope[funcName](uv) as PBShaderExp;\r\n}\r\n\r\n/** The i-th of n directions of a spherical Fibonacci set. @internal */\r\nexport function sphericalFibonacci(scope: PBInsideFunctionScope, i: PBShaderExp, n: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_sphericalFibonacci';\r\n pb.func(funcName, [pb.float('i'), pb.float('n')], function () {\r\n this.$l.phi = pb.mul(pb.fract(pb.mul(this.i, 0.6180339887498949)), 2 * Math.PI);\r\n this.$l.z = pb.sub(1, pb.div(pb.add(pb.mul(this.i, 2), 1), this.n));\r\n this.$l.r = pb.sqrt(pb.max(pb.sub(1, pb.mul(this.z, this.z)), 0));\r\n this.$return(pb.vec3(pb.mul(pb.cos(this.phi), this.r), pb.mul(pb.sin(this.phi), this.r), this.z));\r\n });\r\n return scope[funcName](i, n) as PBShaderExp;\r\n}\r\n\r\n/** Rotates a vector by a unit quaternion (xyz, w). @internal */\r\nexport function quatRotate(scope: PBInsideFunctionScope, q: PBShaderExp, v: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_quatRotate';\r\n pb.func(funcName, [pb.vec4('q'), pb.vec3('v')], function () {\r\n this.$l.t = pb.mul(pb.cross(this.q.xyz, this.v), 2);\r\n this.$return(pb.add(this.v, pb.mul(this.t, this.q.w), pb.cross(this.q.xyz, this.t)));\r\n });\r\n return scope[funcName](q, v) as PBShaderExp;\r\n}\r\n\r\n/** Tile index of a probe from its level and texel. @internal */\r\nexport function probeTileIndex(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp | number,\r\n texel: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_probeTileIndex';\r\n pb.func(funcName, [pb.int('level'), pb.ivec3('t')], function () {\r\n this.$l.g = probeLevelGrid(this, this.level);\r\n this.$return(\r\n pb.add(\r\n pb.int(this.g.w),\r\n this.t.x,\r\n pb.mul(pb.int(this.g.x), pb.add(this.t.y, pb.mul(pb.int(this.g.y), this.t.z)))\r\n )\r\n );\r\n });\r\n return scope[funcName](level, texel) as PBShaderExp;\r\n}\r\n\r\n/** Texel of a probe from its level and tile index. @internal */\r\nexport function probeTexelFromIndex(scope: PBInsideFunctionScope, level: PBShaderExp, index: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_probeTexelFromIndex';\r\n pb.func(funcName, [pb.int('level'), pb.int('i')], function () {\r\n this.$l.g = probeLevelGrid(this, this.level);\r\n this.$l.nx = pb.int(this.g.x);\r\n this.$l.ny = pb.int(this.g.y);\r\n this.$l.local = pb.sub(this.i, pb.int(this.g.w));\r\n this.$l.x = pb.mod(this.local, this.nx);\r\n this.$l.yz = pb.div(this.local, this.nx);\r\n this.$return(pb.ivec3(this.x, pb.mod(this.yz, this.ny), pb.div(this.yz, this.ny)));\r\n });\r\n return scope[funcName](level, index) as PBShaderExp;\r\n}\r\n\r\n/** World index of the probe at a toroidal texel of a level. @internal */\r\nexport function probeWorldFromTexel(scope: PBInsideFunctionScope, level: PBShaderExp, texel: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_probeWorldFromTexel';\r\n pb.func(funcName, [pb.int('level'), pb.ivec3('t')], function () {\r\n this.$l.o = pb.ivec3(probeLevelOrigin(this, this.level).xyz);\r\n this.$l.n = pb.ivec3(probeLevelGrid(this, this.level).xyz);\r\n this.$return(pb.add(this.o, pb.mod(pb.add(pb.mod(pb.sub(this.t, this.o), this.n), this.n), this.n)));\r\n });\r\n return scope[funcName](level, texel) as PBShaderExp;\r\n}\r\n\r\n/** Texel of the probe of a level at a world index. @internal */\r\nexport function probeTexelFromWorld(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp | number,\r\n world: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const n = pb.ivec3(probeLevelGrid(scope, level).xyz);\r\n return pb.mod(pb.add(pb.mod(world, n), n), n) as PBShaderExp;\r\n}\r\n\r\n/** World position of a probe: world index times level spacing plus relocation offset. @internal */\r\nexport function probePosition(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp | number,\r\n world: PBShaderExp,\r\n data: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n return pb.add(pb.mul(pb.vec3(world), probeLevelOrigin(scope, level).w), data.xyz) as PBShaderExp;\r\n}\r\n\r\n/** Texel origin of a probe's tile in an atlas of `texels`² tiles. @internal */\r\nexport function probeTileOrigin(scope: PBInsideFunctionScope, index: PBShaderExp, texels: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const cols = pb.int(scope[PROBE_PARAMS].at(0).y);\r\n return pb.mul(pb.ivec2(pb.mod(index, cols), pb.div(index, cols)), pb.int(texels)) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Bilinear sample of a probe's tile in a direction; border texels make the filter wrap.\r\n * @internal\r\n */\r\nexport function sampleProbeTile(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n index: PBShaderExp,\r\n texels: PBShaderExp,\r\n texSize: PBShaderExp,\r\n dir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_sampleProbeTile_${tex.$str}`;\r\n pb.func(funcName, [pb.int('index'), pb.float('texels'), pb.vec2('texSize'), pb.vec3('dir')], function () {\r\n this.$l.origin = pb.vec2(probeTileOrigin(this, this.index, this.texels));\r\n this.$l.oct = pb.add(pb.mul(octEncode(this, this.dir), 0.5), pb.vec2(0.5));\r\n this.$l.uv = pb.div(\r\n pb.add(this.origin, pb.vec2(1), pb.mul(this.oct, pb.sub(this.texels, 2))),\r\n this.texSize\r\n );\r\n this.$return(pb.textureSampleLevel(tex, this.uv, 0));\r\n });\r\n return scope[funcName](index, texels, texSize, dir) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Probe state in data.w: 0 = no data (never updated or just reactivated), 1 = updated,\r\n * {@link PROBE_STATE_INACTIVE} = buried in geometry.\r\n * @internal\r\n */\r\nexport const PROBE_STATE_INACTIVE = 2;\r\n\r\n/** True for a probe whose maps a surface may read. @internal */\r\nexport function probeActive(scope: PBInsideFunctionScope, data: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.and(pb.greaterThan(data.w, 0.5), pb.lessThan(data.w, PROBE_STATE_INACTIVE - 0.5)) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Irradiance from one volume level: the eight surrounding probes weighted by trilinear,\r\n * wrap-facing and Chebyshev visibility (DDGI). Returns (irradiance, weight sum); sum 0 when\r\n * outside the window or no probe is active.\r\n * @internal\r\n */\r\nfunction sampleProbeLevel(\r\n scope: PBInsideFunctionScope,\r\n level: PBShaderExp,\r\n p: PBShaderExp,\r\n biased: PBShaderExp,\r\n n: PBShaderExp,\r\n sky: boolean\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = sky ? 'Z_sampleProbeLevelSky' : 'Z_sampleProbeLevel';\r\n pb.func(funcName, [pb.int('level'), pb.vec3('p'), pb.vec3('biased'), pb.vec3('n')], function () {\r\n this.$l.p0 = this[PROBE_PARAMS].at(0);\r\n this.$l.p1 = this[PROBE_PARAMS].at(1);\r\n this.$l.lo = probeLevelOrigin(this, this.level);\r\n this.$l.lg = probeLevelGrid(this, this.level);\r\n this.$l.spacing = this.lo.w;\r\n this.$l.origin = pb.ivec3(this.lo.xyz);\r\n this.$l.n3 = pb.ivec3(this.lg.xyz);\r\n this.$l.g = pb.sub(pb.div(this.biased, this.spacing), pb.vec3(this.origin));\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.wsum = pb.float(0);\r\n this.$l.inside = pb.and(\r\n pb.all(pb.greaterThanEqual(this.g, pb.vec3(0))),\r\n pb.all(pb.lessThanEqual(this.g, pb.sub(pb.vec3(this.n3), pb.vec3(1))))\r\n );\r\n this.$if(this.inside, function () {\r\n this.$l.base = pb.ivec3(pb.clamp(pb.floor(this.g), pb.vec3(0), pb.sub(pb.vec3(this.n3), pb.vec3(2))));\r\n this.$l.alpha = pb.clamp(pb.sub(this.g, pb.vec3(this.base)), pb.vec3(0), pb.vec3(1));\r\n for (let i = 0; i < 8; i++) {\r\n const off = [i & 1, (i >> 1) & 1, (i >> 2) & 1];\r\n this.$l[`w${i}`] = pb.add(this.origin, this.base, pb.ivec3(off[0], off[1], off[2]));\r\n this.$l[`t${i}`] = probeTexelFromWorld(this, this.level, this[`w${i}`]);\r\n this.$l[`i${i}`] = probeTileIndex(this, this.level, this[`t${i}`]);\r\n this.$l[`d${i}`] = this[PROBE_DATA].at(this[`i${i}`]);\r\n // Skip inactive (buried) probes (Majercik et al. 2021, probe classification)\r\n this.$if(probeActive(this, this[`d${i}`]), function () {\r\n this.$l.pp = probePosition(this, this.level, this[`w${i}`], this[`d${i}`]);\r\n this.$l.tri = pb.mul(\r\n off[0] ? this.alpha.x : pb.sub(1, this.alpha.x),\r\n off[1] ? this.alpha.y : pb.sub(1, this.alpha.y),\r\n off[2] ? this.alpha.z : pb.sub(1, this.alpha.z)\r\n );\r\n this.$l.dirToProbe = pb.normalize(pb.sub(this.pp, this.p));\r\n // Wrap shading: a probe behind the surface still contributes a little\r\n this.$l.wrap = pb.mul(pb.add(pb.dot(this.dirToProbe, this.n), 1), 0.5);\r\n this.$l.w = pb.add(pb.mul(this.wrap, this.wrap), 0.2);\r\n // Chebyshev visibility of the point as the probe sees the surface\r\n this.$l.toBiased = pb.sub(this.biased, this.pp);\r\n this.$l.dist = pb.length(this.toBiased);\r\n this.$l.vis = sampleProbeTile(\r\n this,\r\n this[PROBE_VISIBILITY],\r\n this[`i${i}`],\r\n this.p0.w,\r\n this.p1.zw,\r\n pb.div(this.toBiased, pb.max(this.dist, 1e-6))\r\n );\r\n this.$l.mean = this.vis.x;\r\n this.$l.variance = pb.abs(pb.sub(pb.mul(this.mean, this.mean), this.vis.y));\r\n this.$if(pb.greaterThan(this.dist, this.mean), function () {\r\n this.$l.dd = pb.sub(this.dist, this.mean);\r\n this.$l.cheb = pb.div(this.variance, pb.add(this.variance, pb.mul(this.dd, this.dd)));\r\n this.w = pb.mul(this.w, pb.max(pb.mul(this.cheb, this.cheb, this.cheb), 0.05));\r\n });\r\n // Crush tiny weights to avoid noise from a nearly-blocked probe\r\n this.$if(pb.lessThan(this.w, 0.2), function () {\r\n this.w = pb.mul(this.w, pb.div(pb.mul(this.w, this.w), 0.04));\r\n });\r\n this.w = pb.mul(this.w, this.tri);\r\n this.$l.irr = sampleProbeTile(\r\n this,\r\n this[PROBE_IRRADIANCE],\r\n this[`i${i}`],\r\n this.p0.z,\r\n this.p1.xy,\r\n this.n\r\n );\r\n this.sum = pb.add(this.sum, pb.mul(sky ? pb.vec3(this.irr.a) : this.irr.rgb, this.w));\r\n this.wsum = pb.add(this.wsum, this.w);\r\n });\r\n }\r\n });\r\n this.$return(pb.vec4(pb.div(this.sum, pb.max(this.wsum, 1e-5)), this.wsum));\r\n });\r\n return scope[funcName](level, p, biased, n) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Probe volume irradiance (E/π, rgb) at a surface; `a` = 1 if any probe answered. The finest\r\n * level holding the point answers, fading to the next over the outer 0.5-2.5 probe spacings of\r\n * its window. DDGI (Majercik et al., JCGT 2019, §4);\r\n *\r\n * Normal/view biases of params[2] are in probe spacings, scaled per level; the view bias fades\r\n * out within one spacing of the viewer. `toViewer` runs from point to viewer; feedback mode\r\n * applies the full view bias.\r\n *\r\n * Modes: `surface` applies the read scale; `feedback` returns the stored value for the next\r\n * voxel bounce; `sky` interpolates sky visibility (0..1) with the same weights.\r\n * @internal\r\n */\r\nexport function sampleProbeIrradiance(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n toViewer: PBShaderExp,\r\n mode: 'surface' | 'feedback' | 'sky' = 'surface'\r\n) {\r\n const pb = scope.$builder;\r\n const funcName =\r\n mode === 'surface'\r\n ? 'Z_sampleProbeIrradiance'\r\n : mode === 'feedback'\r\n ? 'Z_sampleProbeIrradianceFeedback'\r\n : 'Z_sampleProbeSkyVisibility';\r\n pb.func(funcName, [pb.vec3('p'), pb.vec3('n'), pb.vec3('toViewer')], function () {\r\n this.$l.p0 = this[PROBE_PARAMS].at(0);\r\n this.$l.p2 = this[PROBE_PARAMS].at(2);\r\n this.$l.levels = pb.int(this.p0.x);\r\n this.$l.viewDist = pb.length(this.toViewer);\r\n this.$l.v = pb.div(this.toViewer, pb.max(this.viewDist, 1e-6));\r\n this.$l.acc = pb.vec3(0);\r\n this.$l.accW = pb.float(0);\r\n this.$for(pb.int('l'), 0, PROBE_MAX_LEVELS, function () {\r\n this.$if(\r\n pb.or(pb.greaterThanEqual(this.l, this.levels), pb.greaterThanEqual(this.accW, 0.999)),\r\n function () {\r\n this.$break();\r\n }\r\n );\r\n this.$l.lo = probeLevelOrigin(this, this.l);\r\n this.$l.viewFade = mode === 'feedback' ? pb.float(1) : pb.clamp(pb.div(this.viewDist, this.lo.w), 0, 1);\r\n this.$l.biased = pb.add(\r\n this.p,\r\n pb.mul(pb.add(pb.mul(this.n, this.p2.y), pb.mul(this.v, this.p2.z, this.viewFade)), this.lo.w)\r\n );\r\n this.$l.s = sampleProbeLevel(this, this.l, this.p, this.biased, this.n, mode === 'sky');\r\n this.$if(pb.greaterThan(this.s.a, 1e-5), function () {\r\n // Distance in probes to the window edge\r\n this.$l.lg = probeLevelGrid(this, this.l);\r\n this.$l.g = pb.sub(pb.div(this.biased, this.lo.w), this.lo.xyz);\r\n this.$l.edge = pb.min(this.g, pb.sub(pb.sub(this.lg.xyz, pb.vec3(1)), this.g));\r\n this.$l.t = pb.smoothStep(0.5, 2.5, pb.min(pb.min(this.edge.x, this.edge.y), this.edge.z));\r\n this.$l.share = pb.mul(this.t, pb.sub(1, this.accW));\r\n this.acc = pb.add(this.acc, pb.mul(this.s.rgb, this.share));\r\n this.accW = pb.add(this.accW, this.share);\r\n });\r\n });\r\n this.$l.valid = this.$choice(pb.greaterThan(this.accW, 1e-4), pb.float(1), pb.float(0));\r\n this.$l.e = pb.div(this.acc, pb.max(this.accW, 1e-4));\r\n this.$return(pb.vec4(mode === 'surface' ? pb.mul(this.e, this.p2.x) : this.e, this.valid));\r\n });\r\n return scope[funcName](worldPos, normal, toViewer) as PBShaderExp;\r\n}\r\n"],"names":["PROBE_IRRADIANCE","PROBE_VISIBILITY","PROBE_DATA","PROBE_PARAMS","PROBE_MAX_LEVELS","PROBE_PARAM_VEC4S","declareProbeUniforms","scope","group","writable","pb","$builder","tex2D","uniform","withSampler","getSamplerOptions","vec4","storageBuffer","storageBufferReadonly","probeLevelOrigin","level","at","add","mul","int","probeLevelGrid","octEncode","v","funcName","func","vec3","$l","l1","abs","x","y","z","p","div","xy","max","sgn","vec2","$choice","greaterThanEqual","float","$return","lessThan","sub","yx","octDecode","uv","$if","normalize","sphericalFibonacci","i","n","phi","fract","Math","PI","r","sqrt","cos","sin","quatRotate","q","t","cross","xyz","w","probeTileIndex","texel","ivec3","g","probeTexelFromIndex","index","nx","ny","local","mod","yz","probeWorldFromTexel","o","probeTexelFromWorld","world","probePosition","data","probeTileOrigin","texels","cols","ivec2","sampleProbeTile","tex","texSize","dir","$str","origin","oct","textureSampleLevel","PROBE_STATE_INACTIVE","probeActive","and","greaterThan","sampleProbeLevel","biased","sky","p0","p1","lo","lg","spacing","n3","sum","wsum","inside","all","lessThanEqual","base","clamp","floor","alpha","off","pp","tri","dirToProbe","wrap","dot","toBiased","dist","length","vis","zw","mean","variance","dd","cheb","irr","a","rgb","sampleProbeIrradiance","worldPos","normal","toViewer","mode","p2","levels","viewDist","acc","accW","$for","or","l","$break","viewFade","s","edge","min","smoothStep","share","valid","e"],"mappings":";;AAGA;;;IAIaA,MAAAA,gBAAAA,GAAmB;AAChC,iBACaC,MAAAA,gBAAAA,GAAmB;AAChC,iBACaC,MAAAA,UAAAA,GAAa;AAC1B,iBACaC,MAAAA,YAAAA,GAAe;AAC5B,wDACaC,MAAAA,gBAAAA,GAAmB;AAChC,gDACO,MAAMC,iBAAoB,GAAA,CAAA,GAAI,IAAID;AAEzC;;;;;;;;;;;;;;;;IAiBO,SAASE,oBAAqBC,CAAAA,KAAoB,EAAEC,KAAa,EAAEC,WAAW,KAAK,EAAA;IACxF,MAAMC,EAAAA,GAAKH,MAAMI,QAAQ;;;IAGzBJ,KAAK,CAACP,gBAAiB,CAAA,GAAGU,EAAGE,CAAAA,KAAK,EAAGC,CAAAA,OAAO,CAACL,KAAAA,CAAAA,CAAOM,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;IAClFR,KAAK,CAACN,gBAAiB,CAAA,GAAGS,EAAGE,CAAAA,KAAK,EAAGC,CAAAA,OAAO,CAACL,KAAAA,CAAAA,CAAOM,WAAW,CAACC,iBAAkB,CAAA,oBAAA,CAAA,CAAA;AAClFR,IAAAA,KAAK,CAACL,UAAW,CAAA,GAAGO,WAChBC,EAAGM,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAACT,SAC3BE,EAAGM,CAAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAGE,qBAAqB,CAACV,KAAAA,CAAAA;IACvCD,KAAK,CAACJ,aAAa,GAAGO,EAAAA,CAAGM,IAAI,CAACX,iBAAAA,CAAkB,EAAGQ,CAAAA,OAAO,CAACL,KAAAA,CAAAA;AAC7D;AAEA,oEACO,SAASW,gBAAiBZ,CAAAA,KAA4B,EAAEa,KAA2B,EAAA;IACxF,MAAMV,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,OAAOJ,KAAK,CAACJ,YAAAA,CAAa,CAACkB,EAAE,CAACX,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGc,GAAG,CAACJ,QAAQ,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AACjE;AAEA,2DACO,SAASK,cAAelB,CAAAA,KAA4B,EAAEa,KAA2B,EAAA;IACtF,MAAMV,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,OAAOJ,KAAK,CAACJ,YAAAA,CAAa,CAACkB,EAAE,CAACX,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGc,GAAG,CAACJ,QAAQ,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AACjE;AAEA,yFACO,SAASM,SAAUnB,CAAAA,KAA4B,EAAEoB,CAAc,EAAA;IACpE,MAAMjB,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,aAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAChC,QAAA,IAAI,CAACC,EAAE,CAACC,EAAE,GAAGtB,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACN,CAAC,CAACO,CAAC,CAAGxB,EAAAA,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACN,CAAC,CAACQ,CAAC,CAAGzB,EAAAA,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACN,CAAC,CAACS,CAAC,CAAA,CAAA;QACvE,IAAI,CAACL,EAAE,CAACM,CAAC,GAAG3B,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACX,CAAC,CAACY,EAAE,EAAE7B,EAAG8B,CAAAA,GAAG,CAAC,IAAI,CAACR,EAAE,EAAE,IAAA,CAAA,CAAA;QAC9C,IAAI,CAACD,EAAE,CAACU,GAAG,GAAG/B,GAAGgC,IAAI,CACnB,IAAI,CAACC,OAAO,CAACjC,GAAGkC,gBAAgB,CAAC,IAAI,CAACP,CAAC,CAACH,CAAC,EAAE,CAAA,CAAA,EAAIxB,EAAGmC,CAAAA,KAAK,CAAC,CAAA,CAAA,EAAInC,GAAGmC,KAAK,CAAC,EAAC,CAAA,CAAA,EACtE,IAAI,CAACF,OAAO,CAACjC,EAAAA,CAAGkC,gBAAgB,CAAC,IAAI,CAACP,CAAC,CAACF,CAAC,EAAE,CAAA,CAAA,EAAIzB,EAAGmC,CAAAA,KAAK,CAAC,CAAInC,CAAAA,EAAAA,EAAAA,CAAGmC,KAAK,CAAC,EAAC,CAAA,CAAA,CAAA;AAExE,QAAA,IAAI,CAACC,OAAO,CACV,IAAI,CAACH,OAAO,CAACjC,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACpB,CAAC,CAACS,CAAC,EAAE,CAAI1B,CAAAA,EAAAA,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGsC,GAAG,CAACtC,GAAGgC,IAAI,CAAC,IAAIhC,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACI,CAAC,CAACY,EAAE,IAAI,IAAI,CAACR,GAAG,CAAG,EAAA,IAAI,CAACJ,CAAC,CAAA,CAAA;AAE1G,KAAA,CAAA;IACA,OAAO9B,KAAK,CAACqB,QAAAA,CAAS,CAACD,CAAAA,CAAAA;AACzB;AAEA,+CACO,SAASuB,SAAU3C,CAAAA,KAA4B,EAAE4C,EAAe,EAAA;IACrE,MAAMzC,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,aAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGgC,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AACjC,QAAA,IAAI,CAACX,EAAE,CAACJ,CAAC,GAAGjB,EAAAA,CAAGoB,IAAI,CAAC,IAAI,CAACqB,EAAE,CAACjB,CAAC,EAAE,IAAI,CAACiB,EAAE,CAAChB,CAAC,EAAEzB,EAAAA,CAAGsC,GAAG,CAACtC,EAAAA,CAAGsC,GAAG,CAAC,CAAA,EAAGtC,GAAGuB,GAAG,CAAC,IAAI,CAACkB,EAAE,CAACjB,CAAC,CAAA,CAAA,EAAIxB,GAAGuB,GAAG,CAAC,IAAI,CAACkB,EAAE,CAAChB,CAAC,CAAA,CAAA,CAAA;QAC/F,IAAI,CAACJ,EAAE,CAACU,GAAG,GAAG/B,GAAGgC,IAAI,CACnB,IAAI,CAACC,OAAO,CAACjC,GAAGkC,gBAAgB,CAAC,IAAI,CAACjB,CAAC,CAACO,CAAC,EAAE,CAAA,CAAA,EAAIxB,EAAGmC,CAAAA,KAAK,CAAC,CAAA,CAAA,EAAInC,GAAGmC,KAAK,CAAC,EAAC,CAAA,CAAA,EACtE,IAAI,CAACF,OAAO,CAACjC,EAAAA,CAAGkC,gBAAgB,CAAC,IAAI,CAACjB,CAAC,CAACQ,CAAC,EAAE,CAAA,CAAA,EAAIzB,EAAGmC,CAAAA,KAAK,CAAC,CAAInC,CAAAA,EAAAA,EAAAA,CAAGmC,KAAK,CAAC,EAAC,CAAA,CAAA,CAAA;AAExE,QAAA,IAAI,CAACO,GAAG,CAAC1C,EAAAA,CAAGqC,QAAQ,CAAC,IAAI,CAACpB,CAAC,CAACS,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AACjC,YAAA,IAAI,CAACT,CAAC,GAAGjB,EAAAA,CAAGoB,IAAI,CAACpB,EAAAA,CAAGa,GAAG,CAACb,EAAGsC,CAAAA,GAAG,CAACtC,EAAAA,CAAGgC,IAAI,CAAC,CAAA,CAAA,EAAIhC,EAAGuB,CAAAA,GAAG,CAAC,IAAI,CAACN,CAAC,CAACsB,EAAE,CAAA,CAAA,EAAI,IAAI,CAACR,GAAG,CAAG,EAAA,IAAI,CAACd,CAAC,CAACS,CAAC,CAAA;AACpF,SAAA,CAAA;QACA,IAAI,CAACU,OAAO,CAACpC,EAAAA,CAAG2C,SAAS,CAAC,IAAI,CAAC1B,CAAC,CAAA,CAAA;AAClC,KAAA,CAAA;IACA,OAAOpB,KAAK,CAACqB,QAAAA,CAAS,CAACuB,EAAAA,CAAAA;AACzB;AAEA,wEACO,SAASG,kBAAAA,CAAmB/C,KAA4B,EAAEgD,CAAc,EAAEC,CAAc,EAAA;IAC7F,MAAM9C,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,sBAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGmC,KAAK,CAAC,GAAA,CAAA;AAAMnC,QAAAA,EAAAA,CAAGmC,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAChD,IAAI,CAACd,EAAE,CAAC0B,GAAG,GAAG/C,EAAGa,CAAAA,GAAG,CAACb,EAAGgD,CAAAA,KAAK,CAAChD,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACgC,CAAC,EAAE,kBAAA,CAAA,CAAA,EAAsB,CAAII,GAAAA,IAAAA,CAAKC,EAAE,CAAA;QAC9E,IAAI,CAAC7B,EAAE,CAACK,CAAC,GAAG1B,EAAGsC,CAAAA,GAAG,CAAC,CAAA,EAAGtC,EAAG4B,CAAAA,GAAG,CAAC5B,EAAAA,CAAGY,GAAG,CAACZ,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAACgC,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAACC,CAAC,CAAA,CAAA;QACjE,IAAI,CAACzB,EAAE,CAAC8B,CAAC,GAAGnD,GAAGoD,IAAI,CAACpD,EAAG8B,CAAAA,GAAG,CAAC9B,EAAAA,CAAGsC,GAAG,CAAC,CAAA,EAAGtC,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACa,CAAC,EAAE,IAAI,CAACA,CAAC,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA;AAC9D,QAAA,IAAI,CAACU,OAAO,CAACpC,EAAGoB,CAAAA,IAAI,CAACpB,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGqD,GAAG,CAAC,IAAI,CAACN,GAAG,GAAG,IAAI,CAACI,CAAC,CAAA,EAAGnD,GAAGa,GAAG,CAACb,EAAGsD,CAAAA,GAAG,CAAC,IAAI,CAACP,GAAG,CAAA,EAAG,IAAI,CAACI,CAAC,CAAG,EAAA,IAAI,CAACzB,CAAC,CAAA,CAAA;AACjG,KAAA,CAAA;AACA,IAAA,OAAO7B,KAAK,CAACqB,QAAS,CAAA,CAAC2B,CAAGC,EAAAA,CAAAA,CAAAA;AAC5B;AAEA,iEACO,SAASS,UAAAA,CAAW1D,KAA4B,EAAE2D,CAAc,EAAEvC,CAAc,EAAA;IACrF,MAAMjB,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,cAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGM,IAAI,CAAC,GAAA,CAAA;AAAMN,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAC9C,IAAI,CAACC,EAAE,CAACoC,CAAC,GAAGzD,EAAGa,CAAAA,GAAG,CAACb,EAAG0D,CAAAA,KAAK,CAAC,IAAI,CAACF,CAAC,CAACG,GAAG,EAAE,IAAI,CAAC1C,CAAC,CAAG,EAAA,CAAA,CAAA;AACjD,QAAA,IAAI,CAACmB,OAAO,CAACpC,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAACK,CAAC,EAAEjB,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAAC4C,CAAC,EAAE,IAAI,CAACD,CAAC,CAACI,CAAC,CAAA,EAAG5D,GAAG0D,KAAK,CAAC,IAAI,CAACF,CAAC,CAACG,GAAG,EAAE,IAAI,CAACF,CAAC,CAAA,CAAA,CAAA;AACnF,KAAA,CAAA;AACA,IAAA,OAAO5D,KAAK,CAACqB,QAAS,CAAA,CAACsC,CAAGvC,EAAAA,CAAAA,CAAAA;AAC5B;AAEA,iEACO,SAAS4C,cAAAA,CACdhE,KAA4B,EAC5Ba,KAA2B,EAC3BoD,KAAkB,EAAA;IAElB,MAAM9D,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,kBAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGc,GAAG,CAAC,OAAA,CAAA;AAAUd,QAAAA,EAAAA,CAAG+D,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAClD,IAAI,CAAC1C,EAAE,CAAC2C,CAAC,GAAGjD,eAAe,IAAI,EAAE,IAAI,CAACL,KAAK,CAAA;QAC3C,IAAI,CAAC0B,OAAO,CACVpC,EAAGY,CAAAA,GAAG,CACJZ,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACkD,CAAC,CAACJ,CAAC,CAAA,EACf,IAAI,CAACH,CAAC,CAACjC,CAAC,EACRxB,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACkD,CAAC,CAACxC,CAAC,CAAGxB,EAAAA,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAAC6C,CAAC,CAAChC,CAAC,EAAEzB,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACkD,CAAC,CAACvC,CAAC,CAAA,EAAG,IAAI,CAACgC,CAAC,CAAC/B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAGjF,KAAA,CAAA;AACA,IAAA,OAAO7B,KAAK,CAACqB,QAAS,CAAA,CAACR,KAAOoD,EAAAA,KAAAA,CAAAA;AAChC;AAEA,iEACO,SAASG,mBAAAA,CAAoBpE,KAA4B,EAAEa,KAAkB,EAAEwD,KAAkB,EAAA;IACtG,MAAMlE,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,uBAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGc,GAAG,CAAC,OAAA,CAAA;AAAUd,QAAAA,EAAAA,CAAGc,GAAG,CAAC,GAAA;KAAK,EAAE,WAAA;QAChD,IAAI,CAACO,EAAE,CAAC2C,CAAC,GAAGjD,eAAe,IAAI,EAAE,IAAI,CAACL,KAAK,CAAA;AAC3C,QAAA,IAAI,CAACW,EAAE,CAAC8C,EAAE,GAAGnE,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACkD,CAAC,CAACxC,CAAC,CAAA;AAC5B,QAAA,IAAI,CAACH,EAAE,CAAC+C,EAAE,GAAGpE,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACkD,CAAC,CAACvC,CAAC,CAAA;AAC5B,QAAA,IAAI,CAACJ,EAAE,CAACgD,KAAK,GAAGrE,EAAAA,CAAGsC,GAAG,CAAC,IAAI,CAACO,CAAC,EAAE7C,GAAGc,GAAG,CAAC,IAAI,CAACkD,CAAC,CAACJ,CAAC,CAAA,CAAA;AAC9C,QAAA,IAAI,CAACvC,EAAE,CAACG,CAAC,GAAGxB,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACF,EAAE,CAAA;AACtC,QAAA,IAAI,CAAC9C,EAAE,CAACkD,EAAE,GAAGvE,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACyC,KAAK,EAAE,IAAI,CAACF,EAAE,CAAA;AACvC,QAAA,IAAI,CAAC/B,OAAO,CAACpC,EAAAA,CAAG+D,KAAK,CAAC,IAAI,CAACvC,CAAC,EAAExB,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACC,EAAE,EAAE,IAAI,CAACH,EAAE,CAAA,EAAGpE,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAAC2C,EAAE,EAAE,IAAI,CAACH,EAAE,CAAA,CAAA,CAAA;AACjF,KAAA,CAAA;AACA,IAAA,OAAOvE,KAAK,CAACqB,QAAS,CAAA,CAACR,KAAOwD,EAAAA,KAAAA,CAAAA;AAChC;AAEA,0EACO,SAASM,mBAAAA,CAAoB3E,KAA4B,EAAEa,KAAkB,EAAEoD,KAAkB,EAAA;IACtG,MAAM9D,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,QAAW,GAAA,uBAAA;IACjBlB,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGc,GAAG,CAAC,OAAA,CAAA;AAAUd,QAAAA,EAAAA,CAAG+D,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;AAClD,QAAA,IAAI,CAAC1C,EAAE,CAACoD,CAAC,GAAGzE,EAAG+D,CAAAA,KAAK,CAACtD,gBAAAA,CAAiB,IAAI,EAAE,IAAI,CAACC,KAAK,EAAEiD,GAAG,CAAA;AAC3D,QAAA,IAAI,CAACtC,EAAE,CAACyB,CAAC,GAAG9C,EAAG+D,CAAAA,KAAK,CAAChD,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACL,KAAK,EAAEiD,GAAG,CAAA;AACzD,QAAA,IAAI,CAACvB,OAAO,CAACpC,GAAGY,GAAG,CAAC,IAAI,CAAC6D,CAAC,EAAEzE,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGY,GAAG,CAACZ,EAAAA,CAAGsE,GAAG,CAACtE,EAAAA,CAAGsC,GAAG,CAAC,IAAI,CAACmB,CAAC,EAAE,IAAI,CAACgB,CAAC,CAAG,EAAA,IAAI,CAAC3B,CAAC,GAAG,IAAI,CAACA,CAAC,CAAG,EAAA,IAAI,CAACA,CAAC,CAAA,CAAA,CAAA;AACnG,KAAA,CAAA;AACA,IAAA,OAAOjD,KAAK,CAACqB,QAAS,CAAA,CAACR,KAAOoD,EAAAA,KAAAA,CAAAA;AAChC;AAEA,iEACO,SAASY,mBAAAA,CACd7E,KAA4B,EAC5Ba,KAA2B,EAC3BiE,KAAkB,EAAA;IAElB,MAAM3E,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAM6C,IAAI9C,EAAG+D,CAAAA,KAAK,CAAChD,cAAelB,CAAAA,KAAAA,EAAOa,OAAOiD,GAAG,CAAA;IACnD,OAAO3D,EAAAA,CAAGsE,GAAG,CAACtE,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGsE,GAAG,CAACK,KAAO7B,EAAAA,CAAAA,CAAAA,EAAIA,CAAIA,CAAAA,EAAAA,CAAAA,CAAAA;AAC7C;AAEA,oGACO,SAAS8B,aACd/E,CAAAA,KAA4B,EAC5Ba,KAA2B,EAC3BiE,KAAkB,EAClBE,IAAiB,EAAA;IAEjB,MAAM7E,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,OAAOD,GAAGY,GAAG,CAACZ,EAAGa,CAAAA,GAAG,CAACb,EAAGoB,CAAAA,IAAI,CAACuD,KAAAA,CAAAA,EAAQlE,iBAAiBZ,KAAOa,EAAAA,KAAAA,CAAAA,CAAOkD,CAAC,CAAA,EAAGiB,KAAKlB,GAAG,CAAA;AAClF;AAEA,gFACO,SAASmB,eAAAA,CAAgBjF,KAA4B,EAAEqE,KAAkB,EAAEa,MAAmB,EAAA;IACnG,MAAM/E,EAAAA,GAAKH,MAAMI,QAAQ;IACzB,MAAM+E,IAAAA,GAAOhF,EAAGc,CAAAA,GAAG,CAACjB,KAAK,CAACJ,YAAAA,CAAa,CAACkB,EAAE,CAAC,CAAA,CAAA,CAAGc,CAAC,CAAA;AAC/C,IAAA,OAAOzB,GAAGa,GAAG,CAACb,GAAGiF,KAAK,CAACjF,GAAGsE,GAAG,CAACJ,KAAOc,EAAAA,IAAAA,CAAAA,EAAOhF,GAAG4B,GAAG,CAACsC,OAAOc,IAAQhF,CAAAA,CAAAA,EAAAA,EAAAA,CAAGc,GAAG,CAACiE,MAAAA,CAAAA,CAAAA;AAC3E;AAEA;;;AAGC,IACM,SAASG,eACdrF,CAAAA,KAA4B,EAC5BsF,GAAgB,EAChBjB,KAAkB,EAClBa,MAAmB,EACnBK,OAAoB,EACpBC,GAAgB,EAAA;IAEhB,MAAMrF,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,WAAW,CAAC,kBAAkB,EAAEiE,GAAAA,CAAIG,IAAI,CAAE,CAAA;IAChDtF,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGc,GAAG,CAAC,OAAA,CAAA;AAAUd,QAAAA,EAAAA,CAAGmC,KAAK,CAAC,QAAA,CAAA;AAAWnC,QAAAA,EAAAA,CAAGgC,IAAI,CAAC,SAAA,CAAA;AAAYhC,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,KAAA;KAAO,EAAE,WAAA;AAC3F,QAAA,IAAI,CAACC,EAAE,CAACkE,MAAM,GAAGvF,GAAGgC,IAAI,CAAC8C,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACZ,KAAK,EAAE,IAAI,CAACa,MAAM,CAAA,CAAA;QACtE,IAAI,CAAC1D,EAAE,CAACmE,GAAG,GAAGxF,EAAGY,CAAAA,GAAG,CAACZ,EAAGa,CAAAA,GAAG,CAACG,SAAU,CAAA,IAAI,EAAE,IAAI,CAACqE,GAAG,CAAG,EAAA,GAAA,CAAA,EAAMrF,EAAGgC,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAACX,EAAE,CAACoB,EAAE,GAAGzC,GAAG4B,GAAG,CACjB5B,EAAGY,CAAAA,GAAG,CAAC,IAAI,CAAC2E,MAAM,EAAEvF,GAAGgC,IAAI,CAAC,CAAIhC,CAAAA,EAAAA,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC2E,GAAG,EAAExF,EAAGsC,CAAAA,GAAG,CAAC,IAAI,CAACyC,MAAM,EAAE,CACrE,CAAA,CAAA,CAAA,EAAA,IAAI,CAACK,OAAO,CAAA;QAEd,IAAI,CAAChD,OAAO,CAACpC,EAAGyF,CAAAA,kBAAkB,CAACN,GAAK,EAAA,IAAI,CAAC1C,EAAE,EAAE,CAAA,CAAA,CAAA;AACnD,KAAA,CAAA;AACA,IAAA,OAAO5C,KAAK,CAACqB,QAAAA,CAAS,CAACgD,KAAAA,EAAOa,QAAQK,OAASC,EAAAA,GAAAA,CAAAA;AACjD;AAEA;;;;IAKaK,MAAAA,oBAAAA,GAAuB;AAEpC,iEACO,SAASC,WAAY9F,CAAAA,KAA4B,EAAEgF,IAAiB,EAAA;IACzE,MAAM7E,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,OAAOD,GAAG4F,GAAG,CAAC5F,EAAG6F,CAAAA,WAAW,CAAChB,IAAKjB,CAAAA,CAAC,EAAE,GAAA,CAAA,EAAM5D,GAAGqC,QAAQ,CAACwC,IAAKjB,CAAAA,CAAC,EAAE8B,oBAAuB,GAAA,GAAA,CAAA,CAAA;AACxF;AAEA;;;;;AAKC,IACD,SAASI,gBAAAA,CACPjG,KAA4B,EAC5Ba,KAAkB,EAClBiB,CAAc,EACdoE,MAAmB,EACnBjD,CAAc,EACdkD,GAAY,EAAA;IAEZ,MAAMhG,EAAAA,GAAKH,MAAMI,QAAQ;IACzB,MAAMiB,QAAAA,GAAW8E,MAAM,uBAA0B,GAAA,oBAAA;IACjDhG,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGc,GAAG,CAAC,OAAA,CAAA;AAAUd,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,GAAA,CAAA;AAAMpB,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,QAAA,CAAA;AAAWpB,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;QAClF,IAAI,CAACC,EAAE,CAAC4E,EAAE,GAAG,IAAI,CAACxG,YAAAA,CAAa,CAACkB,EAAE,CAAC,CAAA,CAAA;QACnC,IAAI,CAACU,EAAE,CAAC6E,EAAE,GAAG,IAAI,CAACzG,YAAAA,CAAa,CAACkB,EAAE,CAAC,CAAA,CAAA;QACnC,IAAI,CAACU,EAAE,CAAC8E,EAAE,GAAG1F,iBAAiB,IAAI,EAAE,IAAI,CAACC,KAAK,CAAA;QAC9C,IAAI,CAACW,EAAE,CAAC+E,EAAE,GAAGrF,eAAe,IAAI,EAAE,IAAI,CAACL,KAAK,CAAA;QAC5C,IAAI,CAACW,EAAE,CAACgF,OAAO,GAAG,IAAI,CAACF,EAAE,CAACvC,CAAC;AAC3B,QAAA,IAAI,CAACvC,EAAE,CAACkE,MAAM,GAAGvF,EAAAA,CAAG+D,KAAK,CAAC,IAAI,CAACoC,EAAE,CAACxC,GAAG,CAAA;AACrC,QAAA,IAAI,CAACtC,EAAE,CAACiF,EAAE,GAAGtG,EAAAA,CAAG+D,KAAK,CAAC,IAAI,CAACqC,EAAE,CAACzC,GAAG,CAAA;QACjC,IAAI,CAACtC,EAAE,CAAC2C,CAAC,GAAGhE,GAAGsC,GAAG,CAACtC,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACmE,MAAM,EAAE,IAAI,CAACM,OAAO,CAAA,EAAGrG,GAAGoB,IAAI,CAAC,IAAI,CAACmE,MAAM,CAAA,CAAA;AACzE,QAAA,IAAI,CAAClE,EAAE,CAACkF,GAAG,GAAGvG,EAAAA,CAAGoB,IAAI,CAAC,CAAA,CAAA;AACtB,QAAA,IAAI,CAACC,EAAE,CAACmF,IAAI,GAAGxG,EAAAA,CAAGmC,KAAK,CAAC,CAAA,CAAA;QACxB,IAAI,CAACd,EAAE,CAACoF,MAAM,GAAGzG,EAAG4F,CAAAA,GAAG,CACrB5F,EAAG0G,CAAAA,GAAG,CAAC1G,EAAGkC,CAAAA,gBAAgB,CAAC,IAAI,CAAC8B,CAAC,EAAEhE,EAAAA,CAAGoB,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,EAC3CpB,GAAG0G,GAAG,CAAC1G,GAAG2G,aAAa,CAAC,IAAI,CAAC3C,CAAC,EAAEhE,EAAGsC,CAAAA,GAAG,CAACtC,EAAGoB,CAAAA,IAAI,CAAC,IAAI,CAACkF,EAAE,CAAGtG,EAAAA,EAAAA,CAAGoB,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEnE,QAAA,IAAI,CAACsB,GAAG,CAAC,IAAI,CAAC+D,MAAM,EAAE,WAAA;AACpB,YAAA,IAAI,CAACpF,EAAE,CAACuF,IAAI,GAAG5G,EAAG+D,CAAAA,KAAK,CAAC/D,EAAAA,CAAG6G,KAAK,CAAC7G,EAAAA,CAAG8G,KAAK,CAAC,IAAI,CAAC9C,CAAC,CAAGhE,EAAAA,EAAAA,CAAGoB,IAAI,CAAC,CAAIpB,CAAAA,EAAAA,EAAAA,CAAGsC,GAAG,CAACtC,EAAAA,CAAGoB,IAAI,CAAC,IAAI,CAACkF,EAAE,CAAGtG,EAAAA,EAAAA,CAAGoB,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAChG,YAAA,IAAI,CAACC,EAAE,CAAC0F,KAAK,GAAG/G,EAAAA,CAAG6G,KAAK,CAAC7G,EAAGsC,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAEhE,EAAAA,CAAGoB,IAAI,CAAC,IAAI,CAACwF,IAAI,CAAA,CAAA,EAAI5G,EAAGoB,CAAAA,IAAI,CAAC,CAAA,CAAA,EAAIpB,EAAGoB,CAAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AACjF,YAAA,IAAK,IAAIyB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,MAAMmE,GAAM,GAAA;oBAACnE,CAAI,GAAA,CAAA;AAAIA,oBAAAA,CAAAA,IAAK,CAAK,GAAA,CAAA;AAAIA,oBAAAA,CAAAA,IAAK,CAAK,GAAA;AAAE,iBAAA;AAC/C,gBAAA,IAAI,CAACxB,EAAE,CAAC,CAAC,CAAC,EAAEwB,CAAAA,CAAAA,CAAG,CAAC,GAAG7C,EAAGY,CAAAA,GAAG,CAAC,IAAI,CAAC2E,MAAM,EAAE,IAAI,CAACqB,IAAI,EAAE5G,EAAG+D,CAAAA,KAAK,CAACiD,GAAG,CAAC,CAAE,CAAA,EAAEA,GAAG,CAAC,CAAA,CAAE,EAAEA,GAAG,CAAC,CAAE,CAAA,CAAA,CAAA;gBACjF,IAAI,CAAC3F,EAAE,CAAC,CAAC,CAAC,EAAEwB,CAAAA,CAAAA,CAAG,CAAC,GAAG6B,mBAAoB,CAAA,IAAI,EAAE,IAAI,CAAChE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAEmC,CAAAA,CAAAA,CAAG,CAAC,CAAA;gBACtE,IAAI,CAACxB,EAAE,CAAC,CAAC,CAAC,EAAEwB,CAAAA,CAAAA,CAAG,CAAC,GAAGgB,cAAe,CAAA,IAAI,EAAE,IAAI,CAACnD,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAEmC,CAAAA,CAAAA,CAAG,CAAC,CAAA;gBACjE,IAAI,CAACxB,EAAE,CAAC,CAAC,CAAC,EAAEwB,CAAAA,CAAAA,CAAG,CAAC,GAAG,IAAI,CAACrD,UAAW,CAAA,CAACmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAEkC,CAAAA,CAAAA,CAAG,CAAC,CAAA;;AAEpD,gBAAA,IAAI,CAACH,GAAG,CAACiD,WAAAA,CAAY,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE9C,CAAAA,CAAAA,CAAG,CAAC,CAAG,EAAA,WAAA;oBACzC,IAAI,CAACxB,EAAE,CAAC4F,EAAE,GAAGrC,aAAc,CAAA,IAAI,EAAE,IAAI,CAAClE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAEmC,CAAAA,CAAAA,CAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAEA,CAAAA,CAAAA,CAAG,CAAC,CAAA;AACzE,oBAAA,IAAI,CAACxB,EAAE,CAAC6F,GAAG,GAAGlH,EAAAA,CAAGa,GAAG,CAClBmG,GAAG,CAAC,CAAE,CAAA,GAAG,IAAI,CAACD,KAAK,CAACvF,CAAC,GAAGxB,EAAAA,CAAGsC,GAAG,CAAC,GAAG,IAAI,CAACyE,KAAK,CAACvF,CAAC,CAAA,EAC9CwF,GAAG,CAAC,EAAE,GAAG,IAAI,CAACD,KAAK,CAACtF,CAAC,GAAGzB,EAAAA,CAAGsC,GAAG,CAAC,CAAG,EAAA,IAAI,CAACyE,KAAK,CAACtF,CAAC,GAC9CuF,GAAG,CAAC,CAAE,CAAA,GAAG,IAAI,CAACD,KAAK,CAACrF,CAAC,GAAG1B,EAAAA,CAAGsC,GAAG,CAAC,CAAG,EAAA,IAAI,CAACyE,KAAK,CAACrF,CAAC,CAAA,CAAA;AAEhD,oBAAA,IAAI,CAACL,EAAE,CAAC8F,UAAU,GAAGnH,GAAG2C,SAAS,CAAC3C,EAAGsC,CAAAA,GAAG,CAAC,IAAI,CAAC2E,EAAE,EAAE,IAAI,CAACtF,CAAC,CAAA,CAAA;;oBAExD,IAAI,CAACN,EAAE,CAAC+F,IAAI,GAAGpH,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGY,GAAG,CAACZ,GAAGqH,GAAG,CAAC,IAAI,CAACF,UAAU,EAAE,IAAI,CAACrE,CAAC,CAAA,EAAG,CAAI,CAAA,EAAA,GAAA,CAAA;AAClE,oBAAA,IAAI,CAACzB,EAAE,CAACuC,CAAC,GAAG5D,EAAAA,CAAGY,GAAG,CAACZ,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAACuG,IAAI,EAAE,IAAI,CAACA,IAAI,CAAG,EAAA,GAAA,CAAA;;AAEjD,oBAAA,IAAI,CAAC/F,EAAE,CAACiG,QAAQ,GAAGtH,EAAGsC,CAAAA,GAAG,CAAC,IAAI,CAACyD,MAAM,EAAE,IAAI,CAACkB,EAAE,CAAA;oBAC9C,IAAI,CAAC5F,EAAE,CAACkG,IAAI,GAAGvH,GAAGwH,MAAM,CAAC,IAAI,CAACF,QAAQ,CAAA;oBACtC,IAAI,CAACjG,EAAE,CAACoG,GAAG,GAAGvC,eACZ,CAAA,IAAI,EACJ,IAAI,CAAC3F,iBAAiB,EACtB,IAAI,CAAC,CAAC,CAAC,EAAEsD,CAAG,CAAA,CAAA,CAAC,EACb,IAAI,CAACoD,EAAE,CAACrC,CAAC,EACT,IAAI,CAACsC,EAAE,CAACwB,EAAE,EACV1H,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAAC0F,QAAQ,EAAEtH,EAAAA,CAAG8B,GAAG,CAAC,IAAI,CAACyF,IAAI,EAAE,IAAA,CAAA,CAAA,CAAA;oBAE1C,IAAI,CAAClG,EAAE,CAACsG,IAAI,GAAG,IAAI,CAACF,GAAG,CAACjG,CAAC;oBACzB,IAAI,CAACH,EAAE,CAACuG,QAAQ,GAAG5H,EAAGuB,CAAAA,GAAG,CAACvB,EAAAA,CAAGsC,GAAG,CAACtC,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAAC8G,IAAI,EAAE,IAAI,CAACA,IAAI,CAAA,EAAG,IAAI,CAACF,GAAG,CAAChG,CAAC,CAAA,CAAA;AACzE,oBAAA,IAAI,CAACiB,GAAG,CAAC1C,EAAAA,CAAG6F,WAAW,CAAC,IAAI,CAAC0B,IAAI,EAAE,IAAI,CAACI,IAAI,CAAG,EAAA,WAAA;AAC7C,wBAAA,IAAI,CAACtG,EAAE,CAACwG,EAAE,GAAG7H,EAAGsC,CAAAA,GAAG,CAAC,IAAI,CAACiF,IAAI,EAAE,IAAI,CAACI,IAAI,CAAA;AACxC,wBAAA,IAAI,CAACtG,EAAE,CAACyG,IAAI,GAAG9H,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAACgG,QAAQ,EAAE5H,EAAGY,CAAAA,GAAG,CAAC,IAAI,CAACgH,QAAQ,EAAE5H,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAACgH,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA,CAAA;wBAClF,IAAI,CAACjE,CAAC,GAAG5D,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAAC+C,CAAC,EAAE5D,EAAAA,CAAG8B,GAAG,CAAC9B,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACiH,IAAI,EAAE,IAAI,CAACA,IAAI,EAAE,IAAI,CAACA,IAAI,CAAG,EAAA,IAAA,CAAA,CAAA;AAC1E,qBAAA,CAAA;;oBAEA,IAAI,CAACpF,GAAG,CAAC1C,EAAGqC,CAAAA,QAAQ,CAAC,IAAI,CAACuB,CAAC,EAAE,GAAM,CAAA,EAAA,WAAA;wBACjC,IAAI,CAACA,CAAC,GAAG5D,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC+C,CAAC,EAAE5D,EAAAA,CAAG4B,GAAG,CAAC5B,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC+C,CAAC,EAAE,IAAI,CAACA,CAAC,CAAG,EAAA,IAAA,CAAA,CAAA;AACzD,qBAAA,CAAA;AACA,oBAAA,IAAI,CAACA,CAAC,GAAG5D,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC+C,CAAC,EAAE,IAAI,CAACsD,GAAG,CAAA;AAChC,oBAAA,IAAI,CAAC7F,EAAE,CAAC0G,GAAG,GAAG7C,eACZ,CAAA,IAAI,EACJ,IAAI,CAAC5F,gBAAiB,CAAA,EACtB,IAAI,CAAC,CAAC,CAAC,EAAEuD,CAAG,CAAA,CAAA,CAAC,EACb,IAAI,CAACoD,EAAE,CAACvE,CAAC,EACT,IAAI,CAACwE,EAAE,CAACrE,EAAE,EACV,IAAI,CAACiB,CAAC,CAAA;AAER,oBAAA,IAAI,CAACyD,GAAG,GAAGvG,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAAC2F,GAAG,EAAEvG,EAAGa,CAAAA,GAAG,CAACmF,GAAMhG,GAAAA,EAAAA,CAAGoB,IAAI,CAAC,IAAI,CAAC2G,GAAG,CAACC,CAAC,CAAI,GAAA,IAAI,CAACD,GAAG,CAACE,GAAG,EAAE,IAAI,CAACrE,CAAC,CAAA,CAAA;AACnF,oBAAA,IAAI,CAAC4C,IAAI,GAAGxG,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAAC4F,IAAI,EAAE,IAAI,CAAC5C,CAAC,CAAA;AACtC,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;QACA,IAAI,CAACxB,OAAO,CAACpC,EAAAA,CAAGM,IAAI,CAACN,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAAC2E,GAAG,EAAEvG,EAAAA,CAAG8B,GAAG,CAAC,IAAI,CAAC0E,IAAI,EAAE,IAAA,CAAA,CAAA,EAAQ,IAAI,CAACA,IAAI,CAAA,CAAA;AAC3E,KAAA,CAAA;AACA,IAAA,OAAO3G,KAAK,CAACqB,QAAAA,CAAS,CAACR,KAAAA,EAAOiB,GAAGoE,MAAQjD,EAAAA,CAAAA,CAAAA;AAC3C;AAEA;;;;;;;;;;;;AAYC,IACM,SAASoF,qBACdrI,CAAAA,KAA4B,EAC5BsI,QAAqB,EACrBC,MAAmB,EACnBC,QAAqB,EACrBC,IAAAA,GAAuC,SAAS,EAAA;IAEhD,MAAMtI,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,IAAA,MAAMiB,WACJoH,IAAS,KAAA,SAAA,GACL,yBACAA,GAAAA,IAAAA,KAAS,aACP,iCACA,GAAA,4BAAA;IACRtI,EAAGmB,CAAAA,IAAI,CAACD,QAAU,EAAA;AAAClB,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,GAAA,CAAA;AAAMpB,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,GAAA,CAAA;AAAMpB,QAAAA,EAAAA,CAAGoB,IAAI,CAAC,UAAA;KAAY,EAAE,WAAA;QACnE,IAAI,CAACC,EAAE,CAAC4E,EAAE,GAAG,IAAI,CAACxG,YAAAA,CAAa,CAACkB,EAAE,CAAC,CAAA,CAAA;QACnC,IAAI,CAACU,EAAE,CAACkH,EAAE,GAAG,IAAI,CAAC9I,YAAAA,CAAa,CAACkB,EAAE,CAAC,CAAA,CAAA;AACnC,QAAA,IAAI,CAACU,EAAE,CAACmH,MAAM,GAAGxI,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACmF,EAAE,CAACzE,CAAC,CAAA;QACjC,IAAI,CAACH,EAAE,CAACoH,QAAQ,GAAGzI,GAAGwH,MAAM,CAAC,IAAI,CAACa,QAAQ,CAAA;AAC1C,QAAA,IAAI,CAAChH,EAAE,CAACJ,CAAC,GAAGjB,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAACyG,QAAQ,EAAErI,EAAG8B,CAAAA,GAAG,CAAC,IAAI,CAAC2G,QAAQ,EAAE,IAAA,CAAA,CAAA;AACxD,QAAA,IAAI,CAACpH,EAAE,CAACqH,GAAG,GAAG1I,EAAAA,CAAGoB,IAAI,CAAC,CAAA,CAAA;AACtB,QAAA,IAAI,CAACC,EAAE,CAACsH,IAAI,GAAG3I,EAAAA,CAAGmC,KAAK,CAAC,CAAA,CAAA;QACxB,IAAI,CAACyG,IAAI,CAAC5I,EAAAA,CAAGc,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGpB,gBAAkB,EAAA,WAAA;YAC1C,IAAI,CAACgD,GAAG,CACN1C,EAAG6I,CAAAA,EAAE,CAAC7I,EAAGkC,CAAAA,gBAAgB,CAAC,IAAI,CAAC4G,CAAC,EAAE,IAAI,CAACN,MAAM,CAAA,EAAGxI,EAAGkC,CAAAA,gBAAgB,CAAC,IAAI,CAACyG,IAAI,EAAE,KAC/E,CAAA,CAAA,EAAA,WAAA;AACE,gBAAA,IAAI,CAACI,MAAM,EAAA;AACb,aAAA,CAAA;YAEF,IAAI,CAAC1H,EAAE,CAAC8E,EAAE,GAAG1F,iBAAiB,IAAI,EAAE,IAAI,CAACqI,CAAC,CAAA;YAC1C,IAAI,CAACzH,EAAE,CAAC2H,QAAQ,GAAGV,IAAS,KAAA,UAAA,GAAatI,EAAGmC,CAAAA,KAAK,CAAC,CAAA,CAAA,GAAKnC,EAAG6G,CAAAA,KAAK,CAAC7G,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAAC6G,QAAQ,EAAE,IAAI,CAACtC,EAAE,CAACvC,CAAC,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;YACrG,IAAI,CAACvC,EAAE,CAAC0E,MAAM,GAAG/F,GAAGY,GAAG,CACrB,IAAI,CAACe,CAAC,EACN3B,GAAGa,GAAG,CAACb,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAACiC,CAAC,EAAE,IAAI,CAACyF,EAAE,CAAC9G,CAAC,CAAA,EAAGzB,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACI,CAAC,EAAE,IAAI,CAACsH,EAAE,CAAC7G,CAAC,EAAE,IAAI,CAACsH,QAAQ,IAAI,IAAI,CAAC7C,EAAE,CAACvC,CAAC,CAAA,CAAA;YAE/F,IAAI,CAACvC,EAAE,CAAC4H,CAAC,GAAGnD,iBAAiB,IAAI,EAAE,IAAI,CAACgD,CAAC,EAAE,IAAI,CAACnH,CAAC,EAAE,IAAI,CAACoE,MAAM,EAAE,IAAI,CAACjD,CAAC,EAAEwF,IAAS,KAAA,KAAA,CAAA;AACjF,YAAA,IAAI,CAAC5F,GAAG,CAAC1C,EAAAA,CAAG6F,WAAW,CAAC,IAAI,CAACoD,CAAC,CAACjB,CAAC,EAAE,IAAO,CAAA,EAAA,WAAA;;gBAEvC,IAAI,CAAC3G,EAAE,CAAC+E,EAAE,GAAGrF,eAAe,IAAI,EAAE,IAAI,CAAC+H,CAAC,CAAA;gBACxC,IAAI,CAACzH,EAAE,CAAC2C,CAAC,GAAGhE,GAAGsC,GAAG,CAACtC,EAAG4B,CAAAA,GAAG,CAAC,IAAI,CAACmE,MAAM,EAAE,IAAI,CAACI,EAAE,CAACvC,CAAC,CAAA,EAAG,IAAI,CAACuC,EAAE,CAACxC,GAAG,CAAA;AAC9D,gBAAA,IAAI,CAACtC,EAAE,CAAC6H,IAAI,GAAGlJ,EAAAA,CAAGmJ,GAAG,CAAC,IAAI,CAACnF,CAAC,EAAEhE,GAAGsC,GAAG,CAACtC,EAAGsC,CAAAA,GAAG,CAAC,IAAI,CAAC8D,EAAE,CAACzC,GAAG,EAAE3D,EAAAA,CAAGoB,IAAI,CAAC,CAAK,CAAA,CAAA,EAAA,IAAI,CAAC4C,CAAC,CAAA,CAAA;AAC5E,gBAAA,IAAI,CAAC3C,EAAE,CAACoC,CAAC,GAAGzD,EAAGoJ,CAAAA,UAAU,CAAC,GAAA,EAAK,GAAKpJ,EAAAA,EAAAA,CAAGmJ,GAAG,CAACnJ,GAAGmJ,GAAG,CAAC,IAAI,CAACD,IAAI,CAAC1H,CAAC,EAAE,IAAI,CAAC0H,IAAI,CAACzH,CAAC,CAAG,EAAA,IAAI,CAACyH,IAAI,CAACxH,CAAC,CAAA,CAAA;AACxF,gBAAA,IAAI,CAACL,EAAE,CAACgI,KAAK,GAAGrJ,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC4C,CAAC,EAAEzD,EAAGsC,CAAAA,GAAG,CAAC,CAAG,EAAA,IAAI,CAACqG,IAAI,CAAA,CAAA;gBAClD,IAAI,CAACD,GAAG,GAAG1I,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAAC8H,GAAG,EAAE1I,GAAGa,GAAG,CAAC,IAAI,CAACoI,CAAC,CAAChB,GAAG,EAAE,IAAI,CAACoB,KAAK,CAAA,CAAA;AACzD,gBAAA,IAAI,CAACV,IAAI,GAAG3I,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAAC+H,IAAI,EAAE,IAAI,CAACU,KAAK,CAAA;AAC1C,aAAA,CAAA;AACF,SAAA,CAAA;QACA,IAAI,CAAChI,EAAE,CAACiI,KAAK,GAAG,IAAI,CAACrH,OAAO,CAACjC,EAAG6F,CAAAA,WAAW,CAAC,IAAI,CAAC8C,IAAI,EAAE,IAAO3I,CAAAA,EAAAA,EAAAA,CAAGmC,KAAK,CAAC,CAAA,CAAA,EAAInC,EAAGmC,CAAAA,KAAK,CAAC,CAAA,CAAA,CAAA;AACpF,QAAA,IAAI,CAACd,EAAE,CAACkI,CAAC,GAAGvJ,EAAAA,CAAG4B,GAAG,CAAC,IAAI,CAAC8G,GAAG,EAAE1I,EAAG8B,CAAAA,GAAG,CAAC,IAAI,CAAC6G,IAAI,EAAE,IAAA,CAAA,CAAA;QAC/C,IAAI,CAACvG,OAAO,CAACpC,EAAGM,CAAAA,IAAI,CAACgI,IAAAA,KAAS,SAAYtI,GAAAA,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC0I,CAAC,EAAE,IAAI,CAAChB,EAAE,CAAC/G,CAAC,CAAA,GAAI,IAAI,CAAC+H,CAAC,EAAE,IAAI,CAACD,KAAK,CAAA,CAAA;AAC1F,KAAA,CAAA;AACA,IAAA,OAAOzJ,KAAK,CAACqB,QAAS,CAAA,CAACiH,UAAUC,MAAQC,EAAAA,QAAAA,CAAAA;AAC3C;;;;"}
|