@woosh/meep-engine 3.58.0 → 3.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (818) 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 +190 -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 +365 -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 +97 -43
  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/sdf/GPUGeometrySDFManager.d.ts +63 -1
  174. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  175. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
  176. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
  177. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  178. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
  179. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
  180. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
  182. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
  183. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
  185. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
  186. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
  187. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
  188. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
  189. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
  190. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
  191. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
  192. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
  193. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
  194. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
  195. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  196. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
  197. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
  198. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  199. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
  200. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
  201. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  202. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
  203. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
  204. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
  205. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
  206. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
  207. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
  208. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  209. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
  210. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
  211. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
  212. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
  213. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
  214. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
  215. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
  216. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
  217. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
  218. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
  219. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
  220. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
  221. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
  222. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
  223. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
  224. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
  225. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  226. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
  227. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  228. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
  229. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
  230. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
  231. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
  232. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  233. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
  234. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
  235. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
  236. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
  237. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
  238. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
  239. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
  240. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
  241. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
  242. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
  243. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
  244. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
  245. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
  246. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
  247. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
  248. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
  249. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
  250. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
  251. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
  252. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
  253. package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
  254. package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
  255. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
  256. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
  257. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -5
  258. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  259. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +111 -11
  260. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +1596 -52
  261. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
  262. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
  263. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  264. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
  265. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
  266. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  267. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
  268. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +18 -3
  269. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  270. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +21 -4
  271. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -2
  272. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  273. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -1
  274. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
  275. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  276. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
  277. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
  278. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  279. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
  280. package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
  281. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
  282. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
  283. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
  284. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
  285. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
  286. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
  287. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
  288. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
  289. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -15
  290. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
  291. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -17
  292. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
  293. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +3 -4
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +6 -8
  298. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
  299. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
  300. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
  301. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
  302. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
  303. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
  304. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
  305. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
  306. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
  307. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
  308. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
  309. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
  310. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
  311. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
  312. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
  313. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
  314. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
  315. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
  316. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
  317. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
  318. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
  319. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +32 -15
  320. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  321. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +380 -57
  322. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +156 -8
  323. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  324. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +189 -13
  325. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +193 -9
  326. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  327. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +458 -32
  328. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
  329. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
  330. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
  331. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
  332. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
  333. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
  334. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
  335. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
  336. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +189 -0
  337. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
  338. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
  339. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
  340. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +40 -10
  341. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  342. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +244 -32
  343. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +8 -1
  344. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  345. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +29 -12
  346. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
  347. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
  348. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
  349. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
  350. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
  351. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
  352. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
  353. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
  354. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
  355. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
  356. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
  357. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
  358. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +37 -0
  359. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
  360. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +316 -0
  361. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
  362. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
  363. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
  364. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
  365. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  366. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
  367. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
  368. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
  369. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
  370. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
  371. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +15 -2
  372. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
  373. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +54 -9
  374. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
  375. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
  376. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
  377. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +6 -9
  378. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  379. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +26 -37
  380. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
  381. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  382. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +101 -38
  383. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
  384. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
  385. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
  386. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
  387. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
  388. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
  389. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +28 -0
  390. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
  391. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
  392. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
  393. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
  394. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
  395. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
  396. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
  397. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
  398. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
  399. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
  400. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
  401. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
  402. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
  403. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
  404. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
  405. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
  406. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
  407. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
  408. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
  409. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
  410. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
  411. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
  412. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
  413. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
  414. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
  415. package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
  416. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
  417. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  418. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
  419. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
  420. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  421. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
  422. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
  423. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
  424. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
  425. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
  426. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
  427. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
  428. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
  429. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  430. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
  431. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
  432. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
  433. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
  434. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
  435. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
  436. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
  437. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
  438. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
  439. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
  440. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
  441. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
  442. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
  443. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
  444. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
  445. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
  446. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
  447. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
  448. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  449. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  450. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
  451. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
  452. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
  453. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
  454. package/src/shade/renderer/particles/DESIGN.md +151 -42
  455. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
  456. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
  457. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  458. package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
  459. package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
  460. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  461. package/src/shade/renderer/particles/ParticleConstants.js +25 -6
  462. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
  463. package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
  464. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
  465. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
  466. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
  467. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
  468. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  469. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
  470. package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
  471. package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
  472. package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
  473. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
  474. package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
  475. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
  476. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
  477. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
  478. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  479. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
  480. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
  481. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  482. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
  483. package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
  484. package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
  485. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
  486. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  487. package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
  488. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
  489. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
  490. package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
  491. package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
  492. package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
  493. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
  494. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
  495. package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
  496. package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
  497. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
  498. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
  499. package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
  500. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
  501. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  502. package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
  503. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  504. package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
  505. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
  506. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
  507. package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
  508. package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
  509. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  510. package/src/shade/renderer/particles/graph_particles.js +27 -4
  511. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
  512. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  513. package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
  514. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
  515. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
  516. package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
  517. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
  518. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  519. package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
  520. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
  521. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  522. package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
  523. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
  524. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  525. package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
  526. package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
  527. package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
  528. package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
  529. package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
  530. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
  531. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  532. package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
  533. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
  534. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
  535. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
  536. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
  537. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
  538. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
  539. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
  540. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
  541. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
  542. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
  543. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
  544. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
  545. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
  546. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  547. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
  548. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
  549. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
  550. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  551. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
  552. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
  553. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
  554. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
  555. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
  556. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
  557. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
  558. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
  559. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  560. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  561. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  562. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  563. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
  564. package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
  565. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  566. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
  567. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
  568. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  569. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
  570. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
  571. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  572. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
  573. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
  574. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  575. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
  576. package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
  577. package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
  578. package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
  579. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
  580. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
  581. package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
  582. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
  583. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  584. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
  585. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
  586. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
  587. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
  588. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
  589. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
  590. package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
  591. package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
  592. package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
  593. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
  594. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
  595. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
  596. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  597. package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
  598. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  599. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
  600. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
  601. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
  602. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
  603. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
  604. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
  605. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
  606. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
  607. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
  608. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
  609. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
  610. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
  611. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
  612. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
  613. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
  614. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
  615. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
  616. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
  617. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
  618. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
  619. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
  620. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
  621. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
  622. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
  623. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
  624. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
  625. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
  626. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
  627. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
  628. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  629. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
  630. package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
  631. package/src/shade/renderer/postprocess/PostProcess.js +2 -1
  632. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
  633. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  634. package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
  635. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  636. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
  637. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  638. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  639. package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
  640. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
  641. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  642. package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
  643. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
  644. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
  645. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
  646. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
  647. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
  648. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
  649. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  650. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +17 -11
  651. package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
  652. package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
  653. package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
  654. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
  655. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
  656. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  657. package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
  658. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  659. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
  660. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
  661. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
  662. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
  663. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
  664. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
  665. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
  666. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
  667. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  668. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
  669. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
  670. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  671. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
  672. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
  673. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
  674. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
  675. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
  676. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
  677. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
  678. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  679. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
  680. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
  681. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
  682. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
  683. package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
  684. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  685. package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
  686. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
  687. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
  688. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
  689. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
  690. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
  691. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
  692. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
  693. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
  694. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
  695. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
  696. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
  697. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
  698. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
  699. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
  700. package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
  701. package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
  702. package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
  703. package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
  704. package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
  705. package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
  706. package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
  707. package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
  708. package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
  709. package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
  710. package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
  711. package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
  712. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
  713. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
  714. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
  715. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
  716. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
  717. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
  718. package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
  719. package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
  720. package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
  721. package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
  722. package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
  723. package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
  724. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
  725. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
  726. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
  727. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
  728. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
  729. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
  730. package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
  731. package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
  732. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
  733. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  734. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
  735. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
  736. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
  737. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
  738. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
  739. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
  740. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
  741. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
  742. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
  743. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
  744. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
  745. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  746. package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
  747. package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
  748. package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
  749. package/src/shade/renderer/water/chunk_water_gi.js +47 -5
  750. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  751. package/src/shade/renderer/water/shader_water.d.ts +3 -2
  752. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  753. package/src/shade/renderer/water/shader_water.js +9 -3
  754. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  755. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
  756. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
  757. package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
  758. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  759. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +39 -18
  760. package/src/view/elements/progress/segmented/GhostTrail.d.ts +56 -0
  761. package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
  762. package/src/view/elements/progress/segmented/GhostTrail.js +98 -0
  763. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
  764. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
  765. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
  766. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
  767. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
  768. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
  769. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
  770. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
  771. package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
  772. package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
  773. package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
  774. package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
  775. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +155 -10
  776. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  777. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +427 -101
  778. package/src/view/elements/progress/segmented/playground/index.html +78 -0
  779. package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
  780. package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
  781. package/src/view/elements/progress/segmented/playground/main.js +173 -0
  782. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
  783. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
  784. package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
  785. package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
  786. package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
  787. package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
  788. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
  789. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
  790. package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
  791. package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
  792. package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
  793. package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
  794. package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
  795. package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
  796. package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
  797. package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
  798. package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
  799. package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
  800. package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
  801. package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
  802. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
  803. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
  804. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
  805. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
  806. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -247
  807. package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
  808. package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
  809. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
  810. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
  811. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
  812. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
  813. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
  814. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
  815. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
  816. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
  817. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
  818. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
