@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":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Nullable<Texture2D>;\r\n protected _sampler: Nullable<TextureSampler>;\r\n protected _blurSizeTex: Nullable<Texture2D>;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex() {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex() {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex() {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale() {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler() {\r\n return this._sampler;\r\n }\r\n set sampler(sampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar() {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n get size() {\r\n return this._size;\r\n }\r\n set size(val) {\r\n this._size.set(val);\r\n }\r\n get stepSize() {\r\n return this._stepSize;\r\n }\r\n set stepSize(val) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev() {\r\n return this._stdDev;\r\n }\r\n set stdDev(val) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius() {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash() {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n // The bilateral depth input is linear r32f/rg32f and always uses a\r\n // nearest sampler, so it must not require float32-filterable.\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex!, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 =\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.depthValue)\r\n : this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum as PBShaderExp;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","sampleType","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","depth01","getDevice","decodeNormalizedFloatFromRGBA","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Nullable<Texture2D>;\r\n protected _sampler: Nullable<TextureSampler>;\r\n protected _blurSizeTex: Nullable<Texture2D>;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex() {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex() {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex() {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale() {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler() {\r\n return this._sampler;\r\n }\r\n set sampler(sampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar() {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n get size() {\r\n return this._size;\r\n }\r\n set size(val) {\r\n this._size.set(val);\r\n }\r\n get stepSize() {\r\n return this._stepSize;\r\n }\r\n set stepSize(val) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev() {\r\n return this._stdDev;\r\n }\r\n set stdDev(val) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius() {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash() {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n // The bilateral depth input is linear r32f/rg32f and always uses a\r\n // nearest sampler, so it must not require float32-filterable.\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex!, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 = this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum as PBShaderExp;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","sampleType","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","depth01","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Blitter } from './blitter.js';
|
|
2
|
-
import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Gaussian blur blitter
|
|
@@ -127,11 +126,7 @@ import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
|
|
|
127
126
|
pb.vec2('uv')
|
|
128
127
|
], function() {
|
|
129
128
|
this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);
|
|
130
|
-
|
|
131
|
-
this.$return(decodeNormalizedFloatFromRGBA(this, this.depthValue));
|
|
132
|
-
} else {
|
|
133
|
-
this.$return(this.depthValue.r);
|
|
134
|
-
}
|
|
129
|
+
this.$return(this.depthValue.r);
|
|
135
130
|
});
|
|
136
131
|
}
|
|
137
132
|
scope.incrementalGaussian = pb.vec3();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianblur.js","sources":["../../src/blitter/gaussianblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Gaussian blur blitter\r\n * @public\r\n */\r\nexport class GaussianBlurBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /** @internal */\r\n protected _depthTex: Nullable<Texture2D>;\r\n /** @internal */\r\n protected _depthCutoff: number;\r\n /**\r\n * Creates an instance of GaussianBlurBlitter\r\n * @param phase - Blitter phase\r\n * @param kernalSize - kernel size\r\n * @param sigma - Gaussian standard deviation\r\n * @param blurSize - Blur radius\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernalSize: number, sigma: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernalSize;\r\n this._sigma = sigma;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n this._depthTex = null;\r\n this._depthCutoff = 0.7;\r\n }\r\n /** Blur radius */\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n /** Kernel size */\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n if (this._kernelSize !== val) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** true if the box filter will be applied in logarithmic space */\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n if (this._logSpace !== !!val) {\r\n this._logSpace = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** Multiplier for logarithmic space blur */\r\n get logSpaceMultiplier() {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /** Linear depth texture */\r\n get depthTexture() {\r\n return this._depthTex;\r\n }\r\n set depthTexture(tex) {\r\n if (this._depthTex !== tex) {\r\n if (!tex || !this._depthTex) {\r\n this.invalidateHash();\r\n }\r\n this._depthTex = tex;\r\n }\r\n }\r\n /** Depth cutoff */\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n if (this._depthTex) {\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n scope.depthCutoff = pb.float().uniform(0);\r\n }\r\n scope.sigma = pb.float().uniform(0);\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('sigma', this._sigma);\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n if (this._depthTex) {\r\n bindGroup.setTexture('depthTex', this._depthTex);\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n if (that._depthTex) {\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthValue));\r\n } else {\r\n this.$return(this.depthValue.r);\r\n }\r\n });\r\n }\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.minExpValue = pb.vec4(87, 87, 87, 87);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.incrementalGaussian.x);\r\n } else {\r\n scope.avgValue = pb.mul(\r\n that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType),\r\n scope.incrementalGaussian.x\r\n );\r\n }\r\n if (that._depthTex) {\r\n scope.centerDepth = scope.getLinearDepth(srcUV);\r\n }\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.uv1 = pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d1 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth1 = this.getLinearDepth(this.uv1);\r\n this.$l.test1 = pb.lessThan(pb.abs(pb.sub(this.depth1, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test1 = true;\r\n }\r\n this.$if(this.test1, function () {\r\n this.d1 = that.readTexel(scope, type, srcTex, this.uv1, srcLayer, sampleType);\r\n });\r\n this.$l.uv2 = pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d2 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth2 = this.getLinearDepth(this.uv2);\r\n this.$l.test2 = pb.lessThan(pb.abs(pb.sub(this.depth2, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test2 = true;\r\n }\r\n this.$if(this.test2, function () {\r\n this.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d1, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d2, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d1, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d2, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.outColor = pb.div(scope.avgValue, scope.coefficientSum);\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.outColor = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.outColor));\r\n } else {\r\n scope.outColor = pb.add(scope.d0, pb.log(scope.outColor));\r\n }\r\n }\r\n return scope.outColor as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash() {\r\n return `${this._depthTex ? 1 : 0}-${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["GaussianBlurBlitter","Blitter","phase","kernalSize","sigma","blurSize","_phase","_kernelSize","_sigma","_blurSize","_logSpace","_logSpaceMultiplier","_depthTex","_depthCutoff","val","kernelSize","invalidateHash","logSpace","logSpaceMultiplier","depthTexture","tex","depthCutoff","setup","scope","type","pb","$builder","shaderKind","depthTex","tex2D","sampleType","uniform","float","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","setUniforms","bindGroup","setValue","setTexture","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","getDevice","$return","decodeNormalizedFloatFromRGBA","r","incrementalGaussian","x","div","mul","Math","sqrt","PI","y","exp","z","coefficientSum","minExpValue","vec4","d0","readTexel","avgValue","centerDepth","getLinearDepth","add","xy","yz","$for","uv1","sub","i","d1","depth1","test1","lessThan","abs","$if","uv2","d2","depth2","test2","min","outColor","log"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gaussianblur.js","sources":["../../src/blitter/gaussianblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Gaussian blur blitter\r\n * @public\r\n */\r\nexport class GaussianBlurBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /** @internal */\r\n protected _depthTex: Nullable<Texture2D>;\r\n /** @internal */\r\n protected _depthCutoff: number;\r\n /**\r\n * Creates an instance of GaussianBlurBlitter\r\n * @param phase - Blitter phase\r\n * @param kernalSize - kernel size\r\n * @param sigma - Gaussian standard deviation\r\n * @param blurSize - Blur radius\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernalSize: number, sigma: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernalSize;\r\n this._sigma = sigma;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n this._depthTex = null;\r\n this._depthCutoff = 0.7;\r\n }\r\n /** Blur radius */\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n /** Kernel size */\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n if (this._kernelSize !== val) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** true if the box filter will be applied in logarithmic space */\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n if (this._logSpace !== !!val) {\r\n this._logSpace = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** Multiplier for logarithmic space blur */\r\n get logSpaceMultiplier() {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /** Linear depth texture */\r\n get depthTexture() {\r\n return this._depthTex;\r\n }\r\n set depthTexture(tex) {\r\n if (this._depthTex !== tex) {\r\n if (!tex || !this._depthTex) {\r\n this.invalidateHash();\r\n }\r\n this._depthTex = tex;\r\n }\r\n }\r\n /** Depth cutoff */\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n if (this._depthTex) {\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n scope.depthCutoff = pb.float().uniform(0);\r\n }\r\n scope.sigma = pb.float().uniform(0);\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('sigma', this._sigma);\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n if (this._depthTex) {\r\n bindGroup.setTexture('depthTex', this._depthTex);\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n if (that._depthTex) {\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$return(this.depthValue.r);\r\n });\r\n }\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.minExpValue = pb.vec4(87, 87, 87, 87);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.incrementalGaussian.x);\r\n } else {\r\n scope.avgValue = pb.mul(\r\n that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType),\r\n scope.incrementalGaussian.x\r\n );\r\n }\r\n if (that._depthTex) {\r\n scope.centerDepth = scope.getLinearDepth(srcUV);\r\n }\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.uv1 = pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d1 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth1 = this.getLinearDepth(this.uv1);\r\n this.$l.test1 = pb.lessThan(pb.abs(pb.sub(this.depth1, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test1 = true;\r\n }\r\n this.$if(this.test1, function () {\r\n this.d1 = that.readTexel(scope, type, srcTex, this.uv1, srcLayer, sampleType);\r\n });\r\n this.$l.uv2 = pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d2 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth2 = this.getLinearDepth(this.uv2);\r\n this.$l.test2 = pb.lessThan(pb.abs(pb.sub(this.depth2, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test2 = true;\r\n }\r\n this.$if(this.test2, function () {\r\n this.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d1, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d2, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d1, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d2, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.outColor = pb.div(scope.avgValue, scope.coefficientSum);\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.outColor = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.outColor));\r\n } else {\r\n scope.outColor = pb.add(scope.d0, pb.log(scope.outColor));\r\n }\r\n }\r\n return scope.outColor as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash() {\r\n return `${this._depthTex ? 1 : 0}-${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["GaussianBlurBlitter","Blitter","phase","kernalSize","sigma","blurSize","_phase","_kernelSize","_sigma","_blurSize","_logSpace","_logSpaceMultiplier","_depthTex","_depthCutoff","val","kernelSize","invalidateHash","logSpace","logSpaceMultiplier","depthTexture","tex","depthCutoff","setup","scope","type","pb","$builder","shaderKind","depthTex","tex2D","sampleType","uniform","float","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","setUniforms","bindGroup","setValue","setTexture","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","$return","r","incrementalGaussian","x","div","mul","Math","sqrt","PI","y","exp","z","coefficientSum","minExpValue","vec4","d0","readTexel","avgValue","centerDepth","getLinearDepth","add","xy","yz","$for","uv1","sub","i","d1","depth1","test1","lessThan","abs","$if","uv2","d2","depth2","test2","min","outColor","log"],"mappings":"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"}
|
package/dist/camera/base.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { getDevice } from '../app/api.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Base class for camera controllers.
|
|
3
5
|
*
|
|
@@ -21,12 +23,17 @@
|
|
|
21
23
|
* Subclassing guidelines:
|
|
22
24
|
* - Override the protected `_onXxx` handlers rather than the public `onXxx` methods.
|
|
23
25
|
* - Override `reset()` to reinitialize controller state when a new camera is attached.
|
|
24
|
-
* - Override `
|
|
26
|
+
* - Override `_onUpdate(deltaTime)` to advance state each frame (e.g., apply accumulated
|
|
27
|
+
* deltas with damping). Scale per-frame changes by `deltaTime` so the controller
|
|
28
|
+
* behaves the same at any frame rate.
|
|
29
|
+
* - Override `updatePhase` to return `'late'` for a controller that follows a
|
|
30
|
+
* physics-driven target.
|
|
25
31
|
*
|
|
26
32
|
* Lifecycle:
|
|
27
33
|
* 1. A camera is attached via internal `_setCamera(camera)`, which calls `reset()`.
|
|
28
34
|
* 2. Input events are passed in through the public `onXxx` methods.
|
|
29
|
-
* 3. Per-frame, `update()` is called to apply state changes to the camera
|
|
35
|
+
* 3. Per-frame, `update(deltaTime)` is called to apply state changes to the camera,
|
|
36
|
+
* in the phase given by `updatePhase`.
|
|
30
37
|
*
|
|
31
38
|
* Thread-safety/assumptions:
|
|
32
39
|
* - Designed for use on the main thread in a browser environment.
|
|
@@ -34,6 +41,11 @@
|
|
|
34
41
|
*
|
|
35
42
|
* @public
|
|
36
43
|
*/ class BaseCameraController {
|
|
44
|
+
/**
|
|
45
|
+
* Longest time step passed to `_onUpdate`, in seconds. A longer frame - a
|
|
46
|
+
* background tab, a breakpoint - is treated as this long, so that a controller
|
|
47
|
+
* does not jump.
|
|
48
|
+
*/ static MAX_DELTA_TIME = 0.1;
|
|
37
49
|
/** @internal */ _camera;
|
|
38
50
|
/** @internal */ _enabled;
|
|
39
51
|
/**
|
|
@@ -143,17 +155,24 @@
|
|
|
143
155
|
return this._enabled ? this._onKeyUp(evt) : false;
|
|
144
156
|
}
|
|
145
157
|
/**
|
|
158
|
+
* When in the frame the owning scene updates this controller.
|
|
159
|
+
*
|
|
160
|
+
* Defaults to `'early'`. A controller following a physics-driven target should
|
|
161
|
+
* return `'late'`, see {@link CameraControllerUpdatePhase}.
|
|
162
|
+
*/ get updatePhase() {
|
|
163
|
+
return 'early';
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
146
166
|
* Per-frame update.
|
|
147
167
|
*
|
|
148
|
-
*
|
|
149
|
-
* - Integrate velocities/accelerations and apply damping.
|
|
150
|
-
* - Smoothly interpolate camera transforms.
|
|
151
|
-
* - Clamp angles/distances/FOV, etc.
|
|
168
|
+
* Called once per frame by the owning system; calls `_onUpdate` when enabled.
|
|
152
169
|
*
|
|
153
|
-
*
|
|
154
|
-
|
|
170
|
+
* @param deltaTime - Time since the last frame in seconds. Defaults to the
|
|
171
|
+
* device's frame time. Clamped to [0, {@link BaseCameraController.MAX_DELTA_TIME}].
|
|
172
|
+
*/ update(deltaTime) {
|
|
155
173
|
if (this._enabled) {
|
|
156
|
-
|
|
174
|
+
const dt = deltaTime ?? getDevice().frameInfo.elapsedFrame * 0.001;
|
|
175
|
+
this._onUpdate(Math.min(Math.max(dt, 0), BaseCameraController.MAX_DELTA_TIME));
|
|
157
176
|
}
|
|
158
177
|
}
|
|
159
178
|
/**
|
|
@@ -205,7 +224,9 @@
|
|
|
205
224
|
}
|
|
206
225
|
/**
|
|
207
226
|
* Per-frame update handler for subclasses to override.
|
|
208
|
-
|
|
227
|
+
*
|
|
228
|
+
* @param _deltaTime - Time since the last frame in seconds, already clamped.
|
|
229
|
+
*/ _onUpdate(_deltaTime) {
|
|
209
230
|
// Subclasses can override this for per-frame updates.
|
|
210
231
|
}
|
|
211
232
|
}
|
package/dist/camera/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sources":["../../src/camera/base.ts"],"sourcesContent":["import type { Nullable, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from './camera';\r\n\r\n/**\r\n * Base structure for all controller events.\r\n *\r\n * Represents a typed event emitted or handled by a camera controller.\r\n *\r\n * @public\r\n */\r\nexport interface IBaseEvent<T extends string> {\r\n /** Event type identifier. */\r\n type: T;\r\n /**\r\n * Optional method to cancel the default event behavior.\r\n * May be provided by the event source.\r\n */\r\n preventDefault?: () => void;\r\n}\r\n\r\n/**\r\n * Standard modifier key set for mouse/keyboard events.\r\n *\r\n * Encapsulates common modifier keys such as Ctrl, Alt, Shift, and Meta.\r\n *\r\n * @public\r\n */\r\nexport interface IModKey {\r\n /** Whether the Control key is pressed. */\r\n readonly ctrlKey: boolean;\r\n /** Whether the Meta (Command on macOS) key is pressed. */\r\n readonly metaKey: boolean;\r\n /** Whether the Shift key is pressed. */\r\n readonly shiftKey: boolean;\r\n /** Whether the Alt/Option key is pressed. */\r\n readonly altKey: boolean;\r\n}\r\n\r\n/**\r\n * Base interface for all controller mouse and pointer events.\r\n *\r\n * Extends the base event with positional and button information, as well as modifier keys.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerMouseEvent<T extends string> extends IBaseEvent<T>, IModKey {\r\n /** Pointer offset along the X-axis, typically relative to the event target. */\r\n readonly offsetX: number;\r\n /** Pointer offset along the Y-axis, typically relative to the event target. */\r\n readonly offsetY: number;\r\n /** Mouse button index: `0` for left, `1` for middle, `2` for right, etc. */\r\n readonly button: number;\r\n}\r\n\r\n/**\r\n * Pointer down event for camera controllers.\r\n *\r\n * Triggered when a mouse, pen, or touch pointer is pressed down.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerDownEvent extends IControllerMouseEvent<'pointerdown'> {}\r\n\r\n/**\r\n * Pointer up event for camera controllers.\r\n *\r\n * Triggered when a mouse, pen, or touch pointer is released.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerUpEvent extends IControllerMouseEvent<'pointerup'> {}\r\n\r\n/**\r\n * Pointer move event for camera controllers.\r\n *\r\n * Triggered when the pointer (mouse, pen, or touch) moves across the viewport.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerMoveEvent extends IControllerMouseEvent<'pointermove'> {}\r\n\r\n/**\r\n * Pointer cancel event for camera controllers.\r\n *\r\n * Triggered when the pointer operation is canceled (e.g., touch canceled, system interruption).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerCancelEvent extends IControllerMouseEvent<'pointercancel'> {}\r\n\r\n/**\r\n * Wheel (scroll) event for camera controllers.\r\n *\r\n * Extends a mouse event with wheel delta values for scroll-based input (e.g., zoom).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerWheelEvent extends IControllerMouseEvent<'wheel'> {\r\n /** Horizontal wheel scroll delta. */\r\n readonly deltaX: number;\r\n /** Vertical wheel scroll delta. */\r\n readonly deltaY: number;\r\n /** Delta mode */\r\n readonly deltaMode: number;\r\n}\r\n\r\n/**\r\n * Base interface for all controller keyboard events.\r\n *\r\n * Provides key identification along with standard modifier flags.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyboardEvent<T extends string> extends IBaseEvent<T>, IModKey {\r\n /** key code */\r\n readonly code: string;\r\n /** Character value */\r\n readonly key: string;\r\n}\r\n\r\n/**\r\n * Key down event for camera controllers.\r\n *\r\n * Triggered when a keyboard key is pressed down.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeydownEvent extends IControllerKeyboardEvent<'keydown'> {}\r\n\r\n/**\r\n * Key up event for camera controllers.\r\n *\r\n * Triggered when a keyboard key is released.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyupEvent extends IControllerKeyboardEvent<'keyup'> {}\r\n\r\n/**\r\n * Key press event for camera controllers.\r\n *\r\n * Triggered when a key is pressed and generates a character value (legacy usage).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeypressEvent extends IControllerKeyboardEvent<'keypress'> {}\r\n\r\n/**\r\n * Base class for camera controllers.\r\n *\r\n * Provides a common lifecycle and event-handling surface for concrete camera controllers\r\n * (e.g., orbit, fly, FPS). Subclasses implement protected handler methods to react to\r\n * mouse/keyboard input, and update camera transforms in `update()`.\r\n *\r\n * Responsibilities:\r\n * - Holds a reference to a `Camera` and resets internal state when the camera changes.\r\n * - Offers a `lookAt(from, to, up)` helper that delegates to the camera.\r\n * - Exposes public event entry points (`onMouseDown`, `onMouseUp`, `onMouseMove`,\r\n * `onMouseWheel`, `onKeyDown`, `onKeyUp`) that forward to protected handlers which\r\n * subclasses can override.\r\n * - Defines `reset()` and `update()` lifecycle methods for state initialization and per-frame updates.\r\n *\r\n * Event handling contract:\r\n * - Each public `onXxx` method returns a boolean that indicates whether the event\r\n * was handled by the controller. Returning `true` allows upstream dispatchers to\r\n * stop propagation if desired.\r\n *\r\n * Subclassing guidelines:\r\n * - Override the protected `_onXxx` handlers rather than the public `onXxx` methods.\r\n * - Override `reset()` to reinitialize controller state when a new camera is attached.\r\n * - Override `update()` to advance state each frame (e.g., apply accumulated deltas with damping).\r\n *\r\n * Lifecycle:\r\n * 1. A camera is attached via internal `_setCamera(camera)`, which calls `reset()`.\r\n * 2. Input events are passed in through the public `onXxx` methods.\r\n * 3. Per-frame, `update()` is called to apply state changes to the camera.\r\n *\r\n * Thread-safety/assumptions:\r\n * - Designed for use on the main thread in a browser environment.\r\n * - Pointer events are used for mouse input; keyboard events for key input.\r\n *\r\n * @public\r\n */\r\nexport class BaseCameraController {\r\n /** @internal */\r\n private _camera: Nullable<Camera>;\r\n /** @internal */\r\n private _enabled: boolean;\r\n /**\r\n * Create a base camera controller.\r\n *\r\n * The controller starts without an attached camera. Call the internal `_setCamera`\r\n * to attach a camera (performed by the owning system), which triggers `reset()`.\r\n */\r\n constructor() {\r\n this._camera = null;\r\n this._enabled = true;\r\n }\r\n /**\r\n * Get the attached camera.\r\n *\r\n * @returns The current camera or `null` if none is attached.\r\n */\r\n _getCamera() {\r\n return this._camera;\r\n }\r\n /**\r\n * Attach a camera to the controller.\r\n *\r\n * If the camera changes, the controller will call `reset()` so subclasses can\r\n * reinitialize state that depends on the camera.\r\n *\r\n * @param camera - The camera to attach.\r\n */\r\n _setCamera(camera: Nullable<Camera>) {\r\n if (this._camera !== camera) {\r\n this._camera = camera;\r\n this.reset();\r\n }\r\n }\r\n /**\r\n * Check if the controller is enabled.\r\n */\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(value: boolean) {\r\n this._enabled = value;\r\n }\r\n /**\r\n * Convenience method that delegates to `camera.lookAt`.\r\n *\r\n * @param from - Camera position.\r\n * @param to - Look-at target.\r\n * @param up - Up direction.\r\n */\r\n lookAt(from: Vector3, to: Vector3, up: Vector3) {\r\n this._camera?.lookAt(from, to, up);\r\n }\r\n /**\r\n * Reset the controller's internal state.\r\n *\r\n * Called automatically when a camera is attached via `_setCamera`. Subclasses\r\n * should override this to reset accumulators, velocities, targets, etc.\r\n */\r\n reset() {}\r\n /**\r\n * Handle pointer down (mouse/touch/pen) events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled and should stop further processing; otherwise `false`.\r\n */\r\n onMouseDown(evt: IControllerPointerDownEvent) {\r\n return this._enabled ? this._onMouseDown(evt) : false;\r\n }\r\n /**\r\n * Handle pointer up events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseUp(evt: IControllerPointerUpEvent) {\r\n return this._enabled ? this._onMouseUp(evt) : false;\r\n }\r\n /**\r\n * Handle mouse wheel (scroll) events.\r\n *\r\n * Typical usage: zoom/dolly control, FOV adjustments.\r\n *\r\n * @param evt - The wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseWheel(evt: IControllerWheelEvent) {\r\n return this._enabled ? this._onMouseWheel(evt) : false;\r\n }\r\n /**\r\n * Handle pointer move events.\r\n *\r\n * Typical usage: orbit, pan, or look controls based on button/modifier state.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseMove(evt: IControllerPointerMoveEvent) {\r\n return this._enabled ? this._onMouseMove(evt) : false;\r\n }\r\n /**\r\n * Handle key down events.\r\n *\r\n * Typical usage: WASD navigation, modifiers for speed, toggling modes.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyDown(evt: IControllerKeydownEvent) {\r\n return this._enabled ? this._onKeyDown(evt) : false;\r\n }\r\n /**\r\n * Handle key up events.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyUp(evt: IControllerKeyupEvent) {\r\n return this._enabled ? this._onKeyUp(evt) : false;\r\n }\r\n /**\r\n * Per-frame update.\r\n *\r\n * Subclasses should override this to:\r\n * - Integrate velocities/accelerations and apply damping.\r\n * - Smoothly interpolate camera transforms.\r\n * - Clamp angles/distances/FOV, etc.\r\n *\r\n * Called once per frame by the owning system.\r\n */\r\n update() {\r\n if (this._enabled) {\r\n this._onUpdate();\r\n }\r\n }\r\n /**\r\n * Mouse down event handler\r\n * @param evt - Mouse event\r\n * @returns Boolean value indices whether this event was handled\r\n */\r\n protected _onMouseDown(_evt: IControllerPointerDownEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer up handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseUp(_evt: IControllerPointerUpEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Mouse wheel handler for subclasses to override.\r\n *\r\n * @param _evt - Wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseWheel(_evt: IControllerWheelEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer move handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseMove(_evt: IControllerPointerMoveEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key down handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyDown(_evt: IControllerKeydownEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key up handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyUp(_evt: IControllerKeyupEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Per-frame update handler for subclasses to override.\r\n */\r\n protected _onUpdate() {\r\n // Subclasses can override this for per-frame updates.\r\n }\r\n}\r\n"],"names":["BaseCameraController","_camera","_enabled","_getCamera","_setCamera","camera","reset","enabled","value","lookAt","from","to","up","onMouseDown","evt","_onMouseDown","onMouseUp","_onMouseUp","onMouseWheel","_onMouseWheel","onMouseMove","_onMouseMove","onKeyDown","_onKeyDown","onKeyUp","_onKeyUp","update","_onUpdate","_evt"],"mappings":"AAmJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCC,IACM,MAAMA,oBAAAA,CAAAA;qBAEX,OAAkC;qBAElC,QAA0B;AAC1B;;;;;AAKC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,OAAO,GAAG,IAAA;QACf,IAAI,CAACC,QAAQ,GAAG,IAAA;AAClB;AACA;;;;AAIC,MACDC,UAAa,GAAA;QACX,OAAO,IAAI,CAACF,OAAO;AACrB;AACA;;;;;;;MAQAG,UAAAA,CAAWC,MAAwB,EAAE;AACnC,QAAA,IAAI,IAAI,CAACJ,OAAO,KAAKI,MAAQ,EAAA;YAC3B,IAAI,CAACJ,OAAO,GAAGI,MAAAA;AACf,YAAA,IAAI,CAACC,KAAK,EAAA;AACZ;AACF;AACA;;AAEC,MACD,IAAIC,OAAU,GAAA;QACZ,OAAO,IAAI,CAACL,QAAQ;AACtB;IACA,IAAIK,OAAAA,CAAQC,KAAc,EAAE;QAC1B,IAAI,CAACN,QAAQ,GAAGM,KAAAA;AAClB;AACA;;;;;;AAMC,MACDC,OAAOC,IAAa,EAAEC,EAAW,EAAEC,EAAW,EAAE;AAC9C,QAAA,IAAI,CAACX,OAAO,EAAEQ,MAAAA,CAAOC,MAAMC,EAAIC,EAAAA,EAAAA,CAAAA;AACjC;AACA;;;;;AAKC,MACDN,QAAQ;AACR;;;;;MAMAO,WAAAA,CAAYC,GAAgC,EAAE;QAC5C,OAAO,IAAI,CAACZ,QAAQ,GAAG,IAAI,CAACa,YAAY,CAACD,GAAO,CAAA,GAAA,KAAA;AAClD;AACA;;;;;MAMAE,SAAAA,CAAUF,GAA8B,EAAE;QACxC,OAAO,IAAI,CAACZ,QAAQ,GAAG,IAAI,CAACe,UAAU,CAACH,GAAO,CAAA,GAAA,KAAA;AAChD;AACA;;;;;;;MAQAI,YAAAA,CAAaJ,GAA0B,EAAE;QACvC,OAAO,IAAI,CAACZ,QAAQ,GAAG,IAAI,CAACiB,aAAa,CAACL,GAAO,CAAA,GAAA,KAAA;AACnD;AACA;;;;;;;MAQAM,WAAAA,CAAYN,GAAgC,EAAE;QAC5C,OAAO,IAAI,CAACZ,QAAQ,GAAG,IAAI,CAACmB,YAAY,CAACP,GAAO,CAAA,GAAA,KAAA;AAClD;AACA;;;;;;;MAQAQ,SAAAA,CAAUR,GAA4B,EAAE;QACtC,OAAO,IAAI,CAACZ,QAAQ,GAAG,IAAI,CAACqB,UAAU,CAACT,GAAO,CAAA,GAAA,KAAA;AAChD;AACA;;;;;MAMAU,OAAAA,CAAQV,GAA0B,EAAE;QAClC,OAAO,IAAI,CAACZ,QAAQ,GAAG,IAAI,CAACuB,QAAQ,CAACX,GAAO,CAAA,GAAA,KAAA;AAC9C;AACA;;;;;;;;;AASC,MACDY,MAAS,GAAA;QACP,IAAI,IAAI,CAACxB,QAAQ,EAAE;AACjB,YAAA,IAAI,CAACyB,SAAS,EAAA;AAChB;AACF;AACA;;;;MAKUZ,YAAaa,CAAAA,IAAiC,EAAW;QACjE,OAAO,KAAA;AACT;AACA;;;;;MAMUX,UAAWW,CAAAA,IAA+B,EAAW;QAC7D,OAAO,KAAA;AACT;AACA;;;;;MAMUT,aAAcS,CAAAA,IAA2B,EAAW;QAC5D,OAAO,KAAA;AACT;AACA;;;;;MAMUP,YAAaO,CAAAA,IAAiC,EAAW;QACjE,OAAO,KAAA;AACT;AACA;;;;;MAMUL,UAAWK,CAAAA,IAA6B,EAAW;QAC3D,OAAO,KAAA;AACT;AACA;;;;;MAMUH,QAASG,CAAAA,IAA2B,EAAW;QACvD,OAAO,KAAA;AACT;AACA;;AAEC,MACD,SAAsB,GAAA;;AAEtB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../src/camera/base.ts"],"sourcesContent":["import type { Nullable, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from './camera';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * When in a frame a camera controller is updated.\r\n *\r\n * - `early`: before the scene's nodes and physics are updated. Suits controllers\r\n * driven only by input, such as orbit and FPS.\r\n * - `late`: after physics has stepped and written back, so the controller sees\r\n * this frame's pose of whatever it follows.\r\n *\r\n * @public\r\n */\r\nexport type CameraControllerUpdatePhase = 'early' | 'late';\r\n\r\n/**\r\n * Base structure for all controller events.\r\n *\r\n * Represents a typed event emitted or handled by a camera controller.\r\n *\r\n * @public\r\n */\r\nexport interface IBaseEvent {\r\n /** Event type identifier. */\r\n type: string;\r\n /**\r\n * Optional method to cancel the default event behavior.\r\n * May be provided by the event source.\r\n */\r\n preventDefault?: () => void;\r\n}\r\n\r\n/**\r\n * Standard modifier key set for mouse/keyboard events.\r\n *\r\n * Encapsulates common modifier keys such as Ctrl, Alt, Shift, and Meta.\r\n *\r\n * @public\r\n */\r\nexport interface IModKey {\r\n /** Whether the Control key is pressed. */\r\n readonly ctrlKey: boolean;\r\n /** Whether the Meta (Command on macOS) key is pressed. */\r\n readonly metaKey: boolean;\r\n /** Whether the Shift key is pressed. */\r\n readonly shiftKey: boolean;\r\n /** Whether the Alt/Option key is pressed. */\r\n readonly altKey: boolean;\r\n}\r\n\r\n/**\r\n * Base interface for all controller mouse and pointer events.\r\n *\r\n * Extends the base event with positional and button information, as well as modifier keys.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerMouseEvent extends IBaseEvent, IModKey {\r\n /** Pointer offset along the X-axis, typically relative to the event target. */\r\n readonly offsetX: number;\r\n /** Pointer offset along the Y-axis, typically relative to the event target. */\r\n readonly offsetY: number;\r\n /** Mouse button index: `0` for left, `1` for middle, `2` for right, etc. */\r\n readonly button: number;\r\n}\r\n\r\n/**\r\n * Wheel (scroll) event for camera controllers.\r\n *\r\n * Extends a mouse event with wheel delta values for scroll-based input (e.g., zoom).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerWheelEvent extends IControllerMouseEvent {\r\n /** Horizontal wheel scroll delta. */\r\n readonly deltaX: number;\r\n /** Vertical wheel scroll delta. */\r\n readonly deltaY: number;\r\n /** Delta mode */\r\n readonly deltaMode: number;\r\n}\r\n\r\n/**\r\n * Base interface for all controller keyboard events.\r\n *\r\n * Provides key identification along with standard modifier flags.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyboardEvent extends IBaseEvent, IModKey {\r\n /** key code */\r\n readonly code: string;\r\n /** Character value */\r\n readonly key: string;\r\n}\r\n\r\n/**\r\n * Base class for camera controllers.\r\n *\r\n * Provides a common lifecycle and event-handling surface for concrete camera controllers\r\n * (e.g., orbit, fly, FPS). Subclasses implement protected handler methods to react to\r\n * mouse/keyboard input, and update camera transforms in `update()`.\r\n *\r\n * Responsibilities:\r\n * - Holds a reference to a `Camera` and resets internal state when the camera changes.\r\n * - Offers a `lookAt(from, to, up)` helper that delegates to the camera.\r\n * - Exposes public event entry points (`onMouseDown`, `onMouseUp`, `onMouseMove`,\r\n * `onMouseWheel`, `onKeyDown`, `onKeyUp`) that forward to protected handlers which\r\n * subclasses can override.\r\n * - Defines `reset()` and `update()` lifecycle methods for state initialization and per-frame updates.\r\n *\r\n * Event handling contract:\r\n * - Each public `onXxx` method returns a boolean that indicates whether the event\r\n * was handled by the controller. Returning `true` allows upstream dispatchers to\r\n * stop propagation if desired.\r\n *\r\n * Subclassing guidelines:\r\n * - Override the protected `_onXxx` handlers rather than the public `onXxx` methods.\r\n * - Override `reset()` to reinitialize controller state when a new camera is attached.\r\n * - Override `_onUpdate(deltaTime)` to advance state each frame (e.g., apply accumulated\r\n * deltas with damping). Scale per-frame changes by `deltaTime` so the controller\r\n * behaves the same at any frame rate.\r\n * - Override `updatePhase` to return `'late'` for a controller that follows a\r\n * physics-driven target.\r\n *\r\n * Lifecycle:\r\n * 1. A camera is attached via internal `_setCamera(camera)`, which calls `reset()`.\r\n * 2. Input events are passed in through the public `onXxx` methods.\r\n * 3. Per-frame, `update(deltaTime)` is called to apply state changes to the camera,\r\n * in the phase given by `updatePhase`.\r\n *\r\n * Thread-safety/assumptions:\r\n * - Designed for use on the main thread in a browser environment.\r\n * - Pointer events are used for mouse input; keyboard events for key input.\r\n *\r\n * @public\r\n */\r\nexport class BaseCameraController {\r\n /**\r\n * Longest time step passed to `_onUpdate`, in seconds. A longer frame - a\r\n * background tab, a breakpoint - is treated as this long, so that a controller\r\n * does not jump.\r\n */\r\n static readonly MAX_DELTA_TIME = 0.1;\r\n /** @internal */\r\n private _camera: Nullable<Camera>;\r\n /** @internal */\r\n private _enabled: boolean;\r\n /**\r\n * Create a base camera controller.\r\n *\r\n * The controller starts without an attached camera. Call the internal `_setCamera`\r\n * to attach a camera (performed by the owning system), which triggers `reset()`.\r\n */\r\n constructor() {\r\n this._camera = null;\r\n this._enabled = true;\r\n }\r\n /**\r\n * Get the attached camera.\r\n *\r\n * @returns The current camera or `null` if none is attached.\r\n */\r\n _getCamera() {\r\n return this._camera;\r\n }\r\n /**\r\n * Attach a camera to the controller.\r\n *\r\n * If the camera changes, the controller will call `reset()` so subclasses can\r\n * reinitialize state that depends on the camera.\r\n *\r\n * @param camera - The camera to attach.\r\n */\r\n _setCamera(camera: Nullable<Camera>) {\r\n if (this._camera !== camera) {\r\n this._camera = camera;\r\n this.reset();\r\n }\r\n }\r\n /**\r\n * Check if the controller is enabled.\r\n */\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(value: boolean) {\r\n this._enabled = value;\r\n }\r\n /**\r\n * Convenience method that delegates to `camera.lookAt`.\r\n *\r\n * @param from - Camera position.\r\n * @param to - Look-at target.\r\n * @param up - Up direction.\r\n */\r\n lookAt(from: Vector3, to: Vector3, up: Vector3) {\r\n this._camera?.lookAt(from, to, up);\r\n }\r\n /**\r\n * Reset the controller's internal state.\r\n *\r\n * Called automatically when a camera is attached via `_setCamera`. Subclasses\r\n * should override this to reset accumulators, velocities, targets, etc.\r\n */\r\n reset() {}\r\n /**\r\n * Handle pointer down (mouse/touch/pen) events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled and should stop further processing; otherwise `false`.\r\n */\r\n onMouseDown(evt: IControllerMouseEvent) {\r\n return this._enabled ? this._onMouseDown(evt) : false;\r\n }\r\n /**\r\n * Handle pointer up events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseUp(evt: IControllerMouseEvent) {\r\n return this._enabled ? this._onMouseUp(evt) : false;\r\n }\r\n /**\r\n * Handle mouse wheel (scroll) events.\r\n *\r\n * Typical usage: zoom/dolly control, FOV adjustments.\r\n *\r\n * @param evt - The wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseWheel(evt: IControllerWheelEvent) {\r\n return this._enabled ? this._onMouseWheel(evt) : false;\r\n }\r\n /**\r\n * Handle pointer move events.\r\n *\r\n * Typical usage: orbit, pan, or look controls based on button/modifier state.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseMove(evt: IControllerMouseEvent) {\r\n return this._enabled ? this._onMouseMove(evt) : false;\r\n }\r\n /**\r\n * Handle key down events.\r\n *\r\n * Typical usage: WASD navigation, modifiers for speed, toggling modes.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyDown(evt: IControllerKeyboardEvent) {\r\n return this._enabled ? this._onKeyDown(evt) : false;\r\n }\r\n /**\r\n * Handle key up events.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyUp(evt: IControllerKeyboardEvent) {\r\n return this._enabled ? this._onKeyUp(evt) : false;\r\n }\r\n /**\r\n * When in the frame the owning scene updates this controller.\r\n *\r\n * Defaults to `'early'`. A controller following a physics-driven target should\r\n * return `'late'`, see {@link CameraControllerUpdatePhase}.\r\n */\r\n get updatePhase(): CameraControllerUpdatePhase {\r\n return 'early';\r\n }\r\n /**\r\n * Per-frame update.\r\n *\r\n * Called once per frame by the owning system; calls `_onUpdate` when enabled.\r\n *\r\n * @param deltaTime - Time since the last frame in seconds. Defaults to the\r\n * device's frame time. Clamped to [0, {@link BaseCameraController.MAX_DELTA_TIME}].\r\n */\r\n update(deltaTime?: number) {\r\n if (this._enabled) {\r\n const dt = deltaTime ?? getDevice().frameInfo.elapsedFrame * 0.001;\r\n this._onUpdate(Math.min(Math.max(dt, 0), BaseCameraController.MAX_DELTA_TIME));\r\n }\r\n }\r\n /**\r\n * Mouse down event handler\r\n * @param evt - Mouse event\r\n * @returns Boolean value indices whether this event was handled\r\n */\r\n protected _onMouseDown(_evt: IControllerMouseEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer up handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseUp(_evt: IControllerMouseEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Mouse wheel handler for subclasses to override.\r\n *\r\n * @param _evt - Wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseWheel(_evt: IControllerWheelEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer move handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseMove(_evt: IControllerMouseEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key down handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyDown(_evt: IControllerKeyboardEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key up handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyUp(_evt: IControllerKeyboardEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Per-frame update handler for subclasses to override.\r\n *\r\n * @param _deltaTime - Time since the last frame in seconds, already clamped.\r\n */\r\n protected _onUpdate(_deltaTime: number) {\r\n // Subclasses can override this for per-frame updates.\r\n }\r\n}\r\n"],"names":["BaseCameraController","MAX_DELTA_TIME","_camera","_enabled","_getCamera","_setCamera","camera","reset","enabled","value","lookAt","from","to","up","onMouseDown","evt","_onMouseDown","onMouseUp","_onMouseUp","onMouseWheel","_onMouseWheel","onMouseMove","_onMouseMove","onKeyDown","_onKeyDown","onKeyUp","_onKeyUp","updatePhase","update","deltaTime","dt","getDevice","frameInfo","elapsedFrame","_onUpdate","Math","min","max","_evt","_deltaTime"],"mappings":"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"}
|