@woosh/meep-engine 3.58.0 → 3.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +450 -43
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +156 -25
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +26 -5
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +35 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +2 -1
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +2 -1
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +5 -3
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_render_cost.js +8 -7
- package/src/generation/foliage/asset/TreeAsset.d.ts +17 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +20 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +10 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +57 -29
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +4 -2
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -1
- package/src/generation/foliage/asset/tree_lod_plan.js +12 -14
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +6 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +7 -0
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +6 -6
- package/src/generation/foliage/material/foliage_tile.js +3 -3
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +2 -2
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -7
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +85 -40
- package/src/generation/foliage/mesh/tree_clusters.d.ts +26 -5
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_clusters.js +52 -39
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +32 -54
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +157 -3
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +19 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +41 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2034
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +27 -56
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/renderer/Renderer.d.ts +3 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +94 -38
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +25 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +126 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +832 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +9 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +0 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +0 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +5 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +13 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +20 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +152 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +14 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +50 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +26 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +3 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +8 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +3 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +47 -5
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { MESH_SDF_BRICK_TEXEL_COUNT } from "../../../../geometry/sdf/MESH_SDF.js";
|
|
3
|
+
import { VGEO_MAX_CLUSTER_TRIANGLE_COUNT } from "../../../../geometry/virtual/format/cluster/VGEO_MAX_CLUSTER_TRIANGLE_COUNT.js";
|
|
4
|
+
import { VGEO_INSTANCE_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js";
|
|
5
|
+
import { VGEO_INSTANCE_WORDS } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js";
|
|
6
|
+
import { u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
7
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
The vgeo brick provider's layouts (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
|
|
11
|
+
|
|
12
|
+
A pair is a taken cell and a vgeo instance whose box reaches it. Its record is a cut's instance record
|
|
13
|
+
(VGEO_INSTANCE_OFFSET), so the camera cut's seed and descent run it unchanged; what a view keeps for its own
|
|
14
|
+
culls, the pair keeps for the box's.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The provider's settings, an immediate of each of its passes.
|
|
19
|
+
* @type {WebGPUStruct}
|
|
20
|
+
*/
|
|
21
|
+
export const VGEO_BRICK_SETTINGS = WebGPUStruct.from({
|
|
22
|
+
/** keys `brick_ring` holds, a power of two */
|
|
23
|
+
ring_capacity: u32,
|
|
24
|
+
/** cells a cascade's window has a side */
|
|
25
|
+
resolution: u32,
|
|
26
|
+
/** pair records the frame holds */
|
|
27
|
+
pair_capacity: u32,
|
|
28
|
+
/** waiting cells a waiting list holds */
|
|
29
|
+
wait_capacity: u32,
|
|
30
|
+
}, "VGeoBrickSettings");
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Where a pair record keeps the box it is cut against: the cell grown by the field's band, in the instance's
|
|
34
|
+
* object space, lower xyz then upper xyz, in the words a view's record keeps its frustum in.
|
|
35
|
+
* @type {number}
|
|
36
|
+
*/
|
|
37
|
+
export const VGEO_BRICK_PAIR_BOX = VGEO_INSTANCE_OFFSET.FRUSTUM;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Where a pair record keeps its taken cell: the first word a view's record leaves free.
|
|
41
|
+
* @type {number}
|
|
42
|
+
*/
|
|
43
|
+
export const VGEO_BRICK_PAIR_BUILD = VGEO_INSTANCE_OFFSET.DISTANCE_WEIGHT + 1;
|
|
44
|
+
|
|
45
|
+
assert.lessThan(VGEO_BRICK_PAIR_BUILD, VGEO_INSTANCE_WORDS, 'a pair record keeps its cell inside the record');
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Pair records a frame holds, for each cell of its take budget; past them, pairs are dropped and counted.
|
|
49
|
+
* @type {number}
|
|
50
|
+
*/
|
|
51
|
+
export const VGEO_BRICK_PAIRS_PER_CELL = 8;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Clusters a taken cell's list holds; past them, clusters are dropped and counted.
|
|
55
|
+
* @type {number}
|
|
56
|
+
*/
|
|
57
|
+
export const VGEO_BRICK_CELL_CLUSTERS = 64;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A waiting cell: its key, then what the first cluster of its cut that stood something in waits on, and what wants
|
|
61
|
+
* it. The page it waits on is `PAGE` of the geometry whose page lookup starts at `LOOKUP`, and `GROUP` is the group in
|
|
62
|
+
* that page. The want for that page goes through the page the cluster was found in: `SOURCE` is its row, `SOURCE_PAGE`
|
|
63
|
+
* its own page index in the geometry, `REF` the entry of its child table naming the page, and `ERROR` the cluster's
|
|
64
|
+
* projected error, as the want's priority (`vg_want`). A group held back carries no want, as in the cut, whose rule
|
|
65
|
+
* leaves a held verdict's `REF` and `ERROR` at zero: the clamp beside it wants the page that holds it back.
|
|
66
|
+
*/
|
|
67
|
+
export const VGEO_BRICK_WAIT_OFFSET = Object.freeze({
|
|
68
|
+
KEY: 0,
|
|
69
|
+
LOOKUP: 1,
|
|
70
|
+
PAGE: 2,
|
|
71
|
+
GROUP: 3,
|
|
72
|
+
SOURCE: 4,
|
|
73
|
+
SOURCE_PAGE: 5,
|
|
74
|
+
REF: 6,
|
|
75
|
+
ERROR: 7,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Words of a waiting cell.
|
|
80
|
+
* @type {number}
|
|
81
|
+
*/
|
|
82
|
+
export const VGEO_BRICK_WAIT_WORDS = 8;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* A taken cell's list: its header, then from `ENTRIES` a cluster's pair and meshlet row each. The header holds the
|
|
86
|
+
* clusters taken (a count that runs past what the list holds), how many of them stood in for a page or a group not
|
|
87
|
+
* there yet, and from `WAIT` the cell as a waiting cell's words ({@link VGEO_BRICK_WAIT_OFFSET}): its key, then the
|
|
88
|
+
* first stand-in's wait, which the distances copy onto the waiting list whole.
|
|
89
|
+
*/
|
|
90
|
+
export const VGEO_BRICK_CELL_OFFSET = Object.freeze({
|
|
91
|
+
COUNT: 0,
|
|
92
|
+
WAITS: 1,
|
|
93
|
+
WAIT: 2,
|
|
94
|
+
KEY: 2 + VGEO_BRICK_WAIT_OFFSET.KEY,
|
|
95
|
+
ENTRIES: 2 + VGEO_BRICK_WAIT_WORDS,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Words of a taken cell's list.
|
|
100
|
+
* @type {number}
|
|
101
|
+
*/
|
|
102
|
+
export const VGEO_BRICK_CELL_WORDS = VGEO_BRICK_CELL_OFFSET.ENTRIES + 2 * VGEO_BRICK_CELL_CLUSTERS;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Waiting cells the provider holds, for each cell of the take budget; past them, a cell that stood a cluster in is
|
|
106
|
+
* dropped and counted, and is not built again when its page arrives.
|
|
107
|
+
* @type {number}
|
|
108
|
+
*/
|
|
109
|
+
export const VGEO_BRICK_WAITS_PER_CELL = 4;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Triangles of a taken cell's cut that its distances are made from, in workgroup memory (§7.8, chosen): past
|
|
113
|
+
* them, triangles are dropped and counted, and a dropped triangle can leave a hole. A texel's distance is a loop
|
|
114
|
+
* over them.
|
|
115
|
+
* @type {number}
|
|
116
|
+
*/
|
|
117
|
+
export const VGEO_BRICK_CELL_TRIANGLES = 256;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Lanes of the distance pass, a workgroup a taken cell: a lane a triangle, of as many of the cell's clusters at a
|
|
121
|
+
* time as the lanes hold whole, then the cell's texels shared out evenly.
|
|
122
|
+
* @type {number}
|
|
123
|
+
*/
|
|
124
|
+
export const VGEO_BRICK_DISTANCE_WORKGROUP_SIZE = 2 * VGEO_MAX_CLUSTER_TRIANGLE_COUNT;
|
|
125
|
+
|
|
126
|
+
assert.equal(MESH_SDF_BRICK_TEXEL_COUNT % VGEO_BRICK_DISTANCE_WORKGROUP_SIZE, 0, 'the distance pass shares a cell\'s texels out evenly');
|
|
127
|
+
assert.lessThanOrEqual(VGEO_BRICK_DISTANCE_WORKGROUP_SIZE, 256, 'the distance pass\'s workgroup is within WebGPU\'s default invocation limit');
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Words of the provider's statistics, every one an atomic that accumulates: pairs dropped (the records were full,
|
|
131
|
+
* or the instance's transform flattens it), candidates and subtrees the gather's query dropped, triangles the
|
|
132
|
+
* distance pass dropped past {@link VGEO_BRICK_CELL_TRIANGLES}, and waiting cells dropped past the waiting list.
|
|
133
|
+
*/
|
|
134
|
+
export const VGEO_BRICK_STATISTIC_PAIRS_DROPPED = 0;
|
|
135
|
+
export const VGEO_BRICK_STATISTIC_CANDIDATES_DROPPED = 1;
|
|
136
|
+
export const VGEO_BRICK_STATISTIC_NODES_DROPPED = 2;
|
|
137
|
+
export const VGEO_BRICK_STATISTIC_TRIANGLES_DROPPED = 3;
|
|
138
|
+
export const VGEO_BRICK_STATISTIC_WAITS_DROPPED = 4;
|
|
139
|
+
export const VGEO_BRICK_STATISTIC_WORDS = 8;
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../GPUBrickClipmap.js").BrickProviderContext} BrickProviderContext
|
|
3
|
+
* @typedef {import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The world's bricks from virtual geometry, which has no cached field (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a
|
|
7
|
+
* {@link BrickProvider} like any plugin, which the probe clipmap GI runs after the mesh provider.
|
|
8
|
+
*
|
|
9
|
+
* Per taken cell, the vgeo instances in the SDF world whose boxes reach it are cut at a world error under half the
|
|
10
|
+
* cascade's voxel, within the cell grown by the field's band, by the camera cut's own descent. The gather writes
|
|
11
|
+
* their pair records as a cut's collect would; `graph_vgeo_cut_descent` runs the box cut,
|
|
12
|
+
* `shader_vgeo_brick_traverse`, which puts each cluster in the cut onto its cell's list. The cut is a
|
|
13
|
+
* {@link VGeoViewCut} of its own, so its wants reach the residency through its own feedback slot, ranked with the
|
|
14
|
+
* camera's, and its counters come back to it ({@link cut}'s `stats`). Then `shader_vgeo_brick_distance` takes each
|
|
15
|
+
* list's triangles near its cell and merges the cell's texels into the staging (contracts 1 to 3).
|
|
16
|
+
*
|
|
17
|
+
* A cell built while a cluster of its cut stood in for a page not resident, or a group not selectable, waits:
|
|
18
|
+
* each frame `shader_vgeo_brick_wait` queues it again once that page is resident and that group selectable
|
|
19
|
+
* (contract 6), so exactly the cells that stood something in are built again, once what they waited on arrived.
|
|
20
|
+
* Until then it wants the page again each frame, in the cut's slot, since a want lasts one reading.
|
|
21
|
+
*
|
|
22
|
+
* It reads the view's scene through the context: the TLAS over the mesh rows, the scene database, the geometries'
|
|
23
|
+
* rows, the materials, the meshlets and the scene's virtual geometry runtime. With no runtime, or none open this
|
|
24
|
+
* frame, it records nothing.
|
|
25
|
+
*/
|
|
26
|
+
export class VGeoBrickProvider {
|
|
27
|
+
/**
|
|
28
|
+
* @param {GPUDevice} device
|
|
29
|
+
*/
|
|
30
|
+
constructor(device: GPUDevice);
|
|
31
|
+
/**
|
|
32
|
+
* @returns {GPUBuffer}
|
|
33
|
+
*/
|
|
34
|
+
get statistics(): GPUBuffer;
|
|
35
|
+
/**
|
|
36
|
+
* The box cut, whose `stats` say what the last reading of its slot counted.
|
|
37
|
+
* @returns {VGeoViewCut}
|
|
38
|
+
*/
|
|
39
|
+
get cut(): VGeoViewCut;
|
|
40
|
+
/**
|
|
41
|
+
* The taken cells' lists of the frame last recorded, a resource of its graph, or -1 when it recorded none:
|
|
42
|
+
* `VGEO_BRICK_CELL_WORDS` words a taken cell, laid out as `VGEO_BRICK_CELL_OFFSET`. A count runs past what its
|
|
43
|
+
* list holds; read the least of the two.
|
|
44
|
+
* @returns {number}
|
|
45
|
+
*/
|
|
46
|
+
get cells(): number;
|
|
47
|
+
/**
|
|
48
|
+
* The waiting list the next recorded frame's wait reads: a count, then `VGEO_BRICK_WAIT_WORDS` words a cell, laid
|
|
49
|
+
* out as `VGEO_BRICK_WAIT_OFFSET`. The count runs past what the list holds. Undefined before the provider first
|
|
50
|
+
* records.
|
|
51
|
+
* @returns {GPUBuffer|undefined}
|
|
52
|
+
*/
|
|
53
|
+
get waiting(): any;
|
|
54
|
+
/**
|
|
55
|
+
* @param {FrameGraph} graph
|
|
56
|
+
* @param {BrickProviderContext} context
|
|
57
|
+
*/
|
|
58
|
+
graph_write_bricks(graph: FrameGraph, context: BrickProviderContext): void;
|
|
59
|
+
destroy(): void;
|
|
60
|
+
#private;
|
|
61
|
+
}
|
|
62
|
+
export type BrickProviderContext = import("../GPUBrickClipmap.js").BrickProviderContext;
|
|
63
|
+
export type FrameGraph = import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
64
|
+
import { VGeoViewCut } from "../../../../geometry/virtual/runtime/VGeoViewCut.js";
|
|
65
|
+
//# sourceMappingURL=VGeoBrickProvider.d.ts.map
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoBrickProvider.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js"],"names":[],"mappings":"AA0BA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IA6CI;;OAEG;IACH,+BAWC;IAED;;OAEG;IACH,4BAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;;OAKG;IACH,oBAEC;IAED;;;;;OAKG;IACH,mBAEC;IAED;;;OAGG;IACH,0BAHW,UAAU,WACV,oBAAoB,QAuH9B;IA4GD,gBAcC;;CACJ;mCA7WY,OAAO,uBAAuB,EAAE,oBAAoB;yBACpD,OAAO,oEAAoE,EAAE,UAAU;4BAtBxE,qDAAqD"}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { BufferDescriptor } from "../../../../../descriptor/buffer/BufferDescriptor.js";
|
|
3
|
+
import { BufferResourceDescriptor } from "../../../../../device/graph/BufferResourceDescriptor.js";
|
|
4
|
+
import { graph_vgeo_cut_descent } from "../../../../geometry/virtual/runtime/graph_vgeo_cut_descent.js";
|
|
5
|
+
import { graph_build_indirect_dispatch_command } from "../../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
6
|
+
import { VGEO_INSTANCE_WORDS } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js";
|
|
7
|
+
import { VGeoViewCut } from "../../../../geometry/virtual/runtime/VGeoViewCut.js";
|
|
8
|
+
import {
|
|
9
|
+
graph_prefix_scan_csdldf,
|
|
10
|
+
prefix_scan_csdldf_output_descriptor
|
|
11
|
+
} from "../../../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
|
|
12
|
+
import { graph_create_buffer } from "../../../../shader/graph/graph_create_buffer.js";
|
|
13
|
+
import { graph_import_buffer } from "../../../../shader/graph/graph_import_buffer.js";
|
|
14
|
+
import { BRICK_TAKE_CELL_DISPATCH } from "../BRICK_CLIPMAP.js";
|
|
15
|
+
import { shader_vgeo_brick_distance } from "./shader_vgeo_brick_distance.js";
|
|
16
|
+
import { shader_vgeo_brick_gather } from "./shader_vgeo_brick_gather.js";
|
|
17
|
+
import { shader_vgeo_brick_traverse } from "./shader_vgeo_brick_traverse.js";
|
|
18
|
+
import { shader_vgeo_brick_wait, VGEO_BRICK_WAIT_WORKGROUP_SIZE } from "./shader_vgeo_brick_wait.js";
|
|
19
|
+
import {
|
|
20
|
+
VGEO_BRICK_CELL_WORDS,
|
|
21
|
+
VGEO_BRICK_PAIRS_PER_CELL,
|
|
22
|
+
VGEO_BRICK_STATISTIC_WORDS,
|
|
23
|
+
VGEO_BRICK_WAIT_WORDS,
|
|
24
|
+
VGEO_BRICK_WAITS_PER_CELL
|
|
25
|
+
} from "./VGEO_BRICK.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {import("../GPUBrickClipmap.js").BrickProviderContext} BrickProviderContext
|
|
29
|
+
* @typedef {import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The world's bricks from virtual geometry, which has no cached field (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a
|
|
34
|
+
* {@link BrickProvider} like any plugin, which the probe clipmap GI runs after the mesh provider.
|
|
35
|
+
*
|
|
36
|
+
* Per taken cell, the vgeo instances in the SDF world whose boxes reach it are cut at a world error under half the
|
|
37
|
+
* cascade's voxel, within the cell grown by the field's band, by the camera cut's own descent. The gather writes
|
|
38
|
+
* their pair records as a cut's collect would; `graph_vgeo_cut_descent` runs the box cut,
|
|
39
|
+
* `shader_vgeo_brick_traverse`, which puts each cluster in the cut onto its cell's list. The cut is a
|
|
40
|
+
* {@link VGeoViewCut} of its own, so its wants reach the residency through its own feedback slot, ranked with the
|
|
41
|
+
* camera's, and its counters come back to it ({@link cut}'s `stats`). Then `shader_vgeo_brick_distance` takes each
|
|
42
|
+
* list's triangles near its cell and merges the cell's texels into the staging (contracts 1 to 3).
|
|
43
|
+
*
|
|
44
|
+
* A cell built while a cluster of its cut stood in for a page not resident, or a group not selectable, waits:
|
|
45
|
+
* each frame `shader_vgeo_brick_wait` queues it again once that page is resident and that group selectable
|
|
46
|
+
* (contract 6), so exactly the cells that stood something in are built again, once what they waited on arrived.
|
|
47
|
+
* Until then it wants the page again each frame, in the cut's slot, since a want lasts one reading.
|
|
48
|
+
*
|
|
49
|
+
* It reads the view's scene through the context: the TLAS over the mesh rows, the scene database, the geometries'
|
|
50
|
+
* rows, the materials, the meshlets and the scene's virtual geometry runtime. With no runtime, or none open this
|
|
51
|
+
* frame, it records nothing.
|
|
52
|
+
*/
|
|
53
|
+
export class VGeoBrickProvider {
|
|
54
|
+
/** @type {GPUDevice} */
|
|
55
|
+
#device;
|
|
56
|
+
|
|
57
|
+
/** @type {VGeoViewCut} */
|
|
58
|
+
#cut;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Counts that accumulate: pairs dropped, and candidates and subtrees the gather dropped
|
|
62
|
+
* (`VGEO_BRICK_STATISTIC_*`).
|
|
63
|
+
* @type {GPUBuffer}
|
|
64
|
+
*/
|
|
65
|
+
#statistics;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The two waiting lists: the one the next frame's wait reads, `#waiting_read`, and the one it keeps onto, which the
|
|
69
|
+
* distance pass adds its own to. They trade places each frame the provider records.
|
|
70
|
+
* @type {GPUBuffer[]}
|
|
71
|
+
*/
|
|
72
|
+
#waiting = [];
|
|
73
|
+
#waiting_read = 0;
|
|
74
|
+
#waiting_capacity = 0;
|
|
75
|
+
|
|
76
|
+
#settings = { ring_capacity: 0, resolution: 0, pair_capacity: 0, wait_capacity: 0 };
|
|
77
|
+
#wait_data = { command: -1, waiting_in: -1, waiting: -1, feedback: -1, state: -1 };
|
|
78
|
+
#wait_bindings = {};
|
|
79
|
+
#gather_data = { take: -1, instances: -1, claim_widths: -1, cells: -1 };
|
|
80
|
+
#gather_bindings = {};
|
|
81
|
+
#distance_data = { command: -1, filled: -1, cells: -1, instances: -1, waiting: -1, staging: -1 };
|
|
82
|
+
#distance_bindings = {};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The taken cells' lists as the last recorded frame's cut left them, or -1.
|
|
86
|
+
* @type {number}
|
|
87
|
+
*/
|
|
88
|
+
#cells = -1;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The context of the frame being recorded, as its passes execute.
|
|
92
|
+
* @type {BrickProviderContext|null}
|
|
93
|
+
*/
|
|
94
|
+
#context = null;
|
|
95
|
+
|
|
96
|
+
#destroyed = false;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {GPUDevice} device
|
|
100
|
+
*/
|
|
101
|
+
constructor(device) {
|
|
102
|
+
assert.defined(device, 'device');
|
|
103
|
+
|
|
104
|
+
this.#device = device;
|
|
105
|
+
this.#cut = new VGeoViewCut({ device, label: 'probe clipmap vgeo bricks' });
|
|
106
|
+
|
|
107
|
+
this.#statistics = device.createBuffer(BufferDescriptor.fromJSON({
|
|
108
|
+
label: 'Probe clipmap / vgeo brick statistics',
|
|
109
|
+
size: 4 * VGEO_BRICK_STATISTIC_WORDS,
|
|
110
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @returns {GPUBuffer}
|
|
116
|
+
*/
|
|
117
|
+
get statistics() {
|
|
118
|
+
return this.#statistics;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The box cut, whose `stats` say what the last reading of its slot counted.
|
|
123
|
+
* @returns {VGeoViewCut}
|
|
124
|
+
*/
|
|
125
|
+
get cut() {
|
|
126
|
+
return this.#cut;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The taken cells' lists of the frame last recorded, a resource of its graph, or -1 when it recorded none:
|
|
131
|
+
* `VGEO_BRICK_CELL_WORDS` words a taken cell, laid out as `VGEO_BRICK_CELL_OFFSET`. A count runs past what its
|
|
132
|
+
* list holds; read the least of the two.
|
|
133
|
+
* @returns {number}
|
|
134
|
+
*/
|
|
135
|
+
get cells() {
|
|
136
|
+
return this.#cells;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* The waiting list the next recorded frame's wait reads: a count, then `VGEO_BRICK_WAIT_WORDS` words a cell, laid
|
|
141
|
+
* out as `VGEO_BRICK_WAIT_OFFSET`. The count runs past what the list holds. Undefined before the provider first
|
|
142
|
+
* records.
|
|
143
|
+
* @returns {GPUBuffer|undefined}
|
|
144
|
+
*/
|
|
145
|
+
get waiting() {
|
|
146
|
+
return this.#waiting[this.#waiting_read];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @param {FrameGraph} graph
|
|
151
|
+
* @param {BrickProviderContext} context
|
|
152
|
+
*/
|
|
153
|
+
graph_write_bricks(graph, context) {
|
|
154
|
+
assert.notOk(this.#destroyed, 'destroyed');
|
|
155
|
+
assert.defined(context.scene, 'context.scene');
|
|
156
|
+
|
|
157
|
+
this.#cells = -1;
|
|
158
|
+
|
|
159
|
+
const runtime = context.scene.virtual_geometry;
|
|
160
|
+
|
|
161
|
+
if (runtime === undefined || !runtime.frame_open) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const pair_capacity = context.budget * VGEO_BRICK_PAIRS_PER_CELL;
|
|
166
|
+
|
|
167
|
+
// this frame's slot for the cut, and its params: a τ of 1, since its records carry the error's own scale
|
|
168
|
+
const slot = runtime.slot_of(this.#cut);
|
|
169
|
+
|
|
170
|
+
this.#cut.write_params({ runtime, slot, tau: 1 });
|
|
171
|
+
|
|
172
|
+
const wait_capacity = context.budget * VGEO_BRICK_WAITS_PER_CELL;
|
|
173
|
+
|
|
174
|
+
this.#ensure_waiting(wait_capacity);
|
|
175
|
+
|
|
176
|
+
this.#settings.ring_capacity = context.ring_capacity;
|
|
177
|
+
this.#settings.resolution = context.resolution;
|
|
178
|
+
this.#settings.pair_capacity = pair_capacity;
|
|
179
|
+
this.#settings.wait_capacity = wait_capacity;
|
|
180
|
+
this.#context = context;
|
|
181
|
+
|
|
182
|
+
// ----- the wait: the cells the last frame left waiting, queued again once what they waited on is there -----
|
|
183
|
+
|
|
184
|
+
const waiting_in = graph_import_buffer(graph, this.#waiting[this.#waiting_read], "vgeo brick waiting");
|
|
185
|
+
const waiting_out = graph_import_buffer(graph, this.#waiting[1 - this.#waiting_read], "vgeo brick waiting next");
|
|
186
|
+
|
|
187
|
+
this.#waiting_read = 1 - this.#waiting_read;
|
|
188
|
+
|
|
189
|
+
const wait_command = graph_build_indirect_dispatch_command(graph, waiting_in, VGEO_BRICK_WAIT_WORKGROUP_SIZE, true);
|
|
190
|
+
|
|
191
|
+
// the frame's feedback, imported first: the first graph of a frame to import it records its clear there
|
|
192
|
+
const feedback = runtime.feedback_in(graph);
|
|
193
|
+
|
|
194
|
+
const wait_data = this.#wait_data;
|
|
195
|
+
const wait = graph.add("Brick Clipmap VGeo Wait", wait_data, this.#execute_wait);
|
|
196
|
+
|
|
197
|
+
wait_data.command = wait.read(wait_command);
|
|
198
|
+
wait_data.waiting_in = wait.read(waiting_in);
|
|
199
|
+
wait_data.waiting = wait.write(waiting_out);
|
|
200
|
+
|
|
201
|
+
// it wants the pages its cells wait on, in the cut's slot of the frame's feedback, ahead of the cut's own wants
|
|
202
|
+
wait_data.feedback = wait.write(feedback);
|
|
203
|
+
runtime.publish_feedback(graph, wait_data.feedback);
|
|
204
|
+
|
|
205
|
+
// it queues cells: what writes the queue after it comes after it
|
|
206
|
+
wait_data.state = wait.write(context.state);
|
|
207
|
+
context.state = wait_data.state;
|
|
208
|
+
|
|
209
|
+
// ----- gather: a pair record for each vgeo instance whose box reaches a taken cell -----
|
|
210
|
+
|
|
211
|
+
const data = this.#gather_data;
|
|
212
|
+
const gather = graph.add("Brick Clipmap VGeo Gather", data, this.#execute_gather);
|
|
213
|
+
|
|
214
|
+
data.take = gather.read(context.take);
|
|
215
|
+
data.instances = gather.create("vgeo brick pairs", BufferResourceDescriptor.from(
|
|
216
|
+
pair_capacity * VGEO_INSTANCE_WORDS * 4, GPUBufferUsage.STORAGE
|
|
217
|
+
));
|
|
218
|
+
data.claim_widths = gather.create("vgeo brick claim widths", BufferResourceDescriptor.from(
|
|
219
|
+
16 + pair_capacity * 4, GPUBufferUsage.STORAGE, 0, 16
|
|
220
|
+
));
|
|
221
|
+
data.cells = gather.create("vgeo brick cells", BufferResourceDescriptor.from(
|
|
222
|
+
context.budget * VGEO_BRICK_CELL_WORDS * 4, GPUBufferUsage.STORAGE
|
|
223
|
+
));
|
|
224
|
+
|
|
225
|
+
// ----- the cut: the pairs' claim widths scanned into bases, then the camera cut's own descent -----
|
|
226
|
+
|
|
227
|
+
const prefix_sums = graph_prefix_scan_csdldf({
|
|
228
|
+
graph,
|
|
229
|
+
input: data.claim_widths,
|
|
230
|
+
output: graph_create_buffer(graph, "vgeo brick claim offsets", prefix_scan_csdldf_output_descriptor(pair_capacity)),
|
|
231
|
+
element_max_count: pair_capacity,
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// the cells the cut puts a cluster on the list of, each once: what the distances follow
|
|
235
|
+
const filled = graph_create_buffer(graph, "vgeo brick filled", BufferResourceDescriptor.from(
|
|
236
|
+
16 + context.budget * 4, GPUBufferUsage.STORAGE, 0, 16
|
|
237
|
+
));
|
|
238
|
+
|
|
239
|
+
const descent = graph_vgeo_cut_descent({
|
|
240
|
+
graph,
|
|
241
|
+
runtime,
|
|
242
|
+
cut: this.#cut,
|
|
243
|
+
instances: data.instances,
|
|
244
|
+
prefix_sums,
|
|
245
|
+
feedback: runtime.feedback_in(graph),
|
|
246
|
+
traverse: shader_vgeo_brick_traverse,
|
|
247
|
+
outputs: { vgeo_brick_cells: data.cells, vgeo_brick_filled: filled },
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
runtime.publish_feedback(graph, descent.feedback);
|
|
251
|
+
|
|
252
|
+
this.#cells = descent.outputs.vgeo_brick_cells;
|
|
253
|
+
|
|
254
|
+
// ----- the distances: a workgroup a filled cell, its list's triangles near it, its texels merged -----
|
|
255
|
+
|
|
256
|
+
const command = graph_build_indirect_dispatch_command(graph, descent.outputs.vgeo_brick_filled, 1, true);
|
|
257
|
+
|
|
258
|
+
const distance_data = this.#distance_data;
|
|
259
|
+
const distance = graph.add("Brick Clipmap VGeo Distance", distance_data, this.#execute_distance);
|
|
260
|
+
|
|
261
|
+
distance_data.command = distance.read(command);
|
|
262
|
+
distance_data.filled = distance.read(descent.outputs.vgeo_brick_filled);
|
|
263
|
+
distance_data.cells = distance.read(this.#cells);
|
|
264
|
+
distance_data.instances = distance.read(descent.instances);
|
|
265
|
+
distance_data.waiting = distance.write(wait_data.waiting);
|
|
266
|
+
distance_data.staging = distance.write(context.staging);
|
|
267
|
+
|
|
268
|
+
// the next provider and the store come after this one's merge
|
|
269
|
+
context.staging = distance_data.staging;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
#execute_gather = (data, resources, execution) => {
|
|
273
|
+
const context = this.#context;
|
|
274
|
+
const scene = context.scene;
|
|
275
|
+
const take = resources.get(data.take);
|
|
276
|
+
const b = this.#gather_bindings;
|
|
277
|
+
|
|
278
|
+
b.settings = this.#settings;
|
|
279
|
+
b.brick_take = take;
|
|
280
|
+
b.brick_ring = context.ring;
|
|
281
|
+
b.brick_levels = context.levels;
|
|
282
|
+
b.vgeo_brick_statistics = this.#statistics;
|
|
283
|
+
b.tlas = scene.tlas.buffer;
|
|
284
|
+
b.scene_database = scene.scene_database_buffer;
|
|
285
|
+
b.geometries = scene.geometries.buffer_metadata;
|
|
286
|
+
b.vg_geometries = scene.virtual_geometry.pool.buffer_geometries;
|
|
287
|
+
b.instances = resources.get(data.instances);
|
|
288
|
+
b.claim_widths = resources.get(data.claim_widths);
|
|
289
|
+
b.vgeo_brick_cells = resources.get(data.cells);
|
|
290
|
+
|
|
291
|
+
shader_vgeo_brick_gather.dispatchIndirect({
|
|
292
|
+
encoder: execution.encoder,
|
|
293
|
+
command: take,
|
|
294
|
+
command_offset: 4 * BRICK_TAKE_CELL_DISPATCH,
|
|
295
|
+
bindings: b,
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
#execute_distance = (data, resources, execution) => {
|
|
300
|
+
const context = this.#context;
|
|
301
|
+
const scene = context.scene;
|
|
302
|
+
const meshlets = scene.geometries.meshlets;
|
|
303
|
+
const b = this.#distance_bindings;
|
|
304
|
+
|
|
305
|
+
b.settings = this.#settings;
|
|
306
|
+
b.brick_staging = resources.get(data.staging);
|
|
307
|
+
b.brick_levels = context.levels;
|
|
308
|
+
b.vgeo_brick_statistics = this.#statistics;
|
|
309
|
+
b.vgeo_brick_filled = resources.get(data.filled);
|
|
310
|
+
b.vgeo_brick_cells = resources.get(data.cells);
|
|
311
|
+
b.vgeo_brick_waiting = resources.get(data.waiting);
|
|
312
|
+
b.instances = resources.get(data.instances);
|
|
313
|
+
b.scene_database = scene.scene_database_buffer;
|
|
314
|
+
b.materials = scene.materials.metadata_table.buffer;
|
|
315
|
+
b.meshlet_metadata = meshlets.buffer_metadata;
|
|
316
|
+
b.meshlet_data = meshlets.buffer_data;
|
|
317
|
+
|
|
318
|
+
shader_vgeo_brick_distance.dispatchIndirect({
|
|
319
|
+
encoder: execution.encoder,
|
|
320
|
+
command: resources.get(data.command),
|
|
321
|
+
command_offset: 0,
|
|
322
|
+
bindings: b,
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
#execute_wait = (data, resources, execution) => {
|
|
327
|
+
const context = this.#context;
|
|
328
|
+
const pool = context.scene.virtual_geometry.pool;
|
|
329
|
+
const waiting = resources.get(data.waiting);
|
|
330
|
+
const b = this.#wait_bindings;
|
|
331
|
+
|
|
332
|
+
// this frame's list starts empty: the wait keeps its cells onto it, then the distances add theirs
|
|
333
|
+
execution.encoder.clearBuffer(waiting, 0, 16);
|
|
334
|
+
|
|
335
|
+
b.settings = this.#settings;
|
|
336
|
+
b.params = this.#cut.params_buffer;
|
|
337
|
+
b.vg_lookup = pool.buffer_lookup;
|
|
338
|
+
b.vg_arena = pool.buffer_arena;
|
|
339
|
+
b.feedback = resources.get(data.feedback);
|
|
340
|
+
b.vg_want_stamps = pool.buffer_want_stamps;
|
|
341
|
+
b.vgeo_brick_waiting_in = resources.get(data.waiting_in);
|
|
342
|
+
b.vgeo_brick_waiting = waiting;
|
|
343
|
+
b.brick_state = resources.get(data.state);
|
|
344
|
+
b.brick_ring = context.ring;
|
|
345
|
+
b.brick_pending = context.pending;
|
|
346
|
+
|
|
347
|
+
shader_vgeo_brick_wait.dispatchIndirect({
|
|
348
|
+
encoder: execution.encoder,
|
|
349
|
+
command: resources.get(data.command),
|
|
350
|
+
command_offset: 0,
|
|
351
|
+
bindings: b,
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Waiting lists of `capacity` cells each, made again when the capacity changes. A list made again holds no cell:
|
|
357
|
+
* those that waited are built again only as anything else queues them.
|
|
358
|
+
* @param {number} capacity
|
|
359
|
+
*/
|
|
360
|
+
#ensure_waiting(capacity) {
|
|
361
|
+
if (capacity === this.#waiting_capacity) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
for (const list of this.#waiting) {
|
|
366
|
+
list.destroy();
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
this.#waiting = [0, 1].map(i => this.#device.createBuffer(BufferDescriptor.fromJSON({
|
|
370
|
+
label: `Probe clipmap / vgeo brick waiting ${i}`,
|
|
371
|
+
size: 16 + 4 * VGEO_BRICK_WAIT_WORDS * capacity,
|
|
372
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
|
|
373
|
+
})));
|
|
374
|
+
this.#waiting_read = 0;
|
|
375
|
+
this.#waiting_capacity = capacity;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
destroy() {
|
|
379
|
+
if (this.#destroyed) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
this.#destroyed = true;
|
|
384
|
+
this.#statistics.destroy();
|
|
385
|
+
this.#cut.destroy();
|
|
386
|
+
|
|
387
|
+
for (const list of this.#waiting) {
|
|
388
|
+
list.destroy();
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
this.#waiting = [];
|
|
392
|
+
}
|
|
393
|
+
}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A pair record's box ({@link VGEO_BRICK_PAIR_BOX}) as `vgeo_brick_pair` writes it: the taken cell grown by the
|
|
3
|
+
* field's band, in the instance's object space (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
|
|
4
|
+
*
|
|
5
|
+
* ```wgsl
|
|
6
|
+
* fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32>
|
|
7
|
+
* fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32>
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* `pair_base` is the record's first word. Requires the importing shader to declare `instances`, the pair records,
|
|
11
|
+
* as `array<u32>`.
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_vgeo_brick_box: CodeChunk;
|
|
16
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
17
|
+
//# sourceMappingURL=chunk_vgeo_brick_box.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_vgeo_brick_box.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,mCAFU,SAAS,CAoBhB;0BAnCuB,0CAA0C"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { VGEO_BRICK_PAIR_BOX } from "./VGEO_BRICK.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A pair record's box ({@link VGEO_BRICK_PAIR_BOX}) as `vgeo_brick_pair` writes it: the taken cell grown by the
|
|
6
|
+
* field's band, in the instance's object space (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
|
|
7
|
+
*
|
|
8
|
+
* ```wgsl
|
|
9
|
+
* fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32>
|
|
10
|
+
* fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32>
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* `pair_base` is the record's first word. Requires the importing shader to declare `instances`, the pair records,
|
|
14
|
+
* as `array<u32>`.
|
|
15
|
+
*
|
|
16
|
+
* @type {CodeChunk}
|
|
17
|
+
*/
|
|
18
|
+
export const chunk_vgeo_brick_box = CodeChunk.from(
|
|
19
|
+
//language=WGSL
|
|
20
|
+
`
|
|
21
|
+
fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32> {
|
|
22
|
+
return vec3<f32>(
|
|
23
|
+
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX}u]),
|
|
24
|
+
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 1}u]),
|
|
25
|
+
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 2}u])
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32> {
|
|
30
|
+
return vec3<f32>(
|
|
31
|
+
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 3}u]),
|
|
32
|
+
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 4}u]),
|
|
33
|
+
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 5}u])
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
`);
|