@woosh/meep-engine 3.52.0 → 3.54.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/package.json +1 -1
- package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
- package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
- package/src/core/math/noise/worley_noise_2d.js +74 -0
- package/src/engine/ecs/animation/Animation.d.ts +4 -25
- package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
- package/src/engine/ecs/animation/Animation.js +9 -41
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
- package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
- package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
- package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts +12 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts +52 -0
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
- package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
- package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +62 -243
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +447 -450
- package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
- package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FoliageWindSystem.js +257 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUFluidSystem.js +39 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -23
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +904 -949
- package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
- package/src/engine/graphics3/animation/AnimationClips.js +207 -10
- package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
- package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
- package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
- package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
- package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
- package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
- package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
- package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/Prefab.js +169 -162
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
- package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
- package/src/engine/sound/simulation/README.md +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
- package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
- package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
- package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
- package/src/generation/foliage/FOLIAGE_DESIGN.md +319 -0
- package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeAsset.js +111 -0
- package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
- package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
- package/src/generation/foliage/asset/generate_tree.js +93 -0
- package/src/generation/foliage/asset/place_tree.d.ts +82 -0
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
- package/src/generation/foliage/asset/place_tree.js +194 -0
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts +121 -0
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
- package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
- package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
- package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
- package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/CrownConfig.js +186 -0
- package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
- package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
- package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
- package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
- package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageBarkType.js +16 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageCardType.js +18 -0
- package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
- package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageConfig.js +283 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +143 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
- package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeLODConfig.js +211 -0
- package/src/generation/foliage/config/TreePreset.d.ts +16 -0
- package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
- package/src/generation/foliage/config/TreePreset.js +17 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
- package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
- package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeWindConfig.js +157 -0
- package/src/generation/foliage/index.d.ts +39 -0
- package/src/generation/foliage/index.d.ts.map +1 -0
- package/src/generation/foliage/index.js +44 -0
- package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
- package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
- package/src/generation/foliage/material/make_bark_material.js +730 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts +40 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
- package/src/generation/foliage/material/make_foliage_material.js +605 -0
- package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
- package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
- package/src/generation/foliage/mesh/branch_collar_project.js +205 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +95 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +22 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -0
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
- package/src/generation/foliage/presets/make_tree_species_preset.js +870 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -0
- package/src/shade/playground/additive_blending/index.html +197 -0
- package/src/shade/playground/additive_blending/main.d.ts +2 -0
- package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
- package/src/shade/playground/additive_blending/main.js +529 -0
- package/src/shade/playground/foliage_wind/README.md +18 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts +133 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/foliage_world.js +602 -0
- package/src/shade/playground/foliage_wind/index.html +260 -0
- package/src/shade/playground/foliage_wind/main.d.ts +2 -0
- package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/main.js +275 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +45 -16
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
- package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +9 -0
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +10 -3
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +8 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +8 -1
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
- package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
- package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
- package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
- package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +67 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
- package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +119 -111
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +4 -1
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +22 -34
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
- package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
- package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
- package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts +24 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +31 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +113 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +356 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts +16 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts +23 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts.map +1 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
- package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
- package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
- package/src/engine/graphics/composit/CompositingStages.js +0 -8
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
- package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
- package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
- package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
- package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
- package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
- package/src/engine/graphics/render/RenderPassType.js +0 -8
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
- package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
- package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
- package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
- package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
- package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
- package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
- package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
- package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
- package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
- package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
- package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
- package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
- package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
- package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
- package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
- package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
- package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
- package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
- package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
- package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { CLIPMAP_LEVEL_LIMIT } from "../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
2
|
+
import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Default number of cascades in the world-space irradiance clipmap (Decision 6.3).
|
|
6
|
+
* Covers 8 m, 16 m, 32 m, 64 m, 128 m, 256 m at 32³ and h0 = 0.25 m.
|
|
7
|
+
* @type {number}
|
|
8
|
+
*/
|
|
9
|
+
export const IRRADIANCE_CLIPMAP_DEFAULT_CASCADE_COUNT = 6;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Maximum number of cascades supported by the irradiance clipmap table.
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
export const IRRADIANCE_CLIPMAP_CASCADE_LIMIT = CLIPMAP_LEVEL_LIMIT;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Default resolution (cells per axis) of each irradiance clipmap cascade (Decision 6.3).
|
|
19
|
+
* @type {number}
|
|
20
|
+
*/
|
|
21
|
+
export const IRRADIANCE_CLIPMAP_DEFAULT_RESOLUTION = 32;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Default finest cascade cell size h0 in metres (25 cm, Decision 6.3).
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
27
|
+
export const IRRADIANCE_CLIPMAP_DEFAULT_CELL_SIZE = 0.25;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Texels of skirt on each side of a cascade's tile in the 3D atlas: 1 texel for hardware trilinear
|
|
31
|
+
* filtering (`tile_size = resolution + 2`).
|
|
32
|
+
* @type {number}
|
|
33
|
+
*/
|
|
34
|
+
export const IRRADIANCE_CLIPMAP_TILE_BORDER = 1;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Default blend-skirt width in voxels (cells of that cascade) at the outer faces of each cascade
|
|
38
|
+
* window where blending takes place. At the very outer edge of the border voxel (`edge = 0`), the
|
|
39
|
+
* finer cascade's weight is `0.0` (`edge_weight = 1.0`); `blend_skirt` voxels inward, the finer
|
|
40
|
+
* cascade's weight is `1.0` (`edge_weight = 0.0`).
|
|
41
|
+
* @type {number}
|
|
42
|
+
*/
|
|
43
|
+
export const IRRADIANCE_CLIPMAP_DEFAULT_BLEND_SKIRT = 4;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Format of the two synchronized 3D atlas textures (`Y` and `CoCg`).
|
|
47
|
+
* @type {GPUTextureFormat}
|
|
48
|
+
*/
|
|
49
|
+
export const IRRADIANCE_CLIPMAP_TILE_FORMAT = "rgba16float";
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Sampler used for trilinear taps of the irradiance clipmap atlas textures.
|
|
53
|
+
*/
|
|
54
|
+
export const IRRADIANCE_CLIPMAP_SAMPLER_DESCRIPTOR = SAMPLER_LINEAR_UPSCALE;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Maximum number of point or spot lights evaluated per voxel in the irradiance clipmap build pass.
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
60
|
+
export const IRRADIANCE_CLIPMAP_LIGHT_BUDGET = 32;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-cascade atlas placement metadata for the world-space irradiance clipmap. 16 bytes.
|
|
3
|
+
* @type {WebGPUStruct}
|
|
4
|
+
*/
|
|
5
|
+
export const IRRADIANCE_CASCADE_STRUCT: WebGPUStruct;
|
|
6
|
+
/**
|
|
7
|
+
* @type {WebGPUArray}
|
|
8
|
+
*/
|
|
9
|
+
export const IRRADIANCE_CASCADE_ARRAY: WebGPUArray;
|
|
10
|
+
/**
|
|
11
|
+
* Uniform buffer layout for the world-space irradiance clipmap (`irradiance_clipmap`).
|
|
12
|
+
* Mirrors {@link WIND_FIELD_STRUCT} so `clipmap_select_finest` operates directly on `levels`.
|
|
13
|
+
*
|
|
14
|
+
* - `anchor`: continuous world-space camera/placement anchor (`[x, y, z]` in metres), used for
|
|
15
|
+
* continuous spherical cascade selection so blend weights never stair-step when integer cascade
|
|
16
|
+
* corners step by 1 voxel.
|
|
17
|
+
* - `blend_skirt`: number of voxels at each cascade window's outer boundary where blending toward
|
|
18
|
+
* the parent cascade (or far field) takes place.
|
|
19
|
+
*
|
|
20
|
+
* @type {WebGPUStruct}
|
|
21
|
+
*/
|
|
22
|
+
export const IRRADIANCE_CLIPMAP_STRUCT: WebGPUStruct;
|
|
23
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
24
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
25
|
+
//# sourceMappingURL=IRRADIANCE_CLIPMAP_STRUCT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IRRADIANCE_CLIPMAP_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wCAFU,YAAY,CASE;AAExB;;GAEG;AACH,uCAFU,WAAW,CAKnB;AAEF;;;;;;;;;;;GAWG;AACH,wCAFU,YAAY,CASE;6BA3CK,mCAAmC;4BADpC,kCAAkC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CLIPMAP_LEVEL_ARRAY } from "../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
2
|
+
import { f32, u32, vec3f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
4
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
5
|
+
import { IRRADIANCE_CLIPMAP_CASCADE_LIMIT } from "./IRRADIANCE_CLIPMAP.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Per-cascade atlas placement metadata for the world-space irradiance clipmap. 16 bytes.
|
|
9
|
+
* @type {WebGPUStruct}
|
|
10
|
+
*/
|
|
11
|
+
export const IRRADIANCE_CASCADE_STRUCT = WebGPUStruct.from({
|
|
12
|
+
/**
|
|
13
|
+
* The atlas texel coordinate of window-local cell 0 (`slot_origin + border`). Window-local
|
|
14
|
+
* cell `c` has its centre at `content_origin + c + 0.5`.
|
|
15
|
+
*/
|
|
16
|
+
content_origin: vec3f,
|
|
17
|
+
pad0: f32,
|
|
18
|
+
}, "IrradianceCascade");
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @type {WebGPUArray}
|
|
22
|
+
*/
|
|
23
|
+
export const IRRADIANCE_CASCADE_ARRAY = WebGPUArray.from(
|
|
24
|
+
IRRADIANCE_CASCADE_STRUCT,
|
|
25
|
+
IRRADIANCE_CLIPMAP_CASCADE_LIMIT
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Uniform buffer layout for the world-space irradiance clipmap (`irradiance_clipmap`).
|
|
30
|
+
* Mirrors {@link WIND_FIELD_STRUCT} so `clipmap_select_finest` operates directly on `levels`.
|
|
31
|
+
*
|
|
32
|
+
* - `anchor`: continuous world-space camera/placement anchor (`[x, y, z]` in metres), used for
|
|
33
|
+
* continuous spherical cascade selection so blend weights never stair-step when integer cascade
|
|
34
|
+
* corners step by 1 voxel.
|
|
35
|
+
* - `blend_skirt`: number of voxels at each cascade window's outer boundary where blending toward
|
|
36
|
+
* the parent cascade (or far field) takes place.
|
|
37
|
+
*
|
|
38
|
+
* @type {WebGPUStruct}
|
|
39
|
+
*/
|
|
40
|
+
export const IRRADIANCE_CLIPMAP_STRUCT = WebGPUStruct.from({
|
|
41
|
+
levels: CLIPMAP_LEVEL_ARRAY,
|
|
42
|
+
cascades: IRRADIANCE_CASCADE_ARRAY,
|
|
43
|
+
inverse_atlas_size: vec3f,
|
|
44
|
+
cascade_count: u32,
|
|
45
|
+
anchor: vec3f,
|
|
46
|
+
blend_skirt: f32,
|
|
47
|
+
}, "IrradianceClipmap");
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless, hysteresis-free 1-voxel-step window placement for {@link GPUIrradianceClipmap}.
|
|
3
|
+
*
|
|
4
|
+
* Cascade `c` has voxel size `cell_size * 2^c` and resolution `N = resolution[axis]`; its window is
|
|
5
|
+
* `[corner, corner + N)` in its own cells, covering `[corner * h_c, (corner + N) * h_c)` in world
|
|
6
|
+
* space.
|
|
7
|
+
*
|
|
8
|
+
* Unlike `FluidCascadePlacement` (which steps in 4-cell bricks with a 2.1-cell hysteretic deadband
|
|
9
|
+
* for persistent Eulerian fluid grids), the irradiance clipmap is rebuilt directly from scene lights
|
|
10
|
+
* and GI probes whenever a cascade shifts. Placement therefore uses a pure, stateless 1-voxel
|
|
11
|
+
* rounding rule (`Math.round(anchor / h_c - N * 0.5)`) with zero hysteresis:
|
|
12
|
+
* - Any given camera position `(x, y, z)` produces identical cascade windows regardless of the
|
|
13
|
+
* camera's prior trajectory (zooming in vs. zooming out).
|
|
14
|
+
* - Each cascade shifts by 1 voxel at a time, which is smaller than `blend_skirt`, so world-space
|
|
15
|
+
* positions always transition smoothly through the outer blend skirt rather than jumping past it.
|
|
16
|
+
*/
|
|
17
|
+
export class IrradianceCascadePlacement {
|
|
18
|
+
/**
|
|
19
|
+
* @param {object} options
|
|
20
|
+
* @param {number} options.cascade_count 1 to {@link IRRADIANCE_CLIPMAP_CASCADE_LIMIT}
|
|
21
|
+
* @param {ArrayLike<number>} options.resolution cells on each axis, powers of two
|
|
22
|
+
* @param {number} options.cell_size metres, cascade 0's voxel size
|
|
23
|
+
*/
|
|
24
|
+
constructor({ cascade_count, resolution, cell_size }: {
|
|
25
|
+
cascade_count: number;
|
|
26
|
+
resolution: ArrayLike<number>;
|
|
27
|
+
cell_size: number;
|
|
28
|
+
});
|
|
29
|
+
/** @returns {number} */
|
|
30
|
+
get cascade_count(): number;
|
|
31
|
+
/** @returns {Readonly<Int32Array>} */
|
|
32
|
+
get resolution(): Readonly<Int32Array>;
|
|
33
|
+
/** @returns {boolean} */
|
|
34
|
+
get placed(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Cascade `c`'s voxel size in metres (`cell_size * 2^c`).
|
|
37
|
+
* @param {number} cascade
|
|
38
|
+
* @returns {number}
|
|
39
|
+
*/
|
|
40
|
+
cell_size(cascade: number): number;
|
|
41
|
+
/**
|
|
42
|
+
* @param {number} cascade
|
|
43
|
+
* @param {number} axis 0, 1, or 2
|
|
44
|
+
* @returns {number} the cascade's corner on `axis`, in its own cells
|
|
45
|
+
*/
|
|
46
|
+
corner(cascade: number, axis: number): number;
|
|
47
|
+
/**
|
|
48
|
+
* @param {number} cascade
|
|
49
|
+
* @param {number} axis 0, 1, or 2
|
|
50
|
+
* @returns {number} the corner recorded at the last {@link begin}
|
|
51
|
+
*/
|
|
52
|
+
previous_corner(cascade: number, axis: number): number;
|
|
53
|
+
/**
|
|
54
|
+
* @param {number} cascade
|
|
55
|
+
* @returns {boolean} whether the cascade's corner changed since the last {@link begin}
|
|
56
|
+
*/
|
|
57
|
+
moved(cascade: number): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Snapshot every cascade's current corner before a {@link place_all} call so {@link moved} can
|
|
60
|
+
* report which cascades shifted.
|
|
61
|
+
*/
|
|
62
|
+
begin(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Place every cascade around `(x, y, z)` in world metres, coarsest first, using a stateless
|
|
65
|
+
* 1-voxel rounding rule with zero hysteresis.
|
|
66
|
+
*
|
|
67
|
+
* @param {number} x
|
|
68
|
+
* @param {number} y
|
|
69
|
+
* @param {number} z
|
|
70
|
+
*/
|
|
71
|
+
place_all(x: number, y: number, z: number): void;
|
|
72
|
+
#private;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=IrradianceCascadePlacement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrradianceCascadePlacement.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH;IAmBI;;;;;OAKG;IACH;QAJ2B,aAAa,EAA7B,MAAM;QACqB,UAAU,EAArC,UAAU,MAAM,CAAC;QACD,SAAS,EAAzB,MAAM;OAkBhB;IAED,wBAAwB;IACxB,4BAEC;IAED,sCAAsC;IACtC,uCAEC;IAED,yBAAyB;IACzB,sBAEC;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,yBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,eAHW,MAAM,GACJ,OAAO,CAQnB;IAED;;;OAGG;IACH,cAOC;IAED;;;;;;;OAOG;IACH,aAJW,MAAM,KACN,MAAM,KACN,MAAM,QAmChB;;CACJ"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { isPowerOfTwo } from "../../../../core/math/isPowerOfTwo.js";
|
|
3
|
+
import { IRRADIANCE_CLIPMAP_CASCADE_LIMIT } from "./IRRADIANCE_CLIPMAP.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Stateless, hysteresis-free 1-voxel-step window placement for {@link GPUIrradianceClipmap}.
|
|
7
|
+
*
|
|
8
|
+
* Cascade `c` has voxel size `cell_size * 2^c` and resolution `N = resolution[axis]`; its window is
|
|
9
|
+
* `[corner, corner + N)` in its own cells, covering `[corner * h_c, (corner + N) * h_c)` in world
|
|
10
|
+
* space.
|
|
11
|
+
*
|
|
12
|
+
* Unlike `FluidCascadePlacement` (which steps in 4-cell bricks with a 2.1-cell hysteretic deadband
|
|
13
|
+
* for persistent Eulerian fluid grids), the irradiance clipmap is rebuilt directly from scene lights
|
|
14
|
+
* and GI probes whenever a cascade shifts. Placement therefore uses a pure, stateless 1-voxel
|
|
15
|
+
* rounding rule (`Math.round(anchor / h_c - N * 0.5)`) with zero hysteresis:
|
|
16
|
+
* - Any given camera position `(x, y, z)` produces identical cascade windows regardless of the
|
|
17
|
+
* camera's prior trajectory (zooming in vs. zooming out).
|
|
18
|
+
* - Each cascade shifts by 1 voxel at a time, which is smaller than `blend_skirt`, so world-space
|
|
19
|
+
* positions always transition smoothly through the outer blend skirt rather than jumping past it.
|
|
20
|
+
*/
|
|
21
|
+
export class IrradianceCascadePlacement {
|
|
22
|
+
/** @type {Int32Array} */
|
|
23
|
+
#resolution = new Int32Array(3);
|
|
24
|
+
|
|
25
|
+
/** @type {number} */
|
|
26
|
+
#cell_size;
|
|
27
|
+
|
|
28
|
+
/** @type {number} */
|
|
29
|
+
#cascade_count;
|
|
30
|
+
|
|
31
|
+
/** @type {Int32Array} */
|
|
32
|
+
#corner;
|
|
33
|
+
|
|
34
|
+
/** @type {Int32Array} */
|
|
35
|
+
#previous;
|
|
36
|
+
|
|
37
|
+
/** @type {boolean} */
|
|
38
|
+
#placed = false;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @param {object} options
|
|
42
|
+
* @param {number} options.cascade_count 1 to {@link IRRADIANCE_CLIPMAP_CASCADE_LIMIT}
|
|
43
|
+
* @param {ArrayLike<number>} options.resolution cells on each axis, powers of two
|
|
44
|
+
* @param {number} options.cell_size metres, cascade 0's voxel size
|
|
45
|
+
*/
|
|
46
|
+
constructor({ cascade_count, resolution, cell_size }) {
|
|
47
|
+
assert.isPositiveInteger(cascade_count, "cascade_count");
|
|
48
|
+
assert.lessThanOrEqual(cascade_count, IRRADIANCE_CLIPMAP_CASCADE_LIMIT, "cascade_count");
|
|
49
|
+
assert.isFinite(cell_size, "cell_size");
|
|
50
|
+
assert.greaterThan(cell_size, 0, "cell_size");
|
|
51
|
+
|
|
52
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
53
|
+
assert.isPositiveInteger(resolution[axis], "resolution");
|
|
54
|
+
assert.ok(isPowerOfTwo(resolution[axis]), "resolution is a power of two on each axis");
|
|
55
|
+
this.#resolution[axis] = resolution[axis];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
this.#cascade_count = cascade_count;
|
|
59
|
+
this.#cell_size = cell_size;
|
|
60
|
+
this.#corner = new Int32Array(3 * cascade_count);
|
|
61
|
+
this.#previous = new Int32Array(3 * cascade_count);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** @returns {number} */
|
|
65
|
+
get cascade_count() {
|
|
66
|
+
return this.#cascade_count;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** @returns {Readonly<Int32Array>} */
|
|
70
|
+
get resolution() {
|
|
71
|
+
return this.#resolution;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** @returns {boolean} */
|
|
75
|
+
get placed() {
|
|
76
|
+
return this.#placed;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Cascade `c`'s voxel size in metres (`cell_size * 2^c`).
|
|
81
|
+
* @param {number} cascade
|
|
82
|
+
* @returns {number}
|
|
83
|
+
*/
|
|
84
|
+
cell_size(cascade) {
|
|
85
|
+
return this.#cell_size * 2 ** cascade;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @param {number} cascade
|
|
90
|
+
* @param {number} axis 0, 1, or 2
|
|
91
|
+
* @returns {number} the cascade's corner on `axis`, in its own cells
|
|
92
|
+
*/
|
|
93
|
+
corner(cascade, axis) {
|
|
94
|
+
return this.#corner[3 * cascade + axis];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @param {number} cascade
|
|
99
|
+
* @param {number} axis 0, 1, or 2
|
|
100
|
+
* @returns {number} the corner recorded at the last {@link begin}
|
|
101
|
+
*/
|
|
102
|
+
previous_corner(cascade, axis) {
|
|
103
|
+
return this.#previous[3 * cascade + axis];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @param {number} cascade
|
|
108
|
+
* @returns {boolean} whether the cascade's corner changed since the last {@link begin}
|
|
109
|
+
*/
|
|
110
|
+
moved(cascade) {
|
|
111
|
+
const base = 3 * cascade;
|
|
112
|
+
|
|
113
|
+
return this.#previous[base] !== this.#corner[base]
|
|
114
|
+
|| this.#previous[base + 1] !== this.#corner[base + 1]
|
|
115
|
+
|| this.#previous[base + 2] !== this.#corner[base + 2];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Snapshot every cascade's current corner before a {@link place_all} call so {@link moved} can
|
|
120
|
+
* report which cascades shifted.
|
|
121
|
+
*/
|
|
122
|
+
begin() {
|
|
123
|
+
if (!this.#placed) {
|
|
124
|
+
this.#previous.fill(0x7fffffff);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
this.#previous.set(this.#corner);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Place every cascade around `(x, y, z)` in world metres, coarsest first, using a stateless
|
|
133
|
+
* 1-voxel rounding rule with zero hysteresis.
|
|
134
|
+
*
|
|
135
|
+
* @param {number} x
|
|
136
|
+
* @param {number} y
|
|
137
|
+
* @param {number} z
|
|
138
|
+
*/
|
|
139
|
+
place_all(x, y, z) {
|
|
140
|
+
assert.isFinite(x, "x");
|
|
141
|
+
assert.isFinite(y, "y");
|
|
142
|
+
assert.isFinite(z, "z");
|
|
143
|
+
|
|
144
|
+
const res = this.#resolution;
|
|
145
|
+
const corner = this.#corner;
|
|
146
|
+
|
|
147
|
+
for (let c = this.#cascade_count - 1; c >= 0; c--) {
|
|
148
|
+
const h = this.cell_size(c);
|
|
149
|
+
const base = 3 * c;
|
|
150
|
+
|
|
151
|
+
let cx = Math.round(x / h - res[0] * 0.5) | 0;
|
|
152
|
+
let cy = Math.round(y / h - res[1] * 0.5) | 0;
|
|
153
|
+
let cz = Math.round(z / h - res[2] * 0.5) | 0;
|
|
154
|
+
|
|
155
|
+
if (c + 1 < this.#cascade_count) {
|
|
156
|
+
const p_base = 3 * (c + 1);
|
|
157
|
+
const px = 2 * corner[p_base];
|
|
158
|
+
const py = 2 * corner[p_base + 1];
|
|
159
|
+
const pz = 2 * corner[p_base + 2];
|
|
160
|
+
|
|
161
|
+
cx = Math.min(px + res[0], Math.max(px, cx));
|
|
162
|
+
cy = Math.min(py + res[1], Math.max(py, cy));
|
|
163
|
+
cz = Math.min(pz + res[2], Math.max(pz, cz));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
corner[base] = cx;
|
|
167
|
+
corner[base + 1] = cy;
|
|
168
|
+
corner[base + 2] = cz;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
this.#placed = true;
|
|
172
|
+
}
|
|
173
|
+
}
|
package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* {@link chunk_irradiance_clipmap_gi_sample} under IBL: the environment SH (`environment_sh`).
|
|
3
|
+
* @type {CodeChunk}
|
|
4
|
+
*/
|
|
5
|
+
export const chunk_irradiance_clipmap_gi_sample_ibl: CodeChunk;
|
|
6
|
+
/**
|
|
7
|
+
* {@link chunk_irradiance_clipmap_gi_sample} under Brick4: the sparse volumetric light map's probes
|
|
8
|
+
* interpolated at `position_ws` with a zero normal (open-space omnidirectional weighting).
|
|
9
|
+
* @type {CodeChunk}
|
|
10
|
+
*/
|
|
11
|
+
export const chunk_irradiance_clipmap_gi_sample_brick4: CodeChunk;
|
|
12
|
+
/**
|
|
13
|
+
* {@link chunk_irradiance_clipmap_gi_sample} under LPV: tetrahedral probe interpolation at `position_ws`.
|
|
14
|
+
* @type {CodeChunk}
|
|
15
|
+
*/
|
|
16
|
+
export const chunk_irradiance_clipmap_gi_sample_lpv: CodeChunk;
|
|
17
|
+
/**
|
|
18
|
+
* Evaluates indirect radiance SH2 (`array<vec3<f32>, 4>`) at a world position `position_ws` according
|
|
19
|
+
* to the renderer's active {@link INDIRECT_LIGHTING} switch.
|
|
20
|
+
*
|
|
21
|
+
* @type {CodeChunkChoice}
|
|
22
|
+
*/
|
|
23
|
+
export const chunk_irradiance_clipmap_gi_sample: CodeChunkChoice;
|
|
24
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
25
|
+
import { CodeChunkChoice } from "../../shader/compiler/CodeChunkChoice.js";
|
|
26
|
+
//# sourceMappingURL=chunk_irradiance_clipmap_gi_sample.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_irradiance_clipmap_gi_sample.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js"],"names":[],"mappings":"AAUA;;;GAGG;AACH,qDAFU,SAAS,CAcjB;AAIF;;;;GAIG;AACH,wDAFU,SAAS,CAYjB;AAEF;;;GAGG;AACH,qDAFU,SAAS,CAqBjB;AAEF;;;;;GAKG;AACH,iDAFU,eAAe,CAEiE;0BAvEhE,oCAAoC;gCAC9B,0CAA0C"}
|
package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { chunk_brick4_sample_sh } from "../../global_illumination/brick4/gpu/draw/chunk_brick4_sample_sh.js";
|
|
2
|
+
import { INDIRECT_LIGHTING } from "../../INDIRECT_LIGHTING.js";
|
|
3
|
+
import { ENVIRONMENT_SH_RESOURCE } from "../../light/environment/ENVIRONMENT_SH_RESOURCE.js";
|
|
4
|
+
import { ShadeIndirectLightingMode } from "../../ShadeIndirectLightingMode.js";
|
|
5
|
+
import { chunk_lpv_mesh_interpolation_probe_sh } from "../../shader/chunk/light/lpv/chunk_lpv_mesh_interpolation_probe_sh.js";
|
|
6
|
+
import { chunk_lpv_mesh_lookup_nearest_cell } from "../../shader/chunk/light/lpv/chunk_lpv_mesh_lookup_nearest_cell.js";
|
|
7
|
+
import { INVALID_TET_DECLARATION } from "../../shader/chunk/light/lpv/INVALID_TET_DECLARATION.js";
|
|
8
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
+
import { CodeChunkChoice } from "../../shader/compiler/CodeChunkChoice.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* {@link chunk_irradiance_clipmap_gi_sample} under IBL: the environment SH (`environment_sh`).
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_irradiance_clipmap_gi_sample_ibl = CodeChunk.from(
|
|
16
|
+
//language=WGSL
|
|
17
|
+
`
|
|
18
|
+
fn irradiance_clipmap_gi_sample(position_ws: vec3<f32>) -> array<vec3<f32>, 4> {
|
|
19
|
+
return array<vec3<f32>, 4>(
|
|
20
|
+
environment_sh[0].xyz,
|
|
21
|
+
environment_sh[1].xyz,
|
|
22
|
+
environment_sh[2].xyz,
|
|
23
|
+
environment_sh[3].xyz,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
`, []
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
chunk_irradiance_clipmap_gi_sample_ibl.requireResource(ENVIRONMENT_SH_RESOURCE);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* {@link chunk_irradiance_clipmap_gi_sample} under Brick4: the sparse volumetric light map's probes
|
|
33
|
+
* interpolated at `position_ws` with a zero normal (open-space omnidirectional weighting).
|
|
34
|
+
* @type {CodeChunk}
|
|
35
|
+
*/
|
|
36
|
+
export const chunk_irradiance_clipmap_gi_sample_brick4 = CodeChunk.from(
|
|
37
|
+
//language=WGSL
|
|
38
|
+
`
|
|
39
|
+
fn irradiance_clipmap_gi_sample(position_ws: vec3<f32>) -> array<vec3<f32>, 4> {
|
|
40
|
+
let sh = brick4_sample_sh(position_ws, vec3<f32>(0.0));
|
|
41
|
+
return array<vec3<f32>, 4>(sh[0], sh[1], sh[2], sh[3]);
|
|
42
|
+
}
|
|
43
|
+
`, [
|
|
44
|
+
chunk_brick4_sample_sh,
|
|
45
|
+
]
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* {@link chunk_irradiance_clipmap_gi_sample} under LPV: tetrahedral probe interpolation at `position_ws`.
|
|
50
|
+
* @type {CodeChunk}
|
|
51
|
+
*/
|
|
52
|
+
export const chunk_irradiance_clipmap_gi_sample_lpv = CodeChunk.from(
|
|
53
|
+
//language=WGSL
|
|
54
|
+
`
|
|
55
|
+
fn irradiance_clipmap_gi_sample(position_ws: vec3<f32>) -> array<vec3<f32>, 4> {
|
|
56
|
+
var weights: vec4<f32>;
|
|
57
|
+
let tet = lpv_mesh_lookup_nearest_cell(position_ws, &weights);
|
|
58
|
+
|
|
59
|
+
var radiance = array<vec3<f32>, 4>();
|
|
60
|
+
if (tet != INVALID_TET) {
|
|
61
|
+
radiance = lpv_mesh_interpolation_probe_sh(weights, tet);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return radiance;
|
|
65
|
+
}
|
|
66
|
+
`, [
|
|
67
|
+
chunk_lpv_mesh_lookup_nearest_cell,
|
|
68
|
+
chunk_lpv_mesh_interpolation_probe_sh,
|
|
69
|
+
INVALID_TET_DECLARATION,
|
|
70
|
+
]
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Evaluates indirect radiance SH2 (`array<vec3<f32>, 4>`) at a world position `position_ws` according
|
|
75
|
+
* to the renderer's active {@link INDIRECT_LIGHTING} switch.
|
|
76
|
+
*
|
|
77
|
+
* @type {CodeChunkChoice}
|
|
78
|
+
*/
|
|
79
|
+
export const chunk_irradiance_clipmap_gi_sample = CodeChunkChoice.from(INDIRECT_LIGHTING);
|
|
80
|
+
|
|
81
|
+
chunk_irradiance_clipmap_gi_sample.add(ShadeIndirectLightingMode.IBL, chunk_irradiance_clipmap_gi_sample_ibl);
|
|
82
|
+
chunk_irradiance_clipmap_gi_sample.add(ShadeIndirectLightingMode.Brick4, chunk_irradiance_clipmap_gi_sample_brick4);
|
|
83
|
+
chunk_irradiance_clipmap_gi_sample.add(ShadeIndirectLightingMode.LPV, chunk_irradiance_clipmap_gi_sample_lpv);
|
package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Radially symmetric (isotropic) voxel-footprint-aware point and spot light evaluation for
|
|
3
|
+
* {@link shader_irradiance_clipmap_build}.
|
|
4
|
+
*
|
|
5
|
+
* When a local light of small physical radius `r` sits inside a coarse clipmap voxel grid of spacing
|
|
6
|
+
* `h` (`h > r`), the 8 surrounding voxel centres are displaced radially from the light by up to
|
|
7
|
+
* `sqrt(3)/2 * h ≈ 0.866 * h` (and ~`0.71 * h` across a shared corner/edge). Without radial distance
|
|
8
|
+
* regularization, coarse cascades under-sample the near-light `1 / d^2` peak relative to finer cascades.
|
|
9
|
+
*
|
|
10
|
+
* ## Why Axis-Aligned Box Clamping (`max(abs(L) - 0.5*h, 0)`) Must Not Be Used
|
|
11
|
+
*
|
|
12
|
+
* Clamping each axis independently via `d_box = length(max(abs(L) - vec3(0.5 * h), vec3(0.0)))`
|
|
13
|
+
* zeroes out any coordinate axis within `+/- 0.5 * h` of the light source:
|
|
14
|
+
* - Every voxel inside the central `[-0.5*h, +0.5*h]^3` cube gets `d_box = 0` (a flat-topped cube).
|
|
15
|
+
* - Outside that cube, along the coordinate slabs `|L_x| <= 0.5*h` or `|L_y| <= 0.5*h`, the level
|
|
16
|
+
* sets of `d_box` are flat axis-aligned planes meeting at 90-degree corners (`┐`) instead of
|
|
17
|
+
* spheres, baking rectilinear box boundaries directly into the 3D irradiance texture.
|
|
18
|
+
*
|
|
19
|
+
* To match brightness across cascades without introducing axis-aligned cubic plateaus or directional
|
|
20
|
+
* distortion:
|
|
21
|
+
* - `result.direction` is always the true Euclidean radial unit vector `L / length(L)`.
|
|
22
|
+
* - `irradiance_clipmap_regularize_light_distance(d, cell_size)` depends purely on Euclidean radial
|
|
23
|
+
* distance `d = length(L)`, applying a strictly monotonic, radially isotropic `C^1` shift inside
|
|
24
|
+
* `d < 1.75 * h` bounded below by `0.35 * h`, and equalling `d` identically in the far field
|
|
25
|
+
* (`d >= 1.75 * h`).
|
|
26
|
+
*
|
|
27
|
+
* @type {CodeChunk}
|
|
28
|
+
*/
|
|
29
|
+
export const chunk_irradiance_clipmap_local_light: CodeChunk;
|
|
30
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
31
|
+
//# sourceMappingURL=chunk_irradiance_clipmap_local_light.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_irradiance_clipmap_local_light.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,mDAFU,SAAS,CAyEjB;0BA/GwB,oCAAoC"}
|
package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { LIGHT_DATABASE_SPEC } from "../../light/LIGHT_DATABASE_SPEC.js";
|
|
2
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
3
|
+
import { INCIDENT_LIGHT_STRUCT } from "../../shader/chunk/light/INCIDENT_LIGHT_STRUCT.js";
|
|
4
|
+
import {
|
|
5
|
+
chunk_light_get_spot_attenuation
|
|
6
|
+
} from "../../shader/chunk/light/io/chunk_light_get_spot_attenuation.js";
|
|
7
|
+
import {
|
|
8
|
+
chunk_light_sphere_distance_attenuation
|
|
9
|
+
} from "../../shader/chunk/light/io/chunk_light_sphere_distance_attenuation.js";
|
|
10
|
+
|
|
11
|
+
const POINT_DESCRIPTOR = LIGHT_DATABASE_SPEC.get("light_point");
|
|
12
|
+
const SPOT_DESCRIPTOR = LIGHT_DATABASE_SPEC.get("light_spot");
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Radially symmetric (isotropic) voxel-footprint-aware point and spot light evaluation for
|
|
16
|
+
* {@link shader_irradiance_clipmap_build}.
|
|
17
|
+
*
|
|
18
|
+
* When a local light of small physical radius `r` sits inside a coarse clipmap voxel grid of spacing
|
|
19
|
+
* `h` (`h > r`), the 8 surrounding voxel centres are displaced radially from the light by up to
|
|
20
|
+
* `sqrt(3)/2 * h ≈ 0.866 * h` (and ~`0.71 * h` across a shared corner/edge). Without radial distance
|
|
21
|
+
* regularization, coarse cascades under-sample the near-light `1 / d^2` peak relative to finer cascades.
|
|
22
|
+
*
|
|
23
|
+
* ## Why Axis-Aligned Box Clamping (`max(abs(L) - 0.5*h, 0)`) Must Not Be Used
|
|
24
|
+
*
|
|
25
|
+
* Clamping each axis independently via `d_box = length(max(abs(L) - vec3(0.5 * h), vec3(0.0)))`
|
|
26
|
+
* zeroes out any coordinate axis within `+/- 0.5 * h` of the light source:
|
|
27
|
+
* - Every voxel inside the central `[-0.5*h, +0.5*h]^3` cube gets `d_box = 0` (a flat-topped cube).
|
|
28
|
+
* - Outside that cube, along the coordinate slabs `|L_x| <= 0.5*h` or `|L_y| <= 0.5*h`, the level
|
|
29
|
+
* sets of `d_box` are flat axis-aligned planes meeting at 90-degree corners (`┐`) instead of
|
|
30
|
+
* spheres, baking rectilinear box boundaries directly into the 3D irradiance texture.
|
|
31
|
+
*
|
|
32
|
+
* To match brightness across cascades without introducing axis-aligned cubic plateaus or directional
|
|
33
|
+
* distortion:
|
|
34
|
+
* - `result.direction` is always the true Euclidean radial unit vector `L / length(L)`.
|
|
35
|
+
* - `irradiance_clipmap_regularize_light_distance(d, cell_size)` depends purely on Euclidean radial
|
|
36
|
+
* distance `d = length(L)`, applying a strictly monotonic, radially isotropic `C^1` shift inside
|
|
37
|
+
* `d < 1.75 * h` bounded below by `0.35 * h`, and equalling `d` identically in the far field
|
|
38
|
+
* (`d >= 1.75 * h`).
|
|
39
|
+
*
|
|
40
|
+
* @type {CodeChunk}
|
|
41
|
+
*/
|
|
42
|
+
export const chunk_irradiance_clipmap_local_light = CodeChunk.from(
|
|
43
|
+
//language=WGSL
|
|
44
|
+
`
|
|
45
|
+
const IRRADIANCE_CLIPMAP_VOXEL_FOOTPRINT_RADIUS: f32 = 0.35;
|
|
46
|
+
const IRRADIANCE_CLIPMAP_VOXEL_RADIAL_SHIFT: f32 = 0.45;
|
|
47
|
+
const IRRADIANCE_CLIPMAP_VOXEL_RADIAL_SUPPORT: f32 = 1.75;
|
|
48
|
+
|
|
49
|
+
fn irradiance_clipmap_regularize_light_distance(distance: f32, cell_size: f32) -> f32 {
|
|
50
|
+
let h = max(cell_size, 1e-5);
|
|
51
|
+
let s = smoothstep(0.0, IRRADIANCE_CLIPMAP_VOXEL_RADIAL_SUPPORT * h, distance);
|
|
52
|
+
let shifted = distance - IRRADIANCE_CLIPMAP_VOXEL_RADIAL_SHIFT * h * (1.0 - s);
|
|
53
|
+
return max(shifted, IRRADIANCE_CLIPMAP_VOXEL_FOOTPRINT_RADIUS * h);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
fn irradiance_clipmap_get_point_light_info_by_index(
|
|
57
|
+
database: ptr<storage, array<u32>>,
|
|
58
|
+
index: u32,
|
|
59
|
+
position_ws: vec3<f32>,
|
|
60
|
+
cell_size: f32,
|
|
61
|
+
) -> ${INCIDENT_LIGHT_STRUCT.wgsl_ref} {
|
|
62
|
+
let light = ${POINT_DESCRIPTOR.marshalling_method_read}(database, index);
|
|
63
|
+
let L = light.position.xyz - position_ws;
|
|
64
|
+
let d_center = max(length(L), 1e-5);
|
|
65
|
+
let d_eval = irradiance_clipmap_regularize_light_distance(d_center, cell_size);
|
|
66
|
+
|
|
67
|
+
var result: ${INCIDENT_LIGHT_STRUCT.wgsl_ref};
|
|
68
|
+
result.direction = L / d_center;
|
|
69
|
+
|
|
70
|
+
let attenuation = light_sphere_distance_attenuation(d_eval, light.radius, light.distance);
|
|
71
|
+
result.color = light.color * attenuation;
|
|
72
|
+
result.radius = light.radius / d_center;
|
|
73
|
+
result.distance = max(0.0, d_center - light.radius);
|
|
74
|
+
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
fn irradiance_clipmap_get_spot_light_info_by_index(
|
|
79
|
+
database: ptr<storage, array<u32>>,
|
|
80
|
+
index: u32,
|
|
81
|
+
position_ws: vec3<f32>,
|
|
82
|
+
cell_size: f32,
|
|
83
|
+
) -> ${INCIDENT_LIGHT_STRUCT.wgsl_ref} {
|
|
84
|
+
let light = ${SPOT_DESCRIPTOR.marshalling_method_read}(database, index);
|
|
85
|
+
let L = light.position - position_ws;
|
|
86
|
+
let d_center = max(length(L), 1e-5);
|
|
87
|
+
let d_eval = irradiance_clipmap_regularize_light_distance(d_center, cell_size);
|
|
88
|
+
|
|
89
|
+
var result: ${INCIDENT_LIGHT_STRUCT.wgsl_ref};
|
|
90
|
+
result.direction = L / d_center;
|
|
91
|
+
result.distance = max(0.0, d_center - light.radius);
|
|
92
|
+
result.radius = light.radius / d_center;
|
|
93
|
+
|
|
94
|
+
let angle_cos = dot(result.direction, -light.direction);
|
|
95
|
+
let spot_attenuation = light_get_spot_attenuation(light.coneCos, light.penumbraCos, angle_cos);
|
|
96
|
+
|
|
97
|
+
if (spot_attenuation > 0.0) {
|
|
98
|
+
result.color = light.color * spot_attenuation;
|
|
99
|
+
result.color *= light_sphere_distance_attenuation(d_eval, light.radius, light.distance);
|
|
100
|
+
} else {
|
|
101
|
+
result.color = vec3<f32>(0.0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
`, [
|
|
107
|
+
POINT_DESCRIPTOR.chunk_read,
|
|
108
|
+
SPOT_DESCRIPTOR.chunk_read,
|
|
109
|
+
INCIDENT_LIGHT_STRUCT.declaration_chunk,
|
|
110
|
+
chunk_light_get_spot_attenuation,
|
|
111
|
+
chunk_light_sphere_distance_attenuation,
|
|
112
|
+
]
|
|
113
|
+
);
|