@@ -7,9 +7,9 @@
7
7
  */
8
8
  export const PARTICLE_EMITTER_PAGE_SIZE: number;
9
9
  /**
10
- * How big an emitter database's buffer starts out. The page address table takes 32 KB (two tables'
11
- * worth of `GPU_DATABASE_PAGE_LIMIT` u32 slots), so this leaves room for one page of each table —
12
- * around a hundred and forty emitters — before the database grows itself.
10
+ * How big an emitter database's buffer starts out. The page address table takes 48 KB (three
11
+ * tables' worth of `GPU_DATABASE_PAGE_LIMIT` u32 slots), so this leaves room for one page of each
12
+ * table — around a hundred and forty emitters — before the database grows itself.
13
13
  *
14
14
  * @type {number}
15
15
  */
@@ -18,21 +18,26 @@ export const PARTICLE_DATABASE_INITIAL_SIZE: number;
18
18
  export const PARTICLE_EMITTER_TABLE: "emitters";
19
19
  /** Name of the GPU-owned emitter state table within {@link PARTICLE_DATABASE_SPEC}. */
20
20
  export const PARTICLE_EMITTER_STATE_TABLE: "emitter_state";
21
+ /** Name of the transform binding table within {@link PARTICLE_DATABASE_SPEC}. */
22
+ export const PARTICLE_FIELD_BINDING_TABLE: "field_bindings";
21
23
  /**
22
- * Schema of the particle system's GPU database. Two tables, one row per emitter in each, at the
23
- * same row index:
24
+ * Schema of the particle system's GPU database. Two tables with one row per emitter in each, at the
25
+ * same row index, and a third of field-to-transform bindings:
24
26
  *
25
27
  * - `emitters` — CPU-authored and low-churn, exactly the shape `GPUDatabase` is for. Adding or
26
28
  * removing one emitter queues that one record for upload; the rest of the table is not touched,
27
29
  * and the pass shaders address rows by a stable id that survives its neighbours coming and going.
28
30
  * - `emitter_state` — GPU-owned ({@link ./PARTICLE_EMITTER_STATE.js}): claimed with a zero record
29
31
  * when the emitter's row is, then written only by the tick and spawn-command passes.
32
+ * - `field_bindings` — CPU-authored ({@link ./PARTICLE_FIELD_BINDING.js}): one row per field bound
33
+ * to a transform, at rows of its own rather than at an emitter's.
30
34
  *
31
- * One buffer for both is what keeps every pass that reads an emitter at one binding for the pair.
35
+ * One buffer for all three is what keeps every pass that reads an emitter at one binding for the
36
+ * record and its state.
32
37
  *
33
- * Programs and their constant pools are NOT here: they are variable-length and shared between
34
- * emitters, so they live in the packed {@link ../runtime/ProgramArena.js} buffer, referenced by the
35
- * offsets each emitter record carries.
38
+ * Programs, their constant pools and the field values are NOT here: programs are variable-length
39
+ * and shared between emitters, so they live in the packed {@link ../runtime/ProgramHeap.js} buffer
40
+ * with the field section after them, referenced by the offsets each emitter record carries.
36
41
  *
37
42
  * @type {GPUDatabaseDefinition}
38
43
  */
@@ -52,5 +57,11 @@ export const PARTICLE_EMITTER_DESCRIPTOR: GPUTypedTableDescriptor;
52
57
  * @type {GPUTypedTableDescriptor}
53
58
  */
54
59
  export const PARTICLE_EMITTER_STATE_DESCRIPTOR: GPUTypedTableDescriptor;
60
+ /**
61
+ * Descriptor for the transform binding table — the bind pass walks its pages, one thread a row.
62
+ *
63
+ * @type {GPUTypedTableDescriptor}
64
+ */
65
+ export const PARTICLE_FIELD_BINDING_DESCRIPTOR: GPUTypedTableDescriptor;
55
66
  import { GPUDatabaseDefinition } from "../../buffer/table/GPUDatabaseDefinition.js";
56
67
  //# sourceMappingURL=PARTICLE_DATABASE_SPEC.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PARTICLE_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,yCAFU,MAAM,CAEwC;AAExD;;;;;;GAMG;AACH,6CAFU,MAAM,CAE4C;AAE5D,uEAAuE;AACvE,gDAAiD;AAEjD,uFAAuF;AACvF,2DAA4D;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,qCAFU,qBAAqB,CAKA;AAc/B;;;;;;GAMG;AACH,kEAA8F;AAE9F;;;;;GAKG;AACH,wEAA0G;sCA/EpE,6CAA6C"}
