@woosh/meep-engine 3.58.0 → 3.59.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/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +450 -43
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +156 -25
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +26 -5
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +35 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +2 -1
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +2 -1
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +5 -3
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_render_cost.js +8 -7
- package/src/generation/foliage/asset/TreeAsset.d.ts +17 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +20 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +10 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +57 -29
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +4 -2
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -1
- package/src/generation/foliage/asset/tree_lod_plan.js +12 -14
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +6 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +7 -0
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +6 -6
- package/src/generation/foliage/material/foliage_tile.js +3 -3
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +2 -2
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -7
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +85 -40
- package/src/generation/foliage/mesh/tree_clusters.d.ts +26 -5
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_clusters.js +52 -39
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +32 -54
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +157 -3
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +19 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +41 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2034
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +27 -56
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/renderer/Renderer.d.ts +3 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +94 -38
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +25 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +126 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +832 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +9 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +0 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +0 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +5 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +13 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +20 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +152 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +14 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +50 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +26 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +3 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +8 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +3 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
- 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 +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +47 -5
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
|
@@ -2,12 +2,15 @@ import { COLLECTION_U32_STRUCT_READ } from "../../../gpu_primitive/COLLECTION_U3
|
|
|
2
2
|
import { COLLECTION_U32_STRUCT_WRITE } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
3
3
|
import { CLIPMAP_LEVEL_ARRAY } from "../../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
4
4
|
import { chunk_mod_v3i } from "../../../shader/chunk/geometry/vec3/chunk_mod_v3i.js";
|
|
5
|
+
import { chunk_stbn_sample_vec2 } from "../../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
|
|
6
|
+
import { chunk_hash_lowbias32 } from "../../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
5
7
|
import { METRO_L1_IRRADIANCE_STRUCT } from "../../../shader/chunk/spherical_harmonics/l1i/chunk_convert_to_irradiance_sh.js";
|
|
6
8
|
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
7
9
|
import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
|
|
8
10
|
import { atomic_u32, f32, u32, vec2u, vec3i, vec4f } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
11
|
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
10
12
|
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
13
|
+
import { STBN_VEC2_RESOURCE } from "../../../STATIC_GRAPHICS_ENGINE_ASSET_RESOURCES.js";
|
|
11
14
|
import {
|
|
12
15
|
PROBE_BLEND_SKIRT,
|
|
13
16
|
PROBE_CLIPMAP_NONE,
|
|
@@ -31,13 +34,14 @@ import {
|
|
|
31
34
|
PROBE_STATE_KIND_MASK,
|
|
32
35
|
PROBE_STATE_NEW,
|
|
33
36
|
PROBE_STATE_UPDATES_SHIFT,
|
|
34
|
-
PROBE_THREAD_WORKGROUP_SIZE
|
|
37
|
+
PROBE_THREAD_WORKGROUP_SIZE,
|
|
38
|
+
PROBE_WANTED_SCREEN
|
|
35
39
|
} from "./PROBE_CLIPMAP.js";
|
|
36
40
|
|
|
37
41
|
/**
|
|
38
42
|
* A probe's record (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.2), 64 bytes a slot: where it is, when it
|
|
39
|
-
* was wanted and traced, its last update's back faces, and its irradiance. Where
|
|
40
|
-
* is the state's second word, which readers weighing it load with the state.
|
|
43
|
+
* was wanted and traced, its last update's back faces, whose want it was, and its irradiance. Where
|
|
44
|
+
* relocation moved it is the state's second word, which readers weighing it load with the state.
|
|
41
45
|
*
|
|
42
46
|
* @type {WebGPUStruct}
|
|
43
47
|
*/
|
|
@@ -45,12 +49,17 @@ export const PROBE_RECORD_STRUCT = WebGPUStruct.from({
|
|
|
45
49
|
/** the lattice point, in its cascade's spacing: the probe stands at `cell · spacing` before relocation */
|
|
46
50
|
cell: vec3i,
|
|
47
51
|
cascade: u32,
|
|
48
|
-
/** when a pixel last wanted it: seconds since the clipmap was made */
|
|
52
|
+
/** when a pixel or a hit last wanted it: seconds since the clipmap was made */
|
|
49
53
|
wanted_time: f32,
|
|
50
54
|
/** when it was last updated, on the same clock */
|
|
51
55
|
traced_time: f32,
|
|
52
56
|
/** the share of its last update's resolved rays that hit back faces (§8.4) */
|
|
53
57
|
back_face: f32,
|
|
58
|
+
/**
|
|
59
|
+
* 1 when a pixel wanted it in the last frame anything did, 0 when only hits did (§8.3): whether its
|
|
60
|
+
* hits want in turn.
|
|
61
|
+
*/
|
|
62
|
+
screen: u32,
|
|
54
63
|
/** the irradiance its rays saw, the Metro L1 encoding: luma as SH2, chroma constant */
|
|
55
64
|
sh: METRO_L1_IRRADIANCE_STRUCT,
|
|
56
65
|
}, "ProbeRecord");
|
|
@@ -68,7 +77,10 @@ export const PROBE_RAY_STRUCT = WebGPUStruct.from({
|
|
|
68
77
|
direction: u32,
|
|
69
78
|
/** the hit's normal, octahedral, two unorm16; zero but for a hit */
|
|
70
79
|
normal: u32,
|
|
71
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* The `meshes` row whose surface the hit is on, 0 for none. After shade, the hit's diffuse albedo,
|
|
82
|
+
* `pack4x8unorm`, which the light pass reads; zero for any other ray.
|
|
83
|
+
*/
|
|
72
84
|
row: u32,
|
|
73
85
|
/** its kind, the back face, and the hit's cascade (`PROBE_CLIPMAP.js`) */
|
|
74
86
|
flags: u32,
|
|
@@ -339,6 +351,8 @@ const PROBE_RAY_KIND_MASK = ${PROBE_RAY_KIND_MASK}u;
|
|
|
339
351
|
const PROBE_RAY_BACK_FACE = ${PROBE_RAY_BACK_FACE}u;
|
|
340
352
|
const PROBE_RAY_CASCADE_SHIFT = ${PROBE_RAY_CASCADE_SHIFT}u;
|
|
341
353
|
|
|
354
|
+
const PROBE_WANTED_SCREEN = ${PROBE_WANTED_SCREEN}u;
|
|
355
|
+
|
|
342
356
|
const PROBE_THREAD_WORKGROUP_SIZE = ${PROBE_THREAD_WORKGROUP_SIZE}u;
|
|
343
357
|
const PROBE_BLEND_SKIRT = ${PROBE_BLEND_SKIRT}.0;
|
|
344
358
|
|
|
@@ -446,3 +460,34 @@ fn probe_clipmap_texel_ray(texel: u32, round: u32, updates: u32, rays: u32, texe
|
|
|
446
460
|
`, [
|
|
447
461
|
chunk_probe_clipmap,
|
|
448
462
|
]);
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* The STBN jitter of a ray in its texel (§8.6): the noise moved by the slot's hash so that neighbouring
|
|
466
|
+
* probes do not jitter alike, and a fresh sample for each update and each round of a texel's rays. The
|
|
467
|
+
* trace aims its ray by it, and the light pass picks the probes at its hit with it (§8.7).
|
|
468
|
+
*
|
|
469
|
+
* ```wgsl
|
|
470
|
+
* fn probe_clipmap_ray_jitter(slot: u32, texel: u32, ray: u32, updates: u32, rays: u32, n: u32) -> vec2<f32> // ray: its index among the probe's R; n: n_r
|
|
471
|
+
* ```
|
|
472
|
+
*
|
|
473
|
+
* @type {CodeChunk}
|
|
474
|
+
*/
|
|
475
|
+
export const chunk_probe_clipmap_ray_jitter = CodeChunk.from(
|
|
476
|
+
//language=WGSL
|
|
477
|
+
`
|
|
478
|
+
fn probe_clipmap_ray_jitter(slot: u32, texel: u32, ray: u32, updates: u32, rays: u32, n: u32) -> vec2<f32> {
|
|
479
|
+
let texels = n * n;
|
|
480
|
+
let round = select(0u, ray / texels, rays >= texels);
|
|
481
|
+
let per_texel = max(rays / texels, 1u);
|
|
482
|
+
|
|
483
|
+
let scramble = hash_lowbias32(slot);
|
|
484
|
+
let noise_xy = vec2<u32>(texel % n, texel / n) + vec2<u32>(scramble & 127u, (scramble >> 7u) & 127u);
|
|
485
|
+
|
|
486
|
+
return stbn_sample_vec2(vec3<u32>(noise_xy, updates * per_texel + round));
|
|
487
|
+
}
|
|
488
|
+
`, [
|
|
489
|
+
chunk_hash_lowbias32,
|
|
490
|
+
chunk_stbn_sample_vec2,
|
|
491
|
+
]);
|
|
492
|
+
|
|
493
|
+
chunk_probe_clipmap_ray_jitter.requireResource(STBN_VEC2_RESOURCE);
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cage of a cascade around a receiving point (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.3, §9.1): the
|
|
3
|
+
* lattice cell holding the point moved along `bias_direction` by {@link PROBE_RECEIVER_BIAS} of the
|
|
4
|
+
* cascade's spacing, whose eight corners are the probes the point reads.
|
|
5
|
+
*
|
|
6
|
+
* ```wgsl
|
|
7
|
+
* fn probe_clipmap_cage(cascade: u32, position: vec3<f32>, bias_direction: vec3<f32>, cage: ptr<function, vec3<i32>>) -> bool
|
|
8
|
+
* fn probe_clipmap_biased(cascade: u32, position: vec3<f32>, bias_direction: vec3<f32>) -> vec3<f32>
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* `probe_clipmap_cage` writes the cell's least corner and says whether the cascade's cage window holds
|
|
12
|
+
* it. Want takes it to choose the probes a pixel wants, and the pick to read them, so that a pixel reads
|
|
13
|
+
* the probes it wanted.
|
|
14
|
+
*
|
|
15
|
+
* @type {CodeChunk}
|
|
16
|
+
*/
|
|
17
|
+
export const chunk_probe_clipmap_cage: CodeChunk;
|
|
18
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
19
|
+
//# sourceMappingURL=chunk_probe_clipmap_cage.d.ts.map
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_probe_clipmap_cage.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH,uCAFU,SAAS,CAkBhB;0BApCuB,uCAAuC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { chunk_clipmap_contains } from "../../../shader/chunk/clipmap/chunk_clipmap_contains.js";
|
|
2
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
3
|
+
import { PROBE_LEVELS_RESOURCE } from "./chunk_probe_clipmap.js";
|
|
4
|
+
import { PROBE_RECEIVER_BIAS } from "./PROBE_CLIPMAP.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The cage of a cascade around a receiving point (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.3, §9.1): the
|
|
8
|
+
* lattice cell holding the point moved along `bias_direction` by {@link PROBE_RECEIVER_BIAS} of the
|
|
9
|
+
* cascade's spacing, whose eight corners are the probes the point reads.
|
|
10
|
+
*
|
|
11
|
+
* ```wgsl
|
|
12
|
+
* fn probe_clipmap_cage(cascade: u32, position: vec3<f32>, bias_direction: vec3<f32>, cage: ptr<function, vec3<i32>>) -> bool
|
|
13
|
+
* fn probe_clipmap_biased(cascade: u32, position: vec3<f32>, bias_direction: vec3<f32>) -> vec3<f32>
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* `probe_clipmap_cage` writes the cell's least corner and says whether the cascade's cage window holds
|
|
17
|
+
* it. Want takes it to choose the probes a pixel wants, and the pick to read them, so that a pixel reads
|
|
18
|
+
* the probes it wanted.
|
|
19
|
+
*
|
|
20
|
+
* @type {CodeChunk}
|
|
21
|
+
*/
|
|
22
|
+
export const chunk_probe_clipmap_cage = CodeChunk.from(
|
|
23
|
+
//language=WGSL
|
|
24
|
+
`
|
|
25
|
+
fn probe_clipmap_biased(cascade: u32, position: vec3<f32>, bias_direction: vec3<f32>) -> vec3<f32> {
|
|
26
|
+
return position + bias_direction * (${PROBE_RECEIVER_BIAS} * probe_levels[cascade].cell_size);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
fn probe_clipmap_cage(cascade: u32, position: vec3<f32>, bias_direction: vec3<f32>, cage: ptr<function, vec3<i32>>) -> bool {
|
|
30
|
+
let level = probe_levels[cascade];
|
|
31
|
+
|
|
32
|
+
*cage = vec3<i32>(floor(probe_clipmap_biased(cascade, position, bias_direction) / level.cell_size));
|
|
33
|
+
|
|
34
|
+
return clipmap_contains(*cage, level.corner, level.size);
|
|
35
|
+
}
|
|
36
|
+
`, [
|
|
37
|
+
chunk_clipmap_contains,
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
chunk_probe_clipmap_cage.requireResource(PROBE_LEVELS_RESOURCE);
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a reader of the probes needs past the levels: the clipmap's shape, the depth atlas's and the radiance
|
|
3
|
+
* atlas's.
|
|
4
|
+
* @type {WebGPUStruct}
|
|
5
|
+
*/
|
|
6
|
+
export const PROBE_SAMPLING_STRUCT: WebGPUStruct;
|
|
7
|
+
/**
|
|
8
|
+
* The clipmap's shape, a uniform.
|
|
9
|
+
* @type {ShaderResourceDescriptor}
|
|
10
|
+
*/
|
|
11
|
+
export const PROBE_SAMPLING_RESOURCE: ShaderResourceDescriptor;
|
|
12
|
+
/**
|
|
13
|
+
* The indirection as its readers load it: `r32uint`, a slot or `PROBE_CLIPMAP_NONE` a lattice point.
|
|
14
|
+
* @type {ShaderResourceDescriptor}
|
|
15
|
+
*/
|
|
16
|
+
export const PROBE_INDIRECTION_READ_RESOURCE: ShaderResourceDescriptor;
|
|
17
|
+
/**
|
|
18
|
+
* Bilinear within a tile, clamped: a tile's skirt makes a tap across its edge read the fold's twin.
|
|
19
|
+
* @type {SamplerDescriptor}
|
|
20
|
+
*/
|
|
21
|
+
export const PROBE_DEPTH_SAMPLER_DESCRIPTOR: SamplerDescriptor;
|
|
22
|
+
/**
|
|
23
|
+
* The sampler the depth atlas is tapped through.
|
|
24
|
+
* @type {ShaderResourceDescriptor}
|
|
25
|
+
*/
|
|
26
|
+
export const PROBE_DEPTH_SAMPLER_RESOURCE: ShaderResourceDescriptor;
|
|
27
|
+
/**
|
|
28
|
+
* A point's picked probes (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §9.1), and their SH (§9.2):
|
|
29
|
+
*
|
|
30
|
+
* ```wgsl
|
|
31
|
+
* fn probe_clipmap_pick(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapPick
|
|
32
|
+
* fn probe_clipmap_sh_of(pick: ProbeClipmapPick) -> ProbeClipmapSH
|
|
33
|
+
* fn probe_clipmap_sample_sh(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapSH
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* - **The cage**: `probe_clipmap_cage` along mix(n, v, 0.2), as want takes it, so a pixel reads the
|
|
37
|
+
* probes it wanted.
|
|
38
|
+
* - **The weights**, visibility only, of the cage's eight corners: a corner without an ALIVE probe weighs
|
|
39
|
+
* nothing; one with weighs its trilinear weight × `probe_visibility_weight`: the wrap back-face term
|
|
40
|
+
* toward the probe from the point itself, and Chebyshev's from one bilinear tap of its depth toward
|
|
41
|
+
* the biased point, at the distance in spacings. No SH and no radiance is read for them.
|
|
42
|
+
* - **The pick**: two of the eight by `pick2_wrs_mat2x4` with the noise, their blend t; in the finest
|
|
43
|
+
* cascade's blend skirt, two of the next one's too, the pairs lerped by the skirt's weight. A cascade
|
|
44
|
+
* whose corners weigh nothing gives way to the next coarser, without a skirt. With none left the
|
|
45
|
+
* weights are zero, and the fallback is the caller's (§9.1, step 6).
|
|
46
|
+
* - **The SH**: the picked records' Metro L1 structs mixed by their weights; resolved with
|
|
47
|
+
* `resolve_irradiance_sh_to_diffuse` at the caller's normal, it gives E/π. `probe_clipmap_sh_of` takes a
|
|
48
|
+
* pick already made, so a pass that samples the specular too picks once; `probe_clipmap_sample_sh` picks
|
|
49
|
+
* and takes it.
|
|
50
|
+
*
|
|
51
|
+
* Per cascade read: 8 indirection loads, 8 state words and 8 depth taps, then 2 indirection loads for
|
|
52
|
+
* the pair; then two records a cascade read for the SH. A depth tile's place takes no integer division
|
|
53
|
+
* (`index_to_grid2d_reciprocal`): 7% of the diffuse on the RDNA2 iGPU, whose division is emulated.
|
|
54
|
+
*
|
|
55
|
+
* @type {CodeChunk}
|
|
56
|
+
*/
|
|
57
|
+
export const chunk_probe_clipmap_pick: CodeChunk;
|
|
58
|
+
/**
|
|
59
|
+
* What {@link chunk_probe_clipmap_pick} reads, as a group a reader of the probes adds to its shader (§9.5).
|
|
60
|
+
* A shader that takes this mode's alternative of an `INDIRECT_LIGHTING` choice binds it in every mode, as
|
|
61
|
+
* its variants share their resources: from `GPUProbeClipmapGI.write_sampling_bindings`, which writes a
|
|
62
|
+
* clipmap of no cascade while there are no probes, and the sampler from its descriptor.
|
|
63
|
+
*
|
|
64
|
+
* @type {ShaderResourceGroupDescriptor}
|
|
65
|
+
*/
|
|
66
|
+
export const PROBE_CLIPMAP_SAMPLING_GROUP: ShaderResourceGroupDescriptor;
|
|
67
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
68
|
+
import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
|
|
69
|
+
import { SamplerDescriptor } from "../../../../descriptor/texture/SamplerDescriptor.js";
|
|
70
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
71
|
+
import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
|
|
72
|
+
//# sourceMappingURL=chunk_probe_clipmap_pick.d.ts.map
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_probe_clipmap_pick.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,oCAFU,YAAY,CAuBF;AAEpB;;;GAGG;AACH,sCAFU,wBAAwB,CAE+E;AAEjH;;;GAGG;AACH,8CAFU,wBAAwB,CAEiF;AAEnH;;;GAGG;AACH,6CAFU,iBAAiB,CAQvB;AAEJ;;;GAGG;AACH,2CAFU,wBAAwB,CAE+G;AAEjJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,uCAFU,SAAS,CA6MhB;AAUH;;;;;;;GAOG;AACH,2CAFU,6BAA6B,CAWG;6BA1Ub,sCAAsC;yCAH1B,sDAAsD;kCAT7D,qDAAqD;0BAQ7D,uCAAuC;8CAEnB,2DAA2D"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { SamplerDescriptor } from "../../../../descriptor/texture/SamplerDescriptor.js";
|
|
2
|
+
import { chunk_clipmap_select_finest } from "../../../shader/chunk/clipmap/chunk_clipmap_select_finest.js";
|
|
3
|
+
import { chunk_uv_octahedral_unit_encode } from "../../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_encode.js";
|
|
4
|
+
import { chunk_index_to_grid2d_reciprocal } from "../../../shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js";
|
|
5
|
+
import { chunk_probe_visibility_weight } from "../../../shader/chunk/light/probe/chunk_probe_visibility_weight.js";
|
|
6
|
+
import { chunk_pick2_wrs_mat2x4 } from "../../../shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js";
|
|
7
|
+
import { METRO_L1_IRRADIANCE_STRUCT } from "../../../shader/chunk/spherical_harmonics/l1i/chunk_convert_to_irradiance_sh.js";
|
|
8
|
+
import { chunk_texture_octahedral_skirt_uv } from "../../../shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.js";
|
|
9
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
10
|
+
import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
|
|
11
|
+
import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
|
|
12
|
+
import { f32, u32, vec2f } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
13
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
14
|
+
import {
|
|
15
|
+
chunk_probe_clipmap,
|
|
16
|
+
PROBE_DEPTH_HISTORY_RESOURCE,
|
|
17
|
+
PROBE_LEVELS_RESOURCE,
|
|
18
|
+
PROBE_RADIANCE_HISTORY_RESOURCE,
|
|
19
|
+
PROBE_RECORDS_READ_RESOURCE,
|
|
20
|
+
PROBE_STATES_READ_RESOURCE
|
|
21
|
+
} from "./chunk_probe_clipmap.js";
|
|
22
|
+
import { chunk_probe_clipmap_cage } from "./chunk_probe_clipmap_cage.js";
|
|
23
|
+
import { PROBE_RECEIVER_BIAS_VIEW } from "./PROBE_CLIPMAP.js";
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* What a reader of the probes needs past the levels: the clipmap's shape, the depth atlas's and the radiance
|
|
27
|
+
* atlas's.
|
|
28
|
+
* @type {WebGPUStruct}
|
|
29
|
+
*/
|
|
30
|
+
export const PROBE_SAMPLING_STRUCT = WebGPUStruct.from({
|
|
31
|
+
/** the cascades, C_p */
|
|
32
|
+
cascade_count: u32,
|
|
33
|
+
/** lattice points a side of a cascade's window, N_p, a power of two */
|
|
34
|
+
resolution: u32,
|
|
35
|
+
/** octahedral depth texels a side, n_d */
|
|
36
|
+
depth_resolution: u32,
|
|
37
|
+
/** tiles a row of the depth atlas */
|
|
38
|
+
depth_tiles_per_row: u32,
|
|
39
|
+
/** one over the depth atlas's texels, along x and y */
|
|
40
|
+
depth_texel: vec2f,
|
|
41
|
+
/** one over the tiles a row, rounded to f32: a tile's place without an integer division */
|
|
42
|
+
depth_tiles_per_row_reciprocal: f32,
|
|
43
|
+
/** octahedral radiance texels a side, n_r */
|
|
44
|
+
radiance_resolution: u32,
|
|
45
|
+
/** tiles a row of the radiance atlas */
|
|
46
|
+
radiance_tiles_per_row: u32,
|
|
47
|
+
/** one over the radiance atlas's texels, along x and y */
|
|
48
|
+
radiance_texel: vec2f,
|
|
49
|
+
/** one over the radiance atlas's tiles a row, rounded to f32 */
|
|
50
|
+
radiance_tiles_per_row_reciprocal: f32,
|
|
51
|
+
}, "ProbeSampling");
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The clipmap's shape, a uniform.
|
|
55
|
+
* @type {ShaderResourceDescriptor}
|
|
56
|
+
*/
|
|
57
|
+
export const PROBE_SAMPLING_RESOURCE = ShaderResourceDescriptor.uniform("probe_sampling", PROBE_SAMPLING_STRUCT);
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The indirection as its readers load it: `r32uint`, a slot or `PROBE_CLIPMAP_NONE` a lattice point.
|
|
61
|
+
* @type {ShaderResourceDescriptor}
|
|
62
|
+
*/
|
|
63
|
+
export const PROBE_INDIRECTION_READ_RESOURCE = ShaderResourceDescriptor.texture("probe_indirection", "uint", "3d");
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Bilinear within a tile, clamped: a tile's skirt makes a tap across its edge read the fold's twin.
|
|
67
|
+
* @type {SamplerDescriptor}
|
|
68
|
+
*/
|
|
69
|
+
export const PROBE_DEPTH_SAMPLER_DESCRIPTOR = Object.freeze(SamplerDescriptor.from({
|
|
70
|
+
magFilter: "linear",
|
|
71
|
+
minFilter: "linear",
|
|
72
|
+
mipmapFilter: "nearest",
|
|
73
|
+
addressModeU: "clamp-to-edge",
|
|
74
|
+
addressModeV: "clamp-to-edge",
|
|
75
|
+
}));
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The sampler the depth atlas is tapped through.
|
|
79
|
+
* @type {ShaderResourceDescriptor}
|
|
80
|
+
*/
|
|
81
|
+
export const PROBE_DEPTH_SAMPLER_RESOURCE = ShaderResourceDescriptor.sampler("probe_depth_sampler", "filtering", PROBE_DEPTH_SAMPLER_DESCRIPTOR);
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* A point's picked probes (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §9.1), and their SH (§9.2):
|
|
85
|
+
*
|
|
86
|
+
* ```wgsl
|
|
87
|
+
* fn probe_clipmap_pick(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapPick
|
|
88
|
+
* fn probe_clipmap_sh_of(pick: ProbeClipmapPick) -> ProbeClipmapSH
|
|
89
|
+
* fn probe_clipmap_sample_sh(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapSH
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* - **The cage**: `probe_clipmap_cage` along mix(n, v, 0.2), as want takes it, so a pixel reads the
|
|
93
|
+
* probes it wanted.
|
|
94
|
+
* - **The weights**, visibility only, of the cage's eight corners: a corner without an ALIVE probe weighs
|
|
95
|
+
* nothing; one with weighs its trilinear weight × `probe_visibility_weight`: the wrap back-face term
|
|
96
|
+
* toward the probe from the point itself, and Chebyshev's from one bilinear tap of its depth toward
|
|
97
|
+
* the biased point, at the distance in spacings. No SH and no radiance is read for them.
|
|
98
|
+
* - **The pick**: two of the eight by `pick2_wrs_mat2x4` with the noise, their blend t; in the finest
|
|
99
|
+
* cascade's blend skirt, two of the next one's too, the pairs lerped by the skirt's weight. A cascade
|
|
100
|
+
* whose corners weigh nothing gives way to the next coarser, without a skirt. With none left the
|
|
101
|
+
* weights are zero, and the fallback is the caller's (§9.1, step 6).
|
|
102
|
+
* - **The SH**: the picked records' Metro L1 structs mixed by their weights; resolved with
|
|
103
|
+
* `resolve_irradiance_sh_to_diffuse` at the caller's normal, it gives E/π. `probe_clipmap_sh_of` takes a
|
|
104
|
+
* pick already made, so a pass that samples the specular too picks once; `probe_clipmap_sample_sh` picks
|
|
105
|
+
* and takes it.
|
|
106
|
+
*
|
|
107
|
+
* Per cascade read: 8 indirection loads, 8 state words and 8 depth taps, then 2 indirection loads for
|
|
108
|
+
* the pair; then two records a cascade read for the SH. A depth tile's place takes no integer division
|
|
109
|
+
* (`index_to_grid2d_reciprocal`): 7% of the diffuse on the RDNA2 iGPU, whose division is emulated.
|
|
110
|
+
*
|
|
111
|
+
* @type {CodeChunk}
|
|
112
|
+
*/
|
|
113
|
+
export const chunk_probe_clipmap_pick = CodeChunk.from(
|
|
114
|
+
//language=WGSL
|
|
115
|
+
`
|
|
116
|
+
struct ProbeClipmapPick {
|
|
117
|
+
// the pair of the cascade picked from, then the next one's in its skirt
|
|
118
|
+
slots: vec4<u32>,
|
|
119
|
+
// each slot's share, summing to one; all zero where no probe weighs anything
|
|
120
|
+
weights: vec4<f32>,
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
struct ProbeClipmapPair {
|
|
124
|
+
slots: vec2<u32>,
|
|
125
|
+
weights: vec2<f32>,
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
struct ProbeClipmapSH {
|
|
129
|
+
sh: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref},
|
|
130
|
+
found: bool,
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fn probe_clipmap_corner_slot(cascade: u32, point: vec3<i32>) -> u32 {
|
|
134
|
+
let resolution = probe_sampling.resolution;
|
|
135
|
+
let storage = vec3<u32>(point) & vec3<u32>(resolution - 1u);
|
|
136
|
+
|
|
137
|
+
return textureLoad(probe_indirection, probe_clipmap_indirection_texel(cascade, storage, resolution), 0).r;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
fn probe_clipmap_corner(k: u32) -> vec3<i32> {
|
|
141
|
+
return vec3<i32>(vec3<u32>(k & 1u, (k >> 1u) & 1u, (k >> 2u) & 1u));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// a slot's depth moments toward a direction, in spacings: one bilinear tap of its tile, through its skirt
|
|
145
|
+
fn probe_clipmap_depth_moments(slot: u32, direction: vec3<f32>) -> vec2<f32> {
|
|
146
|
+
let side = probe_sampling.depth_resolution + 2u;
|
|
147
|
+
let place = index_to_grid2d_reciprocal(slot, probe_sampling.depth_tiles_per_row, probe_sampling.depth_tiles_per_row_reciprocal);
|
|
148
|
+
let tile = vec2<f32>(place * side);
|
|
149
|
+
let in_tile = texture_octahedral_skirt_uv(uv_octahedral_unit_encode(direction), f32(side)) * f32(side);
|
|
150
|
+
|
|
151
|
+
return textureSampleLevel(probe_depth, probe_depth_sampler, (tile + in_tile) * probe_sampling.depth_texel, 0.0).rg;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
fn probe_clipmap_corner_weight(cascade: u32, cage: vec3<i32>, k: u32, position: vec3<f32>, normal: vec3<f32>, biased: vec3<f32>) -> f32 {
|
|
155
|
+
let point = cage + probe_clipmap_corner(k);
|
|
156
|
+
let slot = probe_clipmap_corner_slot(cascade, point);
|
|
157
|
+
|
|
158
|
+
if (slot == PROBE_CLIPMAP_NONE) {
|
|
159
|
+
return 0.0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
let state = probe_states[slot];
|
|
163
|
+
|
|
164
|
+
if (probe_state_kind(state.x) != PROBE_STATE_ALIVE) {
|
|
165
|
+
return 0.0;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
let spacing = probe_levels[cascade].cell_size;
|
|
169
|
+
let probe = vec3<f32>(point) * spacing + probe_clipmap_offset_decode(state.y, spacing);
|
|
170
|
+
|
|
171
|
+
let f = biased / spacing - vec3<f32>(cage);
|
|
172
|
+
let corner = vec3<f32>(probe_clipmap_corner(k));
|
|
173
|
+
let axes = mix(1.0 - f, f, corner);
|
|
174
|
+
let trilinear = axes.x * axes.y * axes.z;
|
|
175
|
+
|
|
176
|
+
let to_point = biased - probe;
|
|
177
|
+
let distance = length(to_point);
|
|
178
|
+
let moments = probe_clipmap_depth_moments(slot, to_point / max(distance, 1e-6));
|
|
179
|
+
let visibility = probe_visibility_chebyshev(moments, distance / spacing);
|
|
180
|
+
|
|
181
|
+
// the back-face term from the point itself, not the biased one
|
|
182
|
+
return trilinear * probe_visibility_weight(normalize(probe - position), normal, visibility);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
fn probe_clipmap_pick_cascade(cascade: u32, position: vec3<f32>, normal: vec3<f32>, bias_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapPair {
|
|
186
|
+
var out: ProbeClipmapPair;
|
|
187
|
+
var cage: vec3<i32>;
|
|
188
|
+
|
|
189
|
+
if (!probe_clipmap_cage(cascade, position, bias_direction, &cage)) {
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
let biased = probe_clipmap_biased(cascade, position, bias_direction);
|
|
194
|
+
|
|
195
|
+
// each corner by name: a dynamic index would put the weights in local memory
|
|
196
|
+
let weights = mat2x4<f32>(
|
|
197
|
+
vec4<f32>(
|
|
198
|
+
probe_clipmap_corner_weight(cascade, cage, 0u, position, normal, biased),
|
|
199
|
+
probe_clipmap_corner_weight(cascade, cage, 1u, position, normal, biased),
|
|
200
|
+
probe_clipmap_corner_weight(cascade, cage, 2u, position, normal, biased),
|
|
201
|
+
probe_clipmap_corner_weight(cascade, cage, 3u, position, normal, biased),
|
|
202
|
+
),
|
|
203
|
+
vec4<f32>(
|
|
204
|
+
probe_clipmap_corner_weight(cascade, cage, 4u, position, normal, biased),
|
|
205
|
+
probe_clipmap_corner_weight(cascade, cage, 5u, position, normal, biased),
|
|
206
|
+
probe_clipmap_corner_weight(cascade, cage, 6u, position, normal, biased),
|
|
207
|
+
probe_clipmap_corner_weight(cascade, cage, 7u, position, normal, biased),
|
|
208
|
+
),
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
if (dot(weights[0], vec4<f32>(1.0)) + dot(weights[1], vec4<f32>(1.0)) <= 0.0) {
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
let pick = pick2_wrs_mat2x4(weights, noise);
|
|
216
|
+
|
|
217
|
+
out.slots = vec2<u32>(
|
|
218
|
+
probe_clipmap_corner_slot(cascade, cage + probe_clipmap_corner(pick.indices.x)),
|
|
219
|
+
probe_clipmap_corner_slot(cascade, cage + probe_clipmap_corner(pick.indices.y)),
|
|
220
|
+
);
|
|
221
|
+
out.weights = vec2<f32>(1.0 - pick.blend, pick.blend);
|
|
222
|
+
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
fn probe_clipmap_pick(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapPick {
|
|
227
|
+
var out: ProbeClipmapPick;
|
|
228
|
+
|
|
229
|
+
let count = probe_sampling.cascade_count;
|
|
230
|
+
let selection = clipmap_select_finest(&probe_levels, count, position, PROBE_BLEND_SKIRT);
|
|
231
|
+
|
|
232
|
+
if (selection.level == CLIPMAP_LEVEL_NONE) {
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
let bias_direction = mix(normal, view_direction, ${PROBE_RECEIVER_BIAS_VIEW});
|
|
237
|
+
|
|
238
|
+
var cascade = selection.level;
|
|
239
|
+
var skirt = selection.edge_weight;
|
|
240
|
+
var pair = probe_clipmap_pick_cascade(cascade, position, normal, bias_direction, noise);
|
|
241
|
+
|
|
242
|
+
// a cascade whose corners weigh nothing gives way to the next coarser, whole
|
|
243
|
+
for (var next = cascade + 1u; next < count; next++) {
|
|
244
|
+
if (pair.weights.x + pair.weights.y > 0.0) {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
cascade = next;
|
|
249
|
+
skirt = 0.0;
|
|
250
|
+
pair = probe_clipmap_pick_cascade(cascade, position, normal, bias_direction, noise);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
out.slots = vec4<u32>(pair.slots, pair.slots);
|
|
254
|
+
out.weights = vec4<f32>(pair.weights, 0.0, 0.0);
|
|
255
|
+
|
|
256
|
+
if (skirt > 0.0 && cascade + 1u < count && pair.weights.x + pair.weights.y > 0.0) {
|
|
257
|
+
let coarse = probe_clipmap_pick_cascade(cascade + 1u, position, normal, bias_direction, noise);
|
|
258
|
+
|
|
259
|
+
if (coarse.weights.x + coarse.weights.y > 0.0) {
|
|
260
|
+
out.slots = vec4<u32>(pair.slots, coarse.slots);
|
|
261
|
+
out.weights = vec4<f32>(pair.weights * (1.0 - skirt), coarse.weights * skirt);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return out;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
fn probe_clipmap_sh_of(pick: ProbeClipmapPick) -> ProbeClipmapSH {
|
|
269
|
+
var out: ProbeClipmapSH;
|
|
270
|
+
|
|
271
|
+
out.found = dot(pick.weights, vec4<f32>(1.0)) > 0.0;
|
|
272
|
+
|
|
273
|
+
if (!out.found) {
|
|
274
|
+
return out;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// each by name, the slots of a weight of zero not read
|
|
278
|
+
if (pick.weights.x > 0.0) {
|
|
279
|
+
let sh = probe_records[pick.slots.x].sh;
|
|
280
|
+
out.sh.CoCg += pick.weights.x * sh.CoCg;
|
|
281
|
+
out.sh.Y += pick.weights.x * sh.Y;
|
|
282
|
+
}
|
|
283
|
+
if (pick.weights.y > 0.0) {
|
|
284
|
+
let sh = probe_records[pick.slots.y].sh;
|
|
285
|
+
out.sh.CoCg += pick.weights.y * sh.CoCg;
|
|
286
|
+
out.sh.Y += pick.weights.y * sh.Y;
|
|
287
|
+
}
|
|
288
|
+
if (pick.weights.z > 0.0) {
|
|
289
|
+
let sh = probe_records[pick.slots.z].sh;
|
|
290
|
+
out.sh.CoCg += pick.weights.z * sh.CoCg;
|
|
291
|
+
out.sh.Y += pick.weights.z * sh.Y;
|
|
292
|
+
}
|
|
293
|
+
if (pick.weights.w > 0.0) {
|
|
294
|
+
let sh = probe_records[pick.slots.w].sh;
|
|
295
|
+
out.sh.CoCg += pick.weights.w * sh.CoCg;
|
|
296
|
+
out.sh.Y += pick.weights.w * sh.Y;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return out;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
fn probe_clipmap_sample_sh(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, noise: vec2<f32>) -> ProbeClipmapSH {
|
|
303
|
+
return probe_clipmap_sh_of(probe_clipmap_pick(position, normal, view_direction, noise));
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
`, [
|
|
307
|
+
chunk_probe_clipmap,
|
|
308
|
+
chunk_clipmap_select_finest,
|
|
309
|
+
chunk_probe_clipmap_cage,
|
|
310
|
+
chunk_index_to_grid2d_reciprocal,
|
|
311
|
+
chunk_uv_octahedral_unit_encode,
|
|
312
|
+
chunk_texture_octahedral_skirt_uv,
|
|
313
|
+
chunk_probe_visibility_weight,
|
|
314
|
+
chunk_pick2_wrs_mat2x4,
|
|
315
|
+
METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
|
|
316
|
+
]);
|
|
317
|
+
|
|
318
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_LEVELS_RESOURCE);
|
|
319
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_SAMPLING_RESOURCE);
|
|
320
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_INDIRECTION_READ_RESOURCE);
|
|
321
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_STATES_READ_RESOURCE);
|
|
322
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_RECORDS_READ_RESOURCE);
|
|
323
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_DEPTH_HISTORY_RESOURCE);
|
|
324
|
+
chunk_probe_clipmap_pick.requireResource(PROBE_DEPTH_SAMPLER_RESOURCE);
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* What {@link chunk_probe_clipmap_pick} reads, as a group a reader of the probes adds to its shader (§9.5).
|
|
328
|
+
* A shader that takes this mode's alternative of an `INDIRECT_LIGHTING` choice binds it in every mode, as
|
|
329
|
+
* its variants share their resources: from `GPUProbeClipmapGI.write_sampling_bindings`, which writes a
|
|
330
|
+
* clipmap of no cascade while there are no probes, and the sampler from its descriptor.
|
|
331
|
+
*
|
|
332
|
+
* @type {ShaderResourceGroupDescriptor}
|
|
333
|
+
*/
|
|
334
|
+
export const PROBE_CLIPMAP_SAMPLING_GROUP = new ShaderResourceGroupDescriptor()
|
|
335
|
+
.add(PROBE_LEVELS_RESOURCE)
|
|
336
|
+
.add(PROBE_SAMPLING_RESOURCE)
|
|
337
|
+
.add(PROBE_INDIRECTION_READ_RESOURCE)
|
|
338
|
+
.add(PROBE_STATES_READ_RESOURCE)
|
|
339
|
+
.add(PROBE_RECORDS_READ_RESOURCE)
|
|
340
|
+
.add(PROBE_DEPTH_HISTORY_RESOURCE)
|
|
341
|
+
.add(PROBE_DEPTH_SAMPLER_RESOURCE)
|
|
342
|
+
// the radiance the specular samples (chunk_probe_clipmap_sample_radiance), through the depth's sampler
|
|
343
|
+
.add(PROBE_RADIANCE_HISTORY_RESOURCE);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A point's specular radiance from its probes (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §9.3), before Fresnel:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* fn probe_clipmap_radiance_of(pick: ProbeClipmapPick, position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, roughness: f32) -> ProbeClipmapRadiance
|
|
6
|
+
* fn probe_clipmap_sample_radiance(position: vec3<f32>, normal: vec3<f32>, view_direction: vec3<f32>, roughness: f32, noise: vec2<f32>) -> ProbeClipmapRadiance
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* - **The pick is the diffuse's** (`probe_clipmap_pick`), by the normal and the view, so a pass that does
|
|
10
|
+
* both picks once: `probe_clipmap_radiance_of` takes a pick already made, with the point, normal and view it
|
|
11
|
+
* was made by. Its shares are re-weighted for the lobe, as Brick4's fused pass re-weights its pair:
|
|
12
|
+
* each probe's weight taken again with the sample vector in place of the normal, over the weight it was
|
|
13
|
+
* picked by, at the visibility it was picked at. The trilinear part cancels.
|
|
14
|
+
* - **The sample vector** is Lagarde's dominant direction, `normalize(mix(r, n, α))` with r the
|
|
15
|
+
* reflection of the view and α the roughness squared.
|
|
16
|
+
* - **A radiance tap** a probe, along the sample vector after a one-step sphere parallax: the reflected ray
|
|
17
|
+
* is met with a sphere about the probe whose radius is its mean depth along the vector. The depth is held
|
|
18
|
+
* at the cage's diagonal (§8.2), past which no parallax is taken. One bilinear tap of the tile, through
|
|
19
|
+
* its skirt and the depth's sampler.
|
|
20
|
+
* - **The rough end** is the probes' SH, mixed by the same shares and resolved for the GGX lobe
|
|
21
|
+
* (`resolve_irradiance_sh_to_specular`). The two are blended by `roughness_to_mip_ratio`: SH alone from
|
|
22
|
+
* roughness 0.7.
|
|
23
|
+
* - Where no probe weighs anything, nothing is found and the fallback is the caller's.
|
|
24
|
+
*
|
|
25
|
+
* @type {CodeChunk}
|
|
26
|
+
*/
|
|
27
|
+
export const chunk_probe_clipmap_sample_radiance: CodeChunk;
|
|
28
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
29
|
+
//# sourceMappingURL=chunk_probe_clipmap_sample_radiance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_probe_clipmap_sample_radiance.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,kDAFU,SAAS,CAoIZ;0BA3KmB,uCAAuC"}
|