@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":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { uniformSphereSamples } from '../values';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst TRANSMITTANCE_SAMPLES = 16;\r\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\nconst MIE_SIGMA = 3.996;\r\nconst MIE_ABSORPTION_SIGMA = 4.4;\r\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n\r\n/** @internal */\r\nexport const CAMERA_POS_Y = 1;\r\n\r\n/** @internal */\r\nexport type AtmosphereParams = {\r\n plantRadius: number;\r\n atmosphereHeight: number;\r\n rayleighScatteringHeight: number;\r\n mieScatteringHeight: number;\r\n mieAnstropy: number;\r\n ozoneCenter: number;\r\n ozoneWidth: number;\r\n apDistance: number;\r\n cameraWorldMatrix: Matrix4x4;\r\n lightDir: Vector3;\r\n lightColor: Vector4;\r\n cameraAspect: number;\r\n cameraHeightScale: number;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultAtmosphereParams() {\r\n return {\r\n plantRadius: 6360000,\r\n atmosphereHeight: 60000,\r\n rayleighScatteringHeight: 8000,\r\n mieScatteringHeight: 1200,\r\n mieAnstropy: 0.8,\r\n ozoneCenter: 25000,\r\n ozoneWidth: 15000,\r\n apDistance: 4000,\r\n cameraWorldMatrix: Matrix4x4.identity(),\r\n lightDir: new Vector3(1, 0, 0),\r\n lightColor: new Vector4(1, 1, 1, 10),\r\n cameraAspect: 1,\r\n cameraHeightScale: 1\r\n } as AtmosphereParams;\r\n}\r\n\r\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\r\n\r\nlet currentAtmosphereParams: Nullable<AtmosphereParams> = null;\r\n\r\nfunction checkParams(other?: Partial<AtmosphereParams>) {\r\n const result = {\r\n transmittance: false,\r\n multiScattering: false,\r\n skyView: false,\r\n aerialPerspective: false\r\n };\r\n other = { ...defaultAtmosphereParams, ...other };\r\n if (!currentAtmosphereParams) {\r\n currentAtmosphereParams = {\r\n ...defaultAtmosphereParams,\r\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\r\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\r\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix)\r\n };\r\n result.transmittance = true;\r\n result.multiScattering = true;\r\n result.skyView = true;\r\n result.aerialPerspective = true;\r\n } else {\r\n result.transmittance =\r\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\r\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\r\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\r\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\r\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\r\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\r\n result.multiScattering =\r\n result.transmittance || currentAtmosphereParams.mieAnstropy !== other.mieAnstropy;\r\n result.skyView =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n currentAtmosphereParams.cameraHeightScale !== other.cameraHeightScale ||\r\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir!) ||\r\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor!) ||\r\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix!);\r\n result.aerialPerspective =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n result.skyView ||\r\n currentAtmosphereParams.apDistance !== other.apDistance ||\r\n currentAtmosphereParams.cameraAspect !== other.cameraAspect;\r\n }\r\n if (result.transmittance) {\r\n currentAtmosphereParams.plantRadius = other.plantRadius!;\r\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight!;\r\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight!;\r\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight!;\r\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter!;\r\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth!;\r\n }\r\n if (result.multiScattering) {\r\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy!;\r\n }\r\n if (result.skyView) {\r\n currentAtmosphereParams.cameraHeightScale = other.cameraHeightScale!;\r\n currentAtmosphereParams.lightDir.set(other.lightDir!);\r\n currentAtmosphereParams.lightColor.set(other.lightColor!);\r\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix!);\r\n }\r\n if (result.aerialPerspective) {\r\n currentAtmosphereParams.apDistance = other.apDistance!;\r\n currentAtmosphereParams.cameraAspect = other.cameraAspect!;\r\n }\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function rayIntersectSphere(\r\n scope: PBInsideFunctionScope,\r\n f3Center: PBShaderExp,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphere';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\r\n function () {\r\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\r\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\r\n this.$l.OH = pb.sqrt(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)));\r\n this.$l.PH = pb.sqrt(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.t1 = pb.sub(this.SH, this.PH);\r\n this.$l.t2 = pb.add(this.SH, this.PH);\r\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\r\n }\r\n );\r\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceToSky(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3Dir: PBShaderExp,\r\n texLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToSky';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.upVector = pb.normalize(this.p);\r\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\r\n this.$l.r = pb.length(this.p);\r\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\r\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\r\n });\r\n return scope[funcName](stParams, f3Pos, f3Dir);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fRayleighScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighCoefficient';\r\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.rayleighScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fRayleighScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighPhase';\r\n pb.func(funcName, [pb.float('cosTheta')], function () {\r\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\r\n });\r\n return scope[funcName](fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieCoefficient';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_miePhase';\r\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n this.$l.a = 3 / (8 * Math.PI);\r\n this.$l.b = pb.div(pb.sub(1, this.g2), pb.add(2, this.g2));\r\n this.$l.c = pb.add(1, pb.mul(this.cosTheta, this.cosTheta));\r\n this.$l.d = pb.pow(pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2)), 1.5);\r\n this.$return(pb.div(pb.mul(this.a, this.b, this.c), this.d));\r\n });\r\n return scope[funcName](fMieAnstropy, fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieAbsorption';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function ozoneAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fOzoneLevelCenterHeight: PBShaderExp,\r\n fOzoneLevelWidth: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_ozoneAbsorption';\r\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(\r\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\r\n 1e-6\r\n );\r\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyView(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3EyePos: PBShaderExp,\r\n f3ViewDir: PBShaderExp,\r\n fMaxDis: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp,\r\n withGround = true\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_getSkyView';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\r\n function () {\r\n const N_SAMPLE = 32;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$if(pb.lessThan(this.dis, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n if (withGround) {\r\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eyePos, this.viewDir);\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n }\r\n this.$if(pb.greaterThanEqual(this.maxDis, 0), function () {\r\n this.dis = pb.min(this.dis, this.maxDis);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.eyePos, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.extinction = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.extinction, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n\r\n this.$l.inScattering = pb.mul(this.t1, this.s, this.t2, this.ds, this.sunLuminance);\r\n this.color = pb.add(this.color, this.inScattering);\r\n\r\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\r\n this.color = pb.add(this.color, pb.mul(this.multiScattering, this.t2, this.ds, this.sunLuminance));\r\n\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n this.$return(this.color);\r\n }\r\n );\r\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_getMultiScattering';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\r\n this.$l.uv = pb.vec2(\r\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\r\n pb.div(this.h, this.params.atmosphereHeight)\r\n );\r\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\r\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\r\n });\r\n return scope[funcName](stParams, f3Pos);\r\n}\r\n\r\n/** @internal */\r\nexport function integralMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f3SamplePoint: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const N_DIRECTION = 64;\r\n const N_SAMPLE = 32;\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_integralMultiScattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\r\n const uniformPhase = 1 / (4 * Math.PI);\r\n const sphereSolidAngle = (4 * Math.PI) / N_DIRECTION;\r\n this.$l.G_2 = pb.vec3(0);\r\n this.$l.f_ms = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\r\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.d = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_a = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.sigma_t, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n this.G_2 = pb.add(this.G_2, pb.mul(this.t1, this.s, this.t2, uniformPhase, this.ds));\r\n this.f_ms = pb.add(this.f_ms, pb.mul(this.t2, this.sigma_s, uniformPhase, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n });\r\n this.G_2 = pb.mul(this.G_2, sphereSolidAngle);\r\n this.f_ms = pb.mul(this.f_ms, sphereSolidAngle);\r\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\r\n });\r\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\r\n}\r\n\r\n/** @internal */\r\nexport function scattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3ViewDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_scattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\r\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.rayleigh = pb.mul(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n rayleighPhase(this, this.cosTheta)\r\n );\r\n this.$l.mie = pb.mul(\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\r\n );\r\n this.$return(pb.add(this.rayleigh, this.mie));\r\n });\r\n return scope[funcName](stParams, f3Pos, f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittance(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3P1: PBShaderExp,\r\n f3P2: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_transmittance';\r\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\r\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\r\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\r\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\r\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.scattering = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.absorption = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.extinction = pb.add(this.scattering, this.absorption);\r\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\r\n });\r\n this.$return(pb.exp(pb.neg(this.sum)));\r\n });\r\n return scope[funcName](stParams, f3P1, f3P2) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLutToUV(\r\n scope: PBInsideFunctionScope,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp,\r\n fMu: PBShaderExp,\r\n fR: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToUV';\r\n pb.func(\r\n funcName,\r\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\r\n function () {\r\n this.$l.H = pb.sqrt(\r\n pb.max(\r\n 0,\r\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\r\n )\r\n );\r\n this.$l.rho = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.discriminant = pb.add(\r\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\r\n pb.mul(this.topRadius, this.topRadius)\r\n );\r\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(this.discriminant), pb.mul(this.mu, this.r)));\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\r\n this.$l.x_r = pb.div(this.rho, this.H);\r\n this.$return(pb.vec2(this.x_mu, this.x_r));\r\n }\r\n );\r\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function viewDirToUV(scope: PBInsideFunctionScope, f3ViewDir: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_viewDirToUV';\r\n pb.func(funcName, [pb.vec3('viewDir')], function () {\r\n this.$l.uv = pb.vec2(pb.atan2(this.viewDir.z, this.viewDir.x), pb.asin(this.viewDir.y));\r\n this.uv = pb.div(this.uv, pb.vec2(2 * Math.PI, Math.PI));\r\n this.uv = pb.add(this.uv, pb.vec2(0.5));\r\n this.$return(this.uv);\r\n });\r\n return scope[funcName](f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToViewDir(scope: PBInsideFunctionScope, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToViewDir';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.theta = pb.mul(pb.sub(1, this.uv.y), Math.PI);\r\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.uv.x, 2), 1), Math.PI);\r\n this.$l.x = pb.mul(pb.sin(this.theta), pb.cos(this.phi));\r\n this.$l.z = pb.mul(pb.sin(this.theta), pb.sin(this.phi));\r\n this.$l.y = pb.cos(this.theta);\r\n this.$return(pb.vec3(this.x, this.y, this.z));\r\n });\r\n return scope[funcName](f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToTransmittanceLut(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToTransmittanceLut';\r\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\r\n this.$l.x_mu = this.uv.x;\r\n this.$l.x_r = this.uv.y;\r\n this.$l.H = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.rho = pb.mul(this.H, this.x_r);\r\n this.$l.r = pb.sqrt(\r\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\r\n this.$l.mu = this.$choice(\r\n pb.equal(this.d, 0),\r\n pb.float(1),\r\n pb.div(\r\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\r\n pb.mul(this.r, this.d, 2)\r\n )\r\n );\r\n this.mu = pb.clamp(this.mu, -1, 1);\r\n this.$return(pb.vec2(this.mu, this.r));\r\n });\r\n return scope[funcName](f2UV, fBottomRadius, fTopRadius) as PBShaderExp;\r\n}\r\n\r\nfunction sunBloom(\r\n scope: PBInsideFunctionScope,\r\n f3ViewDir: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f4LightColorAndIntensity: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_sunBloom';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\r\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\r\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\r\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\r\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\r\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\r\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\r\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\r\n });\r\n this.$return(this.luminance);\r\n }\r\n );\r\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyBox(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f4SunColor: PBShaderExp,\r\n f3SkyBoxWorldPos: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp,\r\n fIncludeSunDisk: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texSkyViewLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_skybox';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [\r\n Params('params'),\r\n pb.vec4('sunColor').out(),\r\n pb.vec3('worldPos'),\r\n pb.float('sunSolidAngle'),\r\n pb.int('includeSunDisk')\r\n ],\r\n function () {\r\n this.$l.rgb = pb.vec3(0);\r\n this.$l.viewDir = pb.normalize(this.worldPos);\r\n this.rgb = pb.add(\r\n this.rgb,\r\n pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.viewDir), 0).rgb\r\n );\r\n this.$l.groundDistance = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n pb.vec3(0, pb.add(this.params.plantRadius, pb.mul(CAMERA_POS_Y, this.params.cameraHeightScale)), 0),\r\n this.viewDir\r\n );\r\n this.$l.sunTransmittance = transmittanceToSky(\r\n this,\r\n this.params,\r\n pb.vec3(0, pb.add(this.params.cameraHeightScale, this.params.plantRadius), 0),\r\n this.params.lightDir,\r\n texTransmittanceLut\r\n );\r\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\r\n this.$if(pb.and(pb.notEqual(this.includeSunDisk, 0), pb.lessThan(this.groundDistance, 0)), function () {\r\n this.rgb = pb.add(\r\n this.rgb,\r\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\r\n );\r\n });\r\n this.$return(pb.vec4(this.rgb, 1));\r\n }\r\n );\r\n return scope[funcName](\r\n stParams,\r\n f4SunColor,\r\n f3SkyBoxWorldPos,\r\n fSunSolidAngle,\r\n fIncludeSunDisk\r\n ) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspective(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n stParams: PBShaderExp,\r\n f3CameraPos: PBShaderExp,\r\n f3WorldPos: PBShaderExp,\r\n f3Dim: PBShaderExp,\r\n texAerialPerspectiveLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspective';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\r\n function () {\r\n this.$l.V = pb.sub(this.worldPos, this.cameraPos);\r\n this.$l.dis = pb.length(this.V);\r\n this.$l.viewDir = pb.normalize(this.V);\r\n this.$l.apDistance = pb.div(this.params.apDistance, this.params.cameraHeightScale);\r\n this.$l.d0 = pb.clamp(pb.div(this.dis, this.apDistance), 0, 1);\r\n this.$l.weight = pb.clamp(pb.mul(this.d0, 2), 0, 1);\r\n this.$l.dz = pb.mul(this.d0, pb.sub(this.dim.z, 1));\r\n this.$l.slice = pb.floor(this.dz);\r\n this.$l.nextSlice = pb.min(pb.add(this.slice, 1), pb.sub(this.dim.z, 1));\r\n this.$l.factor = pb.sub(this.dz, pb.floor(this.dz));\r\n this.t = pb.div(this.uv, pb.vec2(this.dim.x, 1));\r\n this.$l.uv1 = pb.add(this.t, pb.vec2(pb.div(this.slice, this.dim.z), 0));\r\n this.$l.uv2 = pb.add(this.t, pb.vec2(pb.div(this.nextSlice, this.dim.z), 0));\r\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\r\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\r\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\r\n this.$l.inscattering = pb.mul(this.data.rgb, this.weight);\r\n //this.$l.transmittance = pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a)));\r\n this.$l.planetTranslate = pb.vec3(0, this.params.plantRadius, 0);\r\n this.$l.transmittance = pb.dot(\r\n transmittance(\r\n this,\r\n this.params,\r\n pb.add(this.cameraPos, this.planetTranslate),\r\n pb.add(this.worldPos, this.planetTranslate)\r\n ),\r\n pb.vec3(1 / 3, 1 / 3, 1 / 3)\r\n );\r\n this.$return(pb.vec4(this.inscattering, this.transmittance));\r\n }\r\n );\r\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspectiveLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n f3VoxelDim: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcNameFixVoxel = 'z_fixVoxel';\r\n pb.func(\r\n funcNameFixVoxel,\r\n [\r\n Params('params'),\r\n pb.vec3('eyePos'),\r\n pb.vec3('viewDir').inout(),\r\n pb.float('maxDis'),\r\n pb.float('adjustedMaxDis').inout()\r\n ],\r\n function () {\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$l.voxelHeight = pb.length(this.voxelPos);\r\n this.$l.underGround = pb.lessThan(this.voxelHeight, this.params.plantRadius);\r\n this.$l.cameraToVoxel = pb.sub(this.voxelPos, this.eyePos);\r\n this.$l.cameraToVoxelLen = pb.length(this.cameraToVoxel);\r\n this.$l.cameraToVoxelDir = pb.div(this.cameraToVoxel, this.cameraToVoxelLen);\r\n this.$l.planetNearT = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.cameraToVoxelDir\r\n );\r\n this.$l.belowHorizon = pb.and(\r\n pb.greaterThan(this.planetNearT, 0),\r\n pb.greaterThan(this.cameraToVoxelLen, this.planetNearT)\r\n );\r\n this.$l.eyePos2 = this.eyePos;\r\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\r\n this.eyePos2 = pb.add(this.eyePos2, pb.mul(pb.normalize(this.eyePos2), 0.02));\r\n this.$if(this.belowHorizon, function () {\r\n this.$l.voxelWorldPosNorm = pb.normalize(this.voxelPos);\r\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos2), this.params.plantRadius);\r\n this.$l.voxProjOnGround = pb.mul(this.voxelWorldPosNorm, this.params.plantRadius);\r\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos2, this.voxProjOnGround);\r\n this.$if(\r\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelWorldPosNorm), 0.0001),\r\n function () {\r\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\r\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\r\n this.voxelPos = pb.add(this.eyePos2, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos2), 2));\r\n }\r\n );\r\n }).$else(function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n });\r\n this.$l.V = pb.sub(this.voxelPos, this.eyePos2);\r\n this.adjustedMaxDis = pb.length(this.V);\r\n this.viewDir = pb.div(this.V, this.adjustedMaxDis);\r\n });\r\n this.$return(this.eyePos2);\r\n }\r\n );\r\n const funcName = 'z_aerialPerspectiveLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim'), pb.float('cameraPosY')], function () {\r\n this.$l.uvw = pb.vec3(this.uv, 0);\r\n this.uvw.x = pb.mul(this.uvw.x, this.dim.x, this.dim.z);\r\n this.uvw.z = pb.div(pb.floor(pb.div(this.uvw.x, this.dim.z)), this.dim.x);\r\n this.uvw.x = pb.div(pb.mod(this.uvw.x, this.dim.z), this.dim.x);\r\n this.uvw = pb.add(this.uvw, pb.div(pb.vec3(0.5), this.dim));\r\n this.$l.slice = this.uvw.z; //pb.mul(this.uvw.z, this.uvw.z);\r\n this.$l.viewDir = pb.normalize(\r\n pb.mul(\r\n this.params.cameraWorldMatrix,\r\n pb.vec4(\r\n pb.sub(pb.mul(this.uvw.x, 2), 1),\r\n pb.div(pb.sub(pb.mul(this.uvw.y, 2), 1), this.params.cameraAspect),\r\n -1,\r\n 0\r\n )\r\n ).xyz\r\n );\r\n this.$l.eyePos = pb.vec3(\r\n 0,\r\n pb.add(pb.mul(this.cameraPosY, this.params.cameraHeightScale), this.params.plantRadius),\r\n 0\r\n );\r\n this.$l.maxDis = pb.mul(this.slice, this.params.apDistance);\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$if(pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius), function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n this.maxDis = pb.length(pb.sub(this.eyePos, this.voxelPos));\r\n });\r\n this.$l.color = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n this.maxDis,\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.eyePos, this.viewDir, texTransmittanceLut);\r\n this.$l.t2 = transmittanceToSky(this, this.params, this.voxelPos, this.viewDir, texTransmittanceLut);\r\n this.$l.t = pb.clamp(pb.div(this.t1, pb.max(this.t2, pb.vec3(0.0001))), pb.vec3(0), pb.vec3(1));\r\n this.$return(pb.vec4(this.color, pb.dot(this.t, pb.vec3(1 / 3, 1 / 3, 1 / 3))));\r\n });\r\n return scope[funcName](stParams, f2UV, f3VoxelDim, CAMERA_POS_Y) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyViewLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_skyViewLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.float('cameraPosY')], function () {\r\n this.$l.viewDir = uvToViewDir(this, this.uv);\r\n this.$l.h = pb.add(this.params.plantRadius, pb.mul(this.cameraPosY, this.params.cameraHeightScale));\r\n this.$l.eyePos = pb.vec3(0, this.h, 0);\r\n this.$l.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV, CAMERA_POS_Y) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function multiScatteringLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_multiScatteringLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\r\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\r\n this.$l.cosTheta = this.mu_s;\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\r\n this.$l.p = pb.vec3(0, this.r, 0);\r\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'transmittanceLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\r\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\r\n this.$l.cos_theta = this.lutParams.x;\r\n this.$l.r = this.lutParams.y;\r\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\r\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\r\n this.$l.eyePos = pb.vec3(0, this.r, 0);\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\r\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\r\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function atmosphereLUTRendered() {\r\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\r\n const checkResult = checkParams(params);\r\n if (checkResult.transmittance || !transmittanceLUT) {\r\n renderTransmittanceLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.multiScattering || !multiScatteringLUT) {\r\n renderMultiScatteringLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.skyView || !skyViewLUT) {\r\n renderSkyViewLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.aerialPerspective || !ApLut) {\r\n renderAPLut(currentAtmosphereParams!);\r\n }\r\n}\r\n\r\n/* For debug */\r\nlet transmittanceLutProgram: GPUProgram;\r\nlet multiScatteringLutProgram: GPUProgram;\r\nlet skyViewLutProgram: GPUProgram;\r\nlet APLutProgram: GPUProgram;\r\nlet transmittanceLutBindGroup: BindGroup;\r\nlet transmittanceLUT: Texture2D;\r\nlet transmittanceFramebuffer: FrameBuffer;\r\n\r\nlet multiScatteringLutBindGroup: BindGroup;\r\nlet multiScatteringLUT: Texture2D;\r\nlet uniformSphereSampleBuffer: GPUDataBuffer;\r\nlet multiScatteringFramebuffer: FrameBuffer;\r\n\r\nlet skyViewLutBindGroup: BindGroup;\r\nlet skyViewLUT: Texture2D;\r\nlet skyViewFramebuffer: FrameBuffer;\r\n\r\nlet APLutBindGroup: BindGroup;\r\nlet ApLut: Texture2D;\r\nlet APFramebuffer: FrameBuffer;\r\n\r\n/** @internal */\r\nexport function getTransmittanceLut() {\r\n return transmittanceLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScatteringLut() {\r\n return multiScatteringLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyViewLut() {\r\n return skyViewLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getAerialPerspectiveLut() {\r\n return ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.mat4('cameraWorldMatrix'),\r\n pb.vec4('lightColor'),\r\n pb.vec3('lightDir'),\r\n pb.float('cameraAspect'),\r\n pb.float('plantRadius'),\r\n pb.float('atmosphereHeight'),\r\n pb.float('rayleighScatteringHeight'),\r\n pb.float('mieScatteringHeight'),\r\n pb.float('mieAnstropy'),\r\n pb.float('ozoneCenter'),\r\n pb.float('ozoneWidth'),\r\n pb.float('apDistance'),\r\n pb.float('cameraHeightScale')\r\n ]);\r\n}\r\n\r\n/** @internal */\r\nexport function createTransmittanceLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\r\n });\r\n }\r\n })!;\r\n program.name = '@TransmittanceLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderTransmittanceLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (transmittanceLutProgram === undefined) {\r\n try {\r\n transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\r\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\r\n mipmapping: false\r\n })!;\r\n transmittanceLUT.name = 'DebugTransmittanceLut';\r\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (transmittanceLutProgram) {\r\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n transmittanceLutBindGroup.setValue('params', params);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(transmittanceFramebuffer);\r\n device.setProgram(transmittanceLutProgram);\r\n device.setBindGroup(0, transmittanceLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = multiScatteringLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@MultiScatteringLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (multiScatteringLutProgram === undefined) {\r\n try {\r\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\r\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\r\n mipmapping: false\r\n })!;\r\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\r\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\r\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false)!;\r\n const sphereSamples = new Float32Array(64 * 4);\r\n for (let i = 0; i < 64; i++) {\r\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\r\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\r\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\r\n sphereSamples[i * 4 + 3] = 0;\r\n }\r\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (multiScatteringLutProgram) {\r\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n multiScatteringLutBindGroup.setValue('params', params);\r\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\r\n multiScatteringLutBindGroup.setTexture(\r\n 'transmittanceLut',\r\n transmittanceLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(multiScatteringFramebuffer);\r\n device.setProgram(multiScatteringLutProgram);\r\n device.setBindGroup(0, multiScatteringLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createSkyViewLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = skyViewLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@SkyViewLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderSkyViewLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (skyViewLutProgram === undefined) {\r\n try {\r\n skyViewLutProgram = createSkyViewLutProgram(device);\r\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\r\n skyViewLUT = device.createTexture2D('rgba16f', 256, 128, {\r\n mipmapping: false\r\n })!;\r\n skyViewLUT.name = 'DebugSkyViewLut';\r\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (skyViewLutProgram) {\r\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n skyViewLutBindGroup.setValue('params', params);\r\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n skyViewLutBindGroup.setTexture(\r\n 'multiScatteringLut',\r\n multiScatteringLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(skyViewFramebuffer);\r\n device.setProgram(skyViewLutProgram);\r\n device.setBindGroup(0, skyViewLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createAPLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = aerialPerspectiveLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n pb.vec3(32, 32, 32),\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@APLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAPLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (APLutProgram === undefined) {\r\n try {\r\n APLutProgram = createAPLutProgram(device);\r\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\r\n ApLut = device.createTexture2D('rgba16f', 32 * 32, 32, { mipmapping: false })!;\r\n ApLut.name = 'DebugAPLut';\r\n APFramebuffer = device.createFrameBuffer([ApLut], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (APLutProgram) {\r\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n APLutBindGroup.setValue('params', params);\r\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\r\n device.pushDeviceStates();\r\n device.setFramebuffer(APFramebuffer);\r\n device.setProgram(APLutProgram);\r\n device.setBindGroup(0, APLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","CAMERA_POS_Y","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","apDistance","cameraWorldMatrix","Matrix4x4","identity","lightDir","Vector3","lightColor","Vector4","cameraAspect","cameraHeightScale","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","mul","PH","radius","$if","greaterThan","$return","t1","t2","add","$choice","lessThan","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","cosTheta","dir","r","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","neg","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","a","b","c","d","pow","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","max","abs","width","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texTransmittanceLut","texMultiScatteringLut","withGround","N_SAMPLE","color","dis","eyePos","viewDir","min","greaterThanEqual","maxDis","ds","sunLuminance","opticalDepth","$for","int","extinction","s","scattering","inScattering","getMultiScattering","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3LightDir","f3SamplePoint","N_DIRECTION","uniformPhase","sphereSolidAngle","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","viewDirToUV","atan2","z","x","asin","y","uvToViewDir","f2UV","theta","phi","sin","cos","uvToTransmittanceLut","equal","clamp","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","vec4","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","skyBox","f4SunColor","f3SkyBoxWorldPos","fIncludeSunDisk","texSkyViewLut","out","worldPos","groundDistance","sunTransmittance","sunColor","and","notEqual","includeSunDisk","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","V","cameraPos","d0","weight","dz","dim","slice","floor","nextSlice","factor","t","uv1","uv2","data1","data2","data","mix","inscattering","planetTranslate","aerialPerspectiveLut","f3VoxelDim","funcNameFixVoxel","inout","voxelPos","voxelHeight","underGround","cameraToVoxel","cameraToVoxelLen","cameraToVoxelDir","planetNearT","belowHorizon","eyePos2","or","voxelWorldPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$else","adjustedMaxDis","uvw","mod","cameraPosY","skyViewLut","multiScatteringLut","mu_s","sinTheta","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","pos","attrib","$outputs","main","$builtins","position","xy","fragment","outColor","name","getDevice","undefined","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":";;;;;;AAkBA,MAAMA,qBAAwB,GAAA,EAAA;AAC9B,MAAMC,cAAiB,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA,MAAA;AAAQ,IAAA;AAAK,CAAA;AAC5C,MAAMC,SAAY,GAAA,KAAA;AAClB,MAAMC,oBAAuB,GAAA,GAAA;AAC7B,MAAMC,sBAAyB,GAAA;AAAC,IAAA,IAAA;AAAM,IAAA,KAAA;AAAO,IAAA;AAAM,CAAA;AAEnD,iBACaC,MAAAA,YAAAA,GAAe;AAmB5B,iBACO,SAASC,0BAAAA,GAAAA;IACd,OAAO;QACLC,WAAa,EAAA,OAAA;QACbC,gBAAkB,EAAA,KAAA;QAClBC,wBAA0B,EAAA,IAAA;QAC1BC,mBAAqB,EAAA,IAAA;QACrBC,WAAa,EAAA,GAAA;QACbC,WAAa,EAAA,KAAA;QACbC,UAAY,EAAA,KAAA;QACZC,UAAY,EAAA,IAAA;AACZC,QAAAA,iBAAAA,EAAmBC,UAAUC,QAAQ,EAAA;QACrCC,QAAU,EAAA,IAAIC,OAAQ,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AAC5BC,QAAAA,UAAAA,EAAY,IAAIC,OAAAA,CAAQ,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,EAAA,CAAA;QACjCC,YAAc,EAAA,CAAA;QACdC,iBAAmB,EAAA;AACrB,KAAA;AACF;AAEA,MAAMC,uBAA0BlB,GAAAA,0BAAAA,EAAAA;AAEhC,IAAImB,uBAAsD,GAAA,IAAA;AAE1D,SAASC,YAAYC,KAAiC,EAAA;AACpD,IAAA,MAAMC,MAAS,GAAA;QACbC,aAAe,EAAA,KAAA;QACfC,eAAiB,EAAA,KAAA;QACjBC,OAAS,EAAA,KAAA;QACTC,iBAAmB,EAAA;AACrB,KAAA;IACAL,KAAQ,GAAA;AAAE,QAAA,GAAGH,uBAAuB;AAAE,QAAA,GAAGG;AAAM,KAAA;AAC/C,IAAA,IAAI,CAACF,uBAAyB,EAAA;QAC5BA,uBAA0B,GAAA;AACxB,YAAA,GAAGD,uBAAuB;YAC1BN,QAAU,EAAA,IAAIC,OAAQK,CAAAA,uBAAAA,CAAwBN,QAAQ,CAAA;YACtDE,UAAY,EAAA,IAAIC,OAAQG,CAAAA,uBAAAA,CAAwBJ,UAAU,CAAA;YAC1DL,iBAAmB,EAAA,IAAIC,SAAUQ,CAAAA,uBAAAA,CAAwBT,iBAAiB;AAC5E,SAAA;AACAa,QAAAA,MAAAA,CAAOC,aAAa,GAAG,IAAA;AACvBD,QAAAA,MAAAA,CAAOE,eAAe,GAAG,IAAA;AACzBF,QAAAA,MAAAA,CAAOG,OAAO,GAAG,IAAA;AACjBH,QAAAA,MAAAA,CAAOI,iBAAiB,GAAG,IAAA;KACtB,MAAA;AACLJ,QAAAA,MAAAA,CAAOC,aAAa,GAClBJ,uBAAAA,CAAwBlB,WAAW,KAAKoB,MAAMpB,WAAW,IACzDkB,uBAAwBjB,CAAAA,gBAAgB,KAAKmB,KAAMnB,CAAAA,gBAAgB,IACnEiB,uBAAAA,CAAwBhB,wBAAwB,KAAKkB,KAAAA,CAAMlB,wBAAwB,IACnFgB,wBAAwBf,mBAAmB,KAAKiB,KAAMjB,CAAAA,mBAAmB,IACzEe,uBAAwBb,CAAAA,WAAW,KAAKe,KAAAA,CAAMf,WAAW,IACzDa,uBAAAA,CAAwBZ,UAAU,KAAKc,MAAMd,UAAU;QACzDe,MAAOE,CAAAA,eAAe,GACpBF,MAAOC,CAAAA,aAAa,IAAIJ,uBAAwBd,CAAAA,WAAW,KAAKgB,KAAAA,CAAMhB,WAAW;AACnFiB,QAAAA,MAAAA,CAAOG,OAAO,GACZH,MAAAA,CAAOC,aAAa,IACpBD,OAAOE,eAAe,IACtBL,uBAAwBF,CAAAA,iBAAiB,KAAKI,KAAMJ,CAAAA,iBAAiB,IACrE,CAACE,uBAAAA,CAAwBP,QAAQ,CAACe,QAAQ,CAACN,KAAAA,CAAMT,QAAQ,CACzD,IAAA,CAACO,wBAAwBL,UAAU,CAACa,QAAQ,CAACN,KAAAA,CAAMP,UAAU,CAAA,IAC7D,CAACK,uBAAwBV,CAAAA,iBAAiB,CAACkB,QAAQ,CAACN,MAAMZ,iBAAiB,CAAA;QAC7Ea,MAAOI,CAAAA,iBAAiB,GACtBJ,MAAOC,CAAAA,aAAa,IACpBD,MAAOE,CAAAA,eAAe,IACtBF,MAAOG,CAAAA,OAAO,IACdN,uBAAwBX,CAAAA,UAAU,KAAKa,KAAMb,CAAAA,UAAU,IACvDW,uBAAwBH,CAAAA,YAAY,KAAKK,KAAAA,CAAML,YAAY;AAC/D;IACA,IAAIM,MAAAA,CAAOC,aAAa,EAAE;QACxBJ,uBAAwBlB,CAAAA,WAAW,GAAGoB,KAAAA,CAAMpB,WAAW;QACvDkB,uBAAwBjB,CAAAA,gBAAgB,GAAGmB,KAAAA,CAAMnB,gBAAgB;QACjEiB,uBAAwBhB,CAAAA,wBAAwB,GAAGkB,KAAAA,CAAMlB,wBAAwB;QACjFgB,uBAAwBf,CAAAA,mBAAmB,GAAGiB,KAAAA,CAAMjB,mBAAmB;QACvEe,uBAAwBb,CAAAA,WAAW,GAAGe,KAAAA,CAAMf,WAAW;QACvDa,uBAAwBZ,CAAAA,UAAU,GAAGc,KAAAA,CAAMd,UAAU;AACvD;IACA,IAAIe,MAAAA,CAAOE,eAAe,EAAE;QAC1BL,uBAAwBd,CAAAA,WAAW,GAAGgB,KAAAA,CAAMhB,WAAW;AACzD;IACA,IAAIiB,MAAAA,CAAOG,OAAO,EAAE;QAClBN,uBAAwBF,CAAAA,iBAAiB,GAAGI,KAAAA,CAAMJ,iBAAiB;AACnEE,QAAAA,uBAAAA,CAAwBP,QAAQ,CAACgB,GAAG,CAACP,MAAMT,QAAQ,CAAA;AACnDO,QAAAA,uBAAAA,CAAwBL,UAAU,CAACc,GAAG,CAACP,MAAMP,UAAU,CAAA;AACvDK,QAAAA,uBAAAA,CAAwBV,iBAAiB,CAACmB,GAAG,CAACP,MAAMZ,iBAAiB,CAAA;AACvE;IACA,IAAIa,MAAAA,CAAOI,iBAAiB,EAAE;QAC5BP,uBAAwBX,CAAAA,UAAU,GAAGa,KAAAA,CAAMb,UAAU;QACrDW,uBAAwBH,CAAAA,YAAY,GAAGK,KAAAA,CAAML,YAAY;AAC3D;IACA,OAAOM,MAAAA;AACT;AAEA,iBACO,SAASO,kBAAAA,CACdC,KAA4B,EAC5BC,QAAqB,EACrBC,OAAoB,EACpBC,UAAuB,EACvBC,QAAqB,EAAA;IAErB,MAAMC,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,sBAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;AAACF,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;AAAWJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA,CAAA;AAAWL,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA;KAAU,EAC/E,WAAA;AACE,QAAA,IAAI,CAACE,EAAE,CAACC,EAAE,GAAGP,GAAGQ,MAAM,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,CAACC,QAAQ,CAAA,CAAA;QACxD,IAAI,CAACL,EAAE,CAACM,EAAE,GAAGZ,EAAGa,CAAAA,GAAG,CAACb,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,CAACC,QAAQ,CAAA,EAAG,IAAI,CAACG,MAAM,CAAA;AACnE,QAAA,IAAI,CAACR,EAAE,CAACS,EAAE,GAAGf,EAAAA,CAAGgB,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACV,EAAE,EAAE,IAAI,CAACA,EAAE,GAAGP,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACL,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA,CAAA;AAC7E,QAAA,IAAI,CAACN,EAAE,CAACY,EAAE,GAAGlB,EAAAA,CAAGgB,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACE,MAAM,EAAE,IAAI,CAACA,MAAM,GAAGnB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACF,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA,CAAA;AACrF,QAAA,IAAI,CAACK,GAAG,CAACpB,EAAAA,CAAGqB,WAAW,CAAC,IAAI,CAACN,EAAE,EAAE,IAAI,CAACI,MAAM,CAAG,EAAA,WAAA;AAC7C,YAAA,IAAI,CAACG,OAAO,CAACtB,EAAGK,CAAAA,KAAK,CAAC,EAAC,CAAA,CAAA;AACzB,SAAA,CAAA;AACA,QAAA,IAAI,CAACC,EAAE,CAACiB,EAAE,GAAGvB,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACG,EAAE,EAAE,IAAI,CAACM,EAAE,CAAA;AACpC,QAAA,IAAI,CAACZ,EAAE,CAACkB,EAAE,GAAGxB,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACb,EAAE,EAAE,IAAI,CAACM,EAAE,CAAA;QACpC,IAAI,CAACI,OAAO,CAAC,IAAI,CAACI,OAAO,CAAC1B,GAAG2B,QAAQ,CAAC,IAAI,CAACJ,EAAE,EAAE,CAAI,CAAA,EAAA,IAAI,CAACC,EAAE,EAAE,IAAI,CAACD,EAAE,CAAA,CAAA;AACrE,KAAA,CAAA;AAEF,IAAA,OAAO5B,KAAK,CAACO,QAAAA,CAAS,CAACN,QAAAA,EAAUC,SAASC,UAAYC,EAAAA,QAAAA,CAAAA;AACxD;AAEA,iBACO,SAAS6B,kBAAAA,CACdjC,KAA4B,EAC5BkC,QAAqB,EACrBC,KAAkB,EAClBC,KAAkB,EAClBC,MAAmB,EAAA;IAEnB,MAAMhC,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,sBAAA;AACjB,IAAA,MAAM+B,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;IACzCA,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,GAAA,CAAA;AAAMJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,KAAA;KAAO,EAAE,WAAA;QAClE,IAAI,CAACE,EAAE,CAAC6B,YAAY,GAAG,IAAI,CAACC,MAAM,CAACtE,WAAW;AAC9C,QAAA,IAAI,CAACwC,EAAE,CAAC+B,SAAS,GAAGrC,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAE,IAAI,CAACsE,MAAM,CAACrE,gBAAgB,CAAA;QAChF,IAAI,CAACuC,EAAE,CAACgC,QAAQ,GAAGtC,GAAGuC,SAAS,CAAC,IAAI,CAACC,CAAC,CAAA;AACtC,QAAA,IAAI,CAAClC,EAAE,CAACmC,QAAQ,GAAGzC,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACyB,QAAQ,EAAE,IAAI,CAACI,GAAG,CAAA;QACjD,IAAI,CAACpC,EAAE,CAACqC,CAAC,GAAG3C,GAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA;QAC5B,IAAI,CAAClC,EAAE,CAACsC,EAAE,GAAGC,oBAAqB,CAAA,IAAI,EAAE,IAAI,CAACV,YAAY,EAAE,IAAI,CAACE,SAAS,EAAE,IAAI,CAACI,QAAQ,EAAE,IAAI,CAACE,CAAC,CAAA;AAChG,QAAA,IAAI,CAACrB,OAAO,CAACtB,EAAAA,CAAG8C,kBAAkB,CAACd,MAAQ,EAAA,IAAI,CAACY,EAAE,EAAE,CAAA,CAAA,CAAGG,GAAG,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOpD,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUC,KAAOC,EAAAA,KAAAA,CAAAA;AAC1C;AAEA,iBACO,SAASiB,mBAAAA,CACdrD,KAA4B,EAC5BsD,yBAAsC,EACtCC,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,uBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,0BAAA,CAAA;AAA6BL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QACvE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGI,IAAI,CAAC5C,cAAc,CAAC,CAAA,CAAE,EAAEA,cAAc,CAAC,EAAE,EAAEA,cAAc,CAAC,CAAA,CAAE,CAAG,EAAA,IAAA,CAAA;QACzF,IAAI,CAAC8C,EAAE,CAAC8C,KAAK,GAAGpD,EAAGqD,CAAAA,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAACtD,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACxF,wBAAwB,CAAA,CAAA,CAAA;AAC1E,QAAA,IAAI,CAACsD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAAC+C,yBAA2BC,EAAAA,EAAAA,CAAAA;AACpD;AAEA,iBACO,SAASO,aAAc9D,CAAAA,KAA4B,EAAE+D,SAAsB,EAAA;IAChF,MAAM1D,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,UAAA;KAAY,EAAE,WAAA;QACxC,IAAI,CAACiB,OAAO,CAACtB,EAAGiB,CAAAA,GAAG,CAAC,CAAA,IAAK,EAAA,GAAK0C,IAAKC,CAAAA,EAAE,CAAD,EAAI5D,GAAGyB,GAAG,CAAC,CAAGzB,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAA,CAAA,CAAA,CAAA;AACvF,KAAA,CAAA;IACA,OAAO9C,KAAK,CAACO,QAAAA,CAAS,CAACwD,SAAAA,CAAAA;AACzB;AAEA,iBACO,SAASG,cAAAA,CACdlE,KAA4B,EAC5BmE,oBAAiC,EACjCZ,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,kBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,qBAAA,CAAA;AAAwBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAClE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGI,IAAI,CAAC3C,SAAY,CAAA,EAAA,IAAA,CAAA;QAC3C,IAAI,CAAC6C,EAAE,CAAC8C,KAAK,GAAGpD,EAAGqD,CAAAA,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAACtD,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACvF,mBAAmB,CAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAACqD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAAC4D,oBAAsBZ,EAAAA,EAAAA,CAAAA;AAC/C;AAEA,iBACO,SAASa,QAAAA,CAASpE,KAA4B,EAAEqE,YAAyB,EAAEN,SAAsB,EAAA;IACtG,MAAM1D,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,YAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA,CAAA;AAAML,QAAAA,EAAAA,CAAGK,KAAK,CAAC,UAAA;KAAY,EAAE,WAAA;AACvD,QAAA,IAAI,CAACC,EAAE,CAAC2D,EAAE,GAAGjE,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA;QAClC,IAAI,CAAC5D,EAAE,CAAC6D,CAAC,GAAG,KAAK,CAAA,GAAIR,IAAKC,CAAAA,EAAE,CAAD;QAC3B,IAAI,CAACtD,EAAE,CAAC8D,CAAC,GAAGpE,EAAGuD,CAAAA,GAAG,CAACvD,EAAAA,CAAGS,GAAG,CAAC,GAAG,IAAI,CAACwD,EAAE,CAAGjE,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,CAAA,EAAG,IAAI,CAACwC,EAAE,CAAA,CAAA;AACxD,QAAA,IAAI,CAAC3D,EAAE,CAAC+D,CAAC,GAAGrE,EAAAA,CAAGyB,GAAG,CAAC,CAAA,EAAGzB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACwB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAA,CAAA;AACzD,QAAA,IAAI,CAACnC,EAAE,CAACgE,CAAC,GAAGtE,EAAAA,CAAGuE,GAAG,CAACvE,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGyB,GAAG,CAAC,CAAA,EAAG,IAAI,CAACwC,EAAE,CAAA,EAAGjE,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACiD,CAAC,EAAE,IAAI,CAACzB,QAAQ,EAAE,CAAK,CAAA,CAAA,EAAA,GAAA,CAAA;QACjF,IAAI,CAACnB,OAAO,CAACtB,EAAAA,CAAGuD,GAAG,CAACvD,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkD,CAAC,EAAE,IAAI,CAACC,CAAC,EAAE,IAAI,CAACC,CAAC,CAAA,EAAG,IAAI,CAACC,CAAC,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAO3E,KAAK,CAACO,QAAS,CAAA,CAAC8D,YAAcN,EAAAA,SAAAA,CAAAA;AACvC;AAEA,iBACO,SAASc,aAAAA,CACd7E,KAA4B,EAC5BmE,oBAAiC,EACjCZ,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,qBAAA,CAAA;AAAwBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QAClE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGI,IAAI,CAAC1C,oBAAuB,CAAA,EAAA,IAAA,CAAA;QACtD,IAAI,CAAC4C,EAAE,CAAC8C,KAAK,GAAGpD,EAAGqD,CAAAA,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAACtD,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACvF,mBAAmB,CAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAACqD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAAC4D,oBAAsBZ,EAAAA,EAAAA,CAAAA;AAC/C;AAEA,iBACO,SAASuB,eACd9E,CAAAA,KAA4B,EAC5B+E,uBAAoC,EACpCC,gBAA6B,EAC7BzB,EAAe,EAAA;IAEf,MAAMlD,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,mBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA,CAAA;AAAWL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,OAAA,CAAA;AAAUL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAAE,WAAA;QACxE,IAAI,CAACC,EAAE,CAAC6C,KAAK,GAAGnD,EAAGiB,CAAAA,GAAG,CACpBjB,EAAAA,CAAGI,IAAI,CAACzC,sBAAsB,CAAC,CAAA,CAAE,EAAEA,sBAAsB,CAAC,EAAE,EAAEA,sBAAsB,CAAC,CAAA,CAAE,CACvF,EAAA,IAAA,CAAA;AAEF,QAAA,IAAI,CAAC2C,EAAE,CAAC8C,KAAK,GAAGpD,EAAG4E,CAAAA,GAAG,CAAC,CAAA,EAAG5E,EAAGS,CAAAA,GAAG,CAAC,CAAA,EAAGT,GAAGuD,GAAG,CAACvD,EAAG6E,CAAAA,GAAG,CAAC7E,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAAC+C,CAAC,EAAE,IAAI,CAAC9C,MAAM,CAAI,CAAA,EAAA,IAAI,CAACoE,KAAK,CAAA,CAAA,CAAA;AAC1F,QAAA,IAAI,CAACxD,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkC,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA,CAAA;AAC5C,KAAA,CAAA;AACA,IAAA,OAAOzD,KAAK,CAACO,QAAS,CAAA,CAACwE,yBAAyBC,gBAAkBzB,EAAAA,EAAAA,CAAAA;AACpE;AAEA,iBACO,SAAS6B,WACdpF,KAA4B,EAC5BkC,QAAqB,EACrBmD,QAAqB,EACrBC,SAAsB,EACtBC,OAAoB,EACpBC,mBAAgC,EAChCC,qBAAkC,EAClCC,aAAa,IAAI,EAAA;IAEjB,MAAMrF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;AAAWJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA,CAAA;AAAYJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA;KAAU,EAC7E,WAAA;AACE,QAAA,MAAMiF,QAAW,GAAA,EAAA;AACjB,QAAA,IAAI,CAAChF,EAAE,CAACiF,KAAK,GAAGvF,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;AACxB,QAAA,IAAI,CAACE,EAAE,CAACkF,GAAG,GAAG9F,kBACZ,CAAA,IAAI,EACJM,EAAAA,CAAGI,IAAI,CAAC,CACRJ,CAAAA,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAE,IAAI,CAACsE,MAAM,CAACrE,gBAAgB,CAAA,EAC5D,IAAI,CAAC0H,MAAM,EACX,IAAI,CAACC,OAAO,CAAA;QAEd,IAAI,CAACtE,GAAG,CAACpB,EAAG2B,CAAAA,QAAQ,CAAC,IAAI,CAAC6D,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AACjC,YAAA,IAAI,CAAClE,OAAO,CAACtB,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA,CAAA;AACvB,SAAA,CAAA;AACA,QAAA,IAAIiF,UAAY,EAAA;YACd,IAAI,CAAC/E,EAAE,CAACgE,CAAC,GAAG5E,mBAAmB,IAAI,EAAEM,EAAGI,CAAAA,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAACgC,MAAM,CAACtE,WAAW,EAAE,IAAI,CAAC2H,MAAM,EAAE,IAAI,CAACC,OAAO,CAAA;YACnG,IAAI,CAACtE,GAAG,CAACpB,EAAGqB,CAAAA,WAAW,CAAC,IAAI,CAACiD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,gBAAA,IAAI,CAACkB,GAAG,GAAGxF,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,CAAClB,CAAC,CAAA;AACpC,aAAA,CAAA;AACF;QACA,IAAI,CAAClD,GAAG,CAACpB,EAAG4F,CAAAA,gBAAgB,CAAC,IAAI,CAACC,MAAM,EAAE,CAAI,CAAA,EAAA,WAAA;AAC5C,YAAA,IAAI,CAACL,GAAG,GAAGxF,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,CAACK,MAAM,CAAA;AACzC,SAAA,CAAA;QACA,IAAI,CAACvF,EAAE,CAACwF,EAAE,GAAG9F,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACiC,GAAG,EAAEF,QAAAA,CAAAA;QAC9B,IAAI,CAAChF,EAAE,CAACkC,CAAC,GAAGxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,EAAE,GAAA,CAAA,CAAA;QAC9D,IAAI,CAACxF,EAAE,CAACyF,YAAY,GAAG/F,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACmB,MAAM,CAACzD,UAAU,CAACoE,GAAG,EAAE,IAAI,CAACX,MAAM,CAACzD,UAAU,CAACwF,CAAC,CAAA;AAClF,QAAA,IAAI,CAAC7D,EAAE,CAAC0F,YAAY,GAAGhG,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QAC/B,IAAI,CAAC6F,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGZ,QAAU,EAAA,WAAA;AAClC,YAAA,IAAI,CAAChF,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACwC,EAAE,CAAC6F,UAAU,GAAGnG,EAAAA,CAAGyB,GAAG,CACzBuB,mBAAoB,CAAA,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CAAA,EACtEK,cAAe,CAAA,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,EAC5DiB,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACrC,MAAM,CAACjE,WAAW,EAAE,IAAI,CAACiE,MAAM,CAAChE,UAAU,EAAE,IAAI,CAACoF,CAAC,CAAA,EAC7EgB,aAAc,CAAA,IAAI,EAAE,IAAI,CAACpC,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE7D,YAAA,IAAI,CAACwC,YAAY,GAAGhG,GAAGyB,GAAG,CAAC,IAAI,CAACuE,YAAY,EAAEhG,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACkF,UAAU,EAAE,IAAI,CAACL,EAAE,CAAA,CAAA;YAC7E,IAAI,CAACxF,EAAE,CAACiB,EAAE,GAAGK,kBAAmB,CAAA,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAACJ,MAAM,CAAC3D,QAAQ,EAAE0G,mBAAAA,CAAAA;AACjF,YAAA,IAAI,CAAC7E,EAAE,CAAC8F,CAAC,GAAGC,UAAAA,CAAW,IAAI,EAAE,IAAI,CAACjE,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAACkD,OAAO,CAAA;AAC9D,YAAA,IAAI,CAACpF,EAAE,CAACkB,EAAE,GAAGxB,EAAAA,CAAGqD,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAAC,IAAI,CAAC0C,YAAY,CAAA,CAAA;YAE5C,IAAI,CAAC1F,EAAE,CAACgG,YAAY,GAAGtG,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACM,EAAE,EAAE,IAAI,CAAC6E,CAAC,EAAE,IAAI,CAAC5E,EAAE,EAAE,IAAI,CAACsE,EAAE,EAAE,IAAI,CAACC,YAAY,CAAA;AAClF,YAAA,IAAI,CAACR,KAAK,GAAGvF,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAE,IAAI,CAACe,YAAY,CAAA;AAEjD,YAAA,IAAI,CAAChG,EAAE,CAACjB,eAAe,GAAGkH,kBAAmB,CAAA,IAAI,EAAE,IAAI,CAACnE,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE4C,qBAAAA,CAAAA;YACxE,IAAI,CAACG,KAAK,GAAGvF,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC8D,KAAK,EAAEvF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC5B,eAAe,EAAE,IAAI,CAACmC,EAAE,EAAE,IAAI,CAACsE,EAAE,EAAE,IAAI,CAACC,YAAY,CAAA,CAAA;AAEhG,YAAA,IAAI,CAACvD,CAAC,GAAGxC,GAAGyB,GAAG,CAAC,IAAI,CAACe,CAAC,EAAExC,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,CAAA,CAAA;AACtD,SAAA,CAAA;AACA,QAAA,IAAI,CAACxE,OAAO,CAAC,IAAI,CAACiE,KAAK,CAAA;AACzB,KAAA,CAAA;AAEF,IAAA,OAAO5F,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAAA,EAAUmD,UAAUC,SAAWC,EAAAA,OAAAA,CAAAA;AACxD;AAEA,iBACO,SAASqB,kBACd5G,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrBC,KAAkB,EAClBsD,qBAAkC,EAAA;IAElC,MAAMpF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,sBAAA;AACjB,IAAA,MAAM+B,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;IACzCA,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,GAAA;KAAK,EAAE,WAAA;AAClD,QAAA,IAAI,CAACE,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,QAAA,IAAI,CAACwC,EAAE,CAACkG,OAAO,GAAGxG,EAAGyB,CAAAA,GAAG,CACtBuB,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEK,EAAAA,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE9D,QAAA,IAAI,CAAClD,EAAE,CAACmG,WAAW,GAAGzG,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAAC3D,QAAQ,CAAA;AACvE,QAAA,IAAI,CAAC6B,EAAE,CAACsC,EAAE,GAAG5C,EAAAA,CAAG0G,IAAI,CAClB1G,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwF,WAAW,EAAE,GAAA,CAAA,EAAM,GACtCzG,CAAAA,EAAAA,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACC,CAAC,EAAE,IAAI,CAACpB,MAAM,CAACrE,gBAAgB,CAAA,CAAA;AAE7C,QAAA,IAAI,CAACuC,EAAE,CAACqG,KAAK,GAAG3G,EAAG8C,CAAAA,kBAAkB,CAACsC,qBAAAA,EAAuB,IAAI,CAACxC,EAAE,EAAE,GAAGG,GAAG;AAC5E,QAAA,IAAI,CAACzB,OAAO,CAACtB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC0F,KAAK,EAAE,IAAI,CAACH,OAAO,CAAA,CAAA;AAC9C,KAAA,CAAA;AACA,IAAA,OAAO7G,KAAK,CAACO,QAAS,CAAA,CAAC2B,QAAUC,EAAAA,KAAAA,CAAAA;AACnC;AAEA,iBACO,SAAS8E,uBAAAA,CACdjH,KAA4B,EAC5BkC,QAAqB,EACrBgF,UAAuB,EACvBC,aAA0B,EAC1B3B,mBAAgC,EAAA;AAEhC,IAAA,MAAM4B,WAAc,GAAA,EAAA;AACpB,IAAA,MAAMzB,QAAW,GAAA,EAAA;IACjB,MAAMtF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,2BAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,aAAA;KAAe,EAAE,WAAA;AACjF,QAAA,MAAM4G,eAAe,CAAK,IAAA,CAAIrD,GAAAA,IAAAA,CAAKC,EAAE,CAAD;AACpC,QAAA,MAAMqD,gBAAmB,GAAC,CAAItD,GAAAA,IAAAA,CAAKC,EAAE,GAAImD,WAAAA;AACzC,QAAA,IAAI,CAACzG,EAAE,CAAC4G,GAAG,GAAGlH,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;AACtB,QAAA,IAAI,CAACE,EAAE,CAAC6G,IAAI,GAAGnH,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QACvB,IAAI,CAAC6F,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGa,WAAa,EAAA,WAAA;AACrC,YAAA,IAAI,CAACzG,EAAE,CAACoF,OAAO,GAAG,IAAI,CAAC0B,oBAAoB,CAACC,EAAE,CAAC,IAAI,CAACC,CAAC,EAAEC,GAAG;AAC1D,YAAA,IAAI,CAACjH,EAAE,CAACkF,GAAG,GAAG9F,kBACZ,CAAA,IAAI,EACJM,EAAAA,CAAGI,IAAI,CAAC,CACRJ,CAAAA,EAAAA,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAE,IAAI,CAACsE,MAAM,CAACrE,gBAAgB,CAAA,EAC5D,IAAI,CAACyJ,WAAW,EAChB,IAAI,CAAC9B,OAAO,CAAA;YAEd,IAAI,CAACpF,EAAE,CAACgE,CAAC,GAAG5E,mBACV,IAAI,EACJM,EAAGI,CAAAA,IAAI,CAAC,CAAA,CAAA,EACR,IAAI,CAACgC,MAAM,CAACtE,WAAW,EACvB,IAAI,CAAC0J,WAAW,EAChB,IAAI,CAAC9B,OAAO,CAAA;YAEd,IAAI,CAACtE,GAAG,CAACpB,EAAGqB,CAAAA,WAAW,CAAC,IAAI,CAACiD,CAAC,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,gBAAA,IAAI,CAACkB,GAAG,GAAGxF,EAAAA,CAAG2F,GAAG,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,CAAClB,CAAC,CAAA;AACpC,aAAA,CAAA;YACA,IAAI,CAAChE,EAAE,CAACwF,EAAE,GAAG9F,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACiC,GAAG,EAAEF,QAAAA,CAAAA;YAC9B,IAAI,CAAChF,EAAE,CAACkC,CAAC,GAAGxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC+F,WAAW,EAAExH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,EAAE,GAAA,CAAA,CAAA;AACnE,YAAA,IAAI,CAACxF,EAAE,CAAC0F,YAAY,GAAGhG,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;YAC/B,IAAI,CAAC6F,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAGZ,QAAU,EAAA,WAAA;AAClC,gBAAA,IAAI,CAAChF,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,gBAAA,IAAI,CAACwC,EAAE,CAACkG,OAAO,GAAGxG,EAAGyB,CAAAA,GAAG,CACtBuB,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEK,EAAAA,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE9D,gBAAA,IAAI,CAAClD,EAAE,CAACmH,OAAO,GAAGzH,GAAGyB,GAAG,CACtBgD,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACrC,MAAM,CAACjE,WAAW,EAAE,IAAI,CAACiE,MAAM,CAAChE,UAAU,EAAE,IAAI,CAACoF,CAAC,GAC7EgB,aAAc,CAAA,IAAI,EAAE,IAAI,CAACpC,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE7D,gBAAA,IAAI,CAAClD,EAAE,CAACoH,OAAO,GAAG1H,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC+E,OAAO,EAAE,IAAI,CAACiB,OAAO,CAAA;AACnD,gBAAA,IAAI,CAACzB,YAAY,GAAGhG,GAAGyB,GAAG,CAAC,IAAI,CAACuE,YAAY,EAAEhG,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyG,OAAO,EAAE,IAAI,CAAC5B,EAAE,CAAA,CAAA;AAC1E,gBAAA,IAAI,CAACxF,EAAE,CAACiB,EAAE,GAAGK,kBAAAA,CAAmB,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAAC/D,QAAQ,EAAE0G,mBAAAA,CAAAA;AAC1E,gBAAA,IAAI,CAAC7E,EAAE,CAAC8F,CAAC,GAAGC,UAAAA,CAAW,IAAI,EAAE,IAAI,CAACjE,MAAM,EAAE,IAAI,CAACI,CAAC,EAAE,IAAI,CAACkD,OAAO,CAAA;AAC9D,gBAAA,IAAI,CAACpF,EAAE,CAACkB,EAAE,GAAGxB,EAAAA,CAAGqD,GAAG,CAACrD,EAAGsD,CAAAA,GAAG,CAAC,IAAI,CAAC0C,YAAY,CAAA,CAAA;AAC5C,gBAAA,IAAI,CAACkB,GAAG,GAAGlH,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACyF,GAAG,EAAElH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACM,EAAE,EAAE,IAAI,CAAC6E,CAAC,EAAE,IAAI,CAAC5E,EAAE,EAAEwF,YAAAA,EAAc,IAAI,CAAClB,EAAE,CAAA,CAAA;gBAClF,IAAI,CAACqB,IAAI,GAAGnH,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC0F,IAAI,EAAEnH,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACO,EAAE,EAAE,IAAI,CAACgF,OAAO,EAAEQ,YAAAA,EAAc,IAAI,CAAClB,EAAE,CAAA,CAAA;AACjF,gBAAA,IAAI,CAACtD,CAAC,GAAGxC,GAAGyB,GAAG,CAAC,IAAI,CAACe,CAAC,EAAExC,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACI,EAAE,CAAA,CAAA;AACtD,aAAA,CAAA;AACF,SAAA,CAAA;QACA,IAAI,CAACoB,GAAG,GAAGlH,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACiG,GAAG,EAAED,gBAAAA,CAAAA;QAC5B,IAAI,CAACE,IAAI,GAAGnH,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkG,IAAI,EAAEF,gBAAAA,CAAAA;AAC9B,QAAA,IAAI,CAAC3F,OAAO,CAACtB,GAAGuD,GAAG,CAAC,IAAI,CAAC2D,GAAG,EAAElH,EAAGS,CAAAA,GAAG,CAACT,EAAGI,CAAAA,IAAI,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC+G,IAAI,CAAA,CAAA,CAAA;AAC5D,KAAA,CAAA;AACA,IAAA,OAAOxH,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUgF,UAAYC,EAAAA,aAAAA,CAAAA;AAC/C;AAEA,iBACO,SAAST,UACd1G,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrBC,KAAkB,EAClBmD,SAAsB,EAAA;IAEtB,MAAMjF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,GAAA,CAAA;AAAMJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA;KAAW,EAAE,WAAA;AACtE,QAAA,IAAI,CAACE,EAAE,CAACmC,QAAQ,GAAGzC,GAAGa,GAAG,CAAC,IAAI,CAACuB,MAAM,CAAC3D,QAAQ,EAAE,IAAI,CAACiH,OAAO,CAAA;AAC5D,QAAA,IAAI,CAACpF,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;QAC7D,IAAI,CAACwC,EAAE,CAACqH,QAAQ,GAAG3H,EAAGiB,CAAAA,GAAG,CACvB+B,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEC,EAAAA,aAAAA,CAAc,IAAI,EAAE,IAAI,CAAChB,QAAQ,CAAA,CAAA;AAEnC,QAAA,IAAI,CAACnC,EAAE,CAACsH,GAAG,GAAG5H,EAAGiB,CAAAA,GAAG,CAClB4C,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAC5DO,EAAAA,QAAAA,CAAS,IAAI,EAAE,IAAI,CAAC3B,MAAM,CAAClE,WAAW,EAAE,IAAI,CAACuE,QAAQ,CAAA,CAAA;AAEvD,QAAA,IAAI,CAACnB,OAAO,CAACtB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACkG,QAAQ,EAAE,IAAI,CAACC,GAAG,CAAA,CAAA;AAC7C,KAAA,CAAA;AACA,IAAA,OAAOjI,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUC,KAAOmD,EAAAA,SAAAA,CAAAA;AAC1C;AAEA,iBACO,SAAS7F,aACdO,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrBgG,IAAiB,EACjBC,IAAiB,EAAA;IAEjB,MAAM9H,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,iBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,IAAA,CAAA;AAAOJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AAClE,QAAA,IAAI,CAACE,EAAE,CAACoC,GAAG,GAAG1C,GAAGuC,SAAS,CAACvC,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACsH,EAAE,EAAE,IAAI,CAACC,EAAE,CAAA,CAAA;AAClD,QAAA,IAAI,CAAC1H,EAAE,CAAC2H,QAAQ,GAAGjI,GAAGQ,MAAM,CAACR,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACsH,EAAE,EAAE,IAAI,CAACC,EAAE,CAAA,CAAA;QACpD,IAAI,CAAC1H,EAAE,CAACwF,EAAE,GAAG9F,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAAC0E,QAAQ,EAAE1K,qBAAAA,CAAAA;AACnC,QAAA,IAAI,CAAC+C,EAAE,CAAC4H,GAAG,GAAGlI,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QACtB,IAAI,CAACE,EAAE,CAACkC,CAAC,GAAGxC,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACuG,EAAE,EAAEhI,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyB,GAAG,EAAE,IAAI,CAACoD,EAAE,EAAE,GAAA,CAAA,CAAA;QACtD,IAAI,CAACG,IAAI,CAACjG,EAAAA,CAAGkG,GAAG,CAAC,GAAA,CAAA,EAAM,GAAG3I,qBAAuB,EAAA,WAAA;AAC/C,YAAA,IAAI,CAAC+C,EAAE,CAACkD,CAAC,GAAGxD,EAAAA,CAAGS,GAAG,CAACT,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACgC,CAAC,CAAA,EAAG,IAAI,CAACJ,MAAM,CAACtE,WAAW,CAAA;AAC7D,YAAA,IAAI,CAACwC,EAAE,CAAC+F,UAAU,GAAGrG,EAAGyB,CAAAA,GAAG,CACzBuB,mBAAAA,CAAoB,IAAI,EAAE,IAAI,CAACZ,MAAM,CAACpE,wBAAwB,EAAE,IAAI,CAACwF,CAAC,CACtEK,EAAAA,cAAAA,CAAe,IAAI,EAAE,IAAI,CAACzB,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE9D,YAAA,IAAI,CAAClD,EAAE,CAAC6H,UAAU,GAAGnI,GAAGyB,GAAG,CACzBgD,eAAgB,CAAA,IAAI,EAAE,IAAI,CAACrC,MAAM,CAACjE,WAAW,EAAE,IAAI,CAACiE,MAAM,CAAChE,UAAU,EAAE,IAAI,CAACoF,CAAC,GAC7EgB,aAAc,CAAA,IAAI,EAAE,IAAI,CAACpC,MAAM,CAACnE,mBAAmB,EAAE,IAAI,CAACuF,CAAC,CAAA,CAAA;AAE7D,YAAA,IAAI,CAAClD,EAAE,CAAC6F,UAAU,GAAGnG,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC4E,UAAU,EAAE,IAAI,CAAC8B,UAAU,CAAA;AAC5D,YAAA,IAAI,CAACD,GAAG,GAAGlI,GAAGyB,GAAG,CAAC,IAAI,CAACyG,GAAG,EAAElI,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACkF,UAAU,EAAE,IAAI,CAACL,EAAE,CAAA,CAAA;AAC3D,YAAA,IAAI,CAACtD,CAAC,GAAGxC,GAAGyB,GAAG,CAAC,IAAI,CAACe,CAAC,EAAExC,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACyB,GAAG,EAAE,IAAI,CAACoD,EAAE,CAAA,CAAA;AAClD,SAAA,CAAA;QACA,IAAI,CAACxE,OAAO,CAACtB,EAAGqD,CAAAA,GAAG,CAACrD,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAAC4E,GAAG,CAAA,CAAA,CAAA;AACrC,KAAA,CAAA;AACA,IAAA,OAAOvI,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAUgG,IAAMC,EAAAA,IAAAA,CAAAA;AACzC;AAEA,iBACO,SAASjF,oBAAAA,CACdlD,KAA4B,EAC5ByI,aAA0B,EAC1BC,UAAuB,EACvBC,GAAgB,EAChBC,EAAe,EAAA;IAEf,MAAMvI,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,qBAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;AAACF,QAAAA,EAAAA,CAAGK,KAAK,CAAC,cAAA,CAAA;AAAiBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,WAAA,CAAA;AAAcL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,IAAA,CAAA;AAAOL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,GAAA;KAAK,EAChF,WAAA;AACE,QAAA,IAAI,CAACC,EAAE,CAACkI,CAAC,GAAGxI,EAAGgB,CAAAA,IAAI,CACjBhB,EAAAA,CAAG4E,GAAG,CACJ,CAAA,EACA5E,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACA,SAAS,CAAGrC,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAG9F,QAAA,IAAI,CAAC7B,EAAE,CAACmI,GAAG,GAAGzI,EAAGgB,CAAAA,IAAI,CACnBhB,EAAAA,CAAG4E,GAAG,CAAC,CAAA,EAAG5E,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAACA,CAAC,CAAG3C,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAEtF,QAAA,IAAI,CAAC7B,EAAE,CAACoI,YAAY,GAAG1I,EAAAA,CAAGyB,GAAG,CAC3BzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAACA,CAAC,EAAE3C,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC0H,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,EAAG,KACxD3I,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACA,SAAS,CAAA,CAAA;AAEvC,QAAA,IAAI,CAAC/B,EAAE,CAACgE,CAAC,GAAGtE,EAAAA,CAAG4E,GAAG,CAAC,CAAG5E,EAAAA,EAAAA,CAAGS,GAAG,CAACT,EAAGgB,CAAAA,IAAI,CAAC,IAAI,CAAC0H,YAAY,CAAG1I,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC0H,EAAE,EAAE,IAAI,CAAChG,CAAC,CAAA,CAAA,CAAA;AAC/E,QAAA,IAAI,CAACrC,EAAE,CAACsI,KAAK,GAAG5I,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC4B,SAAS,EAAE,IAAI,CAACM,CAAC,CAAA;AAC7C,QAAA,IAAI,CAACrC,EAAE,CAACuI,KAAK,GAAG7I,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgH,GAAG,EAAE,IAAI,CAACD,CAAC,CAAA;AACvC,QAAA,IAAI,CAAClI,EAAE,CAACwI,IAAI,GAAG9I,EAAAA,CAAGuD,GAAG,CAACvD,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC6D,CAAC,EAAE,IAAI,CAACsE,KAAK,CAAG5I,EAAAA,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACoI,KAAK,EAAE,IAAI,CAACD,KAAK,CAAA,CAAA;AAC/E,QAAA,IAAI,CAACtI,EAAE,CAACyI,GAAG,GAAG/I,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAACkF,GAAG,EAAE,IAAI,CAACD,CAAC,CAAA;AACrC,QAAA,IAAI,CAAClH,OAAO,CAACtB,EAAAA,CAAG0G,IAAI,CAAC,IAAI,CAACoC,IAAI,EAAE,IAAI,CAACC,GAAG,CAAA,CAAA;AAC1C,KAAA,CAAA;AAEF,IAAA,OAAOpJ,KAAK,CAACO,QAAAA,CAAS,CAACkI,aAAAA,EAAeC,YAAYC,GAAKC,EAAAA,EAAAA,CAAAA;AACzD;AAEA,iBACO,SAASS,WAAYrJ,CAAAA,KAA4B,EAAEsF,SAAsB,EAAA;IAC9E,MAAMjF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,eAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA;KAAW,EAAE,WAAA;AACtC,QAAA,IAAI,CAACE,EAAE,CAACsC,EAAE,GAAG5C,EAAAA,CAAG0G,IAAI,CAAC1G,EAAGiJ,CAAAA,KAAK,CAAC,IAAI,CAACvD,OAAO,CAACwD,CAAC,EAAE,IAAI,CAACxD,OAAO,CAACyD,CAAC,CAAA,EAAGnJ,EAAGoJ,CAAAA,IAAI,CAAC,IAAI,CAAC1D,OAAO,CAAC2D,CAAC,CAAA,CAAA;AACrF,QAAA,IAAI,CAACzG,EAAE,GAAG5C,GAAGuD,GAAG,CAAC,IAAI,CAACX,EAAE,EAAE5C,EAAAA,CAAG0G,IAAI,CAAC,CAAA,GAAI/C,KAAKC,EAAE,EAAED,KAAKC,EAAE,CAAA,CAAA;AACtD,QAAA,IAAI,CAAChB,EAAE,GAAG5C,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACmB,EAAE,EAAE5C,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;AAClC,QAAA,IAAI,CAACpF,OAAO,CAAC,IAAI,CAACsB,EAAE,CAAA;AACtB,KAAA,CAAA;IACA,OAAOjD,KAAK,CAACO,QAAAA,CAAS,CAAC+E,SAAAA,CAAAA;AACzB;AAEA,iBACO,SAASqE,WAAY3J,CAAAA,KAA4B,EAAE4J,IAAiB,EAAA;IACzE,MAAMvJ,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,eAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AACjC,QAAA,IAAI,CAACpG,EAAE,CAACkJ,KAAK,GAAGxJ,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGS,GAAG,CAAC,CAAA,EAAG,IAAI,CAACmC,EAAE,CAACyG,CAAC,CAAA,EAAG1F,KAAKC,EAAE,CAAA;QACpD,IAAI,CAACtD,EAAE,CAACmJ,GAAG,GAAGzJ,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGS,GAAG,CAACT,GAAGiB,GAAG,CAAC,IAAI,CAAC2B,EAAE,CAACuG,CAAC,EAAE,CAAA,CAAA,EAAI,CAAIxF,CAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA;QAC7D,IAAI,CAACtD,EAAE,CAAC6I,CAAC,GAAGnJ,EAAGiB,CAAAA,GAAG,CAACjB,EAAG0J,CAAAA,GAAG,CAAC,IAAI,CAACF,KAAK,CAAGxJ,EAAAA,EAAAA,CAAG2J,GAAG,CAAC,IAAI,CAACF,GAAG,CAAA,CAAA;QACtD,IAAI,CAACnJ,EAAE,CAAC4I,CAAC,GAAGlJ,EAAGiB,CAAAA,GAAG,CAACjB,EAAG0J,CAAAA,GAAG,CAAC,IAAI,CAACF,KAAK,CAAGxJ,EAAAA,EAAAA,CAAG0J,GAAG,CAAC,IAAI,CAACD,GAAG,CAAA,CAAA;QACtD,IAAI,CAACnJ,EAAE,CAAC+I,CAAC,GAAGrJ,GAAG2J,GAAG,CAAC,IAAI,CAACH,KAAK,CAAA;AAC7B,QAAA,IAAI,CAAClI,OAAO,CAACtB,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAAC+I,CAAC,EAAE,IAAI,CAACE,CAAC,EAAE,IAAI,CAACH,CAAC,CAAA,CAAA;AAC7C,KAAA,CAAA;IACA,OAAOvJ,KAAK,CAACO,QAAAA,CAAS,CAACqJ,IAAAA,CAAAA;AACzB;AAEA,iBACO,SAASK,oBACdjK,CAAAA,KAA4B,EAC5B4J,IAAiB,EACjBnB,aAA0B,EAC1BC,UAAuB,EAAA;IAEvB,MAAMrI,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,wBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;AAACF,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGK,KAAK,CAAC,cAAA,CAAA;AAAiBL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,WAAA;KAAa,EAAE,WAAA;QAClF,IAAI,CAACC,EAAE,CAACwI,IAAI,GAAG,IAAI,CAAClG,EAAE,CAACuG,CAAC;QACxB,IAAI,CAAC7I,EAAE,CAACyI,GAAG,GAAG,IAAI,CAACnG,EAAE,CAACyG,CAAC;AACvB,QAAA,IAAI,CAAC/I,EAAE,CAACkI,CAAC,GAAGxI,EAAGgB,CAAAA,IAAI,CACjBhB,EAAAA,CAAG4E,GAAG,CAAC,CAAA,EAAG5E,EAAGS,CAAAA,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACA,SAAS,CAAGrC,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAEtG,QAAA,IAAI,CAAC7B,EAAE,CAACmI,GAAG,GAAGzI,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACuH,CAAC,EAAE,IAAI,CAACO,GAAG,CAAA;AACrC,QAAA,IAAI,CAACzI,EAAE,CAACqC,CAAC,GAAG3C,EAAGgB,CAAAA,IAAI,CACjBhB,EAAAA,CAAG4E,GAAG,CAAC,CAAA,EAAG5E,EAAGyB,CAAAA,GAAG,CAACzB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACwH,GAAG,EAAE,IAAI,CAACA,GAAG,CAAGzI,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACkB,YAAY,EAAE,IAAI,CAACA,YAAY,CAAA,CAAA,CAAA,CAAA;AAE1F,QAAA,IAAI,CAAC7B,EAAE,CAACsI,KAAK,GAAG5I,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC4B,SAAS,EAAE,IAAI,CAACM,CAAC,CAAA;AAC7C,QAAA,IAAI,CAACrC,EAAE,CAACuI,KAAK,GAAG7I,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgH,GAAG,EAAE,IAAI,CAACD,CAAC,CAAA;AACvC,QAAA,IAAI,CAAClI,EAAE,CAACgE,CAAC,GAAGtE,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACmH,KAAK,EAAE5I,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC6H,IAAI,EAAE9I,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACoI,KAAK,EAAE,IAAI,CAACD,KAAK,CAAA,CAAA,CAAA;AAC9E,QAAA,IAAI,CAACtI,EAAE,CAACqI,EAAE,GAAG,IAAI,CAACjH,OAAO,CACvB1B,GAAG6J,KAAK,CAAC,IAAI,CAACvF,CAAC,EAAE,CAAA,CAAA,EACjBtE,EAAGK,CAAAA,KAAK,CAAC,CAAA,CAAA,EACTL,EAAGuD,CAAAA,GAAG,CACJvD,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACuH,CAAC,EAAE,IAAI,CAACA,CAAC,CAAA,EAAGxI,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwH,GAAG,EAAE,IAAI,CAACA,GAAG,CAAA,EAAGzI,GAAGiB,GAAG,CAAC,IAAI,CAACqD,CAAC,EAAE,IAAI,CAACA,CAAC,KACvFtE,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAAC2B,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA;QAG3B,IAAI,CAACqE,EAAE,GAAG3I,EAAG8J,CAAAA,KAAK,CAAC,IAAI,CAACnB,EAAE,EAAE,EAAI,EAAA,CAAA,CAAA;AAChC,QAAA,IAAI,CAACrH,OAAO,CAACtB,EAAAA,CAAG0G,IAAI,CAAC,IAAI,CAACiC,EAAE,EAAE,IAAI,CAAChG,CAAC,CAAA,CAAA;AACtC,KAAA,CAAA;AACA,IAAA,OAAOhD,KAAK,CAACO,QAAS,CAAA,CAACqJ,MAAMnB,aAAeC,EAAAA,UAAAA,CAAAA;AAC9C;AAEA,SAAS0B,QAAAA,CACPpK,KAA4B,EAC5BsF,SAAsB,EACtB4B,UAAuB,EACvBmD,wBAAqC,EACrCC,cAA2B,EAAA;IAE3B,MAAMjK,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,YAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;AAACF,QAAAA,EAAAA,CAAGI,IAAI,CAAC,SAAA,CAAA;AAAYJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGkK,IAAI,CAAC,sBAAA,CAAA;AAAyBlK,QAAAA,EAAAA,CAAGK,KAAK,CAAC,eAAA;KAAiB,EACrG,WAAA;QACE,IAAI,CAACC,EAAE,CAAC6J,cAAc,GAAGnK,GAAG2J,GAAG,CAAC,IAAI,CAACS,aAAa,CAAA;AAClD,QAAA,IAAI,CAAC9J,EAAE,CAACmC,QAAQ,GAAGzC,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAAC6E,OAAO,EAAE,IAAI,CAACjH,QAAQ,CAAA;AACrD,QAAA,IAAI,CAAC6B,EAAE,CAAC+J,SAAS,GAAGrK,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACqJ,oBAAoB,CAACvH,GAAG,EAAE,IAAI,CAACuH,oBAAoB,CAACnG,CAAC,CAAA;AACrF,QAAA,IAAI,CAAC/C,GAAG,CAACpB,EAAAA,CAAG2B,QAAQ,CAAC,IAAI,CAACc,QAAQ,EAAE,IAAI,CAAC0H,cAAc,CAAG,EAAA,WAAA;AACxD,YAAA,IAAI,CAAC7J,EAAE,CAACiK,MAAM,GAAGvK,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAAC0J,cAAc,EAAE,IAAI,CAAC1H,QAAQ,CAAA;AAC1D,YAAA,IAAI,CAACnC,EAAE,CAACkK,aAAa,GAAGxK,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGqD,GAAG,CAACrD,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACsJ,MAAM,EAAE,IAAU,CAAA,CAAA,EAAA,GAAA,CAAA;YACpE,IAAI,CAACjK,EAAE,CAACmK,QAAQ,GAAGzK,EAAGiB,CAAAA,GAAG,CAACjB,EAAAA,CAAGuD,GAAG,CAAC,GAAGvD,EAAGyB,CAAAA,GAAG,CAAC,IAAA,EAAMzB,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACsJ,MAAM,EAAE,GAAQ,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA;AAC7E,YAAA,IAAI,CAACF,SAAS,GAAGrK,GAAGiB,GAAG,CAAC,IAAI,CAACoJ,SAAS,EAAErK,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC+I,aAAa,EAAE,IAAI,CAACC,QAAQ,CAAA,CAAA;AAClF,SAAA,CAAA;AACA,QAAA,IAAI,CAACnJ,OAAO,CAAC,IAAI,CAAC+I,SAAS,CAAA;AAC7B,KAAA,CAAA;AAEF,IAAA,OAAO1K,KAAK,CAACO,QAAAA,CAAS,CAAC+E,SAAAA,EAAW4B,YAAYmD,wBAA0BC,EAAAA,cAAAA,CAAAA;AAC1E;AAEA,iBACO,SAASS,OACd/K,KAA4B,EAC5BkC,QAAqB,EACrB8I,UAAuB,EACvBC,gBAA6B,EAC7BX,cAA2B,EAC3BY,eAA4B,EAC5B1F,mBAAgC,EAChC2F,aAA0B,EAAA;IAE1B,MAAM9K,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMC,QAAW,GAAA,UAAA;AACjB,IAAA,MAAM+B,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;IACzCA,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;QACE+B,MAAO,CAAA,QAAA,CAAA;QACPjC,EAAGkK,CAAAA,IAAI,CAAC,UAAA,CAAA,CAAYa,GAAG,EAAA;AACvB/K,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AACRJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,eAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGkG,GAAG,CAAC,gBAAA;KACR,EACD,WAAA;AACE,QAAA,IAAI,CAAC5F,EAAE,CAACyC,GAAG,GAAG/C,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA;QACtB,IAAI,CAACE,EAAE,CAACoF,OAAO,GAAG1F,GAAGuC,SAAS,CAAC,IAAI,CAACyI,QAAQ,CAAA;QAC5C,IAAI,CAACjI,GAAG,GAAG/C,EAAAA,CAAGyB,GAAG,CACf,IAAI,CAACsB,GAAG,EACR/C,EAAAA,CAAG8C,kBAAkB,CAACgI,aAAAA,EAAe9B,YAAY,IAAI,EAAE,IAAI,CAACtD,OAAO,CAAG,EAAA,CAAA,CAAA,CAAG3C,GAAG,CAAA;QAE9E,IAAI,CAACzC,EAAE,CAAC2K,cAAc,GAAGvL,kBACvB,CAAA,IAAI,EACJM,EAAGI,CAAAA,IAAI,CAAC,CACR,CAAA,EAAA,IAAI,CAACgC,MAAM,CAACtE,WAAW,EACvBkC,EAAAA,CAAGI,IAAI,CAAC,CAAA,EAAGJ,GAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAEkC,GAAGiB,GAAG,CAACrD,cAAc,IAAI,CAACwE,MAAM,CAACtD,iBAAiB,IAAI,CACjG,CAAA,EAAA,IAAI,CAAC4G,OAAO,CAAA;AAEd,QAAA,IAAI,CAACpF,EAAE,CAAC4K,gBAAgB,GAAGtJ,mBACzB,IAAI,EACJ,IAAI,CAACQ,MAAM,EACXpC,EAAAA,CAAGI,IAAI,CAAC,GAAGJ,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtD,iBAAiB,EAAE,IAAI,CAACsD,MAAM,CAACtE,WAAW,GAAG,CAC3E,CAAA,EAAA,IAAI,CAACsE,MAAM,CAAC3D,QAAQ,EACpB0G,mBAAAA,CAAAA;AAEF,QAAA,IAAI,CAACgG,QAAQ,GAAGnL,GAAGiB,GAAG,CAAC,IAAI,CAACmB,MAAM,CAACzD,UAAU,EAAEqB,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACgB,gBAAgB,EAAE,CAAA,CAAA,CAAA;QAC9E,IAAI,CAAC9J,GAAG,CAACpB,EAAAA,CAAGoL,GAAG,CAACpL,EAAAA,CAAGqL,QAAQ,CAAC,IAAI,CAACC,cAAc,EAAE,IAAItL,EAAG2B,CAAAA,QAAQ,CAAC,IAAI,CAACsJ,cAAc,EAAE,CAAK,CAAA,CAAA,EAAA,WAAA;AACzF,YAAA,IAAI,CAAClI,GAAG,GAAG/C,EAAAA,CAAGyB,GAAG,CACf,IAAI,CAACsB,GAAG,EACRgH,QAAS,CAAA,IAAI,EAAE,IAAI,CAACrE,OAAO,EAAE,IAAI,CAACtD,MAAM,CAAC3D,QAAQ,EAAE,IAAI,CAAC0M,QAAQ,EAAE,IAAI,CAACf,aAAa,CAAA,CAAA;AAExF,SAAA,CAAA;QACA,IAAI,CAAC9I,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACnH,GAAG,EAAE,CAAA,CAAA,CAAA;AACjC,KAAA,CAAA;AAEF,IAAA,OAAOpD,KAAK,CAACO,QAAAA,CAAS,CACpB2B,QACA8I,EAAAA,UAAAA,EACAC,kBACAX,cACAY,EAAAA,eAAAA,CAAAA;AAEJ;AAEA,iBACO,SAAStL,iBACdI,CAAAA,KAA4B,EAC5B4J,IAAiB,EACjB1H,QAAqB,EACrB0J,WAAwB,EACxBC,UAAuB,EACvBC,KAAkB,EAClBC,uBAAoC,EAAA;IAEpC,MAAM1L,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,qBAAA;IACjBF,EAAGG,CAAAA,IAAI,CACLD,QACA,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGI,IAAI,CAAC,WAAA,CAAA;AAAcJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AAAaJ,QAAAA,EAAAA,CAAGI,IAAI,CAAC,KAAA;KAAO,EAC5F,WAAA;AACE,QAAA,IAAI,CAACE,EAAE,CAACqL,CAAC,GAAG3L,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACuK,QAAQ,EAAE,IAAI,CAACY,SAAS,CAAA;QAChD,IAAI,CAACtL,EAAE,CAACkF,GAAG,GAAGxF,GAAGQ,MAAM,CAAC,IAAI,CAACmL,CAAC,CAAA;QAC9B,IAAI,CAACrL,EAAE,CAACoF,OAAO,GAAG1F,GAAGuC,SAAS,CAAC,IAAI,CAACoJ,CAAC,CAAA;AACrC,QAAA,IAAI,CAACrL,EAAE,CAACjC,UAAU,GAAG2B,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACnB,MAAM,CAAC/D,UAAU,EAAE,IAAI,CAAC+D,MAAM,CAACtD,iBAAiB,CAAA;AACjF,QAAA,IAAI,CAACwB,EAAE,CAACuL,EAAE,GAAG7L,EAAAA,CAAG8J,KAAK,CAAC9J,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACiC,GAAG,EAAE,IAAI,CAACnH,UAAU,GAAG,CAAG,EAAA,CAAA,CAAA;AAC5D,QAAA,IAAI,CAACiC,EAAE,CAACwL,MAAM,GAAG9L,GAAG8J,KAAK,CAAC9J,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC4K,EAAE,EAAE,IAAI,CAAG,EAAA,CAAA,CAAA;QACjD,IAAI,CAACvL,EAAE,CAACyL,EAAE,GAAG/L,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC4K,EAAE,EAAE7L,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACuL,GAAG,CAAC9C,CAAC,EAAE,CAAA,CAAA,CAAA;QAChD,IAAI,CAAC5I,EAAE,CAAC2L,KAAK,GAAGjM,GAAGkM,KAAK,CAAC,IAAI,CAACH,EAAE,CAAA;QAChC,IAAI,CAACzL,EAAE,CAAC6L,SAAS,GAAGnM,GAAG2F,GAAG,CAAC3F,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACwK,KAAK,EAAE,CAAIjM,CAAAA,EAAAA,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACuL,GAAG,CAAC9C,CAAC,EAAE,CAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAAC5I,EAAE,CAAC8L,MAAM,GAAGpM,GAAGS,GAAG,CAAC,IAAI,CAACsL,EAAE,EAAE/L,EAAAA,CAAGkM,KAAK,CAAC,IAAI,CAACH,EAAE,CAAA,CAAA;AACjD,QAAA,IAAI,CAACM,CAAC,GAAGrM,GAAGuD,GAAG,CAAC,IAAI,CAACX,EAAE,EAAE5C,EAAAA,CAAG0G,IAAI,CAAC,IAAI,CAACsF,GAAG,CAAC7C,CAAC,EAAE,CAAA,CAAA,CAAA;QAC7C,IAAI,CAAC7I,EAAE,CAACgM,GAAG,GAAGtM,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC4K,CAAC,EAAErM,EAAAA,CAAG0G,IAAI,CAAC1G,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAAC0I,KAAK,EAAE,IAAI,CAACD,GAAG,CAAC9C,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;QACrE,IAAI,CAAC5I,EAAE,CAACiM,GAAG,GAAGvM,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAAC4K,CAAC,EAAErM,EAAAA,CAAG0G,IAAI,CAAC1G,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAAC4I,SAAS,EAAE,IAAI,CAACH,GAAG,CAAC9C,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA;AACzE,QAAA,IAAI,CAAC5I,EAAE,CAACkM,KAAK,GAAGxM,EAAAA,CAAG8C,kBAAkB,CAAC4I,uBAAyB,EAAA,IAAI,CAACY,GAAG,EAAE,CAAA,CAAA;AACzE,QAAA,IAAI,CAAChM,EAAE,CAACmM,KAAK,GAAGzM,EAAAA,CAAG8C,kBAAkB,CAAC4I,uBAAyB,EAAA,IAAI,CAACa,GAAG,EAAE,CAAA,CAAA;AACzE,QAAA,IAAI,CAACjM,EAAE,CAACoM,IAAI,GAAG1M,EAAAA,CAAG2M,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,IAAI,CAACC,KAAK,EAAE,IAAI,CAACL,MAAM,CAAA;AACzD,QAAA,IAAI,CAAC9L,EAAE,CAACsM,YAAY,GAAG5M,GAAGiB,GAAG,CAAC,IAAI,CAACyL,IAAI,CAAC3J,GAAG,EAAE,IAAI,CAAC+I,MAAM,CAAA;;AAExD,QAAA,IAAI,CAACxL,EAAE,CAACuM,eAAe,GAAG7M,EAAGI,CAAAA,IAAI,CAAC,CAAA,EAAG,IAAI,CAACgC,MAAM,CAACtE,WAAW,EAAE,CAAA,CAAA;QAC9D,IAAI,CAACwC,EAAE,CAAClB,aAAa,GAAGY,EAAGa,CAAAA,GAAG,CAC5BzB,aACE,CAAA,IAAI,EACJ,IAAI,CAACgD,MAAM,EACXpC,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACmK,SAAS,EAAE,IAAI,CAACiB,eAAe,GAC3C7M,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACuJ,QAAQ,EAAE,IAAI,CAAC6B,eAAe,CAAA,CAAA,EAE5C7M,GAAGI,IAAI,CAAC,IAAI,CAAG,EAAA,CAAA,GAAI,GAAG,CAAI,GAAA,CAAA,CAAA,CAAA;AAE5B,QAAA,IAAI,CAACkB,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAAC0C,YAAY,EAAE,IAAI,CAACxN,aAAa,CAAA,CAAA;AAC5D,KAAA,CAAA;AAEF,IAAA,OAAOO,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAU0H,EAAAA,IAAAA,EAAMgC,aAAaC,UAAYC,EAAAA,KAAAA,CAAAA;AAClE;AAEA,iBACO,SAASqB,oBAAAA,CACdnN,KAA4B,EAC5BkC,QAAqB,EACrB0H,IAAiB,EACjBwD,UAAuB,EACvB5H,mBAAgC,EAChCC,qBAAkC,EAAA;IAElC,MAAMpF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAMgN,gBAAmB,GAAA,YAAA;IACzBhN,EAAGG,CAAAA,IAAI,CACL6M,gBACA,EAAA;QACE/K,MAAO,CAAA,QAAA,CAAA;AACPjC,QAAAA,EAAAA,CAAGI,IAAI,CAAC,QAAA,CAAA;QACRJ,EAAGI,CAAAA,IAAI,CAAC,SAAA,CAAA,CAAW6M,KAAK,EAAA;AACxBjN,QAAAA,EAAAA,CAAGK,KAAK,CAAC,QAAA,CAAA;QACTL,EAAGK,CAAAA,KAAK,CAAC,gBAAA,CAAA,CAAkB4M,KAAK;KACjC,EACD,WAAA;QACE,IAAI,CAAC3M,EAAE,CAAC4M,QAAQ,GAAGlN,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACG,MAAM,CAAA,CAAA;QACvE,IAAI,CAACvF,EAAE,CAAC6M,WAAW,GAAGnN,GAAGQ,MAAM,CAAC,IAAI,CAAC0M,QAAQ,CAAA;AAC7C,QAAA,IAAI,CAAC5M,EAAE,CAAC8M,WAAW,GAAGpN,GAAG2B,QAAQ,CAAC,IAAI,CAACwL,WAAW,EAAE,IAAI,CAAC/K,MAAM,CAACtE,WAAW,CAAA;AAC3E,QAAA,IAAI,CAACwC,EAAE,CAAC+M,aAAa,GAAGrN,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACyM,QAAQ,EAAE,IAAI,CAACzH,MAAM,CAAA;QACzD,IAAI,CAACnF,EAAE,CAACgN,gBAAgB,GAAGtN,GAAGQ,MAAM,CAAC,IAAI,CAAC6M,aAAa,CAAA;AACvD,QAAA,IAAI,CAAC/M,EAAE,CAACiN,gBAAgB,GAAGvN,EAAGuD,CAAAA,GAAG,CAAC,IAAI,CAAC8J,aAAa,EAAE,IAAI,CAACC,gBAAgB,CAAA;QAC3E,IAAI,CAAChN,EAAE,CAACkN,WAAW,GAAG9N,mBACpB,IAAI,EACJM,EAAGI,CAAAA,IAAI,CAAC,CAAA,CAAA,EACR,IAAI,CAACgC,MAAM,CAACtE,WAAW,EACvB,IAAI,CAAC2H,MAAM,EACX,IAAI,CAAC8H,gBAAgB,CAAA;QAEvB,IAAI,CAACjN,EAAE,CAACmN,YAAY,GAAGzN,GAAGoL,GAAG,CAC3BpL,EAAGqB,CAAAA,WAAW,CAAC,IAAI,CAACmM,WAAW,EAAE,CACjCxN,CAAAA,EAAAA,EAAAA,CAAGqB,WAAW,CAAC,IAAI,CAACiM,gBAAgB,EAAE,IAAI,CAACE,WAAW,CAAA,CAAA;AAExD,QAAA,IAAI,CAAClN,EAAE,CAACoN,OAAO,GAAG,IAAI,CAACjI,MAAM;AAC7B,QAAA,IAAI,CAACrE,GAAG,CAACpB,EAAAA,CAAG2N,EAAE,CAAC,IAAI,CAACP,WAAW,EAAE,IAAI,CAACK,YAAY,CAAG,EAAA,WAAA;AACnD,YAAA,IAAI,CAACC,OAAO,GAAG1N,GAAGyB,GAAG,CAAC,IAAI,CAACiM,OAAO,EAAE1N,EAAGiB,CAAAA,GAAG,CAACjB,EAAGuC,CAAAA,SAAS,CAAC,IAAI,CAACmL,OAAO,CAAG,EAAA,IAAA,CAAA,CAAA;AACvE,YAAA,IAAI,CAACtM,GAAG,CAAC,IAAI,CAACqM,YAAY,EAAE,WAAA;gBAC1B,IAAI,CAACnN,EAAE,CAACsN,iBAAiB,GAAG5N,GAAGuC,SAAS,CAAC,IAAI,CAAC2K,QAAQ,CAAA;AACtD,gBAAA,IAAI,CAAC5M,EAAE,CAACuN,eAAe,GAAG7N,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACmL,OAAO,CAAA,EAAG,IAAI,CAACtL,MAAM,CAACtE,WAAW,CAAA;AACpF,gBAAA,IAAI,CAACwC,EAAE,CAACwN,eAAe,GAAG9N,GAAGiB,GAAG,CAAC,IAAI,CAAC2M,iBAAiB,EAAE,IAAI,CAACxL,MAAM,CAACtE,WAAW,CAAA;AAChF,gBAAA,IAAI,CAACwC,EAAE,CAACyN,qBAAqB,GAAG/N,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACiN,OAAO,EAAE,IAAI,CAACI,eAAe,CAAA;gBACzE,IAAI,CAAC1M,GAAG,CACNpB,EAAAA,CAAG2B,QAAQ,CAAC3B,EAAAA,CAAGa,GAAG,CAACb,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACwL,qBAAqB,CAAA,EAAG,IAAI,CAACH,iBAAiB,GAAG,MACtF,CAAA,EAAA,WAAA;AACE,oBAAA,IAAI,CAACtN,EAAE,CAAC0N,WAAW,GAAGhO,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACoM,eAAe,EAAE,IAAI,CAACC,eAAe,CAAG,EAAA,GAAA,CAAA;AACjF,oBAAA,IAAI,CAACxN,EAAE,CAAC2N,mBAAmB,GAAGjO,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGuC,SAAS,CAAC,IAAI,CAACyL,WAAW,CAAA,EAAG,IAAI,CAAC5L,MAAM,CAACtE,WAAW,CAAA;oBAC5F,IAAI,CAACoP,QAAQ,GAAGlN,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACiM,OAAO,EAAE1N,EAAAA,CAAGiB,GAAG,CAACjB,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACwN,mBAAmB,EAAE,IAAI,CAACP,OAAO,CAAG,EAAA,CAAA,CAAA,CAAA;AAC9F,iBAAA,CAAA;AAEJ,aAAA,CAAA,CAAGQ,KAAK,CAAC,WAAA;AACP,gBAAA,IAAI,CAAChB,QAAQ,GAAGlN,EAAGiB,CAAAA,GAAG,CAACjB,EAAGuC,CAAAA,SAAS,CAAC,IAAI,CAAC2K,QAAQ,CAAA,EAAG,IAAI,CAAC9K,MAAM,CAACtE,WAAW,CAAA;AAC7E,aAAA,CAAA;AACA,YAAA,IAAI,CAACwC,EAAE,CAACqL,CAAC,GAAG3L,EAAGS,CAAAA,GAAG,CAAC,IAAI,CAACyM,QAAQ,EAAE,IAAI,CAACQ,OAAO,CAAA;YAC9C,IAAI,CAACS,cAAc,GAAGnO,EAAAA,CAAGQ,MAAM,CAAC,IAAI,CAACmL,CAAC,CAAA;AACtC,YAAA,IAAI,CAACjG,OAAO,GAAG1F,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAACoI,CAAC,EAAE,IAAI,CAACwC,cAAc,CAAA;AACnD,SAAA,CAAA;AACA,QAAA,IAAI,CAAC7M,OAAO,CAAC,IAAI,CAACoM,OAAO,CAAA;AAC3B,KAAA,CAAA;AAEF,IAAA,MAAMxN,QAAW,GAAA,wBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGI,IAAI,CAAC,KAAA,CAAA;AAAQJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA;KAAc,EAAE,WAAA;QAC3F,IAAI,CAACC,EAAE,CAAC8N,GAAG,GAAGpO,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACwC,EAAE,EAAE,CAAA,CAAA;QAC/B,IAAI,CAACwL,GAAG,CAACjF,CAAC,GAAGnJ,GAAGiB,GAAG,CAAC,IAAI,CAACmN,GAAG,CAACjF,CAAC,EAAE,IAAI,CAAC6C,GAAG,CAAC7C,CAAC,EAAE,IAAI,CAAC6C,GAAG,CAAC9C,CAAC,CAAA;AACtD,QAAA,IAAI,CAACkF,GAAG,CAAClF,CAAC,GAAGlJ,EAAAA,CAAGuD,GAAG,CAACvD,EAAGkM,CAAAA,KAAK,CAAClM,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAAC6K,GAAG,CAACjF,CAAC,EAAE,IAAI,CAAC6C,GAAG,CAAC9C,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC8C,GAAG,CAAC7C,CAAC,CAAA;QACxE,IAAI,CAACiF,GAAG,CAACjF,CAAC,GAAGnJ,EAAGuD,CAAAA,GAAG,CAACvD,EAAAA,CAAGqO,GAAG,CAAC,IAAI,CAACD,GAAG,CAACjF,CAAC,EAAE,IAAI,CAAC6C,GAAG,CAAC9C,CAAC,CAAA,EAAG,IAAI,CAAC8C,GAAG,CAAC7C,CAAC,CAAA;AAC9D,QAAA,IAAI,CAACiF,GAAG,GAAGpO,GAAGyB,GAAG,CAAC,IAAI,CAAC2M,GAAG,EAAEpO,EAAGuD,CAAAA,GAAG,CAACvD,EAAGI,CAAAA,IAAI,CAAC,GAAM,CAAA,EAAA,IAAI,CAAC4L,GAAG,CAAA,CAAA;QACzD,IAAI,CAAC1L,EAAE,CAAC2L,KAAK,GAAG,IAAI,CAACmC,GAAG,CAAClF,CAAC,CAAA;AAC1B,QAAA,IAAI,CAAC5I,EAAE,CAACoF,OAAO,GAAG1F,EAAAA,CAAGuC,SAAS,CAC5BvC,EAAGiB,CAAAA,GAAG,CACJ,IAAI,CAACmB,MAAM,CAAC9D,iBAAiB,EAC7B0B,EAAAA,CAAGkK,IAAI,CACLlK,EAAGS,CAAAA,GAAG,CAACT,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACmN,GAAG,CAACjF,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA,EAC9BnJ,EAAGuD,CAAAA,GAAG,CAACvD,EAAAA,CAAGS,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAACmN,GAAG,CAAC/E,CAAC,EAAE,CAAA,CAAA,EAAI,CAAI,CAAA,EAAA,IAAI,CAACjH,MAAM,CAACvD,YAAY,CACjE,EAAA,EACA,EAAA,CAAA,CAAA,CAAA,CAEF0I,GAAG,CAAA;AAEP,QAAA,IAAI,CAACjH,EAAE,CAACmF,MAAM,GAAGzF,EAAAA,CAAGI,IAAI,CACtB,CACAJ,EAAAA,EAAAA,CAAGyB,GAAG,CAACzB,GAAGiB,GAAG,CAAC,IAAI,CAACqN,UAAU,EAAE,IAAI,CAAClM,MAAM,CAACtD,iBAAiB,CAAA,EAAG,IAAI,CAACsD,MAAM,CAACtE,WAAW,CACtF,EAAA,CAAA,CAAA;AAEF,QAAA,IAAI,CAACwC,EAAE,CAACuF,MAAM,GAAG7F,GAAGiB,GAAG,CAAC,IAAI,CAACgL,KAAK,EAAE,IAAI,CAAC7J,MAAM,CAAC/D,UAAU,CAAA;QAC1D,IAAI,CAACiC,EAAE,CAAC4M,QAAQ,GAAGlN,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACG,MAAM,CAAA,CAAA;AACvE,QAAA,IAAI,CAACzE,GAAG,CAACpB,GAAG2B,QAAQ,CAAC3B,GAAGQ,MAAM,CAAC,IAAI,CAAC0M,QAAQ,CAAG,EAAA,IAAI,CAAC9K,MAAM,CAACtE,WAAW,CAAG,EAAA,WAAA;AACvE,YAAA,IAAI,CAACoP,QAAQ,GAAGlN,EAAGiB,CAAAA,GAAG,CAACjB,EAAGuC,CAAAA,SAAS,CAAC,IAAI,CAAC2K,QAAQ,CAAA,EAAG,IAAI,CAAC9K,MAAM,CAACtE,WAAW,CAAA;AAC3E,YAAA,IAAI,CAAC+H,MAAM,GAAG7F,EAAAA,CAAGQ,MAAM,CAACR,EAAAA,CAAGS,GAAG,CAAC,IAAI,CAACgF,MAAM,EAAE,IAAI,CAACyH,QAAQ,CAAA,CAAA;AAC3D,SAAA,CAAA;QACA,IAAI,CAAC5M,EAAE,CAACiF,KAAK,GAAGR,WACd,IAAI,EACJ,IAAI,CAAC3C,MAAM,EACX,IAAI,CAACqD,MAAM,EACX,IAAI,CAACC,OAAO,EACZ,IAAI,CAACG,MAAM,EACXV,mBACAC,EAAAA,qBAAAA,CAAAA;AAEF,QAAA,IAAI,CAAC9E,EAAE,CAACiB,EAAE,GAAGK,kBAAAA,CAAmB,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAACqD,MAAM,EAAE,IAAI,CAACC,OAAO,EAAEP,mBAAAA,CAAAA;AAC9E,QAAA,IAAI,CAAC7E,EAAE,CAACkB,EAAE,GAAGI,kBAAAA,CAAmB,IAAI,EAAE,IAAI,CAACQ,MAAM,EAAE,IAAI,CAAC8K,QAAQ,EAAE,IAAI,CAACxH,OAAO,EAAEP,mBAAAA,CAAAA;AAChF,QAAA,IAAI,CAAC7E,EAAE,CAAC+L,CAAC,GAAGrM,EAAG8J,CAAAA,KAAK,CAAC9J,EAAAA,CAAGuD,GAAG,CAAC,IAAI,CAAChC,EAAE,EAAEvB,EAAAA,CAAG4E,GAAG,CAAC,IAAI,CAACpD,EAAE,EAAExB,GAAGI,IAAI,CAAC,MAAWJ,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAGI,IAAI,CAAC,CAAIJ,CAAAA,EAAAA,EAAAA,CAAGI,IAAI,CAAC,CAAA,CAAA,CAAA;QAC5F,IAAI,CAACkB,OAAO,CAACtB,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAAC3E,KAAK,EAAEvF,EAAGa,CAAAA,GAAG,CAAC,IAAI,CAACwL,CAAC,EAAErM,EAAGI,CAAAA,IAAI,CAAC,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5E,KAAA,CAAA;AACA,IAAA,OAAOT,KAAK,CAACO,QAAAA,CAAS,CAAC2B,QAAAA,EAAU0H,MAAMwD,UAAYnP,EAAAA,YAAAA,CAAAA;AACrD;AAEA,iBACO,SAAS2Q,UAAAA,CACd5O,KAA4B,EAC5BkC,QAAqB,EACrB0H,IAAiB,EACjBpE,mBAAgC,EAChCC,qBAAkC,EAAA;IAElC,MAAMpF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,cAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA,CAAA;AAAO1G,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA;KAAc,EAAE,WAAA;QAC3E,IAAI,CAACC,EAAE,CAACoF,OAAO,GAAG4D,YAAY,IAAI,EAAE,IAAI,CAAC1G,EAAE,CAAA;QAC3C,IAAI,CAACtC,EAAE,CAACkD,CAAC,GAAGxD,GAAGyB,GAAG,CAAC,IAAI,CAACW,MAAM,CAACtE,WAAW,EAAEkC,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACqN,UAAU,EAAE,IAAI,CAAClM,MAAM,CAACtD,iBAAiB,CAAA,CAAA;AACjG,QAAA,IAAI,CAACwB,EAAE,CAACmF,MAAM,GAAGzF,EAAAA,CAAGI,IAAI,CAAC,CAAG,EAAA,IAAI,CAACoD,CAAC,EAAE,CAAA,CAAA;QACpC,IAAI,CAAClD,EAAE,CAACyC,GAAG,GAAGgC,WACZ,IAAI,EACJ,IAAI,CAAC3C,MAAM,EACX,IAAI,CAACqD,MAAM,EACX,IAAI,CAACC,OAAO,EACZ1F,EAAAA,CAAGK,KAAK,CAAC,EAAC,CAAA,EACV8E,mBACAC,EAAAA,qBAAAA,CAAAA;QAEF,IAAI,CAAC9D,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACnH,GAAG,EAAE,CAAA,CAAA,CAAA;AACjC,KAAA,CAAA;AACA,IAAA,OAAOpD,KAAK,CAACO,QAAS,CAAA,CAAC2B,UAAU0H,IAAM3L,EAAAA,YAAAA,CAAAA;AACzC;AAEA,iBACO,SAAS4Q,kBACd7O,CAAAA,KAA4B,EAC5BkC,QAAqB,EACrB0H,IAAiB,EACjBpE,mBAAgC,EAAA;IAEhC,MAAMnF,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,sBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;AACnD,QAAA,IAAI,CAACpG,EAAE,CAACmO,IAAI,GAAGzO,GAAGS,GAAG,CAACT,EAAGiB,CAAAA,GAAG,CAAC,IAAI,CAAC2B,EAAE,CAACuG,CAAC,EAAE,CAAI,CAAA,EAAA,CAAA,CAAA;QAC5C,IAAI,CAAC7I,EAAE,CAACqC,CAAC,GAAG3C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC2B,EAAE,CAACyG,CAAC,EAAE,IAAI,CAACjH,MAAM,CAACrE,gBAAgB,CAAA,EAAG,IAAI,CAACqE,MAAM,CAACtE,WAAW,CAAA;AAC3F,QAAA,IAAI,CAACwC,EAAE,CAACmC,QAAQ,GAAG,IAAI,CAACgM,IAAI;QAC5B,IAAI,CAACnO,EAAE,CAACoO,QAAQ,GAAG1O,EAAGgB,CAAAA,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAAC,CAAGT,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACwB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAA,CAAA,CAAA;AACxE,QAAA,IAAI,CAACnC,EAAE,CAAC7B,QAAQ,GAAGuB,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAACsO,QAAQ,EAAE,IAAI,CAACjM,QAAQ,EAAE,CAAA,CAAA;AACzD,QAAA,IAAI,CAACnC,EAAE,CAACkC,CAAC,GAAGxC,EAAAA,CAAGI,IAAI,CAAC,CAAG,EAAA,IAAI,CAACuC,CAAC,EAAE,CAAA,CAAA;AAC/B,QAAA,IAAI,CAACrC,EAAE,CAACyC,GAAG,GAAG6D,uBAAAA,CAAwB,IAAI,EAAE,IAAI,CAACxE,MAAM,EAAE,IAAI,CAAC3D,QAAQ,EAAE,IAAI,CAAC+D,CAAC,EAAE2C,mBAAAA,CAAAA;QAChF,IAAI,CAAC7D,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC,IAAI,CAACnH,GAAG,EAAE,CAAA,CAAA,CAAA;AACjC,KAAA,CAAA;AACA,IAAA,OAAOpD,KAAK,CAACO,QAAS,CAAA,CAAC2B,QAAU0H,EAAAA,IAAAA,CAAAA;AACnC;AAEA,iBACO,SAASoF,gBAAAA,CAAiBhP,KAA4B,EAAEkC,QAAqB,EAAE0H,IAAiB,EAAA;IACrG,MAAMvJ,EAAAA,GAAKL,MAAMM,QAAQ;AACzB,IAAA,MAAMgC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,IAAA,MAAME,QAAW,GAAA,kBAAA;IACjBF,EAAGG,CAAAA,IAAI,CAACD,QAAU,EAAA;QAAC+B,MAAO,CAAA,QAAA,CAAA;AAAWjC,QAAAA,EAAAA,CAAG0G,IAAI,CAAC,IAAA;KAAM,EAAE,WAAA;QACnD,IAAI,CAACpG,EAAE,CAACiF,KAAK,GAAGvF,GAAGkK,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;QACjC,IAAI,CAAC5J,EAAE,CAAC6B,YAAY,GAAG,IAAI,CAACC,MAAM,CAACtE,WAAW;AAC9C,QAAA,IAAI,CAACwC,EAAE,CAAC+B,SAAS,GAAGrC,GAAGyB,GAAG,CAAC,IAAI,CAACU,YAAY,EAAE,IAAI,CAACC,MAAM,CAACrE,gBAAgB,CAAA;AAC1E,QAAA,IAAI,CAACuC,EAAE,CAACsO,SAAS,GAAGhF,oBAAAA,CAAqB,IAAI,EAAE,IAAI,CAAChH,EAAE,EAAE,IAAI,CAACT,YAAY,EAAE,IAAI,CAACE,SAAS,CAAA;QACzF,IAAI,CAAC/B,EAAE,CAACuO,SAAS,GAAG,IAAI,CAACD,SAAS,CAACzF,CAAC;QACpC,IAAI,CAAC7I,EAAE,CAACqC,CAAC,GAAG,IAAI,CAACiM,SAAS,CAACvF,CAAC;QAC5B,IAAI,CAAC/I,EAAE,CAACwO,SAAS,GAAG9O,EAAGgB,CAAAA,IAAI,CAAChB,EAAGS,CAAAA,GAAG,CAAC,CAAGT,EAAAA,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAAC4N,SAAS,EAAE,IAAI,CAACA,SAAS,CAAA,CAAA,CAAA;AAC3E,QAAA,IAAI,CAACvO,EAAE,CAACoF,OAAO,GAAG1F,EAAGI,CAAAA,IAAI,CAAC,IAAI,CAAC0O,SAAS,EAAE,IAAI,CAACD,SAAS,EAAE,CAAA,CAAA;AAC1D,QAAA,IAAI,CAACvO,EAAE,CAACmF,MAAM,GAAGzF,EAAAA,CAAGI,IAAI,CAAC,CAAG,EAAA,IAAI,CAACuC,CAAC,EAAE,CAAA,CAAA;QACpC,IAAI,CAACrC,EAAE,CAACkF,GAAG,GAAG9F,kBAAmB,CAAA,IAAI,EAAEM,EAAAA,CAAGI,IAAI,CAAC,IAAI,IAAI,CAACiC,SAAS,EAAE,IAAI,CAACoD,MAAM,EAAE,IAAI,CAACC,OAAO,CAAA;QAC5F,IAAI,CAACpF,EAAE,CAACyO,QAAQ,GAAG/O,EAAGyB,CAAAA,GAAG,CAAC,IAAI,CAACgE,MAAM,EAAEzF,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACyE,OAAO,EAAE,IAAI,CAACF,GAAG,CAAA,CAAA;QACpE,IAAI,CAAClE,OAAO,CAACtB,EAAAA,CAAGkK,IAAI,CAAC9K,aAAAA,CAAc,IAAI,EAAE,IAAI,CAACgD,MAAM,EAAE,IAAI,CAACqD,MAAM,EAAE,IAAI,CAACsJ,QAAQ,CAAG,EAAA,CAAA,CAAA,CAAA;AACrF,KAAA,CAAA;AACA,IAAA,OAAOpP,KAAK,CAACO,QAAS,CAAA,CAAC2B,QAAU0H,EAAAA,IAAAA,CAAAA;AACnC;AAEA,iBACO,SAASyF,qBAAAA,GAAAA;IACd,OAAO,CAAC,CAACC,gBAAAA,IAAoB,CAAC,CAACC,sBAAsB,CAAC,CAACC,UAAc,IAAA,CAAC,CAACC,KAAAA;AACzE;AAEA,iBACO,SAASC,oBAAAA,CAAqBjN,MAAkC,EAAA;AACrE,IAAA,MAAMkN,cAAcrQ,WAAYmD,CAAAA,MAAAA,CAAAA;AAChC,IAAA,IAAIkN,WAAYlQ,CAAAA,aAAa,IAAI,CAAC6P,gBAAkB,EAAA;QAClDM,sBAAuBvQ,CAAAA,uBAAAA,CAAAA;AACzB;AACA,IAAA,IAAIsQ,WAAYjQ,CAAAA,eAAe,IAAI,CAAC6P,kBAAoB,EAAA;QACtDM,wBAAyBxQ,CAAAA,uBAAAA,CAAAA;AAC3B;AACA,IAAA,IAAIsQ,WAAYhQ,CAAAA,OAAO,IAAI,CAAC6P,UAAY,EAAA;QACtCM,gBAAiBzQ,CAAAA,uBAAAA,CAAAA;AACnB;AACA,IAAA,IAAIsQ,WAAY/P,CAAAA,iBAAiB,IAAI,CAAC6P,KAAO,EAAA;QAC3CM,WAAY1Q,CAAAA,uBAAAA,CAAAA;AACd;AACF;AAEA,gBACA,IAAI2Q,uBAAAA;AACJ,IAAIC,yBAAAA;AACJ,IAAIC,iBAAAA;AACJ,IAAIC,YAAAA;AACJ,IAAIC,yBAAAA;AACJ,IAAId,gBAAAA;AACJ,IAAIe,wBAAAA;AAEJ,IAAIC,2BAAAA;AACJ,IAAIf,kBAAAA;AACJ,IAAIgB,yBAAAA;AACJ,IAAIC,0BAAAA;AAEJ,IAAIC,mBAAAA;AACJ,IAAIjB,UAAAA;AACJ,IAAIkB,kBAAAA;AAEJ,IAAIC,cAAAA;AACJ,IAAIlB,KAAAA;AACJ,IAAImB,aAAAA;AAEJ,iBACO,SAASC,mBAAAA,GAAAA;IACd,OAAOvB,gBAAAA;AACT;AAEA,iBACO,SAASwB,qBAAAA,GAAAA;IACd,OAAOvB,kBAAAA;AACT;AAEA,iBACO,SAASwB,aAAAA,GAAAA;IACd,OAAOvB,UAAAA;AACT;AAEA,iBACO,SAASwB,uBAAAA,GAAAA;IACd,OAAOvB,KAAAA;AACT;AAEA,iBACO,SAASlN,yBAAAA,CAA0BlC,EAAkB,EAAA;IAC1D,OAAOA,EAAAA,CAAG4Q,YAAY,CAAC;AACrB5Q,QAAAA,EAAAA,CAAG6Q,IAAI,CAAC,mBAAA,CAAA;AACR7Q,QAAAA,EAAAA,CAAGkK,IAAI,CAAC,YAAA,CAAA;AACRlK,QAAAA,EAAAA,CAAGI,IAAI,CAAC,UAAA,CAAA;AACRJ,QAAAA,EAAAA,CAAGK,KAAK,CAAC,cAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,aAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,kBAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,0BAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,qBAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,aAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,aAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,YAAA,CAAA;AACTL,QAAAA,EAAAA,CAAGK,KAAK,CAAC,mBAAA;AACV,KAAA,CAAA;AACH;AAEA,iBACO,SAASyQ,6BAAAA,CAA8BC,MAAsB,EAAA;IAClE,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOlR,EAAE,EAAA;AACP,YAAA,IAAI,CAACmR,IAAI,GAAGnR,GAAGkG,GAAG,EAAA,CAAGkL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGtR,EAAG0G,CAAAA,IAAI,EAAG6K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC5O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAG3R,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACmH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC5O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACoQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM5R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAGqL,CAAAA,QAAQ,CAAC,IAAI,CAAC8F,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACtI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACoO,SAAS,CAACC,QAAQ,CAACtI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAwI,QAAAA,QAAAA,CAAAA,CAAS7R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASmP,OAAO,CAAC,CAAA,CAAA;AAC/B,YAAA,IAAI,CAACI,QAAQ,CAACM,QAAQ,GAAG9R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACD,QAAQ,CAACM,QAAQ,GAAGnD,iBAAiB,IAAI,EAAE,IAAI,CAACvM,MAAM,EAAE,IAAI,CAACiP,OAAO,CAACzO,EAAE,CAAA;AAC9E,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAoO,IAAAA,OAAAA,CAAQe,IAAI,GAAG,0BAAA;IACf,OAAOf,OAAAA;AACT;AAEA,iBACO,SAASzB,sBAAAA,CAAuBnN,MAAwB,EAAA;AAC7D,IAAA,MAAM2O,MAASiB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIrC,4BAA4BsC,SAAW,EAAA;QACzC,IAAI;AACFtC,YAAAA,uBAAAA,GAA0BmB,6BAA8BC,CAAAA,MAAAA,CAAAA;AACxDhB,YAAAA,yBAAAA,GAA4BgB,OAAOmB,eAAe,CAACvC,uBAAwBwC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAC9FlD,YAAAA,gBAAAA,GAAmB8B,MAAOqB,CAAAA,eAAe,CAAC,SAAA,EAAW,KAAK,EAAI,EAAA;gBAC5DC,UAAY,EAAA;AACd,aAAA,CAAA;AACApD,YAAAA,gBAAAA,CAAiB8C,IAAI,GAAG,uBAAA;YACxB/B,wBAA2Be,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACrD,gBAAAA;aAAiB,EAAE,IAAA,CAAA;AAC1E,SAAA,CAAE,OAAOsD,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;AAChB;AACF;AACA,IAAA,IAAI5C,uBAAyB,EAAA;AAC3BI,QAAAA,yBAAAA,CAA0B2C,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QAC1E5C,yBAA0B2C,CAAAA,QAAQ,CAAC,QAAUtQ,EAAAA,MAAAA,CAAAA;AAC7C2O,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAAC7C,wBAAAA,CAAAA;AACtBe,QAAAA,MAAAA,CAAO+B,UAAU,CAACnD,uBAAAA,CAAAA;QAClBoB,MAAOgC,CAAAA,YAAY,CAAC,CAAGhD,EAAAA,yBAAAA,CAAAA;AACvBiD,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;AAEA,iBACO,SAASC,+BAAAA,CAAgCnC,MAAsB,EAAA;IACpE,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOlR,EAAE,EAAA;AACP,YAAA,IAAI,CAACmR,IAAI,GAAGnR,GAAGkG,GAAG,EAAA,CAAGkL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGtR,EAAG0G,CAAAA,IAAI,EAAG6K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC5O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAG3R,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACmH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC5O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACoQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM5R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAGqL,CAAAA,QAAQ,CAAC,IAAI,CAAC8F,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACtI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACoO,SAAS,CAACC,QAAQ,CAACtI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAwI,QAAAA,QAAAA,CAAAA,CAAS7R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASmP,OAAO,CAAC,CAAA,CAAA;YAC/B,IAAI,CAAChK,oBAAoB,GAAGpH,EAAAA,CAAGkK,IAAI,CAAC,EAAA,CAAG,EAAGiJ,CAAAA,aAAa,CAAC,CAAA,CAAA;AACxD,YAAA,IAAI,CAACxE,gBAAgB,GAAG3O,GAAGoT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC3C,YAAA,IAAI,CAACI,QAAQ,CAACM,QAAQ,GAAG9R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;gBACN,IAAI,CAACD,QAAQ,CAACM,QAAQ,GAAGtD,kBACvB,CAAA,IAAI,EACJ,IAAI,CAACpM,MAAM,EACX,IAAI,CAACiP,OAAO,CAACzO,EAAE,EACf,IAAI,CAAC+L,gBAAgB,CAAA;AAEzB,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAqC,IAAAA,OAAAA,CAAQe,IAAI,GAAG,4BAAA;IACf,OAAOf,OAAAA;AACT;AAEA,iBACO,SAASxB,wBAAAA,CAAyBpN,MAAwB,EAAA;AAC/D,IAAA,MAAM2O,MAASiB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIpC,8BAA8BqC,SAAW,EAAA;QAC3C,IAAI;AACFrC,YAAAA,yBAAAA,GAA4BsD,+BAAgCnC,CAAAA,MAAAA,CAAAA;AAC5Dd,YAAAA,2BAAAA,GAA8Bc,OAAOmB,eAAe,CAACtC,yBAA0BuC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAClGjD,YAAAA,kBAAAA,GAAqB6B,MAAOqB,CAAAA,eAAe,CAAC,SAAA,EAAW,IAAI,EAAI,EAAA;gBAC7DC,UAAY,EAAA;AACd,aAAA,CAAA;AACAnD,YAAAA,kBAAAA,CAAmB6C,IAAI,GAAG,yBAAA;YAC1B5B,0BAA6BY,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACpD,gBAAAA;aAAmB,EAAE,IAAA,CAAA;YAC5EgB,yBAA4BD,GAAAA,2BAAAA,CAA4BoD,SAAS,CAAC,sBAAwB,EAAA,KAAA,CAAA;YAC1F,MAAMC,aAAAA,GAAgB,IAAIC,YAAAA,CAAa,EAAK,GAAA,CAAA,CAAA;AAC5C,YAAA,IAAK,IAAIjM,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAIA,CAAK,EAAA,CAAA;gBAC3BgM,aAAa,CAAChM,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGF,oBAAoB,CAACE,CAAE,CAAA,CAAC6B,CAAC;gBACpDmK,aAAa,CAAChM,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGF,oBAAoB,CAACE,CAAE,CAAA,CAAC+B,CAAC;gBACpDiK,aAAa,CAAChM,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGF,oBAAoB,CAACE,CAAE,CAAA,CAAC4B,CAAC;AACpDoK,gBAAAA,aAAa,CAAChM,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AAC7B;YACA4I,yBAA0BsD,CAAAA,aAAa,CAAC,CAAGF,EAAAA,aAAAA,CAAAA;AAC7C,SAAA,CAAE,OAAOf,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;AAChB;AACF;AACA,IAAA,IAAI3C,yBAA2B,EAAA;AAC7BK,QAAAA,2BAAAA,CAA4ByC,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QAC5E1C,2BAA4ByC,CAAAA,QAAQ,CAAC,QAAUtQ,EAAAA,MAAAA,CAAAA;;AAE/C6N,QAAAA,2BAAAA,CAA4BwD,UAAU,CACpC,kBACAxE,EAAAA,gBAAAA,EACAyE,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEf3C,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAAC1C,0BAAAA,CAAAA;AACtBY,QAAAA,MAAAA,CAAO+B,UAAU,CAAClD,yBAAAA,CAAAA;QAClBmB,MAAOgC,CAAAA,YAAY,CAAC,CAAG9C,EAAAA,2BAAAA,CAAAA;AACvB+C,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;AAEA,iBACO,SAASU,uBAAAA,CAAwB5C,MAAsB,EAAA;IAC5D,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOlR,EAAE,EAAA;AACP,YAAA,IAAI,CAACmR,IAAI,GAAGnR,GAAGkG,GAAG,EAAA,CAAGkL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGtR,EAAG0G,CAAAA,IAAI,EAAG6K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC5O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAG3R,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACmH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC5O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACoQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM5R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAGqL,CAAAA,QAAQ,CAAC,IAAI,CAAC8F,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACtI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACoO,SAAS,CAACC,QAAQ,CAACtI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAwI,QAAAA,QAAAA,CAAAA,CAAS7R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASmP,OAAO,CAAC,CAAA,CAAA;AAC/B,YAAA,IAAI,CAACzC,gBAAgB,GAAG3O,GAAGoT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC3C,YAAA,IAAI,CAAC5C,kBAAkB,GAAGxO,GAAGoT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC7C,YAAA,IAAI,CAACI,QAAQ,CAACM,QAAQ,GAAG9R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;gBACN,IAAI,CAACD,QAAQ,CAACM,QAAQ,GAAGvD,WACvB,IAAI,EACJ,IAAI,CAACnM,MAAM,EACX,IAAI,CAACiP,OAAO,CAACzO,EAAE,EACf,IAAI,CAAC+L,gBAAgB,EACrB,IAAI,CAACH,kBAAkB,CAAA;AAE3B,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAwC,IAAAA,OAAAA,CAAQe,IAAI,GAAG,oBAAA;IACf,OAAOf,OAAAA;AACT;AAEA,iBACO,SAASvB,gBAAAA,CAAiBrN,MAAwB,EAAA;AACvD,IAAA,MAAM2O,MAASiB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAInC,sBAAsBoC,SAAW,EAAA;QACnC,IAAI;AACFpC,YAAAA,iBAAAA,GAAoB8D,uBAAwB5C,CAAAA,MAAAA,CAAAA;AAC5CX,YAAAA,mBAAAA,GAAsBW,OAAOmB,eAAe,CAACrC,iBAAkBsC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAClFhD,YAAAA,UAAAA,GAAa4B,MAAOqB,CAAAA,eAAe,CAAC,SAAA,EAAW,KAAK,GAAK,EAAA;gBACvDC,UAAY,EAAA;AACd,aAAA,CAAA;AACAlD,YAAAA,UAAAA,CAAW4C,IAAI,GAAG,iBAAA;YAClB1B,kBAAqBU,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAACnD,gBAAAA;aAAW,EAAE,IAAA,CAAA;AAC9D,SAAA,CAAE,OAAOoD,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;AAChB;AACF;AACA,IAAA,IAAI1C,iBAAmB,EAAA;AACrBO,QAAAA,mBAAAA,CAAoBsC,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QACpEvC,mBAAoBsC,CAAAA,QAAQ,CAAC,QAAUtQ,EAAAA,MAAAA,CAAAA;AACvCgO,QAAAA,mBAAAA,CAAoBqD,UAAU,CAAC,kBAAoBxE,EAAAA,gBAAAA,EAAkByE,YAAa,CAAA,oBAAA,CAAA,CAAA;AAClFtD,QAAAA,mBAAAA,CAAoBqD,UAAU,CAC5B,oBACAvE,EAAAA,kBAAAA,EACAwE,YAAa,CAAA,oBAAA,CAAA,CAAA;AAEf3C,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAACxC,kBAAAA,CAAAA;AACtBU,QAAAA,MAAAA,CAAO+B,UAAU,CAACjD,iBAAAA,CAAAA;QAClBkB,MAAOgC,CAAAA,YAAY,CAAC,CAAG3C,EAAAA,mBAAAA,CAAAA;AACvB4C,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;AAEA,iBACO,SAASW,kBAAAA,CAAmB7C,MAAsB,EAAA;IACvD,MAAMC,OAAAA,GAAUD,MAAOE,CAAAA,kBAAkB,CAAC;AACxCC,QAAAA,MAAAA,CAAAA,CAAOlR,EAAE,EAAA;AACP,YAAA,IAAI,CAACmR,IAAI,GAAGnR,GAAGkG,GAAG,EAAA,CAAGkL,OAAO,CAAC,CAAA,CAAA;YAC7B,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGtR,EAAG0G,CAAAA,IAAI,EAAG6K,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAC5O,EAAE,GAAG5C,GAAG0G,IAAI,EAAA;AAC1B1G,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAG3R,EAAGkK,CAAAA,IAAI,CAAC,IAAI,CAACmH,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;gBACvD,IAAI,CAACE,QAAQ,CAAC5O,EAAE,GAAG5C,EAAGyB,CAAAA,GAAG,CAACzB,EAAAA,CAAGiB,GAAG,CAAC,IAAI,CAACoQ,OAAO,CAACC,GAAG,CAACM,EAAE,EAAE,GAAA,CAAA,EAAM5R,EAAG0G,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;gBACpE,IAAI,CAACtF,GAAG,CAACpB,EAAGqL,CAAAA,QAAQ,CAAC,IAAI,CAAC8F,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,oBAAA,IAAI,CAACO,SAAS,CAACC,QAAQ,CAACtI,CAAC,GAAGrJ,EAAAA,CAAGsD,GAAG,CAAC,IAAI,CAACoO,SAAS,CAACC,QAAQ,CAACtI,CAAC,CAAA;AAC9D,iBAAA,CAAA;AACF,aAAA,CAAA;AACF,SAAA;AACAwI,QAAAA,QAAAA,CAAAA,CAAS7R,EAAE,EAAA;AACT,YAAA,MAAMiC,SAASC,yBAA0BlC,CAAAA,EAAAA,CAAAA;AACzC,YAAA,IAAI,CAACoC,MAAM,GAAGH,MAAAA,EAAAA,CAASmP,OAAO,CAAC,CAAA,CAAA;AAC/B,YAAA,IAAI,CAACzC,gBAAgB,GAAG3O,GAAGoT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC3C,YAAA,IAAI,CAAC5C,kBAAkB,GAAGxO,GAAGoT,KAAK,EAAA,CAAGhC,OAAO,CAAC,CAAA,CAAA;AAC7C,YAAA,IAAI,CAACI,QAAQ,CAACM,QAAQ,GAAG9R,GAAGkK,IAAI,EAAA;AAChClK,YAAAA,EAAAA,CAAGyR,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACD,QAAQ,CAACM,QAAQ,GAAGhF,oBAAAA,CACvB,IAAI,EACJ,IAAI,CAAC1K,MAAM,EACX,IAAI,CAACiP,OAAO,CAACzO,EAAE,EACf5C,EAAAA,CAAGI,IAAI,CAAC,EAAI,EAAA,EAAA,EAAI,EAChB,CAAA,EAAA,IAAI,CAACuO,gBAAgB,EACrB,IAAI,CAACH,kBAAkB,CAAA;AAE3B,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAwC,IAAAA,OAAAA,CAAQe,IAAI,GAAG,eAAA;IACf,OAAOf,OAAAA;AACT;AAEA,iBACO,SAAStB,WAAAA,CAAYtN,MAAwB,EAAA;AAClD,IAAA,MAAM2O,MAASiB,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAIlC,iBAAiBmC,SAAW,EAAA;QAC9B,IAAI;AACFnC,YAAAA,YAAAA,GAAe8D,kBAAmB7C,CAAAA,MAAAA,CAAAA;AAClCT,YAAAA,cAAAA,GAAiBS,OAAOmB,eAAe,CAACpC,YAAaqC,CAAAA,gBAAgB,CAAC,CAAE,CAAA,CAAA;AACxE/C,YAAAA,KAAAA,GAAQ2B,OAAOqB,eAAe,CAAC,SAAW,EAAA,EAAA,GAAK,IAAI,EAAI,EAAA;gBAAEC,UAAY,EAAA;AAAM,aAAA,CAAA;AAC3EjD,YAAAA,KAAAA,CAAM2C,IAAI,GAAG,YAAA;YACbxB,aAAgBQ,GAAAA,MAAAA,CAAOuB,iBAAiB,CAAC;AAAClD,gBAAAA;aAAM,EAAE,IAAA,CAAA;AACpD,SAAA,CAAE,OAAOmD,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;AAChB;AACF;AACA,IAAA,IAAIzC,YAAc,EAAA;AAChBQ,QAAAA,cAAAA,CAAeoC,QAAQ,CAAC,MAAA,EAAQ3B,OAAO4B,IAAI,KAAK,WAAW,CAAI,GAAA,CAAA,CAAA;QAC/DrC,cAAeoC,CAAAA,QAAQ,CAAC,QAAUtQ,EAAAA,MAAAA,CAAAA;AAClCkO,QAAAA,cAAAA,CAAemD,UAAU,CAAC,kBAAoBxE,EAAAA,gBAAAA,EAAkByE,YAAa,CAAA,oBAAA,CAAA,CAAA;AAC7EpD,QAAAA,cAAAA,CAAemD,UAAU,CAAC,oBAAsBvE,EAAAA,kBAAAA,EAAoBwE,YAAa,CAAA,oBAAA,CAAA,CAAA;AACjF3C,QAAAA,MAAAA,CAAO6B,gBAAgB,EAAA;AACvB7B,QAAAA,MAAAA,CAAO8B,cAAc,CAACtC,aAAAA,CAAAA;AACtBQ,QAAAA,MAAAA,CAAO+B,UAAU,CAAChD,YAAAA,CAAAA;QAClBiB,MAAOgC,CAAAA,YAAY,CAAC,CAAGzC,EAAAA,cAAAA,CAAAA;AACvB0C,QAAAA,kBAAAA,EAAAA;AACAjC,QAAAA,MAAAA,CAAOkC,eAAe,EAAA;AACxB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { uniformSphereSamples } from '../values';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst TRANSMITTANCE_SAMPLES = 16;\r\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\nconst MIE_SIGMA = 3.996;\r\nconst MIE_ABSORPTION_SIGMA = 4.4;\r\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n\r\n/**\r\n * Lowest observer altitude above the ground, in meters. Keeps the sky visible\r\n * when the camera is at or below the virtual planet surface.\r\n * @internal\r\n */\r\nexport const MIN_OBSERVER_ALTITUDE = 5;\r\n\r\n/** @internal */\r\nexport type AtmosphereParams = {\r\n plantRadius: number;\r\n atmosphereHeight: number;\r\n rayleighScatteringHeight: number;\r\n mieScatteringHeight: number;\r\n mieAnstropy: number;\r\n ozoneCenter: number;\r\n ozoneWidth: number;\r\n /** Albedo of the virtual planet ground */\r\n groundAlbedo: Vector3;\r\n apDistance: number;\r\n /**\r\n * Scales the distances the aerial perspective integrates over, making distant objects hazier (>1)\r\n * or clearer (<1). Does not affect the sky.\r\n */\r\n apViewDistanceScale: number;\r\n /**\r\n * Distance from the camera, in atmosphere meters, where aerial perspective starts; nearer\r\n * surfaces get none. The LUT depth slices cover [apStartDepth, apStartDepth + apDistance]\r\n */\r\n apStartDepth: number;\r\n cameraWorldMatrix: Matrix4x4;\r\n lightDir: Vector3;\r\n lightColor: Vector4;\r\n cameraAspect: number;\r\n cameraTanHalfFovy: number;\r\n /** Atmosphere meters per world unit */\r\n cameraHeightScale: number;\r\n /**\r\n * Observer altitude above the ground, in meters. Every atmosphere computation runs in the\r\n * observer's local frame: planet center at the origin, observer at (0, R + altitude, 0).\r\n */\r\n observerAltitude: number;\r\n /**\r\n * World to observer-local rotation. Its Y row is the local up; at the world origin it is the\r\n * identity. `lightDir` and `cameraWorldMatrix` are stored in this frame.\r\n */\r\n skyViewReferential: Matrix4x4;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultAtmosphereParams() {\r\n return {\r\n plantRadius: 6360000,\r\n atmosphereHeight: 60000,\r\n rayleighScatteringHeight: 8000,\r\n mieScatteringHeight: 1200,\r\n mieAnstropy: 0.8,\r\n ozoneCenter: 25000,\r\n ozoneWidth: 15000,\r\n groundAlbedo: new Vector3(0.401978, 0.401978, 0.401978),\r\n apDistance: 96000,\r\n apViewDistanceScale: 1,\r\n apStartDepth: 100,\r\n cameraWorldMatrix: Matrix4x4.identity(),\r\n lightDir: new Vector3(1, 0, 0),\r\n lightColor: new Vector4(1, 1, 1, 10),\r\n cameraAspect: 1,\r\n cameraTanHalfFovy: 1,\r\n cameraHeightScale: 1,\r\n observerAltitude: MIN_OBSERVER_ALTITUDE,\r\n skyViewReferential: Matrix4x4.identity()\r\n } as AtmosphereParams;\r\n}\r\n\r\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\r\n\r\nlet currentAtmosphereParams: Nullable<AtmosphereParams> = null;\r\n\r\nfunction checkParams(other?: Partial<AtmosphereParams>) {\r\n const result = {\r\n transmittance: false,\r\n multiScattering: false,\r\n skyView: false,\r\n aerialPerspective: false\r\n };\r\n other = { ...defaultAtmosphereParams, ...other };\r\n if (!currentAtmosphereParams) {\r\n currentAtmosphereParams = {\r\n ...defaultAtmosphereParams,\r\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\r\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\r\n groundAlbedo: new Vector3(defaultAtmosphereParams.groundAlbedo),\r\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix),\r\n skyViewReferential: new Matrix4x4(defaultAtmosphereParams.skyViewReferential)\r\n };\r\n result.transmittance = true;\r\n result.multiScattering = true;\r\n result.skyView = true;\r\n result.aerialPerspective = true;\r\n } else {\r\n result.transmittance =\r\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\r\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\r\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\r\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\r\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\r\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\r\n // The multi-scattering LUT uses an isotropic phase and a unit light, so it depends on the\r\n // medium only (see integralMultiScattering).\r\n result.multiScattering =\r\n result.transmittance || !currentAtmosphereParams.groundAlbedo.equalsTo(other.groundAlbedo!);\r\n // The sky view LUT is a full lat-long sphere around the observer in its local frame: the camera\r\n // orientation does not affect it, its altitude and the local light direction do.\r\n result.skyView =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n currentAtmosphereParams.mieAnstropy !== other.mieAnstropy ||\r\n currentAtmosphereParams.observerAltitude !== other.observerAltitude ||\r\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir!) ||\r\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor!);\r\n result.aerialPerspective =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n result.skyView ||\r\n currentAtmosphereParams.apDistance !== other.apDistance ||\r\n currentAtmosphereParams.apViewDistanceScale !== other.apViewDistanceScale ||\r\n currentAtmosphereParams.apStartDepth !== other.apStartDepth ||\r\n currentAtmosphereParams.cameraAspect !== other.cameraAspect ||\r\n currentAtmosphereParams.cameraTanHalfFovy !== other.cameraTanHalfFovy ||\r\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix!);\r\n }\r\n if (result.transmittance) {\r\n currentAtmosphereParams.plantRadius = other.plantRadius!;\r\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight!;\r\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight!;\r\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight!;\r\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter!;\r\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth!;\r\n }\r\n if (result.multiScattering) {\r\n currentAtmosphereParams.groundAlbedo.set(other.groundAlbedo!);\r\n }\r\n if (result.skyView) {\r\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy!;\r\n currentAtmosphereParams.observerAltitude = other.observerAltitude!;\r\n currentAtmosphereParams.lightDir.set(other.lightDir!);\r\n currentAtmosphereParams.lightColor.set(other.lightColor!);\r\n }\r\n if (result.aerialPerspective) {\r\n currentAtmosphereParams.apDistance = other.apDistance!;\r\n currentAtmosphereParams.apViewDistanceScale = other.apViewDistanceScale!;\r\n currentAtmosphereParams.apStartDepth = other.apStartDepth!;\r\n currentAtmosphereParams.cameraAspect = other.cameraAspect!;\r\n currentAtmosphereParams.cameraTanHalfFovy = other.cameraTanHalfFovy!;\r\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix!);\r\n }\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function rayIntersectSphere(\r\n scope: PBInsideFunctionScope,\r\n f3Center: PBShaderExp,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphere';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\r\n function () {\r\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\r\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\r\n this.$l.OH = pb.sqrt(pb.max(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)), 0));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.PH = pb.sqrt(pb.max(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)), 0));\r\n this.$l.t1 = pb.sub(this.SH, this.PH);\r\n this.$l.t2 = pb.add(this.SH, this.PH);\r\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\r\n }\r\n );\r\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Far intersection of a ray with a sphere, -1 when missed. For a start inside the sphere this is\r\n * where the ray leaves it: unlike {@link rayIntersectSphere} it cannot mistake a near root that float\r\n * error nudged above 0 for the exit in IntegrateSingleScatteredLuminance).\r\n * @internal\r\n */\r\nexport function rayIntersectSphereFar(\r\n scope: PBInsideFunctionScope,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphereFar';\r\n pb.func(funcName, [pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')], function () {\r\n this.$l.OS = pb.length(this.rayStart);\r\n this.$l.SH = pb.neg(pb.dot(this.rayStart, this.rayDir));\r\n this.$l.OH = pb.sqrt(pb.max(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)), 0));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.PH = pb.sqrt(pb.max(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)), 0));\r\n this.$return(pb.add(this.SH, this.PH));\r\n });\r\n return scope[funcName](fRadius, f3RayStart, f3RayDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceToSky(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3Dir: PBShaderExp,\r\n texLut: PBShaderExp,\r\n planetShadow = true\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = planetShadow ? 'z_transmittanceToSky' : 'z_transmittanceToSkyNoShadow';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.upVector = pb.normalize(this.p);\r\n // Planet shadow. The LUT only parameterizes zenith..horizon: a direction below the horizon\r\n // would clamp to the horizon texel and keep the sun lit after it has set. Test the planet\r\n // analytically instead, from a point lifted 1m to stay clear of float error on the sphere\r\n if (planetShadow) {\r\n this.$l.tPlanet = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.bottomRadius,\r\n pb.add(this.p, this.upVector),\r\n this.dir\r\n );\r\n this.$if(pb.greaterThan(this.tPlanet, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n }\r\n // Above the atmosphere the LUT has no entry: look it up from where the ray enters it.\r\n this.$l.pos = this.p;\r\n this.$if(pb.greaterThan(pb.length(this.p), this.topRadius), function () {\r\n this.$l.tTop = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.p, this.dir);\r\n this.$if(pb.lessThan(this.tTop, 0), function () {\r\n this.$return(pb.vec3(1));\r\n });\r\n this.pos = pb.add(this.p, pb.mul(this.dir, this.tTop));\r\n this.upVector = pb.normalize(this.pos);\r\n });\r\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\r\n this.$l.r = pb.min(pb.length(this.pos), this.topRadius);\r\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\r\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\r\n });\r\n return scope[funcName](stParams, f3Pos, f3Dir);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fRayleighScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighCoefficient';\r\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(pb.max(this.h, 0), this.rayleighScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fRayleighScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighPhase';\r\n pb.func(funcName, [pb.float('cosTheta')], function () {\r\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\r\n });\r\n return scope[funcName](fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieCoefficient';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(pb.max(this.h, 0), this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_miePhase';\r\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n this.$l.denom = pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2));\r\n this.$return(pb.div(pb.sub(1, this.g2), pb.mul(4 * Math.PI, this.denom, pb.sqrt(this.denom))));\r\n });\r\n return scope[funcName](fMieAnstropy, fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieAbsorption';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(pb.max(this.h, 0), this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function ozoneAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fOzoneLevelCenterHeight: PBShaderExp,\r\n fOzoneLevelWidth: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_ozoneAbsorption';\r\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(\r\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\r\n 1e-6\r\n );\r\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\r\n}\r\n\r\n/**\r\n * Sun light reflected by the virtual planet ground at `groundPos`, per unit illuminance: a Lambertian\r\n * surface of albedo `groundAlbedo` lit through the atmosphere. Multiply by the throughput from the observer.\r\n * @internal\r\n */\r\nexport function groundBounce(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3GroundPos: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_groundBounce';\r\n pb.func(funcName, [Params('params'), pb.vec3('groundPos'), pb.vec3('lightDir')], function () {\r\n this.$l.up = pb.normalize(this.groundPos);\r\n this.$l.NdotL = pb.clamp(pb.dot(this.up, this.lightDir), 0, 1);\r\n this.$l.transmittanceToLight = transmittanceToSky(\r\n this,\r\n this.params,\r\n this.groundPos,\r\n this.lightDir,\r\n texTransmittanceLut,\r\n false\r\n );\r\n this.$return(pb.mul(this.transmittanceToLight, this.params.groundAlbedo, this.NdotL, 1 / Math.PI));\r\n });\r\n return scope[funcName](stParams, f3GroundPos, f3LightDir) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Single scattering along a view ray, plus multiple scattering from the LUT.\r\n *\r\n * @param withGround - Stop the ray at the planet ground.\r\n * @param groundLit - When the ray ends on the ground (not cut short by `maxDis`), add the sun light\r\n * the ground reflects. Implies `withGround`.\r\n * @param apScale - Scale the integrated segment lengths by `params.apViewDistanceScale`, for the\r\n * aerial perspective. The medium is still sampled at the true positions.\r\n */\r\nexport function getSkyView(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3EyePos: PBShaderExp,\r\n f3ViewDir: PBShaderExp,\r\n fMaxDis: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp,\r\n withGround = true,\r\n groundLit = false,\r\n apScale = false\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = `z_getSkyView${withGround ? '_G' : ''}${groundLit ? '_L' : ''}${apScale ? '_AP' : ''}`;\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\r\n function () {\r\n const N_SAMPLE = 32;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.eye = this.eyePos;\r\n this.$l.maxDistance = this.maxDis;\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eye, this.viewDir);\r\n this.$if(pb.lessThan(this.dis, 0), function () {\r\n this.$return(pb.vec4(0, 0, 0, 1));\r\n });\r\n this.$if(pb.greaterThan(pb.length(this.eye), this.topRadius), function () {\r\n this.$l.tEnter = this.dis;\r\n this.eye = pb.add(this.eye, pb.mul(this.viewDir, this.tEnter));\r\n this.eye = pb.sub(this.eye, pb.normalize(this.eye));\r\n this.$if(pb.greaterThanEqual(this.maxDistance, 0), function () {\r\n this.maxDistance = pb.sub(this.maxDistance, this.tEnter);\r\n this.$if(pb.lessThanEqual(this.maxDistance, 0), function () {\r\n this.$return(pb.vec4(0, 0, 0, 1));\r\n });\r\n });\r\n this.dis = pb.max(rayIntersectSphereFar(this, this.topRadius, this.eye, this.viewDir), 0);\r\n });\r\n this.$l.hitGround = pb.bool(false);\r\n if (withGround || groundLit) {\r\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eye, this.viewDir);\r\n this.$if(pb.and(pb.greaterThan(this.d, 0), pb.lessThanEqual(this.d, this.dis)), function () {\r\n this.dis = this.d;\r\n this.hitGround = pb.bool(true);\r\n });\r\n }\r\n this.$if(\r\n pb.and(pb.greaterThanEqual(this.maxDistance, 0), pb.lessThan(this.maxDistance, this.dis)),\r\n function () {\r\n this.dis = this.maxDistance;\r\n this.hitGround = pb.bool(false);\r\n }\r\n );\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.eye, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\r\n this.$l.throughput = pb.vec3(1);\r\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.extinction = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sampleTransmittance = pb.exp(\r\n pb.neg(pb.mul(this.extinction, this.ds, apScale ? this.params.apViewDistanceScale : 1))\r\n );\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n // Multi-scattering is diffuse light left after single scattering: not planet shadowed.\r\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\r\n this.$l.S = pb.mul(pb.add(pb.mul(this.t1, this.s), this.multiScattering), this.sunLuminance);\r\n // Integrate the source term analytically over the segment instead of weighting it by the\r\n // transmittance to the segment end, which darkens long (horizon) steps.\r\n this.$l.Sint = pb.div(\r\n pb.sub(this.S, pb.mul(this.S, this.sampleTransmittance)),\r\n pb.max(this.extinction, pb.vec3(1e-12))\r\n );\r\n this.color = pb.add(this.color, pb.mul(this.throughput, this.Sint));\r\n this.throughput = pb.mul(this.throughput, this.sampleTransmittance);\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n if (groundLit) {\r\n this.$if(this.hitGround, function () {\r\n this.$l.groundPos = pb.add(this.eye, pb.mul(this.viewDir, this.dis));\r\n this.color = pb.add(\r\n this.color,\r\n pb.mul(\r\n groundBounce(this, this.params, this.groundPos, this.params.lightDir, texTransmittanceLut),\r\n this.throughput,\r\n this.sunLuminance\r\n )\r\n );\r\n });\r\n }\r\n this.$return(pb.vec4(this.color, pb.dot(this.throughput, pb.vec3(1 / 3))));\r\n }\r\n );\r\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_getMultiScattering';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\r\n this.$l.uv = pb.vec2(\r\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\r\n pb.div(this.h, this.params.atmosphereHeight)\r\n );\r\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\r\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\r\n });\r\n return scope[funcName](stParams, f3Pos);\r\n}\r\n\r\n/** @internal */\r\nexport function integralMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f3SamplePoint: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const N_DIRECTION = 64;\r\n const N_SAMPLE = 32;\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_integralMultiScattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\r\n const uniformPhase = 1 / (4 * Math.PI);\r\n this.$l.G_2 = pb.vec3(0);\r\n this.$l.f_ms = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\r\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.d = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.hitGround = pb.and(pb.greaterThan(this.d, 0), pb.lessThanEqual(this.d, this.dis));\r\n this.$if(this.hitGround, function () {\r\n this.dis = this.d;\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.throughput = pb.vec3(1);\r\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_a = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\r\n this.$l.sampleTransmittance = pb.exp(pb.neg(pb.mul(this.sigma_t, this.ds)));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\r\n this.$l.S = pb.mul(this.t1, this.sigma_s, uniformPhase);\r\n this.$l.Sint = pb.div(\r\n pb.sub(this.S, pb.mul(this.S, this.sampleTransmittance)),\r\n pb.max(this.sigma_t, pb.vec3(1e-12))\r\n );\r\n this.G_2 = pb.add(this.G_2, pb.mul(this.throughput, this.Sint));\r\n this.f_ms = pb.add(this.f_ms, pb.mul(this.throughput, this.sigma_s, this.ds));\r\n this.throughput = pb.mul(this.throughput, this.sampleTransmittance);\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n this.$if(this.hitGround, function () {\r\n this.$l.groundPos = pb.add(this.samplePoint, pb.mul(this.viewDir, this.dis));\r\n this.G_2 = pb.add(\r\n this.G_2,\r\n pb.mul(\r\n groundBounce(this, this.params, this.groundPos, this.lightDir, texTransmittanceLut),\r\n this.throughput\r\n )\r\n );\r\n });\r\n });\r\n // G_2: (4pi / N) * sum(L) is the illuminance, times the isotropic phase 1 / (4pi) gives the\r\n // in-scattered luminance, i.e. the plain average over the N directions.\r\n this.G_2 = pb.div(this.G_2, N_DIRECTION);\r\n this.f_ms = pb.div(this.f_ms, N_DIRECTION);\r\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\r\n });\r\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\r\n}\r\n\r\n/** @internal */\r\nexport function scattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3ViewDir: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_scattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\r\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.rayleigh = pb.mul(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n rayleighPhase(this, this.cosTheta)\r\n );\r\n this.$l.mie = pb.mul(\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\r\n );\r\n this.$return(pb.add(this.rayleigh, this.mie));\r\n });\r\n return scope[funcName](stParams, f3Pos, f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittance(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3P1: PBShaderExp,\r\n f3P2: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_transmittance';\r\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\r\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\r\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\r\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\r\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.scattering = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.absorption = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.extinction = pb.add(this.scattering, this.absorption);\r\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\r\n });\r\n this.$return(pb.exp(pb.neg(this.sum)));\r\n });\r\n return scope[funcName](stParams, f3P1, f3P2) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLutToUV(\r\n scope: PBInsideFunctionScope,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp,\r\n fMu: PBShaderExp,\r\n fR: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToUV';\r\n pb.func(\r\n funcName,\r\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\r\n function () {\r\n this.$l.H = pb.sqrt(\r\n pb.max(\r\n 0,\r\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\r\n )\r\n );\r\n this.$l.rho = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.discriminant = pb.add(\r\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\r\n pb.mul(this.topRadius, this.topRadius)\r\n );\r\n // r ~ topRadius (a ray entering from space) makes this top^2 - r^2 difference of two ~4e13 values,\r\n // which float error can drive negative.\r\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(pb.max(this.discriminant, 0)), pb.mul(this.mu, this.r)));\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\r\n this.$l.x_r = pb.div(this.rho, this.H);\r\n this.$return(pb.vec2(this.x_mu, this.x_r));\r\n }\r\n );\r\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport const SKY_VIEW_LUT_WIDTH = 256;\r\n/** @internal */\r\nexport const SKY_VIEW_LUT_HEIGHT = 128;\r\n\r\n/**\r\n * Zenith angle of the horizon, and the angle from the horizon down to the nadir, seen from the\r\n * sky view LUT observer.\r\n */\r\nfunction skyViewHorizon(scope: PBInsideFunctionScope, stParams: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_skyViewHorizon';\r\n pb.func(funcName, [Params('params')], function () {\r\n this.$l.altitude = this.params.observerAltitude;\r\n this.$l.viewHeight = pb.add(this.params.plantRadius, this.altitude);\r\n // sqrt(h^2 - R^2) written as sqrt(a * (2R + a)): at an altitude of meters against a radius of\r\n // thousands of kilometers, h^2 - R^2 is pure fp32 cancellation.\r\n this.$l.vHorizon = pb.sqrt(\r\n pb.mul(this.altitude, pb.add(pb.mul(this.params.plantRadius, 2), this.altitude))\r\n );\r\n this.$l.beta = pb.acos(pb.clamp(pb.div(this.vHorizon, this.viewHeight), -1, 1));\r\n this.$return(pb.vec2(pb.sub(Math.PI, this.beta), this.beta));\r\n });\r\n return scope[funcName](stParams) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Sky view LUT parameterization. Latitude is split at the observer's horizon, which lands exactly on v = 0.5, with texels concentrated towards it on both sides: a\r\n * uniform latitude mapping interpolates the dark below-horizon texels into the sky just above it.\r\n * v = 0 is the zenith.\r\n *\r\n * @internal\r\n */\r\nexport function viewDirToUV(scope: PBInsideFunctionScope, stParams: PBShaderExp, f3ViewDir: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_viewDirToUV';\r\n pb.func(funcName, [Params('params'), pb.vec3('viewDir')], function () {\r\n this.$l.horizon = skyViewHorizon(this, this.params);\r\n this.$l.zenithHorizonAngle = this.horizon.x;\r\n this.$l.beta = this.horizon.y;\r\n this.$l.viewZenithAngle = pb.acos(pb.clamp(this.viewDir.y, -1, 1));\r\n this.$l.v = pb.float();\r\n this.$if(pb.lessThan(this.viewZenithAngle, this.zenithHorizonAngle), function () {\r\n this.$l.coord = pb.div(this.viewZenithAngle, this.zenithHorizonAngle);\r\n this.v = pb.mul(pb.sub(1, pb.sqrt(pb.max(pb.sub(1, this.coord), 0))), 0.5);\r\n }).$else(function () {\r\n this.$l.coord = pb.div(pb.sub(this.viewZenithAngle, this.zenithHorizonAngle), this.beta);\r\n this.v = pb.add(pb.mul(pb.sqrt(pb.max(this.coord, 0)), 0.5), 0.5);\r\n });\r\n this.$l.u = pb.add(pb.div(pb.atan2(this.viewDir.z, this.viewDir.x), 2 * Math.PI), 0.5);\r\n // FromUnitToSubUvs: keep lookups inside the texel-center range.\r\n this.$l.size = pb.vec2(SKY_VIEW_LUT_WIDTH, SKY_VIEW_LUT_HEIGHT);\r\n this.$return(\r\n pb.mul(\r\n pb.add(pb.vec2(this.u, this.v), pb.div(pb.vec2(0.5), this.size)),\r\n pb.div(this.size, pb.add(this.size, pb.vec2(1)))\r\n )\r\n );\r\n });\r\n return scope[funcName](stParams, f3ViewDir) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Inverse of {@link viewDirToUV}.\r\n *\r\n * @internal\r\n */\r\nexport function uvToViewDir(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_uvToViewDir';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n // FromSubUvsToUnit\r\n this.$l.size = pb.vec2(SKY_VIEW_LUT_WIDTH, SKY_VIEW_LUT_HEIGHT);\r\n this.$l.unit = pb.mul(\r\n pb.sub(this.uv, pb.div(pb.vec2(0.5), this.size)),\r\n pb.div(this.size, pb.sub(this.size, pb.vec2(1)))\r\n );\r\n this.$l.horizon = skyViewHorizon(this, this.params);\r\n this.$l.zenithHorizonAngle = this.horizon.x;\r\n this.$l.beta = this.horizon.y;\r\n this.$l.viewZenithAngle = pb.float();\r\n this.$if(pb.lessThan(this.unit.y, 0.5), function () {\r\n this.$l.coord = pb.sub(1, pb.mul(this.unit.y, 2));\r\n this.viewZenithAngle = pb.mul(this.zenithHorizonAngle, pb.sub(1, pb.mul(this.coord, this.coord)));\r\n }).$else(function () {\r\n this.$l.coord = pb.sub(pb.mul(this.unit.y, 2), 1);\r\n this.viewZenithAngle = pb.add(this.zenithHorizonAngle, pb.mul(this.beta, this.coord, this.coord));\r\n });\r\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.unit.x, 2), 1), Math.PI);\r\n this.$l.sinTheta = pb.sin(this.viewZenithAngle);\r\n this.$return(\r\n pb.vec3(\r\n pb.mul(this.sinTheta, pb.cos(this.phi)),\r\n pb.cos(this.viewZenithAngle),\r\n pb.mul(this.sinTheta, pb.sin(this.phi))\r\n )\r\n );\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function uvToTransmittanceLut(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToTransmittanceLut';\r\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\r\n this.$l.x_mu = this.uv.x;\r\n this.$l.x_r = this.uv.y;\r\n this.$l.H = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.rho = pb.mul(this.H, this.x_r);\r\n this.$l.r = pb.sqrt(\r\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\r\n this.$l.mu = this.$choice(\r\n pb.equal(this.d, 0),\r\n pb.float(1),\r\n pb.div(\r\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\r\n pb.mul(this.r, this.d, 2)\r\n )\r\n );\r\n this.mu = pb.clamp(this.mu, -1, 1);\r\n this.$return(pb.vec2(this.mu, this.r));\r\n });\r\n return scope[funcName](f2UV, fBottomRadius, fTopRadius) as PBShaderExp;\r\n}\r\n\r\nfunction sunBloom(\r\n scope: PBInsideFunctionScope,\r\n f3ViewDir: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f4LightColorAndIntensity: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_sunBloom';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\r\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\r\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\r\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\r\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\r\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\r\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\r\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\r\n });\r\n this.$return(this.luminance);\r\n }\r\n );\r\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Default sun angular diameter (DirectionalLight LightSourceAngle), as a half apex angle\r\n *\r\n * @internal\r\n **/\r\nexport const SUN_DISK_HALF_APEX_ANGLE = (0.5 * 0.5357 * Math.PI) / 180;\r\n\r\n/**\r\n * @internal\r\n *\r\n * Sky luminance along a view direction, plus the sun disk.\r\n *\r\n * @remarks\r\n * `f3LocalDir` is in the observer's local frame (see {@link AtmosphereParams.skyViewReferential}).\r\n * Inside the atmosphere the luminance comes from the sky view LUT; above it the LUT, which is\r\n * parameterized around a horizon inside the atmosphere, does not apply and the view ray is marched\r\n * per pixel instead, starting where it enters the atmosphere. That path draws the planet as seen from\r\n * space: the lit virtual ground behind the full atmosphere.\r\n *\r\n * `sunColor` receives the light color attenuated towards the observer.\r\n *\r\n * @param fIncludeSunDisk - 0: no sun disk; 1: legacy stylized disk with glow; 2: physical disk.\r\n * @param fPixelAngle - Angular size of a screen pixel in radians, for anti-aliasing the physical disk.\r\n * @param fSunDiskMaxLuminance - Ceiling for the physical disk before its edge coverage is applied, in\r\n * the unscaled luminance this function returns (the output clamp divided by the luminance scale).\r\n */\r\nexport function skyBox(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f4SunColor: PBShaderExp,\r\n f3LocalDir: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp,\r\n fIncludeSunDisk: PBShaderExp,\r\n fPixelAngle: PBShaderExp,\r\n fSunDiskMaxLuminance: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texSkyViewLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_skybox';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [\r\n Params('params'),\r\n pb.vec4('sunColor').out(),\r\n pb.vec3('localDir'),\r\n pb.float('sunSolidAngle'),\r\n pb.int('includeSunDisk'),\r\n pb.float('pixelAngle'),\r\n pb.float('sunDiskMaxLuminance')\r\n ],\r\n function () {\r\n this.$l.viewDir = pb.normalize(this.localDir);\r\n this.$l.eyePos = pb.vec3(0, pb.add(this.params.plantRadius, this.params.observerAltitude), 0);\r\n this.$l.rgb = pb.vec3(0);\r\n this.$if(pb.lessThan(this.params.observerAltitude, this.params.atmosphereHeight), function () {\r\n this.rgb = pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.params, this.viewDir), 0).rgb;\r\n }).$else(function () {\r\n this.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut,\r\n true,\r\n true\r\n ).rgb;\r\n });\r\n this.$l.groundDistance = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$l.sunTransmittance = transmittanceToSky(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.params.lightDir,\r\n texTransmittanceLut\r\n );\r\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\r\n this.$if(pb.and(pb.equal(this.includeSunDisk, 1), pb.lessThan(this.groundDistance, 0)), function () {\r\n this.rgb = pb.add(\r\n this.rgb,\r\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\r\n );\r\n });\r\n this.$if(pb.equal(this.includeSunDisk, 2), function () {\r\n const halfApex = SUN_DISK_HALF_APEX_ANGLE;\r\n const solidAngle = 2 * Math.PI * (1 - Math.cos(halfApex));\r\n this.$l.theta = pb.distance(this.viewDir, this.params.lightDir);\r\n this.$l.halfPixel = pb.mul(this.pixelAngle, 0.5);\r\n this.$if(pb.lessThan(this.theta, pb.add(halfApex, this.halfPixel)), function () {\r\n this.$l.transmittanceToLight = transmittanceToSky(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n texTransmittanceLut\r\n );\r\n this.$l.edgeTheta = pb.div(pb.max(pb.sub(this.theta, this.halfPixel), 0), halfApex);\r\n this.$l.softEdge = pb.clamp(pb.mul(pb.sub(1, pb.mul(this.edgeTheta, this.edgeTheta)), 2), 0, 1);\r\n this.$l.coverage = pb.clamp(\r\n pb.add(pb.div(pb.sub(halfApex, this.theta), pb.max(this.pixelAngle, 1e-6)), 0.5),\r\n 0,\r\n 1\r\n );\r\n this.$l.diskLuminance = pb.mul(\r\n this.transmittanceToLight,\r\n this.params.lightColor.rgb,\r\n pb.div(this.params.lightColor.a, solidAngle),\r\n this.softEdge\r\n );\r\n this.rgb = pb.add(\r\n this.rgb,\r\n pb.mul(pb.min(this.diskLuminance, pb.vec3(this.sunDiskMaxLuminance)), this.coverage)\r\n );\r\n });\r\n });\r\n this.$return(pb.vec4(this.rgb, 1));\r\n }\r\n );\r\n return scope[funcName](\r\n stParams,\r\n f4SunColor,\r\n f3LocalDir,\r\n fSunSolidAngle,\r\n fIncludeSunDisk,\r\n fPixelAngle,\r\n fSunDiskMaxLuminance\r\n ) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport const AP_LUT_SLICE_SIZE = 32;\r\n/** @internal */\r\nexport const AP_LUT_DEPTH_SLICES = 32;\r\n\r\n/**\r\n * Samples the aerial perspective LUT.\r\n * @internal\r\n */\r\nexport function aerialPerspective(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n stParams: PBShaderExp,\r\n f3CameraPos: PBShaderExp,\r\n f3WorldPos: PBShaderExp,\r\n f3Dim: PBShaderExp,\r\n texAerialPerspectiveLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspective';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\r\n function () {\r\n this.$l.tDepth = pb.max(\r\n pb.sub(\r\n pb.mul(pb.distance(this.worldPos, this.cameraPos), this.params.cameraHeightScale),\r\n this.params.apStartDepth\r\n ),\r\n 0\r\n );\r\n this.$l.linearW = pb.clamp(pb.div(this.tDepth, this.params.apDistance), 0, 1);\r\n this.$l.nonLinSlice = pb.mul(pb.sqrt(this.linearW), this.dim.z);\r\n this.$l.weight = pb.clamp(pb.mul(this.nonLinSlice, this.nonLinSlice, 2), 0, 1);\r\n this.$l.sliceF = pb.clamp(pb.sub(this.nonLinSlice, 0.5), 0, pb.sub(this.dim.z, 1));\r\n this.$l.slice0 = pb.floor(this.sliceF);\r\n this.$l.slice1 = pb.min(pb.add(this.slice0, 1), pb.sub(this.dim.z, 1));\r\n this.$l.factor = pb.sub(this.sliceF, this.slice0);\r\n this.$l.halfTexel = pb.div(0.5, this.dim.x);\r\n this.$l.u = pb.clamp(this.uv.x, this.halfTexel, pb.sub(1, this.halfTexel));\r\n this.$l.uv1 = pb.vec2(pb.div(pb.add(this.slice0, this.u), this.dim.z), this.uv.y);\r\n this.$l.uv2 = pb.vec2(pb.div(pb.add(this.slice1, this.u), this.dim.z), this.uv.y);\r\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\r\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\r\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\r\n this.$return(\r\n pb.vec4(pb.mul(this.data.rgb, this.weight), pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a))))\r\n );\r\n }\r\n );\r\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Renders one texel of the aerial perspective LUT atlas: rgb is the in-scattered luminance and a\r\n * the mean transmittance from the observer to the froxel.\r\n */\r\nexport function aerialPerspectiveLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n f3VoxelDim: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspectiveLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim')], function () {\r\n // uv arrives at the texel center of the dim.x * dim.z wide atlas.\r\n this.$l.px = pb.floor(pb.mul(this.uv.x, this.dim.x, this.dim.z));\r\n this.$l.slice = pb.floor(pb.div(this.px, this.dim.x));\r\n this.$l.screenUV = pb.vec2(\r\n pb.div(pb.add(pb.sub(this.px, pb.mul(this.slice, this.dim.x)), 0.5), this.dim.x),\r\n this.uv.y\r\n );\r\n this.$l.w = pb.div(pb.add(this.slice, 0.5), this.dim.z);\r\n this.$l.ndc = pb.sub(pb.mul(this.screenUV, 2), pb.vec2(1));\r\n this.$l.viewDir = pb.normalize(\r\n pb.mul(\r\n this.params.cameraWorldMatrix,\r\n pb.vec4(\r\n pb.mul(this.ndc.x, this.params.cameraTanHalfFovy, this.params.cameraAspect),\r\n pb.mul(this.ndc.y, this.params.cameraTanHalfFovy),\r\n -1,\r\n 0\r\n )\r\n ).xyz\r\n );\r\n this.$l.eyePos = pb.vec3(0, pb.add(this.params.observerAltitude, this.params.plantRadius), 0);\r\n // Slices start at the start depth (RayStartWorldPos = CamPos + StartDepth * WorldDir).\r\n this.$l.maxDis = pb.add(this.params.apStartDepth, pb.mul(this.w, this.w, this.params.apDistance));\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$l.underGround = pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius);\r\n this.$l.planetNearT = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$l.belowHorizon = pb.and(\r\n pb.greaterThan(this.planetNearT, 0),\r\n pb.greaterThan(this.maxDis, this.planetNearT)\r\n );\r\n // A froxel behind the ground would only integrate up to the ground hit, leaving surfaces seen\r\n // from above (the observer sits just above the planet) without any aerial perspective. Instead\r\n // integrate towards the ground point below the froxel.\r\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\r\n this.$l.voxelPosNorm = pb.normalize(this.voxelPos);\r\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos), this.params.plantRadius);\r\n this.$l.voxProjOnGround = pb.mul(this.voxelPosNorm, this.params.plantRadius);\r\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos, this.voxProjOnGround);\r\n this.$if(\r\n pb.and(\r\n this.belowHorizon,\r\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelPosNorm), 0.0001)\r\n ),\r\n function () {\r\n // Behind the planet: evaluate the point mirrored through the horizon point.\r\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\r\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\r\n this.voxelPos = pb.add(this.eyePos, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos), 2));\r\n }\r\n ).$elseif(this.underGround, function () {\r\n this.voxelPos = this.voxProjOnGround;\r\n });\r\n this.$l.V = pb.sub(this.voxelPos, this.eyePos);\r\n this.maxDis = pb.length(this.V);\r\n this.viewDir = pb.div(this.V, this.maxDis);\r\n });\r\n // Integrate from the start depth along the (possibly redirected) ray up to the froxel.\r\n this.$l.rayStart = pb.add(this.eyePos, pb.mul(this.viewDir, this.params.apStartDepth));\r\n this.$l.segment = pb.sub(this.maxDis, this.params.apStartDepth);\r\n this.$if(pb.lessThanEqual(this.segment, 0), function () {\r\n this.$return(pb.vec4(0, 0, 0, 1));\r\n });\r\n this.$return(\r\n getSkyView(\r\n this,\r\n this.params,\r\n this.rayStart,\r\n this.viewDir,\r\n this.segment,\r\n texTransmittanceLut,\r\n texMultiScatteringLut,\r\n true,\r\n false,\r\n true\r\n )\r\n );\r\n });\r\n return scope[funcName](stParams, f2UV, f3VoxelDim) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function skyViewLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_skyViewLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.viewDir = uvToViewDir(this, this.params, this.uv);\r\n this.$l.h = pb.add(this.params.plantRadius, this.params.observerAltitude);\r\n this.$l.eyePos = pb.vec3(0, this.h, 0);\r\n this.$l.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut,\r\n true,\r\n true\r\n ).rgb;\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function multiScatteringLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_multiScatteringLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\r\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\r\n this.$l.cosTheta = this.mu_s;\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\r\n this.$l.p = pb.vec3(0, this.r, 0);\r\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'transmittanceLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\r\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\r\n this.$l.cos_theta = this.lutParams.x;\r\n this.$l.r = this.lutParams.y;\r\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\r\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\r\n this.$l.eyePos = pb.vec3(0, this.r, 0);\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\r\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\r\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\r\n });\r\n return scope[funcName](stParams, f2UV) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function atmosphereLUTRendered() {\r\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\r\n const checkResult = checkParams(params);\r\n if (checkResult.transmittance || !transmittanceLUT) {\r\n renderTransmittanceLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.multiScattering || !multiScatteringLUT) {\r\n renderMultiScatteringLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.skyView || !skyViewLUT) {\r\n renderSkyViewLut(currentAtmosphereParams!);\r\n }\r\n if (checkResult.aerialPerspective || !ApLut) {\r\n renderAPLut(currentAtmosphereParams!);\r\n }\r\n}\r\n\r\n/* For debug */\r\nlet transmittanceLutProgram: GPUProgram;\r\nlet multiScatteringLutProgram: GPUProgram;\r\nlet skyViewLutProgram: GPUProgram;\r\nlet APLutProgram: GPUProgram;\r\nlet transmittanceLutBindGroup: BindGroup;\r\nlet transmittanceLUT: Texture2D;\r\nlet transmittanceFramebuffer: FrameBuffer;\r\n\r\nlet multiScatteringLutBindGroup: BindGroup;\r\nlet multiScatteringLUT: Texture2D;\r\nlet uniformSphereSampleBuffer: GPUDataBuffer;\r\nlet multiScatteringFramebuffer: FrameBuffer;\r\n\r\nlet skyViewLutBindGroup: BindGroup;\r\nlet skyViewLUT: Texture2D;\r\nlet skyViewFramebuffer: FrameBuffer;\r\n\r\nlet APLutBindGroup: BindGroup;\r\nlet ApLut: Texture2D;\r\nlet APFramebuffer: FrameBuffer;\r\n\r\n/** @internal */\r\nexport function getTransmittanceLut() {\r\n return transmittanceLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScatteringLut() {\r\n return multiScatteringLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyViewLut() {\r\n return skyViewLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getAerialPerspectiveLut() {\r\n return ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.mat4('cameraWorldMatrix'),\r\n pb.vec4('lightColor'),\r\n pb.vec3('lightDir'),\r\n pb.float('cameraAspect'),\r\n pb.vec3('groundAlbedo'),\r\n pb.float('cameraTanHalfFovy'),\r\n pb.float('plantRadius'),\r\n pb.float('atmosphereHeight'),\r\n pb.float('rayleighScatteringHeight'),\r\n pb.float('mieScatteringHeight'),\r\n pb.float('mieAnstropy'),\r\n pb.float('ozoneCenter'),\r\n pb.float('ozoneWidth'),\r\n pb.float('apDistance'),\r\n pb.float('apViewDistanceScale'),\r\n pb.float('apStartDepth'),\r\n pb.float('cameraHeightScale'),\r\n pb.float('observerAltitude'),\r\n pb.mat4('skyViewReferential')\r\n ]);\r\n}\r\n\r\n/** @internal */\r\nexport function createTransmittanceLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\r\n });\r\n }\r\n })!;\r\n program.name = '@TransmittanceLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderTransmittanceLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (transmittanceLutProgram === undefined) {\r\n try {\r\n transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\r\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\r\n mipmapping: false\r\n })!;\r\n transmittanceLUT.name = 'DebugTransmittanceLut';\r\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (transmittanceLutProgram) {\r\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n transmittanceLutBindGroup.setValue('params', params);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(transmittanceFramebuffer);\r\n device.setProgram(transmittanceLutProgram);\r\n device.setBindGroup(0, transmittanceLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = multiScatteringLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@MultiScatteringLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (multiScatteringLutProgram === undefined) {\r\n try {\r\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\r\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\r\n mipmapping: false\r\n })!;\r\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\r\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\r\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false)!;\r\n const sphereSamples = new Float32Array(64 * 4);\r\n for (let i = 0; i < 64; i++) {\r\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\r\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\r\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\r\n sphereSamples[i * 4 + 3] = 0;\r\n }\r\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (multiScatteringLutProgram) {\r\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n multiScatteringLutBindGroup.setValue('params', params);\r\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\r\n multiScatteringLutBindGroup.setTexture(\r\n 'transmittanceLut',\r\n transmittanceLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(multiScatteringFramebuffer);\r\n device.setProgram(multiScatteringLutProgram);\r\n device.setBindGroup(0, multiScatteringLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createSkyViewLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = skyViewLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@SkyViewLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderSkyViewLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (skyViewLutProgram === undefined) {\r\n try {\r\n skyViewLutProgram = createSkyViewLutProgram(device);\r\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\r\n skyViewLUT = device.createTexture2D('rgba16f', SKY_VIEW_LUT_WIDTH, SKY_VIEW_LUT_HEIGHT, {\r\n mipmapping: false\r\n })!;\r\n skyViewLUT.name = 'DebugSkyViewLut';\r\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (skyViewLutProgram) {\r\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n skyViewLutBindGroup.setValue('params', params);\r\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n skyViewLutBindGroup.setTexture(\r\n 'multiScatteringLut',\r\n multiScatteringLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(skyViewFramebuffer);\r\n device.setProgram(skyViewLutProgram);\r\n device.setBindGroup(0, skyViewLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createAPLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = aerialPerspectiveLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n pb.vec3(AP_LUT_SLICE_SIZE, AP_LUT_SLICE_SIZE, AP_LUT_DEPTH_SLICES),\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@APLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAPLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (APLutProgram === undefined) {\r\n try {\r\n APLutProgram = createAPLutProgram(device);\r\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\r\n ApLut = device.createTexture2D('rgba16f', AP_LUT_SLICE_SIZE * AP_LUT_DEPTH_SLICES, AP_LUT_SLICE_SIZE, {\r\n mipmapping: false\r\n })!;\r\n ApLut.name = 'DebugAPLut';\r\n APFramebuffer = device.createFrameBuffer([ApLut], null);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n if (APLutProgram) {\r\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n APLutBindGroup.setValue('params', params);\r\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\r\n device.pushDeviceStates();\r\n device.setFramebuffer(APFramebuffer);\r\n device.setProgram(APLutProgram);\r\n device.setBindGroup(0, APLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","MIN_OBSERVER_ALTITUDE","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","groundAlbedo","Vector3","apDistance","apViewDistanceScale","apStartDepth","cameraWorldMatrix","Matrix4x4","identity","lightDir","lightColor","Vector4","cameraAspect","cameraTanHalfFovy","cameraHeightScale","observerAltitude","skyViewReferential","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","max","mul","$if","greaterThan","radius","$return","PH","t1","t2","add","$choice","lessThan","rayIntersectSphereFar","neg","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","planetShadow","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","tPlanet","dir","pos","tTop","cosTheta","r","min","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","denom","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","abs","width","groundBounce","f3GroundPos","f3LightDir","texTransmittanceLut","up","groundPos","NdotL","clamp","transmittanceToLight","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texMultiScatteringLut","withGround","groundLit","apScale","N_SAMPLE","color","eye","eyePos","maxDistance","maxDis","dis","viewDir","vec4","tEnter","greaterThanEqual","lessThanEqual","hitGround","bool","d","and","ds","sunLuminance","a","throughput","$for","int","extinction","sampleTransmittance","s","scattering","getMultiScattering","S","Sint","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3SamplePoint","N_DIRECTION","uniformPhase","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","SKY_VIEW_LUT_WIDTH","SKY_VIEW_LUT_HEIGHT","skyViewHorizon","altitude","viewHeight","vHorizon","beta","acos","viewDirToUV","horizon","zenithHorizonAngle","x","y","viewZenithAngle","v","coord","$else","u","atan2","z","size","uvToViewDir","f2UV","unit","phi","sinTheta","sin","cos","uvToTransmittanceLut","equal","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","SUN_DISK_HALF_APEX_ANGLE","skyBox","f4SunColor","f3LocalDir","fIncludeSunDisk","fPixelAngle","fSunDiskMaxLuminance","texSkyViewLut","out","localDir","groundDistance","sunTransmittance","sunColor","includeSunDisk","halfApex","solidAngle","theta","halfPixel","pixelAngle","edgeTheta","softEdge","coverage","diskLuminance","sunDiskMaxLuminance","AP_LUT_SLICE_SIZE","AP_LUT_DEPTH_SLICES","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","tDepth","worldPos","cameraPos","linearW","nonLinSlice","dim","weight","sliceF","slice0","floor","slice1","factor","halfTexel","uv1","uv2","data1","data2","data","mix","aerialPerspectiveLut","f3VoxelDim","px","slice","screenUV","w","ndc","voxelPos","underGround","planetNearT","belowHorizon","or","voxelPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$elseif","V","segment","skyViewLut","multiScatteringLut","mu_s","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","attrib","$outputs","main","$builtins","position","xy","notEqual","fragment","outColor","name","getDevice","undefined","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":"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"}
|