@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.
Files changed (609) hide show
  1. package/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
  2. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  3. package/editor/particles/effect/ParticleEffectDocument.js +450 -43
  4. package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
  5. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
  6. package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
  7. package/editor/particles/effect/make_starter_particle_effect.js +17 -17
  8. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
  9. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  10. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
  11. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
  12. package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
  13. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
  14. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  15. package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
  16. package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
  17. package/editor/view/particles/effect/particle-editor.css +77 -68
  18. package/package.json +1 -1
  19. package/src/engine/Engine.d.ts.map +1 -1
  20. package/src/engine/Engine.js +2 -2
  21. package/src/engine/ecs/EntityManager.d.ts +29 -5
  22. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  23. package/src/engine/ecs/EntityManager.js +37 -1
  24. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  25. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
  26. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
  27. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
  28. package/src/engine/graphics/ecs/particles/ParticleEffect.js +156 -25
  29. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
  30. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
  31. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
  32. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
  33. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
  34. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
  35. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
  36. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
  37. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
  38. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  39. package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
  40. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
  41. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
  42. package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
  43. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
  44. package/src/engine/graphics/trail/tube/TubeX.js +5 -3
  45. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
  46. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
  47. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  50. package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
  51. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
  52. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
  53. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  54. package/src/generation/foliage/FOLIAGE_DESIGN.md +26 -5
  55. package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +35 -0
  56. package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +2 -1
  57. package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
  58. package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
  59. package/src/generation/foliage/analysis/tree_crown_opacity.js +2 -1
  60. package/src/generation/foliage/analysis/tree_render_cost.d.ts +5 -3
  61. package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -1
  62. package/src/generation/foliage/analysis/tree_render_cost.js +8 -7
  63. package/src/generation/foliage/asset/TreeAsset.d.ts +17 -0
  64. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
  65. package/src/generation/foliage/asset/TreeAsset.js +20 -0
  66. package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
  67. package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
  68. package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
  69. package/src/generation/foliage/asset/generate_tree.d.ts +10 -0
  70. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
  71. package/src/generation/foliage/asset/generate_tree.js +57 -29
  72. package/src/generation/foliage/asset/place_tree.d.ts +2 -1
  73. package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
  74. package/src/generation/foliage/asset/place_tree.js +2 -1
  75. package/src/generation/foliage/asset/tree_lod_plan.d.ts +4 -2
  76. package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -1
  77. package/src/generation/foliage/asset/tree_lod_plan.js +12 -14
  78. package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
  79. package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
  80. package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
  81. package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
  82. package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
  83. package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
  84. package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
  85. package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
  86. package/src/generation/foliage/config/TreeGrowth.js +18 -0
  87. package/src/generation/foliage/config/TreeLODConfig.d.ts +6 -0
  88. package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
  89. package/src/generation/foliage/config/TreeLODConfig.js +7 -0
  90. package/src/generation/foliage/index.d.ts +3 -0
  91. package/src/generation/foliage/index.js +3 -0
  92. package/src/generation/foliage/material/foliage_tile.d.ts +6 -6
  93. package/src/generation/foliage/material/foliage_tile.js +3 -3
  94. package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
  95. package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
  96. package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
  97. package/src/generation/foliage/mesh/foliage_collect_attachments.js +2 -2
  98. package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
  99. package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
  100. package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
  101. package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -7
  102. package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
  103. package/src/generation/foliage/mesh/tree_cluster_representatives.js +85 -40
  104. package/src/generation/foliage/mesh/tree_clusters.d.ts +26 -5
  105. package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -1
  106. package/src/generation/foliage/mesh/tree_clusters.js +52 -39
  107. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  108. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +32 -54
  109. package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
  110. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
  111. package/src/generation/foliage/presets/make_tree_species_preset.js +157 -3
  112. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +19 -0
  113. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
  114. package/src/generation/foliage/skeleton/TreeSkeleton.js +41 -0
  115. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
  116. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
  117. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
  118. package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
  119. package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
  120. package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
  121. package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
  122. package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
  123. package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
  124. package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
  125. package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
  126. package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
  127. package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
  128. package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
  129. package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
  130. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
  131. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
  132. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2034
  133. package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
  134. package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
  135. package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
  136. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +10 -0
  137. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
  138. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +27 -56
  139. package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
  140. package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
  141. package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
  142. package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
  143. package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
  144. package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
  145. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  146. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
  147. package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
  148. package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
  149. package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
  150. package/src/shade/playground/particle_ecs/README.md +9 -8
  151. package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
  152. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
  153. package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
  154. package/src/shade/playground/particle_editor/README.md +14 -11
  155. package/src/shade/playground/particle_system/particle_prototype.js +18 -18
  156. package/src/shade/playground/particle_system/particle_scene.js +13 -13
  157. package/src/shade/playground/probe_clipmap/README.md +42 -0
  158. package/src/shade/playground/probe_clipmap/index.html +178 -0
  159. package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
  160. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
  161. package/src/shade/playground/probe_clipmap/main.js +360 -0
  162. package/src/shade/renderer/Renderer.d.ts +3 -1
  163. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  164. package/src/shade/renderer/Renderer.js +94 -38
  165. package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
  166. package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
  167. package/src/shade/renderer/extension/ViewTextures.js +2 -1
  168. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  169. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  170. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  171. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  172. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  173. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
  174. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  175. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
  176. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
  177. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  178. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
  179. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
  180. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  181. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
  182. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
  183. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
  185. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
  186. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
  187. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  188. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
  189. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
  190. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
  191. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
  192. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
  193. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
  194. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
  195. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
  196. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
  197. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
  198. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
  199. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
  200. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
  201. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
  202. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
  203. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
  204. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  205. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
  206. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  207. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
  208. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
  209. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
  210. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
  211. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  212. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
  213. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
  214. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
  215. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
  216. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
  217. package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
  218. package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
  219. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +25 -4
  220. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  221. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +126 -8
  222. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +832 -4
  223. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +7 -0
  224. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  225. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +8 -0
  226. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +16 -0
  227. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  228. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +9 -0
  229. package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
  230. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
  231. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
  232. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
  233. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
  234. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
  235. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +0 -7
  236. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
  237. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +0 -8
  238. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -4
  239. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
  240. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +5 -8
  241. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -1
  242. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +13 -22
  243. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
  244. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
  245. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
  246. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
  247. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
  248. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
  249. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
  250. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
  251. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
  252. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
  253. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
  254. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
  255. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
  256. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
  257. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
  258. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
  259. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
  260. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
  261. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
  262. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
  263. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
  264. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
  265. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
  266. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
  267. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
  268. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
  269. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
  270. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
  271. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
  272. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
  273. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +20 -6
  274. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  275. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +152 -10
  276. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +7 -0
  277. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  278. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +8 -0
  279. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +14 -2
  280. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  281. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +50 -5
  282. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
  283. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
  284. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
  285. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
  286. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
  287. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
  288. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
  289. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
  290. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
  291. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
  292. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
  293. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
  294. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
  295. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  296. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +26 -3
  297. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +3 -0
  298. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  299. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +8 -1
  300. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
  301. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
  302. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
  303. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +1 -1
  304. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +1 -1
  305. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
  306. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
  307. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
  308. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
  309. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
  310. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
  311. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +3 -3
  312. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +3 -3
  313. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +2 -1
  314. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  315. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -1
  316. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  317. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +3 -10
  318. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
  319. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
  320. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
  321. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
  322. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
  323. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
  324. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
  325. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
  326. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
  327. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
  328. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
  329. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
  330. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
  331. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
  332. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
  333. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  334. package/src/shade/renderer/particles/DESIGN.md +151 -42
  335. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
  336. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
  337. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  338. package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
  339. package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
  340. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  341. package/src/shade/renderer/particles/ParticleConstants.js +25 -6
  342. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
  343. package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
  344. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
  345. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
  346. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
  347. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
  348. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  349. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
  350. package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
  351. package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
  352. package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
  353. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
  354. package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
  355. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
  356. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
  357. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
  358. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  359. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
  360. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
  361. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  362. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
  363. package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
  364. package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
  365. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
  366. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  367. package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
  368. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
  369. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
  370. package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
  371. package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
  372. package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
  373. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
  374. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
  375. package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
  376. package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
  377. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
  378. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
  379. package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
  380. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
  381. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  382. package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
  383. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  384. package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
  385. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
  386. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
  387. package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
  388. package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
  389. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  390. package/src/shade/renderer/particles/graph_particles.js +27 -4
  391. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
  392. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  393. package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
  394. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
  395. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
  396. package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
  397. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
  398. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  399. package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
  400. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
  401. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  402. package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
  403. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
  404. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  405. package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
  406. package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
  407. package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
  408. package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
  409. package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
  410. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
  411. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  412. package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
  413. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
  414. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
  415. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
  416. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
  417. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
  418. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
  419. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
  420. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
  421. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
  422. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
  423. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
  424. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
  425. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
  426. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  427. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
  428. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
  429. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
  430. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  431. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
  432. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
  433. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
  434. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
  435. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
  436. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
  437. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
  438. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
  439. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  440. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  441. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  442. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  443. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
  444. package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
  445. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  446. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
  447. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
  448. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  449. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
  450. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
  451. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  452. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
  453. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
  454. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  455. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
  456. package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
  457. package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
  458. package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
  459. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
  460. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
  461. package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
  462. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
  463. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  464. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
  465. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
  466. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
  467. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
  468. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
  469. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
  470. package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
  471. package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
  472. package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
  473. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
  474. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
  475. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
  476. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  477. package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
  478. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  479. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
  480. package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
  481. package/src/shade/renderer/postprocess/PostProcess.js +2 -1
  482. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
  483. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  484. package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
  485. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  486. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
  487. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  488. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  489. package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
  490. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
  491. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  492. package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
  493. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
  494. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
  495. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
  496. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
  497. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
  498. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
  499. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  500. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +17 -11
  501. package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
  502. package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
  503. package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
  504. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
  505. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
  506. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  507. package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
  508. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  509. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
  510. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
  511. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
  512. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
  513. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
  514. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
  515. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
  516. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
  517. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  518. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
  519. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
  520. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  521. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
  522. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
  523. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
  524. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
  525. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
  526. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
  527. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
  528. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  529. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
  530. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
  531. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
  532. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
  533. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
  534. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
  535. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
  536. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
  537. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
  538. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
  539. package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
  540. package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
  541. package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
  542. package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
  543. package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
  544. package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
  545. package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
  546. package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
  547. package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
  548. package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
  549. package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
  550. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
  551. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
  552. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
  553. package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
  554. package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
  555. package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
  556. package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
  557. package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
  558. package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
  559. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
  560. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
  561. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
  562. package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
  563. package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
  564. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
  565. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  566. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
  567. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
  568. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
  569. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
  570. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
  571. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
  572. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
  573. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
  574. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
  575. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
  576. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
  577. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  578. package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
  579. package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
  580. package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
  581. package/src/shade/renderer/water/chunk_water_gi.js +47 -5
  582. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  583. package/src/shade/renderer/water/shader_water.d.ts +3 -2
  584. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  585. package/src/shade/renderer/water/shader_water.js +9 -3
  586. package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
  587. package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
  588. package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
  589. package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
  590. package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
  591. package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
  592. package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
  593. package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
  594. package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
  595. package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
  596. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
  597. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
  598. package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
  599. package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
  600. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
  601. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
  602. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
  603. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
  604. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
  605. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
  606. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
  607. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
  608. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
  609. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @typedef {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
3
+ * @typedef {import("../../../shader/ComputeShader.js").ComputeShader} ComputeShader
4
+ * @typedef {import("./GPUVirtualGeometryRuntime.js").GPUVirtualGeometryRuntime} GPUVirtualGeometryRuntime
5
+ * @typedef {import("./VGeoViewCut.js").VGeoViewCut} VGeoViewCut
6
+ */
7
+ /**
8
+ * A cut's descent, design §7's cut pass after its collect: seed one item per instance at its root page's node 0,
9
+ * run the wavefront the cut's own bound of times, and count what it left. The camera's seam and a box cut both run
10
+ * it; what differs between them is their collect, which writes the instance records and scans their claim widths,
11
+ * and their traverse kernel, which is `chunk_vgeo_cut_descent` with that cut's culls and its take.
12
+ *
13
+ * @param {Object} options
14
+ * @param {FrameGraph} options.graph
15
+ * @param {GPUVirtualGeometryRuntime} options.runtime inside an open frame
16
+ * @param {VGeoViewCut} options.cut whose params, slot and wavefront bound this is; its params written this frame
17
+ * @param {number} options.instances the instance records, `VGEO_INSTANCE_WORDS` each
18
+ * @param {number} options.prefix_sums their claim widths, scanned inclusive, with their count
19
+ * @param {number} options.feedback the frame's feedback, at the version the collect wrote
20
+ * @param {ComputeShader} options.traverse the cut's traverse kernel
21
+ * @param {Object} [options.bindings] the traverse's own bindings beyond the descent's, by name, which no pass of this
22
+ * graph writes
23
+ * @param {Object<string, number>} [options.outputs] the traverse's own outputs, as graph resources by name; every
24
+ * wavefront writes them
25
+ * @returns {{feedback: number, instances: number, outputs: Object<string, number>}} the feedback, the instance
26
+ * records and the outputs at the versions the descent last wrote: the records with their claim bases, which the
27
+ * seed writes
28
+ *
29
+ * @author Alex Goldring
30
+ * @copyright Company Named Limited (c) 2026
31
+ */
32
+ export function graph_vgeo_cut_descent({ graph, runtime, cut, instances, prefix_sums, feedback, traverse, bindings, outputs, }: {
33
+ graph: FrameGraph;
34
+ runtime: GPUVirtualGeometryRuntime;
35
+ cut: VGeoViewCut;
36
+ instances: number;
37
+ prefix_sums: number;
38
+ feedback: number;
39
+ traverse: ComputeShader;
40
+ bindings?: any;
41
+ outputs?: {
42
+ [x: string]: number;
43
+ };
44
+ }): {
45
+ feedback: number;
46
+ instances: number;
47
+ outputs: {
48
+ [x: string]: number;
49
+ };
50
+ };
51
+ export type FrameGraph = import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
52
+ export type ComputeShader = import("../../../shader/ComputeShader.js").ComputeShader;
53
+ export type GPUVirtualGeometryRuntime = import("./GPUVirtualGeometryRuntime.js").GPUVirtualGeometryRuntime;
54
+ export type VGeoViewCut = import("./VGeoViewCut.js").VGeoViewCut;
55
+ //# sourceMappingURL=graph_vgeo_cut_descent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph_vgeo_cut_descent.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js"],"names":[],"mappings":"AAaA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;IAlB+B,KAAK,EAAzB,UAAU;IACyB,OAAO,EAA1C,yBAAyB;IACJ,GAAG,EAAxB,WAAW;IACK,SAAS,EAAzB,MAAM;IACU,WAAW,EAA3B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACiB,QAAQ,EAA/B,aAAa;IACI,QAAQ;IAEQ,OAAO;YAAjC,MAAM,GAAE,MAAM;;IAEnB;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO;YAAS,MAAM,GAAE,MAAM;MAAC;CAAC,CAiNlF;yBAzOY,OAAO,iEAAiE,EAAE,UAAU;4BACpF,OAAO,kCAAkC,EAAE,aAAa;wCACxD,OAAO,gCAAgC,EAAE,yBAAyB;0BAClE,OAAO,kBAAkB,EAAE,WAAW"}
@@ -0,0 +1,248 @@
1
+ import { assert } from "../../../../../core/assert.js";
2
+ import { noop } from "../../../../../core/function/noop.js";
3
+ import { BufferResourceDescriptor } from "../../../../device/graph/BufferResourceDescriptor.js";
4
+ import {
5
+ graph_build_indirect_dispatch_command,
6
+ INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
+ } from "../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
+ import { shader_vgeo_cut_queue_prepare } from "./cut/shader_vgeo_cut_queue_prepare.js";
9
+ import { shader_vgeo_cut_queue_remainder } from "./cut/shader_vgeo_cut_queue_remainder.js";
10
+ import { shader_vgeo_cut_seed } from "./cut/shader_vgeo_cut_seed.js";
11
+ import { VGEO_CUT_WORKGROUP_SIZE } from "./cut/VGEO_CUT_WORKGROUP_SIZE.js";
12
+ import { VGEO_QUEUE_ITEM_WORDS } from "./layout/VGEO_QUEUE_ITEM_WORDS.js";
13
+
14
+ /**
15
+ * @typedef {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
16
+ * @typedef {import("../../../shader/ComputeShader.js").ComputeShader} ComputeShader
17
+ * @typedef {import("./GPUVirtualGeometryRuntime.js").GPUVirtualGeometryRuntime} GPUVirtualGeometryRuntime
18
+ * @typedef {import("./VGeoViewCut.js").VGeoViewCut} VGeoViewCut
19
+ */
20
+
21
+ /**
22
+ * A cut's descent, design §7's cut pass after its collect: seed one item per instance at its root page's node 0,
23
+ * run the wavefront the cut's own bound of times, and count what it left. The camera's seam and a box cut both run
24
+ * it; what differs between them is their collect, which writes the instance records and scans their claim widths,
25
+ * and their traverse kernel, which is `chunk_vgeo_cut_descent` with that cut's culls and its take.
26
+ *
27
+ * @param {Object} options
28
+ * @param {FrameGraph} options.graph
29
+ * @param {GPUVirtualGeometryRuntime} options.runtime inside an open frame
30
+ * @param {VGeoViewCut} options.cut whose params, slot and wavefront bound this is; its params written this frame
31
+ * @param {number} options.instances the instance records, `VGEO_INSTANCE_WORDS` each
32
+ * @param {number} options.prefix_sums their claim widths, scanned inclusive, with their count
33
+ * @param {number} options.feedback the frame's feedback, at the version the collect wrote
34
+ * @param {ComputeShader} options.traverse the cut's traverse kernel
35
+ * @param {Object} [options.bindings] the traverse's own bindings beyond the descent's, by name, which no pass of this
36
+ * graph writes
37
+ * @param {Object<string, number>} [options.outputs] the traverse's own outputs, as graph resources by name; every
38
+ * wavefront writes them
39
+ * @returns {{feedback: number, instances: number, outputs: Object<string, number>}} the feedback, the instance
40
+ * records and the outputs at the versions the descent last wrote: the records with their claim bases, which the
41
+ * seed writes
42
+ *
43
+ * @author Alex Goldring
44
+ * @copyright Company Named Limited (c) 2026
45
+ */
46
+ export function graph_vgeo_cut_descent({
47
+ graph,
48
+ runtime,
49
+ cut,
50
+ instances,
51
+ prefix_sums,
52
+ feedback,
53
+ traverse,
54
+ bindings = {},
55
+ outputs = {},
56
+ }) {
57
+ assert.defined(graph, 'graph');
58
+ assert.defined(runtime, 'runtime');
59
+ assert.equal(runtime.frame_open, true, 'runtime.frame_open — begin_frame must have run');
60
+ assert.defined(cut, 'cut');
61
+ assert.isNonNegativeInteger(instances, 'instances');
62
+ assert.isNonNegativeInteger(prefix_sums, 'prefix_sums');
63
+ assert.isNonNegativeInteger(feedback, 'feedback');
64
+ assert.defined(traverse, 'traverse');
65
+
66
+ const pool = runtime.pool;
67
+
68
+ // and this cut's own wavefront bound, raised from its own readings
69
+ const max_iterations = cut.iterations_under(runtime);
70
+
71
+ // ----- seed: one item per instance, naming its root page's node 0 -----
72
+
73
+ const seed_command = graph_build_indirect_dispatch_command(
74
+ graph, prefix_sums, VGEO_CUT_WORKGROUP_SIZE
75
+ );
76
+
77
+ const queue_descriptor = BufferResourceDescriptor.from(
78
+ 16 + runtime.queue_capacity * VGEO_QUEUE_ITEM_WORDS * 4,
79
+ GPUBufferUsage.STORAGE,
80
+ 0, 16
81
+ );
82
+
83
+ const seed_data = {};
84
+
85
+ const seed_pass = graph.add("seed vg wavefront", seed_data, (data, resources, context) => {
86
+ shader_vgeo_cut_seed.dispatchIndirect({
87
+ encoder: context.encoder,
88
+ command: resources.get(data.command),
89
+ bindings: {
90
+ params: cut.params_buffer,
91
+ vg_arena: pool.buffer_arena,
92
+ prefix_sums: resources.get(data.prefix_sums),
93
+ instances: resources.get(data.instances),
94
+ queue_out: resources.get(data.queue_out),
95
+ claim: resources.get(data.claim),
96
+ feedback: resources.get(data.feedback),
97
+ }
98
+ });
99
+ });
100
+
101
+ seed_data.command = seed_pass.read(seed_command);
102
+ seed_data.prefix_sums = seed_pass.read(prefix_sums);
103
+ seed_data.instances = seed_pass.write(instances);
104
+
105
+ /*
106
+ Cleared per invocation, and that is not an optimization that could be traded away: each
107
+ expansion site sees a different instance set, so a claim carried over from the previous site
108
+ would make every page of this one look already visited. The stamps in the feedback buffer are
109
+ the opposite case — per frame, shared, and not cleared here.
110
+ */
111
+ seed_data.claim = seed_pass.create("vg claim", BufferResourceDescriptor.empty(
112
+ runtime.claim_word_capacity * 4,
113
+ GPUBufferUsage.STORAGE
114
+ ));
115
+
116
+ seed_data.feedback = seed_pass.write(feedback);
117
+ seed_data.queue_out = seed_pass.create("vg queue a", queue_descriptor);
118
+
119
+ const spare_spawn = graph.add("vg queue b", {}, noop);
120
+
121
+ /*
122
+ The two queues ping-pong, so *which* of them holds work is not a property of either buffer —
123
+ it moves every iteration. Carrying the roles rather than the buffers is what makes the tail
124
+ pass below correct at any `max_iterations` rather than only at an even one (REVIEW_LEDGER M8).
125
+ */
126
+ let ready_queue = seed_data.queue_out;
127
+ let spare_queue = spare_spawn.create("vg queue b", queue_descriptor);
128
+
129
+ let claim = seed_data.claim;
130
+
131
+ feedback = seed_data.feedback;
132
+
133
+ const records = seed_data.instances;
134
+
135
+ const latest = { ...outputs };
136
+
137
+ // ----- the wavefront -----
138
+
139
+ for (let iteration = 0; iteration < max_iterations; iteration++) {
140
+ const prepare_data = {};
141
+
142
+ const prepare_pass = graph.add(
143
+ `vg prepare ${iteration}`, prepare_data, (data, resources, context) => {
144
+ shader_vgeo_cut_queue_prepare.dispatch({
145
+ encoder: context.encoder,
146
+ bindings: {
147
+ params: cut.params_buffer,
148
+ queue_ready: resources.get(data.queue_ready),
149
+ queue_spare: resources.get(data.queue_spare),
150
+ command: resources.get(data.command),
151
+ }
152
+ });
153
+ }
154
+ );
155
+
156
+ /*
157
+ Both queues, because this pass does two things at once and they belong together: it clamps
158
+ what the last wavefront produced — the count runs past capacity by design, and handing
159
+ *that* to an indirect dispatch would dispatch lanes over the end of a pooled buffer — and
160
+ it empties the one the next wavefront will write. There is exactly one moment when neither
161
+ wavefront is touching either, and this is it.
162
+ */
163
+ const ready = prepare_data.queue_ready = prepare_pass.write(ready_queue);
164
+ const spare = prepare_data.queue_spare = prepare_pass.write(spare_queue);
165
+
166
+ prepare_data.command = prepare_pass.create(
167
+ `vg command ${iteration}`, INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
168
+ );
169
+
170
+ const traverse_data = { outputs: {} };
171
+
172
+ const traverse_pass = graph.add(
173
+ `vg traverse ${iteration}`, traverse_data, (data, resources, context) => {
174
+ const dispatch_bindings = {
175
+ ...bindings,
176
+ params: cut.params_buffer,
177
+ vg_lookup: pool.buffer_lookup,
178
+ vg_arena: pool.buffer_arena,
179
+ vg_want_stamps: pool.buffer_want_stamps,
180
+ instances: resources.get(data.instances),
181
+ queue_in: resources.get(data.queue_in),
182
+ queue_out: resources.get(data.queue_out),
183
+ claim: resources.get(data.claim),
184
+ feedback: resources.get(data.feedback),
185
+ };
186
+
187
+ for (const name in data.outputs) {
188
+ dispatch_bindings[name] = resources.get(data.outputs[name]);
189
+ }
190
+
191
+ traverse.dispatchIndirect({
192
+ encoder: context.encoder,
193
+ command: resources.get(data.command),
194
+ bindings: dispatch_bindings,
195
+ });
196
+ }
197
+ );
198
+
199
+ traverse_data.command = traverse_pass.read(prepare_data.command);
200
+ traverse_data.instances = traverse_pass.read(records);
201
+ traverse_data.queue_in = traverse_pass.read(ready);
202
+
203
+ const produced = traverse_data.queue_out = traverse_pass.write(spare);
204
+
205
+ claim = traverse_data.claim = traverse_pass.write(claim);
206
+ feedback = traverse_data.feedback = traverse_pass.write(feedback);
207
+
208
+ for (const name in latest) {
209
+ latest[name] = traverse_data.outputs[name] = traverse_pass.write(latest[name]);
210
+ }
211
+
212
+ // what this wavefront produced is what the next one consumes, and the drained one is spare
213
+ ready_queue = produced;
214
+ spare_queue = ready;
215
+ }
216
+
217
+ /*
218
+ One more pass, for one number. The loop above records a fixed number of prepare/traverse pairs
219
+ and the queue can still hold work when the last of them finishes — a subtree never descended,
220
+ which is a hole rather than a coarse stand-in, and the one degradation §4.5 admits. This is
221
+ where `VGEO_CUT_STAT.QUEUE_REMAINING` comes from.
222
+
223
+ It is not the prepare pass: that one runs *between* wavefronts and once per iteration per
224
+ expansion site, so what it could report is a frontier rather than a remainder, and the next
225
+ site would overwrite it. See {@link shader_vgeo_cut_queue_remainder}.
226
+
227
+ `ready_queue` and not either buffer by name: which of the two holds the produced queue
228
+ alternates per iteration, so the roles are carried through the loop rather than named here.
229
+ */
230
+ const tail_data = {};
231
+
232
+ const tail_pass = graph.add("vg queue tail", tail_data, (data, resources, context) => {
233
+ shader_vgeo_cut_queue_remainder.dispatch({
234
+ encoder: context.encoder,
235
+ bindings: {
236
+ params: cut.params_buffer,
237
+ queue_ready: resources.get(data.queue_ready),
238
+ feedback: resources.get(data.feedback),
239
+ }
240
+ });
241
+ });
242
+
243
+ tail_data.queue_ready = tail_pass.read(ready_queue);
244
+
245
+ feedback = tail_data.feedback = tail_pass.write(feedback);
246
+
247
+ return { feedback, instances: records, outputs: latest };
248
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAX+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACO,OAAO;IACb,MAAM;IACjC,MAAM,CA6TlB"}
1
+ {"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAX+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACO,OAAO;IACb,MAAM;IACjC,MAAM,CAqKlB"}
@@ -1,10 +1,6 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
- import { noop } from "../../../../../core/function/noop.js";
3
2
  import { BufferResourceDescriptor } from "../../../../device/graph/BufferResourceDescriptor.js";
4
- import {
5
- graph_build_indirect_dispatch_command,
6
- INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
- } from "../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
3
+ import { graph_build_indirect_dispatch_command } from "../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
4
  import {
9
5
  graph_prefix_scan_csdldf,
10
6
  prefix_scan_csdldf_output_descriptor
@@ -12,13 +8,10 @@ import {
12
8
  import { RasterizationCollectionType } from "../../../rasterize/expand/RasterizationCollectionType.js";
13
9
  import { graph_create_buffer } from "../../../shader/graph/graph_create_buffer.js";
14
10
  import { shader_vgeo_cut_collect } from "./cut/shader_vgeo_cut_collect.js";
15
- import { shader_vgeo_cut_queue_prepare } from "./cut/shader_vgeo_cut_queue_prepare.js";
16
- import { shader_vgeo_cut_queue_remainder } from "./cut/shader_vgeo_cut_queue_remainder.js";
17
- import { shader_vgeo_cut_seed } from "./cut/shader_vgeo_cut_seed.js";
18
11
  import { shader_vgeo_cut_traverse } from "./cut/shader_vgeo_cut_traverse.js";
19
12
  import { VGEO_CUT_WORKGROUP_SIZE } from "./cut/VGEO_CUT_WORKGROUP_SIZE.js";
13
+ import { graph_vgeo_cut_descent } from "./graph_vgeo_cut_descent.js";
20
14
  import { VGEO_INSTANCE_WORDS } from "./layout/VGEO_INSTANCE_WORDS.js";
21
- import { VGEO_QUEUE_ITEM_WORDS } from "./layout/VGEO_QUEUE_ITEM_WORDS.js";
22
15
 
23
16
  /**
24
17
  * **The seam.**
@@ -135,9 +128,6 @@ export function graph_vgeo_expand_instances_to_meshlets({
135
128
  // the frame's feedback buffer, as this graph knows it: imported on first use, cleared by the first
136
129
  const feedback_in = runtime.feedback_in(graph);
137
130
 
138
- // and this view's own wavefront bound, raised from its own readings
139
- const max_iterations = view_cut.iterations_under(runtime);
140
-
141
131
  // ----- collect: which of these instances are virtual, and where is the camera in each one -----
142
132
 
143
133
  const collect_command = graph_build_indirect_dispatch_command(
@@ -195,171 +185,22 @@ export function graph_vgeo_expand_instances_to_meshlets({
195
185
  element_max_count: instance_capacity,
196
186
  });
197
187
 
198
- // ----- seed: one item per instance, naming its root page's node 0 -----
199
-
200
- const seed_command = graph_build_indirect_dispatch_command(
201
- graph, prefix_sums, VGEO_CUT_WORKGROUP_SIZE
202
- );
203
-
204
- const queue_descriptor = BufferResourceDescriptor.from(
205
- 16 + runtime.queue_capacity * VGEO_QUEUE_ITEM_WORDS * 4,
206
- GPUBufferUsage.STORAGE,
207
- 0, 16
208
- );
209
-
210
- const seed_data = {};
211
-
212
- const seed_pass = graph.add("seed vg wavefront", seed_data, (data, resources, context) => {
213
- shader_vgeo_cut_seed.dispatchIndirect({
214
- encoder: context.encoder,
215
- command: resources.get(data.command),
216
- bindings: {
217
- params: view_cut.params_buffer,
218
- vg_arena: pool.buffer_arena,
219
- prefix_sums: resources.get(data.prefix_sums),
220
- instances: resources.get(data.instances),
221
- queue_out: resources.get(data.queue_out),
222
- claim: resources.get(data.claim),
223
- feedback: resources.get(data.feedback),
224
- }
225
- });
226
- });
227
-
228
- seed_data.command = seed_pass.read(seed_command);
229
- seed_data.prefix_sums = seed_pass.read(prefix_sums);
230
- seed_data.instances = seed_pass.write(collect_data.instances);
231
-
232
- /*
233
- Cleared per invocation, and that is not an optimization that could be traded away: each
234
- expansion site sees a different instance set, so a claim carried over from the previous site
235
- would make every page of this one look already visited. The stamps in the feedback buffer are
236
- the opposite case — per frame, shared, and not cleared here.
237
- */
238
- seed_data.claim = seed_pass.create("vg claim", BufferResourceDescriptor.empty(
239
- runtime.claim_word_capacity * 4,
240
- GPUBufferUsage.STORAGE
241
- ));
242
-
243
- seed_data.feedback = seed_pass.write(collect_data.feedback);
244
- seed_data.queue_out = seed_pass.create("vg queue a", queue_descriptor);
245
-
246
- const spare_spawn = graph.add("vg queue b", {}, noop);
247
-
248
- /*
249
- The two queues ping-pong, so *which* of them holds work is not a property of either buffer —
250
- it moves every iteration. Carrying the roles rather than the buffers is what makes the tail
251
- pass below correct at any `max_iterations` rather than only at an even one (REVIEW_LEDGER M8).
252
- */
253
- let ready_queue = seed_data.queue_out;
254
- let spare_queue = spare_spawn.create("vg queue b", queue_descriptor);
188
+ // ----- the descent: seed, the wavefront, and what it left -----
255
189
 
256
- let claim = seed_data.claim;
257
- let feedback = seed_data.feedback;
258
- let meshlets = output_meshlets;
259
-
260
- const instances = seed_data.instances;
261
-
262
- // ----- the wavefront -----
263
-
264
- for (let iteration = 0; iteration < max_iterations; iteration++) {
265
- const prepare_data = {};
266
-
267
- const prepare_pass = graph.add(
268
- `vg prepare ${iteration}`, prepare_data, (data, resources, context) => {
269
- shader_vgeo_cut_queue_prepare.dispatch({
270
- encoder: context.encoder,
271
- bindings: {
272
- params: view_cut.params_buffer,
273
- queue_ready: resources.get(data.queue_ready),
274
- queue_spare: resources.get(data.queue_spare),
275
- command: resources.get(data.command),
276
- }
277
- });
278
- }
279
- );
280
-
281
- /*
282
- Both queues, because this pass does two things at once and they belong together: it clamps
283
- what the last wavefront produced — the count runs past capacity by design, and handing
284
- *that* to an indirect dispatch would dispatch lanes over the end of a pooled buffer — and
285
- it empties the one the next wavefront will write. There is exactly one moment when neither
286
- wavefront is touching either, and this is it.
287
- */
288
- const ready = prepare_data.queue_ready = prepare_pass.write(ready_queue);
289
- const spare = prepare_data.queue_spare = prepare_pass.write(spare_queue);
290
-
291
- prepare_data.command = prepare_pass.create(
292
- `vg command ${iteration}`, INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
293
- );
294
-
295
- const traverse_data = {};
296
-
297
- const traverse_pass = graph.add(
298
- `vg traverse ${iteration}`, traverse_data, (data, resources, context) => {
299
- shader_vgeo_cut_traverse.dispatchIndirect({
300
- encoder: context.encoder,
301
- command: resources.get(data.command),
302
- bindings: {
303
- params: view_cut.params_buffer,
304
- vg_lookup: pool.buffer_lookup,
305
- vg_arena: pool.buffer_arena,
306
- vg_want_stamps: pool.buffer_want_stamps,
307
- instances: resources.get(data.instances),
308
- queue_in: resources.get(data.queue_in),
309
- queue_out: resources.get(data.queue_out),
310
- claim: resources.get(data.claim),
311
- feedback: resources.get(data.feedback),
312
- frontier: view_cut.frontier_buffer,
313
- out_meshlets: resources.get(data.out_meshlets),
314
- }
315
- });
316
- }
317
- );
318
-
319
- traverse_data.command = traverse_pass.read(prepare_data.command);
320
- traverse_data.instances = traverse_pass.read(instances);
321
- traverse_data.queue_in = traverse_pass.read(ready);
322
-
323
- const produced = traverse_data.queue_out = traverse_pass.write(spare);
324
-
325
- claim = traverse_data.claim = traverse_pass.write(claim);
326
- feedback = traverse_data.feedback = traverse_pass.write(feedback);
327
- meshlets = traverse_data.out_meshlets = traverse_pass.write(meshlets);
328
-
329
- // what this wavefront produced is what the next one consumes, and the drained one is spare
330
- ready_queue = produced;
331
- spare_queue = ready;
332
- }
333
-
334
- /*
335
- One more pass, for one number. The loop above records a fixed number of prepare/traverse pairs
336
- and the queue can still hold work when the last of them finishes — a subtree never descended,
337
- which is a hole rather than a coarse stand-in, and the one degradation §4.5 admits. This is
338
- where `VGEO_CUT_STAT.QUEUE_REMAINING` comes from.
339
-
340
- It is not the prepare pass: that one runs *between* wavefronts and once per iteration per
341
- expansion site, so what it could report is a frontier rather than a remainder, and the next
342
- site would overwrite it. See {@link shader_vgeo_cut_queue_remainder}.
343
-
344
- `ready_queue` and not either buffer by name: which of the two holds the produced queue
345
- alternates per iteration, so the roles are carried through the loop rather than named here.
346
- */
347
- const tail_data = {};
348
-
349
- const tail_pass = graph.add("vg queue tail", tail_data, (data, resources, context) => {
350
- shader_vgeo_cut_queue_remainder.dispatch({
351
- encoder: context.encoder,
352
- bindings: {
353
- params: view_cut.params_buffer,
354
- queue_ready: resources.get(data.queue_ready),
355
- feedback: resources.get(data.feedback),
356
- }
357
- });
190
+ const descent = graph_vgeo_cut_descent({
191
+ graph,
192
+ runtime,
193
+ cut: view_cut,
194
+ instances: collect_data.instances,
195
+ prefix_sums,
196
+ feedback: collect_data.feedback,
197
+ traverse: shader_vgeo_cut_traverse,
198
+ bindings: { frontier: view_cut.frontier_buffer },
199
+ outputs: { out_meshlets: output_meshlets },
358
200
  });
359
201
 
360
- tail_data.queue_ready = tail_pass.read(ready_queue);
361
-
362
- feedback = tail_data.feedback = tail_pass.write(feedback);
202
+ const feedback = descent.feedback;
203
+ const meshlets = descent.outputs.out_meshlets;
363
204
 
364
205
  /*
365
206
  Every expansion of this graph writes into one feedback buffer, so the next one has to start
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_brick4_probe_meta_pick2.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,4CAFU,SAAS,CAkDlB;0BAtEyB,0CAA0C"}
1
+ {"version":3,"file":"chunk_brick4_probe_meta_pick2.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AACH,4CAFU,SAAS,CAoClB;0BAxDyB,0CAA0C"}
@@ -1,8 +1,6 @@
1
1
  import { f32, vec2u } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
2
  import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
3
- import {
4
- chunk_sample_discrete_wrs_mat2x4
5
- } from "../../../../shader/chunk/random/reservoir/chunk_sample_discrete_wrs_mat2x4.js";
3
+ import { chunk_pick2_wrs_mat2x4 } from "../../../../shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js";
6
4
  import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
7
5
  import { BRICK4_PROBE_SAMPLE_META_STRUCT } from "./BRICK4_PROBE_SAMPLE_META_STRUCT.js";
8
6
  import { BRICK4_RESOURCE } from "../BRICK4_RESOURCE.js";
@@ -34,32 +32,18 @@ fn brick4_probe_meta_pick2(
34
32
  noise: vec2<f32>,
35
33
  ) -> ${BRICK4_PROBE_SAMPLE2_META_STRUCT.wgsl_ref} {
36
34
 
37
- var _u = noise.x;
38
- var ws = metadata.weights;
35
+ let pick = pick2_wrs_mat2x4(metadata.weights, noise);
39
36
 
40
- // pick samples
41
- let sample0 = sample_discrete_wrs_mat2x4(ws, &_u);
42
- var weight0 = metadata.weights[sample0 >> 2][sample0 & 3];
37
+ let sample0 = pick.indices.x;
38
+ let sample1 = pick.indices.y;
43
39
 
44
- // clear out selected sample
45
- ws[sample0 >> 2][sample0 & 3] = 0.0;
46
-
47
- // use a fresh entropy sample
48
- _u = noise.y;
49
-
50
- let sample1 = sample_discrete_wrs_mat2x4(ws, &_u);
51
- var weight1 = ws[sample1 >> 2][sample1 & 3];
52
-
53
- let local_index_0 = metadata.indices[sample0 >> 2][sample0 & 3];
54
- let local_index_1 = metadata.indices[sample1 >> 2][sample1 & 3];
40
+ let local_index_0 = metadata.indices[sample0 >> 2u][sample0 & 3u];
41
+ let local_index_1 = metadata.indices[sample1 >> 2u][sample1 & 3u];
55
42
 
56
43
  let global_index_0 = brick4.data[node_address + local_index_0];
57
44
  let global_index_1 = brick4.data[node_address + local_index_1];
58
45
 
59
- // re-normalize weights
60
- let weight_sum = max(1e-6, weight0 + weight1);
61
-
62
- weight1 /= weight_sum;
46
+ let weight1 = pick.blend;
63
47
 
64
48
  let result = ${BRICK4_PROBE_SAMPLE2_META_STRUCT.make({
65
49
  global_indices: 'vec2u(global_index_0, global_index_1)',
@@ -71,7 +55,7 @@ fn brick4_probe_meta_pick2(
71
55
  }
72
56
  `, [
73
57
  BRICK4_PROBE_SAMPLE2_META_STRUCT.declaration_chunk,
74
- chunk_sample_discrete_wrs_mat2x4,
58
+ chunk_pick2_wrs_mat2x4,
75
59
  ]
76
60
  )
77
61
 
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_brick4_sample_forward_indirect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js"],"names":[],"mappings":"AAsCA,6DAqEC;0BAnGyB,0CAA0C"}
1
+ {"version":3,"file":"chunk_brick4_sample_forward_indirect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js"],"names":[],"mappings":"AAcA,6DAqEC;0BA3EyB,0CAA0C"}
@@ -1,4 +1,4 @@
1
- import { chunk_murmur3_vec3u } from "../../../../shader/chunk/random/murmur/chunk_murmur3_vec3u.js";
1
+ import { chunk_jitter_from_vectors } from "../../../../shader/chunk/random/chunk_jitter_from_vectors.js";
2
2
  import {
3
3
  chunk_sh3_color_get_irradiance_at
4
4
  } from "../../../../shader/chunk/spherical_harmonics/chunk_sh3_color_get_irradiance_at.js";
@@ -11,30 +11,6 @@ import { chunk_brick4_load_probe } from "./chunk_brick4_load_probe.js";
11
11
  import { chunk_brick4_node_by_position } from "./chunk_brick4_node_by_position.js";
12
12
  import { chunk_brick4_node_sample_probes_meta } from "./chunk_brick4_node_sample_probes_meta.js";
13
13
  import { chunk_brick4_probe_meta_pick2 } from "./chunk_brick4_probe_meta_pick2.js";
14
- import { VIEW_RESOURCE } from "../../../../view/VIEW_RESOURCE.js";
15
-
16
- const chunk_jitter_from_vectors = CodeChunk.from(
17
- //language=WGSL
18
- `
19
- fn jitter_from_vectors(v0:vec3<f32>, v1: vec3<f32>) -> vec2<f32>{
20
- let u0 = bitcast<vec3<u32>>(v0);
21
- let u1 = bitcast<vec3<u32>>(v1);
22
-
23
- var h0 = u0 ^ u1;
24
-
25
- // add temporal component
26
- h0.x ^= view.frame_index;
27
-
28
- let h1 = murmur3_vec3u(h0);
29
-
30
- return unpack2x16unorm(h1);
31
- }
32
- `, [
33
- chunk_murmur3_vec3u,
34
- ]
35
- )
36
-
37
- chunk_jitter_from_vectors.requireResource(VIEW_RESOURCE);
38
14
 
39
15
  export const chunk_brick4_sample_forward_indirect = CodeChunk.from(
40
16
  //language=WGSL
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_lpv_get_visibility_mask.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js"],"names":[],"mappings":"AASA,sDAqDE;0BAxDwB,uCAAuC"}
1
+ {"version":3,"file":"chunk_lpv_get_visibility_mask.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js"],"names":[],"mappings":"AAUA,sDAkCE;0BArCwB,uCAAuC"}