@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
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Tileable noise for the volumetric cloud volumes.
|
|
3
|
+
*
|
|
4
|
+
* Follows piyushslayer's "Tileable Perlin-Worley 3D" (https://www.shadertoy.com/view/3dVXDc),
|
|
5
|
+
* which builds the volumes of Schneider, "The Real-time Volumetric Cloudscapes of Horizon Zero
|
|
6
|
+
* Dawn" (SIGGRAPH 2015) after Hillaire's TileableVolumeNoise
|
|
7
|
+
* (https://github.com/sebh/TileableVolumeNoise): gradient noise by Inigo Quilez and Worley noise,
|
|
8
|
+
* both made periodic by wrapping the lattice cell modulo the frequency.
|
|
9
|
+
*
|
|
10
|
+
* Every function takes the frequency in lattice cells per period, so a coordinate in [0, 1)
|
|
11
|
+
* scaled by `freq` repeats exactly over the unit cube.
|
|
12
|
+
*/ /**
|
|
13
|
+
* Lattice cell wrapped into [0, freq). Floored, unlike pb.mod, which is WGSL's truncated `%` on
|
|
14
|
+
* WebGPU: that maps the neighbour cell -1 to -1 instead of freq - 1 and breaks the tiling.
|
|
15
|
+
*/ function wrapCell(scope, cell, freq) {
|
|
16
|
+
const pb = scope.$builder;
|
|
17
|
+
return pb.sub(cell, pb.mul(pb.vec3(freq), pb.floor(pb.div(cell, pb.vec3(freq)))));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Integer hash of a lattice cell to [-1, 1]^3 (Dave Hoskins' uint hash, as in 3dVXDc).
|
|
21
|
+
*
|
|
22
|
+
* `seed` shifts the cell by whole cells after the periodic wrap, so a seeded volume still tiles.
|
|
23
|
+
* @internal
|
|
24
|
+
*/ function cloudHash33(scope, p, seed) {
|
|
25
|
+
const pb = scope.$builder;
|
|
26
|
+
const funcName = 'Z_cloudHash33';
|
|
27
|
+
pb.func(funcName, [
|
|
28
|
+
pb.vec3('p'),
|
|
29
|
+
pb.vec3('seed')
|
|
30
|
+
], function() {
|
|
31
|
+
this.$l.UI3 = pb.uvec3(pb.uint(1597334673), pb.uint(3812015801), pb.uint(2798796415));
|
|
32
|
+
this.$l.q = pb.mul(pb.uvec3(pb.ivec3(pb.add(this.p, this.seed))), this.UI3);
|
|
33
|
+
this.$l.h = pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z);
|
|
34
|
+
this.q = pb.mul(this.UI3, this.h);
|
|
35
|
+
this.$return(pb.sub(pb.mul(pb.vec3(this.q), 2 / 0xffffffff), pb.vec3(1)));
|
|
36
|
+
});
|
|
37
|
+
return pb.getGlobalScope()[funcName](p, seed);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Periodic gradient noise (Inigo Quilez) with quintic interpolation, roughly in [-1, 1].
|
|
41
|
+
* @internal
|
|
42
|
+
*/ function cloudGradientNoise(scope, x, freq, seed) {
|
|
43
|
+
const pb = scope.$builder;
|
|
44
|
+
const funcName = 'Z_cloudGradientNoise';
|
|
45
|
+
pb.func(funcName, [
|
|
46
|
+
pb.vec3('x'),
|
|
47
|
+
pb.float('freq'),
|
|
48
|
+
pb.vec3('seed')
|
|
49
|
+
], function() {
|
|
50
|
+
this.$l.p = pb.floor(this.x);
|
|
51
|
+
this.$l.w = pb.fract(this.x);
|
|
52
|
+
// w^3 (w (6 w - 15) + 10)
|
|
53
|
+
this.$l.u = pb.mul(this.w, this.w, this.w, pb.add(pb.mul(this.w, pb.sub(pb.mul(this.w, 6), pb.vec3(15))), pb.vec3(10)));
|
|
54
|
+
const corner = (scope, o)=>cloudHash33(scope, wrapCell(scope, pb.add(scope.p, pb.vec3(o[0], o[1], o[2])), scope.freq), scope.seed);
|
|
55
|
+
this.$l.va = pb.dot(corner(this, [
|
|
56
|
+
0,
|
|
57
|
+
0,
|
|
58
|
+
0
|
|
59
|
+
]), this.w);
|
|
60
|
+
this.$l.vb = pb.dot(corner(this, [
|
|
61
|
+
1,
|
|
62
|
+
0,
|
|
63
|
+
0
|
|
64
|
+
]), pb.sub(this.w, pb.vec3(1, 0, 0)));
|
|
65
|
+
this.$l.vc = pb.dot(corner(this, [
|
|
66
|
+
0,
|
|
67
|
+
1,
|
|
68
|
+
0
|
|
69
|
+
]), pb.sub(this.w, pb.vec3(0, 1, 0)));
|
|
70
|
+
this.$l.vd = pb.dot(corner(this, [
|
|
71
|
+
1,
|
|
72
|
+
1,
|
|
73
|
+
0
|
|
74
|
+
]), pb.sub(this.w, pb.vec3(1, 1, 0)));
|
|
75
|
+
this.$l.ve = pb.dot(corner(this, [
|
|
76
|
+
0,
|
|
77
|
+
0,
|
|
78
|
+
1
|
|
79
|
+
]), pb.sub(this.w, pb.vec3(0, 0, 1)));
|
|
80
|
+
this.$l.vf = pb.dot(corner(this, [
|
|
81
|
+
1,
|
|
82
|
+
0,
|
|
83
|
+
1
|
|
84
|
+
]), pb.sub(this.w, pb.vec3(1, 0, 1)));
|
|
85
|
+
this.$l.vg = pb.dot(corner(this, [
|
|
86
|
+
0,
|
|
87
|
+
1,
|
|
88
|
+
1
|
|
89
|
+
]), pb.sub(this.w, pb.vec3(0, 1, 1)));
|
|
90
|
+
this.$l.vh = pb.dot(corner(this, [
|
|
91
|
+
1,
|
|
92
|
+
1,
|
|
93
|
+
1
|
|
94
|
+
]), pb.sub(this.w, pb.vec3(1, 1, 1)));
|
|
95
|
+
this.$return(pb.add(this.va, pb.mul(this.u.x, pb.sub(this.vb, this.va)), pb.mul(this.u.y, pb.sub(this.vc, this.va)), pb.mul(this.u.z, pb.sub(this.ve, this.va)), pb.mul(this.u.x, this.u.y, pb.sub(pb.add(this.va, this.vd), pb.add(this.vb, this.vc))), pb.mul(this.u.y, this.u.z, pb.sub(pb.add(this.va, this.vg), pb.add(this.vc, this.ve))), pb.mul(this.u.z, this.u.x, pb.sub(pb.add(this.va, this.vf), pb.add(this.vb, this.ve))), pb.mul(this.u.x, this.u.y, this.u.z, pb.sub(pb.add(this.vb, this.vc, this.ve, this.vh), pb.add(this.va, this.vd, this.vf, this.vg)))));
|
|
96
|
+
});
|
|
97
|
+
return pb.getGlobalScope()[funcName](x, freq, seed);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Periodic Worley noise: one minus the squared distance to the nearest feature point.
|
|
101
|
+
* @internal
|
|
102
|
+
*/ function cloudWorleyNoise(scope, uv, freq, seed) {
|
|
103
|
+
const pb = scope.$builder;
|
|
104
|
+
const funcName = 'Z_cloudWorleyNoise';
|
|
105
|
+
pb.func(funcName, [
|
|
106
|
+
pb.vec3('uv'),
|
|
107
|
+
pb.float('freq'),
|
|
108
|
+
pb.vec3('seed')
|
|
109
|
+
], function() {
|
|
110
|
+
this.$l.id = pb.floor(this.uv);
|
|
111
|
+
this.$l.p = pb.fract(this.uv);
|
|
112
|
+
this.$l.minDist = pb.float(10000);
|
|
113
|
+
this.$for(pb.int('x'), -1, 2, function() {
|
|
114
|
+
this.$for(pb.int('y'), -1, 2, function() {
|
|
115
|
+
this.$for(pb.int('z'), -1, 2, function() {
|
|
116
|
+
this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));
|
|
117
|
+
this.$l.h = pb.add(pb.mul(cloudHash33(this, wrapCell(this, pb.add(this.id, this.offset), this.freq), this.seed), 0.5), pb.vec3(0.5), this.offset);
|
|
118
|
+
this.$l.d = pb.sub(this.p, this.h);
|
|
119
|
+
this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
this.$return(pb.sub(1, this.minDist));
|
|
124
|
+
});
|
|
125
|
+
return pb.getGlobalScope()[funcName](uv, freq, seed);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Periodic gradient-noise fbm: `octaves` octaves, frequency doubling, gain 2^-0.85.
|
|
129
|
+
* @internal
|
|
130
|
+
*/ function cloudPerlinFbm(scope, p, freq, octaves, seed) {
|
|
131
|
+
const pb = scope.$builder;
|
|
132
|
+
const funcName = `Z_cloudPerlinFbm${octaves}`;
|
|
133
|
+
pb.func(funcName, [
|
|
134
|
+
pb.vec3('p'),
|
|
135
|
+
pb.float('freq'),
|
|
136
|
+
pb.vec3('seed')
|
|
137
|
+
], function() {
|
|
138
|
+
this.$l.f = this.freq;
|
|
139
|
+
this.$l.amp = pb.float(1);
|
|
140
|
+
this.$l.noise = pb.float(0);
|
|
141
|
+
this.$for(pb.int('i'), 0, octaves, function() {
|
|
142
|
+
this.noise = pb.add(this.noise, pb.mul(this.amp, cloudGradientNoise(this, pb.mul(this.p, this.f), this.f, this.seed)));
|
|
143
|
+
this.f = pb.mul(this.f, 2);
|
|
144
|
+
this.amp = pb.mul(this.amp, Math.pow(2, -0.85));
|
|
145
|
+
});
|
|
146
|
+
this.$return(this.noise);
|
|
147
|
+
});
|
|
148
|
+
return pb.getGlobalScope()[funcName](p, freq, seed);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Periodic Worley fbm: three octaves at freq, 2 freq and 4 freq weighted 0.625 / 0.25 / 0.125.
|
|
152
|
+
* @internal
|
|
153
|
+
*/ function cloudWorleyFbm(scope, p, freq, seed) {
|
|
154
|
+
const pb = scope.$builder;
|
|
155
|
+
const funcName = 'Z_cloudWorleyFbm';
|
|
156
|
+
pb.func(funcName, [
|
|
157
|
+
pb.vec3('p'),
|
|
158
|
+
pb.float('freq'),
|
|
159
|
+
pb.vec3('seed')
|
|
160
|
+
], function() {
|
|
161
|
+
this.$return(pb.add(pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq), this.freq, this.seed), 0.625), pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2), this.seed), 0.25), pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4), this.seed), 0.125)));
|
|
162
|
+
});
|
|
163
|
+
return pb.getGlobalScope()[funcName](p, freq, seed);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Perlin-Worley of Nubis (Schneider, "Nubis: Authoring Real-Time Volumetric Cloudscapes with the
|
|
167
|
+
* Decima Engine", SIGGRAPH 2017, slide 34): `remap(perlin, 1 - worley, 1, 0, 1)`, the web of the
|
|
168
|
+
* Worley noise subtracted from the low density regions of a billowy Perlin fbm, which puts round
|
|
169
|
+
* shapes there. `worley` is the Worley fbm at the same frequency.
|
|
170
|
+
* @internal
|
|
171
|
+
*/ function cloudPerlinWorley(scope, p, freq, worley, seed, octaves = 7) {
|
|
172
|
+
const pb = scope.$builder;
|
|
173
|
+
const funcName = `Z_cloudPerlinWorley${octaves}`;
|
|
174
|
+
pb.func(funcName, [
|
|
175
|
+
pb.vec3('p'),
|
|
176
|
+
pb.float('freq'),
|
|
177
|
+
pb.float('worley'),
|
|
178
|
+
pb.vec3('seed')
|
|
179
|
+
], function() {
|
|
180
|
+
this.$l.pfbm = pb.mix(1, cloudPerlinFbm(this, this.p, this.freq, octaves, this.seed), 0.5);
|
|
181
|
+
// Billowy: fold the fbm around its midpoint
|
|
182
|
+
this.pfbm = pb.abs(pb.sub(pb.mul(this.pfbm, 2), 1));
|
|
183
|
+
this.$return(pb.clamp(pb.div(pb.sub(this.pfbm, pb.sub(1, this.worley)), pb.max(this.worley, 1e-6)), 0, 1));
|
|
184
|
+
});
|
|
185
|
+
return pb.getGlobalScope()[funcName](p, freq, worley, seed);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export { cloudGradientNoise, cloudHash33, cloudPerlinFbm, cloudPerlinWorley, cloudWorleyFbm, cloudWorleyNoise };
|
|
189
|
+
//# sourceMappingURL=cloud_noise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud_noise.js","sources":["../../../src/render/volumetric_cloud/cloud_noise.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/*\r\n * Tileable noise for the volumetric cloud volumes.\r\n *\r\n * Follows piyushslayer's \"Tileable Perlin-Worley 3D\" (https://www.shadertoy.com/view/3dVXDc),\r\n * which builds the volumes of Schneider, \"The Real-time Volumetric Cloudscapes of Horizon Zero\r\n * Dawn\" (SIGGRAPH 2015) after Hillaire's TileableVolumeNoise\r\n * (https://github.com/sebh/TileableVolumeNoise): gradient noise by Inigo Quilez and Worley noise,\r\n * both made periodic by wrapping the lattice cell modulo the frequency.\r\n *\r\n * Every function takes the frequency in lattice cells per period, so a coordinate in [0, 1)\r\n * scaled by `freq` repeats exactly over the unit cube.\r\n */\r\n\r\n/**\r\n * Lattice cell wrapped into [0, freq). Floored, unlike pb.mod, which is WGSL's truncated `%` on\r\n * WebGPU: that maps the neighbour cell -1 to -1 instead of freq - 1 and breaks the tiling.\r\n */\r\nfunction wrapCell(scope: PBInsideFunctionScope, cell: PBShaderExp, freq: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.sub(cell, pb.mul(pb.vec3(freq), pb.floor(pb.div(cell, pb.vec3(freq)))));\r\n}\r\n\r\n/**\r\n * Integer hash of a lattice cell to [-1, 1]^3 (Dave Hoskins' uint hash, as in 3dVXDc).\r\n *\r\n * `seed` shifts the cell by whole cells after the periodic wrap, so a seeded volume still tiles.\r\n * @internal\r\n */\r\nexport function cloudHash33(scope: PBInsideFunctionScope, p: PBShaderExp, seed: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudHash33';\r\n pb.func(funcName, [pb.vec3('p'), pb.vec3('seed')], function () {\r\n this.$l.UI3 = pb.uvec3(pb.uint(1597334673), pb.uint(3812015801), pb.uint(2798796415));\r\n this.$l.q = pb.mul(pb.uvec3(pb.ivec3(pb.add(this.p, this.seed))), this.UI3);\r\n this.$l.h = pb.compXor(pb.compXor(this.q.x, this.q.y), this.q.z);\r\n this.q = pb.mul(this.UI3, this.h);\r\n this.$return(pb.sub(pb.mul(pb.vec3(this.q), 2 / 0xffffffff), pb.vec3(1)));\r\n });\r\n return pb.getGlobalScope()[funcName](p, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic gradient noise (Inigo Quilez) with quintic interpolation, roughly in [-1, 1].\r\n * @internal\r\n */\r\nexport function cloudGradientNoise(\r\n scope: PBInsideFunctionScope,\r\n x: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudGradientNoise';\r\n pb.func(funcName, [pb.vec3('x'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$l.p = pb.floor(this.x);\r\n this.$l.w = pb.fract(this.x);\r\n // w^3 (w (6 w - 15) + 10)\r\n this.$l.u = pb.mul(\r\n this.w,\r\n this.w,\r\n this.w,\r\n pb.add(pb.mul(this.w, pb.sub(pb.mul(this.w, 6), pb.vec3(15))), pb.vec3(10))\r\n );\r\n const corner = (scope: PBInsideFunctionScope, o: number[]) =>\r\n cloudHash33(scope, wrapCell(scope, pb.add(scope.p, pb.vec3(o[0], o[1], o[2])), scope.freq), scope.seed);\r\n this.$l.va = pb.dot(corner(this, [0, 0, 0]), this.w);\r\n this.$l.vb = pb.dot(corner(this, [1, 0, 0]), pb.sub(this.w, pb.vec3(1, 0, 0)));\r\n this.$l.vc = pb.dot(corner(this, [0, 1, 0]), pb.sub(this.w, pb.vec3(0, 1, 0)));\r\n this.$l.vd = pb.dot(corner(this, [1, 1, 0]), pb.sub(this.w, pb.vec3(1, 1, 0)));\r\n this.$l.ve = pb.dot(corner(this, [0, 0, 1]), pb.sub(this.w, pb.vec3(0, 0, 1)));\r\n this.$l.vf = pb.dot(corner(this, [1, 0, 1]), pb.sub(this.w, pb.vec3(1, 0, 1)));\r\n this.$l.vg = pb.dot(corner(this, [0, 1, 1]), pb.sub(this.w, pb.vec3(0, 1, 1)));\r\n this.$l.vh = pb.dot(corner(this, [1, 1, 1]), pb.sub(this.w, pb.vec3(1, 1, 1)));\r\n this.$return(\r\n pb.add(\r\n this.va,\r\n pb.mul(this.u.x, pb.sub(this.vb, this.va)),\r\n pb.mul(this.u.y, pb.sub(this.vc, this.va)),\r\n pb.mul(this.u.z, pb.sub(this.ve, this.va)),\r\n pb.mul(this.u.x, this.u.y, pb.sub(pb.add(this.va, this.vd), pb.add(this.vb, this.vc))),\r\n pb.mul(this.u.y, this.u.z, pb.sub(pb.add(this.va, this.vg), pb.add(this.vc, this.ve))),\r\n pb.mul(this.u.z, this.u.x, pb.sub(pb.add(this.va, this.vf), pb.add(this.vb, this.ve))),\r\n pb.mul(\r\n this.u.x,\r\n this.u.y,\r\n this.u.z,\r\n pb.sub(pb.add(this.vb, this.vc, this.ve, this.vh), pb.add(this.va, this.vd, this.vf, this.vg))\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](x, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic Worley noise: one minus the squared distance to the nearest feature point.\r\n * @internal\r\n */\r\nexport function cloudWorleyNoise(\r\n scope: PBInsideFunctionScope,\r\n uv: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudWorleyNoise';\r\n pb.func(funcName, [pb.vec3('uv'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$l.id = pb.floor(this.uv);\r\n this.$l.p = pb.fract(this.uv);\r\n this.$l.minDist = pb.float(10000);\r\n this.$for(pb.int('x'), -1, 2, function () {\r\n this.$for(pb.int('y'), -1, 2, function () {\r\n this.$for(pb.int('z'), -1, 2, function () {\r\n this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));\r\n this.$l.h = pb.add(\r\n pb.mul(\r\n cloudHash33(this, wrapCell(this, pb.add(this.id, this.offset), this.freq), this.seed),\r\n 0.5\r\n ),\r\n pb.vec3(0.5),\r\n this.offset\r\n );\r\n this.$l.d = pb.sub(this.p, this.h);\r\n this.minDist = pb.min(this.minDist, pb.dot(this.d, this.d));\r\n });\r\n });\r\n });\r\n this.$return(pb.sub(1, this.minDist));\r\n });\r\n return pb.getGlobalScope()[funcName](uv, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic gradient-noise fbm: `octaves` octaves, frequency doubling, gain 2^-0.85.\r\n * @internal\r\n */\r\nexport function cloudPerlinFbm(\r\n scope: PBInsideFunctionScope,\r\n p: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n octaves: number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_cloudPerlinFbm${octaves}`;\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$l.f = this.freq;\r\n this.$l.amp = pb.float(1);\r\n this.$l.noise = pb.float(0);\r\n this.$for(pb.int('i'), 0, octaves, function () {\r\n this.noise = pb.add(\r\n this.noise,\r\n pb.mul(this.amp, cloudGradientNoise(this, pb.mul(this.p, this.f), this.f, this.seed))\r\n );\r\n this.f = pb.mul(this.f, 2);\r\n this.amp = pb.mul(this.amp, Math.pow(2, -0.85));\r\n });\r\n this.$return(this.noise);\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Periodic Worley fbm: three octaves at freq, 2 freq and 4 freq weighted 0.625 / 0.25 / 0.125.\r\n * @internal\r\n */\r\nexport function cloudWorleyFbm(\r\n scope: PBInsideFunctionScope,\r\n p: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n seed: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_cloudWorleyFbm';\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq'), pb.vec3('seed')], function () {\r\n this.$return(\r\n pb.add(\r\n pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq), this.freq, this.seed), 0.625),\r\n pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 2), pb.mul(this.freq, 2), this.seed), 0.25),\r\n pb.mul(cloudWorleyNoise(this, pb.mul(this.p, this.freq, 4), pb.mul(this.freq, 4), this.seed), 0.125)\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq, seed) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Perlin-Worley of Nubis (Schneider, \"Nubis: Authoring Real-Time Volumetric Cloudscapes with the\r\n * Decima Engine\", SIGGRAPH 2017, slide 34): `remap(perlin, 1 - worley, 1, 0, 1)`, the web of the\r\n * Worley noise subtracted from the low density regions of a billowy Perlin fbm, which puts round\r\n * shapes there. `worley` is the Worley fbm at the same frequency.\r\n * @internal\r\n */\r\nexport function cloudPerlinWorley(\r\n scope: PBInsideFunctionScope,\r\n p: PBShaderExp,\r\n freq: PBShaderExp | number,\r\n worley: PBShaderExp,\r\n seed: PBShaderExp,\r\n octaves = 7\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = `Z_cloudPerlinWorley${octaves}`;\r\n pb.func(funcName, [pb.vec3('p'), pb.float('freq'), pb.float('worley'), pb.vec3('seed')], function () {\r\n this.$l.pfbm = pb.mix(1, cloudPerlinFbm(this, this.p, this.freq, octaves, this.seed), 0.5);\r\n // Billowy: fold the fbm around its midpoint\r\n this.pfbm = pb.abs(pb.sub(pb.mul(this.pfbm, 2), 1));\r\n this.$return(\r\n pb.clamp(pb.div(pb.sub(this.pfbm, pb.sub(1, this.worley)), pb.max(this.worley, 1e-6)), 0, 1)\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](p, freq, worley, seed) as PBShaderExp;\r\n}\r\n"],"names":["wrapCell","scope","cell","freq","pb","$builder","sub","mul","vec3","floor","div","cloudHash33","p","seed","funcName","func","$l","UI3","uvec3","uint","q","ivec3","add","h","compXor","x","y","z","$return","getGlobalScope","cloudGradientNoise","float","w","fract","u","corner","o","va","dot","vb","vc","vd","ve","vf","vg","vh","cloudWorleyNoise","uv","id","minDist","$for","int","offset","d","min","cloudPerlinFbm","octaves","f","amp","noise","Math","pow","cloudWorleyFbm","cloudPerlinWorley","worley","pfbm","mix","abs","clamp","max"],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Vector4 } from '@zephyr3d/base';
|
|
2
|
+
import { getDevice } from '../../app/api.js';
|
|
3
|
+
import { fetchSampler } from '../../utility/misc.js';
|
|
4
|
+
import { drawFullscreenQuad } from '../fullscreenquad.js';
|
|
5
|
+
import { getCloudParamsStruct, cloudSampleDensity } from './cloud_common.js';
|
|
6
|
+
|
|
7
|
+
let volumeProgram = null;
|
|
8
|
+
let mapProgram = null;
|
|
9
|
+
let volumeBindGroup = null;
|
|
10
|
+
let mapBindGroup = null;
|
|
11
|
+
const densityPrograms = new Map();
|
|
12
|
+
function createProgram(volume, densityView) {
|
|
13
|
+
const device = getDevice();
|
|
14
|
+
return device.buildRenderProgram({
|
|
15
|
+
label: volume ? 'CloudDebugVolume' : 'CloudDebugMap',
|
|
16
|
+
vertex (pb) {
|
|
17
|
+
this.flip = pb.int().uniform(0);
|
|
18
|
+
this.$inputs.pos = pb.vec2().attrib('position');
|
|
19
|
+
this.$outputs.uv = pb.vec2();
|
|
20
|
+
pb.main(function() {
|
|
21
|
+
this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);
|
|
22
|
+
this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
|
|
23
|
+
this.$if(pb.notEqual(this.flip, 0), function() {
|
|
24
|
+
this.$builtins.position.y = pb.neg(this.$builtins.position.y);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
fragment (pb) {
|
|
29
|
+
if (densityView) {
|
|
30
|
+
this.cloud = getCloudParamsStruct(pb)().uniform(0);
|
|
31
|
+
this.weatherMap = pb.tex2D().uniform(0);
|
|
32
|
+
this.baseNoise = pb.tex3D().uniform(0);
|
|
33
|
+
this.detailNoise = pb.tex3D().uniform(0);
|
|
34
|
+
} else {
|
|
35
|
+
this.tex = volume ? pb.tex3D().uniform(0) : pb.tex2D().uniform(0);
|
|
36
|
+
}
|
|
37
|
+
// (slice, channel, 0, 0)
|
|
38
|
+
this.params = pb.vec4().uniform(0);
|
|
39
|
+
this.$outputs.color = pb.vec4();
|
|
40
|
+
pb.main(function() {
|
|
41
|
+
if (densityView) {
|
|
42
|
+
const xy = densityView.endsWith('XY');
|
|
43
|
+
this.$l.uv = this.$inputs.uv;
|
|
44
|
+
this.$l.h = xy ? this.uv.y : this.params.x;
|
|
45
|
+
this.$l.xz = pb.div(xy ? pb.vec2(this.uv.x, this.params.x) : this.uv, this.cloud.scales.x);
|
|
46
|
+
this.$l.r = pb.mix(this.cloud.layer.x, this.cloud.layer.y, this.h);
|
|
47
|
+
// Planet-fixed XZ coordinates; the slice follows the spherical layer at each height.
|
|
48
|
+
this.$l.planet = pb.vec3(this.xz.x, pb.sqrt(pb.max(pb.sub(pb.mul(this.r, this.r), pb.dot(this.xz, this.xz)), 0)), this.xz.y);
|
|
49
|
+
this.$l.p = pb.mul(this.cloud.referential, pb.vec4(this.planet, 0)).xyz;
|
|
50
|
+
this.$l.medium = cloudSampleDensity(this, this.cloud, this.p, this.weatherMap, this.baseNoise, this.detailNoise, densityView.startsWith('profile') ? 'profile' : densityView.startsWith('base') ? 'base' : 'density');
|
|
51
|
+
this.$l.value = pb.clamp(pb.div(this.medium.x, pb.max(this.cloud.density.y, 1e-6)), 0, 1);
|
|
52
|
+
this.$outputs.color = pb.vec4(pb.vec3(this.value), 1);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.$l.value = volume ? pb.textureSampleLevel(this.tex, pb.vec3(this.$inputs.uv, this.params.x), 0) : pb.textureSampleLevel(this.tex, this.$inputs.uv, 0);
|
|
56
|
+
this.$l.channel = pb.int(this.params.y);
|
|
57
|
+
this.$l.rgb = this.value.rgb;
|
|
58
|
+
this.$if(pb.equal(this.channel, 1), function() {
|
|
59
|
+
this.rgb = pb.vec3(this.value.r);
|
|
60
|
+
}).$elseif(pb.equal(this.channel, 2), function() {
|
|
61
|
+
this.rgb = pb.vec3(this.value.g);
|
|
62
|
+
}).$elseif(pb.equal(this.channel, 3), function() {
|
|
63
|
+
this.rgb = pb.vec3(this.value.b);
|
|
64
|
+
}).$elseif(pb.equal(this.channel, 4), function() {
|
|
65
|
+
this.rgb = pb.vec3(this.value.a);
|
|
66
|
+
});
|
|
67
|
+
this.$outputs.color = pb.vec4(this.rgb, 1);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Covers the current render target with a cloud resource: a slice of a noise volume or the
|
|
74
|
+
* weather map. `channel` 0 shows RGB, 1-4 one channel as grey.
|
|
75
|
+
* @internal
|
|
76
|
+
*/ function drawVolumetricCloudDebug(resources, view, slice, channel, densityParams) {
|
|
77
|
+
if (view.endsWith('XY') || view.endsWith('XZ')) {
|
|
78
|
+
if (!densityParams || !resources.weatherMap || !resources.baseNoise || !resources.detailNoise) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const device = getDevice();
|
|
82
|
+
let entry = densityPrograms.get(view);
|
|
83
|
+
if (!entry) {
|
|
84
|
+
const program = createProgram(false, view);
|
|
85
|
+
entry = {
|
|
86
|
+
program,
|
|
87
|
+
bindGroup: device.createBindGroup(program.bindGroupLayouts[0])
|
|
88
|
+
};
|
|
89
|
+
densityPrograms.set(view, entry);
|
|
90
|
+
}
|
|
91
|
+
const { program, bindGroup } = entry;
|
|
92
|
+
bindGroup.setValue('cloud', densityParams);
|
|
93
|
+
bindGroup.setValue('params', new Vector4(slice, 0, 0, 0));
|
|
94
|
+
bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);
|
|
95
|
+
bindGroup.setTexture('weatherMap', resources.weatherMap, fetchSampler('repeat_linear'));
|
|
96
|
+
bindGroup.setTexture('baseNoise', resources.baseNoise);
|
|
97
|
+
bindGroup.setTexture('detailNoise', resources.detailNoise);
|
|
98
|
+
device.setProgram(program);
|
|
99
|
+
device.setBindGroup(0, bindGroup);
|
|
100
|
+
drawFullscreenQuad();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const tex = view === 'baseNoise' ? resources.baseNoise : view === 'detailNoise' ? resources.detailNoise : view === 'weather' ? resources.weatherMap : null;
|
|
104
|
+
if (!tex) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const device = getDevice();
|
|
108
|
+
const volume = tex.isTexture3D();
|
|
109
|
+
let program;
|
|
110
|
+
let bindGroup;
|
|
111
|
+
if (volume) {
|
|
112
|
+
volumeProgram = volumeProgram ?? createProgram(true);
|
|
113
|
+
volumeBindGroup = volumeBindGroup ?? device.createBindGroup(volumeProgram.bindGroupLayouts[0]);
|
|
114
|
+
program = volumeProgram;
|
|
115
|
+
bindGroup = volumeBindGroup;
|
|
116
|
+
} else {
|
|
117
|
+
mapProgram = mapProgram ?? createProgram(false);
|
|
118
|
+
mapBindGroup = mapBindGroup ?? device.createBindGroup(mapProgram.bindGroupLayouts[0]);
|
|
119
|
+
program = mapProgram;
|
|
120
|
+
bindGroup = mapBindGroup;
|
|
121
|
+
}
|
|
122
|
+
bindGroup.setTexture('tex', tex, fetchSampler('repeat_linear_nomip'));
|
|
123
|
+
bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);
|
|
124
|
+
bindGroup.setValue('params', new Vector4(slice, channel, 0, 0));
|
|
125
|
+
device.setProgram(program);
|
|
126
|
+
device.setBindGroup(0, bindGroup);
|
|
127
|
+
drawFullscreenQuad();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export { drawVolumetricCloudDebug };
|
|
131
|
+
//# sourceMappingURL=debug_view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug_view.js","sources":["../../../src/render/volumetric_cloud/debug_view.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport type { Matrix4x4 } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { BindGroup, GPUProgram } from '@zephyr3d/device';\r\nimport { getDevice } from '../../app/api';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { drawFullscreenQuad } from '../fullscreenquad';\r\nimport type { VolumetricCloudResources } from './resources';\r\nimport type { VolumetricCloudDebugView } from './volumetric_cloud';\r\nimport { cloudSampleDensity, getCloudParamsStruct } from './cloud_common';\r\n\r\nlet volumeProgram: Nullable<GPUProgram> = null;\r\nlet mapProgram: Nullable<GPUProgram> = null;\r\nlet volumeBindGroup: Nullable<BindGroup> = null;\r\nlet mapBindGroup: Nullable<BindGroup> = null;\r\nconst densityPrograms = new Map<string, { program: GPUProgram; bindGroup: BindGroup }>();\r\n\r\nfunction createProgram(volume: boolean, densityView?: string) {\r\n const device = getDevice();\r\n return device.buildRenderProgram({\r\n label: volume ? 'CloudDebugVolume' : 'CloudDebugMap',\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 if (densityView) {\r\n this.cloud = getCloudParamsStruct(pb)().uniform(0);\r\n this.weatherMap = pb.tex2D().uniform(0);\r\n this.baseNoise = pb.tex3D().uniform(0);\r\n this.detailNoise = pb.tex3D().uniform(0);\r\n } else {\r\n this.tex = volume ? pb.tex3D().uniform(0) : pb.tex2D().uniform(0);\r\n }\r\n // (slice, channel, 0, 0)\r\n this.params = pb.vec4().uniform(0);\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n if (densityView) {\r\n const xy = densityView.endsWith('XY');\r\n this.$l.uv = this.$inputs.uv;\r\n this.$l.h = xy ? this.uv.y : this.params.x;\r\n this.$l.xz = pb.div(xy ? pb.vec2(this.uv.x, this.params.x) : this.uv, this.cloud.scales.x);\r\n this.$l.r = pb.mix(this.cloud.layer.x, this.cloud.layer.y, this.h);\r\n // Planet-fixed XZ coordinates; the slice follows the spherical layer at each height.\r\n this.$l.planet = pb.vec3(\r\n this.xz.x,\r\n pb.sqrt(pb.max(pb.sub(pb.mul(this.r, this.r), pb.dot(this.xz, this.xz)), 0)),\r\n this.xz.y\r\n );\r\n this.$l.p = pb.mul(this.cloud.referential, pb.vec4(this.planet, 0)).xyz;\r\n this.$l.medium = cloudSampleDensity(\r\n this,\r\n this.cloud,\r\n this.p,\r\n this.weatherMap,\r\n this.baseNoise,\r\n this.detailNoise,\r\n densityView.startsWith('profile')\r\n ? 'profile'\r\n : densityView.startsWith('base')\r\n ? 'base'\r\n : 'density'\r\n );\r\n this.$l.value = pb.clamp(pb.div(this.medium.x, pb.max(this.cloud.density.y, 1e-6)), 0, 1);\r\n this.$outputs.color = pb.vec4(pb.vec3(this.value), 1);\r\n return;\r\n }\r\n this.$l.value = volume\r\n ? pb.textureSampleLevel(this.tex, pb.vec3(this.$inputs.uv, this.params.x), 0)\r\n : pb.textureSampleLevel(this.tex, this.$inputs.uv, 0);\r\n this.$l.channel = pb.int(this.params.y);\r\n this.$l.rgb = this.value.rgb;\r\n this.$if(pb.equal(this.channel, 1), function () {\r\n this.rgb = pb.vec3(this.value.r);\r\n })\r\n .$elseif(pb.equal(this.channel, 2), function () {\r\n this.rgb = pb.vec3(this.value.g);\r\n })\r\n .$elseif(pb.equal(this.channel, 3), function () {\r\n this.rgb = pb.vec3(this.value.b);\r\n })\r\n .$elseif(pb.equal(this.channel, 4), function () {\r\n this.rgb = pb.vec3(this.value.a);\r\n });\r\n this.$outputs.color = pb.vec4(this.rgb, 1);\r\n });\r\n }\r\n })!;\r\n}\r\n\r\n/**\r\n * Covers the current render target with a cloud resource: a slice of a noise volume or the\r\n * weather map. `channel` 0 shows RGB, 1-4 one channel as grey.\r\n * @internal\r\n */\r\nexport function drawVolumetricCloudDebug(\r\n resources: VolumetricCloudResources,\r\n view: VolumetricCloudDebugView,\r\n slice: number,\r\n channel: number,\r\n densityParams?: Nullable<Record<string, Vector4 | Matrix4x4>>\r\n) {\r\n if (view.endsWith('XY') || view.endsWith('XZ')) {\r\n if (!densityParams || !resources.weatherMap || !resources.baseNoise || !resources.detailNoise) {\r\n return;\r\n }\r\n const device = getDevice();\r\n let entry = densityPrograms.get(view);\r\n if (!entry) {\r\n const program = createProgram(false, view);\r\n entry = { program, bindGroup: device.createBindGroup(program.bindGroupLayouts[0]) };\r\n densityPrograms.set(view, entry);\r\n }\r\n const { program, bindGroup } = entry;\r\n bindGroup.setValue('cloud', densityParams);\r\n bindGroup.setValue('params', new Vector4(slice, 0, 0, 0));\r\n bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);\r\n bindGroup.setTexture('weatherMap', resources.weatherMap, fetchSampler('repeat_linear'));\r\n bindGroup.setTexture('baseNoise', resources.baseNoise);\r\n bindGroup.setTexture('detailNoise', resources.detailNoise);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n return;\r\n }\r\n const tex =\r\n view === 'baseNoise'\r\n ? resources.baseNoise\r\n : view === 'detailNoise'\r\n ? resources.detailNoise\r\n : view === 'weather'\r\n ? resources.weatherMap\r\n : null;\r\n if (!tex) {\r\n return;\r\n }\r\n const device = getDevice();\r\n const volume = tex.isTexture3D();\r\n let program: GPUProgram;\r\n let bindGroup: BindGroup;\r\n if (volume) {\r\n volumeProgram = volumeProgram ?? createProgram(true);\r\n volumeBindGroup = volumeBindGroup ?? device.createBindGroup(volumeProgram.bindGroupLayouts[0]);\r\n program = volumeProgram;\r\n bindGroup = volumeBindGroup;\r\n } else {\r\n mapProgram = mapProgram ?? createProgram(false);\r\n mapBindGroup = mapBindGroup ?? device.createBindGroup(mapProgram.bindGroupLayouts[0]);\r\n program = mapProgram;\r\n bindGroup = mapBindGroup;\r\n }\r\n bindGroup.setTexture('tex', tex, fetchSampler('repeat_linear_nomip'));\r\n bindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);\r\n bindGroup.setValue('params', new Vector4(slice, channel, 0, 0));\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n}\r\n"],"names":["volumeProgram","mapProgram","volumeBindGroup","mapBindGroup","densityPrograms","Map","createProgram","volume","densityView","device","getDevice","buildRenderProgram","label","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","cloud","getCloudParamsStruct","weatherMap","tex2D","baseNoise","tex3D","detailNoise","tex","params","color","endsWith","$l","h","x","xz","div","scales","r","mix","layer","planet","vec3","sqrt","max","sub","dot","p","referential","xyz","medium","cloudSampleDensity","startsWith","value","clamp","density","textureSampleLevel","channel","rgb","equal","$elseif","g","b","a","drawVolumetricCloudDebug","resources","view","slice","densityParams","entry","get","program","bindGroup","createBindGroup","bindGroupLayouts","set","setValue","Vector4","type","getFramebuffer","setTexture","fetchSampler","setProgram","setBindGroup","drawFullscreenQuad","isTexture3D"],"mappings":"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"}
|