@woosh/meep-engine 3.58.0 → 3.60.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 +190 -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 +365 -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 +97 -43
- 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/sdf/GPUGeometrySDFManager.d.ts +63 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
- 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/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
- 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/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +111 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +1596 -52
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +18 -3
- 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 +21 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -2
- 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 +8 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
- 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.d.ts +161 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -15
- 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 +1 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +3 -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 +6 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +32 -15
- 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 +380 -57
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +156 -8
- 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 +189 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +193 -9
- 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 +458 -32
- 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 +189 -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 +40 -10
- 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 +244 -32
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +8 -1
- 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 +29 -12
- 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 +15 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
- 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 +37 -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 +316 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +15 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +54 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +6 -9
- 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 +26 -37
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
- 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 +101 -38
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -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 +28 -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/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
- 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/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
- 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/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
- 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/scene/GPUSceneContext.d.ts +7 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
- 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/noise/r/chunk_r2_canonical.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
- 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/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -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/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +39 -18
- package/src/view/elements/progress/segmented/GhostTrail.d.ts +56 -0
- package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/GhostTrail.js +98 -0
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +155 -10
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +427 -101
- package/src/view/elements/progress/segmented/playground/index.html +78 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/playground/main.js +173 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
- package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
- 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/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -247
- 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
|
@@ -1,29 +1,51 @@
|
|
|
1
1
|
import { COLLECTION_U32_STRUCT_READ } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
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
|
+
import { chunk_sphere_sample_volume } from "../../../shader/chunk/geometry/sphere/chunk_sphere_sample_volume.js";
|
|
4
5
|
import { chunk_mod_v3i } from "../../../shader/chunk/geometry/vec3/chunk_mod_v3i.js";
|
|
6
|
+
import { chunk_rgb_to_luminance } from "../../../shader/chunk/color/chunk_rgb_to_luminance.js";
|
|
7
|
+
import { chunk_lower_bound_branchless } from "../../../shader/chunk/math/chunk_lower_bound_branchless.js";
|
|
8
|
+
import { chunk_stbn_sample_vec2 } from "../../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
|
|
9
|
+
import { chunk_r2_canonical } from "../../../shader/chunk/noise/r/chunk_r2_canonical.js";
|
|
10
|
+
import { chunk_hash_lowbias32 } from "../../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
11
|
+
import { chunk_hash_to_float01 } from "../../../shader/chunk/random/chunk_hash_to_float01.js";
|
|
12
|
+
import { chunk_pcg3d } from "../../../shader/chunk/random/pcg/chunk_pcg3d.js";
|
|
5
13
|
import { METRO_L1_IRRADIANCE_STRUCT } from "../../../shader/chunk/spherical_harmonics/l1i/chunk_convert_to_irradiance_sh.js";
|
|
6
14
|
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
7
15
|
import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
|
|
8
|
-
import { atomic_u32, f32, u32, vec2u, vec3i, vec4f } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
16
|
+
import { atomic_u32, f32, u32, vec2u, vec3i, vec3u, vec4f, vec4u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
17
|
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
10
18
|
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
19
|
+
import { STBN_VEC2_RESOURCE } from "../../../STATIC_GRAPHICS_ENGINE_ASSET_RESOURCES.js";
|
|
11
20
|
import {
|
|
12
21
|
PROBE_BLEND_SKIRT,
|
|
13
22
|
PROBE_CLIPMAP_NONE,
|
|
23
|
+
PROBE_AGE_BUCKETS,
|
|
24
|
+
PROBE_COUNTER_AGES,
|
|
25
|
+
PROBE_COUNTER_EVICTED,
|
|
14
26
|
PROBE_COUNTER_FREE,
|
|
15
27
|
PROBE_COUNTER_PERIOD,
|
|
16
28
|
PROBE_COUNTER_STARVED,
|
|
29
|
+
PROBE_COUNTER_WAITING,
|
|
17
30
|
PROBE_DISPATCH_ACTIVE,
|
|
18
31
|
PROBE_DISPATCH_ADMIT,
|
|
32
|
+
PROBE_DISPATCH_ORDER,
|
|
19
33
|
PROBE_DISPATCH_PUBLISH,
|
|
20
34
|
PROBE_DISPATCH_RAYS,
|
|
21
35
|
PROBE_DISPATCH_ROWS,
|
|
22
36
|
PROBE_DISPATCH_TEXELS,
|
|
23
37
|
PROBE_DISPATCH_TRACED,
|
|
38
|
+
PROBE_GUIDE_SCALE,
|
|
39
|
+
PROBE_ORDER_RUN,
|
|
24
40
|
PROBE_RAY_BACK_FACE,
|
|
41
|
+
PROBE_RAY_CASCADE_MASK,
|
|
25
42
|
PROBE_RAY_CASCADE_SHIFT,
|
|
26
43
|
PROBE_RAY_KIND_MASK,
|
|
44
|
+
PROBE_RAY_NONE,
|
|
45
|
+
PROBE_RAY_ORIGIN_JITTER,
|
|
46
|
+
PROBE_RAY_PROBE_SHIFT,
|
|
47
|
+
PROBE_RECORD_CASCADE_SHIFT,
|
|
48
|
+
PROBE_RECORD_SCREEN,
|
|
27
49
|
PROBE_RELOCATION_LIMIT,
|
|
28
50
|
PROBE_STATE_ALIVE,
|
|
29
51
|
PROBE_STATE_DEAD,
|
|
@@ -31,32 +53,40 @@ import {
|
|
|
31
53
|
PROBE_STATE_KIND_MASK,
|
|
32
54
|
PROBE_STATE_NEW,
|
|
33
55
|
PROBE_STATE_UPDATES_SHIFT,
|
|
34
|
-
|
|
56
|
+
PROBE_TEXEL_RAYS,
|
|
57
|
+
PROBE_THREAD_WORKGROUP_SIZE,
|
|
58
|
+
PROBE_WANTED_SCREEN
|
|
35
59
|
} from "./PROBE_CLIPMAP.js";
|
|
36
60
|
|
|
37
61
|
/**
|
|
38
|
-
* A probe's record (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.2),
|
|
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.
|
|
62
|
+
* A probe's record (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.2), 48 bytes a slot: where it is, when it
|
|
63
|
+
* was wanted and traced, its last update's back faces, whose want it was, and its irradiance. Where
|
|
64
|
+
* relocation moved it is the state's second word, which readers weighing it load with the state.
|
|
41
65
|
*
|
|
42
66
|
* @type {WebGPUStruct}
|
|
43
67
|
*/
|
|
44
68
|
export const PROBE_RECORD_STRUCT = WebGPUStruct.from({
|
|
45
69
|
/** the lattice point, in its cascade's spacing: the probe stands at `cell · spacing` before relocation */
|
|
46
70
|
cell: vec3i,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
71
|
+
/**
|
|
72
|
+
* The share of its last update's resolved rays that hit back faces (§8.4), unorm16 in the low half;
|
|
73
|
+
* whether a pixel wanted it, `PROBE_RECORD_SCREEN`; and its cascade, `probe_record_cascade`
|
|
74
|
+
* (`PROBE_CLIPMAP.js`).
|
|
75
|
+
*/
|
|
76
|
+
flags: u32,
|
|
77
|
+
/** the frame a pixel or a hit last wanted it, of the frames the clipmap has recorded */
|
|
78
|
+
wanted_frame: u32,
|
|
79
|
+
/** the frame it was last updated */
|
|
80
|
+
traced_frame: u32,
|
|
81
|
+
/**
|
|
82
|
+
* The irradiance its rays saw, the Metro L1 encoding (luma as SH2, chroma constant) in half floats:
|
|
83
|
+
* Y's xy, Y's zw, CoCg. `probe_record_sh_decode`.
|
|
84
|
+
*/
|
|
85
|
+
sh: vec3u,
|
|
86
|
+
}, "ProbeRecord").pack();
|
|
57
87
|
|
|
58
88
|
/**
|
|
59
|
-
* A ray of a probe's update (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.6),
|
|
89
|
+
* A ray of a probe's update (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §8.6), 24 bytes, as trace writes it for
|
|
60
90
|
* the passes after it.
|
|
61
91
|
*
|
|
62
92
|
* @type {WebGPUStruct}
|
|
@@ -68,19 +98,21 @@ export const PROBE_RAY_STRUCT = WebGPUStruct.from({
|
|
|
68
98
|
direction: u32,
|
|
69
99
|
/** the hit's normal, octahedral, two unorm16; zero but for a hit */
|
|
70
100
|
normal: u32,
|
|
71
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* The `meshes` row whose surface the hit is on, 0 for none. After shade, the hit's diffuse albedo,
|
|
103
|
+
* `pack4x8unorm`, which the light pass reads; zero for any other ray.
|
|
104
|
+
*/
|
|
72
105
|
row: u32,
|
|
73
106
|
/** its kind, the back face, and the hit's cascade (`PROBE_CLIPMAP.js`) */
|
|
74
107
|
flags: u32,
|
|
75
108
|
/**
|
|
76
|
-
* The light,
|
|
77
|
-
* writes the direct irradiance at a front-face hit, E_dir (§8.7),
|
|
78
|
-
* writes over it the radiance the ray brings back
|
|
109
|
+
* The light, RGB9E5 (`rgbe9995_encode`): held to its largest value, 65,408, which the half-float
|
|
110
|
+
* atlases after it also hold. Trace writes the direct irradiance at a front-face hit, E_dir (§8.7),
|
|
111
|
+
* zero for any other ray; shade writes over it the radiance the ray brings back, and the light pass
|
|
112
|
+
* adds what the hit takes from beyond the trace.
|
|
79
113
|
*/
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
light_b: u32,
|
|
83
|
-
}, "ProbeRay");
|
|
114
|
+
light: u32,
|
|
115
|
+
}, "ProbeRay").pack();
|
|
84
116
|
|
|
85
117
|
/**
|
|
86
118
|
* The cascades' cage windows, a {@link CLIPMAP_LEVEL_ARRAY} as a uniform, finest first: a cell of
|
|
@@ -142,6 +174,29 @@ export const PROBE_COUNTERS_READ_RESOURCE = ShaderResourceDescriptor.storageBuff
|
|
|
142
174
|
*/
|
|
143
175
|
export const PROBE_FREE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_free", WebGPUArray.u32, true);
|
|
144
176
|
|
|
177
|
+
/**
|
|
178
|
+
* What the next frame's retire evicts (§8.3), as the frame's schedule leaves it: the oldest `buckets` of the
|
|
179
|
+
* `PROBE_AGE_BUCKETS` age buckets whole, and `remaining` probes of the bucket below them. Zero, as a new
|
|
180
|
+
* buffer holds it, evicts nothing.
|
|
181
|
+
* @type {WebGPUStruct}
|
|
182
|
+
*/
|
|
183
|
+
export const PROBE_EVICTION_STRUCT = WebGPUStruct.from({
|
|
184
|
+
buckets: u32,
|
|
185
|
+
remaining: u32,
|
|
186
|
+
}, "ProbeEviction").pack();
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* The eviction as retire reads it: plainly, every thread.
|
|
190
|
+
* @type {ShaderResourceDescriptor}
|
|
191
|
+
*/
|
|
192
|
+
export const PROBE_EVICTION_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_eviction", PROBE_EVICTION_STRUCT);
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* The eviction as schedule writes it.
|
|
196
|
+
* @type {ShaderResourceDescriptor}
|
|
197
|
+
*/
|
|
198
|
+
export const PROBE_EVICTION_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_eviction", PROBE_EVICTION_STRUCT, true);
|
|
199
|
+
|
|
145
200
|
/**
|
|
146
201
|
* The live probes' slots as retire reads them: the list the frame before wrote.
|
|
147
202
|
* @type {ShaderResourceDescriptor}
|
|
@@ -166,12 +221,6 @@ export const PROBE_ACTIVE_WRITTEN_RESOURCE = ShaderResourceDescriptor.storageBuf
|
|
|
166
221
|
*/
|
|
167
222
|
export const PROBE_WANTED_BITS_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_wanted_bits", WebGPUArray.from(atomic_u32), true);
|
|
168
223
|
|
|
169
|
-
/**
|
|
170
|
-
* The wanted bits, read plainly once want has set them.
|
|
171
|
-
* @type {ShaderResourceDescriptor}
|
|
172
|
-
*/
|
|
173
|
-
export const PROBE_WANTED_BITS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_wanted_bits", WebGPUArray.u32);
|
|
174
|
-
|
|
175
224
|
/**
|
|
176
225
|
* The probes the frame updates, as the due passes list them, at most U (§8.5).
|
|
177
226
|
* @type {ShaderResourceDescriptor}
|
|
@@ -184,6 +233,13 @@ export const PROBE_TRACE_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer
|
|
|
184
233
|
*/
|
|
185
234
|
export const PROBE_TRACE_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_trace", COLLECTION_U32_STRUCT_READ);
|
|
186
235
|
|
|
236
|
+
/**
|
|
237
|
+
* The probes the frame updates, as the order pass sorts them in place: the count read plainly, the
|
|
238
|
+
* entries written.
|
|
239
|
+
* @type {ShaderResourceDescriptor}
|
|
240
|
+
*/
|
|
241
|
+
export const PROBE_TRACE_ORDER_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_trace", COLLECTION_U32_STRUCT_READ, true);
|
|
242
|
+
|
|
187
243
|
/**
|
|
188
244
|
* The keys wanted this frame, each once, as want lists them.
|
|
189
245
|
* @type {ShaderResourceDescriptor}
|
|
@@ -227,6 +283,76 @@ export const PROBE_RAYS_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer(
|
|
|
227
283
|
*/
|
|
228
284
|
export const PROBE_RAYS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_rays", WebGPUArray.from(PROBE_RAY_STRUCT));
|
|
229
285
|
|
|
286
|
+
/**
|
|
287
|
+
* Each listed probe's rays this update that the budget does not scale, `{count, elements}` by its place in
|
|
288
|
+
* the trace list: a uniform update's R and a DEAD probe's fewest, zero for a guided update. The trace
|
|
289
|
+
* command writes the count, the ray counts pass the elements.
|
|
290
|
+
* @type {ShaderResourceDescriptor}
|
|
291
|
+
*/
|
|
292
|
+
export const PROBE_RAY_COUNTS_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_ray_counts", COLLECTION_U32_STRUCT_READ, true);
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Each listed probe's rays this update that the budget scales, laid out as `probe_ray_counts`: a guided
|
|
296
|
+
* update's request, zero for any other.
|
|
297
|
+
* @type {ShaderResourceDescriptor}
|
|
298
|
+
*/
|
|
299
|
+
export const PROBE_RAY_REQUESTS_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_ray_requests", COLLECTION_U32_STRUCT_READ, true);
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* The inclusive sums of `probe_ray_counts`, as the scan leaves them.
|
|
303
|
+
* @type {ShaderResourceDescriptor}
|
|
304
|
+
*/
|
|
305
|
+
export const PROBE_RAY_COUNT_SUMS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_ray_count_sums", COLLECTION_U32_STRUCT_READ);
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* The inclusive sums of `probe_ray_requests`, as the scan leaves them.
|
|
309
|
+
* @type {ShaderResourceDescriptor}
|
|
310
|
+
*/
|
|
311
|
+
export const PROBE_RAY_REQUEST_SUMS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_ray_request_sums", COLLECTION_U32_STRUCT_READ);
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* The frame's rays laid out by listed probe (§8.6): inclusive sums of each listed probe's rays, so that the
|
|
315
|
+
* k-th listed probe's rays are the frame's `[sums[k − 1], sums[k])`, the first from 0, and the frame's
|
|
316
|
+
* count of rays is the last sum. The ray layout pass writes them, the trace command their count.
|
|
317
|
+
* @type {ShaderResourceDescriptor}
|
|
318
|
+
*/
|
|
319
|
+
export const PROBE_RAY_SUMS_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_ray_sums", COLLECTION_U32_STRUCT_READ, true);
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* The frame's rays laid out by listed probe, as the passes after the layout read them.
|
|
323
|
+
* @type {ShaderResourceDescriptor}
|
|
324
|
+
*/
|
|
325
|
+
export const PROBE_RAY_SUMS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_ray_sums", COLLECTION_U32_STRUCT_READ);
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* A slot's ray request (§8.6), as projection writes it after each update: the rays its next guided update
|
|
329
|
+
* asks for, and what tells it the probe's light moved.
|
|
330
|
+
*
|
|
331
|
+
* @type {WebGPUStruct}
|
|
332
|
+
*/
|
|
333
|
+
export const PROBE_REQUEST_STRUCT = WebGPUStruct.from({
|
|
334
|
+
/** the rays the probe's next guided update asks for */
|
|
335
|
+
rays: u32,
|
|
336
|
+
/** the running mean of the update's change score: its texels' falls from their means, each in its own deviation, summed over the root of their count */
|
|
337
|
+
change_mean: f32,
|
|
338
|
+
/** the running variance of the change score */
|
|
339
|
+
change_variance: f32,
|
|
340
|
+
/** the scores its running statistics hold, up to `PROBE_RADIANCE_SAMPLES_LIMIT` */
|
|
341
|
+
changes: u32,
|
|
342
|
+
}, "ProbeRequest").pack();
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Each slot's {@link PROBE_REQUEST_STRUCT}, as projection writes it.
|
|
346
|
+
* @type {ShaderResourceDescriptor}
|
|
347
|
+
*/
|
|
348
|
+
export const PROBE_REQUESTS_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_requests", WebGPUArray.from(PROBE_REQUEST_STRUCT), true);
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Each slot's ray request, as the ray counts pass reads it.
|
|
352
|
+
* @type {ShaderResourceDescriptor}
|
|
353
|
+
*/
|
|
354
|
+
export const PROBE_REQUESTS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_requests", WebGPUArray.from(PROBE_REQUEST_STRUCT));
|
|
355
|
+
|
|
230
356
|
/**
|
|
231
357
|
* The listed probes' maps, as accumulation writes them for projection and publish, in list order,
|
|
232
358
|
* `probe_clipmap_maps_words` a probe.
|
|
@@ -240,6 +366,15 @@ export const PROBE_MAPS_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer(
|
|
|
240
366
|
*/
|
|
241
367
|
export const PROBE_MAPS_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_maps", WebGPUArray.u32);
|
|
242
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Each slot's radiance estimators (§8.8), n_r² a slot by texel, as accumulation reads and writes them: the
|
|
371
|
+
* texel's multi-scale mean past its mean, which the radiance atlas holds. Four words of half floats: the short
|
|
372
|
+
* mean's r and g; its b and the deviation's r; the deviation's g and b; the blend reduction and the
|
|
373
|
+
* inconsistency.
|
|
374
|
+
* @type {ShaderResourceDescriptor}
|
|
375
|
+
*/
|
|
376
|
+
export const PROBE_ESTIMATORS_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_estimators", WebGPUArray.from(vec4u), true);
|
|
377
|
+
|
|
243
378
|
/**
|
|
244
379
|
* A row of a listed probe's radiance map, projected: its irradiance SH, and its rays this update.
|
|
245
380
|
* @type {WebGPUStruct}
|
|
@@ -250,7 +385,11 @@ export const PROBE_PROJECTION_ROW_STRUCT = WebGPUStruct.from({
|
|
|
250
385
|
resolved: u32,
|
|
251
386
|
/** of them, the back faces */
|
|
252
387
|
back_faces: u32,
|
|
253
|
-
|
|
388
|
+
/** how far the update's samples fell from their texels' means, each in its own deviation, luminance, summed */
|
|
389
|
+
change: f32,
|
|
390
|
+
/** the texels that blended a sample */
|
|
391
|
+
blended: f32,
|
|
392
|
+
}, "ProbeProjectionRow").pack();
|
|
254
393
|
|
|
255
394
|
/**
|
|
256
395
|
* The listed probes' rows, n_r a probe, as the projection's rows write them.
|
|
@@ -303,11 +442,19 @@ export const PROBE_DEPTH_STORE_RESOURCE = ShaderResourceDescriptor.storageTextur
|
|
|
303
442
|
* fn probe_state_kind(state: u32) -> u32 // of the state's first word
|
|
304
443
|
* fn probe_state_updates(state: u32) -> u32
|
|
305
444
|
* fn probe_state(kind: u32, updates: u32) -> u32
|
|
445
|
+
* fn probe_clipmap_age_bucket(age: u32) -> u32 // the bucket of frames unwanted that eviction orders by
|
|
446
|
+
* fn probe_record_flags(back_face: f32, screen: bool, cascade: u32) -> u32
|
|
447
|
+
* fn probe_record_cascade(flags: u32) -> u32
|
|
448
|
+
* fn probe_record_sh_encode(sh: MetroL1) -> vec3<u32> // held to the half float's largest, ±65,504
|
|
449
|
+
* fn probe_record_sh_decode(sh: vec3<u32>) -> MetroL1
|
|
306
450
|
* fn probe_clipmap_offset_encode(offset: vec3<f32>, spacing: f32) -> u32 // the state's second word
|
|
307
451
|
* fn probe_clipmap_offset_decode(word: u32, spacing: f32) -> vec3<f32>
|
|
308
452
|
* fn probe_clipmap_maps_words(radiance_resolution: u32, depth_resolution: u32) -> u32 // a listed probe's, in probe_maps
|
|
309
453
|
* ```
|
|
310
454
|
*
|
|
455
|
+
* An age's bucket is its count of binary digits: 0 frames the first, 1 the second, 2 and 3 the third, and
|
|
456
|
+
* the last everything from 2^(`PROBE_AGE_BUCKETS` − 2) frames on.
|
|
457
|
+
*
|
|
311
458
|
* The offset's fields are of `PROBE_RELOCATION_LIMIT` of the spacing, 511 steps each way: under a
|
|
312
459
|
* thousandth of the spacing apart, and zero at the lattice point.
|
|
313
460
|
*
|
|
@@ -326,6 +473,10 @@ const PROBE_STATE_DEAD = ${PROBE_STATE_DEAD}u;
|
|
|
326
473
|
const PROBE_COUNTER_FREE = ${PROBE_COUNTER_FREE}u;
|
|
327
474
|
const PROBE_COUNTER_STARVED = ${PROBE_COUNTER_STARVED}u;
|
|
328
475
|
const PROBE_COUNTER_PERIOD = ${PROBE_COUNTER_PERIOD}u;
|
|
476
|
+
const PROBE_COUNTER_WAITING = ${PROBE_COUNTER_WAITING}u;
|
|
477
|
+
const PROBE_COUNTER_EVICTED = ${PROBE_COUNTER_EVICTED}u;
|
|
478
|
+
const PROBE_COUNTER_AGES = ${PROBE_COUNTER_AGES}u;
|
|
479
|
+
const PROBE_AGE_BUCKETS = ${PROBE_AGE_BUCKETS}u;
|
|
329
480
|
|
|
330
481
|
const PROBE_DISPATCH_ACTIVE = ${PROBE_DISPATCH_ACTIVE}u;
|
|
331
482
|
const PROBE_DISPATCH_ADMIT = ${PROBE_DISPATCH_ADMIT}u;
|
|
@@ -334,10 +485,20 @@ const PROBE_DISPATCH_RAYS = ${PROBE_DISPATCH_RAYS}u;
|
|
|
334
485
|
const PROBE_DISPATCH_TEXELS = ${PROBE_DISPATCH_TEXELS}u;
|
|
335
486
|
const PROBE_DISPATCH_ROWS = ${PROBE_DISPATCH_ROWS}u;
|
|
336
487
|
const PROBE_DISPATCH_PUBLISH = ${PROBE_DISPATCH_PUBLISH}u;
|
|
488
|
+
const PROBE_DISPATCH_ORDER = ${PROBE_DISPATCH_ORDER}u;
|
|
489
|
+
const PROBE_ORDER_RUN = ${PROBE_ORDER_RUN}u;
|
|
337
490
|
|
|
338
491
|
const PROBE_RAY_KIND_MASK = ${PROBE_RAY_KIND_MASK}u;
|
|
492
|
+
const PROBE_RAY_NONE = ${PROBE_RAY_NONE}u;
|
|
339
493
|
const PROBE_RAY_BACK_FACE = ${PROBE_RAY_BACK_FACE}u;
|
|
340
494
|
const PROBE_RAY_CASCADE_SHIFT = ${PROBE_RAY_CASCADE_SHIFT}u;
|
|
495
|
+
const PROBE_RAY_CASCADE_MASK = ${PROBE_RAY_CASCADE_MASK}u;
|
|
496
|
+
const PROBE_RAY_PROBE_SHIFT = ${PROBE_RAY_PROBE_SHIFT}u;
|
|
497
|
+
|
|
498
|
+
const PROBE_WANTED_SCREEN = ${PROBE_WANTED_SCREEN}u;
|
|
499
|
+
|
|
500
|
+
const PROBE_RECORD_SCREEN = ${PROBE_RECORD_SCREEN}u;
|
|
501
|
+
const PROBE_RECORD_CASCADE_SHIFT = ${PROBE_RECORD_CASCADE_SHIFT}u;
|
|
341
502
|
|
|
342
503
|
const PROBE_THREAD_WORKGROUP_SIZE = ${PROBE_THREAD_WORKGROUP_SIZE}u;
|
|
343
504
|
const PROBE_BLEND_SKIRT = ${PROBE_BLEND_SKIRT}.0;
|
|
@@ -376,8 +537,36 @@ fn probe_state(kind: u32, updates: u32) -> u32 {
|
|
|
376
537
|
return kind | (updates << ${PROBE_STATE_UPDATES_SHIFT}u);
|
|
377
538
|
}
|
|
378
539
|
|
|
540
|
+
fn probe_clipmap_age_bucket(age: u32) -> u32 {
|
|
541
|
+
return min(32u - countLeadingZeros(age), PROBE_AGE_BUCKETS - 1u);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
fn probe_record_flags(back_face: f32, screen: bool, cascade: u32) -> u32 {
|
|
545
|
+
return (pack2x16unorm(vec2<f32>(back_face, 0.0)) & 0xFFFFu) | select(0u, PROBE_RECORD_SCREEN, screen) | (cascade << PROBE_RECORD_CASCADE_SHIFT);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
fn probe_record_cascade(flags: u32) -> u32 {
|
|
549
|
+
return flags >> PROBE_RECORD_CASCADE_SHIFT;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
fn probe_record_sh_encode(sh: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref}) -> vec3<u32> {
|
|
553
|
+
let y = clamp(sh.Y, vec4<f32>(-65504.0), vec4<f32>(65504.0));
|
|
554
|
+
let cocg = clamp(sh.CoCg, vec2<f32>(-65504.0), vec2<f32>(65504.0));
|
|
555
|
+
|
|
556
|
+
return vec3<u32>(pack2x16float(y.xy), pack2x16float(y.zw), pack2x16float(cocg));
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
fn probe_record_sh_decode(sh: vec3<u32>) -> ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref} {
|
|
560
|
+
var out: ${METRO_L1_IRRADIANCE_STRUCT.wgsl_ref};
|
|
561
|
+
|
|
562
|
+
out.Y = vec4<f32>(unpack2x16float(sh.x), unpack2x16float(sh.y));
|
|
563
|
+
out.CoCg = unpack2x16float(sh.z);
|
|
564
|
+
|
|
565
|
+
return out;
|
|
566
|
+
}
|
|
567
|
+
|
|
379
568
|
fn probe_clipmap_maps_words(radiance_resolution: u32, depth_resolution: u32) -> u32 {
|
|
380
|
-
return
|
|
569
|
+
return 4u * radiance_resolution * radiance_resolution + depth_resolution * depth_resolution;
|
|
381
570
|
}
|
|
382
571
|
|
|
383
572
|
fn probe_clipmap_offset_encode(offset: vec3<f32>, spacing: f32) -> u32 {
|
|
@@ -395,9 +584,53 @@ fn probe_clipmap_offset_decode(word: u32, spacing: f32) -> vec3<f32> {
|
|
|
395
584
|
}
|
|
396
585
|
`, [
|
|
397
586
|
PROBE_RECORD_STRUCT.declaration_chunk,
|
|
587
|
+
METRO_L1_IRRADIANCE_STRUCT.declaration_chunk,
|
|
398
588
|
chunk_mod_v3i,
|
|
399
589
|
]);
|
|
400
590
|
|
|
591
|
+
/**
|
|
592
|
+
* Where the frame's rays are, by listed probe (§8.6): the scan of each listed probe's count of rays this
|
|
593
|
+
* update, `probe_ray_sums`. A probe's rays follow one another, in the trace list's order.
|
|
594
|
+
*
|
|
595
|
+
* ```wgsl
|
|
596
|
+
* fn probe_clipmap_ray_probe(ray: u32) -> u32 // the listed probe the frame's ray is one of, by its place in the list; the list's count or more for none
|
|
597
|
+
* fn probe_clipmap_probe_rays(k: u32) -> vec2<u32> // the k-th listed probe's first ray, and how many it has
|
|
598
|
+
* ```
|
|
599
|
+
*
|
|
600
|
+
* @type {CodeChunk}
|
|
601
|
+
*/
|
|
602
|
+
export const chunk_probe_clipmap_ray_layout = CodeChunk.from(
|
|
603
|
+
//language=WGSL
|
|
604
|
+
`
|
|
605
|
+
fn probe_clipmap_ray_probe(ray: u32) -> u32 {
|
|
606
|
+
let listed = probe_ray_sums.count;
|
|
607
|
+
|
|
608
|
+
if (listed == 0u) {
|
|
609
|
+
return 0u;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// the first whose rays end past this one
|
|
613
|
+
return lower_bound_branchless(&probe_ray_sums.elements, ray + 1u, listed);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
fn probe_clipmap_probe_rays(k: u32) -> vec2<u32> {
|
|
617
|
+
let end = probe_ray_sums.elements[k];
|
|
618
|
+
|
|
619
|
+
var first = 0u;
|
|
620
|
+
|
|
621
|
+
// not a select, which reads both sides, k − 1 wrapping at the first
|
|
622
|
+
if (k > 0u) {
|
|
623
|
+
first = probe_ray_sums.elements[k - 1u];
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return vec2<u32>(first, end - first);
|
|
627
|
+
}
|
|
628
|
+
`, [
|
|
629
|
+
chunk_lower_bound_branchless,
|
|
630
|
+
]);
|
|
631
|
+
|
|
632
|
+
chunk_probe_clipmap_ray_layout.requireResource(PROBE_RAY_SUMS_READ_RESOURCE);
|
|
633
|
+
|
|
401
634
|
/**
|
|
402
635
|
* Which octahedral radiance texel a ray of an update is, and the way back (§8.6). An update casts R rays
|
|
403
636
|
* over the n_r² texels:
|
|
@@ -446,3 +679,196 @@ fn probe_clipmap_texel_ray(texel: u32, round: u32, updates: u32, rays: u32, texe
|
|
|
446
679
|
`, [
|
|
447
680
|
chunk_probe_clipmap,
|
|
448
681
|
]);
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* The STBN jitter of a ray in its texel (§8.6): the noise moved by the slot's hash so that neighbouring
|
|
685
|
+
* probes do not jitter alike, and a fresh sample for each update and each round of a texel's rays. The
|
|
686
|
+
* trace aims its ray by it, and the light pass picks the probes at its hit with it (§8.7).
|
|
687
|
+
*
|
|
688
|
+
* ```wgsl
|
|
689
|
+
* 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
|
|
690
|
+
* ```
|
|
691
|
+
*
|
|
692
|
+
* @type {CodeChunk}
|
|
693
|
+
*/
|
|
694
|
+
export const chunk_probe_clipmap_ray_jitter = CodeChunk.from(
|
|
695
|
+
//language=WGSL
|
|
696
|
+
`
|
|
697
|
+
fn probe_clipmap_ray_jitter(slot: u32, texel: u32, ray: u32, updates: u32, rays: u32, n: u32) -> vec2<f32> {
|
|
698
|
+
let texels = n * n;
|
|
699
|
+
let round = select(0u, ray / texels, rays >= texels);
|
|
700
|
+
let per_texel = max(rays / texels, 1u);
|
|
701
|
+
|
|
702
|
+
let scramble = hash_lowbias32(slot);
|
|
703
|
+
let noise_xy = vec2<u32>(texel % n, texel / n) + vec2<u32>(scramble & 127u, (scramble >> 7u) & 127u);
|
|
704
|
+
|
|
705
|
+
return stbn_sample_vec2(vec3<u32>(noise_xy, updates * per_texel + round));
|
|
706
|
+
}
|
|
707
|
+
`, [
|
|
708
|
+
chunk_hash_lowbias32,
|
|
709
|
+
chunk_stbn_sample_vec2,
|
|
710
|
+
]);
|
|
711
|
+
|
|
712
|
+
chunk_probe_clipmap_ray_jitter.requireResource(STBN_VEC2_RESOURCE);
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* Where a ray of an update starts (§8.6): a point of the ball of `PROBE_RAY_ORIGIN_JITTER` of the spacing
|
|
716
|
+
* around the probe, uniform in its volume, as Brick4's bake jitters its probes. The point is drawn from the
|
|
717
|
+
* probe's slot and the ray's direction as its record packs it, so every pass that puts a hit back together
|
|
718
|
+
* from `t` (shade, light, want hits) draws the same one. The trace's jitter moves the direction every
|
|
719
|
+
* update, and the point with it.
|
|
720
|
+
*
|
|
721
|
+
* ```wgsl
|
|
722
|
+
* fn probe_clipmap_ray_origin(probe: vec4<f32>, slot: u32, direction: u32) -> vec3<f32> // probe: its `probe_origins` entry; direction: as the ray's record packs it
|
|
723
|
+
* ```
|
|
724
|
+
*
|
|
725
|
+
* @type {CodeChunk}
|
|
726
|
+
*/
|
|
727
|
+
export const chunk_probe_clipmap_ray_origin = CodeChunk.from(
|
|
728
|
+
//language=WGSL
|
|
729
|
+
`
|
|
730
|
+
fn probe_clipmap_ray_origin(probe: vec4<f32>, slot: u32, direction: u32) -> vec3<f32> {
|
|
731
|
+
let hash = pcg3d(vec3<u32>(slot, direction, 0xBB67AE85u));
|
|
732
|
+
let uvw = vec3<f32>(hash_to_float01(hash.x), hash_to_float01(hash.y), hash_to_float01(hash.z));
|
|
733
|
+
|
|
734
|
+
return probe.xyz + ${PROBE_RAY_ORIGIN_JITTER} * probe.w * sphere_sample_volume(uvw);
|
|
735
|
+
}
|
|
736
|
+
`, [
|
|
737
|
+
chunk_pcg3d,
|
|
738
|
+
chunk_hash_to_float01,
|
|
739
|
+
chunk_sphere_sample_volume,
|
|
740
|
+
]);
|
|
741
|
+
|
|
742
|
+
/**
|
|
743
|
+
* The listed probes' guides, `probe_guide_words` a probe in list order, as the guide passes write them.
|
|
744
|
+
* @type {ShaderResourceDescriptor}
|
|
745
|
+
*/
|
|
746
|
+
export const PROBE_GUIDE_WRITE_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_guide", WebGPUArray.u32, true);
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* The listed probes' guides, as trace, accumulation and projection read them.
|
|
750
|
+
* @type {ShaderResourceDescriptor}
|
|
751
|
+
*/
|
|
752
|
+
export const PROBE_GUIDE_READ_RESOURCE = ShaderResourceDescriptor.storageBuffer("probe_guide", WebGPUArray.u32);
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* The guide's walk over a probe's octahedral texels, and the weights it walks (§8.6). A guided update
|
|
756
|
+
* gives each texel `R·(w + e)/W` rays: `w` is its weight, `e` the even share of the leftover, `W` the
|
|
757
|
+
* total. Its rays follow one another in the order of the walk. That order is the radiance map's rows,
|
|
758
|
+
* from the corner the update's count names (`updates mod 4` mirrors x, y, or both), and it is its own
|
|
759
|
+
* inverse.
|
|
760
|
+
*
|
|
761
|
+
* A probe's first n_r²/R updates are uniform, so that together they reach every texel (Enshrouded gives a new
|
|
762
|
+
* probe its most rays for the same reason): the guide would weigh a texel no ray has reached as dark.
|
|
763
|
+
*
|
|
764
|
+
* A DEAD probe's updates are all uniform. Readers weigh it at nothing, so its light is not worth guiding.
|
|
765
|
+
* Its updates exist to reclassify it, and only uniform rays do that (§8.4); guided ones would leave it
|
|
766
|
+
* dead for `PROBE_UNIFORM_PERIOD` of its already rare updates.
|
|
767
|
+
*
|
|
768
|
+
* - A texel's weight is its share of the probe's luminance in units of 1/`PROBE_GUIDE_SCALE`, held to
|
|
769
|
+
* `(PROBE_TEXEL_RAYS − 2 − R/n_r²)/R`. With the even share added, that leaves a texel under
|
|
770
|
+
* `PROBE_TEXEL_RAYS` rays. What the hold takes off, and what flooring the weights leaves over, is
|
|
771
|
+
* spread evenly over every texel. A dark probe's rays are therefore an even, stratified spread.
|
|
772
|
+
* - The walk position `p` starts at ray `⌈R·Σ_{q<p}(w_q + e)/W − φ⌉`, `φ` being the update's phase in
|
|
773
|
+
* [0, 1). That is systematic sampling: every texel takes ⌊its share⌋ or ⌈its share⌉ rays.
|
|
774
|
+
* - A guide's words (`probe_clipmap_guide_words`, by offset from the probe's): the first rays by walk
|
|
775
|
+
* position at 0; the weights by texel at n_r²; the row luminances at 2·n_r²; the row weights at
|
|
776
|
+
* 2·n_r² + n_r; the total at 2·n_r² + 2·n_r, and the even share after it.
|
|
777
|
+
*
|
|
778
|
+
* ```wgsl
|
|
779
|
+
* fn probe_clipmap_guided(state: u32, period: u32, rays: u32, texels: u32) -> bool // the state's first word: the update's rays follow the guide
|
|
780
|
+
* fn probe_clipmap_guide_words(n: u32) -> u32
|
|
781
|
+
* fn probe_clipmap_guide_texel(position: u32, updates: u32, n: u32) -> u32 // and the other way: the walk is its own inverse
|
|
782
|
+
* fn probe_clipmap_guide_luminance(radiance: vec3<f32>) -> f32
|
|
783
|
+
* fn probe_clipmap_guide_weight(luminance: f32, total: f32, rays: u32, texels: u32) -> u32
|
|
784
|
+
* fn probe_clipmap_guide_phase(slot: u32, updates: u32) -> f32
|
|
785
|
+
* fn probe_clipmap_guide_start(before: u32, total: u32, rays: u32, phase: f32) -> u32 // before: the weight walked before
|
|
786
|
+
* fn probe_clipmap_guide_rate(expected: f32, rays: u32, texels: u32, period: u32) -> f32 // the share of updates a texel takes rays in
|
|
787
|
+
* ```
|
|
788
|
+
*
|
|
789
|
+
* @type {CodeChunk}
|
|
790
|
+
*/
|
|
791
|
+
export const chunk_probe_clipmap_guide = CodeChunk.from(
|
|
792
|
+
//language=WGSL
|
|
793
|
+
`
|
|
794
|
+
const PROBE_GUIDE_SCALE = ${PROBE_GUIDE_SCALE}u;
|
|
795
|
+
const PROBE_TEXEL_RAYS = ${PROBE_TEXEL_RAYS}u;
|
|
796
|
+
|
|
797
|
+
fn probe_clipmap_guided(state: u32, period: u32, rays: u32, texels: u32) -> bool {
|
|
798
|
+
let updates = probe_state_updates(state);
|
|
799
|
+
|
|
800
|
+
return probe_state_kind(state) != PROBE_STATE_DEAD && updates >= texels / rays && updates % period != 0u;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
fn probe_clipmap_guide_words(n: u32) -> u32 {
|
|
804
|
+
return 2u * n * n + 2u * n + 2u;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
fn probe_clipmap_guide_texel(position: u32, updates: u32, n: u32) -> u32 {
|
|
808
|
+
let corner = updates % 4u;
|
|
809
|
+
let column = position % n;
|
|
810
|
+
let row = position / n;
|
|
811
|
+
let x = select(column, n - 1u - column, (corner & 1u) != 0u);
|
|
812
|
+
let y = select(row, n - 1u - row, (corner & 2u) != 0u);
|
|
813
|
+
|
|
814
|
+
return y * n + x;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
fn probe_clipmap_guide_luminance(radiance: vec3<f32>) -> f32 {
|
|
818
|
+
return max(rgb_to_luminance(radiance), 0.0);
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
fn probe_clipmap_guide_weight(luminance: f32, total: f32, rays: u32, texels: u32) -> u32 {
|
|
822
|
+
if (total <= 0.0) {
|
|
823
|
+
return 0u;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
let hold = max(f32(PROBE_TEXEL_RAYS) - 2.0 - f32(rays) / f32(texels), 0.0) / f32(rays);
|
|
827
|
+
|
|
828
|
+
return u32(floor(min(luminance / total, hold) * f32(PROBE_GUIDE_SCALE)));
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
fn probe_clipmap_guide_phase(slot: u32, updates: u32) -> f32 {
|
|
832
|
+
return hash_to_float01(pcg3d(vec3<u32>(slot, updates, 0x6A09E667u)).x);
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
fn probe_clipmap_guide_start(before: u32, total: u32, rays: u32, phase: f32) -> u32 {
|
|
836
|
+
let at = ceil(f32(before) / f32(total) * f32(rays) - phase);
|
|
837
|
+
|
|
838
|
+
return u32(clamp(at, 0.0, f32(rays)));
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
fn probe_clipmap_guide_rate(expected: f32, rays: u32, texels: u32, period: u32) -> f32 {
|
|
842
|
+
let uniform = min(f32(rays) / f32(texels), 1.0);
|
|
843
|
+
let guided = min(expected, 1.0);
|
|
844
|
+
|
|
845
|
+
return (uniform + f32(period - 1u) * guided) / f32(period);
|
|
846
|
+
}
|
|
847
|
+
`, [
|
|
848
|
+
chunk_probe_clipmap,
|
|
849
|
+
chunk_rgb_to_luminance,
|
|
850
|
+
chunk_hash_to_float01,
|
|
851
|
+
chunk_pcg3d,
|
|
852
|
+
]);
|
|
853
|
+
|
|
854
|
+
/**
|
|
855
|
+
* The jitter of a guided update's ray in its texel. The first ray takes the texel's STBN jitter
|
|
856
|
+
* (`probe_clipmap_ray_jitter` at round 0). The rest rotate it by the R2 sequence, so a texel's rays
|
|
857
|
+
* spread over it the way a lattice does.
|
|
858
|
+
*
|
|
859
|
+
* ```wgsl
|
|
860
|
+
* fn probe_clipmap_guided_ray_jitter(slot: u32, texel: u32, round: u32, updates: u32, rays: u32, n: u32) -> vec2<f32> // round: the ray's place among its texel's
|
|
861
|
+
* ```
|
|
862
|
+
*
|
|
863
|
+
* @type {CodeChunk}
|
|
864
|
+
*/
|
|
865
|
+
export const chunk_probe_clipmap_guided_ray_jitter = CodeChunk.from(
|
|
866
|
+
//language=WGSL
|
|
867
|
+
`
|
|
868
|
+
fn probe_clipmap_guided_ray_jitter(slot: u32, texel: u32, round: u32, updates: u32, rays: u32, n: u32) -> vec2<f32> {
|
|
869
|
+
return fract(probe_clipmap_ray_jitter(slot, texel, 0u, updates, rays, n) + r2_canonical(round) - 0.5);
|
|
870
|
+
}
|
|
871
|
+
`, [
|
|
872
|
+
chunk_probe_clipmap_ray_jitter,
|
|
873
|
+
chunk_r2_canonical,
|
|
874
|
+
]);
|
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"}
|