1
+ {"version":3,"file":"PARTICLE_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,yCAFU,MAAM,CAEwC;AAExD;;;;;;GAMG;AACH,6CAFU,MAAM,CAE4C;AAE5D,uEAAuE;AACvE,gDAAiD;AAEjD,uFAAuF;AACvF,2DAA4D;AAE5D,iFAAiF;AACjF,4DAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qCAFU,qBAAqB,CAMA;AAc/B;;;;;;GAMG;AACH,kEAA8F;AAE9F;;;;;GAKG;AACH,wEAA0G;AAa1G;;;;GAIG;AACH,wEAA0G;sCAzGpE,6CAA6C"}
@@ -3,6 +3,7 @@ import { GPUDatabaseDefinition } from "../../buffer/table/GPUDatabaseDefinition.
3
3
  import { SCENE_DATABASE_SPEC } from "../../scene/SCENE_DATABASE_SPEC.js";
4
4
  import { PARTICLE_EMITTER_STATE_STRUCT } from "./PARTICLE_EMITTER_STATE.js";
5
5
  import { PARTICLE_EMITTER_STRUCT } from "./PARTICLE_EMITTER_STRUCT.js";
6
+ import { PARTICLE_FIELD_BINDING_STRUCT } from "./PARTICLE_FIELD_BINDING.js";
6
7
 
7
8
  /**
8
9
  * Emitters are counted in tens, not thousands, so the engine-wide default page (128 KB) would
@@ -14,13 +15,13 @@ import { PARTICLE_EMITTER_STRUCT } from "./PARTICLE_EMITTER_STRUCT.js";
14
15
  export const PARTICLE_EMITTER_PAGE_SIZE = 16 * KILOBYTE;
15
16
 
16
17
  /**
17
- * How big an emitter database's buffer starts out. The page address table takes 32 KB (two tables'
18
- * worth of `GPU_DATABASE_PAGE_LIMIT` u32 slots), so this leaves room for one page of each table —
19
- * around a hundred and forty emitters — before the database grows itself.
18
+ * How big an emitter database's buffer starts out. The page address table takes 48 KB (three
19
+ * tables' worth of `GPU_DATABASE_PAGE_LIMIT` u32 slots), so this leaves room for one page of each
20
+ * table — around a hundred and forty emitters — before the database grows itself.
20
21
  *
21
22
  * @type {number}
22
23
  */
23
- export const PARTICLE_DATABASE_INITIAL_SIZE = 64 * KILOBYTE;
24
+ export const PARTICLE_DATABASE_INITIAL_SIZE = 96 * KILOBYTE;
24
25
 
25
26
  /** Name of the emitter table within {@link PARTICLE_DATABASE_SPEC}. */
26
27
  export const PARTICLE_EMITTER_TABLE = "emitters";
@@ -28,27 +29,34 @@ export const PARTICLE_EMITTER_TABLE = "emitters";
28
29
  /** Name of the GPU-owned emitter state table within {@link PARTICLE_DATABASE_SPEC}. */
29
30
  export const PARTICLE_EMITTER_STATE_TABLE = "emitter_state";
30
31
 
32
+ /** Name of the transform binding table within {@link PARTICLE_DATABASE_SPEC}. */
33
+ export const PARTICLE_FIELD_BINDING_TABLE = "field_bindings";
34
+
31
35
  /**
32
- * Schema of the particle system's GPU database. Two tables, one row per emitter in each, at the
33
- * same row index:
36
+ * Schema of the particle system's GPU database. Two tables with one row per emitter in each, at the
37
+ * same row index, and a third of field-to-transform bindings:
34
38
  *
35
39
  * - `emitters` — CPU-authored and low-churn, exactly the shape `GPUDatabase` is for. Adding or
36
40
  * removing one emitter queues that one record for upload; the rest of the table is not touched,
37
41
  * and the pass shaders address rows by a stable id that survives its neighbours coming and going.
38
42
  * - `emitter_state` — GPU-owned ({@link ./PARTICLE_EMITTER_STATE.js}): claimed with a zero record
39
43
  * when the emitter's row is, then written only by the tick and spawn-command passes.
44
+ * - `field_bindings` — CPU-authored ({@link ./PARTICLE_FIELD_BINDING.js}): one row per field bound
45
+ * to a transform, at rows of its own rather than at an emitter's.
40
46
  *
41
- * One buffer for both is what keeps every pass that reads an emitter at one binding for the pair.
47
+ * One buffer for all three is what keeps every pass that reads an emitter at one binding for the
48
+ * record and its state.
42
49
  *
43
- * Programs and their constant pools are NOT here: they are variable-length and shared between
44
- * emitters, so they live in the packed {@link ../runtime/ProgramArena.js} buffer, referenced by the
45
- * offsets each emitter record carries.
50
+ * Programs, their constant pools and the field values are NOT here: programs are variable-length
51
+ * and shared between emitters, so they live in the packed {@link ../runtime/ProgramHeap.js} buffer
52
+ * with the field section after them, referenced by the offsets each emitter record carries.
46
53
  *
47
54
  * @type {GPUDatabaseDefinition}
48
55
  */
49
56
  export const PARTICLE_DATABASE_SPEC = GPUDatabaseDefinition.from({
50
57
  [PARTICLE_EMITTER_TABLE]: PARTICLE_EMITTER_STRUCT,
51
58
  [PARTICLE_EMITTER_STATE_TABLE]: PARTICLE_EMITTER_STATE_STRUCT,
59
+ [PARTICLE_FIELD_BINDING_TABLE]: PARTICLE_FIELD_BINDING_STRUCT,
52
60
  }, PARTICLE_EMITTER_PAGE_SIZE);
53
61
 
54
62
  // The transforms row of the emitter's entity, where the passes read its world matrix. Until the
