@zephyr3d/scene 0.9.26 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe_volume.js","sources":["../../../src/render/gi/probe_volume.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { Nullable, Vector3 } from '@zephyr3d/base';\r\nimport { half2float, PRNG, Vector4 } from '@zephyr3d/base';\r\nimport { getDevice } from '../../app/api';\r\nimport type { Scene } from '../../scene/scene';\r\nimport type { Camera } from '../../camera/camera';\r\nimport type { DrawContext } from '../drawable';\r\nimport type { SceneSDF } from '../sdf/scene_sdf';\r\nimport type { VoxelScene } from './voxel_scene';\r\nimport { buildSDFProgram } from '../sdf/sdf_programs';\r\nimport { drawFullscreenQuad } from '../fullscreenquad';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { getGICacheExposure } from '../../utility/physical';\r\nimport { RENDER_PASS_TYPE_LIGHT } from '../../values';\r\nimport { RenderGraphExecutor } from '../rendergraph/executor';\r\nimport {\r\n declareDynamicSDFUniforms,\r\n declareGlobalSDFUniforms,\r\n GLOBAL_SDF_LEVELS,\r\n sampleGlobalSDF,\r\n sampleGlobalSDFLevel,\r\n sampleSceneSDF,\r\n sampleSceneSDFHinted,\r\n sdfRefineHit,\r\n sdfSurfaceExpand\r\n} from '../../shaders/sdf';\r\nimport {\r\n declareVoxelSceneUniforms,\r\n sampleVoxelSceneRadiance,\r\n VOXEL_SCENE_ALBEDO,\r\n VOXEL_SCENE_EMISSIVE,\r\n VOXEL_SCENE_RADIANCE,\r\n VOXEL_SCENE_ANISO0,\r\n VOXEL_SCENE_ANISO1\r\n} from '../../shaders/gi';\r\nimport {\r\n octDecode,\r\n PROBE_DATA,\r\n PROBE_IRRADIANCE,\r\n PROBE_MAX_LEVELS,\r\n PROBE_PARAM_VEC4S,\r\n PROBE_PARAMS,\r\n PROBE_STATE_INACTIVE,\r\n PROBE_VISIBILITY,\r\n probeActive,\r\n probeLevelGrid,\r\n probeLevelOrigin,\r\n probePosition,\r\n probeTexelFromIndex,\r\n probeTexelFromWorld,\r\n probeTileIndex,\r\n probeTileOrigin,\r\n probeWorldFromTexel,\r\n quatRotate,\r\n sphericalFibonacci\r\n} from '../../shaders/probes';\r\n\r\n/** Texels of an irradiance tile, border included. */\r\nconst IRRADIANCE_TEXELS = 8;\r\n/** Texels of a visibility tile, border included. */\r\nconst VISIBILITY_TEXELS = 16;\r\n/** Tiles per row of the blend outputs, which hold the tiles of one update by selection slot. */\r\nconst STAGING_COLS = 64;\r\n/** Rays a blend workgroup stages in shared memory at a time. */\r\nconst BLEND_BATCH = 128;\r\n/** Sphere tracing steps of a probe ray. */\r\nconst TRACE_STEPS = 48;\r\n/** Visibility distance clamp, in probe spacings: just enough to separate blockers between neighbouring probes. */\r\nconst VISIBILITY_RANGE = 2.6;\r\n/** Frames between relocations of an updated probe. */\r\nconst RELOCATE_EVERY = 8;\r\n/** Bits of a selection entry: tile index, level, first-update flag. */\r\nconst SELECT_INDEX_MASK = 0x00ffffff;\r\nconst SELECT_LEVEL_SHIFT = 24;\r\nconst SELECT_FIRST_BIT = 0x80000000;\r\n/** Magic and version of a saved probe state. */\r\nconst STATE_MAGIC = 0x50494a5a; // 'ZJIP'\r\n/** Bump when the saved layout or meaning changes. */\r\nconst STATE_VERSION = 5;\r\n/** Hit distance written by a sky-escaping ray: beyond any trace length, within half float range. */\r\nconst SKY_ESCAPE_DISTANCE = 16384;\r\n\r\n/**\r\n * Settings of the probe volume, on {@link SceneGI}.\r\n * @public\r\n */\r\nexport interface ProbeVolumeOptions {\r\n /** Probes along x, y and z of every level. */\r\n grid: [number, number, number];\r\n /** Distance between probes of the finest level in world units. */\r\n spacing: number;\r\n /** Clipmap levels, each `levelScale` times the spacing of the one inside it; 1 to {@link PROBE_MAX_LEVELS}. */\r\n levels: number;\r\n /** Spacing ratio between consecutive levels, typically 2. */\r\n levelScale: number;\r\n /** Rays traced per probe per update. */\r\n raysPerProbe: number;\r\n /** Probes updated per frame, all levels together. */\r\n budget: number;\r\n /** Share of the previous value kept per update, 0 to 1. */\r\n hysteresis: number;\r\n /** Surface offset along the normal when sampling, in probe spacings of the level read. */\r\n normalBias: number;\r\n /** Surface offset towards the viewer when sampling, in probe spacings of the level read. */\r\n viewBias: number;\r\n /** Multiplier on the irradiance the probes give. */\r\n intensity: number;\r\n /** Distance a ray of the finest level gives up at, in world units; coarser levels go proportionally farther. */\r\n maxRayDistance: number;\r\n}\r\n\r\n/**\r\n * Counters of a {@link ProbeVolume}.\r\n * @public\r\n */\r\nexport interface ProbeVolumeStats {\r\n levels: number;\r\n probes: number;\r\n /** Probes never updated since entering their window. */\r\n uninitialized: number;\r\n /** Probes updated by the last frame. */\r\n lastUpdated: number;\r\n updates: number;\r\n /** Per level: probes per axis, spacing and the world index of the window's first probe. */\r\n levelInfo: { grid: [number, number, number]; spacing: number; origin: [number, number, number] }[];\r\n}\r\n\r\ninterface ProbeLevel {\r\n grid: [number, number, number];\r\n spacing: number;\r\n count: number;\r\n /** First tile of the level in the atlases and the data buffer. */\r\n tileBase: number;\r\n origin: Nullable<[number, number, number]>;\r\n /** 0 until a probe's first update since entering the window. */\r\n state: Uint8Array;\r\n lastRelocated: Int32Array;\r\n /** Frame a probe was last selected in, so no frame updates one twice. */\r\n lastSelected: Int32Array;\r\n cursor: number;\r\n}\r\n\r\n/**\r\n * The probe volume read by the draw, or null outside the light pass, with the\r\n * environment light off, or with GI disabled or not yet built.\r\n * @internal\r\n */\r\nexport function getProbeVolumeForDraw(ctx?: DrawContext): Nullable<ProbeVolume> {\r\n if (\r\n !ctx ||\r\n ctx.renderPass?.type !== RENDER_PASS_TYPE_LIGHT ||\r\n !ctx.drawEnvLight ||\r\n !ctx.scene?.gi.enabled\r\n ) {\r\n return null;\r\n }\r\n const probes = ctx.scene.gi.probes;\r\n return probes?.ready ? probes : null;\r\n}\r\n\r\n/**\r\n * The scene's built probe volume when GI is on, for passes other than the light pass.\r\n * @internal\r\n */\r\nexport function getActiveProbeVolume(scene: Scene): Nullable<ProbeVolume> {\r\n if (!scene.gi.enabled) {\r\n return null;\r\n }\r\n const probes = scene.gi.probes;\r\n return probes?.ready ? probes : null;\r\n}\r\n\r\n/**\r\n * A camera-centred clipmap of DDGI light probes (Majercik et al. JCGT 2019/2021)\r\n * holding octahedral irradiance and visibility maps. Each frame a budget of probes\r\n * traces rays through the scene SDF, shading hits from the voxel scene and misses\r\n * from the sky. Windows scroll toroidally; entering probes are seeded from the level\r\n * above.\r\n * Read via {@link sampleProbeIrradiance}; state can be saved with\r\n * {@link ProbeVolume.exportState}. WebGPU only.\r\n *\r\n * @public\r\n */\r\nexport class ProbeVolume {\r\n private readonly _scene: Scene;\r\n private readonly _options: ProbeVolumeOptions;\r\n private readonly _levels: ProbeLevel[];\r\n private readonly _count: number;\r\n private readonly _tileCols: number;\r\n private readonly _rays: number;\r\n private readonly _budget: number;\r\n private _irradiance: Nullable<Texture2D>;\r\n private _irradianceNext: Nullable<Texture2D>;\r\n /** Irradiance seeds of one update's probes starting over, by selection slot like the blend outputs. */\r\n private _irradianceSeed: Nullable<Texture2D>;\r\n private _visibility: Nullable<Texture2D>;\r\n private _visibilityNext: Nullable<Texture2D>;\r\n /** Two distance moments; rg16f where storage-writable (texture-formats-tier1), else rgba16f. */\r\n private readonly _visibilityFormat: 'rg16f' | 'rgba16f';\r\n private _rayTexture: Nullable<Texture2D>;\r\n private _rayFramebuffer: Nullable<FrameBuffer>;\r\n private _data: Nullable<GPUDataBuffer>;\r\n private _selected: Nullable<GPUDataBuffer>;\r\n private readonly _selection: Uint32Array<ArrayBuffer>;\r\n private readonly _dataReset: Float32Array<ArrayBuffer>;\r\n private _frame: number;\r\n private _updates: number;\r\n private _lastUpdated: number;\r\n private readonly _params: Float32Array<ArrayBuffer>;\r\n /** Live camera exposure over the cache exposure, see {@link ProbeVolume.setReadExposure}. */\r\n private _exposureScale: number;\r\n private readonly _rotation: Vector4;\r\n private readonly _prng: PRNG;\r\n private _relocateProgram: Nullable<GPUProgram>;\r\n private _relocateBindGroup: Nullable<BindGroup>;\r\n private _seedProgram: Nullable<GPUProgram>;\r\n private _seedBindGroup: Nullable<BindGroup>;\r\n private _traceProgram: Nullable<GPUProgram>;\r\n private _traceBindGroup: Nullable<BindGroup>;\r\n private _traceKey: string;\r\n private _blendIrrProgram: Nullable<GPUProgram>;\r\n private _blendIrrBindGroup: Nullable<BindGroup>;\r\n private _blendVisProgram: Nullable<GPUProgram>;\r\n private _blendVisBindGroup: Nullable<BindGroup>;\r\n private _commitProgram: Nullable<GPUProgram>;\r\n private _commitBindGroup: Nullable<BindGroup>;\r\n private _renderStates: Nullable<RenderStateSet>;\r\n private readonly _scratch: Map<string, GPUDataBuffer>;\r\n constructor(scene: Scene, options: ProbeVolumeOptions) {\r\n this._scene = scene;\r\n this._options = options;\r\n const levels = Math.max(1, Math.min(PROBE_MAX_LEVELS, Math.floor(options.levels)));\r\n const scale = Math.max(1.5, options.levelScale);\r\n const grid = options.grid.map((v) => Math.max(2, Math.floor(v))) as [number, number, number];\r\n this._levels = [];\r\n let tileBase = 0;\r\n for (let l = 0; l < levels; l++) {\r\n const count = grid[0] * grid[1] * grid[2];\r\n this._levels.push({\r\n grid: [...grid],\r\n spacing: options.spacing * scale ** l,\r\n count,\r\n tileBase,\r\n origin: null,\r\n state: new Uint8Array(count),\r\n lastRelocated: new Int32Array(count).fill(-1000),\r\n lastSelected: new Int32Array(count).fill(-1),\r\n cursor: 0\r\n });\r\n tileBase += count;\r\n }\r\n this._count = tileBase;\r\n this._tileCols = Math.ceil(Math.sqrt(this._count));\r\n this._rays = Math.max(16, Math.min(1024, Math.floor(options.raysPerProbe)));\r\n this._budget = Math.max(1, Math.min(this._count, Math.floor(options.budget)));\r\n this._irradiance = null;\r\n this._irradianceNext = null;\r\n this._irradianceSeed = null;\r\n this._visibility = null;\r\n this._visibilityNext = null;\r\n this._visibilityFormat = getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo('rg16f')?.writable\r\n ? 'rg16f'\r\n : 'rgba16f';\r\n this._rayTexture = null;\r\n this._rayFramebuffer = null;\r\n this._data = null;\r\n this._selected = null;\r\n this._selection = new Uint32Array(new ArrayBuffer(this._budget * 4));\r\n this._dataReset = new Float32Array(new ArrayBuffer(16));\r\n this._frame = 0;\r\n this._updates = 0;\r\n this._lastUpdated = 0;\r\n this._params = new Float32Array(new ArrayBuffer(PROBE_PARAM_VEC4S * 16));\r\n this._exposureScale = 1;\r\n this._rotation = new Vector4(0, 0, 0, 1);\r\n this._prng = new PRNG(1234);\r\n this._relocateProgram = null;\r\n this._relocateBindGroup = null;\r\n this._seedProgram = null;\r\n this._seedBindGroup = null;\r\n this._traceProgram = null;\r\n this._traceBindGroup = null;\r\n this._traceKey = '';\r\n this._blendIrrProgram = null;\r\n this._blendIrrBindGroup = null;\r\n this._blendVisProgram = null;\r\n this._blendVisBindGroup = null;\r\n this._commitProgram = null;\r\n this._commitBindGroup = null;\r\n this._renderStates = null;\r\n this._scratch = new Map();\r\n }\r\n /** Clipmap levels. */\r\n get levels() {\r\n return this._levels.length;\r\n }\r\n /** Probes of every level together. */\r\n get count() {\r\n return this._count;\r\n }\r\n /** Spacing of the finest level. */\r\n get spacing() {\r\n return this._options.spacing;\r\n }\r\n /** True once the volume has been placed and updated, or a state restored. */\r\n get ready() {\r\n return !!this._levels[0].origin && this._updates > 0;\r\n }\r\n getStats(): ProbeVolumeStats {\r\n let uninitialized = 0;\r\n for (const level of this._levels) {\r\n for (let i = 0; i < level.count; i++) {\r\n uninitialized += level.state[i] ? 0 : 1;\r\n }\r\n }\r\n return {\r\n levels: this._levels.length,\r\n probes: this._count,\r\n uninitialized,\r\n lastUpdated: this._lastUpdated,\r\n updates: this._updates,\r\n levelInfo: this._levels.map((level) => ({\r\n grid: [...level.grid] as [number, number, number],\r\n spacing: level.spacing,\r\n origin: (level.origin ? [...level.origin] : [0, 0, 0]) as [number, number, number]\r\n }))\r\n };\r\n }\r\n /** Binds the volume for {@link sampleProbeIrradiance} in a program that declared it. */\r\n applyBindGroup(bg: BindGroup) {\r\n if (!this._irradiance || !this._visibility || !this._data) {\r\n return;\r\n }\r\n bg.setTexture(PROBE_IRRADIANCE, this._irradiance, fetchSampler('clamp_linear_nomip'));\r\n bg.setTexture(PROBE_VISIBILITY, this._visibility, fetchSampler('clamp_linear_nomip'));\r\n bg.setBuffer(PROBE_DATA, this._data);\r\n bg.setValue(PROBE_PARAMS, this._params);\r\n }\r\n /**\r\n * Rescales probe reads from the fixed cache exposure to the camera's. Call\r\n * every frame, also while frozen, so params follow exposure and SDF windows.\r\n */\r\n setReadExposure(camera: Camera) {\r\n const scene = this._scene;\r\n const live = scene.lightingMode === 'physical' ? camera.exposure : 1;\r\n this._exposureScale = live / getGICacheExposure(scene.lightingMode);\r\n // Before the first update there are no maps; that update writes the params\r\n if (this._irradiance && this._visibility) {\r\n this.updateParams();\r\n }\r\n }\r\n /**\r\n * Follows the camera and updates a budget of probes. Called by the scene\r\n * once a frame after the voxel scene is lit, which the rays read.\r\n */\r\n update(sdf: SceneSDF, voxels: VoxelScene, camera: Camera) {\r\n const global = sdf.enabled ? sdf.global : null;\r\n if (!global || !voxels.lit) {\r\n return;\r\n }\r\n this.ensureResources();\r\n const cameraPos = camera.getWorldPosition();\r\n for (const level of this._levels) {\r\n this.moveWindow(level, cameraPos);\r\n }\r\n this._frame++;\r\n const selected = this.select();\r\n this.updateParams();\r\n if (selected === 0) {\r\n return;\r\n }\r\n this._selected!.bufferSubData(0, this._selection);\r\n // A fresh random rotation of the ray set each update\r\n this.randomRotation();\r\n RenderGraphExecutor.profileScope('ProbeRelocate', () => this.runRelocate(global, selected));\r\n // After the relocation, which decides which probes start over, and before\r\n // the blend, which reads the seeds\r\n RenderGraphExecutor.profileScope('ProbeSeed', () => this.runSeed(selected));\r\n RenderGraphExecutor.profileScope('ProbeTrace', () => this.runTrace(global, voxels, camera, selected));\r\n this.runBlend(selected);\r\n RenderGraphExecutor.profileScope('ProbeCommit', () => this.runCommit(selected));\r\n this._updates++;\r\n this._lastUpdated = selected;\r\n }\r\n /**\r\n * Saves the volume: its maps, probe data and windows, to restore with\r\n * {@link ProbeVolume.importState} on a volume built with the same settings.\r\n * Resolves once the GPU has handed the maps back.\r\n */\r\n async exportState(): Promise<ArrayBuffer> {\r\n if (!this.ready || !this._irradiance || !this._visibility || !this._data) {\r\n throw new Error('ProbeVolume.exportState(): nothing to save yet');\r\n }\r\n const irr = new Uint16Array(new ArrayBuffer(this._irradiance.width * this._irradiance.height * 8));\r\n const visTexels = this._visibility.width * this._visibility.height;\r\n const visChannels = this._visibilityFormat === 'rg16f' ? 2 : 4;\r\n const visRead = new Uint16Array(new ArrayBuffer(visTexels * visChannels * 2));\r\n const data = new Float32Array(new ArrayBuffer(this._count * 16));\r\n // Issued together so the three readbacks wait for the GPU once, not three times\r\n await Promise.all([\r\n this._irradiance.readPixels(0, 0, this._irradiance.width, this._irradiance.height, 0, 0, irr),\r\n this._visibility.readPixels(0, 0, this._visibility.width, this._visibility.height, 0, 0, visRead),\r\n this._data.getBufferSubData(new Uint8Array(data.buffer), 0, data.byteLength)\r\n ]);\r\n // Saved as rgba16f whatever the device keeps, so a state moves between devices\r\n const vis = visChannels === 4 ? visRead : expandVisibility(visRead, visTexels);\r\n const header = JSON.stringify({\r\n grid: this._options.grid,\r\n spacing: this._options.spacing,\r\n levels: this._levels.length,\r\n levelScale: this._options.levelScale,\r\n origins: this._levels.map((l) => l.origin),\r\n irradiance: [this._irradiance.width, this._irradiance.height],\r\n visibility: [this._visibility.width, this._visibility.height]\r\n });\r\n const headerBytes = new TextEncoder().encode(header);\r\n const headerLength = (headerBytes.byteLength + 3) & ~3;\r\n const out = new Uint8Array(12 + headerLength + irr.byteLength + vis.byteLength + data.byteLength);\r\n const view = new DataView(out.buffer);\r\n view.setUint32(0, STATE_MAGIC, true);\r\n view.setUint32(4, STATE_VERSION, true);\r\n view.setUint32(8, headerLength, true);\r\n out.fill(0x20, 12, 12 + headerLength);\r\n out.set(headerBytes, 12);\r\n let offset = 12 + headerLength;\r\n out.set(new Uint8Array(irr.buffer), offset);\r\n offset += irr.byteLength;\r\n out.set(new Uint8Array(vis.buffer), offset);\r\n offset += vis.byteLength;\r\n out.set(new Uint8Array(data.buffer), offset);\r\n return out.buffer;\r\n }\r\n /**\r\n * Reads back up to `limit` probes of a level inside a world box, nearest the\r\n * centre first, for inspection: position, update/inactive state, mean\r\n * irradiance and sky visibility, and min/mean visibility hit distance.\r\n */\r\n async queryProbes(level: number, min: Vector3, max: Vector3, limit = 512) {\r\n const l = this._levels[level];\r\n if (!l || !l.origin || !this._irradiance || !this._visibility || !this._data) {\r\n return null;\r\n }\r\n const s = l.spacing;\r\n const lo = [Math.ceil(min.x / s), Math.ceil(min.y / s), Math.ceil(min.z / s)];\r\n const hi = [Math.floor(max.x / s), Math.floor(max.y / s), Math.floor(max.z / s)];\r\n const centre = [(min.x + max.x) / 2, (min.y + max.y) / 2, (min.z + max.z) / 2];\r\n const wrap = (v: number, m: number) => ((v % m) + m) % m;\r\n const picked: { world: number[]; index: number }[] = [];\r\n for (let z = lo[2]; z <= hi[2]; z++) {\r\n for (let y = lo[1]; y <= hi[1]; y++) {\r\n for (let x = lo[0]; x <= hi[0]; x++) {\r\n const w = [x, y, z];\r\n if (w.some((v, a) => v < l.origin![a] || v >= l.origin![a] + l.grid[a])) {\r\n continue;\r\n }\r\n const local =\r\n wrap(x, l.grid[0]) + l.grid[0] * (wrap(y, l.grid[1]) + l.grid[1] * wrap(z, l.grid[2]));\r\n picked.push({ world: w, index: local });\r\n }\r\n }\r\n }\r\n const dist2 = (w: number[]) => w.reduce((acc, v, a) => acc + (v * s - centre[a]) ** 2, 0);\r\n picked.sort((a, b) => dist2(a.world) - dist2(b.world));\r\n picked.length = Math.min(picked.length, limit);\r\n const irr = new Uint16Array(new ArrayBuffer(this._irradiance.width * this._irradiance.height * 8));\r\n const visChannels = this._visibilityFormat === 'rg16f' ? 2 : 4;\r\n const vis = new Uint16Array(\r\n new ArrayBuffer(this._visibility.width * this._visibility.height * visChannels * 2)\r\n );\r\n const data = new Float32Array(new ArrayBuffer(this._count * 16));\r\n await Promise.all([\r\n this._irradiance.readPixels(0, 0, this._irradiance.width, this._irradiance.height, 0, 0, irr),\r\n this._visibility.readPixels(0, 0, this._visibility.width, this._visibility.height, 0, 0, vis),\r\n this._data.getBufferSubData(new Uint8Array(data.buffer), 0, data.byteLength)\r\n ]);\r\n const tileMean = (\r\n texels: number,\r\n width: number,\r\n channels: number,\r\n raw: Uint16Array,\r\n index: number,\r\n reduce: (texel: number[]) => void\r\n ) => {\r\n const ox = (index % this._tileCols) * texels;\r\n const oy = Math.floor(index / this._tileCols) * texels;\r\n // Interior texels only; the border repeats them\r\n for (let y = 1; y < texels - 1; y++) {\r\n for (let x = 1; x < texels - 1; x++) {\r\n const o = ((oy + y) * width + ox + x) * channels;\r\n const t: number[] = [];\r\n for (let c = 0; c < channels; c++) {\r\n t.push(half2float(raw[o + c]));\r\n }\r\n reduce(t);\r\n }\r\n }\r\n };\r\n const probes = picked.map(({ world, index }) => {\r\n const tile = l.tileBase + index;\r\n const d = data.subarray(tile * 4, tile * 4 + 4);\r\n const irrSum = [0, 0, 0, 0];\r\n let n = 0;\r\n tileMean(IRRADIANCE_TEXELS, this._irradiance!.width, 4, irr, tile, (t) => {\r\n for (let c = 0; c < 4; c++) {\r\n irrSum[c] += t[c];\r\n }\r\n n++;\r\n });\r\n let visMin = Infinity;\r\n let visSum = 0;\r\n let m = 0;\r\n tileMean(VISIBILITY_TEXELS, this._visibility!.width, visChannels, vis, tile, (t) => {\r\n visMin = Math.min(visMin, t[0]);\r\n visSum += t[0];\r\n m++;\r\n });\r\n const r = (v: number) => Math.round(v * 1000) / 1000;\r\n return {\r\n world,\r\n position: [world[0] * s + d[0], world[1] * s + d[1], world[2] * s + d[2]].map(r),\r\n offset: [d[0], d[1], d[2]].map(r),\r\n updated: d[3] > 0.5,\r\n inactive: d[3] > PROBE_STATE_INACTIVE - 0.5,\r\n irradiance: irrSum.slice(0, 3).map((v) => r(v / n)),\r\n sky: r(irrSum[3] / n),\r\n hitMin: r(visMin),\r\n hitMean: r(visSum / m)\r\n };\r\n });\r\n return { level, spacing: s, origin: [...l.origin], grid: [...l.grid], probes };\r\n }\r\n /**\r\n * Restores a state saved by {@link ProbeVolume.exportState} with matching\r\n * settings; freeze the lighting afterwards or the windows follow the camera.\r\n */\r\n importState(buffer: ArrayBuffer) {\r\n const view = new DataView(buffer);\r\n if (view.getUint32(0, true) !== STATE_MAGIC || view.getUint32(4, true) !== STATE_VERSION) {\r\n throw new Error('ProbeVolume.importState(): not a probe state');\r\n }\r\n const headerLength = view.getUint32(8, true);\r\n const header = JSON.parse(new TextDecoder().decode(new Uint8Array(buffer, 12, headerLength)));\r\n if (\r\n header.levels !== this._levels.length ||\r\n header.spacing !== this._options.spacing ||\r\n header.levelScale !== this._options.levelScale ||\r\n header.grid.some((v: number, i: number) => v !== this._options.grid[i])\r\n ) {\r\n throw new Error('ProbeVolume.importState(): the state was saved with other settings');\r\n }\r\n this.ensureResources();\r\n const irrSize = this._irradiance!.width * this._irradiance!.height * 4;\r\n const visSize = this._visibility!.width * this._visibility!.height * 4;\r\n let offset = 12 + headerLength;\r\n const irr = new Uint16Array(buffer, offset, irrSize);\r\n offset += irr.byteLength;\r\n const vis = new Uint16Array(buffer, offset, visSize);\r\n offset += vis.byteLength;\r\n const visTexels = this._visibility!.width * this._visibility!.height;\r\n const data = new Float32Array(buffer, offset, this._count * 4);\r\n this._irradiance!.update(irr, 0, 0, this._irradiance!.width, this._irradiance!.height);\r\n this._visibility!.update(\r\n this._visibilityFormat === 'rg16f' ? compactVisibility(vis, visTexels) : vis,\r\n 0,\r\n 0,\r\n this._visibility!.width,\r\n this._visibility!.height\r\n );\r\n this._data!.bufferSubData(0, data);\r\n this._levels.forEach((level, l) => {\r\n level.origin = header.origins[l];\r\n for (let i = 0; i < level.count; i++) {\r\n level.state[i] = data[(level.tileBase + i) * 4 + 3] > 0.5 ? 1 : 0;\r\n }\r\n });\r\n this.updateParams();\r\n this._updates = Math.max(this._updates, 1);\r\n }\r\n dispose() {\r\n for (const tex of [\r\n this._irradiance,\r\n this._irradianceNext,\r\n this._irradianceSeed,\r\n this._visibility,\r\n this._visibilityNext,\r\n this._rayTexture\r\n ]) {\r\n tex?.dispose();\r\n }\r\n this._irradiance =\r\n this._irradianceNext =\r\n this._irradianceSeed =\r\n this._visibility =\r\n this._visibilityNext =\r\n this._rayTexture =\r\n null;\r\n this._rayFramebuffer?.dispose();\r\n this._rayFramebuffer = null;\r\n this._data?.dispose();\r\n this._selected?.dispose();\r\n this._data = this._selected = null;\r\n for (const buffer of this._scratch.values()) {\r\n buffer.dispose();\r\n }\r\n this._scratch.clear();\r\n for (const bg of [\r\n this._relocateBindGroup,\r\n this._seedBindGroup,\r\n this._traceBindGroup,\r\n this._blendIrrBindGroup,\r\n this._blendVisBindGroup,\r\n this._commitBindGroup\r\n ]) {\r\n bg?.dispose();\r\n }\r\n for (const prog of [\r\n this._relocateProgram,\r\n this._seedProgram,\r\n this._traceProgram,\r\n this._blendIrrProgram,\r\n this._blendVisProgram,\r\n this._commitProgram\r\n ]) {\r\n prog?.dispose();\r\n }\r\n this._relocateBindGroup = this._traceBindGroup = this._blendIrrBindGroup = this._blendVisBindGroup = null;\r\n this._relocateProgram = this._traceProgram = this._blendIrrProgram = this._blendVisProgram = null;\r\n this._seedProgram = this._seedBindGroup = null;\r\n this._commitProgram = this._commitBindGroup = null;\r\n for (const level of this._levels) {\r\n level.origin = null;\r\n }\r\n this._updates = 0;\r\n }\r\n /** @internal */\r\n private ensureResources() {\r\n if (this._irradiance) {\r\n return;\r\n }\r\n const device = getDevice();\r\n const rows = Math.ceil(this._count / this._tileCols);\r\n const make = (\r\n texels: number,\r\n name: string,\r\n cols = this._tileCols,\r\n r = rows,\r\n format: 'rgba16f' | 'rg16f' = 'rgba16f'\r\n ) => {\r\n const tex = device.createTexture2D(format, cols * texels, r * texels, {\r\n mipmapping: false,\r\n writable: true\r\n })!;\r\n tex.name = name;\r\n return tex;\r\n };\r\n this._irradiance = make(IRRADIANCE_TEXELS, '@ProbeIrradiance');\r\n // The blend outputs hold one update's tiles, committed to the maps after\r\n const stagingRows = Math.ceil(this._budget / STAGING_COLS);\r\n this._irradianceNext = make(IRRADIANCE_TEXELS, '@ProbeIrradianceNext', STAGING_COLS, stagingRows);\r\n this._irradianceSeed = make(IRRADIANCE_TEXELS, '@ProbeIrradianceSeed', STAGING_COLS, stagingRows);\r\n this._visibility = make(\r\n VISIBILITY_TEXELS,\r\n '@ProbeVisibility',\r\n this._tileCols,\r\n rows,\r\n this._visibilityFormat\r\n );\r\n this._visibilityNext = make(\r\n VISIBILITY_TEXELS,\r\n '@ProbeVisibilityNext',\r\n STAGING_COLS,\r\n stagingRows,\r\n this._visibilityFormat\r\n );\r\n this._rayTexture = device.createTexture2D('rgba16f', this._rays, this._budget, { mipmapping: false })!;\r\n this._rayTexture.name = '@ProbeRays';\r\n this._rayFramebuffer = device.createFrameBuffer([this._rayTexture], null)!;\r\n this._data = device.createBuffer(this._count * 16, { usage: 'uniform', storage: true })!;\r\n this._data.bufferSubData(0, new Float32Array(new ArrayBuffer(this._count * 16)));\r\n this._selected = device.createBuffer(this._budget * 4, { usage: 'uniform', storage: true })!;\r\n for (const level of this._levels) {\r\n level.state.fill(0);\r\n }\r\n }\r\n /** Re-centres a level's window on the camera, a spacing at a time; probes that entered start over. @internal */\r\n private moveWindow(level: ProbeLevel, cameraPos: Vector3) {\r\n const s = level.spacing;\r\n const n = level.grid;\r\n const next: [number, number, number] = [\r\n Math.floor(cameraPos.x / s) - (n[0] >> 1),\r\n Math.floor(cameraPos.y / s) - (n[1] >> 1),\r\n Math.floor(cameraPos.z / s) - (n[2] >> 1)\r\n ];\r\n const prev = level.origin;\r\n if (prev && prev[0] === next[0] && prev[1] === next[1] && prev[2] === next[2]) {\r\n return;\r\n }\r\n level.origin = next;\r\n const wrap = (v: number, m: number) => ((v % m) + m) % m;\r\n for (let z = 0; z < n[2]; z++) {\r\n for (let y = 0; y < n[1]; y++) {\r\n for (let x = 0; x < n[0]; x++) {\r\n const wx = next[0] + x;\r\n const wy = next[1] + y;\r\n const wz = next[2] + z;\r\n const inPrev =\r\n !!prev &&\r\n wx >= prev[0] &&\r\n wy >= prev[1] &&\r\n wz >= prev[2] &&\r\n wx < prev[0] + n[0] &&\r\n wy < prev[1] + n[1] &&\r\n wz < prev[2] + n[2];\r\n if (!inPrev) {\r\n const index = wrap(wx, n[0]) + n[0] * (wrap(wy, n[1]) + n[1] * wrap(wz, n[2]));\r\n level.state[index] = 0;\r\n level.lastRelocated[index] = -1000;\r\n this._data!.bufferSubData((level.tileBase + index) * 16, this._dataReset);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Picks the probes to update: never-updated ones first (a quarter of the\r\n * budget to the coarsest level, the rest finest first), then each level by\r\n * its share. At most once per frame per probe, since two updates would race\r\n * on the same staged tile.\r\n * @internal\r\n */\r\n private select() {\r\n let count = 0;\r\n const budget = this._budget;\r\n const frame = this._frame;\r\n const takeNew = (l: number, limit: number) => {\r\n const level = this._levels[l];\r\n for (let i = 0; i < level.count && count < limit; i++) {\r\n if (!level.state[i]) {\r\n this._selection[count++] =\r\n ((level.tileBase + i) | (l << SELECT_LEVEL_SHIFT) | SELECT_FIRST_BIT) >>> 0;\r\n level.state[i] = 1;\r\n level.lastSelected[i] = frame;\r\n }\r\n }\r\n };\r\n if (this._levels.length > 1) {\r\n takeNew(this._levels.length - 1, budget >> 2);\r\n }\r\n for (let l = 0; l < this._levels.length && count < budget; l++) {\r\n takeNew(l, budget);\r\n }\r\n const remaining = budget - count;\r\n for (let l = 0; l < this._levels.length && count < budget; l++) {\r\n const level = this._levels[l];\r\n let share = Math.max(1, Math.round((remaining * level.count) / this._count));\r\n let scanned = 0;\r\n while (share > 0 && count < budget && scanned < level.count) {\r\n const i = level.cursor;\r\n level.cursor = (level.cursor + 1) % level.count;\r\n scanned++;\r\n if (level.state[i] && level.lastSelected[i] !== frame) {\r\n this._selection[count++] = ((level.tileBase + i) | (l << SELECT_LEVEL_SHIFT)) >>> 0;\r\n level.lastSelected[i] = frame;\r\n share--;\r\n }\r\n }\r\n }\r\n for (let i = count; i < budget; i++) {\r\n this._selection[i] = 0xffffffff;\r\n }\r\n return count;\r\n }\r\n /** @internal */\r\n private randomRotation() {\r\n // Uniform random unit quaternion (Shoemake)\r\n const u1 = this._prng.get();\r\n const u2 = this._prng.get() * 2 * Math.PI;\r\n const u3 = this._prng.get() * 2 * Math.PI;\r\n const a = Math.sqrt(1 - u1);\r\n const b = Math.sqrt(u1);\r\n this._rotation.setXYZW(a * Math.sin(u2), a * Math.cos(u2), b * Math.sin(u3), b * Math.cos(u3));\r\n }\r\n /** @internal */\r\n private updateParams() {\r\n const o = this._options;\r\n const p = this._params;\r\n p.set([this._levels.length, this._tileCols, IRRADIANCE_TEXELS, VISIBILITY_TEXELS], 0);\r\n p.set(\r\n [this._irradiance!.width, this._irradiance!.height, this._visibility!.width, this._visibility!.height],\r\n 4\r\n );\r\n p.set([o.intensity * this._exposureScale, o.normalBias, o.viewBias, o.maxRayDistance], 8);\r\n this._levels.forEach((level, l) => {\r\n const origin = level.origin ?? [0, 0, 0];\r\n p.set([origin[0], origin[1], origin[2], level.spacing], 12 + l * 8);\r\n p.set([level.grid[0], level.grid[1], level.grid[2], level.tileBase], 16 + l * 8);\r\n });\r\n }\r\n /** @internal */\r\n private bindCommon(bg: BindGroup, global: NonNullable<SceneSDF['global']>) {\r\n global.applyBindGroup(bg);\r\n bg.setBuffer(PROBE_DATA, this._data!);\r\n bg.setValue(PROBE_PARAMS, this._params);\r\n bg.setBuffer('selected', this._selected!);\r\n bg.setValue('rotation', this._rotation);\r\n bg.setValue('rayInfo', new Vector4(this._rays, this._budget, this._frame, this._options.hysteresis));\r\n }\r\n /** @internal */\r\n private scratchBuffer(name: string, bytes: number) {\r\n let buffer = this._scratch.get(name);\r\n if (!buffer || buffer.byteLength < bytes) {\r\n buffer?.dispose();\r\n buffer = getDevice().createBuffer(Math.max(16, bytes), { usage: 'uniform', storage: true })!;\r\n this._scratch.set(name, buffer);\r\n }\r\n return buffer;\r\n }\r\n /**\r\n * Pushes selected probes out of nearby geometry along the SDF gradient,\r\n * never through a surface; on first update and every few frames after.\r\n * @internal\r\n */\r\n private runRelocate(global: NonNullable<SceneSDF['global']>, selected: number) {\r\n const device = getDevice();\r\n const levels = global.levels;\r\n if (!this._relocateProgram) {\r\n this._relocateProgram = buildSDFProgram({\r\n label: 'ProbeRelocate',\r\n workgroupSize: [64, 1, 1],\r\n compute(pb) {\r\n declareGlobalSDFUniforms(this, 0, levels);\r\n declareDynamicSDFUniforms(this, 0);\r\n this[PROBE_DATA] = pb.vec4[0]().storageBuffer(0);\r\n this[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(0);\r\n this.selected = pb.uint[0]().storageBufferReadonly(0);\r\n this.rotation = pb.vec4().uniform(0);\r\n // (rays per probe, probes selected, frame, hysteresis)\r\n this.rayInfo = pb.vec4().uniform(0);\r\n this.relocate = pb.uint[0]().storageBufferReadonly(0);\r\n pb.main(function () {\r\n this.$l.slot = this.$builtins.globalInvocationId.x;\r\n this.$if(pb.greaterThanEqual(this.slot, pb.uint(this.rayInfo.y)), function () {\r\n this.$return();\r\n });\r\n this.$if(pb.equal(this.relocate.at(this.slot), 0), function () {\r\n this.$return();\r\n });\r\n this.$l.sel = this.selected.at(this.slot);\r\n this.$l.index = pb.int(pb.compAnd(this.sel, pb.uint(SELECT_INDEX_MASK)));\r\n this.$l.level = pb.int(pb.compAnd(pb.sar(this.sel, SELECT_LEVEL_SHIFT), pb.uint(0x7f)));\r\n this.$l.texel = probeTexelFromIndex(this, this.level, this.index);\r\n this.$l.world = probeWorldFromTexel(this, this.level, this.texel);\r\n this.$l.data = this[PROBE_DATA].at(this.index);\r\n this.$l.spacing = probeLevelOrigin(this, this.level).w;\r\n this.$l.grid = pb.mul(pb.vec3(this.world), this.spacing);\r\n // Keep at least this far from surfaces, moving at most this far from the grid point\r\n this.$l.keep = pb.mul(this.spacing, 0.3);\r\n this.$l.limit = pb.mul(this.spacing, 0.45);\r\n // Central differences at least a finest field voxel apart, so sub-voxel walls give a gradient\r\n this.$l.h = pb.max(pb.mul(this.spacing, 0.05), this[GLOBAL_SDF_LEVELS].at(0).w);\r\n // Crossing check every quarter voxel: thin walls dip only slightly below their face distance\r\n this.$l.probeStep = pb.mul(this[GLOBAL_SDF_LEVELS].at(0).w, 0.25);\r\n // Always from the grid point, so the result depends on the field alone and never drifts\r\n this.$l.pos = this.grid;\r\n this.$for(pb.int('iter'), 0, 3, function () {\r\n this.$l.d = sampleSceneSDF(this, this.pos, levels);\r\n this.$if(pb.greaterThanEqual(this.d, this.keep), function () {\r\n this.$break();\r\n });\r\n this.$l.g = pb.vec3(\r\n pb.sub(\r\n sampleSceneSDF(this, pb.add(this.pos, pb.vec3(this.h, 0, 0)), levels),\r\n sampleSceneSDF(this, pb.sub(this.pos, pb.vec3(this.h, 0, 0)), levels)\r\n ),\r\n pb.sub(\r\n sampleSceneSDF(this, pb.add(this.pos, pb.vec3(0, this.h, 0)), levels),\r\n sampleSceneSDF(this, pb.sub(this.pos, pb.vec3(0, this.h, 0)), levels)\r\n ),\r\n pb.sub(\r\n sampleSceneSDF(this, pb.add(this.pos, pb.vec3(0, 0, this.h)), levels),\r\n sampleSceneSDF(this, pb.sub(this.pos, pb.vec3(0, 0, this.h)), levels)\r\n )\r\n );\r\n this.$l.n = pb.div(this.g, pb.max(pb.length(this.g), 1e-6));\r\n this.$l.next = pb.sub(pb.add(this.pos, pb.mul(this.n, pb.sub(this.keep, this.d))), this.grid);\r\n this.$l.len = pb.length(this.next);\r\n this.$if(pb.greaterThan(this.len, this.limit), function () {\r\n this.next = pb.mul(this.next, pb.div(this.limit, this.len));\r\n });\r\n this.next = pb.add(this.grid, this.next);\r\n // A distance dip along the move means it passes through geometry: stop here\r\n this.$l.moveLen = pb.length(pb.sub(this.next, this.pos));\r\n this.$l.samples = pb.int(pb.min(pb.ceil(pb.div(this.moveLen, this.probeStep)), 64));\r\n this.$l.through = false;\r\n this.$for(pb.int('k'), 1, this.samples, function () {\r\n this.$l.q = pb.mix(this.pos, this.next, pb.div(pb.float(this.k), pb.float(this.samples)));\r\n this.$if(\r\n pb.lessThan(sampleSceneSDF(this, this.q, levels), pb.sub(this.d, this.probeStep)),\r\n function () {\r\n this.through = true;\r\n this.$break();\r\n }\r\n );\r\n });\r\n this.$if(this.through, function () {\r\n this.$break();\r\n });\r\n this.pos = this.next;\r\n });\r\n this.$l.offset = pb.sub(this.pos, this.grid);\r\n // Classification (Majercik et al. 2021, §5): a probe inside geometry is\r\n // inactive; one out again starts over. Static field only, so dynamic instances turn none off\r\n this.$l.probeState = this.data.w;\r\n this.$if(pb.lessThan(sampleGlobalSDF(this, this.pos, levels), 0), function () {\r\n this.probeState = pb.float(PROBE_STATE_INACTIVE);\r\n }).$elseif(pb.greaterThan(this.probeState, PROBE_STATE_INACTIVE - 0.5), function () {\r\n this.probeState = pb.float(0);\r\n });\r\n this[PROBE_DATA].setAt(this.index, pb.vec4(this.offset, this.probeState));\r\n });\r\n }\r\n });\r\n this._relocateBindGroup = device.createBindGroup(this._relocateProgram.bindGroupLayouts[0]);\r\n }\r\n // Which selected probes relocate this frame\r\n const flags = new Uint32Array(new ArrayBuffer(this._budget * 4));\r\n for (let i = 0; i < selected; i++) {\r\n const sel = this._selection[i];\r\n const level = this._levels[(sel >>> SELECT_LEVEL_SHIFT) & 0x7f];\r\n const index = (sel & SELECT_INDEX_MASK) - level.tileBase;\r\n if (this._frame - level.lastRelocated[index] >= RELOCATE_EVERY) {\r\n flags[i] = 1;\r\n level.lastRelocated[index] = this._frame;\r\n }\r\n }\r\n const relocateBuffer = this.scratchBuffer('relocate', flags.byteLength);\r\n relocateBuffer.bufferSubData(0, flags);\r\n const bg = this._relocateBindGroup!;\r\n this.bindCommon(bg, global);\r\n bg.setBuffer('relocate', relocateBuffer);\r\n device.setProgram(this._relocateProgram);\r\n device.setBindGroup(0, bg);\r\n device.compute(Math.ceil(selected / 64), 1, 1);\r\n }\r\n /**\r\n * Seeds the irradiance of probes starting over by trilinearly blending the\r\n * eight surrounding active probes of the level above; the first update then\r\n * blends into the seed with hysteresis. Without a seed, alpha is -1. One\r\n * workgroup per selected probe, written by selection slot.\r\n * @internal\r\n */\r\n private runSeed(selected: number) {\r\n const device = getDevice();\r\n if (!this._seedProgram) {\r\n this._seedProgram = buildSDFProgram({\r\n label: 'ProbeSeed',\r\n workgroupSize: [IRRADIANCE_TEXELS, IRRADIANCE_TEXELS, 1],\r\n compute(pb) {\r\n this[PROBE_DATA] = pb.vec4[0]().storageBufferReadonly(0);\r\n this[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(0);\r\n this.selected = pb.uint[0]().storageBufferReadonly(0);\r\n this.irradiance = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.seedOut = pb.texStorage2D.rgba16float().storage(0);\r\n pb.main(function () {\r\n this.$l.slot = this.$builtins.workGroupId.x;\r\n this.$l.sel = this.selected.at(this.slot);\r\n this.$l.index = pb.int(pb.compAnd(this.sel, pb.uint(SELECT_INDEX_MASK)));\r\n this.$l.level = pb.int(pb.compAnd(pb.sar(this.sel, SELECT_LEVEL_SHIFT), pb.uint(0x7f)));\r\n this.$l.uv = pb.ivec2(this.$builtins.localInvocationId.xy);\r\n this.$l.data = this[PROBE_DATA].at(this.index);\r\n // Starting over as the blend tells it\r\n this.$l.first = pb.or(\r\n pb.greaterThan(pb.compAnd(this.sel, pb.uint(SELECT_FIRST_BIT)), pb.uint(0)),\r\n pb.lessThan(this.data.w, 0.5)\r\n );\r\n this.$l.parent = pb.add(this.level, 1);\r\n this.$l.sum = pb.vec4(0);\r\n this.$l.wsum = pb.float(0);\r\n this.$if(\r\n pb.and(this.first, pb.lessThan(this.parent, pb.int(this[PROBE_PARAMS].at(0).x))),\r\n function () {\r\n this.$l.texel = probeTexelFromIndex(this, this.level, this.index);\r\n this.$l.pos = probePosition(\r\n this,\r\n this.level,\r\n probeWorldFromTexel(this, this.level, this.texel),\r\n this.data\r\n );\r\n this.$l.lo = probeLevelOrigin(this, this.parent);\r\n this.$l.n3 = pb.vec3(probeLevelGrid(this, this.parent).xyz);\r\n // In probes of the level above, its grid points at integers\r\n this.$l.g = pb.sub(pb.div(this.pos, this.lo.w), this.lo.xyz);\r\n this.$if(\r\n pb.and(\r\n pb.all(pb.greaterThanEqual(this.g, pb.vec3(0))),\r\n pb.all(pb.lessThanEqual(this.g, pb.sub(this.n3, pb.vec3(1))))\r\n ),\r\n function () {\r\n this.$l.base = pb.clamp(pb.floor(this.g), pb.vec3(0), pb.sub(this.n3, pb.vec3(2)));\r\n this.$l.alpha = pb.clamp(pb.sub(this.g, this.base), pb.vec3(0), pb.vec3(1));\r\n for (let i = 0; i < 8; i++) {\r\n const off = [i & 1, (i >> 1) & 1, (i >> 2) & 1];\r\n this.$l[`pw${i}`] = pb.add(\r\n pb.ivec3(this.lo.xyz),\r\n pb.ivec3(this.base),\r\n pb.ivec3(off[0], off[1], off[2])\r\n );\r\n this.$l[`pi${i}`] = probeTileIndex(\r\n this,\r\n this.parent,\r\n probeTexelFromWorld(this, this.parent, this[`pw${i}`])\r\n );\r\n this.$if(probeActive(this, this[PROBE_DATA].at(this[`pi${i}`])), function () {\r\n this.$l.tri = pb.mul(\r\n off[0] ? this.alpha.x : pb.sub(1, this.alpha.x),\r\n off[1] ? this.alpha.y : pb.sub(1, this.alpha.y),\r\n off[2] ? this.alpha.z : pb.sub(1, this.alpha.z)\r\n );\r\n this.sum = pb.add(\r\n this.sum,\r\n pb.mul(\r\n pb.textureLoad(\r\n this.irradiance,\r\n pb.add(\r\n probeTileOrigin(this, this[`pi${i}`], pb.float(IRRADIANCE_TEXELS)),\r\n this.uv\r\n ),\r\n 0\r\n ),\r\n this.tri\r\n )\r\n );\r\n this.wsum = pb.add(this.wsum, this.tri);\r\n });\r\n }\r\n }\r\n );\r\n }\r\n );\r\n pb.textureStore(\r\n this.seedOut,\r\n pb.uvec2(pb.add(stagingOrigin(this, this.slot, IRRADIANCE_TEXELS), this.uv)),\r\n this.$choice(\r\n pb.greaterThan(this.wsum, 1e-4),\r\n pb.div(this.sum, pb.max(this.wsum, 1e-4)),\r\n pb.vec4(0, 0, 0, -1)\r\n )\r\n );\r\n });\r\n }\r\n })!;\r\n this._seedBindGroup = device.createBindGroup(this._seedProgram.bindGroupLayouts[0]);\r\n }\r\n const bg = this._seedBindGroup!;\r\n bg.setBuffer(PROBE_DATA, this._data!);\r\n bg.setValue(PROBE_PARAMS, this._params);\r\n bg.setBuffer('selected', this._selected!);\r\n bg.setTexture('irradiance', this._irradiance!, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('seedOut', this._irradianceSeed!);\r\n device.setProgram(this._seedProgram);\r\n device.setBindGroup(0, bg);\r\n device.compute(selected, 1, 1);\r\n }\r\n /**\r\n * Traces the rays of the selected probes: one fragment per ray, the hit's\r\n * voxel radiance or the sky, and the hit distance (negative when the ray\r\n * started inside geometry, {@link SKY_ESCAPE_DISTANCE} when it escaped to\r\n * the sky), into the ray texture.\r\n * @internal\r\n */\r\n private runTrace(\r\n global: NonNullable<SceneSDF['global']>,\r\n voxels: VoxelScene,\r\n camera: Camera,\r\n selected: number\r\n ) {\r\n const device = getDevice();\r\n const scene = this._scene;\r\n const envLight = scene.env.light.envLight;\r\n // Voxel radiance and sky bake share the cache exposure; the sky takes the strength alone\r\n const envStrength = scene.env.light.strength ?? 0;\r\n // No sky without an environment light (its stand-in carries only the probes)\r\n const skyMode =\r\n scene.env.light.type === 'none'\r\n ? 'none'\r\n : envLight.hasRadiance()\r\n ? 'radiance'\r\n : envLight.hasIrradiance()\r\n ? 'irradiance'\r\n : 'none';\r\n const envVariant =\r\n skyMode !== 'none'\r\n ? `${envLight.getType()}:${\r\n (envLight as unknown as { irradianceSHFB?: unknown }).irradianceSHFB\r\n ? 'fb'\r\n : (envLight as unknown as { irradianceSH?: unknown }).irradianceSH\r\n ? 'buf'\r\n : ''\r\n }`\r\n : '';\r\n const key = `${global.levels}:${skyMode}:${envVariant}`;\r\n if (!this._traceProgram || this._traceKey !== key) {\r\n this._traceBindGroup?.dispose();\r\n this._traceProgram?.dispose();\r\n const levels = global.levels;\r\n this._traceProgram = buildSDFProgram({\r\n label: 'ProbeTrace',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n declareGlobalSDFUniforms(this, 0, levels);\r\n declareDynamicSDFUniforms(this, 0);\r\n declareVoxelSceneUniforms(this, 0);\r\n this[PROBE_DATA] = pb.vec4[0]().storageBufferReadonly(0);\r\n this[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(0);\r\n this.selected = pb.uint[0]().storageBufferReadonly(0);\r\n this.rotation = pb.vec4().uniform(0);\r\n this.rayInfo = pb.vec4().uniform(0);\r\n // (environment strength, 0, 0, 0)\r\n this.skyInfo = pb.vec4().uniform(0);\r\n if (skyMode !== 'none') {\r\n envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$l.fc = pb.ivec2(pb.floor(this.$builtins.fragCoord.xy));\r\n this.$l.slot = pb.uint(this.fc.y);\r\n this.$l.sel = this.selected.at(this.slot);\r\n this.$l.index = pb.int(pb.compAnd(this.sel, pb.uint(SELECT_INDEX_MASK)));\r\n this.$l.level = pb.int(pb.compAnd(pb.sar(this.sel, SELECT_LEVEL_SHIFT), pb.uint(0x7f)));\r\n this.$l.texel = probeTexelFromIndex(this, this.level, this.index);\r\n this.$l.world = probeWorldFromTexel(this, this.level, this.texel);\r\n this.$l.data = this[PROBE_DATA].at(this.index);\r\n this.$l.pos = probePosition(this, this.level, this.world, this.data);\r\n this.$l.dir = quatRotate(\r\n this,\r\n this.rotation,\r\n sphericalFibonacci(this, pb.float(this.fc.x), this.rayInfo.x)\r\n );\r\n // Coarser levels look proportionally farther\r\n this.$l.spacing = probeLevelOrigin(this, this.level).w;\r\n this.$l.maxDist = pb.mul(\r\n this[PROBE_PARAMS].at(2).w,\r\n pb.div(this.spacing, probeLevelOrigin(this, 0).w)\r\n );\r\n // Past the visibility range, start at the field level matching the probe level;\r\n // within it read every level, since coarse\r\n // levels close thin gaps and would shut probes in\r\n this.$l.fieldScale = pb.div(this[GLOBAL_SDF_LEVELS].at(0).w, probeLevelOrigin(this, 0).w);\r\n this.$l.farLevel = pb.int(0);\r\n for (let i = 1; i < levels; i++) {\r\n this.$if(\r\n pb.lessThanEqual(\r\n this[GLOBAL_SDF_LEVELS].at(i).w,\r\n pb.mul(this.spacing, this.fieldScale, 1.01)\r\n ),\r\n function () {\r\n this.farLevel = pb.int(i);\r\n }\r\n );\r\n }\r\n this.$l.fineRange = pb.mul(this.spacing, VISIBILITY_RANGE);\r\n this.$l.radiance = pb.vec3(0);\r\n this.$l.dist = this.maxDist;\r\n this.$l.d0 = sampleSceneSDF(this, this.pos, levels);\r\n this.$if(pb.lessThan(this.d0, 0), function () {\r\n // Started inside geometry: a backface hit at no distance\r\n this.dist = pb.float(-0.01);\r\n }).$else(function () {\r\n this.$l.t = pb.float(0);\r\n this.$l.hit = false;\r\n this.$l.prevD = pb.float(0);\r\n // Distance read at the hit\r\n this.$l.hitD = pb.float(0);\r\n // Voxel size of the level that answered at the hit, 0 for a dynamic instance\r\n this.$l.hitVoxel = pb.float(0);\r\n // Finest field level the step that hit could read\r\n this.$l.hitMin = pb.int(0);\r\n this.$for(pb.int('i'), 0, TRACE_STEPS, function () {\r\n this.$l.sp = pb.add(this.pos, pb.mul(this.dir, this.t));\r\n this.$l.stepMin = this.$choice(pb.lessThan(this.t, this.fineRange), pb.int(0), this.farLevel);\r\n this.$l.s = sampleSceneSDFHinted(this, this.sp, this.prevD, levels, this.stepMin);\r\n this.$l.d = this.s.x;\r\n this.prevD = this.d;\r\n this.$l.expand = sdfSurfaceExpand(this, this.sp, this.s, this.t, levels);\r\n this.$if(pb.lessThan(this.d, this.expand), function () {\r\n // Swollen surface decides the hit so sub-voxel walls stop the ray\r\n this.hitD = this.d;\r\n this.hit = true;\r\n this.hitVoxel = this.s.y;\r\n this.hitMin = this.stepMin;\r\n this.$break();\r\n });\r\n this.t = pb.add(this.t, pb.max(this.d, 0.02));\r\n this.$if(pb.greaterThan(this.t, this.maxDist), function () {\r\n this.$break();\r\n });\r\n });\r\n this.$if(this.hit, function () {\r\n // Keep the distance to the unswollen surface, else concave corners read as hidden\r\n this.dist = sdfRefineHit(\r\n this,\r\n this.pos,\r\n this.dir,\r\n this.t,\r\n this.hitD,\r\n this.hitVoxel,\r\n this.hitMin,\r\n levels\r\n );\r\n this.$l.hp = pb.add(this.pos, pb.mul(this.dir, this.t));\r\n // Hit normal from the SDF gradient\r\n this.$l.hg = pb.vec3(0);\r\n this.$if(pb.greaterThan(this.hitVoxel, 0), function () {\r\n // Central differences over half a voxel of the answering level\r\n // (ComputeGlobalDistanceFieldNormal); level blends take the nearer level\r\n this.$l.hl = this.hitMin;\r\n for (let i = 1; i < levels; i++) {\r\n this.$if(\r\n pb.and(\r\n pb.greaterThanEqual(pb.int(i), this.hitMin),\r\n pb.greaterThan(this.hitVoxel, pb.mul(this[GLOBAL_SDF_LEVELS].at(i - 1).w, Math.SQRT2))\r\n ),\r\n function () {\r\n this.hl = pb.int(i);\r\n }\r\n );\r\n }\r\n this.$l.he = pb.mul(this[GLOBAL_SDF_LEVELS].at(this.hl).w, 0.5);\r\n this.hg = pb.vec3(\r\n pb.sub(\r\n sampleGlobalSDFLevel(this, pb.add(this.hp, pb.vec3(this.he, 0, 0)), this.hl, levels),\r\n sampleGlobalSDFLevel(this, pb.sub(this.hp, pb.vec3(this.he, 0, 0)), this.hl, levels)\r\n ),\r\n pb.sub(\r\n sampleGlobalSDFLevel(this, pb.add(this.hp, pb.vec3(0, this.he, 0)), this.hl, levels),\r\n sampleGlobalSDFLevel(this, pb.sub(this.hp, pb.vec3(0, this.he, 0)), this.hl, levels)\r\n ),\r\n pb.sub(\r\n sampleGlobalSDFLevel(this, pb.add(this.hp, pb.vec3(0, 0, this.he)), this.hl, levels),\r\n sampleGlobalSDFLevel(this, pb.sub(this.hp, pb.vec3(0, 0, this.he)), this.hl, levels)\r\n )\r\n );\r\n }).$else(function () {\r\n // Dynamic instance: forward differences of the merged field over the finest voxel\r\n this.$l.he = this[GLOBAL_SDF_LEVELS].at(0).w;\r\n this.$l.hd = sampleSceneSDF(this, this.hp, levels);\r\n this.hg = pb.vec3(\r\n pb.sub(sampleSceneSDF(this, pb.add(this.hp, pb.vec3(this.he, 0, 0)), levels), this.hd),\r\n pb.sub(sampleSceneSDF(this, pb.add(this.hp, pb.vec3(0, this.he, 0)), levels), this.hd),\r\n pb.sub(sampleSceneSDF(this, pb.add(this.hp, pb.vec3(0, 0, this.he)), levels), this.hd)\r\n );\r\n });\r\n this.$l.hn = this.$choice(\r\n pb.greaterThan(pb.dot(this.hg, this.hg), 1e-12),\r\n pb.normalize(this.hg),\r\n pb.neg(this.dir)\r\n );\r\n this.radiance = sampleVoxelSceneRadiance(this, this.hp, this.hn, levels);\r\n }).$else(function () {\r\n this.dist = pb.float(SKY_ESCAPE_DISTANCE);\r\n if (skyMode === 'radiance') {\r\n this.radiance = pb.mul(\r\n envLight.getRadiance(this, this.dir, pb.float(0))!.rgb,\r\n this.skyInfo.x\r\n );\r\n } else if (skyMode === 'irradiance') {\r\n this.radiance = pb.mul(envLight.getIrradiance(this, this.dir).rgb, this.skyInfo.x);\r\n }\r\n });\r\n });\r\n this.$outputs.color = pb.vec4(this.radiance, this.dist);\r\n });\r\n }\r\n });\r\n this._traceKey = key;\r\n this._traceBindGroup = device.createBindGroup(this._traceProgram.bindGroupLayouts[0]);\r\n }\r\n const bg = this._traceBindGroup!;\r\n this.bindCommon(bg, global);\r\n bg.setTexture(VOXEL_SCENE_ALBEDO, voxels.albedo, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture(VOXEL_SCENE_EMISSIVE, voxels.emissive, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture(VOXEL_SCENE_RADIANCE, voxels.radiance, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture(VOXEL_SCENE_ANISO0, voxels.radianceAniso0, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture(VOXEL_SCENE_ANISO1, voxels.radianceAniso1, fetchSampler('clamp_nearest_nomip'));\r\n bg.setValue('skyInfo', new Vector4(envStrength, 0, 0, 0));\r\n if (skyMode !== 'none') {\r\n envLight.updateBindGroup(bg);\r\n }\r\n if (!this._renderStates) {\r\n this._renderStates = device.createRenderStateSet();\r\n this._renderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._renderStates.useRasterizerState().setCullMode('none');\r\n }\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(this._rayFramebuffer!);\r\n device.setViewport([0, 0, this._rays, selected]);\r\n device.setScissor([0, 0, this._rays, selected]);\r\n device.setProgram(this._traceProgram);\r\n device.setBindGroup(0, bg);\r\n drawFullscreenQuad(this._renderStates);\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n }\r\n /**\r\n * Integrates the traced rays into the selected probes' maps, one thread per\r\n * texel; border texels use the direction of the interior texel they mirror.\r\n * @internal\r\n */\r\n private runBlend(selected: number) {\r\n const device = getDevice();\r\n if (!this._blendIrrProgram) {\r\n this._blendIrrProgram = this.createBlendProgram(IRRADIANCE_TEXELS, false);\r\n this._blendIrrBindGroup = device.createBindGroup(this._blendIrrProgram.bindGroupLayouts[0]);\r\n this._blendVisProgram = this.createBlendProgram(VISIBILITY_TEXELS, true);\r\n this._blendVisBindGroup = device.createBindGroup(this._blendVisProgram.bindGroupLayouts[0]);\r\n }\r\n // Irradiance last: it marks probes updated, and both passes read the prior state\r\n const passes: [string, GPUProgram, BindGroup, Texture2D, Texture2D, Nullable<Texture2D>][] = [\r\n [\r\n 'ProbeBlendVisibility',\r\n this._blendVisProgram!,\r\n this._blendVisBindGroup!,\r\n this._visibility!,\r\n this._visibilityNext!,\r\n null\r\n ],\r\n [\r\n 'ProbeBlendIrradiance',\r\n this._blendIrrProgram,\r\n this._blendIrrBindGroup!,\r\n this._irradiance!,\r\n this._irradianceNext!,\r\n this._irradianceSeed!\r\n ]\r\n ];\r\n for (const [scope, program, bg, current, next, seed] of passes) {\r\n if (seed) {\r\n bg.setTexture('seedTex', seed, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n bg.setBuffer(PROBE_DATA, this._data!);\r\n bg.setValue(PROBE_PARAMS, this._params);\r\n bg.setBuffer('selected', this._selected!);\r\n bg.setValue('rotation', this._rotation);\r\n bg.setValue('rayInfo', new Vector4(this._rays, this._budget, this._frame, this._options.hysteresis));\r\n bg.setTexture('rays', this._rayTexture!, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('current', current, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('next', next);\r\n RenderGraphExecutor.profileScope(scope, () => {\r\n device.setProgram(program);\r\n device.setBindGroup(0, bg);\r\n device.compute(selected, 1, 1);\r\n });\r\n }\r\n }\r\n /**\r\n * Copies the staged tiles of {@link ProbeVolume.runBlend} into the maps, one\r\n * workgroup per updated probe, leaving other tiles untouched.\r\n * @internal\r\n */\r\n private runCommit(selected: number) {\r\n const device = getDevice();\r\n const twoChannel = this._visibilityFormat === 'rg16f';\r\n if (!this._commitProgram) {\r\n this._commitProgram = buildSDFProgram({\r\n label: 'ProbeCommit',\r\n workgroupSize: [VISIBILITY_TEXELS, VISIBILITY_TEXELS, 1],\r\n compute(pb) {\r\n this[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(0);\r\n this.selected = pb.uint[0]().storageBufferReadonly(0);\r\n this.stagedIrradiance = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.stagedVisibility = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.irradiance = pb.texStorage2D.rgba16float().storage(0);\r\n this.visibility = twoChannel\r\n ? pb.texStorage2D.rg16float().storage(0)\r\n : pb.texStorage2D.rgba16float().storage(0);\r\n pb.main(function () {\r\n this.$l.slot = this.$builtins.workGroupId.x;\r\n this.$l.index = pb.int(pb.compAnd(this.selected.at(this.slot), pb.uint(SELECT_INDEX_MASK)));\r\n this.$l.uv = pb.ivec2(this.$builtins.localInvocationId.xy);\r\n pb.textureStore(\r\n this.visibility,\r\n pb.uvec2(pb.add(probeTileOrigin(this, this.index, pb.float(VISIBILITY_TEXELS)), this.uv)),\r\n pb.textureLoad(\r\n this.stagedVisibility,\r\n pb.add(stagingOrigin(this, this.slot, VISIBILITY_TEXELS), this.uv),\r\n 0\r\n )\r\n );\r\n this.$if(pb.all(pb.lessThan(this.uv, pb.ivec2(IRRADIANCE_TEXELS))), function () {\r\n pb.textureStore(\r\n this.irradiance,\r\n pb.uvec2(pb.add(probeTileOrigin(this, this.index, pb.float(IRRADIANCE_TEXELS)), this.uv)),\r\n pb.textureLoad(\r\n this.stagedIrradiance,\r\n pb.add(stagingOrigin(this, this.slot, IRRADIANCE_TEXELS), this.uv),\r\n 0\r\n )\r\n );\r\n });\r\n });\r\n }\r\n })!;\r\n this._commitBindGroup = device.createBindGroup(this._commitProgram.bindGroupLayouts[0]);\r\n }\r\n const bg = this._commitBindGroup!;\r\n bg.setValue(PROBE_PARAMS, this._params);\r\n bg.setBuffer('selected', this._selected!);\r\n bg.setTexture('stagedIrradiance', this._irradianceNext!, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('stagedVisibility', this._visibilityNext!, fetchSampler('clamp_nearest_nomip'));\r\n bg.setTexture('irradiance', this._irradiance!);\r\n bg.setTexture('visibility', this._visibility!);\r\n device.setProgram(this._commitProgram);\r\n device.setBindGroup(0, bg);\r\n device.compute(selected, 1, 1);\r\n }\r\n /** @internal */\r\n private createBlendProgram(texels: number, visibility: boolean) {\r\n const rays = this._rays;\r\n const twoChannel = this._visibilityFormat === 'rg16f';\r\n return buildSDFProgram({\r\n label: visibility ? 'ProbeBlendVisibility' : 'ProbeBlendIrradiance',\r\n workgroupSize: [texels, texels, 1],\r\n compute(pb) {\r\n this[PROBE_DATA] = pb.vec4[0]().storageBuffer(0);\r\n this[PROBE_PARAMS] = pb.vec4[PROBE_PARAM_VEC4S]().uniform(0);\r\n this.selected = pb.uint[0]().storageBufferReadonly(0);\r\n this.rotation = pb.vec4().uniform(0);\r\n this.rayInfo = pb.vec4().uniform(0);\r\n this.rays = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.current = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n if (!visibility) {\r\n // Seeds of the probes starting over, by selection slot (runSeed)\r\n this.seedTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n this.next =\r\n visibility && twoChannel\r\n ? pb.texStorage2D.rg16float().storage(0)\r\n : pb.texStorage2D.rgba16float().storage(0);\r\n // A batch of the probe's rays, direction and traced result, read once per workgroup\r\n this.batchDir = pb.vec4[BLEND_BATCH]().workgroup();\r\n this.batchRay = pb.vec4[BLEND_BATCH]().workgroup();\r\n pb.main(function () {\r\n this.$l.slot = this.$builtins.workGroupId.x;\r\n this.$l.sel = this.selected.at(this.slot);\r\n this.$l.index = pb.int(pb.compAnd(this.sel, pb.uint(SELECT_INDEX_MASK)));\r\n this.$l.level = pb.int(pb.compAnd(pb.sar(this.sel, SELECT_LEVEL_SHIFT), pb.uint(0x7f)));\r\n // First update: new to its window, or state 0 (e.g. reactivated by relocation)\r\n this.$l.probeState = this[PROBE_DATA].at(this.index).w;\r\n this.$l.first = pb.or(\r\n pb.greaterThan(pb.compAnd(this.sel, pb.uint(SELECT_FIRST_BIT)), pb.uint(0)),\r\n pb.lessThan(this.probeState, 0.5)\r\n );\r\n this.$l.uv = pb.ivec2(this.$builtins.localInvocationId.xy);\r\n // Border texels mirror the interior: take the direction of the texel they copy\r\n const s = texels;\r\n this.$l.src = this.uv;\r\n this.$l.onX = pb.or(pb.equal(this.uv.x, 0), pb.equal(this.uv.x, s - 1));\r\n this.$l.onY = pb.or(pb.equal(this.uv.y, 0), pb.equal(this.uv.y, s - 1));\r\n this.$if(pb.and(this.onX, this.onY), function () {\r\n this.src = pb.ivec2(\r\n this.$choice(pb.equal(this.uv.x, 0), pb.int(s - 2), pb.int(1)),\r\n this.$choice(pb.equal(this.uv.y, 0), pb.int(s - 2), pb.int(1))\r\n );\r\n })\r\n .$elseif(this.onX, function () {\r\n this.src = pb.ivec2(\r\n this.$choice(pb.equal(this.uv.x, 0), pb.int(1), pb.int(s - 2)),\r\n pb.sub(s - 1, this.uv.y)\r\n );\r\n })\r\n .$elseif(this.onY, function () {\r\n this.src = pb.ivec2(\r\n pb.sub(s - 1, this.uv.x),\r\n this.$choice(pb.equal(this.uv.y, 0), pb.int(1), pb.int(s - 2))\r\n );\r\n });\r\n this.$l.oct = pb.sub(\r\n pb.mul(pb.div(pb.add(pb.vec2(this.src), pb.vec2(-1 + 0.5)), s - 2), 2),\r\n pb.vec2(1)\r\n );\r\n this.$l.dir = octDecode(this, this.oct);\r\n this.$l.sum = pb.vec4(0);\r\n this.$l.wsum = pb.float(0);\r\n this.$l.maxDist = pb.mul(probeLevelOrigin(this, this.level).w, VISIBILITY_RANGE);\r\n // One ray, `ray` its traced result and `c` the cosine to the texel's direction\r\n const accumulate = (scope: PBInsideFunctionScope) => {\r\n if (visibility) {\r\n // Sharpened (cos^50); below cos 0.8 the weight is under 2e-5, so skip\r\n scope.$if(pb.greaterThan(scope.c, 0.8), function (this: PBInsideFunctionScope) {\r\n this.$l.w = pb.pow(this.c, 50);\r\n this.$l.hd = pb.abs(this.ray.a);\r\n this.$if(pb.lessThan(this.ray.a, 0), function () {\r\n this.hd = pb.mul(this.hd, 0.2);\r\n });\r\n this.hd = pb.min(this.hd, this.maxDist);\r\n this.sum = pb.add(this.sum, pb.mul(pb.vec4(this.hd, pb.mul(this.hd, this.hd), 0, 0), this.w));\r\n this.wsum = pb.add(this.wsum, this.w);\r\n });\r\n } else {\r\n // Cosine-weighted sky escape share in alpha: sky visibility, as DDGI [Majercik19]\r\n scope.$if(pb.greaterThanEqual(scope.ray.a, 0), function (this: PBInsideFunctionScope) {\r\n this.$l.escaped = pb.float(pb.greaterThanEqual(this.ray.a, SKY_ESCAPE_DISTANCE * 0.5));\r\n this.sum = pb.add(this.sum, pb.mul(pb.vec4(this.ray.rgb, this.escaped), this.c));\r\n this.wsum = pb.add(this.wsum, this.c);\r\n });\r\n }\r\n };\r\n this.$l.thread = pb.int(\r\n pb.add(pb.mul(this.$builtins.localInvocationId.y, texels), this.$builtins.localInvocationId.x)\r\n );\r\n for (let b = 0; b < rays; b += BLEND_BATCH) {\r\n const count = Math.min(BLEND_BATCH, rays - b);\r\n // Each thread stages every (texels²)-th ray of the batch\r\n this.$for(pb.int('stageRound'), 0, Math.ceil(count / (texels * texels)), function () {\r\n this.$l.j = pb.add(this.thread, pb.mul(this.stageRound, texels * texels));\r\n this.$if(pb.greaterThanEqual(this.j, count), function () {\r\n this.$break();\r\n });\r\n this.$l.r = pb.add(this.j, b);\r\n this.batchRay.setAt(this.j, pb.textureLoad(this.rays, pb.ivec2(this.r, pb.int(this.slot)), 0));\r\n this.batchDir.setAt(\r\n this.j,\r\n pb.vec4(\r\n quatRotate(this, this.rotation, sphericalFibonacci(this, pb.float(this.r), pb.float(rays))),\r\n 0\r\n )\r\n );\r\n });\r\n pb.workgroupBarrier();\r\n this.$for(pb.int('k'), 0, count, function () {\r\n this.$l.ray = this.batchRay.at(this.k);\r\n this.$l.c = pb.max(pb.dot(this.dir, this.batchDir.at(this.k).xyz), 0);\r\n accumulate(this);\r\n });\r\n // The next batch overwrites the one still being read\r\n pb.workgroupBarrier();\r\n }\r\n this.$l.result = this.$choice(\r\n pb.greaterThan(this.wsum, 1e-5),\r\n pb.div(this.sum, this.wsum),\r\n visibility ? pb.vec4(this.maxDist, pb.mul(this.maxDist, this.maxDist), 0, 0) : pb.vec4(0)\r\n );\r\n this.$l.origin = probeTileOrigin(this, this.index, pb.float(s));\r\n this.$l.texel = pb.add(this.origin, this.uv);\r\n this.$l.old = pb.textureLoad(this.current, this.texel, 0);\r\n this.$l.h = this.$choice(this.first, pb.float(0), this.rayInfo.w);\r\n if (!visibility) {\r\n // A probe starting over blends into its seed, if any (alpha -1 = none)\r\n this.$if(this.first, function () {\r\n this.$l.seedValue = pb.textureLoad(\r\n this.seedTex,\r\n pb.add(stagingOrigin(this, this.slot, s), this.uv),\r\n 0\r\n );\r\n this.$if(pb.greaterThanEqual(this.seedValue.a, 0), function () {\r\n this.old = this.seedValue;\r\n this.h = this.rayInfo.w;\r\n });\r\n });\r\n }\r\n this.$l.value = pb.mix(this.result, this.old, this.h);\r\n // Staged by selection slot; runCommit copies the tile into the map\r\n pb.textureStore(\r\n this.next,\r\n pb.uvec2(pb.add(stagingOrigin(this, this.slot, s), this.uv)),\r\n visibility ? pb.vec4(this.value.xyz, 1) : this.value\r\n );\r\n if (!visibility) {\r\n // Mark the probe updated; an inactive one stays inactive\r\n this.$if(pb.equal(this.$builtins.localInvocationId.xy, pb.uvec2(0)), function () {\r\n this.$l.data = this[PROBE_DATA].at(this.index);\r\n this[PROBE_DATA].setAt(\r\n this.index,\r\n pb.vec4(\r\n this.data.xyz,\r\n this.$choice(\r\n pb.greaterThan(this.data.w, PROBE_STATE_INACTIVE - 0.5),\r\n pb.float(PROBE_STATE_INACTIVE),\r\n pb.float(1)\r\n )\r\n )\r\n );\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\n\r\n/** First texel of a selection slot's tile in a blend output, {@link STAGING_COLS} tiles a row. */\r\nfunction stagingOrigin(scope: PBInsideFunctionScope, slot: PBShaderExp, texels: number) {\r\n const pb = scope.$builder;\r\n const s = pb.int(slot);\r\n return pb.mul(pb.ivec2(pb.mod(s, STAGING_COLS), pb.div(s, STAGING_COLS)), texels) as PBShaderExp;\r\n}\r\n\r\n/** Visibility texels as saved, rgba16f: the two moments, then 0 and 1. */\r\nfunction expandVisibility(rg: Uint16Array<ArrayBuffer>, texels: number) {\r\n const out = new Uint16Array(new ArrayBuffer(texels * 8));\r\n for (let i = 0; i < texels; i++) {\r\n out[i * 4] = rg[i * 2];\r\n out[i * 4 + 1] = rg[i * 2 + 1];\r\n // Half 1.0, which the blend writes to alpha\r\n out[i * 4 + 3] = 0x3c00;\r\n }\r\n return out;\r\n}\r\n\r\n/** The two moments of saved rgba16f visibility texels, for an rg16f map. */\r\nfunction compactVisibility(rgba: Uint16Array, texels: number) {\r\n const out = new Uint16Array(new ArrayBuffer(texels * 4));\r\n for (let i = 0; i < texels; i++) {\r\n out[i * 2] = rgba[i * 4];\r\n out[i * 2 + 1] = rgba[i * 4 + 1];\r\n }\r\n return out;\r\n}\r\n"],"names":["IRRADIANCE_TEXELS","VISIBILITY_TEXELS","STAGING_COLS","BLEND_BATCH","TRACE_STEPS","VISIBILITY_RANGE","RELOCATE_EVERY","SELECT_INDEX_MASK","SELECT_LEVEL_SHIFT","SELECT_FIRST_BIT","STATE_MAGIC","STATE_VERSION","SKY_ESCAPE_DISTANCE","getProbeVolumeForDraw","ctx","renderPass","type","RENDER_PASS_TYPE_LIGHT","drawEnvLight","scene","gi","enabled","probes","ready","getActiveProbeVolume","ProbeVolume","_scene","_options","_levels","_count","_tileCols","_rays","_budget","_irradiance","_irradianceNext","_visibility","_visibilityNext","_rayTexture","_rayFramebuffer","_data","_selected","_selection","_dataReset","_frame","_updates","_lastUpdated","_params","_rotation","_prng","_relocateProgram","_relocateBindGroup","_seedProgram","_seedBindGroup","_traceProgram","_traceBindGroup","_traceKey","_blendIrrProgram","_blendIrrBindGroup","_blendVisProgram","_blendVisBindGroup","_commitProgram","_commitBindGroup","_renderStates","_scratch","options","levels","Math","max","min","PROBE_MAX_LEVELS","floor","scale","levelScale","grid","map","v","tileBase","l","count","push","spacing","origin","state","Uint8Array","lastRelocated","Int32Array","fill","lastSelected","cursor","ceil","sqrt","raysPerProbe","budget","_irradianceSeed","_visibilityFormat","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","writable","Uint32Array","ArrayBuffer","Float32Array","PROBE_PARAM_VEC4S","_exposureScale","Vector4","PRNG","Map","length","getStats","uninitialized","level","i","lastUpdated","updates","levelInfo","applyBindGroup","bg","setTexture","PROBE_IRRADIANCE","fetchSampler","PROBE_VISIBILITY","setBuffer","PROBE_DATA","setValue","PROBE_PARAMS","setReadExposure","camera","live","lightingMode","exposure","getGICacheExposure","updateParams","update","sdf","voxels","global","lit","ensureResources","cameraPos","getWorldPosition","moveWindow","selected","select","bufferSubData","randomRotation","RenderGraphExecutor","profileScope","runRelocate","runSeed","runTrace","runBlend","runCommit","exportState","Error","irr","Uint16Array","width","height","visTexels","visChannels","visRead","data","Promise","all","readPixels","getBufferSubData","buffer","byteLength","vis","expandVisibility","header","JSON","stringify","origins","irradiance","visibility","headerBytes","TextEncoder","encode","headerLength","out","view","DataView","setUint32","set","offset","queryProbes","limit","s","lo","x","y","z","hi","centre","wrap","m","picked","w","some","a","local","world","index","dist2","reduce","acc","sort","b","tileMean","texels","channels","raw","ox","oy","o","t","c","half2float","tile","d","subarray","irrSum","n","visMin","Infinity","visSum","r","round","position","updated","inactive","PROBE_STATE_INACTIVE","slice","sky","hitMin","hitMean","importState","getUint32","parse","TextDecoder","decode","irrSize","visSize","compactVisibility","forEach","dispose","tex","values","clear","prog","device","rows","make","name","cols","format","createTexture2D","mipmapping","stagingRows","createFrameBuffer","createBuffer","usage","storage","next","prev","wx","wy","wz","inPrev","frame","takeNew","remaining","share","scanned","u1","get","u2","PI","u3","setXYZW","sin","cos","p","intensity","normalBias","viewBias","maxRayDistance","bindCommon","hysteresis","scratchBuffer","bytes","buildSDFProgram","label","workgroupSize","compute","pb","declareGlobalSDFUniforms","declareDynamicSDFUniforms","vec4","storageBuffer","uniform","uint","storageBufferReadonly","rotation","rayInfo","relocate","main","$l","slot","$builtins","globalInvocationId","$if","greaterThanEqual","$return","equal","at","sel","int","compAnd","sar","texel","probeTexelFromIndex","probeWorldFromTexel","probeLevelOrigin","mul","vec3","keep","h","GLOBAL_SDF_LEVELS","probeStep","pos","$for","sampleSceneSDF","$break","g","sub","add","div","len","greaterThan","moveLen","samples","through","q","mix","float","k","lessThan","probeState","sampleGlobalSDF","$elseif","setAt","createBindGroup","bindGroupLayouts","flags","relocateBuffer","setProgram","setBindGroup","tex2D","sampleType","seedOut","texStorage2D","rgba16float","workGroupId","uv","ivec2","localInvocationId","xy","first","or","parent","sum","wsum","and","probePosition","n3","probeLevelGrid","xyz","lessThanEqual","base","clamp","alpha","off","ivec3","probeTileIndex","probeTexelFromWorld","probeActive","tri","textureLoad","probeTileOrigin","textureStore","uvec2","stagingOrigin","$choice","envLight","env","light","envStrength","strength","skyMode","hasRadiance","hasIrradiance","envVariant","getType","irradianceSHFB","irradianceSH","key","vertex","$inputs","vec2","attrib","fragment","$outputs","color","declareVoxelSceneUniforms","skyInfo","initShaderBindings","fc","fragCoord","dir","quatRotate","sphericalFibonacci","maxDist","fieldScale","farLevel","fineRange","radiance","dist","d0","$else","hit","prevD","hitD","hitVoxel","sp","stepMin","sampleSceneSDFHinted","expand","sdfSurfaceExpand","sdfRefineHit","hp","hg","hl","SQRT2","he","sampleGlobalSDFLevel","hd","hn","dot","normalize","neg","sampleVoxelSceneRadiance","getRadiance","rgb","getIrradiance","VOXEL_SCENE_ALBEDO","albedo","VOXEL_SCENE_EMISSIVE","emissive","VOXEL_SCENE_RADIANCE","VOXEL_SCENE_ANISO0","radianceAniso0","VOXEL_SCENE_ANISO1","radianceAniso1","updateBindGroup","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","pushDeviceStates","setFramebuffer","setViewport","setScissor","drawFullscreenQuad","popDeviceStates","createBlendProgram","passes","scope","program","current","seed","twoChannel","stagedIrradiance","stagedVisibility","rg16float","rays","seedTex","batchDir","workgroup","batchRay","src","onX","onY","oct","octDecode","accumulate","pow","abs","ray","escaped","thread","j","stageRound","workgroupBarrier","result","old","seedValue","value","$builder","mod","rg","rgba"],"mappings":"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"}
|