@@ -79,3 +87,21 @@ export const PARTICLE_EMITTER_DESCRIPTOR = PARTICLE_DATABASE_SPEC.get(PARTICLE_E
79
87
  * @type {GPUTypedTableDescriptor}
80
88
  */
81
89
  export const PARTICLE_EMITTER_STATE_DESCRIPTOR = PARTICLE_DATABASE_SPEC.get(PARTICLE_EMITTER_STATE_TABLE);
90
+
91
+ // The row a binding reads, as for the emitter record's `node`: held through the scene's rows by
92
+ // whoever bound it, never by this database.
93
+ PARTICLE_DATABASE_SPEC.add_link({
94
+ table: PARTICLE_FIELD_BINDING_TABLE,
95
+ field: 'source',
96
+ target_database: SCENE_DATABASE_SPEC,
97
+ target_table: 'transforms',
98
+ nullable: false,
99
+ owning: false,
100
+ });
101
+
102
+ /**
103
+ * Descriptor for the transform binding table — the bind pass walks its pages, one thread a row.
104
+ *
105
+ * @type {GPUTypedTableDescriptor}
106
+ */
107
+ export const PARTICLE_FIELD_BINDING_DESCRIPTOR = PARTICLE_DATABASE_SPEC.get(PARTICLE_FIELD_BINDING_TABLE);
@@ -21,9 +21,10 @@ export function emitter_flags_blend(flags: number): number;
21
21
  export function emitter_flags_projection(flags: number): number;
22
22
  /**
23
23
  * One emitter's GPU record: which compiled program it runs and where that program's code and
24
- * constants sit in the {@link ../runtime/ProgramArena.js} buffers, plus the instance parameters the
25
- * tick / emit / simulate / render passes read — the scene node it hangs off, spawn rate,
26
- * feature flags, render-attribute bindings, atlas region and flipbook grid.
24
+ * constants and the emitter's block of emitter fields sit in the {@link ../runtime/ProgramHeap.js}
25
+ * buffer, plus the instance parameters the tick / emit / simulate / render passes read — the scene
26
+ * node it hangs off, spawn rate, feature flags, render-channel bindings, atlas region and flipbook
27
+ * grid.
27
28
  *
28
29
  * There is no transform here. An emitter is a scene node, and its world matrix is the `global` of
29
30
  * its row in the scene database's `transforms` table, composed on the GPU by the hierarchy pass
@@ -38,8 +39,8 @@ export function emitter_flags_projection(flags: number): number;
38
39
  * It lives in a `GPUDatabase` table (see {@link ./PARTICLE_DATABASE_SPEC.js}), so the layout below
39
40
  * is the *only* description of it that exists: the JS writer is
40
41
  * {@link ../../shader/type/serde/write_gpu_typed_buffer.js} and the WGSL reader is generated from
41
- * this same struct by the table descriptor. Nothing hand-packs an emitter word by word any more,
42
- * and there is no second copy of the offsets to keep in step.
42
+ * this same struct by the table descriptor. Nothing hand-packs an emitter word by word, and there is
43
+ * no second copy of the offsets to keep in step.
43
44
  *
44
45
  * `.pack()` reorders the fields to close the padding a declaration-order layout would leave; WGSL
45
46
  * field names are what shaders address, never offsets, so the reordering is invisible to them.
@@ -47,8 +48,8 @@ export function emitter_flags_projection(flags: number): number;
47
48
  * @type {WebGPUStruct}
48
49
  */
49
50
  export const PARTICLE_EMITTER_STRUCT: WebGPUStruct;
50
- /** Sentinel for an absent render-attribute binding. */
51
- export const EMITTER_ATTRIBUTE_ABSENT: 4294967295;
51
+ /** Sentinel for a render channel bound to no particle field. */
52
+ export const PARTICLE_FIELD_ABSENT: 4294967295;
52
53
  /**
53
54
  * Emitter flag bits. Blend mode occupies bits [4,6), projection mode bits [6,9).
54
55
  *
@@ -1 +1 @@
1
- {"version":3,"file":"PARTICLE_EMITTER_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js"],"names":[],"mappings":"AA2IA;;;;;;;;;GASG;AACH;IAP6B,QAAQ,GAA1B,OAAO;IACW,UAAU,GAA5B,OAAO;IACW,IAAI,GAAtB,OAAO;IACU,KAAK,GAAtB,MAAM;IACW,UAAU,GAA3B,MAAM;IACJ,MAAM,CAUlB;AAED,6DAA6D;AAC7D,2CADY,MAAM,GAAkB,MAAM,CAGzC;AAED,kEAAkE;AAClE,gDADY,MAAM,GAAkB,MAAM,CAGzC;AApKD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCAFU,YAAY,CAmEO;AAE7B,uDAAuD;AACvD,kDAAmD;AAEnD;;;;;;GAMG;AACH;;;;GAIG;AAEH,kGAAkG;AAClG;;;;GAIG;AAKH;;;;GAIG;AACH;;;;;;GAMG;AAmCH,uEAAuE;AACvE;;;;;GAEG;6BA3K0B,mCAAmC"}
1
+ {"version":3,"file":"PARTICLE_EMITTER_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js"],"names":[],"mappings":"AAoJA;;;;;;;;;GASG;AACH;IAP6B,QAAQ,GAA1B,OAAO;IACW,UAAU,GAA5B,OAAO;IACW,IAAI,GAAtB,OAAO;IACU,KAAK,GAAtB,MAAM;IACW,UAAU,GAA3B,MAAM;IACJ,MAAM,CAUlB;AAED,6DAA6D;AAC7D,2CADY,MAAM,GAAkB,MAAM,CAGzC;AAED,kEAAkE;AAClE,gDADY,MAAM,GAAkB,MAAM,CAGzC;AA7KD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,sCAFU,YAAY,CA2EO;AAE7B,gEAAgE;AAChE,+CAAgD;AAEhD;;;;;;GAMG;AACH;;;;GAIG;AAEH,kGAAkG;AAClG;;;;GAIG;AAKH;;;;GAIG;AACH;;;;;;GAMG;AAmCH,uEAAuE;AACvE;;;;;GAEG;6BApL0B,mCAAmC"}
@@ -3,9 +3,10 @@ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
3
 
4
4
  /**
5
5
  * One emitter's GPU record: which compiled program it runs and where that program's code and
6
- * constants sit in the {@link ../runtime/ProgramArena.js} buffers, plus the instance parameters the
7
- * tick / emit / simulate / render passes read — the scene node it hangs off, spawn rate,
8
- * feature flags, render-attribute bindings, atlas region and flipbook grid.
6
+ * constants and the emitter's block of emitter fields sit in the {@link ../runtime/ProgramHeap.js}
7
+ * buffer, plus the instance parameters the tick / emit / simulate / render passes read — the scene
8
+ * node it hangs off, spawn rate, feature flags, render-channel bindings, atlas region and flipbook
9
+ * grid.
9
10
  *
10
11
  * There is no transform here. An emitter is a scene node, and its world matrix is the `global` of
11
12
  * its row in the scene database's `transforms` table, composed on the GPU by the hierarchy pass
@@ -20,8 +21,8 @@ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
20
21
  * It lives in a `GPUDatabase` table (see {@link ./PARTICLE_DATABASE_SPEC.js}), so the layout below
21
22
  * is the *only* description of it that exists: the JS writer is
22
23
  * {@link ../../shader/type/serde/write_gpu_typed_buffer.js} and the WGSL reader is generated from
23
- * this same struct by the table descriptor. Nothing hand-packs an emitter word by word any more,
24
- * and there is no second copy of the offsets to keep in step.
24
+ * this same struct by the table descriptor. Nothing hand-packs an emitter word by word, and there is
25
+ * no second copy of the offsets to keep in step.
25
26
  *
26
27
  * `.pack()` reorders the fields to close the padding a declaration-order layout would leave; WGSL
27
28
  * field names are what shaders address, never offsets, so the reordering is invisible to them.
@@ -37,7 +38,7 @@ export const PARTICLE_EMITTER_STRUCT = WebGPUStruct.from({
37
38
  update_offset: u32,
38
39
  /** UPDATE instruction count */
39
40
  update_count: u32,
40
- /** base into the shared constant pool, in vec4 units */
41
+ /** base into the shared constant pool, in words */
41
42
  constant_offset: u32,
42
43
  /** base RNG seed */
43
44
  seed: u32,
@@ -60,21 +61,21 @@ export const PARTICLE_EMITTER_STRUCT = WebGPUStruct.from({
60
61
  */
61
62
  generation: u32,
62
63
 
63
- /** attribute word offset of world position (or {@link EMITTER_ATTRIBUTE_ABSENT}) */
64
+ /** particle field word offset of world position (or {@link PARTICLE_FIELD_ABSENT}) */
64
65
  render_position: u32,
65
- /** attribute word offset of size */
66
+ /** particle field word offset of size */
66
67
  render_size: u32,
67
- /** attribute word offset of rgba colour */
68
+ /** particle field word offset of rgba colour */
68
69
  render_color: u32,
69
70
  /**
70
- * attribute word offset of the orientation: a quaternion (x, y, z, w) turning the sprite inside
71
- * its projection mode's frame — in the world under FACING_WORLD, relative to the view under
72
- * BILLBOARD, where a turn about +Z is a roll
71
+ * particle field word offset of the orientation: a quaternion (x, y, z, w) turning the sprite
72
+ * inside its projection mode's frame — in the world under FACING_WORLD, relative to the view
73
+ * under BILLBOARD, where a turn about +Z is a roll
73
74
  */
74
75
  render_orientation: u32,
75
- /** attribute word offset of flipbook frame index */
76
+ /** particle field word offset of flipbook frame index */
76
77
  render_frame: u32,
77
- /** attribute word offset of velocity (STRETCHED projection) */
78
+ /** particle field word offset of velocity (STRETCHED projection) */
78
79
  render_velocity: u32,
79
80
 
80
81
  /** uv offset .xy + uv scale .zw */
@@ -93,10 +94,18 @@ export const PARTICLE_EMITTER_STRUCT = WebGPUStruct.from({
93
94
  * climbing with churn.
94
95
  */
95
96
  program_id: u32,
97
+
98
+ /**
99
+ * First word of this emitter's block of emitter fields, counted from the start of the packed
100
+ * program buffer's field section — see {@link ../runtime/ProgramHeap.js}. The block is this
101
+ * emitter's alone, where the program is shared. `0` for an emitter whose effect declares no
102
+ * emitter fields, which reads nothing.
103
+ */
104
+ field_offset: u32,
96
105
  }, "ParticleEmitter").pack();
97
106
 
98
- /** Sentinel for an absent render-attribute binding. */
99
- export const EMITTER_ATTRIBUTE_ABSENT = 0xffffffff;
107
+ /** Sentinel for a render channel bound to no particle field. */
108
+ export const PARTICLE_FIELD_ABSENT = 0xffffffff;
100
109
 
101
110
  /**
102
111
  * Emitter flag bits. Blend mode occupies bits [4,6), projection mode bits [6,9).
@@ -0,0 +1,51 @@
1
+ /**
2
+ * What a transform binding writes into a field: which part of the bound row's composed `global`.
3
+ * Each is read the way the emitter's own builtin of the same name is, so a field bound to an
4
+ * entity reads as that entity's `EMITTER_POSITION` / `_DIRECTION` / `_UP` would.
5
+ *
6
+ * Wire format of the binding table, which only this system writes.
7
+ */
8
+ export type PARTICLE_FIELD_BINDING_CHANNEL = number;
9
+ /**
10
+ * What a transform binding writes into a field: which part of the bound row's composed `global`.
11
+ * Each is read the way the emitter's own builtin of the same name is, so a field bound to an
12
+ * entity reads as that entity's `EMITTER_POSITION` / `_DIRECTION` / `_UP` would.
13
+ *
14
+ * Wire format of the binding table, which only this system writes.
15
+ *
16
+ * @enum {number}
17
+ */
18
+ export const PARTICLE_FIELD_BINDING_CHANNEL: Readonly<{
19
+ /** the origin, three words */
20
+ POSITION: 0;
21
+ /** normalised -Z, three words */
22
+ DIRECTION: 1;
23
+ /** normalised +Y, three words */
24
+ UP: 2;
25
+ /** the rotation as a quaternion (x, y, z, w), scale and any mirror removed, four words */
26
+ ORIENTATION: 3;
27
+ }>;
28
+ /**
29
+ * Words each {@link PARTICLE_FIELD_BINDING_CHANNEL} writes. A field is bound to a channel only at
30
+ * exactly this width.
31
+ *
32
+ * @type {Readonly<Object<number, number>>}
33
+ */
34
+ export const PARTICLE_FIELD_BINDING_CHANNEL_COMPONENTS: Readonly<{
35
+ [x: number]: number;
36
+ }>;
37
+ /**
38
+ * One transform binding: a row of the scene's `transforms` table, written every frame into a field
39
+ * of the program heap's field section — a global field, or a word of an emitter's block.
40
+ *
41
+ * A row of the `field_bindings` table of the particle database ({@link ./PARTICLE_DATABASE_SPEC.js}),
42
+ * staged by the CPU, read by `shaders/shader_particle_field_bind.js`. The bound words are written
43
+ * from scratch every frame, so a CPU upload landing on one is overwritten before any VM pass reads
44
+ * it — the same argument that lets the scene's `transforms` table mix CPU fields with a GPU-written
45
+ * `global`.
46
+ *
47
+ * @type {WebGPUStruct}
48
+ */
49
+ export const PARTICLE_FIELD_BINDING_STRUCT: WebGPUStruct;
50
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
51
+ //# sourceMappingURL=PARTICLE_FIELD_BINDING.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PARTICLE_FIELD_BINDING.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js"],"names":[],"mappings":";;;;;;;6CAUU,MAAM;AAPhB;;;;;;;;GAQG;AACH;IACI,8BAA8B;;IAE9B,iCAAiC;;IAEjC,iCAAiC;;IAEjC,0FAA0F;;GAE3F;AAEH;;;;;GAKG;AACH,wDAFU;QAAgB,MAAM,GAAE,MAAM;EAAE,CAOvC;AAEH;;;;;;;;;;;GAWG;AACH,4CAFU,YAAY,CASY;6BAtDL,mCAAmC"}
@@ -0,0 +1,56 @@
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+
4
+ /**
5
+ * What a transform binding writes into a field: which part of the bound row's composed `global`.
6
+ * Each is read the way the emitter's own builtin of the same name is, so a field bound to an
7
+ * entity reads as that entity's `EMITTER_POSITION` / `_DIRECTION` / `_UP` would.
8
+ *
9
+ * Wire format of the binding table, which only this system writes.
10
+ *
11
+ * @enum {number}
12
+ */
13
+ export const PARTICLE_FIELD_BINDING_CHANNEL = Object.freeze({
14
+ /** the origin, three words */
15
+ POSITION: 0,
16
+ /** normalised -Z, three words */
17
+ DIRECTION: 1,
18
+ /** normalised +Y, three words */
19
+ UP: 2,
20
+ /** the rotation as a quaternion (x, y, z, w), scale and any mirror removed, four words */
21
+ ORIENTATION: 3,
22
+ });
23
+
24
+ /**
25
+ * Words each {@link PARTICLE_FIELD_BINDING_CHANNEL} writes. A field is bound to a channel only at
26
+ * exactly this width.
27
+ *
28
+ * @type {Readonly<Object<number, number>>}
29
+ */
30
+ export const PARTICLE_FIELD_BINDING_CHANNEL_COMPONENTS = Object.freeze({
31
+ [PARTICLE_FIELD_BINDING_CHANNEL.POSITION]: 3,
32
+ [PARTICLE_FIELD_BINDING_CHANNEL.DIRECTION]: 3,
33
+ [PARTICLE_FIELD_BINDING_CHANNEL.UP]: 3,
34
+ [PARTICLE_FIELD_BINDING_CHANNEL.ORIENTATION]: 4,
35
+ });
36
+
37
+ /**
38
+ * One transform binding: a row of the scene's `transforms` table, written every frame into a field
39
+ * of the program heap's field section — a global field, or a word of an emitter's block.
40
+ *
41
+ * A row of the `field_bindings` table of the particle database ({@link ./PARTICLE_DATABASE_SPEC.js}),
42
+ * staged by the CPU, read by `shaders/shader_particle_field_bind.js`. The bound words are written
43
+ * from scratch every frame, so a CPU upload landing on one is overwritten before any VM pass reads
44
+ * it — the same argument that lets the scene's `transforms` table mix CPU fields with a GPU-written
45
+ * `global`.
46
+ *
47
+ * @type {WebGPUStruct}
48
+ */
49
+ export const PARTICLE_FIELD_BINDING_STRUCT = WebGPUStruct.from({
50
+ /** row of the scene database's `transforms` table whose composed `global` is read */
51
+ source: u32,
52
+ /** first word written, counted from the field section's base */
53
+ word: u32,
54
+ /** see {@link PARTICLE_FIELD_BINDING_CHANNEL} */
55
+ channel: u32,
56
+ }, "ParticleFieldBinding").pack();
@@ -1 +1 @@
1
- {"version":3,"file":"particle_emitter_record.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/particle_emitter_record.js"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,6CANW,MAAM,WACN,OAAO,+BAA+B,EAAE,eAAe,WACvD,OAAO,yCAAyC,EAAE,yBAAyB,GAEzE,MAAM,CAwClB;AAED;;;;;GAKG;AACH,yCAFa,MAAM,CA2BlB"}
1
+ {"version":3,"file":"particle_emitter_record.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/particle_emitter_record.js"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,6CANW,MAAM,WACN,OAAO,+BAA+B,EAAE,eAAe,WACvD,OAAO,yCAAyC,EAAE,yBAAyB,GAEzE,MAAM,CAyClB;AAED;;;;;GAKG;AACH,yCAFa,MAAM,CA4BlB"}
@@ -43,6 +43,7 @@ export function write_emitter_record(record, emitter, context) {
43
43
  record.update_count = placement.update_count;
44
44
  record.constant_offset = placement.constant_offset;
45
45
  record.program_id = placement.program_id;
46
+ record.field_offset = context.field_block === null ? 0 : context.field_block.offset;
46
47
 
47
48
  // Two emitters running one program produce identical particles from identical seeds, and 0 is
48
49
  // what an emitter that was never given one has. The generation stands in: it is distinct for
@@ -83,6 +84,7 @@ export function create_emitter_record() {
83
84
  update_count: 0,
84
85
  constant_offset: 0,
85
86
  program_id: 0,
87
+ field_offset: 0,
86
88
 
87
89
  seed: 0,
88
90
  flags: 0,
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * Every stock operation that takes no parameters of its own is a method here, taken from the library
11
11
  * rather than listed — a type added to it is callable the same day. The rest — `const`, `swizzle`,
12
- * `random`, `curveLiteral` and the attribute nodes — need a parameter and are reached through
12
+ * `random`, `curveLiteral` and the particle field nodes — need a parameter and are reached through
13
13
  * {@link #op}, or through the shorthands below where there is an obvious one.
14
14
  *
15
15
  * A number where a value is expected becomes a literal, so `g.mul(v, 0.5)` is what it looks like.
@@ -17,7 +17,7 @@ import {
17
17
  *
18
18
  * Every stock operation that takes no parameters of its own is a method here, taken from the library
19
19
  * rather than listed — a type added to it is callable the same day. The rest — `const`, `swizzle`,
20
- * `random`, `curveLiteral` and the attribute nodes — need a parameter and are reached through
20
+ * `random`, `curveLiteral` and the particle field nodes — need a parameter and are reached through
21
21
  * {@link #op}, or through the shorthands below where there is an obvious one.
22
22
  *
23
23
  * A number where a value is expected becomes a literal, so `g.mul(v, 0.5)` is what it looks like.
@@ -37,10 +37,13 @@ export class ParticleNodeDescription extends NodeDescription {
37
37
  * - `context.input_types` → port name -> the type each input is read as,
38
38
  * - `context.source_types` → port name -> the type of the value wired into each input,
39
39
  * - `context.parameters` → the {@link NodeInstance}'s parameters,
40
- * - `context.layout` → the {@link ../layout/ParticleLayout.js} for attribute offsets,
41
- * - `context.asm` → the {@link ../isa/ParticleAssembler.js} for interning constants.
40
+ * - `context.layout` → the {@link ../layout/ParticleLayout.js} for particle field offsets,
41
+ * - `context.emitter_layout` → the layout of the effect's emitter fields, if it has one,
42
+ * - `context.global_layout` → the global fields the effect declares, if any,
43
+ * - `context.asm` → the {@link ../isa/ParticleAssembler.js} for interning constants and
44
+ * importing global fields.
42
45
  *
43
- * @type {function(InstructionStream, {in: function(string):number, out: number|undefined, width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout, asm: ParticleAssembler}):void}
46
+ * @type {function(InstructionStream, {in: function(string):number, out: number|undefined, width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined, asm: ParticleAssembler}):void}
44
47
  */
45
48
  emit: (arg0: InstructionStream, arg1: {
46
49
  in: (arg0: string) => number;
@@ -55,6 +58,8 @@ export class ParticleNodeDescription extends NodeDescription {
55
58
  };
56
59
  parameters: object;
57
60
  layout: ParticleLayout;
61
+ emitter_layout: ParticleLayout | undefined;
62
+ global_layout: ParticleLayout | undefined;
58
63
  asm: ParticleAssembler;
59
64
  }) => void;
60
65
  /**
@@ -71,9 +76,9 @@ export class ParticleNodeDescription extends NodeDescription {
71
76
  * is as wide as the widest input, and every input is read at that width. A scalar meeting a
72
77
  * vector broadcasts; a vector meeting a wider one is extended with zeros. A source overrides
73
78
  * this to name its own type from its parameters; a reduction, to produce a scalar whatever it
74
- * reads; a sink, to read what its attribute is.
79
+ * reads; a sink, to read what its particle field is.
75
80
  *
76
- * @type {function({inputs: Object<string, ParticleValueType|null>, parameters: object, layout: ParticleLayout|undefined}):{output: ParticleValueType|null, inputs: Object<string, ParticleValueType|null>}}
81
+ * @type {function({inputs: Object<string, ParticleValueType|null>, parameters: object, layout: ParticleLayout|undefined, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined}):{output: ParticleValueType|null, inputs: Object<string, ParticleValueType|null>}}
77
82
  */
78
83
  infer_types: (arg0: {
79
84
  inputs: {
@@ -81,6 +86,8 @@ export class ParticleNodeDescription extends NodeDescription {
81
86
  };
82
87
  parameters: object;
83
88
  layout: ParticleLayout | undefined;
89
+ emitter_layout: ParticleLayout | undefined;
90
+ global_layout: ParticleLayout | undefined;
84
91
  }) => {
85
92
  output: ParticleValueType | null;
86
93
  inputs: {
@@ -94,10 +101,10 @@ export class ParticleNodeDescription extends NodeDescription {
94
101
  * Most nodes are element-wise and run at as many lanes as are wanted of them, never more than
95
102
  * their type has: lanes nobody reads are not computed. The ones that override this are the
96
103
  * ones with a shape of their own — a reduction reads every lane of its input however few are
97
- * wanted of its one-lane result, a sink is as wide as the attribute it writes, and a source
98
- * that can fill lanes for free runs at the full demand.
104
+ * wanted of its one-lane result, a sink is as wide as the particle field it writes, and a
105
+ * source that can fill lanes for free runs at the full demand.
99
106
  *
100
- * @type {function({type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, demand: number, parameters: object, layout: ParticleLayout}):number}
107
+ * @type {function({type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, demand: number, parameters: object, layout: ParticleLayout, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined}):number}
101
108
  */
102
109
  operation_width: (arg0: {
103
110
  type: ParticleValueType | null;
@@ -110,6 +117,8 @@ export class ParticleNodeDescription extends NodeDescription {
110
117
  demand: number;
111
118
  parameters: object;
112
119
  layout: ParticleLayout;
120
+ emitter_layout: ParticleLayout | undefined;
121
+ global_layout: ParticleLayout | undefined;
113
122
  }) => number;
114
123
  /**
115
124
  * How many lanes the node reads of each input, given the width its own operation runs at.
@@ -119,7 +128,7 @@ export class ParticleNodeDescription extends NodeDescription {
119
128
  * the compiler's cue to widen it: a scalar is broadcast, a vector extended with zeros, once,
120
129
  * after the value is produced.
121
130
  *
122
- * @type {function({operation_width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout}):Object<string, number>}
131
+ * @type {function({operation_width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined}):Object<string, number>}
123
132
  */
124
133
  input_widths: (arg0: {
125
134
  operation_width: number;
@@ -132,6 +141,8 @@ export class ParticleNodeDescription extends NodeDescription {
132
141
  };
133
142
  parameters: object;
134
143
  layout: ParticleLayout;
144
+ emitter_layout: ParticleLayout | undefined;
145
+ global_layout: ParticleLayout | undefined;
135
146
  }) => {
136
147
  [x: string]: number;
137
148
  };
@@ -165,8 +176,8 @@ export class ParticleNodeDescription extends NodeDescription {
165
176
  expand: (arg0: object) => import("./ParticleNodeGroup.js").ParticleNodeGroup | null;
166
177
  /**
167
178
  * A node with no output ports produces no value, so nothing can consume it; the only reason to
168
- * emit it is its side effect (an attribute write, a kill). Such nodes are the roots the compiler
169
- * traverses from.
179
+ * emit it is its side effect (a particle field write, a kill). Such nodes are the roots the
180
+ * compiler traverses from.
170
181
  * @returns {boolean}
171
182
  */
172
183
  get is_sink(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleNodeDescription.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleNodeDescription.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH;IAEI;;;;;;;;;OASG;IACH,MAFU,MAAM,CAEN;IAEV;;;;;;;;;;;;;;;OAeG;IACH,sCAFsC;QAAC,EAAE,SAAW,MAAM,KAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAC,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAC;QAAC,WAAW;gBAAS,MAAM;UAAqB;QAAC,YAAY;gBAAS,MAAM;UAAqB;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,iBAAiB;QAAC,GAAG,oBAAmB;KAAC,KAAE,IAAI,CAEtS;IAEZ;;;;;;;;;;;;;;;;;OAiBG;IACH,oBAFmB;QAAC,MAAM;gBAAS,MAAM,GAAE,oBAAkB,IAAI;UAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAe,SAAS,CAAA;KAAC,KAAE;QAAC,MAAM,EAAE,oBAAkB,IAAI,CAAC;QAAC,MAAM;gBAAS,MAAM,GAAE,oBAAkB,IAAI;UAAC;KAAC,CAYzM;IAEF;;;;;;;;;;;OAWG;IACH,wBAFmB;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAC;QAAC,WAAW;gBAAS,MAAM;UAAqB;QAAC,YAAY;gBAAS,MAAM;UAAqB;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,iBAAgB;KAAC,KAAE,MAAM,CAE5I;IAE1E;;;;;;;;;OASG;IACH,qBAFmB;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAC;QAAC,WAAW;gBAAS,MAAM;UAAqB;QAAC,YAAY;gBAAS,MAAM;UAAqB;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,iBAAgB;KAAC;YAAS,MAAM,GAAE,MAAM;MAEpN;IAE1B;;;;;OAKG;IACH,qBAFmB;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAA;KAAC,KAAE,MAAM,CAE1B;IAExD;;;;;;;;;;;;;;;;OAgBG;IACH,eAFmB,MAAM,KAAE,OAAO,wBAAwB,EAAE,iBAAiB,GAAC,IAAI,CAEpE;IAEd;;;;;OAKG;IACH,uBAEC;IAGL;;;OAGG;IACH,oCAFU,OAAO,CAE0C;CAN1D;gCAhJ+B,2DAA2D"}
1
+ {"version":3,"file":"ParticleNodeDescription.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleNodeDescription.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH;IAEI;;;;;;;;;OASG;IACH,MAFU,MAAM,CAEN;IAEV;;;;;;;;;;;;;;;;;;OAkBG;IACH,sCAFsC;QAAC,EAAE,SAAW,MAAM,KAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAC,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAC;QAAC,WAAW;gBAAS,MAAM;UAAqB;QAAC,YAAY;gBAAS,MAAM;UAAqB;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,iBAAiB;QAAC,cAAc,EAAE,iBAAe,SAAS,CAAC;QAAC,aAAa,EAAE,iBAAe,SAAS,CAAC;QAAC,GAAG,oBAAmB;KAAC,KAAE,IAAI,CAEzX;IAEZ;;;;;;;;;;;;;;;;;OAiBG;IACH,oBAFmB;QAAC,MAAM;gBAAS,MAAM,GAAE,oBAAkB,IAAI;UAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAe,SAAS,CAAC;QAAC,cAAc,EAAE,iBAAe,SAAS,CAAC;QAAC,aAAa,EAAE,iBAAe,SAAS,CAAA;KAAC,KAAE;QAAC,MAAM,EAAE,oBAAkB,IAAI,CAAC;QAAC,MAAM;gBAAS,MAAM,GAAE,oBAAkB,IAAI;UAAC;KAAC,CAY5R;IAEF;;;;;;;;;;;OAWG;IACH,wBAFmB;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAC;QAAC,WAAW;gBAAS,MAAM;UAAqB;QAAC,YAAY;gBAAS,MAAM;UAAqB;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,iBAAiB;QAAC,cAAc,EAAE,iBAAe,SAAS,CAAC;QAAC,aAAa,EAAE,iBAAe,SAAS,CAAA;KAAC,KAAE,MAAM,CAE/N;IAE1E;;;;;;;;;OASG;IACH,qBAFmB;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAC;QAAC,WAAW;gBAAS,MAAM;UAAqB;QAAC,YAAY;gBAAS,MAAM;UAAqB;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,iBAAiB;QAAC,cAAc,EAAE,iBAAe,SAAS,CAAC;QAAC,aAAa,EAAE,iBAAe,SAAS,CAAA;KAAC;YAAS,MAAM,GAAE,MAAM;MAEvS;IAE1B;;;;;OAKG;IACH,qBAFmB;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAkB,IAAI,CAAA;KAAC,KAAE,MAAM,CAE1B;IAExD;;;;;;;;;;;;;;;;OAgBG;IACH,eAFmB,MAAM,KAAE,OAAO,wBAAwB,EAAE,iBAAiB,GAAC,IAAI,CAEpE;IAEd;;;;;OAKG;IACH,uBAEC;IAGL;;;OAGG;IACH,oCAFU,OAAO,CAE0C;CAN1D;gCAnJ+B,2DAA2D"}
@@ -44,10 +44,13 @@ export class ParticleNodeDescription extends NodeDescription {
44
44
  * - `context.input_types` → port name -> the type each input is read as,
45
45
  * - `context.source_types` → port name -> the type of the value wired into each input,
46
46
  * - `context.parameters` → the {@link NodeInstance}'s parameters,
47
- * - `context.layout` → the {@link ../layout/ParticleLayout.js} for attribute offsets,
48
- * - `context.asm` → the {@link ../isa/ParticleAssembler.js} for interning constants.
47
+ * - `context.layout` → the {@link ../layout/ParticleLayout.js} for particle field offsets,
48
+ * - `context.emitter_layout` → the layout of the effect's emitter fields, if it has one,
49
+ * - `context.global_layout` → the global fields the effect declares, if any,
50
+ * - `context.asm` → the {@link ../isa/ParticleAssembler.js} for interning constants and
51
+ * importing global fields.
49
52
  *
50
- * @type {function(InstructionStream, {in: function(string):number, out: number|undefined, width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout, asm: ParticleAssembler}):void}
53
+ * @type {function(InstructionStream, {in: function(string):number, out: number|undefined, width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined, asm: ParticleAssembler}):void}
51
54
  */
52
55
  emit = noop;
53
56
 
@@ -65,9 +68,9 @@ export class ParticleNodeDescription extends NodeDescription {
65
68
  * is as wide as the widest input, and every input is read at that width. A scalar meeting a
66
69
  * vector broadcasts; a vector meeting a wider one is extended with zeros. A source overrides
67
70
  * this to name its own type from its parameters; a reduction, to produce a scalar whatever it
68
- * reads; a sink, to read what its attribute is.
71
+ * reads; a sink, to read what its particle field is.
69
72
  *
70
- * @type {function({inputs: Object<string, ParticleValueType|null>, parameters: object, layout: ParticleLayout|undefined}):{output: ParticleValueType|null, inputs: Object<string, ParticleValueType|null>}}
73
+ * @type {function({inputs: Object<string, ParticleValueType|null>, parameters: object, layout: ParticleLayout|undefined, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined}):{output: ParticleValueType|null, inputs: Object<string, ParticleValueType|null>}}
71
74
  */
72
75
  infer_types = ({ inputs }) => {
73
76
  const output = particle_widest_type(Object.values(inputs));
@@ -88,10 +91,10 @@ export class ParticleNodeDescription extends NodeDescription {
88
91
  * Most nodes are element-wise and run at as many lanes as are wanted of them, never more than
89
92
  * their type has: lanes nobody reads are not computed. The ones that override this are the
90
93
  * ones with a shape of their own — a reduction reads every lane of its input however few are
91
- * wanted of its one-lane result, a sink is as wide as the attribute it writes, and a source
92
- * that can fill lanes for free runs at the full demand.
94
+ * wanted of its one-lane result, a sink is as wide as the particle field it writes, and a
95
+ * source that can fill lanes for free runs at the full demand.
93
96
  *
94
- * @type {function({type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, demand: number, parameters: object, layout: ParticleLayout}):number}
97
+ * @type {function({type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, demand: number, parameters: object, layout: ParticleLayout, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined}):number}
95
98
  */
96
99
  operation_width = ({ type, demand }) => Math.min(type.components, demand);
97
100
 
@@ -103,7 +106,7 @@ export class ParticleNodeDescription extends NodeDescription {
103
106
  * the compiler's cue to widen it: a scalar is broadcast, a vector extended with zeros, once,
104
107
  * after the value is produced.
105
108
  *
106
- * @type {function({operation_width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout}):Object<string, number>}
109
+ * @type {function({operation_width: number, type: ParticleValueType|null, input_types: Object<string, ParticleValueType>, source_types: Object<string, ParticleValueType>, parameters: object, layout: ParticleLayout, emitter_layout: ParticleLayout|undefined, global_layout: ParticleLayout|undefined}):Object<string, number>}
107
110
  */
108
111
  input_widths = () => ({});
109
112
 
@@ -136,8 +139,8 @@ export class ParticleNodeDescription extends NodeDescription {
136
139
 
137
140
  /**
138
141
  * A node with no output ports produces no value, so nothing can consume it; the only reason to
139
- * emit it is its side effect (an attribute write, a kill). Such nodes are the roots the compiler
140
- * traverses from.
142
+ * emit it is its side effect (a particle field write, a kill). Such nodes are the roots the
143
+ * compiler traverses from.
141
144
  * @returns {boolean}
142
145
  */
143
146
  get is_sink() {